You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2014/04/26 01:52:47 UTC

git commit: files missing from original BlazeDS donation donated by Adobe Systems Inc.

Repository: flex-blazeds
Updated Branches:
  refs/heads/master 7a58369c4 -> abcab67de


files missing from original BlazeDS donation donated by Adobe Systems Inc.


Project: http://git-wip-us.apache.org/repos/asf/flex-blazeds/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-blazeds/commit/abcab67d
Tree: http://git-wip-us.apache.org/repos/asf/flex-blazeds/tree/abcab67d
Diff: http://git-wip-us.apache.org/repos/asf/flex-blazeds/diff/abcab67d

Branch: refs/heads/master
Commit: abcab67debfc4fd6f2fd7241a4cc54cfaad6d73f
Parents: 7a58369
Author: Alex Harui <ah...@apache.org>
Authored: Fri Apr 25 16:52:38 2014 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Apr 25 16:52:38 2014 -0700

----------------------------------------------------------------------
 qa/src/tools/ant/MergeXML.java |  63 ++++++++
 qa/src/utils/XMLMerge.java     | 311 ++++++++++++++++++++++++++++++++++++
 2 files changed, 374 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/abcab67d/qa/src/tools/ant/MergeXML.java
----------------------------------------------------------------------
diff --git a/qa/src/tools/ant/MergeXML.java b/qa/src/tools/ant/MergeXML.java
new file mode 100644
index 0000000..2aa6d59
--- /dev/null
+++ b/qa/src/tools/ant/MergeXML.java
@@ -0,0 +1,63 @@
+package tools.ant;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * File Name:        MergeXML
+ * Description:      An ant task to wrap my XMLMerge class.  Used to insert canned
+ *                   XML into another XML file (intended for updating Flex config files.
+ */
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+import utils.XMLMerge;
+
+
+public class MergeXML extends Task {
+    private String baseFile;
+    private String importFile;
+    private String destinationFile;
+    private boolean debug = false;
+
+
+    public void setBaseFile(String baseFile) {
+       this.baseFile=baseFile;
+    }
+
+    public void setImportFile(String importFile) {
+       this.importFile=importFile;
+    }
+
+    public void setDestinationFile(String destinationFile) {
+       this.destinationFile=destinationFile;
+    }
+
+    public void setDebug(boolean debug) {
+       this.debug = debug;
+    }
+
+
+    public void execute() throws BuildException {
+        XMLMerge merger=new XMLMerge();
+        merger.debug=debug;
+        merger.mergeDocs(baseFile, importFile, destinationFile);
+    }
+
+
+}
+

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/abcab67d/qa/src/utils/XMLMerge.java
----------------------------------------------------------------------
diff --git a/qa/src/utils/XMLMerge.java b/qa/src/utils/XMLMerge.java
new file mode 100644
index 0000000..5bb1910
--- /dev/null
+++ b/qa/src/utils/XMLMerge.java
@@ -0,0 +1,311 @@
+package utils;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.*;
+import java.util.*;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.*;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.apache.axis.utils.XMLUtils;
+
+//import org.apache.xml.serialize.XMLSerializer;
+//import org.apache.xml.serialize.OutputFormat;
+//import org.apache.axis.utils.XMLUtils;
+
+
+public class XMLMerge {
+    private String PARENT_NODE_NAME="parent";
+    private String ACTION="action";
+    private String ACTION_REPLACE="replace"; // Default
+    private String ACTION_ADD="add";
+    private String ACTION_DELETE="delete";
+    public boolean debug=false;
+
+    public static void main (String args[]){
+
+        String baseFilename="c:/working/web.xml";
+        String importFilename="c:/working/webBasic-Merge.xml";
+        String outputFilename="c:/working/out.xml";
+
+        if (args.length == 3) {
+            baseFilename=args[0];
+            importFilename=args[1];
+            outputFilename=args[2];
+        } else if (args.length != 0) {
+            System.out.println("Usage: XMLTest baseFilename importFilename outputFilename " + args.length);
+        }
+
+        XMLMerge xmlMerge=new XMLMerge();
+        xmlMerge.mergeDocs(baseFilename, importFilename,  outputFilename);
+
+    }
+
+    public void mergeDocs(String baseFilename, String importFilename, String outputFilename) {
+
+        try {
+            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
+            Document doc = docBuilder.parse (new File(baseFilename));
+            Document newXML = docBuilder.parse(new File(importFilename));
+
+            doc.getDocumentElement().normalize();
+            newXML.getDocumentElement().normalize();
+            Node importedXML=doc.importNode(newXML.getFirstChild(), true);
+
+            // Get the name, parent and index of each new node and store them in a vector.
+            Vector newNodeVector=new Vector();
+            NodeList newNodes=importedXML.getChildNodes();
+            debug("Making vector- " + newNodes.getLength());
+            for(int i=0; i<newNodes.getLength(); i++) {
+
+                if (newNodes.item(i).getNodeName() !="#text" && newNodes.item(i).getNodeName() !="#comment") {
+                    try {
+                        String name=newNodes.item(i).getNodeName();
+                        NamedNodeMap attributes=newNodes.item(i).getAttributes();
+                        String parent=attributes.getNamedItem(PARENT_NODE_NAME).getNodeValue();
+                        String action=attributes.getNamedItem(ACTION)==null?ACTION_REPLACE:attributes.getNamedItem(ACTION).getNodeValue();
+                        attributes.removeNamedItem(PARENT_NODE_NAME);
+                        if (attributes.getNamedItem(ACTION)!=null)
+                            attributes.removeNamedItem(ACTION);
+
+                        newNodeVector.add(new NamedNode(name, parent, action, newNodes.item(i)));
+                    } catch (NullPointerException npe) {
+                        throw new Exception("The current node (" + newNodes.item(i).getNodeName() + ") likely is missing a 'parent' or 'action' attribute!", npe);
+                    }
+                }
+            }
+
+            // Loop over the new nodes
+            Enumeration newNodeEnumeration=newNodeVector.elements();
+            while (newNodeEnumeration.hasMoreElements()) {
+                NamedNode nodeToAdd=(NamedNode) newNodeEnumeration.nextElement();
+
+                debug("");
+
+                if (nodeToAdd.theNode.getFirstChild() != null) {
+                    debug("Node to " + nodeToAdd.action + ": " + nodeToAdd.name + ", " + nodeToAdd.theNode.getNodeType() + "(" + nodeToAdd.theNode.getFirstChild().getNodeValue() + ")");
+                } else {
+                    debug("Node to " + nodeToAdd.action + ": " + nodeToAdd.name + ", no children.");
+                }
+
+                Node target=findNode(nodeToAdd.parent, doc);
+                debug("found node: " + target.getNodeName());
+                NodeList targetChildren=target.getChildNodes();
+                debug("target children: " + targetChildren.getLength());
+                for (int i=0; i<targetChildren.getLength(); i++) {
+                    Node currentChild=targetChildren.item(i);
+                    debug ("Next source doc node: " + currentChild.getNodeName());
+                    if (! currentChild.getNodeName().equals("#text") && ! currentChild.getNodeName().equals("#comment")) {
+                        debug("Comparing " + nodeToAdd.name + " to " + nodeToAdd.parent + " " +  currentChild.getNodeName());
+                        if (nodeToAdd.name.equals(currentChild.getNodeName()) && currentChild.hasAttributes()) {
+                            debug(".. node has attributes.");
+                            NamedNodeMap attributes=currentChild.getAttributes();
+                            int matchingAttributes=0;
+                            for (int j=0; j<attributes.getLength(); j++) {
+                                String existingAttributeName=attributes.item(j).getNodeName();
+                                String existingAttributeValue=attributes.item(j).getNodeValue();
+                                if (nodeToAdd.theNode.getAttributes().getNamedItem(existingAttributeName) != null) {
+                                    debug(".. existing: " + existingAttributeName + "=" + existingAttributeValue + ".. target: " + existingAttributeName + "=" + nodeToAdd.theNode.getAttributes().getNamedItem(existingAttributeName).getNodeValue());
+                                    if (nodeToAdd.theNode.getAttributes().getNamedItem(existingAttributeName).getNodeValue().equals(existingAttributeValue))
+                                        matchingAttributes++;
+                                }
+                            }
+
+                            // allow addition of duplicates
+                            if (matchingAttributes==attributes.getLength() && !nodeToAdd.action.equals(ACTION_ADD)) {
+                                debug("NODE REMOVED - " + currentChild.getNodeName());
+                                target.removeChild(currentChild);
+                            }
+                        } else if (nodeToAdd.name.equals(currentChild.getNodeName()) && nodeToAdd.action.equals(ACTION_REPLACE)) {
+                            debug("NODE REMOVED - REPLACE - " + currentChild.getNodeName());
+                            target.removeChild(currentChild);
+                        } else if (nodeToAdd.action.equals(ACTION_DELETE)) {
+                            if (nodeToAdd.name.equals(currentChild.getNodeName()) &&
+                                    (currentChild.getNodeType() != Node.ELEMENT_NODE ||
+                                    (currentChild.getNodeType() == Node.ELEMENT_NODE && currentChild.getFirstChild().getNodeValue().equals(nodeToAdd.theNode.getFirstChild().getNodeValue()))) ) {
+                                debug("NODE REMOVED - DELETE - " + currentChild.getNodeName() + (currentChild.getNodeType() == Node.ELEMENT_NODE) + " " + currentChild.getNodeType() + " - " + currentChild.getFirstChild().getNodeValue());
+                                target.removeChild(currentChild);
+                            } else {
+                                debug("Not removing node. " + currentChild.getNodeName() + " " + currentChild.getNodeType() + " - " + currentChild.getFirstChild().getNodeValue());
+                                debug("  nodeToAdd.name.equals(currentChild.getNodeName()? " + nodeToAdd.name.equals(currentChild.getNodeName()));
+                                debug("  currentChild.getNodeType() == Node.ELEMENT_NODE? " + (currentChild.getNodeType() == Node.ELEMENT_NODE));
+                                debug("  currentChild.getFirstChild().getNodeValue() = " + currentChild.getFirstChild().getNodeValue());
+                                debug("  nodeToAdd.theNode.getFirstChild().getNodeValue() = " + nodeToAdd.theNode.getFirstChild().getNodeValue());
+                                debug("  equal? " + currentChild.getFirstChild().getNodeValue().equals(nodeToAdd.theNode.getFirstChild().getNodeValue()));
+
+                            }
+                        } else {
+                            debug("! No action taken.  " + nodeToAdd.name + " delete?" +  nodeToAdd.action.equals(ACTION_DELETE) + " '" +  nodeToAdd.action + "'");
+                        }
+
+                        target.normalize();
+                    }
+                }
+
+                if (! nodeToAdd.action.equals(ACTION_DELETE)) {
+                    Node placeToAddTo = target;
+
+                    if (nodeToAdd.theNode.getNodeName().equals(target.getNodeName())) {
+                        debug("Trying to add " + nodeToAdd.theNode.getNodeName() + " to " + target.getNodeName());
+                    } else {
+                        StringTokenizer tokenizer = new StringTokenizer(nodeToAdd.parent,  "/");
+                        debug("No exact match.  Finding true parent." + nodeToAdd.theNode.getNodeName() + " : " + target.getNodeName());
+
+                        boolean found = false;
+
+                        while (tokenizer.hasMoreElements()) {
+                            String current = (String)tokenizer.nextElement();
+                            debug("- add missing element loop.  current=" + current  + ", target.getNodeName()=" + target.getNodeName());
+
+                            if (found) {
+                                debug("- adding <" + current + "/> to " + placeToAddTo.getNodeName());
+
+                                placeToAddTo = placeToAddTo.appendChild(placeToAddTo.getOwnerDocument().createElement(current));
+
+                            } else if (current.equals(target.getNodeName())) {
+                                found = true;
+                            }
+                        }
+                        debug("Done adding missing elements");
+                    }
+
+                    debug("attempting to add to " + placeToAddTo.getNodeName());
+                    placeToAddTo.appendChild(nodeToAdd.theNode);
+
+                    // Hack for a prettier print.  Without this all new elements are put on the same line.
+                    placeToAddTo.appendChild(placeToAddTo.getOwnerDocument().createTextNode("\n"));
+                }
+            }
+
+            // store the file
+            writeXMLToFile(doc, outputFilename);
+
+        } catch (SAXParseException err) {
+            System.out.println ("** Parsing error" + ", line " + err.getLineNumber () + ", uri " + err.getSystemId ());
+            System.out.println(" " + err.getMessage ());
+
+        } catch (SAXException e) {
+            Exception x = e.getException ();
+            ((x == null) ? e : x).printStackTrace ();
+
+        } catch (Throwable t) {
+            t.printStackTrace ();
+        }
+    }
+
+
+    public void writeXMLToFile(Document doc, String filename) {
+        try {
+            File file=new File(filename);
+            FileWriter  fileWriter = new FileWriter(file);
+
+            /*
+			// As stolen from http://forum.java.sun.com/thread.jspa?threadID=552012&messageID=2699430
+			// link is now: https://forum.java.sun.com/message/7647472#7647472
+			// Adobe used this, but doesn't own it so can't donate it to Apache
+            XMLSerializer xmlWriter=new XMLSerializer();
+            xmlWriter.serializeXmlDoc(doc, file);
+            */
+
+            // Alternative #1 - everything on its own line including text.  Some extra spaces.  Looks strange.
+            /*
+            FileOutputStream outputStream = new FileOutputStream(file);
+            XMLUtils.PrettyDocumentToStream(doc, outputStream);
+            outputStream.close();
+            */
+
+            // Alternative #2 - everything on its own line including text.  Some extra spaces.  Looks strange.
+            /*
+            XMLUtils.PrettyDocumentToWriter(doc, fileWriter);
+            fileWriter.close();
+            */
+
+
+            // Alternative #3 - but without setPreserveSpace() it's all bunched together and
+            // with setPreserveSpace() it's the same as the original.
+            OutputFormat format = new OutputFormat(doc);
+            format.setLineWidth(65);
+            format.setIndenting(true);
+            format.setIndent(2);
+            //format.setPreserveSpace();
+            org.apache.xml.serialize.XMLSerializer serializer = new XMLSerializer(fileWriter, format);
+            serializer.serialize(doc);
+
+        } catch (FileNotFoundException fnf) {
+            System.out.println("FILE NOT FOUND!!!" + filename);
+        } catch (IOException ioe) {
+            System.out.println("UNABLE TO CREATE NEW FILE. " + filename);
+        }
+    }
+
+
+    public Node findNode(String path, Document doc) {
+        StringTokenizer targetTokenizer = new StringTokenizer(path, "/");
+
+        Node targetNode=doc;
+
+        while (targetTokenizer.hasMoreTokens()) {
+            String currentTargetString= targetTokenizer.nextToken();
+            NodeList nodes=targetNode.getChildNodes();
+            boolean found = false;
+            for (int i=0;i<nodes.getLength(); i++) {
+                if (nodes.item(i).getNodeName().equals(currentTargetString)) {
+                    targetNode=nodes.item(i);
+                    found=true;
+                    break;
+                }
+            }
+
+            if (!found ) {
+                debug("Node was not found. Attempting to add " + currentTargetString + " to " + targetNode.getNodeName());
+                targetNode = targetNode.appendChild(doc.createElement(currentTargetString));
+            }
+        }
+
+        debug("targetNode.getNodeName() = " + targetNode.getNodeName());
+        return targetNode;
+    }
+
+
+    public void debug(String value) {
+        if (debug)
+            System.out.println(value);
+    }
+}
+
+
+class NamedNode {
+    String name;
+    String parent;
+    String action;
+    Node theNode;
+
+
+    NamedNode(String name, String parent, String action, Node theNode) {
+        this.name=name;
+        this.parent=parent;
+        this.action=action;
+        this.theNode=theNode;
+    }
+
+}
\ No newline at end of file