You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ra...@apache.org on 2001/06/04 19:43:16 UTC

cvs commit: jakarta-jetspeed/src/java/org/apache/jetspeed/om/profile BasePSMLDocument.java PSMLDocument.java BaseProfile.java Profile.java

raphael     01/06/04 10:43:16

  Modified:    src/java/org/apache/jetspeed/om/profile BaseProfile.java
                        Profile.java
  Added:       src/java/org/apache/jetspeed/om/profile
                        BasePSMLDocument.java PSMLDocument.java
  Log:
  add a PSML Document to the Profile object model (they may be
  merged in a future evolution)
  
  remove the RunData parameter from some methods as it's not needed
  anymore
  
  Revision  Changes    Path
  1.5       +35 -17    jakarta-jetspeed/src/java/org/apache/jetspeed/om/profile/BaseProfile.java
  
  Index: BaseProfile.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/om/profile/BaseProfile.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- BaseProfile.java	2001/03/07 06:44:40	1.4
  +++ BaseProfile.java	2001/06/04 17:43:11	1.5
  @@ -58,27 +58,27 @@
   import org.apache.turbine.services.BaseInitable;
   
   import org.apache.jetspeed.portal.PortletSet;
  -import org.apache.jetspeed.portal.factory.PortletSetFactory;
  +import org.apache.jetspeed.services.PortalToolkit;
  +import org.apache.jetspeed.services.PsmlManager;
   
  -
  -
   /**
   Provides base functionality within a Registry.
   
   @author <a href="mailto:david@bluesunrise.com">David Sean Taylor</a>
  -@version $Id: BaseProfile.java,v 1.4 2001/03/07 06:44:40 taylor Exp $
  +@version $Id: BaseProfile.java,v 1.5 2001/06/04 17:43:11 raphael Exp $
   */
   
  -public class BaseProfile extends BaseInitable implements Profile {
  +public class BaseProfile extends BaseInitable implements Profile
  +{
   
       private String url;
   
       private String page = null;
       private String group = null;
       private String role = null;
  +    private PSMLDocument doc = null;
  +    private PortletSet set = null;
   
  -    PortletSetFactory factory = null;
  -
       public BaseProfile()
       {}
   
  @@ -92,7 +92,8 @@
           return this.url;
       }
   
  -    public void init() {
  +    public void init()
  +    {
           setInit(true);
       }
   
  @@ -106,24 +107,37 @@
   
          @return The root portlet set for this profile.
        */
  -    public PortletSet getRootSet(RunData rundata)
  +    public PortletSet getRootSet()
       {
  -        return this.getFactory().getPortletSet( rundata );
  +        synchronized (this)
  +        {
  +            if (this.set == null)
  +            {
  +                this.set = PortalToolkit.getSet( getDocument().getPortlets() );
  +            }
  +        }
  +        
  +        return this.set;
       }
   
       /**
  -       Gets the PortletSetFactory for this profile
  +       Gets the root set of portlets for this profile object.
   
  -       @return The portlet set factory for this profile.
  +       @return The root portlet set for this profile.
        */
  -    public PortletSetFactory getFactory()
  +    public PSMLDocument getDocument()
       {
  -        if (null == factory)
  -            factory = PortletSetFactory.getInstance( url );
  -        return factory;
  +        synchronized (this)
  +        {
  +            if (this.doc == null)
  +            {
  +                this.doc = PsmlManager.getDocument(getURL());
  +            }
  +        }
  +        
  +        return this.doc;
       }
   
  -
       /**
          stores the resource by merging and rewriting the psml file
   
  @@ -131,6 +145,10 @@
       */
       public void store() throws ProfileException
       {
  +        if (doc!=null)
  +        {
  +            PsmlManager.saveDocument(doc);
  +        }
       }
   
       public void setGroup( String group )
  
  
  
  1.5       +7 -7      jakarta-jetspeed/src/java/org/apache/jetspeed/om/profile/Profile.java
  
  Index: Profile.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/om/profile/Profile.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Profile.java	2001/03/07 06:44:41	1.4
  +++ Profile.java	2001/06/04 17:43:13	1.5
  @@ -56,7 +56,6 @@
   
   import org.apache.turbine.services.Initable;
   import org.apache.jetspeed.portal.PortletSet;
  -import org.apache.jetspeed.portal.factory.PortletSetFactory;
   import java.util.Enumeration;
   import org.apache.turbine.util.RunData;
   
  @@ -64,23 +63,24 @@
   Represents a profile, the interface to a PSML resource.
   
   @author <a href="mailto:david@bluesunrise.com">David Sean Taylor</a>
  -@version $Id: Profile.java,v 1.4 2001/03/07 06:44:41 taylor Exp $
  +@version $Id: Profile.java,v 1.5 2001/06/04 17:43:13 raphael Exp $
   */
   
  -public interface Profile extends Initable {
  +public interface Profile extends Initable
  +{
       /**
          Gets the root set of portlets for this profile object.
   
          @return The root portlet set for this profile.
        */
  -    public PortletSet getRootSet(RunData rundata);
  +    public PortletSet getRootSet();
   
       /**
  -       Gets the PortletSetFactory for this profile
  +       Gets the psml document attached to this profile
   
  -       @return The portlet set factory for this profile.
  +       @return The PSML document for this profile.
        */
  -    public PortletSetFactory getFactory();
  +    public PSMLDocument getDocument();
   
       /**
          Gets the URL for this profile, a fully qualified local path and resource name
  
  
  
  1.1                  jakarta-jetspeed/src/java/org/apache/jetspeed/om/profile/BasePSMLDocument.java
  
  Index: BasePSMLDocument.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *     "Apache Jetspeed" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache" or
   *    "Apache Jetspeed", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.jetspeed.om.profile;
  
  import org.apache.jetspeed.xml.api.portletmarkup.Portlets;
  import org.apache.jetspeed.xml.api.portletmarkup.Entry;
  import java.util.Enumeration;
  
  /**
   * This class represents a loaded PSML document in memory, providing
   * all facilities for finding and updating specific parts of the 
   * document.
   *
   * @author <a href="mailto:raphael@apache.org">Rapha�l Luta</a>
   * @version $Id: BasePSMLDocument.java,v 1.1 2001/06/04 17:43:11 raphael Exp $
   */
  public class BasePSMLDocument implements PSMLDocument
  {
      /**
       * The name of this PSML document, will be typically the URL of the file
       * for file-based implementations
       */
      private String name = null;
  
      /**
       * The PortletSet descriptions that make up this document
       */
      private Portlets portlets = null;
  
      /**
       * Construct a new empty PSMLDocument
       */
      public BasePSMLDocument()
      {
          // empty constructor
      }
  
      /**
       * Construct a new named PSMLDocument associated with the specified
       * PSML portlet set description
       *
       * @param name the name of this document
       * @param portlets the PSML memory structure
       */
      public BasePSMLDocument( String name, Portlets portlets )
      {
          this.portlets = portlets;
      }
  
      /**
       * Return the name of this document
       */
      public final String getName()
      {
          return this.name;
      }
          
      /**
       * Sets a new name for this document
       * 
       * @param name the new document name
       */
      public final void setName(String name)
      {
          this.name = name;
      }
  
      /**
       * Return ths portlet set PSML description of this document
       *
       * @return a PSML object model hierarchy, or null if none is 
       * defined for this document
       */
      public final Portlets getPortlets()
      {
          return this.portlets;
      }
  
      /**
       * Sets a new PSML object model for this document
       * 
       * @param portlets the PSML object model
       */
      public final void setPortlets(Portlets portlets)
      {
          this.portlets = portlets;
      }
  
      /** Returns the first entry in the current PSML resource corresponding 
       *  to the given portlet name
       * 
       *  @param name the portlet name to seek
       *  @return the found entry description or null
       */
      public Entry getEntry(String name)
      {
          return getEntry(this.portlets, name);
      }
  
      /** Returns the first portlets element in the current PSML resource corresponding 
       *  to the given name
       * 
       *  @param name the portlets name to seek
       *  @return the found portlets description or null
       */
      public Portlets getPortlets(String name)
      {        
          Portlets p = getPortlets(this.portlets, name);
          
          if (p == null)
          {
              //maybe name is a position...
              try
              {
                  p = getPortlets(Integer.parseInt(name));
              }
              catch (NumberFormatException e)
              {
                  // this will happen if name is not parseable, ignore
              }
          }
          
          return p;
      }
  
      /** Returns the first portlets element in the current PSML resource 
       *  found at the specified position. The position is computed using
       *  a left-most tree traversal algorithm of the existing portlets (thus
       *  not counting other entry objects)
       * 
       *  @param position the sought position
       *  @return the found portlets object or null if we did not find such an
       *  object
       */
      public Portlets getPortlets(int position)
      {
          return getPortlets(this.portlets, position, 0);
      }
  
      /** Returns the first entry in the specified PSML resource corresponding 
       *  to the given portlet name
       * 
       *  @param portlets the PSML description to look into
       *  @param name the portlet name to seek
       *  @return the found entry description or null
       */
      public static Entry getEntry(Portlets portlets, String name)
      {
          Entry entry = null;
  
          for (Enumeration e1 = portlets.enumerateEntry (); e1.hasMoreElements (); )
          {
              entry = (Entry) e1.nextElement ();
              if (entry.getParent().equals (name))
                   return (entry);
          }
  
          entry = null;
  
          for (Enumeration e2 = portlets.enumeratePortlets (); e2.hasMoreElements (); )
          {
              Portlets p = (Portlets) e2.nextElement ();
  
              entry = getEntry(p, name);
  
              if (entry != null)
                   break;
          }
  
          return (entry);
      }
  
      /** Returns the first portlets element in the specified PSML resource corresponding 
       *  to the given name
       * 
       *  @param portlets the PSML description to look into
       *  @param name the portlets name to seek
       *  @return the found portlets description or null
       */
      public static Portlets getPortlets(Portlets portlets, String name)
      {
          Portlets entry = portlets;
          
          if (entry.getName().equals(name))
          {
              return entry;
          }
  
          entry = null;
          
          for (Enumeration e2 = portlets.enumeratePortlets (); e2.hasMoreElements (); )
          {
              Portlets p = (Portlets) e2.nextElement ();
  
              entry = getPortlets(p, name);
  
              if (entry != null) break;
          }
  
          return (entry);
      }
  
      /** Returns the first portlets element in the specified PSML resource 
       *  in the given position
       * 
       *  @param portlets the PSML description to look into
       *  @param position the position to look for
       *  @param count the numbering for the portlets passed as parameter
       *  @return the found portlets description or null
       */
      public static Portlets getPortlets(Portlets portlets, int position, int count)
      {
          // sanity check, we never look after the sought position
          if (position < count)
          {
              return null;
          }
          
          // the base portlets is the one we're looking for...
          if (position == count)
          {
              return portlets;
          }
  
          // we need to recurse in the children
          Portlets result = null;
          
          for (Enumeration e2 = portlets.enumeratePortlets (); e2.hasMoreElements (); )
          {
              Portlets p = (Portlets) e2.nextElement ();
              count++;
              result = getPortlets(p, position, count);
  
              if (result != null) break;
          }
  
          return result;
      }
  
  }
  
  
  
  
  1.1                  jakarta-jetspeed/src/java/org/apache/jetspeed/om/profile/PSMLDocument.java
  
  Index: PSMLDocument.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *     "Apache Jetspeed" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache" or
   *    "Apache Jetspeed", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.jetspeed.om.profile;
  
  import org.apache.jetspeed.xml.api.portletmarkup.Portlets;
  import org.apache.jetspeed.xml.api.portletmarkup.Entry;
  
  /**
   * This interface represents a loaded PSML document in memory, providing
   * all facilities for finding and updating specific parts of the 
   * document.
   *
   * @author <a href="mailto:raphael@apache.org">Rapha�l Luta</a>
   * @version $Id: PSMLDocument.java,v 1.1 2001/06/04 17:43:13 raphael Exp $
   */
  public interface PSMLDocument
  {
      /**
       * Return the name of this document
       */
      public String getName();
          
      /**
       * Sets a new name for this document
       * 
       * @param name the new document name
       */
      public void setName(String name);
  
      /**
       * Return ths portlet set PSML description of this document
       *
       * @return a PSML object model hierarchy, or null if none is 
       * defined for this document
       */
      public Portlets getPortlets();
  
      /**
       * Sets a new PSML object model for this document
       * 
       * @param portlets the PSML object model
       */
      public void setPortlets(Portlets portlets);
  
      /** Returns the first entry in the current PSML resource corresponding 
       *  to the given portlet name
       * 
       *  @param name the portlet name to seek
       *  @return the found entry description or null
       */
      public Entry getEntry(String name);
  
      /** Returns the first portlets element in the current PSML resource corresponding 
       *  to the given name
       * 
       *  @param name the portlets name to seek
       *  @return the found portlets description or null
       */
      public Portlets getPortlets(String name);
  
      /** Returns the first portlets element in the current PSML resource 
       *  found at the specified position. The position is computed using
       *  a left-most tree traversal algorithm of the existing portlets (thus
       *  not counting other entry objects)
       * 
       *  @param position the sought position
       *  @return the found portlets object or null if we did not find such an
       *  object
       */
      public Portlets getPortlets(int position);
  
  }
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org