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 2006/08/15 19:36:40 UTC

svn commit: r431650 - in /cocoon/trunk/blocks/cocoon-portal: cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/ cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/components/modules/input/ cocoon-portal-impl/src/main/java/org/apache/coco...

Author: cziegeler
Date: Tue Aug 15 10:36:39 2006
New Revision: 431650

URL: http://svn.apache.org/viewvc?rev=431650&view=rev
Log:
Skins are detected instead of configured

Added:
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/SkinDescription.java   (with props)
Removed:
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/layout/SkinDescription.java
Modified:
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/Constants.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/PortalService.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/components/modules/input/SkinModule.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/impl/PortalServiceImpl.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/WindowAspect.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/transformation/CopletTransformer.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-impl/src/main/java/org/apache/cocoon/portal/pluto/adapter/PortletAdapter.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/xconf/cocoon-portal-sample.xconf

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/Constants.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/Constants.java?rev=431650&r1=431649&r2=431650&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/Constants.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/Constants.java Tue Aug 15 10:36:39 2006
@@ -27,4 +27,20 @@
      */
     public static final String COPLET_ID_KEY = "cocoon-portal-copletId";
     public static final String PORTAL_NAME_KEY = "cocoon-portal-portalName";
+
+    /** Configuration key for full screen enabled (default is true). */
+    public static final String CONFIGURATION_FULL_SCREEN_ENABLED = "enable-full-screen";
+    public static final boolean DEFAULT_CONFIGURATION_FULL_SCREEN_ENABLED = true;
+
+    /** Configuration key for maximized enabled (default is true). */
+    public static final String CONFIGURATION_MAXIMIZED_ENABLED = "enable-maximized";
+    public static final boolean DEFAULT_CONFIGURATION_MAXIMIZED_ENABLED = true;
+
+    /** Configuration key to use ajax (default is false). */
+    public static final String CONFIGURATION_USE_AJAX = "use-ajax";
+    public static final boolean DEFAULT_CONFIGURATION_USE_AJAX = false;
+
+    /** Configuration key to find all skins. */
+    public static final String CONFIGURATION_SKINS_PATH = "skins-path";
+    public static final String DEFAULT_CONFIGURATION_SKINS_PATH = "skins";
 }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/PortalService.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/PortalService.java?rev=431650&r1=431649&r2=431650&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/PortalService.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/PortalService.java Tue Aug 15 10:36:39 2006
@@ -32,12 +32,6 @@
     /** The role to lookup this component. */
     String ROLE = PortalService.class.getName();
 
-    /** Configuration key for full screen enabled (default is true). */
-    String CONFIGURATION_FULL_SCREEN_ENABLED = "enable-full-screen";
-
-    /** Configuration key for maximized enabled (default is true). */
-    String CONFIGURATION_MAXIMIZED_ENABLED = "enable-maximized";
-
     /**
      * The name of the portal - as defined in the portal configuration.
      */

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/components/modules/input/SkinModule.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/components/modules/input/SkinModule.java?rev=431650&r1=431649&r2=431650&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/components/modules/input/SkinModule.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/components/modules/input/SkinModule.java Tue Aug 15 10:36:39 2006
@@ -22,8 +22,8 @@
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.cocoon.components.modules.input.InputModule;
-import org.apache.cocoon.portal.layout.SkinDescription;
 import org.apache.cocoon.portal.om.Layout;
+import org.apache.cocoon.portal.om.SkinDescription;
 
 /**
  * This input module provides information about the current selected skin

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/impl/PortalServiceImpl.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/impl/PortalServiceImpl.java?rev=431650&r1=431649&r2=431650&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/impl/PortalServiceImpl.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/impl/PortalServiceImpl.java Tue Aug 15 10:36:39 2006
@@ -15,11 +15,13 @@
  */
 package org.apache.cocoon.portal.impl;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import javax.servlet.ServletContext;
 
