/******************************************************************************* * Copyright (c) 2007 Oracle Corporation. * 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 - initial API and implementation * ********************************************************************************/ package org.eclipse.jst.pagedesigner.properties.celleditors; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jst.jsf.common.metadata.Trait; import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataDomainContext; import org.eclipse.jst.jsf.common.metadata.internal.TraitValueHelper; import org.eclipse.jst.jsf.common.metadata.query.internal.MetaDataQueryContextFactory; import org.eclipse.jst.jsf.common.metadata.query.internal.MetaDataQueryFactory; import org.eclipse.jst.jsf.common.metadata.query.internal.taglib.ITaglibDomainMetaDataQuery; import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField; import org.eclipse.jst.jsf.metadataprocessors.features.IDefaultValue; import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues; import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor; import org.eclipse.jst.pagedesigner.jsp.core.IJSPCoreConstants; import org.eclipse.jst.pagedesigner.meta.IAttributeRuntimeValueType; import org.eclipse.jst.pagedesigner.meta.ITagAttributeCellEditorFactory; import org.eclipse.jst.pagedesigner.properties.dialogfields.MDEnabledComboDialogField; import org.eclipse.jst.pagedesigner.ui.dialogfields.ClasspathResourceButtonDialogField; import org.eclipse.jst.pagedesigner.ui.dialogfields.ContextableResourceButtonDialogField; import org.eclipse.jst.pagedesigner.ui.dialogfields.StyleButtonDialogField; import org.eclipse.jst.pagedesigner.utils.StructuredModelUtil; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; import org.w3c.dom.Element; /** * * @author mengbo */ @SuppressWarnings("deprecation") public class CellEditorFactory implements ITagAttributeCellEditorFactory { public CellEditor createCellEditor(Composite parent, IPropertyPageDescriptor attr, Element element) { String type = attr.getValueType(); IPossibleValues pvs = (IPossibleValues)attr.getAdapter(IPossibleValues.class); IDefaultValue defaultValue = (IDefaultValue)attr.getAdapter(IDefaultValue.class); // ICellEditorValidator validator = (ICellEditorValidator)attr.getAdapter(ICellEditorValidator.class); CellEditor ed = null; if (IAttributeRuntimeValueType.RELATIVEPATH.equalsIgnoreCase(type)|| IAttributeRuntimeValueType.WEBPATH.equalsIgnoreCase(type)) { IProject project = getProject(element); final IFile file = getFile(element); if (project != null) { // String typeParam = TraitValueHelper.getValueAsString(TaglibDomainMetaDataQueryHelper.getTrait(attr.getMetaDataContext().getEntity(),"type-param")); ResourceDialogCellEditor cellEditor = new ResourceDialogCellEditor( parent); IMetaDataDomainContext context = null; if (file != null) context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext(file); else context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext(project); final ITaglibDomainMetaDataQuery query = MetaDataQueryFactory.getInstance().createQuery(context); Trait fileExt = query.findTrait(attr.getMetaDataContext().getEntity(), "file-extensions"); //$NON-NLS-1$ Trait separator = query.findTrait(attr.getMetaDataContext().getEntity(), "separator"); //$NON-NLS-1$ String[] fileExts = null; if (fileExt != null){ List exts = TraitValueHelper.getValueAsListOfStrings(fileExt); fileExts = (String[])exts.toArray(new String[exts.size()]); } String sep = null; if (separator != null) sep = TraitValueHelper.getValueAsString(separator); if (fileExts != null) cellEditor.setSuffixs(fileExts); if (sep != null) cellEditor.setSeparator(sep); cellEditor.setProject(project); cellEditor.setReferredFile(file); if (IAttributeRuntimeValueType.WEBPATH.equalsIgnoreCase(type)) { cellEditor.setWebPath(true); } if (IJSPCoreConstants.TAG_DIRECTIVE_INCLUDE.equals(element .getLocalName()) || IJSPCoreConstants.TAG_INCLUDE.equals(element .getLocalName())) { cellEditor.setTransformJSPURL(false); } ed = cellEditor; } } else if (IAttributeRuntimeValueType.RESOURCEBUNDLE.equals(type)) { ed = new LoadbundleSelectionCellEditor(parent, getProject(element)); } else if (IAttributeRuntimeValueType.CSSSTYLE.equalsIgnoreCase(type)) { // String param = getParamterValue(attr, "style"); //// .getParameterByName(IAttributeDescriptor.PARAMETER_STYLE); // if (!param.equalsIgnoreCase("STYLE")) { // return null; // } CSSDialogCellEditor cellEditor = new CSSDialogCellEditor(parent, attr, (IDOMElement) element); ed = cellEditor; } else if (pvs != null && pvs.getPossibleValues().size() > 0) { // if (validator != null) // ed = LabeledStyleComboCellEditor.newInstance(parent, pvs, // defaultValue, SWT.DROP_DOWN | SWT.READ_ONLY); // else ed = LabeledStyleComboCellEditor.newInstance(parent, pvs, defaultValue, SWT.NONE); } // } else if (IAttributeRuntimeValueType.CSSID.equalsIgnoreCase(type)) { // // TODO: missing case? else { ed = new TextCellEditor(parent); } // if (validator != null){ // ed.setValidator(validator); // } return ed; } // private String getParamterValue(IPropertyPageDescriptor attr, String traitKey) { // Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(attr.getMetaDataContext().getEntity(), traitKey); // if (trait != null){ // return TraitValueHelper.getValueAsString(trait); // } // return null; // } /* * (non-Javadoc) * * @see org.eclipse.jst.pagedesigner.meta.NEWMDIAttributeCellEditorFactory#createDialogField(org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor, * org.w3c.dom.Element, org.w3c.dom.Element) */ public DialogField createDialogField(IPropertyPageDescriptor attr) { String type = attr.getValueType(); IPossibleValues pvs = (IPossibleValues)attr.getAdapter(IPossibleValues.class); // IDefaultValue defaultValue = (IDefaultValue)attr.getAdapter(IDefaultValue.class); // ICellEditorValidator validator = (ICellEditorValidator)attr.getAdapter(ICellEditorValidator.class); if (IAttributeRuntimeValueType.RELATIVEPATH.equals(type) || IAttributeRuntimeValueType.WEBPATH.equals(type)) { //FIXME - should not be passing null project final IMetaDataDomainContext context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext((IProject)null); final ITaglibDomainMetaDataQuery query = MetaDataQueryFactory.getInstance().createQuery(context); Trait fileExt = query.findTrait(attr.getMetaDataContext().getEntity(), "file-extensions"); //$NON-NLS-1$ Trait seperator = query.findTrait(attr.getMetaDataContext().getEntity(), "separator"); //$NON-NLS-1$ String[] fileExts = null; if (fileExt != null){ List exts = TraitValueHelper.getValueAsListOfStrings(fileExt); fileExts = (String[])exts.toArray(new String[exts.size()]); } String sep = null; if (seperator != null) sep = TraitValueHelper.getValueAsString(seperator); ContextableResourceButtonDialogField field = new ContextableResourceButtonDialogField(); field.setLabelText(attr.getLabel()); if (fileExts != null) { field.setSuffixs(fileExts); } if (sep != null) { field.setSeparator(sep); } if ("".equalsIgnoreCase(field.getSeparator())) { //$NON-NLS-1$ field.setResourceDescription(ResourceBoundle .getString("FileCellEditor.Msg")); //$NON-NLS-1$ } else { field.setResourceDescription(ResourceBoundle .getString("FileCellEditor.Msg1")); //$NON-NLS-1$ } field.setWebPath(IAttributeRuntimeValueType.WEBPATH.equals(type)); field.setRequired(attr.isRequired()); field.setToolTip(attr.getDescription()); return field; } else if (IAttributeRuntimeValueType.CLASSPATH_RESOURCE.equals(type) || IAttributeRuntimeValueType.RESOURCEBUNDLE.equals(type)) { ClasspathResourceButtonDialogField field = new ClasspathResourceButtonDialogField(); field.setRequired(attr.isRequired()); field.setToolTip(attr.getDescription()); field.setLabelText(attr.getLabel()); return field; } else if (IAttributeRuntimeValueType.CSSSTYLE.equalsIgnoreCase(type)) { // String param = getParamterValue(attr, "style"); // if (!"STYLE".equalsIgnoreCase(param)) { // return null; // } StyleButtonDialogField field = new StyleButtonDialogField(); field.setRequired(attr.isRequired()); field.setToolTip(attr.getDescription()); field.setLabelText(attr.getLabel()); return field; // // if there is no type or type unknown, then we just return null. and // // system will // // create default (text cell editor). } else if (pvs != null && pvs.getPossibleValues().size() > 0) { MDEnabledComboDialogField field = new MDEnabledComboDialogField(SWT.None); field.setLabelText(attr.getLabel()); field.setToolTip(attr.getDescription()); field.setRequired(attr.isRequired()); return field; } return null; } private IProject getProject(Element element) { if (element instanceof IDOMElement) { IDOMModel model = ((IDOMElement) element).getModel(); IFile file = StructuredModelUtil.getFileFor(model); if (file != null) { return file.getProject(); } } return null; } public String[] getSupportedValueTypes() { return null;//default - all! } private IFile getFile(Element element) { if (element instanceof IDOMElement) { IDOMModel model = ((IDOMElement) element).getModel(); IFile file = StructuredModelUtil.getFileFor(model); return file; } return null; } }