You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2009/02/12 09:02:19 UTC

svn commit: r743646 [1/2] - in /portals/jetspeed-2/portal/trunk: components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/ components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/ components/jetspeed-portal/src/ma...

Author: taylor
Date: Thu Feb 12 08:02:18 2009
New Revision: 743646

URL: http://svn.apache.org/viewvc?rev=743646&view=rev
Log:
https://issues.apache.org/jira/browse/JS2-927
* prerequisite to events: persisting all Portlet 2.0 objects including event defs, published/processed event refs, render params, qnames, aliases container runtime options (still to implement: filters, filter mappings, listeners)
* first implementation of events: this is currently under construction: need to complete marshalling of non-string events
* portlet definition cloning support started (in progress)

Added:
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventList.java   (with props)
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/ContainerRuntimeOptionValueImpl.java   (with props)
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletQNameImpl.java   (with props)
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SupportedPublicRenderParameterImpl.java   (with props)
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/ContainerRuntimeOptionValue.java   (with props)
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletQName.java   (with props)
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/SupportedPublicRenderParameter.java   (with props)
Modified:
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/JetspeedPortletContainerWrapper.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventProviderImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/services/JetspeedPortalCallbackServices.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/JETSPEED-INF/ojb/registry_repository.xml
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/PersistenceBrokerPortletRegistry.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/ContainerRuntimeOptionImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/DescriptionImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/EventDefinitionImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/EventDefinitionReferenceImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/GenericMetadataImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletApplicationDefinitionImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletDefinitionImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PublicRenderParameterImpl.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/AbstractRegistryTest.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/TestPortletRegistryDAO.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/direct/TestRegistryDirectAll.java
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/components/portletregistry/PortletRegistry.java
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/GenericMetadata.java
    portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/container/JetspeedContainerServlet.java
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/registry-schema.xml
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/pluto-services.xml

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/JetspeedPortletContainerWrapper.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/JetspeedPortletContainerWrapper.java?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/JetspeedPortletContainerWrapper.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/JetspeedPortletContainerWrapper.java Thu Feb 12 08:02:18 2009
@@ -27,6 +27,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.jetspeed.engine.servlet.ServletRequestFactory;
 import org.apache.jetspeed.engine.servlet.ServletResponseFactory;
+import org.apache.pluto.EventContainer;
 import org.apache.pluto.OptionalContainerServices;
 import org.apache.pluto.PortletContainer;
 import org.apache.pluto.PortletContainerException;
