View | Details | Raw Unified | Return to bug 317133 | Differences between
and this patch

Collapse All | Expand All

(-)META-INF/MANIFEST.MF (-3 / +1 lines)
Lines 127-135 Link Here
127
 javax.servlet.jsp.el;version="2.0.0",
127
 javax.servlet.jsp.el;version="2.0.0",
128
 javax.servlet.jsp.resources;version="2.0.0",
128
 javax.servlet.jsp.resources;version="2.0.0",
129
 javax.servlet.jsp.tagext;version="2.0.0",
129
 javax.servlet.jsp.tagext;version="2.0.0",
130
 javax.servlet.resources;version="2.4.0",
130
 javax.servlet.resources;version="2.4.0"
131
 org.apache.commons.el;version="1.0.0",
132
 org.apache.commons.el.parser;version="1.0.0"
133
131
134
132
135
133
(-)schema/pageDesignerExtension.exsd (+21 lines)
Lines 29-34 Link Here
29
            <element ref="propertyPageFactory" minOccurs="0" maxOccurs="unbounded"/>
29
            <element ref="propertyPageFactory" minOccurs="0" maxOccurs="unbounded"/>
30
            <element ref="paletteFactory" minOccurs="0" maxOccurs="unbounded"/>
30
            <element ref="paletteFactory" minOccurs="0" maxOccurs="unbounded"/>
31
            <element ref="attributeValueResolver" minOccurs="0" maxOccurs="unbounded"/>
31
            <element ref="attributeValueResolver" minOccurs="0" maxOccurs="unbounded"/>
32
            <element ref="elValueResolver" minOccurs="0" maxOccurs="unbounded"/>
32
         </sequence>
33
         </sequence>
33
         <attribute name="point" type="string" use="required">
34
         <attribute name="point" type="string" use="required">
34
            <annotation>
35
            <annotation>
Lines 265-270 Link Here
265
      </complexType>
266
      </complexType>
266
   </element>
267
   </element>
267
268
269
   <element name="elValueResolver">
270
      <annotation>
271
         <documentation>
272
            This element is for internal use and subject to change.
273
         </documentation>
274
      </annotation>
275
      <complexType>
276
         <attribute name="class" type="string" use="required">
277
            <annotation>
278
               <documentation>
279
                  
280
               </documentation>
281
               <appInfo>
282
                  <meta.attribute kind="java" basedOn=":org.eclipse.jst.pagedesigner.preview.IELValueResolver"/>
283
               </appInfo>
284
            </annotation>
285
         </attribute>
286
      </complexType>
287
   </element>
288
268
   <annotation>
289
   <annotation>
269
      <appInfo>
290
      <appInfo>
270
         <meta.section type="since"/>
291
         <meta.section type="since"/>
(-)src/org/eclipse/jst/pagedesigner/converter/AbstractTagConverter.java (-1 / +3 lines)
Lines 360-367 Link Here
360
		} else {
360
		} else {
361
			// preview mode. let's try to display the value.
361
			// preview mode. let's try to display the value.
362
			try {
362
			try {
363
				Map options = new HashMap();
364
				options.put("ELEMENT", _hostElement); //$NON-NLS-1$
363
				return (String) PageExpressionContext.getCurrent()
365
				return (String) PageExpressionContext.getCurrent()
364
						.evaluateExpression(value, String.class, null);
366
						.evaluateExpression(value, String.class, options);
365
			} catch (Exception ex) {
367
			} catch (Exception ex) {
366
				// can't calculate the result. ignore.
368
				// can't calculate the result. ignore.
367
				// ex.printStackTrace();
369
				// ex.printStackTrace();
(-)src/org/eclipse/jst/pagedesigner/dtmanager/converter/internal/DTTagConverterDecorator.java (-3 / +8 lines)
Lines 11-16 Link Here
11
package org.eclipse.jst.pagedesigner.dtmanager.converter.internal;
11
package org.eclipse.jst.pagedesigner.dtmanager.converter.internal;
12
12
13
import java.net.URL;
13
import java.net.URL;
14
import java.util.HashMap;
15
import java.util.Map;
14
16
15
import javax.servlet.jsp.el.ELException;
17
import javax.servlet.jsp.el.ELException;
16
import javax.xml.xpath.XPath;
18
import javax.xml.xpath.XPath;
Lines 211-219 Link Here
211
                                    textNodeValue, dtInfo);
213
                                    textNodeValue, dtInfo);
212
                        } else