@@ -43,8 +45,8 @@
 import org.apache.cocoon.portal.PortalService;
 import org.apache.cocoon.portal.coplet.adapter.CopletAdapter;
 import org.apache.cocoon.portal.event.EventManager;
-import org.apache.cocoon.portal.layout.SkinDescription;
 import org.apache.cocoon.portal.layout.renderer.Renderer;
+import org.apache.cocoon.portal.om.SkinDescription;
 import org.apache.cocoon.portal.profile.ProfileManager;
 import org.apache.cocoon.portal.services.CopletFactory;
 import org.apache.cocoon.portal.services.LayoutFactory;
@@ -52,6 +54,7 @@
 import org.apache.cocoon.processing.ProcessInfoProvider;
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.source.SourceResolver;
+import org.apache.excalibur.source.TraversableSource;
 
 /**
  * Default implementation of a portal service using a session to store
@@ -68,6 +71,9 @@
                 Disposable,
                 Configurable {
 
+    /** Parameter map for the context protocol. */
+    protected static final Map CONTEXT_PARAMETERS = Collections.singletonMap("force-traversable", Boolean.TRUE);
+
     /** The component context. */
     protected Context context;
 
@@ -99,6 +105,7 @@
      */
     public void service(ServiceManager serviceManager) throws ServiceException {
         this.manager = serviceManager;
+        this.portalComponentManager = new DefaultPortalComponentManager(this.manager);
     }
 
     /**
@@ -257,38 +264,55 @@
         this.portalName = portal.getAttribute("name");
         this.defaultLayoutKey = portal.getAttribute("default-layout-key", "portal");
         this.attributePrefix = this.getClass().getName() + '/' + this.portalName + '/';
+        this.configuration = portal.getChild("configuration");
+        this.configureSkins(this.getConfiguration(org.apache.cocoon.portal.Constants.CONFIGURATION_SKINS_PATH,
+                                                  org.apache.cocoon.portal.Constants.DEFAULT_CONFIGURATION_SKINS_PATH));
+    }
+
+    protected void configureSkins(String directory)
+    throws ConfigurationException {
         SourceResolver resolver = null;
+        Source dir = null;
         try {
             resolver = (SourceResolver)this.manager.lookup(SourceResolver.ROLE);
-            this.portalComponentManager = new DefaultPortalComponentManager(this.manager);
-
-            // scan for skins
-            final Configuration[] skinConfs = portal.getChild("skins").getChildren("skin");
-            if ( skinConfs != null ) {
-                for(int s=0;s<skinConfs.length;s++) {
-                    final Configuration currentSkin = skinConfs[s];
-                    final String skinName = currentSkin.getAttribute("name");
-                    final SkinDescription desc = new SkinDescription();
-                    desc.setName(skinName);
-                    Source source = null;
+            dir = resolver.resolveURI(directory, null, CONTEXT_PARAMETERS);
+            if ( dir instanceof TraversableSource ) {
+                final Iterator children = ((TraversableSource)dir).getChildren().iterator();
+                while ( children.hasNext() ) {
+                    final Source s = (Source)children.next();
                     try {
-                        source = resolver.resolveURI(currentSkin.getAttribute("base-path"));
-                        desc.setBasePath(source.getURI());
+                        this.configureSkin(s);
                     } finally {
-                        resolver.release(source);
+                        resolver.release(s);
                     }
-                    desc.setThumbnailPath(currentSkin.getChild("thumbnail-path").getValue(null));
-                    this.skinList.add(desc);
                 }
+            } else {
+                throw new ConfigurationException("Include.dir must point to a directory, '" + dir.getURI() + "' is not a directory.'");
             }
-        } catch (ConfigurationException ce) {
-            throw ce;
-        } catch (Exception e) {
-            throw new ConfigurationException("Unable to setup new portal component manager for portal " + this.portalName, e);
+        } catch (IOException ioe) {
+            throw new ConfigurationException("Unable to read configurations from " + directory);
+        } catch (ServiceException e) {
+            throw new ConfigurationException("Unable to get source resolver.");
         } finally {
-            this.manager.release(resolver);
+            if ( resolver != null ) {
+                resolver.release(dir);
+                this.manager.release(resolver);
+            }
         }
-        this.configuration = portal.getChild("configuration");
+    }
+
+    protected void configureSkin(Source directory) {
+        String uri = directory.getURI();
+        if ( uri.endsWith("/") ) {
+            uri = uri.substring(0, uri.length()-1);
+        }
+        int pos = uri.lastIndexOf('/');
+        final String skinName = uri.substring(pos+1);
+        final SkinDescription desc = new SkinDescription();
+        desc.setName(skinName);
+        desc.setBasePath(directory.getURI());
+        desc.setThumbnailPath(directory.getURI() + '/' + "images/thumb.jpg");
+        this.skinList.add(desc);
     }
 
     /**

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/WindowAspect.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/WindowAspect.java?rev=431650&r1=431649&r2=431650&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/WindowAspect.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/WindowAspect.java Tue Aug 15 10:36:39 2006
@@ -19,6 +19,7 @@
 import java.util.List;
 import java.util.Properties;
 
+import org.apache.cocoon.portal.Constants;
 import org.apache.cocoon.portal.LayoutException;
 import org.apache.cocoon.portal.PortalException;
 import org.apache.cocoon.portal.PortalService;
@@ -98,8 +99,8 @@
      */
     public void initialize() throws Exception {
         super.initialize();
-        this.enableFullScreen = this.portalService.getConfigurationAsBoolean(PortalService.CONFIGURATION_FULL_SCREEN_ENABLED, true);
-        this.enableMaximized = this.portalService.getConfigurationAsBoolean(PortalService.CONFIGURATION_MAXIMIZED_ENABLED, true);
+        this.enableFullScreen = this.portalService.getConfigurationAsBoolean(Constants.CONFIGURATION_FULL_SCREEN_ENABLED, Constants.DEFAULT_CONFIGURATION_FULL_SCREEN_ENABLED);
+        this.enableMaximized = this.portalService.getConfigurationAsBoolean(Constants.CONFIGURATION_MAXIMIZED_ENABLED, Constants.DEFAULT_CONFIGURATION_MAXIMIZED_ENABLED);
     }
 
     /**

Added: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/SkinDescription.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/SkinDescription.java?rev=431650&view=auto
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/SkinDescription.java (added)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/SkinDescription.java Tue Aug 15 10:36:39 2006
@@ -0,0 +1,69 @@
+/*
+ * Copyright 1999-2002,2004-2005 The Apache Software Foundation.
+ *
+ * Licensed 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;
+
+/**
+ *
+ * @version $Id$
+ */
+public class SkinDescription {
+
+    protected String name;
+    protected String basePath;
+    protected String thumbnailPath;
+
+    /**
+     * @return Returns the basePath.
+     */
+    public String getBasePath() {
+        return basePath;
+    }
+
+    /**
+     * @param basePath The basePath to set.
+     */
+    public void setBasePath(String basePath) {
+        this.basePath = basePath;
+    }
+
+    /**
+     * @return Returns the name.
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * @param name The name to set.
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * @return Returns the thumbnailPath.
+     */
+    public String getThumbnailPath() {
+        return thumbnailPath;
+    }
+
+    /**
+     * @param thumbnailPath The thumbnailPath to set.
+     */
+    public void setThumbnailPath(String thumbnailPath) {
+        this.thumbnailPath = thumbnailPath;
+    }
+}
\ No newline at end of file

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

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/SkinDescription.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/transformation/CopletTransformer.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/transformation/CopletTransformer.java?rev=431650&r1=431649&r2=431650&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/transformation/CopletTransformer.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/transformation/CopletTransformer.java Tue Aug 15 10:36:39 2006
@@ -24,6 +24,7 @@
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.cocoon.ProcessingException;
 import org.apache.cocoon.environment.wrapper.RequestParameters;
