You are viewing a plain text version of this content. The canonical link for it is here.
Posted to svn@forrest.apache.org by cd...@apache.org on 2006/01/18 17:54:16 UTC
svn commit: r370184 - in
/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.structurer/src/java/org/apache/forrest/dispatcher:
DispatcherHelper.java transformation/DispatcherTransformer.java
Author: cdupoirieux
Date: Wed Jan 18 08:54:10 2006
New Revision: 370184
URL: http://svn.apache.org/viewcvs?rev=370184&view=rev
Log:
Add a condition - to the XPath - on the position() of hooks in case several hooks have the same name at the same level in the DOM. (FOR-788)
Modified:
forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.structurer/src/java/org/apache/forrest/dispatcher/DispatcherHelper.java
forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.structurer/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java
Modified: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.structurer/src/java/org/apache/forrest/dispatcher/DispatcherHelper.java
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.structurer/src/java/org/apache/forrest/dispatcher/DispatcherHelper.java?rev=370184&r1=370183&r2=370184&view=diff
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.structurer/src/java/org/apache/forrest/dispatcher/DispatcherHelper.java (original)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.structurer/src/java/org/apache/forrest/dispatcher/DispatcherHelper.java Wed Jan 18 08:54:10 2006
@@ -157,6 +157,33 @@
}
+ /**
+ * setAttributesXPathWithPosition(Attributes attr, String path, int position) generates an XPath with the supplied attributes
+ * and add the condition on the position() to avoid confusion with hooks using the same name.
+ * @param attr Attributes of the XPath
+ * @param path The path
+ * @param position The position of the node
+ * @throws DOMException
+ */
+ public String setAttributesXPathWithPosition(Attributes attr, String path, int position)
+ throws DOMException {
+ String xpath = "[";
+ if (attr.getLength() > 0) {
+ for (int i = 0; i < attr.getLength(); i++) {
+ String localName = attr.getLocalName(i);
+ String value = attr.getValue(i);
+ xpath = xpath + "@" + localName + "='" + value + "'";
+ if (i < (attr.getLength() )) {
+ xpath = xpath + " and ";
+ }
+ }
+ xpath = xpath + " position()=" + position + "]";
+ path = path + xpath;
+ }
+ return path;
+
+ }
+
public DispatcherHelper(ServiceManager manager)
throws ParserConfigurationException {
this.manager = manager;
Modified: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.structurer/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.structurer/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java?rev=370184&r1=370183&r2=370184&view=diff
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.structurer/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java (original)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.structurer/src/java/org/apache/forrest/dispatcher/transformation/DispatcherTransformer.java Wed Jan 18 08:54:10 2006
@@ -185,6 +185,8 @@
private String hooksXSL;
+ private HashMap hooksPosition;
+
private HashMap parameterHelper;
private SourceResolver m_resolver;
@@ -274,6 +276,8 @@
storedPrefixMap = new HashMap();
this.parameterHelper = new HashMap();
+ this.hooksPosition = new HashMap();
+
this.allowMarkup = Boolean.getBoolean(parameters.getParameter(
DISPATCHER_ALLOW_MARKUP, null));
this.requestedFormat = parameters.getParameter(
@@ -391,8 +395,19 @@
/* create a DOM node from the current sax event */
Element currentElement = dispatcher.getDocument().createElement(name);
dispatcherHelper.setAttributesDOM(attr, currentElement);
- String tempPath = path + "/" + name;
- tempPath = dispatcherHelper.setAttributesXPath(attr, tempPath);
+ String tempPathWithoutAttr = path + "/" + name;
+ String tempPath = dispatcherHelper.setAttributesXPath(attr, tempPathWithoutAttr);
+ // If the hook has already been met, we use the position in the XPath to avoid confusion ...
+ if( hooksPosition.containsKey( tempPath ) )
+ {
+ int pos = ((Integer)hooksPosition.get( tempPath )).intValue() + 1;
+ hooksPosition.put( tempPath, new Integer( pos ) );
+ tempPath = dispatcherHelper.setAttributesXPathWithPosition(attr, tempPathWithoutAttr, pos );
+ }
+ else
+ {
+ hooksPosition.put( tempPath, new Integer( 1 ) ) ;
+ }
if (path == null || path.equals("")) {
path = name;
this.rootNode.appendChild(currentElement);
Re: svn commit: r370184 - in
/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.internal.structurer/src/java/org/apache/forrest/dispatcher:
DispatcherHelper.java transformation/DispatcherTransformer.java
Posted by Thorsten Scherler <th...@apache.org>.
El mié, 18-01-2006 a las 16:54 +0000, cdupoirieux@apache.org escribió:
> Author: cdupoirieux
> Date: Wed Jan 18 08:54:10 2006
> New Revision: 370184
>
> URL: http://svn.apache.org/viewcvs?rev=370184&view=rev
> Log:
> Add a condition - to the XPath - on the position() of hooks in case several hooks have the same name at the same level in the DOM. (FOR-788)
Dude, awesome!!!
I just love you Cyriaque. Sorry for not being a bigger help but I see
you have really understood me. :)
Keep on rocking. :)
salu2
--
thorsten
"Together we stand, divided we fall!"
Hey you (Pink Floyd)