@@ -163,8 +164,7 @@
             HttpServletResponse response, PortletWindow window, Event event)
             throws PortletException, IOException, PortletContainerException
     {
-        // TODO Auto-generated method stub
-        
+        ((EventContainer)pluto).fireEvent(request, response, window, event);
     }
     
 

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventList.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventList.java?rev=743646&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventList.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventList.java Thu Feb 12 08:02:18 2009
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.container.providers;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.portlet.Event;
+
+/**
+ * The Class EventList.
+ * Stores events in a list.
+ */
+public class EventList 
+{    
+    /** The events. */
+    private Map<Event,Boolean> events = new HashMap<Event, Boolean>();
+    
+    /**
+     * Adds an event.
+     * 
+     * @param event the event
+     * @param eventNumber the event number
+     */
+    public void addEvent(Event event)
+    {
+        events.put(event, new Boolean(true));
+    }
+
+    /**
+     * Gets the events.
+     * 
+     * @return the events
+     */
+    public List<Event> getEvents() 
+    {
+        List<Event> list = new ArrayList<Event>();
+        for (Event event : events.keySet()) 
+        {
+            list.add(event);
+        }
+        return list;
+    }
+
+    /**
+     * Checks if the event is not processed.
+     * 
+     * @param event the event
+     * 
+     * @return true, if is not processed
+     */
+    public boolean isNotProcessed(Event event) 
+    {
+        return events.get(event).booleanValue();
+    }
+
+    /**
+     * Checks for more events.
+     * 
+     * @return true, if has more events
+     */
+    public boolean hasMoreEvents() 
+    {
+        Collection<Boolean> attr = this.events.values();
+        for (Boolean attribute : attr) 
+        {
+            if (attribute.booleanValue())
+                return true;
+        }
+        return false;
+    }
+
+    /**
+     * Sets the processed.
+     * 
+     * @param event the processed
+     */
+    public void setProcessed(Event event) 
+    {
+        events.remove(event);
+        Boolean attr = new Boolean(false);
+        events.put(event, attr);
+    }
+    
+    /**
+     * Gets the event.
+     * 
+     * @param eventName the event name
+     * @param eventNumber the event number
+     * 
+     * @return the event
+     */
+    public Event getEvent(String eventName)
+    {
+        for (Event event : getEvents()) 
+        {
+            if ((event.getName() != null) && (event.getName().toString().equals(eventName)))
+                return event;
+        }
+        return null;
+    }
+    
+    /**
+     * Gets the size.
+     * 
+     * @return the size
+     */
+    public int getSize() 
+    {
+        return events.size();
+    }
+
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventList.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventList.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventProviderImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventProviderImpl.java?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventProviderImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/providers/EventProviderImpl.java Thu Feb 12 08:02:18 2009
@@ -17,33 +17,334 @@
 package org.apache.jetspeed.container.providers;
 
 import java.io.Serializable;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
 
+import javax.portlet.Event;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
 import javax.xml.namespace.QName;
+import javax.xml.stream.FactoryConfigurationError;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.PortalReservedParameters;
+import org.apache.jetspeed.aggregator.PortletAccessDeniedException;
+import org.apache.jetspeed.components.portletentity.PortletEntityNotStoredException;
+import org.apache.jetspeed.container.window.FailedToRetrievePortletWindow;
+import org.apache.jetspeed.container.window.PortletWindowAccessor;
+import org.apache.jetspeed.om.page.Fragment;
+import org.apache.jetspeed.om.portlet.PortletDefinition;
+import org.apache.jetspeed.om.window.impl.PortletWindowImpl;
+import org.apache.jetspeed.request.RequestContext;
+import org.apache.pluto.Constants;
 import org.apache.pluto.EventContainer;
+import org.apache.pluto.PortletWindow;
+import org.apache.pluto.internal.impl.EventImpl;
+import org.apache.pluto.om.portlet.EventDefinition;
+import org.apache.pluto.om.portlet.EventDefinitionReference;
+import org.apache.pluto.om.portlet.PortletApplicationDefinition;
 import org.apache.pluto.spi.EventProvider;
 
 /**
- * TODO: 2.2 implement 
- * 
  * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
  * @version $Id: $
  */
 public class EventProviderImpl implements EventProvider, Cloneable
 {
+    private static Log log = LogFactory.getLog(EventProviderImpl.class);
+    private final PortletWindow portletWindow;
+    private EventList savedEvents = new EventList();
+    private final RequestContext rc;
+    private final PortletWindowAccessor windowAccessor;
+    
     public EventProviderImpl()
-    {}
+    {
+        windowAccessor = null;
+        rc = null;
+        portletWindow = null;
+    }
+
+    public EventProviderImpl(final RequestContext rc, final PortletWindow window, final PortletWindowAccessor windowAccessor)
+    {
+        this.portletWindow = window;
+        this.rc = rc;
+        this.windowAccessor = windowAccessor;
+    }
+        
+    public void registerToFireEvent(QName qname, Serializable value)
+            throws IllegalArgumentException
+    {
+        System.out.println("registering to fire events");
+        if (isDeclaredAsPublishingEvent(qname)) 
+        {
+            if (value != null && !isValueInstanceOfDefinedClass(qname, value))
+            {
+                throw new IllegalArgumentException("Payload has not the right class");
+            }
+            try 
+            {
+                if (value == null) 
+                {
+                    savedEvents.addEvent(new EventImpl(qname, value));
+                } 
+                else if (!(value instanceof Serializable)) 
+                {
+                    throw new IllegalArgumentException(
+                            "Object payload must implement Serializable");
+                } 
+                else 
+                {
+                    Writer out = new StringWriter();
+                    Class clazz = value.getClass();
+                    ClassLoader cl = Thread.currentThread().getContextClassLoader();
+                    try
+                    {
+                        Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+                        JAXBContext jc = JAXBContext.newInstance(clazz);
+                        Marshaller marshaller = jc.createMarshaller();
+                        JAXBElement<Serializable> element = new JAXBElement<Serializable>(
+                                qname, clazz, value);
+                        marshaller.marshal(element, out);
+                        // marshaller.marshal(value, out);
+                    }
+                    finally
+                    {
+                        Thread.currentThread().setContextClassLoader(cl);
+                    }
+                    if (out != null) 
+                    {
+                        savedEvents.addEvent(new EventImpl(qname,
+                                (Serializable) out.toString()));
+                    } 
+                    else 
+                    {
+                        savedEvents.addEvent(new EventImpl(qname, value));
+                    }
+                }
+            } catch (JAXBException e) 
+            {
+                // maybe there is no valid jaxb binding
+                // TODO wsrp:eventHandlingFailed
+                log.error("Event handling failed", e);
+            } 
+            catch (FactoryConfigurationError e) 
+            {
+                log.warn(e);
+            }
+        }
+    }
+    
+    public static final int MAX_EVENTS_SIZE = 10; // TODO
     
     public void fireEvents(EventContainer eventContainer)
     {
-        //throw new UnsupportedOperationException();
-        // TODO: 2.2 implement 
+        System.out.println("firing events");
+
+        while (savedEvents.hasMoreEvents()
+                && savedEvents.getSize() < MAX_EVENTS_SIZE) 
+        {
+            Event event = getArbitraryEvent();
+            this.savedEvents.setProcessed(event);
+            
+            List<PortletWindow> windows = getAllPortletsRegisteredForEvent(event);
+
+            // iterate all portlets in the portal
+            for (PortletWindow window : windows) 
+            {
+                
+                HttpServletRequest request = rc.getRequestForWindow((org.apache.jetspeed.container.PortletWindow)window);
+                //this.request.setAttribute(PortalReservedParameters.FRAGMENT_ATTRIBUTE, fragment);
+                request.setAttribute(PortalReservedParameters.PAGE_ATTRIBUTE, rc.getPage());
+                request.setAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE, rc);
+                request.setAttribute(PortalReservedParameters.REQUEST_CONTEXT_OBJECTS, rc.getObjects());    
+                try
+                {
+                    eventContainer.fireEvent(request, 
+                          rc.getResponseForWindow((org.apache.jetspeed.container.PortletWindow)window), window, event);
+                }
+                catch (Exception e)
+                {
+                    // TODO: handle
+                    e.printStackTrace();
+                }
+                    
+// TODO: threading                
+//                PortletWindow window = new PortletWindowImpl(container, config, portalURL);
+//                if (portletNames != null) {
+//                    for (String portlet : portletNames) {
+//                        if (portlet.equals(config.getId())) {
+//
+//                            // the thread now is a new one, with possible
+//                            // waiting,
+//                            // for the old to exit
+//                            
+//
+//                            PortletWindowThread portletWindowThread = getPortletWindowThread(
+//                                    eventContainer, config, window, containerServletContext);
+//
+//                            // is this event
+//                            portletWindowThread.addEvent(eActual);
+//
+//                            portletWindowThread.start();
+//                        }
+//                    }
+                }
+            }
+//            waitForEventExecution();
+//            try {
+//                Thread.sleep(WAITING_CYCLE);
+//            } catch (InterruptedException e) {
+//                LOG.warn(e);
+//            }
+        
+//        waitForEventExecution();        
+    }
+    
+    private boolean isDeclaredAsPublishingEvent(QName qname) 
+    {
+        PortletDefinition pd = (PortletDefinition)this.portletWindow.getPortletEntity().getPortletDefinition();         
+        List<? extends EventDefinitionReference> events = pd.getSupportedPublishingEvents();
+        if (events != null) 
+        {
+            String defaultNamespace = pd.getApplication().getDefaultNamespace();
+            for (EventDefinitionReference ref : events) 
+            {
+                QName name = ref.getQualifiedName(defaultNamespace);
+                if (name == null)
+                {
+                    continue;
+                }
+                if (qname.equals(name)) 
+                {
+                    return true;
+                }
+            }
+        }
+        return false;
     }
 
-    public void registerToFireEvent(QName name, Serializable value)
-            throws IllegalArgumentException
+    private boolean isValueInstanceOfDefinedClass(QName qname, Serializable value) 
+    {
+        PortletApplicationDefinition app = portletWindow.getPortletEntity().getPortletDefinition().getApplication();
+        List<? extends EventDefinition> events = app.getEventDefinitions();
+        if (events != null) 
+        {
+            for (EventDefinition def : events)
+            {
+                if (def.getQName() != null)
+                {
+                    if (def.getQName().equals(qname))
+                    {
+                        return value.getClass().getName().equals(def.getValueType());
+                    }
+                }
+                else
+                {
+                    QName tmp = new QName(app.getDefaultNamespace(),def.getName());
+                    if (tmp.equals(qname))
+                    {
+                        return value.getClass().getName().equals(def.getValueType());
+                    }
+                }
+            }
+        }
+        return true;
+    }
+    
+    private Event getArbitraryEvent() 
+    {
+        Event eActual = null;
+        for (Event event : this.savedEvents.getEvents()) 
+        {
+            if (this.savedEvents.isNotProcessed(event)) 
+            {
+                eActual = event;
+            }
+        }
+        return eActual;
+    }
+    
+    private boolean optionsNotifyCurrentPage = true;
+    private boolean optionsNotifyAnyPortlet = false;
+    
+    private List<PortletWindow> getAllPortletsRegisteredForEvent(Event event)
+    {
+        if (optionsNotifyCurrentPage)
+        {
+            Fragment root = rc.getPage().getRootFragment();
+            List<PortletWindow> eventTargets = new LinkedList<PortletWindow>();            
+            return getPortletsRegisteredOnPage(root, event, eventTargets);
+        }
+        else if (optionsNotifyAnyPortlet)
+        {
+            
+        }
+        return null;
+    }
+ 
+    private List<PortletWindow> getPortletsRegisteredOnPage(Fragment fragment, Event event, List<PortletWindow> eventTargets)
     {
-        //throw new UnsupportedOperationException();
-        // TODO: 2.2 implement         
+        List<Fragment> fragments = fragment.getFragments();
+        if (fragments != null && fragments.size() > 0)
+        {
+            for (Fragment child : fragments)
+            {
+                getPortletsRegisteredOnPage(child, event, eventTargets);
+            }
+        }
+        PortletWindow portletWindow = windowAccessor.getPortletWindow(fragment.getId()); // TODO: support fragment to window id
+        if (portletWindow == null)
+            return eventTargets;
+        
+        PortletDefinition portlet = (PortletDefinition) portletWindow.getPortletEntity().getPortletDefinition();
+        
+// TODO: check security        
+//        if (checkSecurityConstraints && !checkSecurityConstraint(portletDefinition, fragment))
+//        {
+//            throw new PortletAccessDeniedException("Access Denied.");
+//        }
+        
+// TODO: check portlet tracking        
+//        if (portletTracking.isOutOfService(portletWindow))
+//        {
+//            log.info("Taking portlet out of service: " + portletDefinition.getUniqueName() + " for window " + fragment.getId());
+//            fragment.overrideRenderedContent(OUT_OF_SERVICE_MESSAGE);
+//            return;
+//        }
+        
+        List<? extends EventDefinitionReference> processingEvents = portlet.getSupportedProcessingEvents();
+        if (isEventSupported(processingEvents, event.getQName(), portlet.getApplication().getDefaultNamespace())) 
+        {
+            if (portlet.getPortletName().equals(portlet.getPortletName())) // BOZO: WTF?
+            {
+                eventTargets.add(portletWindow);
+            }
+        }
+        return eventTargets;
     }
+    
+
+    private boolean isEventSupported(List<? extends EventDefinitionReference> supportedEvents, QName eventName, String defaultNamespace)
+    {
+        if (supportedEvents != null)
+        {
+            for (EventDefinitionReference ref : supportedEvents)
+            {
+                QName refQName = ref.getQualifiedName(defaultNamespace);
+                if (refQName != null && refQName.equals(eventName))
+                {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }    
 }

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/services/JetspeedPortalCallbackServices.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/services/JetspeedPortalCallbackServices.java?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/services/JetspeedPortalCallbackServices.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/services/JetspeedPortalCallbackServices.java Thu Feb 12 08:02:18 2009
@@ -21,9 +21,12 @@
 
 import org.apache.jetspeed.PortalReservedParameters;
 import org.apache.jetspeed.container.PortletEntity;
+import org.apache.jetspeed.container.providers.EventProviderImpl;
 import org.apache.jetspeed.container.providers.PortletURLProviderImpl;
 import org.apache.jetspeed.container.providers.ResourceURLProviderImpl;
+import org.apache.jetspeed.container.window.PortletWindowAccessor;
 import org.apache.jetspeed.request.RequestContext;
+import org.apache.pluto.EventContainer;
 import org.apache.pluto.om.portlet.PortletApplicationDefinition;
 import org.apache.pluto.spi.EventProvider;
 import org.apache.pluto.spi.FilterManager;
@@ -42,20 +45,28 @@
  */
 public class JetspeedPortalCallbackServices implements PortalCallbackService
 {
+    public static final String PER_REQUEST_EVENT_PROVIDER = "org.apache.jetspeed.container.EventProvider";
+
     PropertyManager propertyManager;   
-    EventProvider eventProvider; 
     FilterManager filterManager;
     PortletURLListener urlListener;
+    PortletWindowAccessor windowAccessor;
+    EventContainer eventContainer; 
     
-    public JetspeedPortalCallbackServices(PropertyManager propertyManager,
-            EventProvider eventProvider, FilterManager filterManager, PortletURLListener urlListener)
+    public JetspeedPortalCallbackServices(final PropertyManager propertyManager,
+            final FilterManager filterManager, final PortletURLListener urlListener, final PortletWindowAccessor windowAccessor)
     {
         this.propertyManager = propertyManager;
-        this.eventProvider = eventProvider;
         this.filterManager = filterManager;
         this.urlListener = urlListener;
+        this.windowAccessor = windowAccessor;
     }
 
+    public void setEventContainer(final EventContainer eventContainer)
+    {
+        this.eventContainer = eventContainer;
+    }
+    
     public PortletURLProvider getPortletURLProvider(HttpServletRequest request,
             org.apache.pluto.PortletWindow portletWindow)
     {
@@ -77,16 +88,23 @@
         return propertyManager;
     }
         
-
+    
     public EventProvider getEventProvider(HttpServletRequest request,
             org.apache.pluto.PortletWindow portletWindow)
     {   
-        return eventProvider;
+        RequestContext rc = (RequestContext) request.getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);
+        EventProvider provider = (EventProvider)rc.getObjects().get(PER_REQUEST_EVENT_PROVIDER);
+        if (provider == null)
+        {
+            provider  = new EventProviderImpl(rc, portletWindow, this.windowAccessor);
+            rc.getObjects().put(PER_REQUEST_EVENT_PROVIDER, provider);
+        }
+        return provider;
     }
 
     public EventProvider getEventProvider()
     {
-        return eventProvider;
+        throw new RuntimeException("TODO: need to deprecate this");
     }
 
     /**

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/JETSPEED-INF/ojb/registry_repository.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/JETSPEED-INF/ojb/registry_repository.xml?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/JETSPEED-INF/ojb/registry_repository.xml (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/JETSPEED-INF/ojb/registry_repository.xml Thu Feb 12 08:02:18 2009
@@ -160,7 +160,12 @@
          column="SECURITY_REF"
          jdbc-type="VARCHAR"
       />
-      
+      <field-descriptor
+         name="defaultNamespace"
+         column="DEFAULT_NAMESPACE"
+         jdbc-type="VARCHAR"
+      />
+            
       <collection-descriptor
          name="metadataFields"
          element-class-ref="org.apache.jetspeed.om.portlet.impl.PortletApplicationLocalizedFieldImpl"
@@ -267,13 +272,50 @@
      <collection-descriptor
        name="roles"
        element-class-ref="org.apache.jetspeed.om.portlet.impl.SecurityRoleImpl"
-       auto-delete="false"
+       auto-delete="true"
+         auto-update = "true"
+         auto-retrieve = "true"
+     >
+       <inverse-foreignkey field-ref="appId"/>
+    </collection-descriptor>
+
+     <collection-descriptor
+       name="eventDefinitions"
+       element-class-ref="org.apache.jetspeed.om.portlet.impl.EventDefinitionImpl"
+       auto-delete="true"
+         auto-update = "true"
+         auto-retrieve = "true"
+     >
+       <inverse-foreignkey field-ref="appId"/>
+    </collection-descriptor>
+
+     <collection-descriptor
+       name="publicRenderParameters"
+       element-class-ref="org.apache.jetspeed.om.portlet.impl.PublicRenderParameterImpl"
+       auto-delete="true"
          auto-update = "true"
          auto-retrieve = "true"
      >
        <inverse-foreignkey field-ref="appId"/>
     </collection-descriptor>
+  
 
+   <collection-descriptor
+         name="containerRuntimeOptions"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.ContainerRuntimeOptionImpl"
+          auto-delete="true"
+          auto-update = "true"
+          auto-retrieve = "true"
+      >
+         <inverse-foreignkey field-ref="ownerId"/>
+         <query-customizer class="org.apache.jetspeed.util.ojb.CollectionOwnerClassDiscriminatorQueryCustomizer">
+            <attribute
+              attribute-name="discriminatorField"
+              attribute-value="owner"
+            />
+         </query-customizer>
+      </collection-descriptor>
+      
    </class-descriptor>
 
 <!--
@@ -320,6 +362,12 @@
          jdbc-type="INTEGER"
       />
 
+       <field-descriptor
+         name="cacheScope"
+         column="CACHE_SCOPE"
+         jdbc-type="VARCHAR"
+      />
+
       <field-descriptor
          name="resourceBundle"
          column="RESOURCE_BUNDLE"
@@ -448,6 +496,75 @@
          </query-customizer>
       </collection-descriptor>
 
+     <collection-descriptor
+         name="supportedProcessingEvents"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.EventDefinitionReferenceImpl"
+         auto-delete="true"
+         auto-update = "true"
+         auto-retrieve = "true"
+
+      >
+         <inverse-foreignkey field-ref="ownerId"/>
+         <query-customizer class="org.apache.jetspeed.util.ojb.CollectionOwnerClassDiscriminatorQueryCustomizer">
+            <attribute
+              attribute-name="discriminatorField"
+              attribute-value="owner"
+            />
+         </query-customizer>
+
+      </collection-descriptor>
+
+     <collection-descriptor
+         name="supportedPublishingEvents"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.EventDefinitionReferenceImpl"
+         auto-delete="true"
+         auto-update = "true"
+         auto-retrieve = "true"
+
+      >
+         <inverse-foreignkey field-ref="ownerId"/>
+         <query-customizer class="org.apache.jetspeed.util.ojb.CollectionOwnerClassDiscriminatorQueryCustomizer">
+            <attribute
+              attribute-name="discriminatorField"
+              attribute-value="owner"
+            />
+         </query-customizer>
+
+      </collection-descriptor>
+
+     <collection-descriptor
+         name="supportedPublicRenderParameters"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.SupportedPublicRenderParameterImpl"
+         auto-delete="true"
+         auto-update = "true"
+         auto-retrieve = "true"
+
+      >
+         <inverse-foreignkey field-ref="ownerId"/>
+         <query-customizer class="org.apache.jetspeed.util.ojb.CollectionOwnerClassDiscriminatorQueryCustomizer">
+            <attribute
+              attribute-name="discriminatorField"
+              attribute-value="owner"
+            />
+         </query-customizer>
+
+      </collection-descriptor>
+
+   <collection-descriptor
+         name="containerRuntimeOptions"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.ContainerRuntimeOptionImpl"
+          auto-delete="true"
+          auto-update = "true"
+          auto-retrieve = "true"
+      >
+         <inverse-foreignkey field-ref="ownerId"/>
+         <query-customizer class="org.apache.jetspeed.util.ojb.CollectionOwnerClassDiscriminatorQueryCustomizer">
+            <attribute
+              attribute-name="discriminatorField"
+              attribute-value="owner"
+            />
+         </query-customizer>
+      </collection-descriptor>
 
    <!--
       <collection-descriptor
@@ -616,7 +733,7 @@
 
 
 <!--
-   - L O C A L I Z E D   D E S C R I P I T I O N
+   - L O C A L I Z E D   D E S C R I P T I O N
  -->
    <class-descriptor
       class="org.apache.jetspeed.om.portlet.impl.DescriptionImpl"
@@ -1242,4 +1359,414 @@
       />
    </class-descriptor>
 
+<!--
+   - E V E N T  D E F I N I T I O N
+-->
+
+  <class-descriptor
+      class="org.apache.jetspeed.om.portlet.impl.EventDefinitionImpl"
+      table="EVENT_DEFINITION"
+   >
+        <field-descriptor
+         name="id"
+         column="ID"
+         jdbc-type="BIGINT"
+         primarykey="true"
+         autoincrement="true"
+         access="anonymous"
+      />
+
+     <field-descriptor
+         name="appId"
+         column="APPLICATION_ID"
+         jdbc-type="BIGINT"
+         access="anonymous"
+      />
+
+      <field-descriptor
+         name="localPart"
+         column="LOCAL_PART"
+         jdbc-type="VARCHAR"
+      />
+
+      <field-descriptor
+         name="namespace"
+         column="NAMESPACE"
+         jdbc-type="VARCHAR"
+      />
+
+      <field-descriptor
+         name="prefix"
+         column="PREFIX"
+         jdbc-type="VARCHAR"
+      />
+
+       <field-descriptor
+         name="valueType"
+         column="VALUE_TYPE"
+         jdbc-type="VARCHAR"
+      />
+
+      <collection-descriptor
+         name="descriptions"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.DescriptionImpl"
+         auto-delete="true"
+         auto-update = "true"
+         auto-retrieve = "true"
+
+      >
+         <inverse-foreignkey field-ref="ownerId"/>
+         <query-customizer class="org.apache.jetspeed.util.ojb.CollectionOwnerClassDiscriminatorQueryCustomizer">
+            <attribute
+              attribute-name="discriminatorField"
+              attribute-value="owner"
+            />
+         </query-customizer>
+
+      </collection-descriptor>
+
+      <collection-descriptor
+         name="aliases"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.PortletQNameImpl"
+         auto-delete="true"
+         auto-update = "true"
+         auto-retrieve = "true"
+
+      >
+         <inverse-foreignkey field-ref="ownerId"/>
+         <query-customizer class="org.apache.jetspeed.util.ojb.CollectionOwnerClassDiscriminatorQueryCustomizer">
+            <attribute
+              attribute-name="discriminatorField"
+              attribute-value="owner"
+            />
+         </query-customizer>
+
+      </collection-descriptor>
+   
+	</class-descriptor>
+
+
+<!--
+   - Q N A M E
+ -->
+   <class-descriptor
+      class="org.apache.jetspeed.om.portlet.impl.PortletQNameImpl"
+      table="PORTLET_QNAME"
+   >
+
+      <field-descriptor
+         name="id"
+         column="ID"
+         jdbc-type="BIGINT"
+         primarykey="true"
+         autoincrement="true"
+         access="anonymous"
+      />
+
+      <field-descriptor
+         name="ownerId"
+         column="OWNER_ID"
+         jdbc-type="BIGINT"
+         access="anonymous"
+      />
+
+
+      <field-descriptor
+         name="owner"
+         column="OWNER_CLASS_NAME"
+         jdbc-type="VARCHAR"
+      />
+
+      <field-descriptor
+         name="localPart"
+         column="LOCAL_PART"
+         jdbc-type="VARCHAR"
+      />
+
+      <field-descriptor
+         name="namespace"
+         column="NAMESPACE"
+         jdbc-type="VARCHAR"
+      />
+
+      <field-descriptor
+         name="prefix"
+         column="PREFIX"
+         jdbc-type="VARCHAR"
+      />
+
+    </class-descriptor>
+
+<!--
+   - Q N A M E
+ -->
+   <class-descriptor
+      class="org.apache.jetspeed.om.portlet.impl.EventDefinitionReferenceImpl"
+      table="PORTLET_QNAME"
+   >
+
+      <field-descriptor
+         name="id"
+         column="ID"
+         jdbc-type="BIGINT"
+         primarykey="true"
+         autoincrement="true"
+         access="anonymous"
+      />
+
+      <field-descriptor
+         name="ownerId"
+         column="OWNER_ID"
+         jdbc-type="BIGINT"
+         access="anonymous"
+      />
+
+
+      <field-descriptor
+         name="owner"
+         column="OWNER_CLASS_NAME"
+         jdbc-type="VARCHAR"
+      />
+
+      <field-descriptor
+         name="localPart"
+         column="LOCAL_PART"
+         jdbc-type="VARCHAR"
+      />
+
+      <field-descriptor
+         name="namespace"
+         column="NAMESPACE"
+         jdbc-type="VARCHAR"
+      />
+
+      <field-descriptor
+         name="prefix"
+         column="PREFIX"
+         jdbc-type="VARCHAR"
+      />
+
+    </class-descriptor>
+
+<!--
+   - S U P P O R T E D  P U B L I C  R E N D E R  P A R A M E T E R S
+ -->
+   <class-descriptor
+      class="org.apache.jetspeed.om.portlet.impl.SupportedPublicRenderParameterImpl"
+      table="NAMED_PARAMETER"
+   >
+
+      <field-descriptor
+         name="id"
+         column="ID"
+         jdbc-type="BIGINT"
+         primarykey="true"
+         autoincrement="true"
+         access="anonymous"
+      />
+
+      <field-descriptor
+         name="ownerId"
+         column="OWNER_ID"
+         jdbc-type="BIGINT"
+         access="anonymous"
+      />
+
+
+      <field-descriptor
+         name="owner"
+         column="OWNER_CLASS_NAME"
+         jdbc-type="VARCHAR"
+      />
+
+      <field-descriptor
+         name="name"
+         column="NAME"
+         jdbc-type="VARCHAR"
+      />
+
+    </class-descriptor>
+
+<!--
+   - C O N T A I N E R  R U N T I M E  O P T I O N
+ -->
+   <class-descriptor
+      class="org.apache.jetspeed.om.portlet.impl.ContainerRuntimeOptionImpl"
+      table="RUNTIME_OPTION"
+   >
+
+      <field-descriptor
+         name="id"
+         column="ID"
+         jdbc-type="BIGINT"
+         primarykey="true"
+         autoincrement="true"
+         access="anonymous"
+      />
+
+      <field-descriptor
+         name="ownerId"
+         column="OWNER_ID"
+         jdbc-type="BIGINT"
+         access="anonymous"
+      />
+
+
+      <field-descriptor
+         name="owner"
+         column="OWNER_CLASS_NAME"
+         jdbc-type="VARCHAR"
+      />
+
+      <field-descriptor
+         name="name"
+         column="NAME"
+         jdbc-type="VARCHAR"
+      />
+
+      <collection-descriptor
+         name="values"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.ContainerRuntimeOptionValueImpl"
+         auto-delete="true"
+         auto-update = "true"
+         auto-retrieve = "true"
+
+      >
+         <inverse-foreignkey field-ref="ownerId"/>
+         <query-customizer class="org.apache.jetspeed.util.ojb.CollectionOwnerClassDiscriminatorQueryCustomizer">
+            <attribute
+              attribute-name="discriminatorField"
+              attribute-value="owner"
+            />
+         </query-customizer>
+
+      </collection-descriptor>
+
+    </class-descriptor>
+
+<!--
+   - C O N T A I N E R  R U N T I M E  O P T I O N  V A L U E
+ -->
+   <class-descriptor
+      class="org.apache.jetspeed.om.portlet.impl.ContainerRuntimeOptionValueImpl"
+      table="RUNTIME_VALUE"
+   >
+
+      <field-descriptor
+         name="id"
+         column="ID"
+         jdbc-type="BIGINT"
+         primarykey="true"
+         autoincrement="true"
+         access="anonymous"
+      />
+
+      <field-descriptor
+         name="ownerId"
+         column="OWNER_ID"
+         jdbc-type="BIGINT"
+         access="anonymous"
+      />
+
+
+      <field-descriptor
+         name="owner"
+         column="OWNER_CLASS_NAME"
+         jdbc-type="VARCHAR"
+      />
+
+      <field-descriptor
+         name="value"
+         column="RVALUE"
+         jdbc-type="VARCHAR"
+      />
+
+    </class-descriptor>
+
+<!--
+   - PUBLIC RENDER PARAMETERS
+-->
+
+  <class-descriptor
+      class="org.apache.jetspeed.om.portlet.impl.PublicRenderParameterImpl"
+      table="PUBLIC_PARAMETER"
+   >
+        <field-descriptor
+         name="id"
+         column="ID"
+         jdbc-type="BIGINT"
+         primarykey="true"
+         autoincrement="true"
+         access="anonymous"
+      />
+
+     <field-descriptor
+         name="appId"
+         column="APPLICATION_ID"
+         jdbc-type="BIGINT"
+         access="anonymous"
+      />
+
+      <field-descriptor
+         name="localPart"
+         column="LOCAL_PART"
+         jdbc-type="VARCHAR"
+      />
+
+      <field-descriptor
+         name="namespace"
+         column="NAMESPACE"
+         jdbc-type="VARCHAR"
+      />
+
+      <field-descriptor
+         name="prefix"
+         column="PREFIX"
+         jdbc-type="VARCHAR"
+      />
+
+       <field-descriptor
+         name="identifier"
+         column="IDENTIFIER"
+         jdbc-type="VARCHAR"
+      />
+
+      <collection-descriptor
+         name="descriptions"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.DescriptionImpl"
+         auto-delete="true"
+         auto-update = "true"
+         auto-retrieve = "true"
+
+      >
+         <inverse-foreignkey field-ref="ownerId"/>
+         <query-customizer class="org.apache.jetspeed.util.ojb.CollectionOwnerClassDiscriminatorQueryCustomizer">
+            <attribute
+              attribute-name="discriminatorField"
+              attribute-value="owner"
+            />
+         </query-customizer>
+
+      </collection-descriptor>
+
+      <collection-descriptor
+         name="aliases"
+         element-class-ref="org.apache.jetspeed.om.portlet.impl.PortletQNameImpl"
+         auto-delete="true"
+         auto-update = "true"
+         auto-retrieve = "true"
+
+      >
+         <inverse-foreignkey field-ref="ownerId"/>
+         <query-customizer class="org.apache.jetspeed.util.ojb.CollectionOwnerClassDiscriminatorQueryCustomizer">
+            <attribute
+              attribute-name="discriminatorField"
+              attribute-value="owner"
+            />
+         </query-customizer>
+
+      </collection-descriptor>
+   
+	</class-descriptor>
+	
 </descriptor-repository>

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/PersistenceBrokerPortletRegistry.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/PersistenceBrokerPortletRegistry.java?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/PersistenceBrokerPortletRegistry.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/PersistenceBrokerPortletRegistry.java Thu Feb 12 08:02:18 2009
@@ -18,18 +18,32 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
+import java.util.Map;
 
 import org.apache.jetspeed.cache.JetspeedCache;
 import org.apache.jetspeed.cache.JetspeedCacheEventListener;
 import org.apache.jetspeed.components.dao.InitablePersistenceBrokerDaoSupport;
 import org.apache.jetspeed.components.portletpreferences.PortletPreferencesProvider;
 import org.apache.jetspeed.om.common.Support;
+import org.apache.jetspeed.om.portlet.ContainerRuntimeOption;
+import org.apache.jetspeed.om.portlet.Description;
+import org.apache.jetspeed.om.portlet.DisplayName;
+import org.apache.jetspeed.om.portlet.EventDefinitionReference;
+import org.apache.jetspeed.om.portlet.InitParam;
+import org.apache.jetspeed.om.portlet.Language;
+import org.apache.jetspeed.om.portlet.LocalizedField;
 import org.apache.jetspeed.om.portlet.PortletApplication;
 import org.apache.jetspeed.om.portlet.PortletDefinition;
+import org.apache.jetspeed.om.portlet.Preferences;
+import org.apache.jetspeed.om.portlet.SecurityRoleRef;
+import org.apache.jetspeed.om.portlet.Supports;
 import org.apache.jetspeed.om.portlet.impl.PortletApplicationDefinitionImpl;
 import org.apache.jetspeed.om.portlet.impl.PortletDefinitionImpl;
+import org.apache.jetspeed.om.portlet.impl.PreferencesImpl;
 import org.apache.ojb.broker.query.Criteria;
 import org.apache.ojb.broker.query.QueryFactory;
 import org.springframework.dao.DataAccessException;
@@ -294,5 +308,48 @@
     {
         this.listeners.remove(listener);
     }
+ 
+    public void clonePortletDefinition(PortletDefinition source, String newPortletName) throws FailedToStorePortletDefinitionException
+    {
+        if (this.portletDefinitionExists(newPortletName, source.getApplication()))
+        {
+            throw new FailedToStorePortletDefinitionException("Cannot clone to portlet named " + newPortletName + ", name already exists"); 
+        }
+        PortletDefinitionImpl copy = new PortletDefinitionImpl();
+        copy.setApplication(source.getApplication());
+        copy.setPortletName(newPortletName);
+        copy.setPortletClass(source.getPortletClass());
+        copy.setResourceBundle(source.getResourceBundle());
+        copy.setPreferenceValidatorClassname(source.getPreferenceValidatorClassname());
+        copy.setExpirationCache(source.getExpirationCache());
+        copy.setCacheScope(source.getCacheScope());
+        // TODO: Metadata
+        
+        copy.setJetspeedSecurityConstraint(source.getJetspeedSecurityConstraint());
+        copy.getDescriptions().addAll(source.getDescriptions());
+        copy.getDisplayNames().addAll(source.getDisplayNames());
+        
+    }
+    
+    /*
+
+    private Collection<LocalizedField> metadataFields = null;
+
+    
+    private List<InitParam> initParams;
+    private List<EventDefinitionReference> supportedProcessingEvents;
+    private List<EventDefinitionReference> supportedPublishingEvents;
+    private List<SecurityRoleRef> securityRoleRefs;
+    private List<Supports> supports;
+    private List<String> supportedLocales;
+    private List<Language> languages;
+    private List<ContainerRuntimeOption> containerRuntimeOptions;    
+    private List<String> supportedPublicRenderParameters;
+    private Preferences descriptorPreferences = new PreferencesImpl();    
+    
+    private transient Map<Locale,InlinePortletResourceBundle> resourceBundles = new HashMap<Locale, InlinePortletResourceBundle>();
+    
+    protected List portletEntities;     
+     */
     
 }
\ No newline at end of file

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/ContainerRuntimeOptionImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/ContainerRuntimeOptionImpl.java?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/ContainerRuntimeOptionImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/ContainerRuntimeOptionImpl.java Thu Feb 12 08:02:18 2009
@@ -22,6 +22,7 @@
 import java.util.List;
 
 import org.apache.jetspeed.om.portlet.ContainerRuntimeOption;
+import org.apache.jetspeed.om.portlet.ContainerRuntimeOptionValue;
 
 /**
  * @version $Id$
@@ -29,8 +30,19 @@
  */
 public class ContainerRuntimeOptionImpl implements ContainerRuntimeOption, Serializable
 {
+    private static final long serialVersionUID = 1L;
     protected String name;
-    protected List<String> values = new ArrayList<String>();
+    protected List<ContainerRuntimeOptionValue> values = new ArrayList<ContainerRuntimeOptionValue>();    
+    protected String owner;    
+
+    public ContainerRuntimeOptionImpl()
+    {}
+    
+    public ContainerRuntimeOptionImpl(Object owner, String name)
+    {
+        this.owner = owner.getClass().getName();        
+        this.name = name;
+    }
     
     public String getName()
     {
@@ -44,11 +56,31 @@
 
     public void addValue(String value)
     {
-        values.add(value);
+        if (values == null)
+        {
+            values = new ArrayList<ContainerRuntimeOptionValue>();
+        }
+        for (ContainerRuntimeOptionValue param : this.values)
+        {
+            if (param.equals(value))
+            {
+                throw new IllegalArgumentException("Support for container runtime parameter with identifier: "+value+" already defined");
+            }
+        }
+        values.add(new ContainerRuntimeOptionValueImpl(this, value));                
     }
 
     public List<String> getValues()
     {
-        return values;
+        if (values == null)
+        {
+            values = new ArrayList<ContainerRuntimeOptionValue>();
+        }
+        List<String> vals = new ArrayList<String>();
+        for (ContainerRuntimeOptionValue v : this.values)
+        {
+            vals.add(v.toString());
+        }
+        return vals;
     }
 }

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/ContainerRuntimeOptionValueImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/ContainerRuntimeOptionValueImpl.java?rev=743646&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/ContainerRuntimeOptionValueImpl.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/ContainerRuntimeOptionValueImpl.java Thu Feb 12 08:02:18 2009
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2008 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.om.portlet.impl;
+
+import org.apache.jetspeed.om.portlet.ContainerRuntimeOptionValue;
+
+public class ContainerRuntimeOptionValueImpl implements
+        ContainerRuntimeOptionValue
+{
+    private String value;
+    protected String owner;    
+
+    public ContainerRuntimeOptionValueImpl()
+    {}
+    
+    public ContainerRuntimeOptionValueImpl(Object owner, String value)
+    {
+        this.owner = owner.getClass().getName();        
+        this.value = value;
+    }
+    
+    public String getValue()
+    {
+        return value;
+    }
+
+    public boolean equals(Object qname)
+    {
+        return (this.toString().equals(qname.toString()));
+    }
+    
+    public String toString()
+    {
+        return value;
+    }
+    
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/ContainerRuntimeOptionValueImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/ContainerRuntimeOptionValueImpl.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/DescriptionImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/DescriptionImpl.java?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/DescriptionImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/DescriptionImpl.java Thu Feb 12 08:02:18 2009
@@ -41,8 +41,7 @@
     protected Locale locale = null;
     
     public DescriptionImpl()
-    {
-        
+    {        
     }
     
     public DescriptionImpl(Object owner, String lang)

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/EventDefinitionImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/EventDefinitionImpl.java?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/EventDefinitionImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/EventDefinitionImpl.java Thu Feb 12 08:02:18 2009
@@ -26,6 +26,7 @@
 
 import org.apache.jetspeed.om.portlet.Description;
 import org.apache.jetspeed.om.portlet.EventDefinition;
+import org.apache.jetspeed.om.portlet.PortletQName;
 import org.apache.jetspeed.util.JetspeedLocale;
 
 /**
@@ -34,10 +35,12 @@
  */
 public class EventDefinitionImpl implements EventDefinition, Serializable
 {
-    protected String name;
-    protected QName qname;
+    private static final long serialVersionUID = 1L;
+    protected String localPart;
+    protected String prefix;
+    protected String namespace;
     protected String valueType;
-    protected List<QName> aliases;
+    protected List<PortletQName> aliases;
     protected List<Description> descriptions;
     
     public Description getDescription(Locale locale)
@@ -70,39 +73,77 @@
 
     public QName getQName()
     {
-        return qname;
+        if (namespace == null)
+        {
+            return new QName(localPart);
+        }
+        else if (prefix == null)
+        {
+            return new QName(namespace, localPart);
+        }
+        else
+        {
+            return new QName(namespace, localPart, prefix);
+        }
     }
 
-    public void setQName(QName value)
+    public void setQName(QName qname)
     {
-        qname = value;
-        name = null;
+        this.namespace = qname.getNamespaceURI();
+        if (this.namespace != null && this.namespace.equals(""))
+            this.namespace = null;
+        this.prefix = qname.getPrefix();
+        if (this.prefix != null && this.prefix.equals(""))
+            this.prefix = null;
+        this.localPart = qname.getLocalPart();
     }
 
     public String getName()
     {
-        return name;
+        return this.localPart;
     }
 
-    public void setName(String value)
+    public void setName(String name)
     {
-        name = value;
-        qname = null;
+        this.localPart = name;
+        this.prefix = null;
+        this.namespace = null;
     }
 
     public List<QName> getAliases()
     {
-        if (aliases == null)
+        List<QName> result = new ArrayList<QName>();
+        if (aliases != null)
         {
-            aliases = new ArrayList<QName>();
+            for (PortletQName qname : aliases)
+            {
+                result.add(qname.getQName());
+            }
         }
-        return aliases;
+        return result;
     }
     
     public void addAlias(QName alias)
+    {       
+        if (aliases == null)
+        {
+            aliases = new ArrayList<PortletQName>();
+        }
+        if (!containsAlias(alias))
+        {
+            aliases.add(new PortletQNameImpl(this, alias));
+        }
+    }
+    
+    protected boolean containsAlias(QName qname)
     {
-        // TODO: check for duplicates
-        getAliases().add(alias);
+        PortletQName alias = new PortletQNameImpl(this, qname);
+        for (PortletQName p : aliases)
+        {
+            if (p.equals(alias))
+                return true;
+        }
+        return false;
     }
 
     public String getValueType()
@@ -115,8 +156,9 @@
         valueType = value;
     }
 
-    public QName getQualifiedName(String defaultNamespace)
+    public QName getQualifiedName(String defaultnamespace)
     {
-        return qname != null ? qname : name != null ? new QName(defaultNamespace, name) : null;
+        return new QName(defaultnamespace, localPart);
+        //return qname != null ? qname : name != null ? new QName(defaultNamespace, name) : null;
     }
 }

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/EventDefinitionReferenceImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/EventDefinitionReferenceImpl.java?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/EventDefinitionReferenceImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/EventDefinitionReferenceImpl.java Thu Feb 12 08:02:18 2009
@@ -27,35 +27,30 @@
  * @version $Id$
  *
  */
-public class EventDefinitionReferenceImpl implements EventDefinitionReference, Serializable
+public class EventDefinitionReferenceImpl extends PortletQNameImpl implements EventDefinitionReference, Serializable
 {
-    protected QName qname;
-    protected String name;
-    
-    public QName getQName()
+    public EventDefinitionReferenceImpl()
     {
-        return qname;
+        super();
     }
-
-    public void setQName(QName value)
+    
+    public EventDefinitionReferenceImpl(Object owner, QName qname)
     {
-        qname = value;
-        name = null;
+        super(owner, qname);
     }
 
-    public String getName()
+    public EventDefinitionReferenceImpl(Object owner, String qname)
     {
-        return name;
+        super(owner, new QName(qname));
     }
-
-    public void setName(String value)
+    
+    public String getName()
     {
-        name = value;
-        qname = null;
+        return super.getLocalPart();
     }
 
     public QName getQualifiedName(String defaultNamespace)
     {
-        return qname != null ? qname : name != null ? new QName(defaultNamespace, name) : null;
+        return super.getQName();
     }
 }

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/GenericMetadataImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/GenericMetadataImpl.java?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/GenericMetadataImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/GenericMetadataImpl.java Thu Feb 12 08:02:18 2009
@@ -36,7 +36,7 @@
  */
 public abstract class GenericMetadataImpl implements GenericMetadata
 {   
-    private Collection fields = null;
+    private Collection<LocalizedField> fields = null;
     private transient MultiValueMap fieldMap = null;
     
     private MultiValueMap getFieldMap(boolean create)
@@ -75,7 +75,7 @@
     {
         if(fields == null)
         {
-            fields = new ArrayList();
+            fields = new ArrayList<LocalizedField>();
         }
         
         fields.add(field);
@@ -85,17 +85,18 @@
     /* (non-Javadoc)
      * @see org.apache.jetspeed.om.common.GenericMetadata#getFields(java.lang.String)
      */
-    public Collection getFields(String name)
+    @SuppressWarnings("unchecked")
+    public Collection<LocalizedField> getFields(String name)
     {
     	//TODO:  return an immutable version?
         MultiValueMap fieldMap = getFieldMap(false);
-        return (Collection)(fieldMap !=null ? fieldMap.get(name) : null);
+        return (Collection<LocalizedField>)(fieldMap !=null ? fieldMap.get(name) : null);
     }
 
     /* (non-Javadoc)
      * @see org.apache.jetspeed.om.common.GenericMetadata#setFields(java.lang.String, java.util.Collection)
      */
-    public void setFields(String name, Collection values)
+    public void setFields(String name, Collection<LocalizedField> values)
     {
         MultiValueMap fieldMap = getFieldMap(false);
         if (fieldMap != null)
@@ -103,7 +104,7 @@
             fieldMap.remove(name);
         }
         
-        Iterator fieldIter = fields.iterator();
+        Iterator<LocalizedField> fieldIter = fields.iterator();
         while(fieldIter.hasNext())
         {
             LocalizedField field = (LocalizedField)fieldIter.next();
@@ -115,7 +116,7 @@
         
         if(values != null)
         {    
-            Iterator iter = values.iterator();
+            Iterator<LocalizedField> iter = values.iterator();
             while(iter.hasNext())
             {
                 LocalizedField field = (LocalizedField)iter.next();
@@ -129,14 +130,15 @@
     /* (non-Javadoc)
      * @see org.apache.jetspeed.om.common.GenericMetadata#getFields()
      */
-    public Collection getFields() {
+    public Collection<LocalizedField> getFields() 
+    {
         return fields;
     }
 
     /* (non-Javadoc)
      * @see org.apache.jetspeed.om.common.GenericMetadata#setFields(java.util.Collection)
      */
-    public void setFields(Collection fields)
+    public void setFields(Collection<LocalizedField> fields)
     {
         this.fields = fields;
 
@@ -148,7 +150,7 @@
         
         if(fields != null)
         {    
-            Iterator fieldIter = fields.iterator();
+            Iterator<LocalizedField> fieldIter = fields.iterator();
             while(fieldIter.hasNext())
             {
                 LocalizedField field = (LocalizedField)fieldIter.next();
@@ -164,7 +166,7 @@
     /* (non-Javadoc)
      * @see org.apache.jetspeed.om.common.GenericMetadata#copyFields(java.util.Collection)
      */
-    public void copyFields(Collection fields)
+    public void copyFields(Collection<LocalizedField> fields)
     {
         // preserve matching fields during copy to
         // minimize persistent store thrash and
@@ -188,10 +190,10 @@
             // create new fields collection if necessary
             if (this.fields == null)
             {
-                this.fields = new ArrayList();
+                this.fields = new ArrayList<LocalizedField>();
             }
             // copy unique new metadata members
-            Iterator fieldIter = fields.iterator();
+            Iterator<LocalizedField> fieldIter = fields.iterator();
             while (fieldIter.hasNext())
             {
                 LocalizedField field = (LocalizedField)fieldIter.next();
@@ -211,7 +213,7 @@
         
         if (this.fields != null)
         {    
-            Iterator fieldIter = this.fields.iterator();
+            Iterator<LocalizedField> fieldIter = this.fields.iterator();
             while (fieldIter.hasNext())
             {
                 LocalizedField field = (LocalizedField)fieldIter.next();

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletApplicationDefinitionImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletApplicationDefinitionImpl.java?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletApplicationDefinitionImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletApplicationDefinitionImpl.java Thu Feb 12 08:02:18 2009
@@ -46,6 +46,7 @@
 import org.apache.jetspeed.om.portlet.LocalizedField;
 import org.apache.jetspeed.om.portlet.PortletApplication;
 import org.apache.jetspeed.om.portlet.PortletDefinition;
+import org.apache.jetspeed.om.portlet.PortletQName;
 import org.apache.jetspeed.om.portlet.PublicRenderParameter;
 import org.apache.jetspeed.om.portlet.SecurityConstraint;
 import org.apache.jetspeed.om.portlet.SecurityRole;
@@ -82,9 +83,6 @@
     /** Metadata property */
     private Collection<LocalizedField> metadataFields = null;
     
-    /** Description */
-    private String description;
-
     private String resourceBundle;
     private String defaultNamespace;
     
@@ -233,16 +231,6 @@
         this.jetspeedSecurityConstraint = constraint;
     }
     
-    public String getDescription()
-    {
-        return description;
-    }
-
-    public void setDescription(String string)
-    {
-        description = string;
-    }
-
     /**
      * @see org.apache.jetspeed.om.portlet.PortletApplication#getMetadata()
      */
@@ -427,11 +415,11 @@
         {
             throw new IllegalArgumentException("PublicRenderParameter with identifier: "+identifier+" already defined");
         }
-        // TODO: check duplicates on name|qname?
-        PublicRenderParameterImpl p = new PublicRenderParameterImpl();
-        p.setName(name);
-        p.setIdentifier(identifier);
-        getPublicRenderParameters().add(p);
+        PublicRenderParameterImpl p = new PublicRenderParameterImpl(name, identifier);
+        if (!containsPublicRenderParameter(p))
+        {
+            getPublicRenderParameters().add(p);
+        }
         return p;        
     }
 
@@ -441,14 +429,25 @@
         {
             throw new IllegalArgumentException("PublicRenderParameter with identifier: "+identifier+" already defined");
         }
-        // TODO: check duplicates on name|qname?
-        PublicRenderParameterImpl p = new PublicRenderParameterImpl();
-        p.setQName(qname);
+        PublicRenderParameterImpl p = new PublicRenderParameterImpl(qname);        
         p.setIdentifier(identifier);
-        getPublicRenderParameters().add(p);
+        if (!containsPublicRenderParameter(p))
+        {
+            getPublicRenderParameters().add(p);
+        }
         return p;        
     }
 
+    protected boolean containsPublicRenderParameter(PublicRenderParameter prp)
+    {
+        for (PublicRenderParameter p : this.publicRenderParameters)
+        {
+            if (p.equals(prp))
+                return true;
+        }
+        return false;
+    }
+    
     public CustomPortletMode getCustomPortletMode(String name)
     {
         for (CustomPortletMode cpm : getCustomPortletModes())
@@ -828,8 +827,7 @@
         {
             throw new IllegalArgumentException("Container runtime option with name: "+name+" already defined");
         }
-        ContainerRuntimeOptionImpl cro = new ContainerRuntimeOptionImpl();
-        cro.setName(name);
+        ContainerRuntimeOptionImpl cro = new ContainerRuntimeOptionImpl(this, name);
         getContainerRuntimeOptions().add(cro);
         return cro;        
     }

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletDefinitionImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletDefinitionImpl.java?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletDefinitionImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletDefinitionImpl.java Thu Feb 12 08:02:18 2009
@@ -49,6 +49,7 @@
 import org.apache.jetspeed.om.portlet.Preference;
 import org.apache.jetspeed.om.portlet.Preferences;
 import org.apache.jetspeed.om.portlet.SecurityRoleRef;
+import org.apache.jetspeed.om.portlet.SupportedPublicRenderParameter;
 import org.apache.jetspeed.om.portlet.Supports;
 import org.apache.jetspeed.util.HashCodeBuilder;
 import org.apache.jetspeed.util.JetspeedLocale;
@@ -96,7 +97,7 @@
     private List<String> supportedLocales;
     private List<Language> languages;
     private List<ContainerRuntimeOption> containerRuntimeOptions;    
-    private List<String> supportedPublicRenderParameters;
+    private List<SupportedPublicRenderParameter> supportedPublicRenderParameters;
     private Preferences descriptorPreferences = new PreferencesImpl();    
     
     private transient Map<Locale,InlinePortletResourceBundle> resourceBundles = new HashMap<Locale, InlinePortletResourceBundle>();
@@ -559,8 +560,7 @@
         {
             throw new IllegalArgumentException("Container runtime option with name: "+name+" already defined");
         }
-        ContainerRuntimeOptionImpl cro = new ContainerRuntimeOptionImpl();
-        cro.setName(name);
+        ContainerRuntimeOptionImpl cro = new ContainerRuntimeOptionImpl(this, name);
         containerRuntimeOptions.add(cro);
         return cro;        
     }
@@ -661,21 +661,30 @@
     {
         if (supportedPublicRenderParameters == null)
         {
-            supportedPublicRenderParameters = new ArrayList<String>();
+            supportedPublicRenderParameters = new ArrayList<SupportedPublicRenderParameter>();
         }
-        return supportedPublicRenderParameters;
+        List<String> params = new ArrayList<String>();
+        for (SupportedPublicRenderParameter param : this.supportedPublicRenderParameters)
+        {
+            params.add(param.toString());
+        }
+        return params;
     }
     
     public void addSupportedPublicRenderParameter(String identifier)
     {
-        for (String ident : getSupportedPublicRenderParameters())
+        if (supportedPublicRenderParameters == null)
+        {
+            supportedPublicRenderParameters = new ArrayList<SupportedPublicRenderParameter>();
+        }
+        for (SupportedPublicRenderParameter param : this.supportedPublicRenderParameters)
         {
-            if (ident.equals(identifier))
+            if (param.equals(identifier))
             {
                 throw new IllegalArgumentException("Support for public render parameter with identifier: "+identifier+" already defined");
             }
         }
-        supportedPublicRenderParameters.add(identifier);
+        supportedPublicRenderParameters.add(new SupportedPublicRenderParameterImpl(this, identifier));        
     }
 
 
@@ -806,8 +815,7 @@
     {
         // TODO: check duplicates
         getSupportedProcessingEvents();
-        EventDefinitionReferenceImpl edr = new EventDefinitionReferenceImpl();
-        edr.setQName(qname);
+        EventDefinitionReferenceImpl edr = new EventDefinitionReferenceImpl(this, qname);
         supportedProcessingEvents.add(edr);
         return edr;
     }
@@ -816,8 +824,7 @@
     {
         // TODO check duplicates
         getSupportedProcessingEvents();
-        EventDefinitionReferenceImpl edr = new EventDefinitionReferenceImpl();
-        edr.setName(name);
+        EventDefinitionReferenceImpl edr = new EventDefinitionReferenceImpl(this, name);
         supportedProcessingEvents.add(edr);
         return edr;
     }
@@ -835,8 +842,7 @@
     {
         // TODO: check duplicates
         getSupportedPublishingEvents();
-        EventDefinitionReferenceImpl edr = new EventDefinitionReferenceImpl();
-        edr.setQName(qname);
+        EventDefinitionReferenceImpl edr = new EventDefinitionReferenceImpl(this, qname);
         supportedPublishingEvents.add(edr);
         return edr;
     }
@@ -845,8 +851,7 @@
     {
         // TODO check duplicates
         getSupportedPublishingEvents();
-        EventDefinitionReferenceImpl edr = new EventDefinitionReferenceImpl();
-        edr.setName(name);
+        EventDefinitionReferenceImpl edr = new EventDefinitionReferenceImpl(this, name);
         supportedPublishingEvents.add(edr);
         return edr;
     }

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletQNameImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletQNameImpl.java?rev=743646&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletQNameImpl.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletQNameImpl.java Thu Feb 12 08:02:18 2009
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2008 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.om.portlet.impl;
+
+import javax.xml.namespace.QName;
+
+import org.apache.jetspeed.om.portlet.PortletQName;
+
+
+public class PortletQNameImpl implements PortletQName
+{
+    private String localPart;
+    private String prefix;
+    private String namespace;
+    protected String owner;    
+
+    public PortletQNameImpl()
+    {}
+    
+    public PortletQNameImpl(Object owner, QName qname)
+    {
+        this.owner = owner.getClass().getName();        
+        this.namespace = qname.getNamespaceURI();
+        if (this.namespace != null && this.namespace.equals(""))
+            this.namespace = null;
+        this.prefix = qname.getPrefix();
+        if (this.prefix != null && this.prefix.equals(""))
+            this.prefix = null;
+        this.localPart = qname.getLocalPart();        
+    }
+    
+    public String getLocalPart()
+    {
+        return this.localPart;
+    }
+
+    public String getNamespace()
+    {
+        return this.namespace;
+    }
+
+    public String getPrefix()
+    {
+        return this.prefix;
+    }
+
+    public QName getQName()
+    {
+        if (namespace == null)
+        {
+            return new QName(localPart);
+        }
+        else if (prefix == null)
+        {
+            return new QName(namespace, localPart);
+        }
+        else
+        {
+            return new QName(namespace, localPart, prefix);
+        }
+    }
+    
+    public boolean equals(Object qname)
+    {
+        return (this.toString().equals(qname.toString()));
+    }
+    
+    public String toString()
+    {
+        return ((this.getNamespace() == null) ? "" : this.getNamespace() + "//:") + 
+               ((this.getPrefix() == null) ? "" : this.getPrefix() + ":") +
+               ((this.getLocalPart() == null) ? "" : this.getLocalPart());
+    }
+
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletQNameImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PortletQNameImpl.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PublicRenderParameterImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PublicRenderParameterImpl.java?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PublicRenderParameterImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/PublicRenderParameterImpl.java Thu Feb 12 08:02:18 2009
@@ -25,6 +25,7 @@
 import javax.xml.namespace.QName;
 
 import org.apache.jetspeed.om.portlet.Description;
+import org.apache.jetspeed.om.portlet.PortletQName;
 import org.apache.jetspeed.om.portlet.PublicRenderParameter;
 import org.apache.jetspeed.util.JetspeedLocale;
 
@@ -34,11 +35,34 @@
  */
 public class PublicRenderParameterImpl implements PublicRenderParameter, Serializable
 {
+    private static final long serialVersionUID = 1L;
+    private String localPart;
+    private String prefix;
+    private String namespace;
     protected String identifier;
-    protected QName qname;
-    protected String name;
-    protected List<QName> alias;
+
+    protected List<PortletQName> aliases;
     protected List<Description> descriptions;
+
+    public PublicRenderParameterImpl()
+    {}
+    
+    public PublicRenderParameterImpl(String name, String identifier)    
+    {
+        this.localPart = name;
+        this.identifier = identifier;
+    }
+    
+    public PublicRenderParameterImpl(QName qname)
+    {
+        this.namespace = qname.getNamespaceURI();
+        if (this.namespace != null && this.namespace.equals(""))
+            this.namespace = null;
+        this.prefix = qname.getPrefix();
+        if (this.prefix != null && this.prefix.equals(""))
+            this.prefix = null;
+        this.localPart = qname.getLocalPart();                
+    }
     
     public String getIdentifier()
     {
@@ -50,41 +74,113 @@
         identifier = value;
     }
 
-    public QName getQName()
+    public String getLocalPart()
     {
-        return qname;
+        return this.localPart;
     }
 
-    public void setQName(QName value)
+    public String getNamespace()
     {
-        qname = value;
-        name = null;
+        return this.namespace;
     }
 
-    public String getName()
+    public String getPrefix()
+    {
+        return this.prefix;
+    }
+
+    public QName getQName()
+    {
+        if (namespace == null)
+        {
+            return new QName(localPart);
+        }
+        else if (prefix == null)
+        {
+            return new QName(namespace, localPart);
+        }
+        else
+        {
+            return new QName(namespace, localPart, prefix);
+        }
+    }
+    
+    public void setQName(QName qname)
+    {
+        this.namespace = qname.getNamespaceURI();
+        if (this.namespace != null && this.namespace.equals(""))
+            this.namespace = null;
+        this.prefix = qname.getPrefix();
+        if (this.prefix != null && this.prefix.equals(""))
+            this.prefix = null;
+        this.localPart = qname.getLocalPart();
+    }    
+    
+    public boolean equals(Object o)
+    {
+        if (!(o instanceof PublicRenderParameter))
+            return false;
+        PublicRenderParameter param = (PublicRenderParameter)o;
+        String i1 = (param.getIdentifier() == null ? "" : param.getIdentifier());
+        String i2 = (this.identifier == null ? "" : this.identifier);
+        if (i1.equals(i2))
+            return true;
+        return (this.toString().equals(param.toString()));
+    }
+    
+    public String toString()
     {
-        return name;
+        return ((this.getNamespace() == null) ? "" : this.getNamespace() + "//:") + 
+               ((this.getPrefix() == null) ? "" : this.getPrefix() + ":") +
+               ((this.getLocalPart() == null) ? "" : this.getLocalPart());
     }
 
-    public void setName(String value)
+    public String getName()
     {
-        name = value;
-        qname = null;
+        return this.localPart;
     }
 
+    public void setName(String name)
+    {
+        this.localPart = name;
+        this.prefix = null;
+        this.namespace = null;
+    }
+    
     public List<QName> getAliases()
     {
-        if (alias == null)
+        List<QName> result = new ArrayList<QName>();
+        if (aliases != null)
         {
-            alias = new ArrayList<QName>();
+            for (PortletQName qname : aliases)
+            {
+                result.add(qname.getQName());
+            }
         }
-        return alias;
+        return result;
     }
-
+    
     public void addAlias(QName alias)
+    {       
+        if (aliases == null)
+        {
+            aliases = new ArrayList<PortletQName>();
+        }
+        if (!containsAlias(alias))
+        {
+            aliases.add(new PortletQNameImpl(this, alias));
+        }
+    }
+    
+    protected boolean containsAlias(QName qname)
     {
-        // TODO: check duplicates
-        getAliases().add(alias);
+        PortletQName alias = new PortletQNameImpl(this, qname);
+        for (PortletQName p : aliases)
+        {
+            if (p.equals(alias))
+                return true;
+        }
+        return false;
     }
     
     public Description getDescription(Locale locale)

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SupportedPublicRenderParameterImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SupportedPublicRenderParameterImpl.java?rev=743646&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SupportedPublicRenderParameterImpl.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SupportedPublicRenderParameterImpl.java Thu Feb 12 08:02:18 2009
@@ -0,0 +1,35 @@
+package org.apache.jetspeed.om.portlet.impl;
+
+import org.apache.jetspeed.om.portlet.SupportedPublicRenderParameter;
+
+
+public class SupportedPublicRenderParameterImpl implements SupportedPublicRenderParameter
+{
+    private String name;
+    protected String owner;    
+
+    public SupportedPublicRenderParameterImpl()
+    {}
+    
+    public SupportedPublicRenderParameterImpl(Object owner, String name)
+    {
+        this.owner = owner.getClass().getName();        
+        this.name = name;
+    }
+    
+    public String getName()
+    {
+        return name;
+    }
+
+    public boolean equals(Object qname)
+    {
+        return (this.toString().equals(qname.toString()));
+    }
+    
+    public String toString()
+    {
+        return name;
+    }
+    
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SupportedPublicRenderParameterImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/om/portlet/impl/SupportedPublicRenderParameterImpl.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/AbstractRegistryTest.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/AbstractRegistryTest.java?rev=743646&r1=743645&r2=743646&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/AbstractRegistryTest.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/AbstractRegistryTest.java Thu Feb 12 08:02:18 2009
@@ -186,6 +186,7 @@
 
         assertNotNull("App did NOT persist its description", app.getDescription(Locale.FRENCH));
 
+        TestPortletRegistryDAO.verifyPortlet20Data(app, portlet);
     }
 
     protected String getBeanDefinitionFilterCategories()



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org