/*******************************************************************************
 * Copyright (c) 2007 Oracle Corporation 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:
 *     Oracle Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.pagedesigner.editors.properties;

import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
import org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature;
import org.eclipse.swt.widgets.Composite;

/**
 * Property descriptor for metadata enabled tag attributes in the WPE property pages
 */
public interface IPropertyPageDescriptor extends IMetaDataEnabledFeature, IAdaptable{
	/**
	 * Trait id for defining quick edit tab sections.   Value must be of type qe:QuickEditTabSections
	 * eg. <value xsi:type="qe:QuickEditTabSections">
	 */
	public static final String QUICK_EDIT_TAB = "quick-edit-tab";
	/**
	 * Trait id for category name value
	 */
	public static final String PROP_DESC_CATEGORY = "category";
	
//	/**
//	 * Trait id for fully qualified cell editor class name
//	 */
//	public static final String PROP_DESC_CELL_EDITOR = "cell-editor";
//	/**
//	 * Trait id for fully qualified dialog field editor name
//	 */
//	public static final String PROP_DESC_DIALOG_FIELD_EDITOR = "dialog-field-editor";
	
	/**
	 * @return name of attribute.  Must not be null.
	 */
	public String getAttributeName();
	/**
	 * @return category name.  Must not be null.
	 */
	public String getCategory();
	/**
	 * @return label to use.  Must not be null.
	 */
	public String getLabel();
	/**
	 * @return description.   May return null.
	 */
	public String getDescription();
	/**
	 * @return whether this is a required property.   Default false.
	 */
	public boolean isRequired();
	/**
	 * @param parent
	 * @return cell editor to use.   May be null.
	 */
	public CellEditor getCellEditor(Composite parent);
	/**
	 * @return dialog field editor to use.   May be null.
	 */
	public DialogField getDialogFieldEditor();
	/**
	 * @return uri. Must not be null.
	 */
	public String getUri();
	/**
	 * @return tag name.  Must not be null.
	 */
	public String getTagName();
	/**
	 * @return fully qualified attribute-value-runtime-type as String
	 */
	public String getValueType();
}
