You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2007/11/28 01:40:37 UTC

svn commit: r598833 - in /cocoon/trunk/blocks/cocoon-portal: cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/ cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/util/ cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/ c...

Author: cziegeler
Date: Tue Nov 27 16:40:36 2007
New Revision: 598833

URL: http://svn.apache.org/viewvc?rev=598833&view=rev
Log:
Create bean describing a layout type to OM.
Start using bean maps for layout and coplet types.
Fix Avalon configuration for layouts.

Added:
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LayoutType.java   (with props)
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/layout-types.xml   (with props)
Modified:
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/util/HtmlSaxParser.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/cocoon-portal-components.xml
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/avalon/cocoon-portal-sample.xconf

Added: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LayoutType.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LayoutType.java?rev=598833&view=auto
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LayoutType.java (added)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LayoutType.java Tue Nov 27 16:40:36 2007
@@ -0,0 +1,129 @@
+/*
+ * 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.cocoon.portal.om;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.cocoon.portal.services.LayoutFactory;
+
+
+/**
+ * A configured layout.
+ * This description is used to instantiate new layout objects by the {@link LayoutFactory}.
+ * A layout has an associated class and an associated type. The type is used to differentiate
+ * layout objects having the same class but providing different features. For example
+ * a composite layout can either be a row or a column - both use the same implementation class
+ * but have different types.
+ *
+ * @version $Id$
+ */
+public class LayoutType {
+
+    protected String className;
+
+    protected boolean createId = false;
+
+    protected String defaultRendererName;
+
+    protected List rendererNames = new ArrayList(2);
+
+    protected String itemClassName;
+
+    protected boolean defaultIsStatic = false;
+
+    /**
+     * This is the name of the renderer used by default to render this layout object.
+     * @return the default renderer name
+     */
+    public String getDefaultRendererName() {
+        return defaultRendererName;
+    }
+
+    /**
+     * @param string
+     */
+    public void setDefaultRendererName(String string) {
+        defaultRendererName = string;
+    }
+
+    /**
+     * Each layout can have several associated renderers.
+     * @return the names of all allowed renderers.
+     */
+    public Collection getRendererNames() {
+        return this.rendererNames;
+    }
+
+    public void setRendererNames(List names) {
+        this.rendererNames = names;
+    }
+
+    /**
+     * Each composite layout object can contain items. This is the class name
+     * of the item implementation.
+     * @return The class name of the item.
+     */
+    public String getItemClassName() {
+        return this.itemClassName;
+    }
+
+    /**
+     * @param itemClassName The itemClassName to set.
+     */
+    public void setItemClassName(String itemClassName) {
+        this.itemClassName = itemClassName;
+    }
+
+    /**
+     * The name of the implementation class for this layout object.
+     * @return The class name.
+     */
+    public String getClassName() {
+        return className;
+    }
+
+    /**
+     * @param string
+     */
+    public void setClassName(String string) {
+        className = string;
+    }
+
+    /**
+     * Should the layout factory create a unique id for objects of this type?
+     */
+    public boolean createId() {
+        return this.createId;
+    }
+
+    public void setCreateId(boolean value) {
+        this.createId = value;
+    }
+
+    /**
+     * Default setting for static.
+     */
+    public boolean defaultIsStatic() {
+        return this.defaultIsStatic;
+    }
+
+    public void setDefaultIsStatic(boolean value) {
+        this.defaultIsStatic = value;
+    }
+}

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LayoutType.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LayoutType.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/util/HtmlSaxParser.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/util/HtmlSaxParser.java?rev=598833&r1=598832&r2=598833&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/util/HtmlSaxParser.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/util/HtmlSaxParser.java Tue Nov 27 16:40:36 2007
@@ -21,13 +21,12 @@
 import java.util.Iterator;
 import java.util.Properties;
 
-import org.apache.cocoon.xml.ContentHandlerWrapper;
-import org.apache.excalibur.xml.sax.XMLConsumer;
 import org.apache.xerces.parsers.AbstractSAXParser;
 import org.cyberneko.html.HTMLConfiguration;
 import org.xml.sax.Attributes;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
 import org.xml.sax.ext.LexicalHandler;
 
@@ -72,17 +71,24 @@
         }
     }
 