214
                        } else
213
                        {
215
                        {
216
                        	Map options = new HashMap();
217
                        	options.put("ELEMENT", srcElement); //$NON-NLS-1$
214
                            newTextNodeValue = (String) PageExpressionContext
218
                            newTextNodeValue = (String) PageExpressionContext
215
                                    .getCurrent().evaluateExpression(
219
                                    .getCurrent().evaluateExpression(
216
                                            textNodeValue, String.class, null);
220
                                            textNodeValue, String.class, options);
217
                        }
221
                        }
218
                        if (newTextNodeValue != null
222
                        if (newTextNodeValue != null
219
                                && !textNodeValue.equals(newTextNodeValue))
223
                                && !textNodeValue.equals(newTextNodeValue))
Lines 384-392 Link Here
384
                PageExpressionContext current = PageExpressionContext.getCurrent();
388
                PageExpressionContext current = PageExpressionContext.getCurrent();
385
                if (current != null)
389
                if (current != null)
386
                {
390
                {
391
                	Map options = new HashMap();
392
                	options.put("ELEMENT", originalElement); //$NON-NLS-1$
387
                    return (String) current
393
                    return (String) current
388
                            .evaluateExpression(oldAttributeValue, String.class,
394
                            .evaluateExpression(oldAttributeValue, String.class, options);
389
                                    null);
390
                }
395
                }
391
            } catch (ELException e)
396
            } catch (ELException e)
392
            {
397
            {
(-)src/org/eclipse/jst/pagedesigner/preview/IELValueResolver.java (+19 lines)
Added Link Here
1
package org.eclipse.jst.pagedesigner.preview;
2
3
import org.w3c.dom.Element;
4
5
/**
6
 * Implementors are capable of resolving an EL expression into a value.
7
 */
8
public interface IELValueResolver {
9
10
	/**
11
	 * Resolve specified EL expression into a value.
12
	 * @param element Element instance that can provide the document that the EL expression comes
13
	 * from, thus providing context.
14
	 * @param elExpression EL expression to resolve.
15
	 * @return Value resolved from EL expression.
16
	 */
17
	public String resolve(Element element, String elExpression);
18
19
}
(-)src/org/eclipse/jst/pagedesigner/preview/PageExpressionContext.java (-2 / +62 lines)
Lines 24-40 Link Here
24
import javax.servlet.jsp.el.FunctionMapper;
24
import javax.servlet.jsp.el.FunctionMapper;
25
import javax.servlet.jsp.el.VariableResolver;
25
import javax.servlet.jsp.el.VariableResolver;
26
26
27
import org.apache.commons.el.ExpressionEvaluatorImpl;
28
import org.eclipse.core.resources.IProject;
27
import org.eclipse.core.resources.IProject;
29
import org.eclipse.core.resources.IStorage;
28
import org.eclipse.core.resources.IStorage;
30
import org.eclipse.core.runtime.CoreException;
29
import org.eclipse.core.runtime.CoreException;
30
import org.eclipse.core.runtime.IConfigurationElement;
31
import org.eclipse.core.runtime.IExtension;
32
import org.eclipse.core.runtime.IExtensionPoint;
33
import org.eclipse.core.runtime.Platform;
31
import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
34
import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
32
import org.eclipse.jst.jsf.common.ui.internal.utils.ResourceUtils;
35
import org.eclipse.jst.jsf.common.ui.internal.utils.ResourceUtils;
33
import org.eclipse.jst.jsf.core.internal.tld.LoadBundleUtil;
36
import org.eclipse.jst.jsf.core.internal.tld.LoadBundleUtil;
37
import org.eclipse.jst.pagedesigner.IJMTConstants;
34
import org.eclipse.jst.pagedesigner.PDPlugin;
38
import org.eclipse.jst.pagedesigner.PDPlugin;
35
import org.eclipse.jst.pagedesigner.jsp.core.el.JSFELParserHelper;
36
import org.eclipse.jst.pagedesigner.jsp.core.pagevar.IPageVariablesProvider;
39
import org.eclipse.jst.pagedesigner.jsp.core.pagevar.IPageVariablesProvider;
37
import org.eclipse.jst.pagedesigner.jsp.core.pagevar.IVariableInfo;
40
import org.eclipse.jst.pagedesigner.jsp.core.pagevar.IVariableInfo;
41
import org.w3c.dom.Element;
38
42
39
/**
43
/**
40
 * This is a static class. But it has "session" concept in it. To make it static
44
 * This is a static class. But it has "session" concept in it. To make it static
Lines 124-134 Link Here
124
	 */
128
	 */
125
	public Object evaluateExpression(String expression, Class expectedClass,
129
	public Object evaluateExpression(String expression, Class expectedClass,
126
			Map options) throws ELException {
130
			Map options) throws ELException {
131
		/*
127
		expression = JSFELParserHelper.toJspElExpression(expression);
132
		expression = JSFELParserHelper.toJspElExpression(expression);
128
		ExpressionEvaluatorImpl evaluator = new ExpressionEvaluatorImpl();
133
		ExpressionEvaluatorImpl evaluator = new ExpressionEvaluatorImpl();
129
		FunctionMapper mapper = new EmptyFunctionMapper();
134
		FunctionMapper mapper = new EmptyFunctionMapper();
130
135
131
		return evaluator.evaluate(expression, expectedClass, resolver, mapper);
136
		return evaluator.evaluate(expression, expectedClass, resolver, mapper);
137
		*/
138
		String ret = expression;
139
		if (options != null) {
140
			Object objElement = options.get("ELEMENT"); //$NON-NLS-1$
141
			if (objElement instanceof Element) {
142
				ret = ELValueResolver.resolve((Element)objElement, expression);
143
			}
144
		}
145
		return ret;
132
	}
146
	}
133
147
134
	class SimpleVariableResolver implements VariableResolver {
148
	class SimpleVariableResolver implements VariableResolver {
Lines 202-205 Link Here
202
			return null;
216
			return null;
203
		}
217
		}
204
	}
218
	}
