You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2017/11/30 14:16:33 UTC

[myfaces-tobago] branch master updated: TOBAGO-1782: Clean up * using "try with resources" (new with Java 7) * Exception Handling

This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git


The following commit(s) were added to refs/heads/master by this push:
     new 67ba08a  TOBAGO-1782: Clean up * using "try with resources" (new with Java 7) * Exception Handling
67ba08a is described below

commit 67ba08af84aa49e9fafb169b001e68ae1e99b10e
Author: Udo Schnurpfeil <lo...@apache.org>
AuthorDate: Thu Nov 30 14:51:08 2017 +0100

    TOBAGO-1782: Clean up
    * using "try with resources" (new with Java 7)
    * Exception Handling
---
 .../tobago/example/demo/NavigationTree.java        |   6 +-
 .../tobago/example/demo/SourceFileReader.java      |   9 +-
 .../demo/bestpractice/BestPracticeController.java  |  19 +--
 .../tobago/apt/processor/AbstractGenerator.java    |   7 +-
 .../tobago/apt/processor/ClassesGenerator.java     |   4 +-
 .../tobago/apt/processor/FacesConfigGenerator.java | 155 ++++++++++-----------
 6 files changed, 96 insertions(+), 104 deletions(-)

diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/NavigationTree.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/NavigationTree.java
index 57e0c62..ffbdc62 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/NavigationTree.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/NavigationTree.java
@@ -156,15 +156,11 @@ public class NavigationTree implements Serializable {
     final FacesContext facesContext = FacesContext.getCurrentInstance();
     final ExternalContext externalContext = facesContext.getExternalContext();
     final String viewId = facesContext.getViewRoot().getViewId();
-    InputStream resourceAsStream = null;
-    try {
-      resourceAsStream = externalContext.getResourceAsStream(viewId);
+    try (final InputStream resourceAsStream = externalContext.getResourceAsStream(viewId)) {
       return IOUtils.toString(resourceAsStream, "UTF-8");
     } catch (final IOException e) {
       LOG.error("", e);
       return "error";
-    } finally {
-      IOUtils.closeQuietly(resourceAsStream);
     }
   }
 }
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SourceFileReader.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SourceFileReader.java
index dcea550..94e05c3 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SourceFileReader.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SourceFileReader.java
@@ -25,6 +25,7 @@ import org.slf4j.LoggerFactory;
 
 import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
