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/28 08:56:22 UTC
svn commit: r512644 - in
/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal:
event/layout/ services/aspects/impl/ services/impl/links/
Author: cziegeler
Date: Tue Feb 27 23:56:20 2007
New Revision: 512644
URL: http://svn.apache.org/viewvc?view=rev&rev=512644
Log:
Page labels are nearly working now
Modified:
cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/event/layout/ChangeTabEvent.java
cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/event/layout/LayoutInstanceChangeAttributeEvent.java
cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/PageLabelProfileManagerAspect.java
cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/PageLabelLinkService.java
Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/event/layout/ChangeTabEvent.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/event/layout/ChangeTabEvent.java?view=diff&rev=512644&r1=512643&r2=512644
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/event/layout/ChangeTabEvent.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/event/layout/ChangeTabEvent.java Tue Feb 27 23:56:20 2007
@@ -51,4 +51,11 @@
public boolean isUseName() {
return useName;
}
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString() {
+ return "ChangeTabEvent (" + this.hashCode() + ") : " + this.asString();
+ }
}
Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/event/layout/LayoutInstanceChangeAttributeEvent.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/event/layout/LayoutInstanceChangeAttributeEvent.java?view=diff&rev=512644&r1=512643&r2=512644
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/event/layout/LayoutInstanceChangeAttributeEvent.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/event/layout/LayoutInstanceChangeAttributeEvent.java Tue Feb 27 23:56:20 2007
@@ -45,7 +45,7 @@
throw new IllegalArgumentException("Corrupt event data: " + eventData);
}
if ( eventData.charAt(pos+1) != 'T' && eventData.charAt(pos+1) != 'P') {
- throw new IllegalArgumentException("Corrupt event data: " + eventData);
+ throw new IllegalArgumentException("Corrupt event data: " + eventData);
}
this.temporary = (eventData.charAt(pos+1) == 'T');
final String layoutId = eventData.substring(0, pos);
@@ -103,4 +103,10 @@
return l.getId() + ':' + (this.temporary ? 'T' : 'P') + this.attributeName + ':' + this.value;
}
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString() {
+ return "LayoutInstanceChangeAttributeEvent (" + this.hashCode() + ") : " + this.asString();
+ }
}
Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/PageLabelProfileManagerAspect.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/PageLabelProfileManagerAspect.java?view=diff&rev=512644&r1=512643&r2=512644
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/PageLabelProfileManagerAspect.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/PageLabelProfileManagerAspect.java Tue Feb 27 23:56:20 2007
@@ -16,11 +16,20 @@
*/
package org.apache.cocoon.portal.services.aspects.impl;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.cocoon.portal.PortalService;
+import org.apache.cocoon.portal.event.layout.ChangeTabEvent;
import org.apache.cocoon.portal.om.CompositeLayout;
import org.apache.cocoon.portal.om.Item;
import org.apache.cocoon.portal.om.Layout;
+import org.apache.cocoon.portal.om.LayoutFeatures;
import org.apache.cocoon.portal.om.NamedItem;
import org.apache.cocoon.portal.services.aspects.ProfileManagerAspect;
import org.apache.cocoon.portal.services.aspects.ProfileManagerAspectContext;
@@ -33,6 +42,8 @@
extends AbstractBean
implements ProfileManagerAspect {
+ protected boolean stickyTabs = false;
+
/**
* @see org.apache.cocoon.portal.services.aspects.ProfileManagerAspect#prepareCopletDefinitions(org.apache.cocoon.portal.services.aspects.ProfileManagerAspectContext, java.util.Collection)
*/
@@ -59,26 +70,72 @@
*/
public void prepareLayout(ProfileManagerAspectContext context, Layout rootLayout) {
if ( rootLayout instanceof CompositeLayout ) {
- this.populate((CompositeLayout)rootLayout, "");
+ final Map pageLabelMap = new HashMap();
+ this.populate(context.getPortalService(), (CompositeLayout)rootLayout, pageLabelMap, "", null);
+ context.getPortalService().getUserService().setAttribute("pageLabelMap", pageLabelMap);
}
context.invokeNext(rootLayout);
}
- protected void populate(CompositeLayout layout, String name) {
+ private List populate(PortalService service, CompositeLayout layout, Map map, String name, List parentEvents) {
+ List lhList = null;
for (int j = 0; j < layout.getSize(); j++) {
final Item tab = layout.getItem(j);
+ final PageLabelEventInfo event = new PageLabelEventInfo(layout, tab);
final StringBuffer label = new StringBuffer(name);
if (label.length() > 0) {
label.append(".");
}
label.append((tab instanceof NamedItem) ? ((NamedItem) tab).getName()
: Integer.toString(j));
- // TODO
- tab.setTemporaryAttribute("pageLabel", label.toString());
- final Layout child = tab.getLayout();
+ try {
+ tab.setTemporaryAttribute("pageLabel", URLEncoder.encode(label.toString(), "utf-8"));
+ } catch (UnsupportedEncodingException e) {
+ // this can never happen
+ }
+
+ final List events = (parentEvents != null ? new ArrayList(parentEvents) : new ArrayList());
+ events.add(event);
+
+ Layout child = tab.getLayout();
+ List allEvents = null;
if (child != null && child instanceof CompositeLayout) {
- this.populate((CompositeLayout) child, label.toString());
+ allEvents = populate(service, (CompositeLayout) child, map, label.toString(), events);
+ }
+ if ( !this.stickyTabs ) {
+ // With non-sticky tabs the non-leaf nodes always display
+ // the left-most child tabs
+ if (lhList == null) {
+ if (allEvents != null) {
+ lhList = allEvents;
+ } else {
+ lhList = events;
+ }
+ }
+ if (allEvents != null) {
+ map.put(label.toString(), allEvents);
+ } else {
+ map.put(label.toString(), events);
+ }
+ } else {
+ map.put(label.toString(), events);
}
+ }
+ return lhList;
+ }
+
+ public static final class PageLabelEventInfo {
+
+ protected final CompositeLayout layout;
+ protected final Item item;
+
+ public PageLabelEventInfo(final CompositeLayout l, final Item i) {
+ this.layout = l;
+ this.item = i;
+ }
+
+ public ChangeTabEvent createEvent(PortalService service) {
+ return new ChangeTabEvent(LayoutFeatures.getLayoutInstance(service, this.layout, true), this.item, false);
}
}
}
Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/PageLabelLinkService.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/PageLabelLinkService.java?view=diff&rev=512644&r1=512643&r2=512644
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/PageLabelLinkService.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/PageLabelLinkService.java Tue Feb 27 23:56:20 2007
@@ -19,9 +19,15 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
+import org.apache.cocoon.environment.ObjectModelHelper;
+import org.apache.cocoon.environment.Request;
import org.apache.cocoon.portal.event.Event;
+import org.apache.cocoon.portal.event.EventManager;
import org.apache.cocoon.portal.event.layout.ChangeTabEvent;
+import org.apache.cocoon.portal.services.aspects.RequestProcessorAspectContext;
+import org.apache.cocoon.portal.services.aspects.impl.PageLabelProfileManagerAspect;
/**
@@ -32,6 +38,12 @@
*/
public class PageLabelLinkService extends DefaultLinkService {
+ protected String pageLabelRequestParameter = "pageLabel";
+
+ public void setPageLabelRequestParameter(String pageLabelRequestParameter) {
+ this.pageLabelRequestParameter = pageLabelRequestParameter;
+ }
+
/**
* Test implementation for generating page labels.
* @see org.apache.cocoon.portal.services.impl.links.DefaultLinkService#createUrl(java.util.List, java.util.List, java.lang.Boolean)
@@ -43,11 +55,13 @@
final Event current = (Event)i.next();
if ( current instanceof ChangeTabEvent ) {
final ChangeTabEvent tabEvent = (ChangeTabEvent)current;
- if ( tabEvent.getItem().getTemporaryAttribute("pageLabel") != null ) {
+ final String pageLabel = (String)tabEvent.getItem().getTemporaryAttribute("pageLabel");
+ if ( pageLabel != null ) {
+ i.remove();
if ( parameterDescriptions == null ) {
parameterDescriptions = new ArrayList();
}
- parameterDescriptions.add(new ParameterDescription("pageLabel=" + tabEvent.getItem().getTemporaryAttribute("pageLabel")));
+ parameterDescriptions.add(new ParameterDescription(this.pageLabelRequestParameter + '=' + pageLabel));
}
}
}
@@ -55,5 +69,31 @@
return super.createUrl(events, parameterDescriptions, secure);
}
-
-}
+ /**
+ * @see org.apache.cocoon.portal.services.impl.links.DefaultLinkService#process(org.apache.cocoon.portal.services.aspects.RequestProcessorAspectContext)
+ */
+ public void process(RequestProcessorAspectContext context) {
+ final Map pageLabelMap = (Map)context.getPortalService().getUserService().getAttribute("pageLabelMap");
+ if ( pageLabelMap != null ) {
+ final Request request = ObjectModelHelper.getRequest(context.getPortalService().getProcessInfoProvider().getObjectModel());
+ final EventManager publisher = context.getPortalService().getEventManager();
+
+ final String[] values = request.getParameterValues( this.pageLabelRequestParameter );
+ if ( values != null ) {
+ for(int i=0; i<values.length; i++) {
+ final String current = values[i];
+ final List events = (List)pageLabelMap.get(current);
+ if ( events != null ) {
+ final Iterator iter = events.iterator();
+ while ( iter.hasNext() ) {
+ final PageLabelProfileManagerAspect.PageLabelEventInfo event = (PageLabelProfileManagerAspect.PageLabelEventInfo)iter.next();
+ // TODO - check for change
+ publisher.send(event.createEvent(context.getPortalService()));
+ }
+ }
+ }
+ }
+ }
+ super.process(context);
+ }
+}
\ No newline at end of file