219
220
	static class ELValueResolver {
221
222
		static List<IELValueResolver> elValueResolvers;
223
224
		public static String resolve(final Element element, final String elExpression) {
225
			String value = elExpression;
226
			if (elValueResolvers == null) {
227
				readELValueResolvers();
228
			}
229
			for (IELValueResolver elValueResolver: elValueResolvers) {
230
				value = elValueResolver.resolve(element, value);
231
			}
232
			return value;
233
		}
234
235
		private static void readELValueResolvers() {
236
			elValueResolvers = new ArrayList<IELValueResolver>();
237
			final IExtensionPoint pdExtPt =
238
				Platform.getExtensionRegistry().getExtensionPoint(
239
						PDPlugin.getPluginId(), IJMTConstants.EXTENSION_POINT_PAGEDESIGNER);
240
			final IExtension[] extensions = pdExtPt.getExtensions();
241
			for (final IExtension extension: extensions) {
242
				final IConfigurationElement[] configElements = extension.getConfigurationElements();
243
				for (final IConfigurationElement configElement: configElements) {
244
					if (configElement.getName().equals("elValueResolver")) { //$NON-NLS-1$
245
						try {
246
							final Object objValueResolver = configElement.createExecutableExtension("class"); //$NON-NLS-1$
247
							if (objValueResolver instanceof IELValueResolver) {
248
								if (configElement.getContributor().getName().startsWith("org.eclipse.jst")) { //$NON-NLS-1$
249
									//add WTP-provided resolvers first, so contributor-provided resolvers get last kick of the can
250
									elValueResolvers.add(0, (IELValueResolver)objValueResolver);
251
								} else {
252
									elValueResolvers.add((IELValueResolver)objValueResolver);
253
								}
254
							}
255
						} catch(CoreException ce) {
256
							PDPlugin.log("Error reading extensions for: " + configElement.toString(), ce); //$NON-NLS-1$
257
						}
258
					}
259
				}
260
			}
261
		}
262
263
	}
264
205
}
265
}

Return to bug 317133