/*******************************************************************************
 * Copyright (c) 2006 Sybase, Inc. and others.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Sybase, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.pagedesigner.editors.palette;

import java.util.List;

import org.eclipse.core.resources.IProject;
import org.eclipse.jst.pagedesigner.editors.palette.impl.TaglibPaletteDrawer;

/**
 * PaletteItemManager interface.
 * 
 * NOT intended to be implemented by clients
 * 
 * @author mengbo
 */
public interface IPaletteItemManager {
	/**
	 * @return IProject
	 */
	public IProject getProject();
	
	/**
	 * @return list of {@link TaglibPaletteDrawer}s being managed for this project 
	 */
	public List/*TaglibPaletteDrawer*/ getAllCategories();

	/**
	 * Create a TaglibPaletteDrawer with given label for given id
	 * 
	 * @param id
	 * @param label 
	 * @return TaglibPaletteDrawer
	 */
	public TaglibPaletteDrawer createTaglibPaletteDrawer(String id, String label);

	/**
	 * Retrieve the TaglibPaletteDrawer by id.  May be null.
	 * 
	 * @param id
	 * @return TaglibPaletteDrawer
	 */
	public TaglibPaletteDrawer getTaglibPalletteDrawer(String id);

	/**
	 * Locate by id, and if not found,  create a TaglibPaletteDrawer using label and id
	 * 
	 * @param id
	 * @param label
	 * @return TaglibPaletteDrawer
	 */
	public TaglibPaletteDrawer findOrCreateCategory(String id, String label);

	/**
	 * Adds a listener to the list of those notified when the model contents are
	 * replaced
	 * 
	 * @param listener -
	 *            the listener to add
	 */
	void addEntryChangeListener(IEntryChangeListener listener);

	/**
	 * Adds a listener to the list of those notified when the model contents are
	 * replaced
	 * 
	 * @param listener -
	 *            the listener to remove
	 */
	void removeEntryChangeListener(IEntryChangeListener listener);
}
