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 2016/06/08 18:07:10 UTC

svn commit: r1747427 - in /myfaces/tobago/trunk: tobago-example/tobago-example-demo/src/main/webapp/ tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/ tobago-tool/tobago-tool-apt/src/test/ tobago-tool/tobago-tool-apt/sr...

Author: lofwyr
Date: Wed Jun  8 18:07:10 2016
New Revision: 1747427

URL: http://svn.apache.org/viewvc?rev=1747427&view=rev
Log:
TOBAGO-1566: Enhance the check of the Facelet pages

Added:
    myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/test/
    myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/test/java/
    myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/test/java/org/
    myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/test/java/org/apache/
    myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/test/java/org/apache/myfaces/
    myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/test/java/org/apache/myfaces/tobago/
    myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/test/java/org/apache/myfaces/tobago/apt/
    myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/test/java/org/apache/myfaces/tobago/apt/processor/
    myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/test/java/org/apache/myfaces/tobago/apt/processor/CheckstyleConfigGeneratorUnitTest.java
Modified:
    myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/init.xhtml
    myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/menu.xhtml
    myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/plain.xhtml
    myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/CheckstyleConfigGenerator.java

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/init.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/init.xhtml?rev=1747427&r1=1747426&r2=1747427&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/init.xhtml (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/init.xhtml Wed Jun  8 18:07:10 2016
@@ -19,19 +19,24 @@
 
 <f:view locale="#{clientConfigController.locale}"
         xmlns:f="http://java.sun.com/jsf/core"
-        xmlns:tc="http://myfaces.apache.org/tobago/component"
-    >
+        xmlns:tc="http://myfaces.apache.org/tobago/component">
+
   <tc:loadBundle basename="overview" var="overviewBundle"/>
   <tc:page applicationIcon="icon/favicon.ico" label="#{overviewBundle.pageTitle}" id="page">
-    <f:facet name="layout">
-      <tc:gridLayout marginLeft="100px" marginTop="100px" rowSpacing="40px" rows="auto;auto"/>
-    </f:facet>
+
     <f:facet name="action">
       <tc:link action="#{navigationState.gotoFirst}"/>
     </f:facet>
 
-    <tc:image value="image/tobago_head.png" width="150px" height="83px"/>
-    <tc:out value="Initializing ..."/>
+    <!-- todo: justifyContent -->
+    <tc:flexLayout rows="auto;auto" alignItems="center" justifyContent="center">
+
+      <tc:image value="image/tobago_head.png">
+        <tc:style width="150px" height="83px"/>
+      </tc:image>
+
+      <tc:out value="Initializing ..."/>
+    </tc:flexLayout>
 
   </tc:page>
 </f:view>

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/menu.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/menu.xhtml?rev=1747427&r1=1747426&r2=1747427&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/menu.xhtml (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/menu.xhtml Wed Jun  8 18:07:10 2016
@@ -31,7 +31,6 @@
 -->
 
     <tc:bar id="bar">
-    <!--<tc:bar image="image/feather-leaf.png" label="Tobago Demo" id="bar">-->
       <f:facet name="brand">
         <tc:link image="image/feather-leaf.png" label="Tobago Demo" id="brand" link="/"/>
       </f:facet>

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/plain.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/plain.xhtml?rev=1747427&r1=1747426&r2=1747427&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/plain.xhtml (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/plain.xhtml Wed Jun  8 18:07:10 2016
@@ -23,7 +23,7 @@
 
   <f:view locale="#{clientConfigController.locale}">
     <tc:loadBundle basename="overview" var="overviewBundle"/>
-    <tc:page label="Test" id="page" width="1000px" height="750px">
+    <tc:page label="Test" id="page">
 
       <ui:insert/>
 

Modified: myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/CheckstyleConfigGenerator.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/CheckstyleConfigGenerator.java?rev=1747427&r1=1747426&r2=1747427&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/CheckstyleConfigGenerator.java (original)
+++ myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/java/org/apache/myfaces/tobago/apt/processor/CheckstyleConfigGenerator.java Wed Jun  8 18:07:10 2016
@@ -168,6 +168,7 @@ public class CheckstyleConfigGenerator e
         addTag(taglib, parent, annotationTag.deprecatedName(), document);
         addAttributes(typeElement, taglib, parent, annotationTag.name(), document);
       }
+      addAttributesForTag(typeElement, taglib, parent, annotationTag.name(), document);
     }
   }
 
@@ -193,6 +194,48 @@ public class CheckstyleConfigGenerator e
     tagSet = new HashSet<String>();
   }
 
