You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/03/15 07:39:40 UTC

[3/4] camel git commit: Minor refactoring and bug fixes.

Minor refactoring and bug fixes.


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

Branch: refs/heads/master
Commit: c87732dbdbce014930ab6e6d60d38b11e736ab3f
Parents: f88d6dd
Author: nkukhar <ku...@gmail.com>
Authored: Sat Mar 14 01:06:46 2015 -0700
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Mar 15 07:38:49 2015 +0100

----------------------------------------------------------------------
 .../camel/maven/CamelSpringNamespace.java       |   4 +-
 .../java/org/apache/camel/maven/Constants.java  |   2 +
 .../maven/EipDocumentationEnricherMojo.java     | 138 +++++++++----------
 .../java/org/apache/camel/maven/XmlHelper.java  |  55 ++++++++
 4 files changed, 121 insertions(+), 78 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/c87732db/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/CamelSpringNamespace.java
----------------------------------------------------------------------
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/CamelSpringNamespace.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/CamelSpringNamespace.java
index 3daf1d3..ee443e3 100644
--- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/CamelSpringNamespace.java
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/CamelSpringNamespace.java
@@ -29,8 +29,8 @@ public class CamelSpringNamespace implements NamespaceContext {
         if (prefix == null) {
             throw new IllegalArgumentException("The prefix cannot be null.");
         }
-        if ("xs".equals(prefix)) {
-            return "http://www.w3.org/2001/XMLSchema";
+        if (Constants.XML_SCHEMA_NAMESPACE_PREFIX.equals(prefix)) {
+            return Constants.XML_SCHEMA_NAMESPACE_URI;
         }
         return null;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/c87732db/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/Constants.java
----------------------------------------------------------------------
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/Constants.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/Constants.java
index ebfd846..e26ce78 100644
--- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/Constants.java
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/Constants.java
@@ -27,6 +27,8 @@ public final class Constants {
     public static final int WRAP_LENGTH = 80;
 
     // XML constants.
+    public static final String XML_SCHEMA_NAMESPACE_PREFIX = "xs";
+    public static final String XML_SCHEMA_NAMESPACE_URI = "http://www.w3.org/2001/XMLSchema";
     public static final String NAME_ATTRIBUTE_NAME = "name";
     public static final String TYPE_ATTRIBUTE_NAME = "type";
     public static final String XS_ANNOTATION_ELEMENT_NAME = "xs:annotation";

http://git-wip-us.apache.org/repos/asf/camel/blob/c87732db/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java
----------------------------------------------------------------------
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java
index db6ae1f..031e7d7 100644
--- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java
@@ -24,26 +24,18 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathExpressionException;
-import javax.xml.xpath.XPathFactory;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -63,50 +55,59 @@ public class EipDocumentationEnricherMojo extends AbstractMojo {
      * Path to camel EIP schema.
      */
     @Parameter(required = true)
-    File inputCamelSchemaFile;
+    public File inputCamelSchemaFile;
 
     /**
      * Path to camel EIP schema with enriched documentation.
      */
     @Parameter(required = true)
-    File outputCamelSchemaFile;
+    public File outputCamelSchemaFile;
 
     /**
      * Path to camel core project root directory.
      */
     @Parameter(defaultValue = "${project.build.directory}/../../..//camel-core")
-    File camelCoreDir;
+    public File camelCoreDir;
 
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
-        Set<String> injectedTypes = new HashSet<String>();
+        validateExists(inputCamelSchemaFile, "inputCamelSchemaFile");
+        validateIsFile(inputCamelSchemaFile, "inputCamelSchemaFile");
+        validateExists(camelCoreDir, "camelCoreDir");
+        validateIsDirectory(camelCoreDir, "camelCoreDir");
+        try {
+            runPlugin();
+        } catch (Exception e) {
+            throw new MojoExecutionException("Error during plugin execution", e);
+        }
+    }
+
+    private void runPlugin() throws Exception {
         File rootDir = new File(camelCoreDir, Constants.PATH_TO_MODEL_DIR);
-        Document document = buildNamespaceAwareDocument(inputCamelSchemaFile);
-        XPath xPath = buildXPath(new CamelSpringNamespace());
+        Document document = XmlHelper.buildNamespaceAwareDocument(inputCamelSchemaFile);
+        XPath xPath = XmlHelper.buildXPath(new CamelSpringNamespace());
         DomFinder domFinder = new DomFinder(document, xPath);
         DocumentationEnricher documentationEnricher = new DocumentationEnricher(document);
         Map<String, File> jsonFiles = PackageHelper.findJsonFiles(rootDir);
-        try {
-            NodeList elementsAndTypes = domFinder.findElementsAndTypes();
-            documentationEnricher.enrichTopLevelElementsDocumentation(elementsAndTypes, jsonFiles);
-            Map<String, String> typeToNameMap = buildTypeToNameMap(elementsAndTypes);
-            for (Map.Entry<String, String> entry : typeToNameMap.entrySet()) {
-                String elementType = entry.getKey();
-                String elementName = entry.getValue();
-                if (jsonFileExistsForElement(jsonFiles, elementName)) {
-                    injectAttributesDocumentation(domFinder,
-                            documentationEnricher,
-                            jsonFiles.get(elementName),
-                            elementType,
-                            injectedTypes);
-                }
+
+        NodeList elementsAndTypes = domFinder.findElementsAndTypes();
+        documentationEnricher.enrichTopLevelElementsDocumentation(elementsAndTypes, jsonFiles);
+        Map<String, String> typeToNameMap = buildTypeToNameMap(elementsAndTypes);
+        Set<String> injectedTypes = new HashSet<String>();
+
+        for (Map.Entry<String, String> entry : typeToNameMap.entrySet()) {
+            String elementType = entry.getKey();
+            String elementName = entry.getValue();
+            if (jsonFileExistsForElement(jsonFiles, elementName)) {
+                injectAttributesDocumentation(domFinder,
+                        documentationEnricher,
+                        jsonFiles.get(elementName),
+                        elementType,
+                        injectedTypes);
             }
-            saveToFile(document, outputCamelSchemaFile, buildTransformer());
-        } catch (XPathExpressionException e) {
-            throw new MojoExecutionException("Error during documentation enrichment", e);
-        } catch (IOException e) {
-            throw new MojoExecutionException("Error during documentation enrichment", e);
         }
+
+        saveToFile(document, outputCamelSchemaFile, XmlHelper.buildTransformer());
     }
 
     private boolean jsonFileExistsForElement(Map<String, File> jsonFiles,
@@ -114,20 +115,28 @@ public class EipDocumentationEnricherMojo extends AbstractMojo {
         return jsonFiles.containsKey(elementName);
     }
 
+    /**
+     * Recursively injects documentation to complex type attributes and it's parents.
+     */
     private void injectAttributesDocumentation(DomFinder domFinder,
                                                DocumentationEnricher documentationEnricher,
                                                File jsonFile,
                                                String type,
                                                Set<String> injectedTypes) throws XPathExpressionException, IOException {
+        if (injectedTypes.contains(type)) {
+            return;
+        }
+
+        injectedTypes.add(type);
         NodeList attributeElements = domFinder.findAttributesElements(type);
         if (attributeElements.getLength() > 0) {
             documentationEnricher.enrichTypeAttributesDocumentation(attributeElements, jsonFile);
-            injectedTypes.add(type);
-            String baseType = domFinder.findBaseType(type);
+        }
+
+        String baseType = domFinder.findBaseType(type);
+        if (baseType != null && !StringUtils.isEmpty(baseType)) {
             baseType = truncateTypeNamespace(baseType);
-            if (baseType != null && !injectedTypes.contains(baseType)) {
-                injectAttributesDocumentation(domFinder, documentationEnricher, jsonFile, baseType, injectedTypes);
-            }
+            injectAttributesDocumentation(domFinder, documentationEnricher, jsonFile, baseType, injectedTypes);
         }
     }
 
@@ -152,51 +161,28 @@ public class EipDocumentationEnricherMojo extends AbstractMojo {
         return baseType.replaceAll("tns:", "");
     }
 
-    private XPath buildXPath(NamespaceContext namespaceContext) {
-        XPath xPath = XPathFactory.newInstance().newXPath();
-        xPath.setNamespaceContext(namespaceContext);
-        return xPath;
+
+    private void saveToFile(Document document, File outputFile, Transformer transformer) throws FileNotFoundException, TransformerException {
+        StreamResult result = new StreamResult(new FileOutputStream(outputFile));
+        DOMSource source = new DOMSource(document);
+        transformer.transform(source, result);
     }
 
-    private Transformer buildTransformer() throws MojoExecutionException {
-        Transformer transformer;
-        try {
-            transformer = TransformerFactory.newInstance().newTransformer();
-            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
-            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
-        } catch (TransformerConfigurationException e) {
-            throw new MojoExecutionException("Error during building transformer", e);
+    private void validateIsFile(File file, String name) throws MojoExecutionException {
+        if (!file.isFile()) {
+            throw new MojoExecutionException(name + "is not a file");
         }
-        return transformer;
     }
 
-    public Document buildNamespaceAwareDocument(File xml) throws MojoExecutionException {
-        Document result;
-        DocumentBuilder builder;
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setNamespaceAware(true);
-        try {
-            builder = factory.newDocumentBuilder();
-            result =  builder.parse(xml);
-        } catch (SAXException e) {
-            throw new MojoExecutionException("Error during building a document", e);
-        } catch (ParserConfigurationException e) {
-            throw new MojoExecutionException("Error during building a document", e);
-        } catch (IOException  e) {
-            throw new MojoExecutionException("Error during building a document", e);
+    private void validateIsDirectory(File file, String name) throws MojoExecutionException {
+        if (!file.isDirectory()) {
+            throw new MojoExecutionException(name + "is not a directory");
         }
-        return result;
     }
 
-    private void saveToFile(Document document, File outputFile, Transformer transformer) throws MojoExecutionException {
-        try {
-            StreamResult result = new StreamResult(new FileOutputStream(outputFile));
-            DOMSource source = new DOMSource(document);
-            transformer.transform(source, result);
-        } catch (TransformerException e) {
-            throw new MojoExecutionException("Error during saving to file", e);
-        } catch (FileNotFoundException e) {
-            throw new MojoExecutionException("Error during saving to file", e);
+    private void validateExists(File file, String name) throws MojoExecutionException {
+        if (file == null || !file.exists()) {
+            throw new MojoExecutionException(name + " does not exist");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/c87732db/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/XmlHelper.java
----------------------------------------------------------------------
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/XmlHelper.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/XmlHelper.java
new file mode 100644
index 0000000..7136c5c
--- /dev/null
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/XmlHelper.java
@@ -0,0 +1,55 @@
+/**
+ * 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.
+ */
+package org.apache.camel.maven;
+
+import java.io.File;
+import java.io.IOException;
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathFactory;
+
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+public final class XmlHelper {
+    private XmlHelper() { }
+
+    public static Document buildNamespaceAwareDocument(File xml) throws SAXException, ParserConfigurationException, IOException {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setNamespaceAware(true);
+        return factory.newDocumentBuilder().parse(xml);
+    }
+
+    public static Transformer buildTransformer() throws TransformerConfigurationException {
+        Transformer transformer = TransformerFactory.newInstance().newTransformer();
+        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+        transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
+        return transformer;
+    }
+
+    public static XPath buildXPath(NamespaceContext namespaceContext) {
+        XPath xPath = XPathFactory.newInstance().newXPath();
+        xPath.setNamespaceContext(namespaceContext);
+        return xPath;
+    }
+}