You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by gi...@locus.apache.org on 2000/09/07 23:38:41 UTC
cvs commit: xml-cocoon/src/org/apache/cocoon/selection BrowserSelectorFactory.java
giacomo 00/09/07 14:38:40
Modified: src/org/apache/cocoon/selection Tag: xml-cocoon2
BrowserSelectorFactory.java
Log:
Added BrowserSelectorFactory contributed by Carsten Ziegeler.
Some optimizing has been applied by me :)
Revision Changes Path
No revision
No revision
1.1.2.6 +49 -16 xml-cocoon/src/org/apache/cocoon/selection/Attic/BrowserSelectorFactory.java
Index: BrowserSelectorFactory.java
===================================================================
RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/selection/Attic/BrowserSelectorFactory.java,v
retrieving revision 1.1.2.5
retrieving revision 1.1.2.6
diff -u -r1.1.2.5 -r1.1.2.6
--- BrowserSelectorFactory.java 2000/07/27 21:49:03 1.1.2.5
+++ BrowserSelectorFactory.java 2000/09/07 21:38:37 1.1.2.6
@@ -1,33 +1,66 @@
-/*****************************************************************************
- * Copyright (C) The Apache Software Foundation. All rights reserved. *
- * ------------------------------------------------------------------------- *
- * This software is published under the terms of the Apache Software License *
- * version 1.1, a copy of which has been included with this distribution in *
- * the LICENSE file. *
- *****************************************************************************/
-package org.apache.cocoon.selection;
+/*****************************************************************************
+ * Copyright (C) The Apache Software Foundation. All rights reserved. *
+ * ------------------------------------------------------------------------- *
+ * This software is published under the terms of the Apache Software License *
+ * version 1.1, a copy of which has been included with this distribution in *
+ * the LICENSE file. *
+ *****************************************************************************/
+package org.apache.cocoon.selection;
import org.apache.avalon.ConfigurationException;
import org.w3c.dom.DocumentFragment;
-
-/**
+import org.w3c.dom.traversal.TreeWalker;
+import org.w3c.dom.traversal.NodeFilter;
+import org.w3c.dom.Node;
+import org.w3c.dom.NamedNodeMap;
+import org.apache.xerces.dom.TreeWalkerImpl;
+
+/**
* This class generates source code which tests a specific browser pattern
* agains the requesting user-agent
- *
- * @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a>
- * @version CVS $Revision: 1.1.2.5 $ $Date: 2000/07/27 21:49:03 $
- */
+ *
+ * @author <a href="mailto:cziegeler@sundn.de">Carsten Ziegeler</a>
+ * @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a>
+ * @version CVS $Revision: 1.1.2.6 $ $Date: 2000/09/07 21:38:37 $
+*/
+
public class BrowserSelectorFactory implements SelectorFactory {
- public String generateClassSource (String test, String prefix, DocumentFragment conf)
+ public String generateClassSource (String test, String prefix, DocumentFragment conf)
throws ConfigurationException {
return "";
}
public String generateMethodSource (String test, String prefix, DocumentFragment conf)
throws ConfigurationException {
- return "return true;";
+ TreeWalker tw = new TreeWalkerImpl (conf, NodeFilter.SHOW_ALL, null, false);
+ Node node = null;
+ Node nodeattrname = null;
+ Node nodeattruseragent = null;
+ NamedNodeMap nm = null;
+
+ StringBuffer sb = new StringBuffer();
+ sb.append("if (pattern != null && objectModel.get(\"request\") != null) {")
+ .append("javax.servlet.http.HttpServletRequest request = (javax.servlet.http.HttpServletRequest) objectModel.get(\"request\");")
+ .append("String userAgent = request.getHeader(\"User-Agent\");");
+ while ((node = tw.nextNode()) != null) {
+ if (node.getNodeName().equals("browser") &&
+ node.getNodeType() == Node.ELEMENT_NODE) {
+ nm = node.getAttributes();
+ if (nm != null) {
+ nodeattrname = nm.getNamedItem("name");
+ nodeattruseragent = nm.getNamedItem("useragent");
+ if (nodeattrname != null && nodeattruseragent != null
+ && nodeattrname.getNodeValue().equals(test)) {
+ sb.append("if (userAgent.indexOf(\"")
+ .append(nodeattruseragent.getNodeValue())
+ .append("\") != -1) return true;");
+ }
+ }
+ }
+ }
+ return sb.append("} return false;").toString();
}
}