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 2003/12/08 14:47:51 UTC

cvs commit: cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/impl DefaultLinkService.java

cziegeler    2003/12/08 05:47:51

  Modified:    src/blocks/portal/java/org/apache/cocoon/portal
                        LinkService.java
               src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl
                        FullScreenCopletAspect.java
               src/blocks/portal/java/org/apache/cocoon/portal/impl
                        DefaultLinkService.java
  Log:
  Fixing event handling with full screen layout
  
  Revision  Changes    Path
  1.3       +24 -1     cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/LinkService.java
  
  Index: LinkService.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/LinkService.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LinkService.java	7 May 2003 20:24:02 -0000	1.2
  +++ LinkService.java	8 Dec 2003 13:47:50 -0000	1.3
  @@ -68,13 +68,36 @@
       
       String DEFAULT_REQUEST_EVENT_PARAMETER_NAME = "cocoon-portal-event";
       
  +    /**
  +     * Get the uri for this coplet containing the additional event
  +     * @param event The event to add
  +     * @return A URI
  +     */
       String getLinkURI(Event event);
   
  +    /**
  +     * Get the uri for this coplet containing the additional events
  +     * @param events The events to add
  +     * @return A URI
  +     */
       String getLinkURI(List events);
       
  +    /**
  +     * Add this event to the list of events contained in the uri
  +     * @param event Event to add
  +     */
       void addEventToLink(Event event);
       
  +    /**
  +     * Add this parameter to every link
  +     * @param name  The request parameter name
  +     * @param value The value for the parameter
  +     */
       void addParameterToLink(String name, String value);
       
  +    /**
  +     * Get a link that simply refreshs the portal
  +     * @return A URI
  +     */
       String getRefreshLinkURI();
   }
  
  
  
  1.5       +3 -2      cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/FullScreenCopletAspect.java
  
  Index: FullScreenCopletAspect.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/FullScreenCopletAspect.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FullScreenCopletAspect.java	24 Sep 2003 21:22:33 -0000	1.4
  +++ FullScreenCopletAspect.java	8 Dec 2003 13:47:51 -0000	1.5
  @@ -82,7 +82,8 @@
   
           final Layout fullScreenLayout = service.getComponentManager().getProfileManager().getEntryLayout();
           if ( fullScreenLayout != null && fullScreenLayout.equals( layout )) {
  -            XMLUtils.createElement(handler, "fullscreen-uri", service.getComponentManager().getLinkService().getRefreshLinkURI());
  +            FullScreenCopletEvent event = new FullScreenCopletEvent( cid, null );
  +            XMLUtils.createElement(handler, "fullscreen-uri", service.getComponentManager().getLinkService().getLinkURI(event));
           } else {
               FullScreenCopletEvent event = new FullScreenCopletEvent( cid, layout );
               XMLUtils.createElement(handler, "fullscreen-uri", service.getComponentManager().getLinkService().getLinkURI(event));
  
  
  
  1.8       +77 -20    cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java
  
  Index: DefaultLinkService.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- DefaultLinkService.java	20 Oct 2003 13:36:56 -0000	1.7
  +++ DefaultLinkService.java	8 Dec 2003 13:47:51 -0000	1.8
  @@ -83,16 +83,20 @@
       extends AbstractLogEnabled
       implements ThreadSafe, LinkService, Serviceable, Disposable, Contextualizable {
   
  -
  +    /**
  +     * Helper class containing the information about the request uri
  +     */
       class Info {
           StringBuffer  linkBase = new StringBuffer();
           boolean      hasParameters = false;
           ArrayList     comparableEvents = new ArrayList(5);
       }
       
  -    
  +    /** The converter used to convert an event into a request parameter */
       protected EventConverter   converter;
  +    /** The service manager */
       protected ServiceManager manager;
  +    /** The cocoon context */
       protected Context context;
       
       /* (non-Javadoc)
  @@ -103,6 +107,10 @@
           this.converter = (EventConverter)this.manager.lookup(EventConverter.ROLE);
       }
   
  +    /**
  +     * Return the current info for the request
  +     * @return An Info object
  +     */
       protected Info getInfo() {
           final Request request = ContextHelper.getRequest( this.context );
           Info info = (Info)request.getAttribute(DefaultLinkService.class.getName());
  @@ -124,19 +132,28 @@
           return info;
       }
       
  +    /* (non-Javadoc)
  +     * @see org.apache.cocoon.portal.LinkService#getLinkURI(org.apache.cocoon.portal.event.Event)
  +     */
       public String getLinkURI(Event event) {
           final Info info = this.getInfo();
           final StringBuffer buffer = new StringBuffer(info.linkBase.toString());
           boolean hasParams = info.hasParameters;
   
           // add comparable events
  +        final boolean comparableEvent = event instanceof ComparableEvent;        
           Iterator iter = info.comparableEvents.iterator();
           while (iter.hasNext()) {
  -            ComparableEvent current = (ComparableEvent)iter.next();
  -            if (!(event instanceof ComparableEvent)
  -                 || ( !current.equalsEvent((ComparableEvent)event))) {
  -
  -                hasParams = this.addEvent(buffer, current, hasParams);
  +            Object[] objects = (Object[])iter.next();
  +            ComparableEvent current = (ComparableEvent)objects[0];
  +            if ( !comparableEvent || !current.equalsEvent((ComparableEvent)event)) {
  +                if ( hasParams ) {
  +                    buffer.append('&');
  +                } else {
  +                    buffer.append('?');
  +                }
  +                buffer.append((String)objects[1]).append('=').append(SourceUtil.encode((String)objects[2]));
  +                hasParams = true;
               }
           }
           
  @@ -146,6 +163,10 @@
           return buffer.toString();
       }
   
  +    /**
  +     * Add one event to the buffer
  +     * @return Returns true, if the link contains a parameter
  +     */
       protected boolean addEvent(StringBuffer buffer, Event event, boolean hasParams) {
           if ( hasParams ) {
               buffer.append('&');
  @@ -164,6 +185,9 @@
           return true;
       }
       
  +    /* (non-Javadoc)
  +     * @see org.apache.cocoon.portal.LinkService#getLinkURI(java.util.List)
  +     */
       public String getLinkURI(List events) {
           final Info info = this.getInfo();
           boolean hasParams = info.hasParameters;
  @@ -172,7 +196,8 @@
           // add comparable events
           Iterator iter = info.comparableEvents.iterator();
           while (iter.hasNext()) {
  -            ComparableEvent current = (ComparableEvent)iter.next();
  +            Object[] objects = (Object[])iter.next();
  +            ComparableEvent current = (ComparableEvent)objects[0];
               
               Iterator eventIterator = events.iterator();
               boolean found = false;
  @@ -184,7 +209,13 @@
                   }
               }
               if (!found) {
  -                hasParams = this.addEvent(buffer, current, hasParams);
  +                if ( hasParams ) {
  +                    buffer.append('&');
  +                } else {
  +                    buffer.append('?');
  +                }
  +                buffer.append((String)objects[1]).append('=').append(SourceUtil.encode((String)objects[2]));
  +                hasParams = true;
               }
           }
   
  @@ -197,23 +228,30 @@
           return buffer.toString();
       }
   
  +    /* (non-Javadoc)
  +     * @see org.apache.cocoon.portal.LinkService#addEventToLink(org.apache.cocoon.portal.event.Event)
  +     */
       public void addEventToLink(Event event) {
  +        String parameterName = DEFAULT_REQUEST_EVENT_PARAMETER_NAME;
  +        if (event instanceof RequestEvent ) {
  +            final String eventParName = ((RequestEvent)event).getRequestParameterName();
  +            if ( eventParName != null ) {
  +                parameterName = eventParName;
  +            }
  +        }
  +        final String value = this.converter.encode( event );
  +
           final Info info = this.getInfo();
           if ( event instanceof ComparableEvent) {
  -            info.comparableEvents.add( event );
  +            info.comparableEvents.add( new Object[] {event, parameterName, value} );
           } else {
  -            final String value = converter.encode(event);
  -            String parameterName = LinkService.DEFAULT_REQUEST_EVENT_PARAMETER_NAME;
  -            if (event instanceof RequestEvent) {
  -                final String eventParName = ((RequestEvent)event).getRequestParameterName();
  -                if ( eventParName != null ) {
  -                    parameterName = eventParName;
  -                }
  -            }
               this.addParameterToLink(parameterName, value);
           }
       }
   
  +    /* (non-Javadoc)
  +     * @see org.apache.cocoon.portal.LinkService#addParameterToLink(java.lang.String, java.lang.String)
  +     */
       public void addParameterToLink(String name, String value) {
           final Info info = this.getInfo();
           if ( info.hasParameters ) {
  @@ -225,9 +263,28 @@
           info.hasParameters = true;
       }
   
  +    /* (non-Javadoc)
  +     * @see org.apache.cocoon.portal.LinkService#getRefreshLinkURI()
  +     */
       public String getRefreshLinkURI() {
           final Info info = this.getInfo();
  -        return info.linkBase.toString();
  +
  +        final StringBuffer buffer = new StringBuffer(info.linkBase.toString());
  +
  +        // add comparable events
  +        Iterator iter = info.comparableEvents.iterator();
  +        boolean hasParams = info.hasParameters;
  +        while (iter.hasNext()) {
  +            Object[] objects = (Object[])iter.next();
  +            if ( hasParams ) {
  +                buffer.append('&');
  +            } else {
  +                buffer.append('?');
  +            }
  +            buffer.append((String)objects[1]).append('=').append(SourceUtil.encode((String)objects[2]));
  +            hasParams = true;
  +        }
  +        return buffer.toString();
       }
       
       /* (non-Javadoc)