+  protected void addAttributesForTag(
+      final TypeElement type, final String taglib, final Element parent, final String tagName,
+      final Document document)
+      throws ClassNotFoundException {
+
+    List<String> attributes = new ArrayList<String>();
+    for (final javax.lang.model.element.Element element : getAllMembers(type)) {
+      if (element instanceof ExecutableElement) {
+        final ExecutableElement executableElement = (ExecutableElement) element;
+        if (executableElement.getAnnotation(TagAttribute.class) == null
+            && executableElement.getAnnotation(UIComponentTagAttribute.class) == null) {
+          continue;
+        }
+        final TagAttribute tagAttribute = executableElement.getAnnotation(TagAttribute.class);
+        if (tagAttribute != null) {
+          final String simpleName = executableElement.getSimpleName().toString();
+          if (simpleName.startsWith("set") || simpleName.startsWith("get")) {
+
+            String attributeStr = simpleName.substring(3, 4).toLowerCase(Locale.ENGLISH) + simpleName.substring(4);
+            if (tagAttribute.name().length() > 0) {
+              attributeStr = tagAttribute.name();
+            }
+            attributes.add(attributeStr);
+          }
+        }
+      }
+    }
+    final String regexp = getRegExpForUndefinedAttributes(taglib, tagName, attributes);
+
+    final String message = "Found an unknown attribute in tag '" + tagName + "'.";
+
+    Element module = createRegexpModule(regexp, message, document);
+    parent.appendChild(module);
+
+    if (taglib.equals("tx")) {
+      final String m2 = "The taglib tx is deprecated, please use tc with labelLayout. Found tag 'tx:" + tagName + "'.";
+      module = createRegexpModule("<" + taglib + ":" + tagName + "\\b", m2, document);
+      parent.appendChild(module);
+    }
+
+  }
+
   protected void addAttributes(
       final TypeElement type, final String taglib, final Element tagElement, final String tagName,
       final Document document)
@@ -286,4 +329,25 @@ public class CheckstyleConfigGenerator e
     return module;
   }
 
+  protected static String getRegExpForUndefinedAttributes(
+      String taglib, String tagName, List<String> attributes) {
+    final StringBuilder builder = new StringBuilder();
+    builder.append("<");
+    builder.append(taglib);
+    builder.append(":");
+    builder.append(tagName);
+    builder.append("(\\s+(");
+    for (String attribute : attributes) {
+      builder.append(attribute);
+      builder.append('|');
+    }
+    builder.append("xmlns:\\w*)=\\\"([^\"=<>]*)\\\")*\\s+(?!(");
+    for (String attribute : attributes) {
+      builder.append(attribute);
+      builder.append('|');
+    }
+    builder.append("xmlns:\\w*|\\W))");
+    return builder.toString();
+  }
+
 }

Added: myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/test/java/org/apache/myfaces/tobago/apt/processor/CheckstyleConfigGeneratorUnitTest.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/test/java/org/apache/myfaces/tobago/apt/processor/CheckstyleConfigGeneratorUnitTest.java?rev=1747427&view=auto
==============================================================================
--- myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/test/java/org/apache/myfaces/tobago/apt/processor/CheckstyleConfigGeneratorUnitTest.java (added)
+++ myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/test/java/org/apache/myfaces/tobago/apt/processor/CheckstyleConfigGeneratorUnitTest.java Wed Jun  8 18:07:10 2016
@@ -0,0 +1,53 @@
+/*
+ * 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.myfaces.tobago.apt.processor;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.Arrays;
+
+public class CheckstyleConfigGeneratorUnitTest {
+
+  @Test
+  public void testGetRegExpForUndefinedAttributes() {
+
+    String regexp = CheckstyleConfigGenerator.getRegExpForUndefinedAttributes(
+        "tc", "textarea", Arrays.asList("attr1", "attr2"));
+
+    Assert.assertEquals(
+        "<tc:textarea(\\s+(attr1|attr2|xmlns:\\w*)=\\\"([^\"=<>]*)\\\")*\\s+(?!(attr1|attr2|xmlns:\\w*|\\W))", regexp);
+
+    regexp = ".*" + regexp + ".*";
+
+    Assert.assertFalse("<tc:textarea attr1=\"bla bla\"/>".matches(regexp));
+    Assert.assertFalse("<tc:textarea attr2=\"bla bla\"/>".matches(regexp));
+    Assert.assertFalse("<tc:textarea attr2=\"bla bla\" attr1=\".....\"/>".matches(regexp));
+    Assert.assertTrue("<tc:textarea hallo=\"bla bla\"/>".matches(regexp));
+
+    Assert.assertFalse("<tc:textarea xmlns:f=\"http://java.sun.com/jsf/core\" attr1=\"bla bla\"/>".matches(regexp));
+    Assert.assertTrue("<tc:textarea xmlns:f=\"http://java.sun.com/jsf/core\" hallo=\"bla bla\"/>".matches(regexp));
+
+    Assert.assertFalse("<any> <tc:textarea      attr1=\"bla bla\"     /> <any>".matches(regexp));
+    Assert.assertFalse("<any> <tc:textarea         attr2=\"bla bla\"  /><any>".matches(regexp));
+    Assert.assertFalse("<any> <tc:textarea            attr2=\"bla bla\"    attr1=\".....\"/><any> ".matches(regexp));
+    Assert.assertTrue("<any> <tc:textarea        hallo=\"bla bla\"         /> <any> ".matches(regexp));
+  }
+}