[portal-commits] JBoss Portal SVN: r11834 - in branches/JBoss_Portal_Branch_2_7: core/src/main/org/jboss/portal/core/impl/coordination and 4 other directories.

portal-commits at lists.jboss.org portal-commits at lists.jboss.org
Mon Sep 8 17:45:10 EDT 2008


Author: chris.laprun at jboss.com
Date: 2008-09-08 17:45:10 -0400 (Mon, 08 Sep 2008)
New Revision: 11834

Added:
   branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/controller/coordination/Utils.java
   branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowMultiQNameMetaData.java
   branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowSimpleQNameMetaData.java
Modified:
   branches/JBoss_Portal_Branch_2_7/core-admin/src/main/org/jboss/portal/core/admin/ui/coordination/ParameterBindingManagerBean.java
   branches/JBoss_Portal_Branch_2_7/core-admin/src/resources/portal-admin-war/WEB-INF/classes/Resource.properties
   branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/controller/coordination/CoordinationConfigurator.java
   branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/controller/coordination/WindowBindingInfo.java
   branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/impl/coordination/CoordinationService.java
   branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationAliasBindingMetaData.java
   branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationEventWiringMetaData.java
   branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationMetaData.java
   branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowBindingMetaData.java
   branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowMetaData.java
   branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/test/core/model/portal/coordination/CoordinationServiceTestCase.java
Log:
- Implemented possibility to select several parameters for a given window. Not convinced this 
  is the proper way to do things but committing so it's not lost. Might be reverted.

Modified: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/controller/coordination/CoordinationConfigurator.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/controller/coordination/CoordinationConfigurator.java	2008-09-08 14:31:05 UTC (rev 11833)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/controller/coordination/CoordinationConfigurator.java	2008-09-08 21:45:10 UTC (rev 11834)
@@ -151,10 +151,10 @@
     * Defines shared parameter binding for a given collection of windows.
     *
     * @param name
-    * @param windows
+    * @param mappings
     * @throws IllegalCoordinationException
     */
-   void setWindowBinding(String name, Map<Window, QName> windows) throws IllegalCoordinationException;
+   void setWindowBinding(String name, Map<Window, Set<QName>> mappings) throws IllegalCoordinationException;
 
    /**
     * Removes given parameter binding

Added: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/controller/coordination/Utils.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/controller/coordination/Utils.java	                        (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/controller/coordination/Utils.java	2008-09-08 21:45:10 UTC (rev 11834)
@@ -0,0 +1,54 @@
+/*
+* JBoss, a division of Red Hat
+* Copyright 2008, Red Hat Middleware, LLC, and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+
+package org.jboss.portal.core.controller.coordination;
+
+import org.jboss.portal.common.util.ParameterValidation;
+
+import java.util.Set;
+import java.util.Map;
+import java.util.HashSet;
+
+/**
+ * @author <a href="mailto:chris.laprun at jboss.com">Chris Laprun</a>
+ * @version $Revision$
+ */
+public class Utils
+{
+   public static <T, U> Map<T, Set<U>> addToMultiMap(Map<T, Set<U>> multiMap, T key, U value)
+   {
+      ParameterValidation.throwIllegalArgExceptionIfNull(multiMap, "multi map");
+      ParameterValidation.throwIllegalArgExceptionIfNull(key, "key");
+      ParameterValidation.throwIllegalArgExceptionIfNull(value, "value");
+
+      Set<U> existing = multiMap.get(key);
+      if (existing == null)
+      {
+         existing = new HashSet<U>();
+         multiMap.put(key, existing);
+      }
+
+      existing.add(value);
+
+      return multiMap;
+   }
+}

Modified: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/controller/coordination/WindowBindingInfo.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/controller/coordination/WindowBindingInfo.java	2008-09-08 14:31:05 UTC (rev 11833)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/controller/coordination/WindowBindingInfo.java	2008-09-08 21:45:10 UTC (rev 11834)
@@ -26,6 +26,7 @@
 
 import javax.xml.namespace.QName;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @author <a href="mailto:boleslaw dot dawidowicz at redhat anotherdot com">Boleslaw Dawidowicz</a>
@@ -34,5 +35,5 @@
  */
 public interface WindowBindingInfo extends ParameterBindingInfo
 {
-   Map<Window, QName> getWindows();
+   Map<Window, Set<QName>> getMappings();
 }

Modified: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/impl/coordination/CoordinationService.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/impl/coordination/CoordinationService.java	2008-09-08 14:31:05 UTC (rev 11833)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/impl/coordination/CoordinationService.java	2008-09-08 21:45:10 UTC (rev 11834)
@@ -30,6 +30,7 @@
 import org.jboss.portal.core.controller.coordination.EventWiringInfo;
 import org.jboss.portal.core.controller.coordination.IllegalCoordinationException;
 import org.jboss.portal.core.controller.coordination.WindowBindingInfo;
