1 /*******************************************************************************
\r
2 * Copyright (c) 2007 Oracle Corporation.
\r
3 * All rights reserved. This program and the accompanying materials
\r
4 * are made available under the terms of the Eclipse Public License v1.0
\r
5 * which accompanies this distribution, and is available at
\r
6 * http://www.eclipse.org/legal/epl-v10.html
\r
9 * Oracle - initial API and implementation
\r
11 ********************************************************************************/
\r
12 package org.eclipse.jst.pagedesigner.properties.celleditors;
\r
14 import java.util.List;
\r
16 import org.eclipse.core.resources.IFile;
\r
17 import org.eclipse.core.resources.IProject;
\r
18 import org.eclipse.jface.viewers.CellEditor;
\r
19 import org.eclipse.jface.viewers.TextCellEditor;
\r
20 import org.eclipse.jst.jsf.common.metadata.Trait;
\r
21 import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataDomainContext;
\r
22 import org.eclipse.jst.jsf.common.metadata.internal.TraitValueHelper;
\r
23 import org.eclipse.jst.jsf.common.metadata.query.internal.MetaDataQueryContextFactory;
\r
24 import org.eclipse.jst.jsf.common.metadata.query.internal.MetaDataQueryFactory;
\r
25 import org.eclipse.jst.jsf.common.metadata.query.internal.taglib.ITaglibDomainMetaDataQuery;
\r
26 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
\r
27 import org.eclipse.jst.jsf.metadataprocessors.features.IDefaultValue;
\r
28 import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
\r
29 import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
\r
30 import org.eclipse.jst.pagedesigner.jsp.core.IJSPCoreConstants;
\r
31 import org.eclipse.jst.pagedesigner.meta.IAttributeRuntimeValueType;
\r
32 import org.eclipse.jst.pagedesigner.meta.ITagAttributeCellEditorFactory;
\r
33 import org.eclipse.jst.pagedesigner.properties.dialogfields.MDEnabledComboDialogField;
\r
34 import org.eclipse.jst.pagedesigner.ui.dialogfields.ClasspathResourceButtonDialogField;
\r
35 import org.eclipse.jst.pagedesigner.ui.dialogfields.ContextableResourceButtonDialogField;
\r
36 import org.eclipse.jst.pagedesigner.ui.dialogfields.StyleButtonDialogField;
\r
37 import org.eclipse.jst.pagedesigner.utils.StructuredModelUtil;
\r
38 import org.eclipse.swt.SWT;
\r
39 import org.eclipse.swt.widgets.Composite;
\r
40 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
\r
41 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
\r
42 import org.w3c.dom.Element;
\r
48 @SuppressWarnings("deprecation")
\r
49 public class CellEditorFactory implements ITagAttributeCellEditorFactory {
\r
50 public CellEditor createCellEditor(Composite parent,
\r
51 IPropertyPageDescriptor attr, Element element) {
\r
53 String type = attr.getValueType();
\r
55 IPossibleValues pvs = (IPossibleValues)attr.getAdapter(IPossibleValues.class);
\r
56 IDefaultValue defaultValue = (IDefaultValue)attr.getAdapter(IDefaultValue.class);
\r
57 // ICellEditorValidator validator = (ICellEditorValidator)attr.getAdapter(ICellEditorValidator.class);
\r
58 CellEditor ed = null;
\r
59 if (IAttributeRuntimeValueType.RELATIVEPATH.equalsIgnoreCase(type)|| IAttributeRuntimeValueType.WEBPATH.equalsIgnoreCase(type)) {
\r
60 IProject project = getProject(element);
\r
61 final IFile file = getFile(element);
\r
62 if (project != null) {
\r
63 // String typeParam = TraitValueHelper.getValueAsString(TaglibDomainMetaDataQueryHelper.getTrait(attr.getMetaDataContext().getEntity(),"type-param"));
\r
64 ResourceDialogCellEditor cellEditor = new ResourceDialogCellEditor(
\r
67 IMetaDataDomainContext context = null;
\r
70 context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext(file);
\r
72 context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext(project);
\r
74 final ITaglibDomainMetaDataQuery query = MetaDataQueryFactory.getInstance().createQuery(context);
\r
75 Trait fileExt = query.findTrait(attr.getMetaDataContext().getEntity(), "file-extensions"); //$NON-NLS-1$
\r
76 Trait separator = query.findTrait(attr.getMetaDataContext().getEntity(), "separator"); //$NON-NLS-1$
\r
77 String[] fileExts = null;
\r
78 if (fileExt != null){
\r
79 List exts = TraitValueHelper.getValueAsListOfStrings(fileExt);
\r
80 fileExts = (String[])exts.toArray(new String[exts.size()]);
\r
84 if (separator != null)
\r
85 sep = TraitValueHelper.getValueAsString(separator);
\r
87 if (fileExts != null)
\r
88 cellEditor.setSuffixs(fileExts);
\r
90 cellEditor.setSeparator(sep);
\r
92 cellEditor.setProject(project);
\r
93 cellEditor.setReferredFile(file);
\r
95 if (IAttributeRuntimeValueType.WEBPATH.equalsIgnoreCase(type)) {
\r
96 cellEditor.setWebPath(true);
\r
99 if (IJSPCoreConstants.TAG_DIRECTIVE_INCLUDE.equals(element
\r
101 || IJSPCoreConstants.TAG_INCLUDE.equals(element
\r
102 .getLocalName())) {
\r
103 cellEditor.setTransformJSPURL(false);
\r
108 else if (IAttributeRuntimeValueType.RESOURCEBUNDLE.equals(type)) {
\r
109 ed = new LoadbundleSelectionCellEditor(parent,
\r
110 getProject(element));
\r
112 else if (IAttributeRuntimeValueType.CSSSTYLE.equalsIgnoreCase(type)) {
\r
113 // String param = getParamterValue(attr, "style");
\r
114 //// .getParameterByName(IAttributeDescriptor.PARAMETER_STYLE);
\r
115 // if (!param.equalsIgnoreCase("STYLE")) {
\r
118 CSSDialogCellEditor cellEditor = new CSSDialogCellEditor(parent, attr,
\r
119 (IDOMElement) element);
\r
122 else if (pvs != null && pvs.getPossibleValues().size() > 0) {
\r
123 // if (validator != null)
\r
124 // ed = LabeledStyleComboCellEditor.newInstance(parent, pvs,
\r
125 // defaultValue, SWT.DROP_DOWN | SWT.READ_ONLY);
\r
127 ed = LabeledStyleComboCellEditor.newInstance(parent, pvs,
\r
128 defaultValue, SWT.NONE);
\r
132 // } else if (IAttributeRuntimeValueType.CSSID.equalsIgnoreCase(type)) {
\r
133 // // TODO: missing case?
\r
136 ed = new TextCellEditor(parent);
\r
138 // if (validator != null){
\r
139 // ed.setValidator(validator);
\r
146 // private String getParamterValue(IPropertyPageDescriptor attr, String traitKey) {
\r
147 // Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(attr.getMetaDataContext().getEntity(), traitKey);
\r
148 // if (trait != null){
\r
149 // return TraitValueHelper.getValueAsString(trait);
\r
158 * @see org.eclipse.jst.pagedesigner.meta.NEWMDIAttributeCellEditorFactory#createDialogField(org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor,
\r
159 * org.w3c.dom.Element, org.w3c.dom.Element)
\r
161 public DialogField createDialogField(IPropertyPageDescriptor attr) {
\r
163 String type = attr.getValueType();
\r
165 IPossibleValues pvs = (IPossibleValues)attr.getAdapter(IPossibleValues.class);
\r
166 // IDefaultValue defaultValue = (IDefaultValue)attr.getAdapter(IDefaultValue.class);
\r
167 // ICellEditorValidator validator = (ICellEditorValidator)attr.getAdapter(ICellEditorValidator.class);
\r
171 if (IAttributeRuntimeValueType.RELATIVEPATH.equals(type) ||
\r
172 IAttributeRuntimeValueType.WEBPATH.equals(type)) {
\r
174 //FIXME - should not be passing null project
\r
175 final IMetaDataDomainContext context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext((IProject)null);
\r
176 final ITaglibDomainMetaDataQuery query = MetaDataQueryFactory.getInstance().createQuery(context);
\r
177 Trait fileExt = query.findTrait(attr.getMetaDataContext().getEntity(), "file-extensions"); //$NON-NLS-1$
\r
178 Trait seperator = query.findTrait(attr.getMetaDataContext().getEntity(), "separator"); //$NON-NLS-1$
\r
180 String[] fileExts = null;
\r
181 if (fileExt != null){
\r
182 List exts = TraitValueHelper.getValueAsListOfStrings(fileExt);
\r
183 fileExts = (String[])exts.toArray(new String[exts.size()]);
\r
187 if (seperator != null)
\r
188 sep = TraitValueHelper.getValueAsString(seperator);
\r
190 ContextableResourceButtonDialogField field = new ContextableResourceButtonDialogField();
\r
191 field.setLabelText(attr.getLabel());
\r
192 if (fileExts != null) {
\r
193 field.setSuffixs(fileExts);
\r
197 field.setSeparator(sep);
\r
200 if ("".equalsIgnoreCase(field.getSeparator())) { //$NON-NLS-1$
\r
201 field.setResourceDescription(ResourceBoundle
\r
202 .getString("FileCellEditor.Msg")); //$NON-NLS-1$
\r
204 field.setResourceDescription(ResourceBoundle
\r
205 .getString("FileCellEditor.Msg1")); //$NON-NLS-1$
\r
207 field.setWebPath(IAttributeRuntimeValueType.WEBPATH.equals(type));
\r
208 field.setRequired(attr.isRequired());
\r
209 field.setToolTip(attr.getDescription());
\r
212 } else if (IAttributeRuntimeValueType.CLASSPATH_RESOURCE.equals(type) ||
\r
213 IAttributeRuntimeValueType.RESOURCEBUNDLE.equals(type)) {
\r
214 ClasspathResourceButtonDialogField field = new ClasspathResourceButtonDialogField();
\r
215 field.setRequired(attr.isRequired());
\r
216 field.setToolTip(attr.getDescription());
\r
217 field.setLabelText(attr.getLabel());
\r
219 } else if (IAttributeRuntimeValueType.CSSSTYLE.equalsIgnoreCase(type)) {
\r
220 // String param = getParamterValue(attr, "style");
\r
221 // if (!"STYLE".equalsIgnoreCase(param)) {
\r
224 StyleButtonDialogField field = new StyleButtonDialogField();
\r
225 field.setRequired(attr.isRequired());
\r
226 field.setToolTip(attr.getDescription());
\r
227 field.setLabelText(attr.getLabel());
\r
230 // // if there is no type or type unknown, then we just return null. and
\r
232 // // create default (text cell editor).
\r
233 } else if (pvs != null && pvs.getPossibleValues().size() > 0) {
\r
234 MDEnabledComboDialogField field = new MDEnabledComboDialogField(SWT.None);
\r
235 field.setLabelText(attr.getLabel());
\r
236 field.setToolTip(attr.getDescription());
\r
237 field.setRequired(attr.isRequired());
\r
243 private IProject getProject(Element element) {
\r
244 if (element instanceof IDOMElement) {
\r
245 IDOMModel model = ((IDOMElement) element).getModel();
\r
246 IFile file = StructuredModelUtil.getFileFor(model);
\r
247 if (file != null) {
\r
248 return file.getProject();
\r
254 public String[] getSupportedValueTypes() {
\r
255 return null;//default - all!
\r
258 private IFile getFile(Element element) {
\r
259 if (element instanceof IDOMElement) {
\r
260 IDOMModel model = ((IDOMElement) element).getModel();
\r
261 IFile file = StructuredModelUtil.getFileFor(model);
\r