FAQ
Repository: camel
Updated Branches:
   refs/heads/master 54e7d3471 -> 363b34a9b


Added logic to inject documentation to base types.


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

Branch: refs/heads/master
Commit: 363b34a9be29d0d5549b1eef0257a40114947118
Parents: 54e7d34
Author: nkukhar <kukhar.n@gmail.com>
Authored: Fri Feb 20 00:21:54 2015 -0800
Committer: Claus Ibsen <davsclaus@apache.org>
Committed: Fri Feb 20 09:46:54 2015 +0100

----------------------------------------------------------------------
  .../java/org/apache/camel/maven/DomFinder.java | 6 ++
  .../maven/EipDocumentationEnricherMojo.java | 94 ++++++++++++++++----
  2 files changed, 81 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/363b34a9/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/DomFinder.java
----------------------------------------------------------------------
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/DomFinder.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/DomFinder.java
index ea62849..5c4fe47 100644
--- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/DomFinder.java
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/DomFinder.java
@@ -38,4 +38,10 @@ public class DomFinder {
                  "/xs:schema/xs:complexType[@name='" + name + "']//xs:attribute")
                  .evaluate(document, XPathConstants.NODESET);
      }
+
+ public String findBaseType(Document document, XPath xPath, String name) throws XPathExpressionException {
+ return (String) xPath.compile(
+ "/xs:schema/xs:complexType[@name='" + name + "']//xs:extension/@base")
+ .evaluate(document, XPathConstants.STRING);
+ }
  }

http://git-wip-us.apache.org/repos/asf/camel/blob/363b34a9/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 e7f482c..15ac9be 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
@@ -17,10 +17,13 @@
  package org.apache.camel.maven;

  import java.io.File;
+import java.io.FileNotFoundException;
  import java.io.FileOutputStream;
  import java.io.IOException;
  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;