+import java.io.IOException;
 import java.io.InputStream;
 
 public abstract class SourceFileReader {
@@ -36,15 +37,11 @@ public abstract class SourceFileReader {
     final ExternalContext externalContext = facesContext.getExternalContext();
     final String viewId = facesContext.getViewRoot().getViewId();
     final String file = viewId.substring(0, viewId.lastIndexOf("/")) + "/" + filename;
-    InputStream resourceAsStream = null;
-    try {
-      resourceAsStream = externalContext.getResourceAsStream(file);
+    try (final InputStream resourceAsStream = externalContext.getResourceAsStream(file)) {
       return IOUtils.toString(resourceAsStream, "UTF-8");
-    } catch (final Exception e) {
+    } catch (final IOException e) {
       LOG.error("", e);
       return null;
-    } finally {
-      IOUtils.closeQuietly(resourceAsStream);
     }
   }
 }
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/bestpractice/BestPracticeController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/bestpractice/BestPracticeController.java
index 83f2c71..53b7361 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/bestpractice/BestPracticeController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/bestpractice/BestPracticeController.java
@@ -55,13 +55,7 @@ public class BestPracticeController {
 
     final FacesContext facesContext = FacesContext.getCurrentInstance();
 
-    InputStream inputStream = null;
-    try {
-      final String path = "content/30-concept/24-non-faces-response/x-sample." + (pdf ? "pdf" : "txt");
-      inputStream = facesContext.getExternalContext().getResourceAsStream(path);
-      if (inputStream == null) {
-        inputStream = facesContext.getExternalContext().getResourceAsStream("/" + path);
-      }
+    try (final InputStream inputStream = getInputStream(pdf, facesContext)) {
       final HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
       response.setContentType(pdf ? "application/pdf" : "text/plain");
       if (outside) {
@@ -71,13 +65,20 @@ public class BestPracticeController {
     } catch (final IOException e) {
       LOG.warn("Cannot deliver " + (pdf ? "pdf" : "txt"), e);
       return "error"; // response via faces
-    } finally {
-      IOUtils.closeQuietly(inputStream);
     }
     facesContext.responseComplete();
     return null;
   }
 
+  private InputStream getInputStream(boolean pdf, FacesContext facesContext) {
+    final String path = "content/30-concept/24-non-faces-response/x-sample." + (pdf ? "pdf" : "txt");
+    InputStream inputStream = facesContext.getExternalContext().getResourceAsStream(path);
+    if (inputStream == null) {
+      inputStream = facesContext.getExternalContext().getResourceAsStream("/" + path);
+    }
+    return inputStream;
+  }
+
   public String getStatus() {
     return status;
   }
diff --git a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/AbstractGenerator.java b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/AbstractGenerator.java
index deb6e4b..f8a6f58 100644
--- a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/AbstractGenerator.java
+++ b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/AbstractGenerator.java
@@ -87,7 +87,8 @@ public abstract class AbstractGenerator extends AbstractProcessor {
 
   protected abstract void configure();
 
-  protected abstract void generate() throws Exception;
+  protected abstract void generate()
+      throws Exception;
 
   protected void info(final String message) {
     processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE,
@@ -103,7 +104,9 @@ public abstract class AbstractGenerator extends AbstractProcessor {
     final StringWriter out = new StringWriter();
     e.printStackTrace(new PrintWriter(out));
     processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
-        "<" + getClass().getSimpleName() + "> " + e.getMessage() + "\n" + out.toString());
+        "<" + getClass().getSimpleName() + "> " + e.getMessage() + "\n"
+            + (e.getCause() != null ? e.getCause().getMessage() + "\n" : "")
+            + out.toString());
   }
 
   public List<TypeElement> getTypes() {
diff --git a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/ClassesGenerator.java b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/ClassesGenerator.java
index 239795a..ff8afaf 100644
--- a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/ClassesGenerator.java
+++ b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/ClassesGenerator.java
@@ -86,12 +86,12 @@ public class ClassesGenerator extends AbstractGenerator {
   }
 
   @Override
-  public void generate() throws Exception {
+  public void generate() {
     for (final TypeElement element : getTypes()) {
       if (element.getAnnotation(UIComponentTag.class) != null) {
         try {
           createTagOrComponent(element);
-        } catch (final Exception e) {
+        } catch (final IOException|ClassNotFoundException|RuntimeException e) {
           throw new TobagoGeneratorException(
               "Error during processing of " + element.getAnnotation(UIComponentTag.class).uiComponent(), e);
         }
diff --git a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/FacesConfigGenerator.java b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/FacesConfigGenerator.java
index b7c2a4a..d587c20 100644
--- a/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/FacesConfigGenerator.java
+++ b/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/FacesConfigGenerator.java
@@ -151,94 +151,89 @@ public class FacesConfigGenerator extends AbstractGenerator {
   @Override
   protected void generate() throws Exception {
     final Document document;
-    Writer writer = null;
-    try {
-      final String content = IOUtils.toString(new FileInputStream(sourceFacesConfigFile));
-      final SAXBuilder builder = new SAXBuilder();
-      document = builder.build(new StringReader(content));
-
-      // Normalise line endings. For some reason, JDOM replaces \r\n inside a comment with \n.
-      normaliseLineEndings(document);
-
-      // rewrite DOM as a string to find differences, since text outside the root element is not tracked
-
-      final org.jdom2.Element rootElement = document.getRootElement();
-
-      rootElement.setNamespace(Namespace.getNamespace("http://java.sun.com/xml/ns/javaee"));
-      final Namespace xsi = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
-      rootElement.addNamespaceDeclaration(Namespace.getNamespace("xi", "http://www.w3.org/2001/XInclude"));
-      rootElement.setAttribute(new Attribute("schemaLocation",
-          "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd", xsi));
-      rootElement.setAttribute("version", "2.0");
-
-      final Namespace namespace = rootElement.getNamespace();
-      applyNamespace(rootElement, namespace);
-      final List<org.jdom2.Element> components = rootElement.getChildren(COMPONENT, namespace);
-
-      final List<org.jdom2.Element> newComponents = new ArrayList<>();
-      final List<org.jdom2.Element> newRenderer = new ArrayList<>();
-      final List<org.jdom2.Element> newConverters = new ArrayList<>();
-      final List<org.jdom2.Element> newValidators = new ArrayList<>();
-
-      for (final TypeElement element : getTypes()) {
-        if (element.getAnnotation(UIComponentTag.class) != null) {
-          addElement(element, newComponents, newRenderer, namespace);
-        } else if (element.getAnnotation(Converter.class) != null) {
-          addConverter(element, newConverters, namespace);
-        } else if (element.getAnnotation(Validator.class) != null) {
-          addValidator(element, newValidators, namespace);
-        }
+    final String content = IOUtils.toString(new FileInputStream(sourceFacesConfigFile));
+    final SAXBuilder builder = new SAXBuilder();
+    document = builder.build(new StringReader(content));
+
+    // Normalise line endings. For some reason, JDOM replaces \r\n inside a comment with \n.
+    normaliseLineEndings(document);
+
+    // rewrite DOM as a string to find differences, since text outside the root element is not tracked
+
+    final org.jdom2.Element rootElement = document.getRootElement();
+
+    rootElement.setNamespace(Namespace.getNamespace("http://java.sun.com/xml/ns/javaee"));
+    final Namespace xsi = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
+    rootElement.addNamespaceDeclaration(Namespace.getNamespace("xi", "http://www.w3.org/2001/XInclude"));
+    rootElement.setAttribute(new Attribute("schemaLocation",
+        "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd", xsi));
+    rootElement.setAttribute("version", "2.0");
+
+    final Namespace namespace = rootElement.getNamespace();
+    applyNamespace(rootElement, namespace);
+    final List<org.jdom2.Element> components = rootElement.getChildren(COMPONENT, namespace);
+
+    final List<org.jdom2.Element> newComponents = new ArrayList<>();
+    final List<org.jdom2.Element> newRenderer = new ArrayList<>();
+    final List<org.jdom2.Element> newConverters = new ArrayList<>();
+    final List<org.jdom2.Element> newValidators = new ArrayList<>();
+
+    for (final TypeElement element : getTypes()) {
+      if (element.getAnnotation(UIComponentTag.class) != null) {
+        addElement(element, newComponents, newRenderer, namespace);
+      } else if (element.getAnnotation(Converter.class) != null) {
+        addConverter(element, newConverters, namespace);
+      } else if (element.getAnnotation(Validator.class) != null) {
+        addValidator(element, newValidators, namespace);
       }
+    }
 
-      final List<org.jdom2.Element> elementsToAdd = new ArrayList<>();
-      // sort out duplicates
-      for (final org.jdom2.Element newElement : newComponents) {
-        final boolean found = containsElement(components, newElement);
-        if (!found) {
-          elementsToAdd.add(newElement);
-        }
-      }
-      if (!elementsToAdd.isEmpty()) {
-        // if faces-config contains no component section add the components after factory or application
-        final int lastIndex = getIndexAfter(rootElement, COMPONENT, FACTORY, APPLICATION);
-        rootElement.addContent(lastIndex, elementsToAdd);
-      }
-      if (!newRenderer.isEmpty()) {
-        org.jdom2.Element renderKit = getFirstElementByName(rootElement, RENDER_KIT);
-        if (renderKit == null) {
-          renderKit = new org.jdom2.Element(RENDER_KIT, namespace);
-          final int last = getIndexAfter(rootElement, CONVERTER, COMPONENT, FACTORY, APPLICATION, BEHAVIOR);
-          rootElement.addContent(last, renderKit);
-        }
-        final org.jdom2.Element renderKitId = new org.jdom2.Element(RENDER_KIT_ID, namespace);
-        renderKitId.setText("tobago");
-        renderKit.addContent(0, renderKitId);
-        final org.jdom2.Element renderKitClass = new org.jdom2.Element(RENDER_KIT_CLASS, namespace);
-        renderKitClass.setText("org.apache.myfaces.tobago.renderkit.TobagoRenderKit");
-        renderKit.addContent(1, renderKitClass);
-        renderKit.addContent(2, newRenderer);
-      }
-      if (!newConverters.isEmpty()) {
-        final int last = getIndexAfter(rootElement, RENDER_KIT, CONVERTER, COMPONENT, FACTORY, APPLICATION, BEHAVIOR);
-        rootElement.addContent(last, newConverters);
+    final List<org.jdom2.Element> elementsToAdd = new ArrayList<>();
+    // sort out duplicates
+    for (final org.jdom2.Element newElement : newComponents) {
+      final boolean found = containsElement(components, newElement);
+      if (!found) {
+        elementsToAdd.add(newElement);
       }
-      if (!newValidators.isEmpty()) {
-        rootElement.addContent(newValidators);
+    }
+    if (!elementsToAdd.isEmpty()) {
+      // if faces-config contains no component section add the components after factory or application
+      final int lastIndex = getIndexAfter(rootElement, COMPONENT, FACTORY, APPLICATION);
+      rootElement.addContent(lastIndex, elementsToAdd);
+    }
+    if (!newRenderer.isEmpty()) {
+      org.jdom2.Element renderKit = getFirstElementByName(rootElement, RENDER_KIT);
+      if (renderKit == null) {
+        renderKit = new org.jdom2.Element(RENDER_KIT, namespace);
+        final int last = getIndexAfter(rootElement, CONVERTER, COMPONENT, FACTORY, APPLICATION, BEHAVIOR);
+        rootElement.addContent(last, renderKit);
       }
-      final FileObject resource = processingEnv.getFiler().createResource(
-          StandardLocation.SOURCE_OUTPUT, "", targetFacesConfigFile);
-      info("Writing to file: " + resource.toUri());
-      writer = resource.openWriter();
+      final org.jdom2.Element renderKitId = new org.jdom2.Element(RENDER_KIT_ID, namespace);
+      renderKitId.setText("tobago");
+      renderKit.addContent(0, renderKitId);
+      final org.jdom2.Element renderKitClass = new org.jdom2.Element(RENDER_KIT_CLASS, namespace);
+      renderKitClass.setText("org.apache.myfaces.tobago.renderkit.TobagoRenderKit");
+      renderKit.addContent(1, renderKitClass);
+      renderKit.addContent(2, newRenderer);
+    }
+    if (!newConverters.isEmpty()) {
+      final int last = getIndexAfter(rootElement, RENDER_KIT, CONVERTER, COMPONENT, FACTORY, APPLICATION, BEHAVIOR);
+      rootElement.addContent(last, newConverters);
+    }
+    if (!newValidators.isEmpty()) {
+      rootElement.addContent(newValidators);
+    }
+    final FileObject resource = processingEnv.getFiler().createResource(
+        StandardLocation.SOURCE_OUTPUT, "", targetFacesConfigFile);
+    info("Writing to file: " + resource.toUri());
 
+    try (Writer writer = resource.openWriter()) {
       final StringWriter facesConfig = new StringWriter(1024);
       final Format format = Format.getPrettyFormat();
       format.setLineSeparator(SEPARATOR);
       final XMLOutputter out = new XMLOutputter(format);
       out.output(document, facesConfig);
       writer.append(facesConfig.toString());
-
-    } finally {
-      IOUtils.closeQuietly(writer);
     }
   }
 
@@ -294,7 +289,7 @@ public class FacesConfigGenerator extends AbstractGenerator {
   }
 
   private org.jdom2.Element getEqualElement(
-          final List<org.jdom2.Element> components, final org.jdom2.Element newElement) {
+      final List<org.jdom2.Element> components, final org.jdom2.Element newElement) {
     for (final org.jdom2.Element element : components) {
       if (equals(element, newElement)) {
         return element;
@@ -565,7 +560,7 @@ public class FacesConfigGenerator extends AbstractGenerator {
   }
 
   private void addFacets(
-          final UIComponentTag componentTag, final Namespace namespace, final org.jdom2.Element element) {
+      final UIComponentTag componentTag, final Namespace namespace, final org.jdom2.Element element) {
     final Facet[] facets = componentTag.facets();
     for (final Facet facet : facets) {
       final org.jdom2.Element facetElement = new org.jdom2.Element(FACET, namespace);
@@ -580,7 +575,7 @@ public class FacesConfigGenerator extends AbstractGenerator {
       facetElement.addContent(facetName);
       final org.jdom2.Element facetExtension = new org.jdom2.Element(FACET_EXTENSION, namespace);
       final org.jdom2.Element elementAllowedChildComponents
-              = new org.jdom2.Element(ALLOWED_CHILD_COMPONENTS, namespace);
+          = new org.jdom2.Element(ALLOWED_CHILD_COMPONENTS, namespace);
       final String[] allowedChildComponents = facet.allowedChildComponenents();
       final StringBuilder allowedComponentTypes = new StringBuilder();
       for (final String componentType : allowedChildComponents) {

-- 
To stop receiving notification emails like this one, please contact
['"commits@myfaces.apache.org" <co...@myfaces.apache.org>'].