+import org.jboss.portal.core.controller.coordination.Utils;
 import org.jboss.portal.core.controller.portlet.ControllerPortletControllerContext;
 import org.jboss.portal.core.model.portal.Page;
 import org.jboss.portal.core.model.portal.PageContainer;
@@ -130,11 +131,17 @@
 
       for (WindowBindingInfo info : getWindowBindings(window))
       {
-         for (Map.Entry<Window, QName> entry : info.getWindows().entrySet())
+         for (Map.Entry<Window, Set<QName>> entry : info.getMappings().entrySet())
          {
-            if (entry.getKey().getName().equals(window.getName()) && entry.getValue().equals(name))
+            if (entry.getKey().getName().equals(window.getName()))
             {
-               names.add(info.getName());
+               for (QName qName : entry.getValue())
+               {
+                  if (name.equals(qName))
+                  {
+                     names.add(info.getName());
+                  }
+               }
             }
          }
       }
@@ -380,7 +387,7 @@
                        + window.getId());
             }
 
-            QName qname = decodeQName(eventName);
+            QName qname = QName.valueOf(eventName);
 
             if (role.equalsIgnoreCase(EVENT_ROLE_SOURCE))
             {
@@ -443,7 +450,7 @@
                String name = window.getDeclaredProperty(prop_wiring);
                if (name != null)
                {
-                  QName qname = decodeQName(name);
+                  QName qname = QName.valueOf(name);
                   String role = window.getDeclaredProperty(propName);
 
                   if (role != null && role.equalsIgnoreCase(EVENT_ROLE_SOURCE))
@@ -507,18 +514,18 @@
 
    // Binding stuff *****************************************************************************************
 
-   public void setWindowBinding(String name, Map<Window, QName> windows) throws IllegalCoordinationException
+   public void setWindowBinding(String name, Map<Window, Set<QName>> mappings) throws IllegalCoordinationException
    {
-      ParameterValidation.throwIllegalArgExceptionIfNull(windows, "windows");
+      ParameterValidation.throwIllegalArgExceptionIfNull(mappings, "windows");
       ParameterValidation.throwIllegalArgExceptionIfNullOrEmpty(name, "name", "window binding");
-      if (windows.isEmpty())
+      if (mappings.isEmpty())
       {
          throw new IllegalArgumentException("empty windows map");
       }
 
       // Obtain parent page and check that all windows are in one branch...
       Page parentPage = null;
-      for (Window window : windows.keySet())
+      for (Window window : mappings.keySet())
       {
          if (parentPage == null)
          {
@@ -534,9 +541,9 @@
       String prop_wiring = PREFIX_PARAMETER_BINDING + name;
 
       //
-      for (Window window : windows.keySet())
+      for (Window window : mappings.keySet())
       {
-         window.setDeclaredProperty(prop_wiring, windows.get(window).toString());
+         window.setDeclaredProperty(prop_wiring, concatenateQNames(mappings.get(window)));
       }
    }
 
@@ -562,14 +569,14 @@
    public void renameWindowBinding(WindowBindingInfo windowBinding, String newName) throws IllegalCoordinationException
    {
       removeWindowBinding(windowBinding);
-      setWindowBinding(newName, windowBinding.getWindows());
+      setWindowBinding(newName, windowBinding.getMappings());
    }
 
    public void renameWindowBinding(Page page, String bindingName, String newName) throws IllegalCoordinationException
    {
       WindowBindingInfo info = getWindowBinding(page, bindingName);
       removeWindowBinding(page, bindingName);
-      setWindowBinding(newName, info.getWindows());
+      setWindowBinding(newName, info.getMappings());
    }
 
    public WindowBindingInfo getWindowBinding(Page page, String name) throws IllegalCoordinationException
@@ -581,25 +588,24 @@
 
       // Examine window properties and create page parameters
       Collection<PortalObject> children = page.getChildren(PortalObject.WINDOW_MASK);
-      Map<Window, QName> windows = new HashMap<Window, QName>(children.size());
+      Map<Window, Set<QName>> mappings = new HashMap<Window, Set<QName>>(children.size());
       for (PortalObject window : children)
       {
-         String bindingName = window.getDeclaredProperty(nameProp);
+         String qNameList = window.getDeclaredProperty(nameProp);
 
-         if (bindingName != null)
+         if (qNameList != null)
          {
-            QName qname = decodeQName(bindingName);
-            windows.put((Window)window, qname);
+            mappings.put((Window)window, extractQNames(qNameList));
          }
       }
 
-      if (windows.isEmpty())
+      if (mappings.isEmpty())
       {
          return null;
       }
       else
       {
-         return new WindowInfoPOJO(name, page, windows);
+         return new WindowInfoPOJO(name, page, mappings);
       }
    }
 
@@ -639,27 +645,27 @@
 
       String propName = PREFIX_PARAMETER_ALIAS_NAME + aliasName;
 
-      // Check if qname consist separator string
-      for (QName qname : qnames)
+      page.setDeclaredProperty(propName, concatenateQNames(qnames));
+   }
+
+   private String concatenateQNames(Set<QName> qnames) throws IllegalCoordinationException
+   {
+      StringBuilder qnameList = new StringBuilder();
+      for (Iterator i = qnames.iterator(); i.hasNext();)
       {
+         QName qname = (QName)i.next();
+         // Check if qname contains separator string
          if (qname.toString().contains(QNAME_SEPARATOR))
          {
             throw new IllegalCoordinationException("Qname: " + qname + " contains forbidden character: " + QNAME_SEPARATOR);
          }
-      }
-
-      StringBuilder qnameList = new StringBuilder();
-      for (Iterator i = qnames.iterator(); i.hasNext();)
-      {
-         QName qname = (QName)i.next();
          qnameList.append(qname.toString());
          if (i.hasNext())
          {
             qnameList.append(QNAME_SEPARATOR);
          }
       }
-
-      page.setDeclaredProperty(propName, qnameList.toString());
+      return qnameList.toString();
    }
 
    public void removeAliasBinding(AliasBindingInfo aliasInfo) throws IllegalCoordinationException
@@ -728,13 +734,7 @@
       String qNameList = page.getDeclaredProperty(nameProp);
       if (qNameList != null)
       {
-         String[] qnames = qNameList.split(QNAME_SEPARATOR);
-         Set<QName> names = new HashSet<QName>(qnames.length);
-         for (String string : qnames)
-         {
-            QName qname = QName.valueOf(string);
-            names.add(qname);
-         }
+         Set<QName> names = extractQNames(qNameList);
          return new AliasInfoPOJO(name, page, names);
       }
       else
@@ -743,6 +743,18 @@
       }
    }
 
