]> source.dussan.org Git - vaadin-framework.git/commitdiff
Uses special <!-- portlet ... --> comment to detect which portlets are included
authorMarc Englund <marc.englund@itmill.com>
Mon, 28 Apr 2008 09:59:13 +0000 (09:59 +0000)
committerMarc Englund <marc.englund@itmill.com>
Mon, 28 Apr 2008 09:59:13 +0000 (09:59 +0000)
svn changeset:4257/svn branch:trunk

portlet-src/com/itmill/toolkit/portlet/util/PortletConfigurationGenerator.java

index 5b630858b50f9440ea0a3f7723d6d3bef2813133..403e181f20c8c0160fc6ac51b2f7e30c852572f7 100644 (file)
@@ -19,6 +19,10 @@ import java.util.regex.Pattern;
  * Currently uses regular expressions to avoid dependencies; does not strictly\r
  * adhere to xml rules, but should work with a 'normal' web.xml.\r
  * \r
+ * To be included, the servlet-mapping must include a special comment: <!--\r
+ * portlet --> If the portlet requires some special styles (i.e height): <!--\r
+ * portlet style=height:400px -->\r
+ * \r
  * @author marc\r
  */\r
 public class PortletConfigurationGenerator {\r
@@ -29,79 +33,79 @@ public class PortletConfigurationGenerator {
     private static final String LIFERAY_DISPLAY_XML_FILE = "liferay-display.xml";\r
 \r
     // "templates" follow;\r
-    private static final String PORTLET_XML_HEAD = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"\r
-            + "<portlet-app\r\n"\r
-            + "        xmlns=\"http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd\"\r\n"\r
-            + "        version=\"1.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n"\r
-            + "        xsi:schemaLocation=\"http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd\">\r\n";\r
-    private static final String PORTLET_XML_SECTION = "        <portlet>\r\n"\r
-            + "                <portlet-name>%PORTLETNAME%</portlet-name>\r\n"\r
-            + "                <display-name>IT Mill Toolkit %NAME%</display-name>\r\n"\r
-            + "                <portlet-class>com.itmill.toolkit.terminal.gwt.server.ApplicationPortlet</portlet-class>\r\n"\r
-            + "                <init-param>\r\n"\r
-            + "                        <name>application</name>\r\n"\r
-            + "                        <value>%URL%</value>\r\n"\r
-            + "                </init-param>\r\n"\r
-            + "                <supports>\r\n"\r
-            + "                        <mime-type>text/html</mime-type>\r\n"\r
-            + "                        <portlet-mode>view</portlet-mode>\r\n"\r
-            + "                        <portlet-mode>edit</portlet-mode>\r\n"\r
-            + "                        <portlet-mode>help</portlet-mode>\r\n"\r
-            + "                </supports>\r\n"\r
-            + "                <portlet-info>\r\n"\r
-            + "                        <title>%NAME%</title>\r\n"\r
-            + "                        <short-title>%NAME%</short-title>\r\n"\r
-            + "                </portlet-info>\r\n"\r
-            + "                \r\n"\r
-            + "                <security-role-ref>\r\n"\r
-            + "                        <role-name>administrator</role-name>\r\n"\r
-            + "                </security-role-ref>\r\n"\r
-            + "                <security-role-ref>\r\n"\r
-            + "                        <role-name>guest</role-name>\r\n"\r
-            + "                </security-role-ref>\r\n"\r
-            + "                <security-role-ref>\r\n"\r
-            + "                        <role-name>power-user</role-name>\r\n"\r
-            + "                </security-role-ref>\r\n"\r
-            + "                <security-role-ref>\r\n"\r
-            + "                        <role-name>user</role-name>\r\n"\r
-            + "                </security-role-ref>\r\n"\r
-            + "        </portlet>\r\n";\r
-    private static final String PORTLET_XML_FOOT = "        <container-runtime-option>\r\n"\r
-            + "                <name>javax.portlet.escapeXml</name>\r\n"\r
-            + "                <value>false</value>\r\n"\r
-            + "        </container-runtime-option>" + "</portlet-app>";\r
+    private static final String PORTLET_XML_HEAD = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"\r
+            + "<portlet-app\n"\r
+            + "        xmlns=\"http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd\"\n"\r
+            + "        version=\"1.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"\r
+            + "        xsi:schemaLocation=\"http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd\">\n";\r
+    private static final String PORTLET_XML_SECTION = "        <portlet>\n"\r
+            + "                <portlet-name>%PORTLETNAME%</portlet-name>\n"\r
+            + "                <display-name>IT Mill Toolkit %NAME%</display-name>\n"\r
+            + "                <portlet-class>com.itmill.toolkit.terminal.gwt.server.ApplicationPortlet</portlet-class>\n"\r
+            + "                <init-param>\n"\r
+            + "                        <name>application</name>\n"\r
+            + "                        <value>%URL%</value>\n"\r
+            + "                </init-param>\n"\r
+            + "                %EXTRAPARAMS%\n"\r
+            + "                <supports>\n"\r
+            + "                        <mime-type>text/html</mime-type>\n"\r
+            + "                        <portlet-mode>view</portlet-mode>\n"\r
+            + "                        <portlet-mode>edit</portlet-mode>\n"\r
+            + "                        <portlet-mode>help</portlet-mode>\n"\r
+            + "                </supports>\n"\r
+            + "                <portlet-info>\n"\r
+            + "                        <title>%NAME%</title>\n"\r
+            + "                        <short-title>%NAME%</short-title>\n"\r
+            + "                </portlet-info>\n" + "                \n"\r
+            + "                <security-role-ref>\n"\r
+            + "                        <role-name>administrator</role-name>\n"\r
+            + "                </security-role-ref>\n"\r
+            + "                <security-role-ref>\n"\r
+            + "                        <role-name>guest</role-name>\n"\r
+            + "                </security-role-ref>\n"\r
+            + "                <security-role-ref>\n"\r
+            + "                        <role-name>power-user</role-name>\n"\r
+            + "                </security-role-ref>\n"\r
+            + "                <security-role-ref>\n"\r
+            + "                        <role-name>user</role-name>\n"\r
+            + "                </security-role-ref>\n" + "        </portlet>\n";\r
+    private static final String PORTLET_XML_FOOT = "        %CONTEXTPARAMS%\n"\r
+            + "        <container-runtime-option>\n"\r
+            + "                <name>javax.portlet.escapeXml</name>\n"\r
+            + "                <value>false</value>\n"\r
+            + "        </container-runtime-option>\n" + "</portlet-app>";\r
 \r
-    private static final String LIFERAY_PORTLET_XML_HEAD = "<?xml version=\"1.0\"?>\r\n"\r
-            + "<!DOCTYPE liferay-portlet-app PUBLIC \"-//Liferay//DTD Portlet Application 4.3.0//EN\" \"http://www.liferay.com/dtd/liferay-portlet-app_4_3_0.dtd\">\r\n"\r
-            + "\r\n" + "<liferay-portlet-app>\r\n" + "";\r
-    private static final String LIFERAY_PORTLET_XML_SECTION = "        <portlet>\r\n"\r
-            + "                <portlet-name>%PORTLETNAME%</portlet-name>\r\n"\r
-            + "                <instanceable>true</instanceable>       \r\n"\r
-            + "                <ajaxable>false</ajaxable>\r\n"\r
-            + "        </portlet>\r\n" + "";\r
-    private static final String LIFERAY_PORTLET_XML_FOOT = "    \r\n"\r
-            + "        <role-mapper>\r\n"\r
-            + "                <role-name>administrator</role-name>\r\n"\r
-            + "                <role-link>Administrator</role-link>\r\n"\r
-            + "        </role-mapper>\r\n" + "        <role-mapper>\r\n"\r
-            + "                <role-name>guest</role-name>\r\n"\r
-            + "                <role-link>Guest</role-link>\r\n"\r
-            + "        </role-mapper>\r\n" + "        <role-mapper>\r\n"\r
-            + "                <role-name>power-user</role-name>\r\n"\r
-            + "                <role-link>Power User</role-link>\r\n"\r
-            + "        </role-mapper>\r\n" + "        <role-mapper>\r\n"\r
-            + "                <role-name>user</role-name>\r\n"\r
-            + "                <role-link>User</role-link>\r\n"\r
-            + "        </role-mapper>\r\n" + "        \r\n"\r
+    private static final String LIFERAY_PORTLET_XML_HEAD = "<?xml version=\"1.0\"?>\n"\r
+            + "<!DOCTYPE liferay-portlet-app PUBLIC \"-//Liferay//DTD Portlet Application 4.3.0//EN\" \"http://www.liferay.com/dtd/liferay-portlet-app_4_3_0.dtd\">\n"\r
+            + "\n" + "<liferay-portlet-app>\n" + "";\r
+    private static final String LIFERAY_PORTLET_XML_SECTION = "        <portlet>\n"\r
+            + "                <portlet-name>%PORTLETNAME%</portlet-name>\n"\r
+            + "                <instanceable>true</instanceable>       \n"\r
+            + "                <ajaxable>false</ajaxable>\n"\r
+            + "        </portlet>\n" + "";\r
+    private static final String LIFERAY_PORTLET_XML_FOOT = "    \n"\r
+            + "        <role-mapper>\n"\r
+            + "                <role-name>administrator</role-name>\n"\r
+            + "                <role-link>Administrator</role-link>\n"\r
+            + "        </role-mapper>\n" + "        <role-mapper>\n"\r
+            + "                <role-name>guest</role-name>\n"\r
+            + "                <role-link>Guest</role-link>\n"\r
+            + "        </role-mapper>\n" + "        <role-mapper>\n"\r
+            + "                <role-name>power-user</role-name>\n"\r
+            + "                <role-link>Power User</role-link>\n"\r
+            + "        </role-mapper>\n" + "        <role-mapper>\n"\r
+            + "                <role-name>user</role-name>\n"\r
+            + "                <role-link>User</role-link>\n"\r
+            + "        </role-mapper>\n" + "        \n"\r
             + "</liferay-portlet-app>";\r
-    private static final String LIFERAY_DISPLAY_XML_HEAD = "<?xml version=\"1.0\"?>\r\n"\r
-            + "<!DOCTYPE display PUBLIC \"-//Liferay//DTD Display 4.0.0//EN\" \"http://www.liferay.com/dtd/liferay-display_4_0_0.dtd\">\r\n"\r
-            + "\r\n"\r
-            + "<display>\r\n"\r
-            + "        <category name=\"IT Mill Toolkit\">\r\n" + "";\r
-    private static final String LIFERAY_DISPLAY_XML_SECTION = "                <portlet id=\"%PORTLETNAME%\" />\r\n";\r
-    private static final String LIFERAY_DISPLAY_XML_FOOT = "\r\n"\r
-            + "        </category>\r\n" + "</display>";\r
+    private static final String LIFERAY_DISPLAY_XML_HEAD = "<?xml version=\"1.0\"?>\n"\r
+            + "<!DOCTYPE display PUBLIC \"-//Liferay//DTD Display 4.0.0//EN\" \"http://www.liferay.com/dtd/liferay-display_4_0_0.dtd\">\n"\r
+            + "\n"\r
+            + "<display>\n"\r
+            + "        <category name=\"IT Mill Toolkit\">\n" + "";\r
+    private static final String LIFERAY_DISPLAY_XML_SECTION = "                <portlet id=\"%PORTLETNAME%\" />\n";\r
+    private static final String LIFERAY_DISPLAY_XML_FOOT = "\n"\r
+            + "        </category>\n" + "</display>";\r
 \r
     /**\r
      * @param args\r
@@ -110,10 +114,16 @@ public class PortletConfigurationGenerator {
     public static void main(String[] args) {\r
         if (args.length < 1 || !new File(args[0]).isDirectory()) {\r
             System.err\r
-                    .println("Usage: PortletConfigurationGenerator <directory>");\r
+                    .println("Usage: PortletConfigurationGenerator <directory> [widgetset]");\r
             return;\r
         }\r
 \r
+        String widgetset = "";\r
+        if (args.length > 1) {\r
+            widgetset = "<context-param><name>widgetset</name><value>"\r
+                    + args[1] + "</value></context-param>";\r
+        }\r
+\r
         /*\r
          * Read web.xml\r
          */\r
@@ -189,18 +199,28 @@ public class PortletConfigurationGenerator {
             String lpstring = LIFERAY_PORTLET_XML_HEAD;\r
             String ldstring = LIFERAY_DISPLAY_XML_HEAD;\r
 \r
-            Pattern p = Pattern\r
-                    .compile(\r
-                            "<servlet-mapping>.*?<servlet-name>(.*?)<\\/servlet-name>.*?<url-pattern>(.*?)<\\/url-pattern>.*?<\\/servlet-mapping>",\r
-                            Pattern.MULTILINE);\r
-            Matcher m = p.matcher(webXml);\r
+            Pattern p1 = Pattern\r
+                    .compile("<servlet-mapping>.*?<servlet-name>(.*?)<\\/servlet-name>.*?<url-pattern>(.*?)<\\/url-pattern>(.*?)<\\/servlet-mapping>");\r
+            Pattern p2 = Pattern\r
+                    .compile(".*?<!--\\s+portlet\\s?(style=\\S+)?\\s+-->.*?");\r
+            Matcher m = p1.matcher(webXml);\r
             while (m.find()) {\r
-                if (m.groupCount() != 2) {\r
-                    System.out\r
-                            .println("Could not find servlet-name and url-pattern for: "\r
-                                    + m.group());\r
+                if (m.groupCount() < 3) {\r
+                    // don't include\r
                     continue;\r
                 }\r
+                Matcher m2 = p2.matcher(m.group(3));\r
+                if (!m2.find()) {\r
+                    // don't include\r
+                    continue;\r
+                }\r
+\r
+                String style = "";\r
+                if (m2.groupCount() == 1 && m2.group(1) != null) {\r
+                    style = "<init-param><name>style</name><value>"\r
+                            + m2.group(1) + "</value></init-param>";\r
+                }\r
+\r
                 String name = m.group(1);\r
                 // remove leading- and trailing whitespace\r
                 name = name.replaceAll("^\\s*", "");\r
@@ -219,11 +239,15 @@ public class PortletConfigurationGenerator {
                 if (url.endsWith("/")) {\r
                     url = url.substring(0, url.length() - 1);\r
                 }\r
+\r
                 System.out.println("Mapping " + pname + " to " + url);\r
+\r
                 String s = PORTLET_XML_SECTION;\r
                 s = s.replaceAll("%NAME%", name);\r
                 s = s.replaceAll("%PORTLETNAME%", pname);\r
                 s = s.replaceAll("%URL%", url);\r
+                s = s.replaceAll("%EXTRAPARAMS%", style);\r
+\r
                 pstring += s;\r
 \r
                 s = LIFERAY_PORTLET_XML_SECTION;\r
@@ -240,7 +264,8 @@ public class PortletConfigurationGenerator {
 \r
             }\r
 \r
-            pstring += PORTLET_XML_FOOT;\r
+            pstring += PORTLET_XML_FOOT\r
+                    .replaceAll("%CONTEXTPARAMS%", widgetset);\r
             lpstring += LIFERAY_PORTLET_XML_FOOT;\r
             ldstring += LIFERAY_DISPLAY_XML_FOOT;\r
 \r