Initialize
[sdk/ide/product.git] / org.eclipse.jst.pagedesigner / src / org / eclipse / jst / pagedesigner / properties / celleditors / CellEditorFactory.java
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
7  *\r
8  * Contributors:\r
9  *    Oracle - initial API and implementation\r
10  *    \r
11  ********************************************************************************/\r
12 package org.eclipse.jst.pagedesigner.properties.celleditors;\r
13 \r
14 import java.util.List;\r
15 \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
43 \r
44 /**\r
45  * \r
46  * @author mengbo\r
47  */\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
52                 \r
53                 String type = attr.getValueType();\r
54                 \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
65                                                 parent);\r
66                                 \r
67                                 IMetaDataDomainContext context = null;\r
68                                 \r
69                                 if (file != null)\r
70                                         context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext(file);\r
71                                 else\r
72                                         context = MetaDataQueryContextFactory.getInstance().createTaglibDomainModelContext(project);\r
73                                 \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
81                                 } \r
82                                 \r
83                                 String sep = null;\r
84                                 if (separator != null)\r
85                                         sep = TraitValueHelper.getValueAsString(separator);\r
86                                 \r
87                                 if (fileExts != null)\r
88                                         cellEditor.setSuffixs(fileExts);\r
89                                 if (sep != null)\r
90                                         cellEditor.setSeparator(sep);\r
91 \r
92                                 cellEditor.setProject(project);\r
93                                 cellEditor.setReferredFile(file);\r
94 \r
95                                 if (IAttributeRuntimeValueType.WEBPATH.equalsIgnoreCase(type)) {\r
96                                         cellEditor.setWebPath(true);\r
97                                 }\r
98 \r
99                                 if (IJSPCoreConstants.TAG_DIRECTIVE_INCLUDE.equals(element\r
100                                                 .getLocalName())\r
101                                                 || IJSPCoreConstants.TAG_INCLUDE.equals(element\r
102                                                                 .getLocalName())) {\r
103                                         cellEditor.setTransformJSPURL(false);\r
104                                 }\r
105                                 ed = cellEditor;\r
106                         }\r
107                 } \r
108                 else if (IAttributeRuntimeValueType.RESOURCEBUNDLE.equals(type)) {\r
109                         ed = new LoadbundleSelectionCellEditor(parent,\r
110                                         getProject(element));\r
111                 }\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
116 //                                      return null;\r
117 //                              }\r
118                                 CSSDialogCellEditor cellEditor = new CSSDialogCellEditor(parent, attr,\r
119                                                 (IDOMElement) element);\r
120                                 ed = cellEditor;\r
121                 }\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
126 //                      else \r
127                                 ed = LabeledStyleComboCellEditor.newInstance(parent, pvs,\r
128                         defaultValue, SWT.NONE);\r
129         \r
130                 }\r
131                 \r
132 //              } else if (IAttributeRuntimeValueType.CSSID.equalsIgnoreCase(type)) {\r
133 //                  // TODO: missing case?\r
134 \r
135                 else {\r
136                         ed = new TextCellEditor(parent);\r
137                 }\r
138 //              if (validator != null){\r
139 //                      ed.setValidator(validator);\r
140 //              }\r
141                 \r
142                 return ed;\r
143         }\r
144 \r
145 \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
150 //              }\r
151 //              return null;\r
152 //      }\r
153 \r
154 \r
155         /*\r
156          * (non-Javadoc)\r
157          * \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
160          */\r
161         public DialogField createDialogField(IPropertyPageDescriptor attr) {\r
162 \r
163                 String type = attr.getValueType();\r
164                 \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
168                 \r
169                 \r
170 \r
171                 if (IAttributeRuntimeValueType.RELATIVEPATH.equals(type) ||\r
172                                 IAttributeRuntimeValueType.WEBPATH.equals(type)) {\r
173                         \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
179                         \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
184                         } \r
185                         \r
186                         String sep = null;\r
187                         if (seperator != null)\r
188                                 sep = TraitValueHelper.getValueAsString(seperator);\r
189                 \r
190                         ContextableResourceButtonDialogField field = new ContextableResourceButtonDialogField();\r
191                         field.setLabelText(attr.getLabel());\r
192                         if (fileExts != null) {\r
193                                 field.setSuffixs(fileExts);\r
194                         }\r
195                         \r
196                         if (sep != null) {\r
197                                 field.setSeparator(sep);\r
198                         }\r
199                         \r
200                         if ("".equalsIgnoreCase(field.getSeparator())) { //$NON-NLS-1$\r
201                                 field.setResourceDescription(ResourceBoundle\r
202                                                 .getString("FileCellEditor.Msg")); //$NON-NLS-1$\r
203                         } else {\r
204                                 field.setResourceDescription(ResourceBoundle\r
205                                                 .getString("FileCellEditor.Msg1")); //$NON-NLS-1$\r
206                         }\r
207                         field.setWebPath(IAttributeRuntimeValueType.WEBPATH.equals(type));\r
208                         field.setRequired(attr.isRequired());\r
209                         field.setToolTip(attr.getDescription());\r
210                         return field;\r
211 \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
218                         return field;\r
219                 } else if (IAttributeRuntimeValueType.CSSSTYLE.equalsIgnoreCase(type)) {\r
220 //                      String param = getParamterValue(attr, "style");\r
221 //                      if (!"STYLE".equalsIgnoreCase(param)) {\r
222 //                              return null;\r
223 //                      }\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
228                         return field;\r
229                 \r
230 //              // if there is no type or type unknown, then we just return null. and\r
231 //              // system will\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
238                         return field;\r
239                 }\r
240                 return null;\r
241         }\r
242 \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
249                         }\r
250                 }\r
251                 return null;\r
252         }\r
253 \r
254         public String[] getSupportedValueTypes() {\r
255                 return null;//default - all!\r
256         }\r
257 \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
262                         return file;\r
263                 }\r
264                 return null;\r
265         }\r
266 }\r