-    public static XMLConsumer getContentFilter(ContentHandler ch) {
+    /**
+     * Return a content filter which streams every element except body and html.
+     * @param ch
+     * @return A content handler.
+     */
+    public static ContentHandler getContentFilter(ContentHandler ch) {
+        if ( ch instanceof LexicalHandler ) {
+            return new ExtendedContentFilter(ch);
+        }
         return new ContentFilter(ch);
     }
 
-    protected static final class ContentFilter extends ContentHandlerWrapper {
+    protected static class ContentFilter implements ContentHandler {
+
+        protected final ContentHandler ch;
 
         public ContentFilter(ContentHandler ch) {
-            this.setContentHandler(ch);
-            if ( ch instanceof LexicalHandler ) {
-                this.setLexicalHandler((LexicalHandler)ch);
-            }
+            this.ch = ch;
         }
 
         /**
@@ -90,7 +96,7 @@
          */
         public void endElement(String uri, String loc, String raw) throws SAXException {
             if ( !loc.equals("html") && !loc.equals("body") ) {
-                super.endElement(uri, loc, raw);
+                this.ch.endElement(uri, loc, raw);
             }
         }
 
@@ -99,8 +105,115 @@
          */
         public void startElement(String uri, String loc, String raw, Attributes a) throws SAXException {
             if ( !loc.equals("html") && !loc.equals("body") ) {
-                super.startElement(uri, loc, raw, a);
+                this.ch.startElement(uri, loc, raw, a);
             }
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#characters(char[], int, int)
+         */
+        public void characters(char[] ch, int start, int length)
+                throws SAXException {
+            this.ch.characters(ch, start, length);
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#endDocument()
+         */
+        public void endDocument() throws SAXException {
+            ch.endDocument();
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#endPrefixMapping(java.lang.String)
+         */
+        public void endPrefixMapping(String prefix) throws SAXException {
+            ch.endPrefixMapping(prefix);
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#ignorableWhitespace(char[], int, int)
+         */
+        public void ignorableWhitespace(char[] ch, int start, int length)
+                throws SAXException {
+            this.ch.ignorableWhitespace(ch, start, length);
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#processingInstruction(java.lang.String, java.lang.String)
+         */
+        public void processingInstruction(String target, String data)
+                throws SAXException {
+            ch.processingInstruction(target, data);
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#setDocumentLocator(org.xml.sax.Locator)
+         */
+        public void setDocumentLocator(Locator locator) {
+            ch.setDocumentLocator(locator);
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#skippedEntity(java.lang.String)
+         */
+        public void skippedEntity(String name) throws SAXException {
+            ch.skippedEntity(name);
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#startDocument()
+         */
+        public void startDocument() throws SAXException {
+            ch.startDocument();
+        }
+
+        /**
+         * @see org.xml.sax.ContentHandler#startPrefixMapping(java.lang.String, java.lang.String)
+         */
+        public void startPrefixMapping(String prefix, String uri)
+                throws SAXException {
+            ch.startPrefixMapping(prefix, uri);
+        }
+    }
+
+    protected static class ExtendedContentFilter extends ContentFilter implements LexicalHandler {
+
+        protected final LexicalHandler lh;
+
+        public ExtendedContentFilter(final ContentHandler ch) {
+            super(ch);
+            this.lh = (LexicalHandler)ch;
+        }
+
+        public void comment(char[] arg0, int arg1, int arg2)
+                throws SAXException {
+            lh.comment(arg0, arg1, arg2);
+        }
+
+        public void endCDATA() throws SAXException {
+            lh.endCDATA();
+        }
+
+        public void endDTD() throws SAXException {
+            lh.endDTD();
+        }
+
+        public void endEntity(String arg0) throws SAXException {
+            lh.endEntity(arg0);
+        }
+
+        public void startCDATA() throws SAXException {
+            lh.startCDATA();
+        }
+
+        public void startDTD(String arg0, String arg1, String arg2)
+                throws SAXException {
+            lh.startDTD(arg0, arg1, arg2);
+        }
+
+        public void startEntity(String arg0) throws SAXException {
+            lh.startEntity(arg0);
         }
     }
 }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/cocoon-portal-components.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/cocoon-portal-components.xml?rev=598833&r1=598832&r2=598833&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/cocoon-portal-components.xml (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/cocoon-portal-components.xml Tue Nov 27 16:40:36 2007
@@ -247,4 +247,18 @@
       +-->
     <configurator:bean-map id="org.apache.cocoon.portal.coplet.adapter.CopletAdapterMap"
                            type="org.apache.cocoon.portal.coplet.adapter.CopletAdapter"/>
+
+  <!--+
+      | Coplet Type map
+      |
+      +-->
+    <configurator:bean-map id="org.apache.cocoon.portal.om.CopletTypeMap"
+                           type="org.apache.cocoon.portal.om.CopletType"/>
+
+  <!--+
+      | Layout Type map
+      |
+      +-->
+    <configurator:bean-map id="org.apache.cocoon.portal.om.LayoutTypeMap"
+                           type="org.apache.cocoon.portal.om.LayoutType"/>
 </beans>

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/avalon/cocoon-portal-sample.xconf
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/avalon/cocoon-portal-sample.xconf?rev=598833&r1=598832&r2=598833&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/avalon/cocoon-portal-sample.xconf (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/avalon/cocoon-portal-sample.xconf Tue Nov 27 16:40:36 2007
@@ -69,49 +69,49 @@
   <portal-layout-factory>
     <layouts>
       <layout type="column" 
-              class="org.apache.cocoon.portal.layout.impl.CompositeLayout">
+              class="org.apache.cocoon.portal.om.CompositeLayout">
         <renderers default="column">
           <renderer name="column"/>
         </renderers>
       </layout>
       <layout type="row" 
-              class="org.apache.cocoon.portal.layout.impl.CompositeLayout">
+              class="org.apache.cocoon.portal.om.CompositeLayout">
         <renderers default="row">
           <renderer name="row"/>
         </renderers>
       </layout>
       <layout type="tab" 
-              class="org.apache.cocoon.portal.layout.impl.CompositeLayout"
-              item-class="org.apache.cocoon.portal.layout.NamedItem"
+              class="org.apache.cocoon.portal.om.CompositeLayout"
+              item-class="org.apache.cocoon.portal.om.NamedItem"
               default-is-static="true">
         <renderers default="tab">
           <renderer name="tab"/>
         </renderers>
       </layout>
       <layout type="rawtab" 
-              class="org.apache.cocoon.portal.layout.impl.CompositeLayout"
-              item-class="org.apache.cocoon.portal.layout.NamedItem">
+              class="org.apache.cocoon.portal.om.CompositeLayout"
+              item-class="org.apache.cocoon.portal.om.NamedItem">
         <renderers default="rawtab">
           <renderer name="rawtab"/>
         </renderers>
       </layout>
       <layout type="linktab"
-              class="org.apache.cocoon.portal.layout.impl.CompositeLayout"
-              item-class="org.apache.cocoon.portal.layout.NamedItem"
+              class="org.apache.cocoon.portal.om.CompositeLayout"
+              item-class="org.apache.cocoon.portal.om.NamedItem"
               default-is-static="true">
         <renderers default="linktab">
           <renderer name="linktab"/>
         </renderers>
       </layout>
       <layout type="frame" 
-              class="org.apache.cocoon.portal.layout.impl.FrameLayout"
+              class="org.apache.cocoon.portal.om.FrameLayout"
               create-id="true">
         <renderers default="frame">
           <renderer name="frame"/>
         </renderers>
       </layout>
       <layout type="coplet" 
-              class="org.apache.cocoon.portal.layout.impl.CopletLayout">
+              class="org.apache.cocoon.portal.om.CopletLayout">
         <renderers default="window">
           <renderer name="window"/>
           <renderer name="nowindow"/>
@@ -119,7 +119,7 @@
         </renderers>
       </layout>
       <layout type="link"
-              class="org.apache.cocoon.portal.layout.impl.LinkLayout"
+              class="org.apache.cocoon.portal.om.LinkLayout"
               create-id="true">
         <renderers default="link">
           <renderer name="link"/>

Added: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/layout-types.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/layout-types.xml?rev=598833&view=auto
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/layout-types.xml (added)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/layout-types.xml Tue Nov 27 16:40:36 2007
@@ -0,0 +1,126 @@
+<?xml version="1.0"?>
+<!--
+  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.
+-->
+<!--+
+    | This is a sample configuration for layout types.
+    |
+    | @version $Id$
+    +-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:portal="http://cocoon.apache.org/schema/portal"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
+                           http://cocoon.apache.org/schema/portal http://cocoon.apache.org/schema/portal/cocoon-portal-1.0.xsd">
+
+    <bean name="org.apache.cocoon.portal.om.LayoutType/column"
+          class="org.apache.cocoon.portal.om.LayoutType">
+      <property name="className" value="org.apache.cocoon.portal.om.CompositeLayout"/>
+      <property name="defaultRendererName" value="column"/>
+      <property name="rendererNames">
+        <list>
+          <value>column</value>
+        </list>
+      </property>
+    </bean>
+
+    <bean name="org.apache.cocoon.portal.om.LayoutType/row"
+          class="org.apache.cocoon.portal.om.LayoutType">
+      <property name="className" value="org.apache.cocoon.portal.om.CompositeLayout"/>
+      <property name="defaultRendererName" value="row"/>
+      <property name="rendererNames">
+        <list>
+          <value>row</value>
+        </list>
+      </property>
+    </bean>
+
+    <bean name="org.apache.cocoon.portal.om.LayoutType/tab"
+          class="org.apache.cocoon.portal.om.LayoutType">
+      <property name="className" value="org.apache.cocoon.portal.om.CompositeLayout"/>
+      <property name="itemClassName" value="org.apache.cocoon.portal.om.NamedItem"/>
+      <property name="defaultRendererName" value="tab"/>
+      <property name="defaultIsStatic" value="true"/>
+      <property name="rendererNames">
+        <list>
+          <value>tab</value>
+        </list>
+      </property>
+    </bean>
+
+    <bean name="org.apache.cocoon.portal.om.LayoutType/rawtab"
+          class="org.apache.cocoon.portal.om.LayoutType">
+      <property name="className" value="org.apache.cocoon.portal.om.CompositeLayout"/>
+      <property name="itemClassName" value="org.apache.cocoon.portal.om.NamedItem"/>
+      <property name="defaultRendererName" value="rawtab"/>
+      <property name="rendererNames">
+        <list>
+          <value>rawtab</value>
+        </list>
+      </property>
+    </bean>
+
+    <bean name="org.apache.cocoon.portal.om.LayoutType/linktab"
+          class="org.apache.cocoon.portal.om.LayoutType">
+      <property name="className" value="org.apache.cocoon.portal.om.CompositeLayout"/>
+      <property name="itemClassName" value="org.apache.cocoon.portal.om.NamedItem"/>
+      <property name="defaultRendererName" value="linktab"/>
+      <property name="defaultIsStatic" value="true"/>
+      <property name="rendererNames">
+        <list>
+          <value>linktab</value>
+        </list>
+      </property>
+    </bean>
+
+    <bean name="org.apache.cocoon.portal.om.LayoutType/frame"
+          class="org.apache.cocoon.portal.om.LayoutType">
+      <property name="className" value="org.apache.cocoon.portal.om.FrameLayout"/>
+      <property name="defaultRendererName" value="frame"/>
+      <property name="createId" value="true"/>
+      <property name="rendererNames">
+        <list>
+          <value>frame</value>
+        </list>
+      </property>
+    </bean>
+
+    <bean name="org.apache.cocoon.portal.om.LayoutType/coplet"
+          class="org.apache.cocoon.portal.om.LayoutType">
+      <property name="className" value="org.apache.cocoon.portal.om.CopletLayout"/>
+      <property name="defaultRendererName" value="window"/>
+      <property name="rendererNames">
+        <list>
+          <value>window</value>
+          <value>nowindow</value>
+          <value>borderless-window</value>
+        </list>
+      </property>
+    </bean>
+
+    <bean name="org.apache.cocoon.portal.om.LayoutType/link"
+          class="org.apache.cocoon.portal.om.LayoutType">
+      <property name="className" value="org.apache.cocoon.portal.om.LinkLayout"/>
+      <property name="defaultRendererName" value="link"/>
+      <property name="createId" value="true"/>
+      <property name="rendererNames">
+        <list>
+          <value>link</value>
+        </list>
+      </property>
+    </bean>
+</beans>
\ No newline at end of file

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/layout-types.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/layout-types.xml
------------------------------------------------------------------------------
    svn:keywords = Id