shesmer     01/05/04 04:25:53

  Modified:    src/java/org/apache/jetspeed/modules/screens Tag:
                        portlet_api Home.java
  Log:
  portlet api 2 implementation
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.14.2.1  +179 -29   
jakarta-jetspeed/src/java/org/apache/jetspeed/modules/screens/Home.java
  
  Index: Home.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/modules/screens/Home.java,v
  retrieving revision 1.14
  retrieving revision 1.14.2.1
  diff -u -r1.14 -r1.14.2.1
  --- Home.java 2001/04/25 00:10:10     1.14
  +++ Home.java 2001/05/04 11:25:49     1.14.2.1
  @@ -68,7 +68,7 @@
   import org.apache.jetspeed.daemon.*;
   import org.apache.jetspeed.portal.*;
   import org.apache.jetspeed.portal.factory.*;
  -//import org.apache.jetspeed.util.*;
  +import org.apache.jetspeed.util.*;
   import org.apache.jetspeed.profiler.*;
   
   import org.apache.jetspeed.services.profiler.ProfileManager;
  @@ -85,19 +85,18 @@
   
   //Turbine support
   import org.apache.turbine.modules.*;
  -//import org.apache.turbine.util.*;
  -import org.apache.turbine.util.RunData;
  -import org.apache.turbine.util.StringUtils;
  -import org.apache.turbine.util.Log;
  +import org.apache.turbine.util.*;
   
   import org.apache.jetspeed.services.resources.JetspeedResources;
   
  +import org.apache.jetspeed.portletcontainer.invoker.*;
  +import org.apache.jetspeed.portletcontainer.information.*;
  +
   /**
   The Jetspeed home page
   
   @author <a href="mailto:[EMAIL PROTECTED]";>Kevin A. Burton</a>
  -@author <a href="mailto:[EMAIL PROTECTED]";>Tom Adams</a>
  -@version $Id: Home.java,v 1.14 2001/04/25 00:10:10 taylor Exp $
  +@version $Id: Home.java,v 1.14.2.1 2001/05/04 11:25:49 shesmer Exp $
   */
   public class Home extends BaseJetspeedScreen {
       
  @@ -105,17 +104,16 @@
       Portlet pathinfo name
       */
       public static final String PORTLET = "portlet";
  -
  +    
       /**
       Layout pathinfo name
       */
       public static final String LAYOUT = "layout";
   
       /**
  -    Default control to be used for maximized portlet display
  +    Control to be used for maximized portlet display
       */
  -    public static final String DEFAULT_MAXIMIZED_CONTROL_NAME =
  -        "org.apache.jetspeed.portal.controls.FullScreenControl";
  +    public static final String MAX_CONTROL_NAME = 
"org.apache.jetspeed.portal.controls.FullScreenControl";  
   
       /**
       Build the output from the Home screen
  @@ -123,6 +121,56 @@
       public ConcreteElement doBuild( RunData rundata ) {
   
           CapabilityMap cm = CapabilityMapFactory.getCapabilityMap( rundata );
  +        
  +        // SHESMER-BEGIN
  +        // temporary code here. has to be done better with Raphaels layout system
  +        // save last window type and subtype to generate a window event
  +        String pid = rundata.getParameters().getString( PORTLET );
  +        String piid = rundata.getParameters().getString( "piid" );
  +        int type = URILookup.getURIType(pid, rundata);
  +        int subtype = URILookup.getURISubType(pid, rundata);
  +        HttpSession session = rundata.getSession();
  +        Integer lasttype = (Integer)session.getAttribute("LastPortletType");
  +        Integer lastsubtype = (Integer)session.getAttribute("LastPortletSubtype");
  +        if ((lasttype!=null) && (lastsubtype!=null)) {
  +            Integer eventId = null;
  +            if ((lastsubtype.intValue()==URILookup.SUBTYPE_MAXIMIZE) &&
  +                (subtype==URILookup.SUBTYPE_NONE)) {
  +                eventId = new 
Integer(org.apache.jetspeed.portlet.event.WindowEvent.WINDOW_RESTORED);
  +                pid = (String)session.getAttribute("LastPortletId");
  +                piid = (String)session.getAttribute("LastPortletIId");
  +            }
  +            else if ((lastsubtype.intValue()==URILookup.SUBTYPE_NONE) &&
  +                (subtype==URILookup.SUBTYPE_MAXIMIZE)) {
  +                eventId = new 
Integer(org.apache.jetspeed.portlet.event.WindowEvent.WINDOW_MAXIMIZED);
  +            }
  +            if ((eventId!=null) && (pid!=null) && (piid!=null)) {
  +                PortalInformationProvider provider = new 
PortalInformationProviderImpl( rundata );
  +                PortletInvoker invoker = PortletInvokerImpl.getInstance();
  +                Hashtable parameters = new Hashtable();
  +                parameters.put("pid",pid);
  +                parameters.put("piid",piid);
  +                parameters.put("windowEventId",eventId);
  +                parameters.put("provider",provider);
  +                parameters.put("request",rundata.getRequest());
  +                try {
  +                    invoker.perform( PortletInvoker.Event.WINDOW_EVENT,
  +                                     parameters );
  +                }
  +                catch (org.apache.jetspeed.portlet.PortletException e) {
  +                    String message = "Home Screen: Could not fire a window event : "
  +                                        + e.getMessage();
  +                    Log.error( message, e );
  +                }
  +            }
  +        }
  +        session.setAttribute("LastPortletType",new Integer(type));
  +        session.setAttribute("LastPortletSubtype",new Integer(subtype));
  +        if ((pid!=null) && (piid!=null)) {
  +            session.setAttribute("LastPortletId",pid);
  +            session.setAttribute("LastPortletIId",piid);
  +        }
  +        // SHESMER-END
   
           /* From now on, each request for a default(-user) page is passed to method 
'getPSMLContent()'.
              For each request-type, there is a .psml file, which describes the 
content/style
  @@ -130,7 +178,10 @@
              certain portlet, method getContent() is invoked. Both methods return the 
actual content
              according to the portlet - control - controller structure, provided by 
Jetspeed (S.A.) */
   
  -        if ( rundata.getParameters().getString( PORTLET ) != null )
  +// old source
  +//        if ( rundata.getParameters().getString( PORTLET ) != null )
  +        if ( URILookup.getURISubType(rundata.getParameters().getString( PORTLET ), 
  +                                     rundata) == URILookup.SUBTYPE_MAXIMIZE )
           {
                   return this.getContent( rundata );
           }
  @@ -139,6 +190,9 @@
                   return getPSMLContent( rundata, cm );
           }
   
  +        // SHESMER-TODO
  +        // endPage cannot be called in the current layout-system, because of ECS
  +
       }
   
       /**
  @@ -151,16 +205,31 @@
   
               //the set here should be one control and one portlet
               PortletSet set = this.getPortletSet( rundata );
  +            
  +            // SHESMER-BEGIN
  +            PortalInformationProvider provider =
  +                new PortalInformationProviderImpl(rundata);
  +            PortletInvoker invoker = 
  +                PortletInvokerImpl.getInstance();
  +            Hashtable portletsHashtable = getPortletsHashtable( set );
  +            try {
  +                invoker.beginPage( portletsHashtable, rundata.getRequest(), 
provider );
  +            }
  +            catch (org.apache.jetspeed.portlet.PortletException e) {
  +                String message = "Edit: Could not call beginPage: " + 
e.getMessage();
  +                Log.error( message, e );
  +            }
  +            // SHESMER-END
   
               return set.getContent( rundata );
  -
  +            
           } catch (PortletException e) {
               Log.error( e );
               return null;
           }
   
       }
  -
  +    
   
       /**
       Get the desired content from PSML
  @@ -181,25 +250,43 @@
                   Profiler profiler = ProfilerFactory.getProfiler();
                   Portlet portlet = PortletSetFactory.getInstance( 
profiler.getResourceURL( rundata ) )
                      .getPortletSet( rundata );
  +
  +                // SHESMER-BEGIN
  +                
org.apache.jetspeed.portletcontainer.information.PortalInformationProvider provider =
  +                    new 
org.apache.jetspeed.portletcontainer.information.PortalInformationProviderImpl(rundata);
  +                org.apache.jetspeed.portletcontainer.invoker.PortletInvoker invoker 
= 
  +                    
org.apache.jetspeed.portletcontainer.invoker.PortletInvokerImpl.getInstance();
  +                Hashtable portletsHashtable = getPortletsHashtable( 
(PortletSet)portlet );
  +                invoker.beginPage( portletsHashtable, rundata.getRequest(), 
provider );
  +                // SHESMER-END
  +
                   root.addElement( portlet.getContent( rundata ) );
               }
               else
               {
                   Profile profile = ProfileManager.getProfile( rundata, cm  );
                   Portlet portlet = profile.getRootSet(rundata);
  +
  +                // SHESMER-BEGIN
  +                
org.apache.jetspeed.portletcontainer.information.PortalInformationProvider provider =
  +                    new 
org.apache.jetspeed.portletcontainer.information.PortalInformationProviderImpl(rundata);
  +                org.apache.jetspeed.portletcontainer.invoker.PortletInvoker invoker 
= 
  +                    
org.apache.jetspeed.portletcontainer.invoker.PortletInvokerImpl.getInstance();
  +                Hashtable portletsHashtable = getPortletsHashtable( 
(PortletSet)portlet );
  +                invoker.beginPage( portletsHashtable, rundata.getRequest(), 
provider );
  +                // SHESMER-END
  +
                   root.addElement( portlet.getContent( rundata ) );
               }
   
           } catch ( Throwable t ) {
   
               Log.error( t );
  -            root.addElement(new H2("Error Generating Jetspeed Screen:"));
  -            root.addElement(new H3(t.toString()));
  -            rundata.setMessage(t.toString());
  -            rundata.setStackTrace(StringUtils.stackTrace(t), t);
  +
               ByteArrayOutputStream ostr = new ByteArrayOutputStream();
               t.printStackTrace( new PrintWriter(ostr,true) );
               root.addElement( ostr.toString() );
  +
           }
   
           // time in millis, sugested by Thomas Schaeck ([EMAIL PROTECTED])
  @@ -230,6 +317,7 @@
       */
       private PortletSet getPortletSet( RunData rundata ) throws PortletException {
   
  +/* SHESMER-AGGR-API2
           PortletSet ps = new PortletSet();
           PortletEntry entry = PortletURIManager.getEntry( rundata.getParameters() );
   
  @@ -237,25 +325,87 @@
               String message = "Could not determine entry.";
               throw new PortletException( message );
           }
  -
  +        
           Portlet portlet = PortletFactory.getPortlet( entry );
  -
  -        // get the controller out of the jetspeed resources properties file
  -        String controllerClassname = JetspeedResources.getString(
  -            JetspeedResources.PORTLETCONTROL_MAXIMIZED_CLASSNAME_KEY,
  -            DEFAULT_MAXIMIZED_CONTROL_NAME);
  -
  -        /* Set the controller type explicitly.*/
  -        PortletControl control =
  -            PortletControlFactory.getPortletControl( controllerClassname, portlet );
  +        
  +        // Set the controller type explicitely.
  +        PortletControl control = PortletControlFactory.getPortletControl( 
MAX_CONTROL_NAME, portlet );
   
           control.setWidth( "100%" );
  +        
  +        ps.addPortlet( control ); 
  +        
  +*/        
  +        PortletSet ps = new PortletSet();
  +
  +        org.apache.jetspeed.xml.api.portletmarkup.Entry entry = null;
   
  -        ps.addPortlet( control );
  +        Profiler profiler = ProfilerFactory.getProfiler();
  +        PortletSetFactory factory = PortletSetFactory.getInstance( 
profiler.getResourceURL( rundata ) );
  +        org.apache.jetspeed.xml.api.portletmarkup.Portlets portlets = 
factory.getPortlets();
  +        entry = findEntry(portlets,rundata.getParameters().getString("portlet"));
  +
  +        if (entry!=null) {
  +            Portlet portlet = new org.apache.jetspeed.portal.PortletPlaceholder( 
entry, rundata );
  +        
  +            PortletControl control = PortletControlFactory.getPortletControl( 
MAX_CONTROL_NAME, portlet );
  +
  +            control.setWidth( "100%" );
  +
  +            ps.addPortlet( control ); 
  +        }
   
           return ps;
  +        
  +    }
  +   
  +    // SHESMER-AGGR-API2-BEGIN
  +    private org.apache.jetspeed.xml.api.portletmarkup.Entry 
  +        findEntry(org.apache.jetspeed.xml.api.portletmarkup.Portlets portlets,
  +                  String portletName)
  +    {
  +        org.apache.jetspeed.xml.api.portletmarkup.Entry entry = null;
  +        Enumeration allPortlets = portlets.enumeratePortlets();
  +        while (allPortlets.hasMoreElements()) {
  +            org.apache.jetspeed.xml.api.portletmarkup.Portlets p =
  +                
(org.apache.jetspeed.xml.api.portletmarkup.Portlets)allPortlets.nextElement();
  +            entry = findEntry(p,portletName);
  +            if (entry!=null) return entry;
  +        }
  +        Enumeration allEntries = portlets.enumerateEntry();
  +        while (allEntries.hasMoreElements()) {
  +            entry = 
(org.apache.jetspeed.xml.api.portletmarkup.Entry)allEntries.nextElement();
  +            if (entry.getParent().equals(portletName)) {
  +                return entry;
  +            }
  +        }
  +        return null;
  +    }
  +
  +    private Hashtable fillHashtable(PortletSet portletset, Hashtable 
portletsHashtable)
  +    {
  +        Enumeration allPortlets = portletset.getPortlets();
  +        while (allPortlets.hasMoreElements()) {
  +            Portlet p = (Portlet)allPortlets.nextElement();
  +            if (p instanceof PortletSet) {
  +                portletsHashtable = fillHashtable((PortletSet)p,portletsHashtable);
  +            }
  +            else {
  +                org.apache.jetspeed.portal.PortletPlaceholder pp =
  +                    (org.apache.jetspeed.portal.PortletPlaceholder)p;
  +                portletsHashtable.put(pp.getPiid(),pp.getName());
  +            }
  +        }
  +        return portletsHashtable;
  +    }
   
  +    private Hashtable getPortletsHashtable(PortletSet portlets)
  +    {
  +        Hashtable portletsHashtable = new Hashtable();
  +        portletsHashtable = fillHashtable(portlets,portletsHashtable);
  +        return portletsHashtable;
       }
  +    // SHESMER-END
   
   }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to