+import org.apache.cocoon.portal.Constants;
 import org.apache.cocoon.portal.event.coplet.CopletJXPathEvent;
 import org.apache.cocoon.portal.event.impl.JXPathEvent;
 import org.apache.cocoon.portal.event.layout.LayoutJXPathEvent;
@@ -118,7 +119,7 @@
      */
     public void configure(Configuration configuration) throws ConfigurationException {
         super.configure(configuration);
-        this.useAjax = this.portalService.getConfigurationAsBoolean("use-ajax", false);
+        this.useAjax = this.portalService.getConfigurationAsBoolean(Constants.CONFIGURATION_USE_AJAX, Constants.DEFAULT_CONFIGURATION_USE_AJAX);
     }
 
     /**

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-impl/src/main/java/org/apache/cocoon/portal/pluto/adapter/PortletAdapter.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-impl/src/main/java/org/apache/cocoon/portal/pluto/adapter/PortletAdapter.java?rev=431650&r1=431649&r2=431650&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-impl/src/main/java/org/apache/cocoon/portal/pluto/adapter/PortletAdapter.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-impl/src/main/java/org/apache/cocoon/portal/pluto/adapter/PortletAdapter.java Tue Aug 15 10:36:39 2006
@@ -33,6 +33,7 @@
 import org.apache.cocoon.ProcessingException;
 import org.apache.cocoon.components.ContextHelper;
 import org.apache.cocoon.environment.http.HttpEnvironment;
+import org.apache.cocoon.portal.Constants;
 import org.apache.cocoon.portal.PortalManagerAspect;
 import org.apache.cocoon.portal.PortalManagerAspectPrepareContext;
 import org.apache.cocoon.portal.PortalManagerAspectRenderContext;
@@ -252,8 +253,8 @@
      */
     public void initialize() throws Exception {
         super.initialize();
-        this.enableFullScreen = this.portalService.getConfigurationAsBoolean(PortalService.CONFIGURATION_FULL_SCREEN_ENABLED, true);
-        this.enableMaximized = this.portalService.getConfigurationAsBoolean(PortalService.CONFIGURATION_MAXIMIZED_ENABLED, true);
+        this.enableFullScreen = this.portalService.getConfigurationAsBoolean(Constants.CONFIGURATION_FULL_SCREEN_ENABLED, Constants.DEFAULT_CONFIGURATION_FULL_SCREEN_ENABLED);
+        this.enableMaximized = this.portalService.getConfigurationAsBoolean(Constants.CONFIGURATION_MAXIMIZED_ENABLED, Constants.DEFAULT_CONFIGURATION_MAXIMIZED_ENABLED);
         this.initContainer();
     }
 

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/xconf/cocoon-portal-sample.xconf
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/xconf/cocoon-portal-sample.xconf?rev=431650&r1=431649&r2=431650&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/xconf/cocoon-portal-sample.xconf (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/xconf/cocoon-portal-sample.xconf Tue Aug 15 10:36:39 2006
@@ -53,20 +53,11 @@
 
   <portal-service>
     <portal name="portal">
-      <!-- These are the skins the user can choose from: -->
-      <skins>
-        <skin name="modern" base-path="skins/modern">
-          <thumbnail-path>images/thumb.jpg</thumbnail-path>
-        </skin>
-        <skin name="basic" base-path="skins/basic">
-          <thumbnail-path>images/thumb.jpg</thumbnail-path>
-        </skin>
-        <skin name="common" base-path="skins/common">
-          <thumbnail-path>images/thumb.jpg</thumbnail-path>
-        </skin>
-      </skins>
       <!-- Configuration: -->
       <configuration>
+        <!-- The directory where all possible skins are stored. -->
+        <skins-path>skins</skins-path>
+        <!-- Whether the portal should use ajax or not -->
         <use-ajax>true</use-ajax>
       </configuration>
     </portal>