+   private Set<QName> extractQNames(String qNameList)
+   {
+      String[] qnames = qNameList.split(QNAME_SEPARATOR);
+      Set<QName> names = new HashSet<QName>(qnames.length);
+      for (String string : qnames)
+      {
+         QName qname = QName.valueOf(string);
+         names.add(qname);
+      }
+      return names;
+   }
+
    public Collection<? extends WindowBindingInfo> getWindowBindings(Page page, QName parameterName)
    {
       ParameterValidation.throwIllegalArgExceptionIfNull(page, "Page");
@@ -752,7 +764,7 @@
       Collection<WindowBindingInfo> infos = new HashSet<WindowBindingInfo>();
       for (WindowBindingInfo pageParam : pageParams)
       {
-         if (pageParam.getWindows().containsValue(parameterName))
+         if (pageParam.getMappings().containsValue(parameterName))
          {
             infos.add(pageParam);
          }
@@ -766,7 +778,7 @@
       Collection<WindowBindingInfo> infos = new HashSet<WindowBindingInfo>();
       for (WindowBindingInfo pageParam : pageParams)
       {
-         if (pageParam.getWindows().keySet().contains(window))
+         if (pageParam.getMappings().keySet().contains(window))
          {
             infos.add(pageParam);
          }
@@ -806,7 +818,7 @@
                //TODO: if the information from properties is not consistent should we throw exception?
                if (binding != null)
                {
-                  QName qname = decodeQName(binding);
+                  QName qname = QName.valueOf(binding);
                   if (qname != null)
                   {
                      info.addMapping((Window)child, qname);
@@ -912,12 +924,7 @@
       return null;
    }
 
-   private QName decodeQName(String fullString)
-   {
-      return QName.valueOf(fullString);
-   }
 
-
    private class EventInfoPOJO implements EventWiringInfo
    {
       private final String name;
@@ -967,19 +974,19 @@
    private class WindowInfoPOJO implements WindowBindingInfo
    {
       private final String name;
-      private final Map<Window, QName> windows;
+      private Map<Window, Set<QName>> mappings;
       private final Page page;
 
-      private WindowInfoPOJO(String name, Page page, Map<Window, QName> windows)
+      private WindowInfoPOJO(String name, Page page, Map<Window, Set<QName>> mappings)
       {
          this.name = name;
-         this.windows = windows;
+         this.mappings = mappings;
          this.page = page;
       }
 
       private WindowInfoPOJO(String name, Page page)
       {
-         this(name, page, new HashMap<Window, QName>());
+         this(name, page, new HashMap<Window, Set<QName>>());
       }
 
       public String getName()
@@ -987,9 +994,9 @@
          return name;
       }
 
-      public Map<Window, QName> getWindows()
+      public Map<Window, Set<QName>> getMappings()
       {
-         return Collections.unmodifiableMap(windows);
+         return Collections.unmodifiableMap(mappings);
       }
 
       public Page getPage()
@@ -999,7 +1006,7 @@
 
       private void addMapping(Window window, QName qname)
       {
-         windows.put(window, qname);
+         mappings = Utils.addToMultiMap(mappings, window, qname);
       }
    }
 

Modified: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationAliasBindingMetaData.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationAliasBindingMetaData.java	2008-09-08 14:31:05 UTC (rev 11833)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationAliasBindingMetaData.java	2008-09-08 21:45:10 UTC (rev 11834)
@@ -25,6 +25,7 @@
 import org.w3c.dom.Element;
 import org.jboss.portal.common.xml.XMLTools;
 
+import javax.xml.namespace.QName;
 import java.util.List;
 import java.util.LinkedList;
 import java.util.Iterator;
@@ -39,19 +40,19 @@
 {
    private String name;
 
-   private Set<String> qnames = new HashSet<String>();
+   private Set<QName> qnames = new HashSet<QName>();
 
-   public CoordinationAliasBindingMetaData(String name)
+   private CoordinationAliasBindingMetaData(String name)
    {
       this.name = name;
    }
 
-   public Set<String> getQnames()
+   public Set<QName> getQnames()
    {
       return qnames;
    }
 
-   public void setQnames(Set<String> qnames)
+   public void setQnames(Set<QName> qnames)
    {
       this.qnames = qnames;
    }
@@ -66,9 +67,9 @@
       this.name = name;
    }
 
-   public void addQName(String qname)
+   private void addQName(String qname)
    {
-      qnames.add(qname);
+      qnames.add(QName.valueOf(qname));
    }
 
    public static CoordinationAliasBindingMetaData buildMetaData(Element bindingElement)

Modified: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationEventWiringMetaData.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationEventWiringMetaData.java	2008-09-08 14:31:05 UTC (rev 11833)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationEventWiringMetaData.java	2008-09-08 21:45:10 UTC (rev 11834)
@@ -39,9 +39,9 @@
 
    private String name;
 
-   private List<CoordinationWindowMetaData> sources = new LinkedList<CoordinationWindowMetaData>();
+   private List<CoordinationWindowSimpleQNameMetaData> sources = new LinkedList<CoordinationWindowSimpleQNameMetaData>();
 
-   private List<CoordinationWindowMetaData> destinations = new LinkedList<CoordinationWindowMetaData>();
+   private List<CoordinationWindowSimpleQNameMetaData> destinations = new LinkedList<CoordinationWindowSimpleQNameMetaData>();
 
    public CoordinationEventWiringMetaData(String name)
    {
@@ -58,33 +58,23 @@
       this.name = name;
    }
 
-   public List<CoordinationWindowMetaData> getSources()
+   public List<CoordinationWindowSimpleQNameMetaData> getSources()
    {
       return sources;
    }
 
-   public void setSources(List<CoordinationWindowMetaData> sources)
+   private void addSource(CoordinationWindowSimpleQNameMetaData window)
    {
-      this.sources = sources;
-   }
-
-   public void addSource(CoordinationWindowMetaData window)
-   {
       this.sources.add(window);
    }
 
-   public List<CoordinationWindowMetaData> getDestinations()
+   public List<CoordinationWindowSimpleQNameMetaData> getDestinations()
    {
       return destinations;
    }
 
-   public void setDestinations(List<CoordinationWindowMetaData> destinations)
+   private void addDestination(CoordinationWindowSimpleQNameMetaData window)
    {
-      this.destinations = destinations;
-   }
-
-   public void addDestination(CoordinationWindowMetaData window)
-   {
       this.destinations.add(window);
    }
 
@@ -102,7 +92,7 @@
       {
          Element element = (Element)windowIter.next();
 
-         wiringMD.addSource(CoordinationWindowMetaData.buildMetaData(element));
+         wiringMD.addSource(CoordinationWindowSimpleQNameMetaData.buildMetaData(element));
       }
 
       Element destinationsElt = XMLTools.getUniqueChild(wiringElement, "destinations", true);
@@ -113,7 +103,7 @@
       {
          Element element = (Element)windowIter.next();
 
-         wiringMD.addDestination(CoordinationWindowMetaData.buildMetaData(element));
+         wiringMD.addDestination(CoordinationWindowSimpleQNameMetaData.buildMetaData(element));
       }
 
       return wiringMD;

Modified: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationMetaData.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationMetaData.java	2008-09-08 14:31:05 UTC (rev 11833)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationMetaData.java	2008-09-08 21:45:10 UTC (rev 11834)
@@ -38,7 +38,6 @@
 import java.util.Map;
 import java.util.HashMap;
 import java.util.Set;
-import java.util.HashSet;
 
 /**
  * @author <a href="mailto:boleslaw dot dawidowicz at redhat anotherdot com">Boleslaw Dawidowicz</a>
@@ -81,7 +80,6 @@
       }
 
 
-
       Element bindingsElement = XMLTools.getUniqueChild(coordinationElt, "bindings", false);
 
       if (bindingsElement != null)
@@ -153,29 +151,34 @@
 
          for (CoordinationWindowBindingMetaData windowBinding : windowBindings)
          {
-            Map<Window, QName> bindings = new HashMap<Window, QName>();
+            Map<Window, Set<QName>> bindings = new HashMap<Window, Set<QName>>();
 
-            populateWindows(bindings, windowBinding.getWindows(), page);
+            for (CoordinationWindowMultiQNameMetaData windowMD : windowBinding.getWindows())
+            {
+               String windowName = windowMD.getWindowName();
+               Window window = page.getWindow(windowName);
 
+               if (window == null)
+               {
+                  throw new IllegalCoordinationException("Cannot obtain window: \"" + windowName + "\" on page: "
+                          + page.getName());
+               }
+
+               bindings.put(window, windowMD.getNames());
+            }
+
             buildContext.getCoordinationConfigurator().setWindowBinding(windowBinding.getName(), bindings);
          }
 
          for (CoordinationAliasBindingMetaData windowBinding : aliasBindings)
          {
-            Set<QName> qnames = new HashSet<QName>();
-
-            for (String name : windowBinding.getQnames())
-            {
-               qnames.add(QName.valueOf(name));
-            }
-
-            buildContext.getCoordinationConfigurator().setAliasBinding(page, windowBinding.getName(), qnames);
+            buildContext.getCoordinationConfigurator().setAliasBinding(page, windowBinding.getName(), windowBinding.getQnames());
          }
 
          for (CoordinationEventWiringMetaData wiring : wirings)
          {
-            Map<Window, QName> sources = new HashMap<Window,QName>();
-            Map<Window, QName> destinations = new HashMap<Window,QName>();
+            Map<Window, QName> sources = new HashMap<Window, QName>();
+            Map<Window, QName> destinations = new HashMap<Window, QName>();
 
             populateWindows(sources, wiring.getSources(), page);
             populateWindows(destinations, wiring.getDestinations(), page);
@@ -188,17 +191,17 @@
 
    }
 
-   private static void populateWindows(Map<Window, QName> map, List<CoordinationWindowMetaData> windows, Page page) throws IllegalCoordinationException
+   private static void populateWindows(Map<Window, QName> map, List<CoordinationWindowSimpleQNameMetaData> windows, Page page) throws IllegalCoordinationException
    {
-      for (CoordinationWindowMetaData windowMD : windows)
+      for (CoordinationWindowSimpleQNameMetaData windowMD : windows)
       {
-         QName name = QName.valueOf(windowMD.getQname());
+         QName name = windowMD.getQname();
          Window window = page.getWindow(windowMD.getWindowName());
 
          if (window == null)
          {
             throw new IllegalCoordinationException("Cannot obtain window: \"" + windowMD.getWindowName() + "\" on page: "
-               + page.getName());
+                    + page.getName());
          }
 
          map.put(window, name);

Modified: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowBindingMetaData.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowBindingMetaData.java	2008-09-08 14:31:05 UTC (rev 11833)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowBindingMetaData.java	2008-09-08 21:45:10 UTC (rev 11834)
@@ -37,23 +37,18 @@
 {
    private String name;
 
-   List<CoordinationWindowMetaData> windows = new LinkedList<CoordinationWindowMetaData>();
+   List<CoordinationWindowMultiQNameMetaData> windows = new LinkedList<CoordinationWindowMultiQNameMetaData>();
 
    public CoordinationWindowBindingMetaData(String name)
    {
       this.name = name;
    }
 
-   public List<CoordinationWindowMetaData> getWindows()
+   public List<CoordinationWindowMultiQNameMetaData> getWindows()
    {
       return windows;
    }
 
-   public void setWindows(List<CoordinationWindowMetaData> windows)
-   {
-      this.windows = windows;
-   }
-
    public String getName()
    {
       return name;
@@ -64,7 +59,7 @@
       this.name = name;
    }
 
-   public void addWindow(CoordinationWindowMetaData window)
+   private void addWindow(CoordinationWindowMultiQNameMetaData window)
    {
       windows.add(window);
    }
@@ -80,7 +75,7 @@
       {
          Element element = (Element)windowIter.next();
 
-         paramMetaData.addWindow(CoordinationWindowMetaData.buildMetaData(element));
+         paramMetaData.addWindow(CoordinationWindowMultiQNameMetaData.buildMetaData(element));
       }
 
       return paramMetaData;

Modified: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowMetaData.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowMetaData.java	2008-09-08 14:31:05 UTC (rev 11833)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowMetaData.java	2008-09-08 21:45:10 UTC (rev 11834)
@@ -31,17 +31,13 @@
  * @author <a href="mailto:boleslaw dot dawidowicz at redhat anotherdot com">Boleslaw Dawidowicz</a>
  * @version : 0.1 $
  */
-public class CoordinationWindowMetaData
+public abstract class CoordinationWindowMetaData
 {
-
    private String windowName;
 
-   private String qname;
-
-   public CoordinationWindowMetaData(String windowName, String qname)
+   protected CoordinationWindowMetaData(String windowName)
    {
       this.windowName = windowName;
-      this.qname = qname;
    }
 
    public String getWindowName()
@@ -54,21 +50,4 @@
       this.windowName = windowName;
    }
 
-   public String getQname()
-   {
-      return qname;
-   }
-
-   public void setQname(String qname)
-   {
-      this.qname = qname;
-   }
-
-   public static CoordinationWindowMetaData buildMetaData(Element element)
-   {
-      Element name = XMLTools.getUniqueChild(element, "window-name", true);
-      Element qname = XMLTools.getUniqueChild(element, "qname", true);
-
-      return new CoordinationWindowMetaData(XMLTools.asString(name), XMLTools.asString(qname));
-   }
 }
\ No newline at end of file

Added: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowMultiQNameMetaData.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowMultiQNameMetaData.java	                        (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowMultiQNameMetaData.java	2008-09-08 21:45:10 UTC (rev 11834)
@@ -0,0 +1,72 @@
+/*
+* JBoss, a division of Red Hat
+* Copyright 2008, Red Hat Middleware, LLC, and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+
+package org.jboss.portal.core.model.portal.metadata.coordination;
+
+import org.jboss.portal.common.xml.XMLTools;
+import org.w3c.dom.Element;
+
+import javax.xml.namespace.QName;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.HashSet;
+
+/**
+ * @author <a href="mailto:chris.laprun at jboss.com">Chris Laprun</a>
+ * @version $Revision$
+ */
+public class CoordinationWindowMultiQNameMetaData extends CoordinationWindowMetaData
+{
+   private Set<QName> names = new HashSet<QName>();
+
+   private CoordinationWindowMultiQNameMetaData(String name)
+   {
+      super(name);
+   }
+
+   public Set<QName> getNames()
+   {
+      return names;
+   }
+
+   private void addQName(String qname)
+   {
+      names.add(QName.valueOf(qname));
+   }
+
+   public static CoordinationWindowMultiQNameMetaData buildMetaData(Element element)
+   {
+      Element name = XMLTools.getUniqueChild(element, "window-name", true);
+      CoordinationWindowMultiQNameMetaData metaData = new CoordinationWindowMultiQNameMetaData(XMLTools.asString(name));
+
+      Iterator qnameIter = XMLTools.getChildrenIterator(element, "qname");
+
+      while (qnameIter.hasNext())
+      {
+         Element qName = (Element)qnameIter.next();
+
+         metaData.addQName(XMLTools.asString(qName));
+      }
+
+      return metaData;
+   }
+}

Added: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowSimpleQNameMetaData.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowSimpleQNameMetaData.java	                        (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/core/model/portal/metadata/coordination/CoordinationWindowSimpleQNameMetaData.java	2008-09-08 21:45:10 UTC (rev 11834)
@@ -0,0 +1,61 @@
+/*
+* JBoss, a division of Red Hat
+* Copyright 2008, Red Hat Middleware, LLC, and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+
+package org.jboss.portal.core.model.portal.metadata.coordination;
+
+import org.w3c.dom.Element;
+import org.jboss.portal.common.xml.XMLTools;
+
+import javax.xml.namespace.QName;
+
+/**
+ * @author <a href="mailto:chris.laprun at jboss.com">Chris Laprun</a>
+ * @version $Revision$
+ */
+public class CoordinationWindowSimpleQNameMetaData extends CoordinationWindowMetaData
+{
+   private QName qname;
+
+   private CoordinationWindowSimpleQNameMetaData(String windowName, QName qname)
+   {
+      super(windowName);
+      this.qname = qname;
+   }
+
+   public QName getQname()
+   {
+      return qname;
+   }
+
+   public void setQname(QName qname)
+   {
+      this.qname = qname;
+   }
+
+   public static CoordinationWindowSimpleQNameMetaData buildMetaData(Element element)
+   {
+      Element name = XMLTools.getUniqueChild(element, "window-name", true);
+      Element qname = XMLTools.getUniqueChild(element, "qname", true);
+
+      return new CoordinationWindowSimpleQNameMetaData(XMLTools.asString(name), QName.valueOf(XMLTools.asString(qname)));
+   }
+}

Modified: branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/test/core/model/portal/coordination/CoordinationServiceTestCase.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/test/core/model/portal/coordination/CoordinationServiceTestCase.java	2008-09-08 14:31:05 UTC (rev 11833)
+++ branches/JBoss_Portal_Branch_2_7/core/src/main/org/jboss/portal/test/core/model/portal/coordination/CoordinationServiceTestCase.java	2008-09-08 21:45:10 UTC (rev 11834)
@@ -49,6 +49,7 @@
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.Collections;
 
 /**
  * @author <a href="mailto:boleslaw dot dawidowicz at redhat anotherdot com">Boleslaw Dawidowicz</a>
@@ -271,10 +272,10 @@
       Window w4 = page1.getWindow("Window_4");
 
 
-      Map<Window, QName> ws = new HashMap<Window, QName>();
-      ws.put(w1, new QName("juju", "foo"));
-      ws.put(w2, new QName("juju", "foo1"));
-      ws.put(w4, new QName("juju", "foo3"));
+      Map<Window, Set<QName>> ws = new HashMap<Window, Set<QName>>();
+      ws.put(w1, Collections.singleton(new QName("juju", "foo")));
+      ws.put(w2, Collections.singleton(new QName("juju", "foo1")));
+      ws.put(w4, Collections.singleton(new QName("juju", "foo3")));
 
       cos.setWindowBinding("binding1", ws);
 
@@ -282,13 +283,13 @@
 
       assertEquals(1, bindings.size());
 
-      Map<Window, QName> windows = bindings.iterator().next().getWindows();
+      Map<Window, Set<QName>> mappings = bindings.iterator().next().getMappings();
 
-      assertEquals(3, windows.size());
+      assertEquals(3, mappings.size());
 
-      assertTrue(windows.containsKey(w1));
-      assertTrue(windows.containsKey(w2));
-      assertTrue(windows.containsKey(w4));
+      assertTrue(mappings.containsKey(w1));
+      assertTrue(mappings.containsKey(w2));
+      assertTrue(mappings.containsKey(w4));
 
       cos.removeWindowBinding(bindings.iterator().next());
 
@@ -311,39 +312,39 @@
       Window w4 = page1.getWindow("Window_4");
 
 
-      Map<Window, QName> ws = new HashMap<Window, QName>();
+      Map<Window, Set<QName>> ws = new HashMap<Window, Set<QName>>();
       QName qName11 = new QName("ns1", "1");
       QName qName12 = new QName("ns1", "2");
-      ws.put(w1, qName11);
-      ws.put(w2, qName12);
+      ws.put(w1, Collections.singleton(qName11));
+      ws.put(w2, Collections.singleton(qName12));
       cos.setWindowBinding("binding1", ws);
 
       QName qName21 = new QName("ns2", "foo3");
       ws.clear();
-      ws.put(w4, qName21);
+      ws.put(w4, Collections.singleton(qName21));
       cos.setWindowBinding("binding2", ws);
 
       WindowBindingInfo info = cos.getWindowBinding(page1, "binding1");
       assertNotNull(info);
       assertEquals("binding1", info.getName());
       assertEquals(page1, info.getPage());
-      Map<Window, QName> windows = info.getWindows();
+      Map<Window, Set<QName>> windows = info.getMappings();
       assertNotNull(windows);
       assertEquals(2, windows.size());
       assertTrue(windows.containsKey(w1));
       assertTrue(windows.containsKey(w2));
-      assertEquals(qName11, windows.get(w1));
-      assertEquals(qName12, windows.get(w2));
+      assertEquals(Collections.singleton(qName11), windows.get(w1));
+      assertEquals(Collections.singleton(qName12), windows.get(w2));
 
       info = cos.getWindowBinding(page1, "binding2");
       assertNotNull(info);
       assertEquals("binding2", info.getName());
       assertEquals(page1, info.getPage());
-      windows = info.getWindows();
+      windows = info.getMappings();
       assertNotNull(windows);
       assertEquals(1, windows.size());
       assertTrue(windows.containsKey(w4));
-      assertEquals(qName21, windows.get(w4));
+      assertEquals(Collections.singleton(qName21), windows.get(w4));
 
       TransactionAssert.commitTransaction();
    }
@@ -358,16 +359,16 @@
       Window w2 = page1.getWindow("Window_2");
       Window w4 = page1.getWindow("Window_4");
 
-      Map<Window, QName> ws = new HashMap<Window, QName>();
+      Map<Window, Set<QName>> ws = new HashMap<Window, Set<QName>>();
       QName qName11 = new QName("ns1", "1");
       QName qName12 = new QName("ns1", "2");
-      ws.put(w1, qName11);
-      ws.put(w2, qName12);
+      ws.put(w1, Collections.singleton(qName11));
+      ws.put(w2, Collections.singleton(qName12));
       cos.setWindowBinding("binding1", ws);
 
       QName qName21 = new QName("ns2", "foo3");
       ws.clear();
-      ws.put(w4, qName21);
+      ws.put(w4, Collections.singleton(qName21));
       cos.setWindowBinding("binding2", ws);
 
       Collection<? extends WindowBindingInfo> infos = cos.getWindowBindings(page1);
@@ -732,9 +733,9 @@
       Window w1 = page1.getWindow("Window_1");
       Window w2 = page1.getWindow("Window_2");
 
-      Map<Window, QName> ws = new HashMap<Window, QName>();
-      ws.put(w1, new QName("juju", "foo"));
-      ws.put(w2, new QName("juju", "foo1"));
+      Map<Window, Set<QName>> ws = new HashMap<Window, Set<QName>>();
+      ws.put(w1, Collections.singleton(new QName("juju", "foo")));
+      ws.put(w2, Collections.singleton(new QName("juju", "foo1")));
 
       cos.setWindowBinding("binding1", ws);
 

Modified: branches/JBoss_Portal_Branch_2_7/core-admin/src/main/org/jboss/portal/core/admin/ui/coordination/ParameterBindingManagerBean.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-admin/src/main/org/jboss/portal/core/admin/ui/coordination/ParameterBindingManagerBean.java	2008-09-08 14:31:05 UTC (rev 11833)
+++ branches/JBoss_Portal_Branch_2_7/core-admin/src/main/org/jboss/portal/core/admin/ui/coordination/ParameterBindingManagerBean.java	2008-09-08 21:45:10 UTC (rev 11834)
@@ -24,6 +24,7 @@
 
 import org.jboss.portal.core.controller.coordination.IllegalCoordinationException;
 import org.jboss.portal.core.controller.coordination.WindowBindingInfo;
+import org.jboss.portal.core.controller.coordination.Utils;
 import org.jboss.portal.core.model.portal.Page;
 import org.jboss.portal.core.model.portal.PortalObject;
 import org.jboss.portal.core.model.portal.Window;
@@ -155,14 +156,14 @@
    {
       if (windowBindingName != null)
       {
-         Map<Window, QName> windowBinding = new HashMap<Window, QName>();
+         Map<Window, Set<QName>> windowBinding = new HashMap<Window, Set<QName>>();
          for (String pairAsString : selectedParameterWindowPairs)
          {
             // get ParameterWindowPair from String
             String[] names = ParameterWindowPair.resolveFrom(pairAsString);
 
             Window window = (Window)managerBean.getSelectedPage().getChild(names[ParameterWindowPair.WINDOW_NAME]);
-            windowBinding.put(window, QName.valueOf(names[ParameterWindowPair.PARAM_NAME]));
+            Utils.addToMultiMap(windowBinding, window, QName.valueOf(names[ParameterWindowPair.PARAM_NAME]));
          }
 
          managerBean.getCoordinationService().setWindowBinding(windowBindingName, windowBinding);
@@ -212,11 +213,15 @@
       public DisplayParameterBinding(WindowBindingInfo bindingInfo)
       {
          this.bindingInfo = bindingInfo;
-         Set<Map.Entry<Window, QName>> entries = bindingInfo.getWindows().entrySet();
+         Set<Map.Entry<Window, Set<QName>>> entries = bindingInfo.getMappings().entrySet();
          parameterWindowPairs = new LinkedList<ParameterWindowPair>();
-         for (Map.Entry<Window, QName> entry : entries)
+         for (Map.Entry<Window, Set<QName>> entry : entries)
          {
-            parameterWindowPairs.add(new ParameterWindowPair(entry.getValue(), entry.getKey()));
+            Window window = entry.getKey();
+            for (QName qName : entry.getValue())
+            {
+               parameterWindowPairs.add(new ParameterWindowPair(qName, window));
+            }
          }
       }
 

Modified: branches/JBoss_Portal_Branch_2_7/core-admin/src/resources/portal-admin-war/WEB-INF/classes/Resource.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-admin/src/resources/portal-admin-war/WEB-INF/classes/Resource.properties	2008-09-08 14:31:05 UTC (rev 11833)
+++ branches/JBoss_Portal_Branch_2_7/core-admin/src/resources/portal-admin-war/WEB-INF/classes/Resource.properties	2008-09-08 21:45:10 UTC (rev 11834)
@@ -274,7 +274,7 @@
 COORDINATION_PARAMETER_MANAGE_EXISTING=Manage existing parameter bindings:
 COORDINATION_PARAMETER_EXISTING_NONE=No existing parameter bindings.
 COORDINATION_PARAMETER_EXISTING_NAME=Name
-COORDINATION_PARAMETER_EXISTING_PAIRS=Parameter <-> window pairs
+COORDINATION_PARAMETER_EXISTING_PAIRS=Window <-> parameter pairs
 COORDINATION_PARAMETER_EXISTING_ACTIONS=Actions
 COORDINATION_PARAMETER_CREATE=Create new parameter binding:
 COORDINATION_PARAMETER_CREATE_NO_PAIRS=No available public render parameters. Cannot create new parameter bindings.




More information about the portal-commits mailing list