@@ -33,6 +36,7 @@ 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;
@@ -75,36 +79,68 @@ public class EipDocumentationEnricherMojo extends AbstractMojo {

      @Override
      public void execute() throws MojoExecutionException, MojoFailureException {
+ Set<String> injectedTypes = new HashSet<>();
          File rootDir = new File(camelCoreDir, Constants.PATH_TO_MODEL_DIR);
          DomFinder domFinder = new DomFinder();
          DocumentationEnricher documentationEnricher = new DocumentationEnricher();
          Map<String, File> jsonFiles = PackageHelper.findJsonFiles(rootDir);
          XPath xPath = buildXPath(new CamelSpringNamespace());
+ Document document = buildNamespaceAwareDocument(inputCamelSchemaFile);
          try {
- Document document = buildNamespaceAwareDocument(inputCamelSchemaFile);
              NodeList elementsAndTypes = domFinder.findElementsAndTypes(document, xPath);
              documentationEnricher.enrichTopLevelElementsDocumentation(document, elementsAndTypes, jsonFiles);
              Map<String, String> typeToNameMap = buildTypeToNameMap(elementsAndTypes);
              for (Map.Entry<String, String> entry : typeToNameMap.entrySet()) {
- NodeList attributeElements = domFinder.findAttributesElements(document, xPath, entry.getKey());
- if (jsonFiles.containsKey(entry.getValue())) {
- documentationEnricher.enrichTypeAttributesDocumentation(document, attributeElements, jsonFiles.get(entry.getValue()));
+ String elementType = entry.getKey();
+ String elementName = entry.getValue();
+ if (jsonFileExistsForElement(jsonFiles, elementName)) {
+ injectAttributesDocumentation(domFinder,
+ documentationEnricher,
+ jsonFiles.get(elementName),
+ xPath,
+ document,
+ elementType,
+ injectedTypes);
                  }
              }
              saveToFile(document, outputCamelSchemaFile, buildTransformer());
- } catch (Exception e) {
- getLog().error(e);
+ } catch (XPathExpressionException | IOException e) {
+ throw new MojoExecutionException("Error during documentation enrichment", e);
+ }
+ }
+
+ private boolean jsonFileExistsForElement(Map<String, File> jsonFiles,
+ String elementName) {
+ return jsonFiles.containsKey(elementName);
+ }
+
+ private void injectAttributesDocumentation(DomFinder domFinder,
+ DocumentationEnricher documentationEnricher,
+ File jsonFile,
+ XPath xPath,
+ Document document,
+ String type,
+ Set<String> injectedTypes) throws XPathExpressionException, IOException {
+ NodeList attributeElements = domFinder.findAttributesElements(document, xPath, type);
+ if (attributeElements.getLength() > 0) {
+ documentationEnricher.enrichTypeAttributesDocumentation(document, attributeElements, jsonFile);
+ injectedTypes.add(type);
+ String baseType = domFinder.findBaseType(document, xPath, type);
+ baseType = truncateTypeNamespace(baseType);
+ if (baseType != null && !injectedTypes.contains(baseType)) {
+ injectAttributesDocumentation(domFinder, documentationEnricher, jsonFile, xPath, document, baseType, injectedTypes);
+ }
          }
      }

      private Map<String, String> buildTypeToNameMap(NodeList elementsAndTypes) {
- Map<String, String> typeToNameMap = new HashMap<String, String>();
+ Map<String, String> typeToNameMap = new HashMap<>();
          for (int i = 0; i < elementsAndTypes.getLength(); i++) {
              Element item = (Element) elementsAndTypes.item(i);
              String name = item.getAttribute(Constants.NAME_ATTRIBUTE_NAME);
              String type = item.getAttribute(Constants.TYPE_ATTRIBUTE_NAME);
              if (name != null && type != null) {
- type = type.replaceAll("tns:", "");
+ type = truncateTypeNamespace(type);
                  if (getLog().isDebugEnabled()) {
                      getLog().debug(String.format("Putting attributes type:'%s', name:'%s'", name, type));
                  }
@@ -114,29 +150,49 @@ public class EipDocumentationEnricherMojo extends AbstractMojo {
          return typeToNameMap;
      }

+ private String truncateTypeNamespace(String baseType) {
+ return baseType.replaceAll("tns:", "");
+ }
+
      private XPath buildXPath(NamespaceContext namespaceContext) {
          XPath xPath = XPathFactory.newInstance().newXPath();
          xPath.setNamespaceContext(namespaceContext);
          return xPath;
      }

- private Transformer buildTransformer() throws TransformerConfigurationException {
- Transformer transformer = TransformerFactory.newInstance().newTransformer();
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
+ 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);
+ }
          return transformer;
      }

- public Document buildNamespaceAwareDocument(File xml) throws ParserConfigurationException, IOException, SAXException {
+ public Document buildNamespaceAwareDocument(File xml) throws MojoExecutionException {
+ Document result;
+ DocumentBuilder builder;
          DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
          factory.setNamespaceAware(true);
- DocumentBuilder builder = factory.newDocumentBuilder();
- return builder.parse(xml);
+ try {
+ builder = factory.newDocumentBuilder();
+ result = builder.parse(xml);
+ } catch (SAXException | ParserConfigurationException | IOException e) {
+ throw new MojoExecutionException("Error during building a document", e);
+ }
+ return result;
      }

- private void saveToFile(Document document, File outputFile, Transformer transformer) throws IOException, TransformerException {
- StreamResult result = new StreamResult(new FileOutputStream(outputFile));
- DOMSource source = new DOMSource(document);
- transformer.transform(source, 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 (FileNotFoundException | TransformerException e) {
+ throw new MojoExecutionException("Error during saving to file", e);
+ }
      }
  }

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupcommits @
categoriescamel
postedFeb 20, '15 at 9:24a
activeFeb 20, '15 at 9:24a
posts1
users1
websitecamel.apache.org

1 user in discussion

Davsclaus: 1 post

People

Translate

site design / logo © 2018 Grokbase