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/02/16 09:31:38 UTC

svn commit: r508347 - /cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/NewLinkService.java

Author: cziegeler
Date: Fri Feb 16 00:31:37 2007
New Revision: 508347

URL: http://svn.apache.org/viewvc?view=rev&rev=508347
Log:
Refactor to have only one method creating all links

Modified:
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/NewLinkService.java

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/NewLinkService.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/NewLinkService.java?view=diff&rev=508347&r1=508346&r2=508347
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/NewLinkService.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/NewLinkService.java Fri Feb 16 00:31:37 2007
@@ -197,8 +197,8 @@
             return this.getRefreshLinkURI(secure);
         }
         final LinkInfo info = this.getInfo();
-        final StringBuffer buffer = new StringBuffer(info.getBase(secure));
-        boolean hasParams = buffer.indexOf("?") != -1;
+        // let's collect all events
+        final List allEvents = new ArrayList();
 
         // add comparable events
         if ( info.comparableEvents != null ) {
@@ -215,52 +215,36 @@
                         found = true;
                     }
                 }
-                hasParams = this.addEvent(buffer, current, hasParams);
+                if ( !found ) {
+                    allEvents.add(current);
+                }
             }
         }
 
         // add events
         if ( info.events != null ) {
-            final Iterator iter = info.events.iterator();
-            while (iter.hasNext()) {
-                final Event current = (Event)iter.next();
-                hasParams = this.addEvent(buffer, current, hasParams);
-            }
-        }
-
-        // add parameters
-        if ( info.parameters != null ) {
-            final Iterator iter = info.parameters.entrySet().iterator();
-            while ( iter.hasNext() ) {
-                final Map.Entry current = (Map.Entry)iter.next();
-                final String parameterName = current.getKey().toString();
-                final String [] values = (String[])current.getValue();
-                for(int i=0; i<values.length; i++) {
-                    hasParams = this.addParameter(buffer, parameterName, values[i], hasParams);
-                }
-            }
+            allEvents.addAll(info.events);
         }
 
         // now add supplied events and parameters
+        List parameterDescriptions = null;
         final Iterator iter = events.iterator();
         while (iter.hasNext()) {
             final Object current = iter.next();
             if (current instanceof Event) {
-                hasParams = this.addEvent(buffer, (Event) current, hasParams);
+                allEvents.add(current);
             } else if ( current instanceof ParameterDescription ) {
-                if (hasParams) {
-                    buffer.append('&');
-                } else {
-                    buffer.append('?');
-                    hasParams = true;
+                if ( parameterDescriptions == null ) {
+                    parameterDescriptions = new ArrayList();
                 }
-                buffer.append(((ParameterDescription) current).parameters);
+                parameterDescriptions.add(current);
             } else {
                 throw new PortalRuntimeException("Unknown object passed to create a link. Only events " +
                             "and parameter descriptions are allowed. Unknown object: " + current);
             }
         }
-        return buffer.toString();
+
+        return this.createUrl(allEvents, parameterDescriptions, secure);
     }
 
     /**
@@ -301,41 +285,15 @@
     public String getRefreshLinkURI(Boolean secure) {
         final LinkInfo info = this.getInfo();
 
-        final StringBuffer buffer = new StringBuffer(info.getBase(secure));
-        boolean hasParams = buffer.indexOf("?") != -1;
-        
-        // add comparable events
+        // let's collect all events
+        final List allEvents = new ArrayList();
         if ( info.comparableEvents != null ) {
-            final Iterator iter = info.comparableEvents.iterator();
-            while (iter.hasNext()) {
-                final Event current = (Event)iter.next();
-                hasParams = this.addEvent(buffer, current, hasParams);
-            }
+            allEvents.addAll(info.comparableEvents);
         }
-
-        // add events
         if ( info.events != null ) {
-            final Iterator iter = info.events.iterator();
-            while (iter.hasNext()) {
-                final Event current = (Event)iter.next();
-                hasParams = this.addEvent(buffer, current, hasParams);
-            }
+            allEvents.addAll(info.events);
         }
-
-        // add parameters
-        if ( info.parameters != null ) {
-            final Iterator iter = info.parameters.entrySet().iterator();
-            while ( iter.hasNext() ) {
-                final Map.Entry current = (Map.Entry)iter.next();
-                final String parameterName = current.getKey().toString();
-                final String [] values = (String[])current.getValue();
-                for(int i=0; i<values.length; i++) {
-                    hasParams = this.addParameter(buffer, parameterName, values[i], hasParams);
-                }
-            }
-        }
-
-        return buffer.toString();
+        return this.createUrl(allEvents, null, secure);
     }
 
     /**
@@ -350,5 +308,48 @@
             }
         }
         return false;
+    }
+
+    protected String createUrl(List events, List parameterDescriptions, Boolean secure) {
+        final LinkInfo info = this.getInfo();
+
+        final StringBuffer buffer = new StringBuffer(info.getBase(secure));
+        boolean hasParams = buffer.indexOf("?") != -1;
+
+        // add events
+        final Iterator iter = events.iterator();
+        while (iter.hasNext()) {
+            final Event current = (Event)iter.next();
+            hasParams = this.addEvent(buffer, current, hasParams);
+        }
+
+        // add parameters
+        if ( info.parameters != null ) {
+            final Iterator pIter = info.parameters.entrySet().iterator();
+            while ( pIter.hasNext() ) {
+                final Map.Entry current = (Map.Entry)pIter.next();
+                final String parameterName = current.getKey().toString();
+                final String [] values = (String[])current.getValue();
+                for(int i=0; i<values.length; i++) {
+                    hasParams = this.addParameter(buffer, parameterName, values[i], hasParams);
+                }
+            }
+        }
+        // add optional parameter descriptions
+        if ( parameterDescriptions != null ) {
+            final Iterator dIter = parameterDescriptions.iterator();
+            while ( dIter.hasNext() ) {
+                final ParameterDescription desc = (ParameterDescription)dIter.next();
+                if (hasParams) {
+                    buffer.append('&');
+                } else {
+                    buffer.append('?');
+                    hasParams = true;
+                }
+                buffer.append(desc.parameters);
+            }
+        }
+
+        return buffer.toString();
     }
 }