Author: taylor
Date: Fri Feb 25 07:45:03 2011
New Revision: 1074422
URL: http://svn.apache.org/viewvc?rev=1074422&view=rev
Log:
https://issues.apache.org/jira/browse/JS2-1232
Portlet Instances feature implemented with tests. Note I had to rename this
feature Portlet Clones since the concept of Portlet Instances is used (albeit
at a low level) all over the codebase. This commit is considered Phase 1 of 2,
and includes the core implementation, as well as basic integration into
j2-admin PAM, and the Jetspeed Toolbox search. Phase II will encompass
improving the PAM and Toolbox to further support administration of clones. This
commit introduces an new column CLONE_PARENT to the PORTLET_DEFINITION table.
Schema change requirements will be documented in release notes and migration
docs.
Added:
portals/jetspeed-2/portal/trunk/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/util/ojb/PortletCloneQueryCustomizer.java
(with props)
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/AbstractRequestContextTestCase.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/components/portletregistry/PortletRegistryHelper.java
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/RegistryPortletCache.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/serializer/JetspeedRegistrySerializer.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/resources/registry-test.xml
portals/jetspeed-2/portal/trunk/etc/registration/assembly/registry.xml
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/PortletApplication.java
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletDefinition.java
portals/jetspeed-2/portal/trunk/jetspeed-archetype/src/main/resources/archetype-resources/pom.xml
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/registry.xml
portals/jetspeed-2/portal/trunk/pom.xml
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/tools/pamanager/PortletApplicationManager.java
Fri Feb 25 07:45:03 2011
@@ -750,11 +750,12 @@ public class PortletApplicationManager i
if (searchEngine != null)
{
List<PortletDefinition> portletDefList = pa.getPortlets();
- List<Object> list = new ArrayList<Object>(portletDefList.size() +
1);
-
+ List<PortletDefinition> cloneDefList = pa.getClones();
+ List<Object> list = new ArrayList<Object>(portletDefList.size() +
cloneDefList.size() + 1);
if (remove)
{
list.addAll(portletDefList);
+ list.addAll(cloneDefList);
list.add(pa);
searchEngine.remove(list);
log.info("Un-Registered the portlet application in the search
engine... " + pa.getName());
@@ -763,6 +764,7 @@ public class PortletApplicationManager i
{
list.add(pa);
list.addAll(portletDefList);
+ list.addAll(cloneDefList);
searchEngine.add(list);
log.info("Registered the portlet application in the search
engine... " + pa.getName());
}
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/AbstractRequestContextTestCase.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/AbstractRequestContextTestCase.java?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/AbstractRequestContextTestCase.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/AbstractRequestContextTestCase.java
Fri Feb 25 07:45:03 2011
@@ -42,6 +42,7 @@ public class AbstractRequestContextTestC
confList.add("jetspeed-properties.xml");
confList.add("page-manager.xml");
confList.add("registry.xml");
+ confList.add("search.xml");
confList.add("JETSPEED-INF/spring/RequestDispatcherService.xml");
confList.add("rc2.xml");
confList.add("static-bean-references.xml");
@@ -51,7 +52,7 @@ public class AbstractRequestContextTestC
confList.add("security-atn.xml");
confList.add("security-spi-atn.xml");
confList.add("security-atz.xml");
-
confList.add("JETSPEED-INF/spring/JetspeedPrincipalManagerProviderOverride.xml");
+
confList.add("JETSPEED-INF/spring/JetspeedPrincipalManagerProviderOverride.xml");
return confList.toArray(new String[confList.size()]);
}
Added:
portals/jetspeed-2/portal/trunk/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/util/ojb/PortletCloneQueryCustomizer.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/util/ojb/PortletCloneQueryCustomizer.java?rev=1074422&view=auto
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/util/ojb/PortletCloneQueryCustomizer.java
(added)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/util/ojb/PortletCloneQueryCustomizer.java
Fri Feb 25 07:45:03 2011
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.util.ojb;
+
+import org.apache.ojb.broker.PersistenceBroker;
+import org.apache.ojb.broker.accesslayer.QueryCustomizerDefaultImpl;
+import org.apache.ojb.broker.metadata.CollectionDescriptor;
+import org.apache.ojb.broker.query.Query;
+import org.apache.ojb.broker.query.QueryByCriteria;
+
+public class PortletCloneQueryCustomizer extends QueryCustomizerDefaultImpl {
+
+ private static final long serialVersionUID = -1933868940330442307L;
+ private static final String CLONE_FIELD = "isClone";
+
+ public Query customizeQuery(Object owner, PersistenceBroker broker,
CollectionDescriptor collDescriptor, QueryByCriteria query)
+ {
+ String isClone = this.getAttribute(CLONE_FIELD, "false");
+ if (isClone.equals("false"))
+ {
+ query.getCriteria().addIsNull("cloneParent");
+ }
+ else
+ {
+ query.getCriteria().addNotNull("cloneParent");
+ }
+ return query;
+ }
+}
Propchange:
portals/jetspeed-2/portal/trunk/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/util/ojb/PortletCloneQueryCustomizer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
portals/jetspeed-2/portal/trunk/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/util/ojb/PortletCloneQueryCustomizer.java
------------------------------------------------------------------------------
svn:keywords = Id
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=1074422&r1=1074421&r2=1074422&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
Fri Feb 25 07:45:03 2011
@@ -191,6 +191,12 @@
>
<inverse-foreignkey field-ref="appId"/>
+ <query-customizer
class="org.apache.jetspeed.util.ojb.PortletCloneQueryCustomizer">
+ <attribute
+ attribute-name="isClone"
+ attribute-value="false"
+ />
+ </query-customizer>
</collection-descriptor>
<collection-descriptor
@@ -366,6 +372,23 @@
<inverse-foreignkey field-ref="applicationId"/>
</collection-descriptor>
+ <collection-descriptor
+ name="clones"
+
element-class-ref="org.apache.jetspeed.om.portlet.impl.PortletDefinitionImpl"
+ auto-delete="false"
+ auto-update = "true"
+ auto-retrieve = "true"
+
+ >
+ <inverse-foreignkey field-ref="appId"/>
+ <query-customizer
class="org.apache.jetspeed.util.ojb.PortletCloneQueryCustomizer">
+ <attribute
+ attribute-name="isClone"
+ attribute-value="true"
+ />
+ </query-customizer>
+ </collection-descriptor>
+
</class-descriptor>
<!--
@@ -417,7 +440,12 @@
column="CACHE_SCOPE"
jdbc-type="VARCHAR"
/>
-
+ <field-descriptor
+ name="cloneParent"
+ column="CLONE_PARENT"
+ jdbc-type="VARCHAR"
+ nullable="true"
+ />
<field-descriptor
name="resourceBundle"
column="RESOURCE_BUNDLE"
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=1074422&r1=1074421&r2=1074422&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
Fri Feb 25 07:45:03 2011
@@ -42,6 +42,7 @@ import org.apache.jetspeed.om.portlet.Se
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.search.SearchEngine;
import org.apache.jetspeed.util.JetspeedLocale;
import org.apache.ojb.broker.query.Criteria;
import org.apache.ojb.broker.query.QueryFactory;
@@ -67,27 +68,35 @@ public class PersistenceBrokerPortletReg
* The separator used to create a unique portlet name as
* {portletApplication}::{portlet}
*/
- static final String PORTLET_UNIQUE_NAME_SEPARATOR = "::";
+ static public final String PORTLET_UNIQUE_NAME_SEPARATOR = "::";
- private JetspeedCache applicationOidCache = null;
- private JetspeedCache portletOidCache = null;
- private JetspeedCache applicationNameCache = null;
- private JetspeedCache portletNameCache = null;
- private List<RegistryEventListener> listeners = new
ArrayList<RegistryEventListener>();
- private PortletPreferencesProvider preferenceService;
+ protected JetspeedCache applicationOidCache = null;
+ protected JetspeedCache portletOidCache = null;
+ protected JetspeedCache applicationNameCache = null;
+ protected JetspeedCache portletNameCache = null;
+ protected List<RegistryEventListener> listeners = new
ArrayList<RegistryEventListener>();
+ protected PortletPreferencesProvider preferenceService;
+ protected SearchEngine searchEngine;
// for testing purposes only: no need for the portletFactory then
public PersistenceBrokerPortletRegistry(String repositoryPath,
PortletPreferencesProvider preferenceService)
{
- this(repositoryPath, null, null, null, null, preferenceService);
+ this(repositoryPath, null, null, null, null, preferenceService, null);
+ }
+
+ public PersistenceBrokerPortletRegistry(String repositoryPath,
+ JetspeedCache applicationOidCache, JetspeedCache portletOidCache,
+ JetspeedCache applicationNameCache, JetspeedCache portletNameCache,
+ PortletPreferencesProvider preferenceService)
+ {
+ this(repositoryPath, applicationOidCache, portletOidCache,
applicationNameCache, portletNameCache, preferenceService, null);
}
- /**
- *
- */
public PersistenceBrokerPortletRegistry(String repositoryPath,
JetspeedCache applicationOidCache, JetspeedCache portletOidCache,
- JetspeedCache applicationNameCache, JetspeedCache
portletNameCache, PortletPreferencesProvider preferenceService)
+ JetspeedCache applicationNameCache, JetspeedCache
portletNameCache,
+ PortletPreferencesProvider preferenceService,
+ SearchEngine search)
{
super(repositoryPath);
this.applicationOidCache = applicationOidCache;
@@ -100,12 +109,35 @@ public class PersistenceBrokerPortletReg
this.applicationNameCache.addEventListener(this, false);
this.portletNameCache.addEventListener(this, false);
this.preferenceService = preferenceService;
+ this.searchEngine = search;
}
@SuppressWarnings("unchecked")
public Collection<PortletDefinition> getAllPortletDefinitions()
{
Criteria c = new Criteria();
+ c.addIsNull("cloneParent");
+ Collection<PortletDefinition> list =
getPersistenceBrokerTemplate().getCollectionByQuery(
+ QueryFactory.newQuery(PortletDefinitionImpl.class, c));
+ postLoadColl(list);
+ return list;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Collection<PortletDefinition> getAllDefinitions()
+ {
+ Criteria c = new Criteria();
+ Collection<PortletDefinition> list =
getPersistenceBrokerTemplate().getCollectionByQuery(
+ QueryFactory.newQuery(PortletDefinitionImpl.class, c));
+ postLoadColl(list);
+ return list;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Collection<PortletDefinition> getAllCloneDefinitions()
+ {
+ Criteria c = new Criteria();
+ c.addNotNull("cloneParent");
Collection<PortletDefinition> list =
getPersistenceBrokerTemplate().getCollectionByQuery(
QueryFactory.newQuery(PortletDefinitionImpl.class, c));
postLoadColl(list);
@@ -200,6 +232,7 @@ public class PersistenceBrokerPortletReg
{
getPersistenceBrokerTemplate().store(newApp);
this.preferenceService.storeDefaults(newApp);
+ this.restoreClones(newApp);
}
public void removeApplication(PortletApplication app) throws
RegistryException
@@ -350,36 +383,36 @@ public class PersistenceBrokerPortletReg
this.listeners.remove(listener);
}
- public void clonePortletDefinition(PortletDefinition source, String
newPortletName) throws FailedToStorePortletDefinitionException
+ public PortletDefinition 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");
+ throw new FailedToStorePortletDefinitionException("Cannot clone to
portlet named " + newPortletName + ", name already exists");
}
-
// create new portlet in source portlet application
- PortletDefinition copy =
source.getApplication().addPortlet(newPortletName);
-
+ PortletDefinition copy =
source.getApplication().addClone(newPortletName);
+ PortletApplication destApp = source.getApplication();
+
// First set display name
-
+
DisplayName displayName =
copy.addDisplayName(JetspeedLocale.getDefaultLocale().getLanguage());
displayName.setDisplayName(newPortletName);
-
+
// And, then, copy all attributes
-
+
copy.setPortletClass(source.getPortletClass());
copy.setResourceBundle(source.getResourceBundle());
copy.setPreferenceValidatorClassname(source.getPreferenceValidatorClassname());
copy.setExpirationCache(source.getExpirationCache());
copy.setCacheScope(source.getCacheScope());
-
+
for (LocalizedField field : source.getMetadata().getFields())
{
copy.getMetadata().addField(field.getLocale(), field.getName(),
field.getValue());
}
-
+
copy.setJetspeedSecurityConstraint(source.getJetspeedSecurityConstraint());
-
+
for (Description desc : source.getDescriptions())
{
Description copyDesc = copy.addDescription(desc.getLang());
@@ -390,14 +423,16 @@ public class PersistenceBrokerPortletReg
{
InitParam copyInitParam =
copy.addInitParam(initParam.getParamName());
copyInitParam.setParamValue(initParam.getParamValue());
-
+
for (Description desc : initParam.getDescriptions())
{
Description copyDesc =
copyInitParam.addDescription(desc.getLang());
copyDesc.setDescription(desc.getDescription());
}
}
-
+ InitParam parentPortlet =
copy.addInitParam(PortletDefinition.CLONE_PARENT_INIT_PARAM);
+ parentPortlet.setParamValue(source.getPortletName());
+
for (EventDefinitionReference eventDefRef :
source.getSupportedProcessingEvents())
{
copy.addSupportedProcessingEvent(eventDefRef.getQName());
@@ -407,34 +442,34 @@ public class PersistenceBrokerPortletReg
{
copy.addSupportedPublishingEvent(eventDefRef.getQName());
}
-
+
for (SecurityRoleRef secRoleRef : source.getSecurityRoleRefs())
{
SecurityRoleRef copySecRoleRef =
copy.addSecurityRoleRef(secRoleRef.getRoleName());
copySecRoleRef.setRoleLink(secRoleRef.getRoleLink());
-
+
for (Description desc : secRoleRef.getDescriptions())
{
Description copyDesc =
copySecRoleRef.addDescription(desc.getLang());
copyDesc.setDescription(desc.getDescription());
}
}
-
+
for (Supports supports : source.getSupports())
{
Supports copySupports = copy.addSupports(supports.getMimeType());
-
+
for (String portletMode : supports.getPortletModes())
{
copySupports.addPortletMode(portletMode);
}
-
+
for (String windowState : supports.getWindowStates())
{
copySupports.addWindowState(windowState);
}
}
-
+
for (Language language : source.getLanguages())
{
Language copyLanguage = copy.addLanguage(language.getLocale());
@@ -443,23 +478,23 @@ public class PersistenceBrokerPortletReg
copyLanguage.setKeywords(language.getKeywords());
copyLanguage.setSupportedLocale(language.isSupportedLocale());
}
-
+
for (ContainerRuntimeOption runtimeOption :
source.getContainerRuntimeOptions())
{
ContainerRuntimeOption copyRuntimeOption =
copy.addContainerRuntimeOption(runtimeOption.getName());
-
+
for (String value : runtimeOption.getValues())
{
copyRuntimeOption.addValue(value);
}
}
-
+
copy.getSupportedPublicRenderParameters().addAll(source.getSupportedPublicRenderParameters());
-
+
//savePortletDefinition(copy);
try
{
- updatePortletApplication(source.getApplication());
+ updatePortletApplication(destApp);
}
catch (RegistryException e)
{
@@ -469,11 +504,11 @@ public class PersistenceBrokerPortletReg
{
Preference copyPref = copy.addDescriptorPreference(pref.getName());
copyPref.setReadOnly(pref.isReadOnly());
-
+
for (String value : pref.getValues())
{
copyPref.addValue(value);
- }
+ }
}
try
{
@@ -481,8 +516,60 @@ public class PersistenceBrokerPortletReg
}
catch (Throwable e)
{
- source.getApplication().getPortlets().remove(copy);
- throw new FailedToStorePortletDefinitionException(e);
+ destApp.getClones().remove(copy);
+ throw new FailedToStorePortletDefinitionException(e);
+ }
+ PortletDefinition pd =
getPortletDefinitionByUniqueName(PortletRegistryHelper.makeUniqueName(source.getApplication().getName(),
newPortletName));
+ PortletApplication pa = pd.getApplication();
+ // reindex
+ if (searchEngine != null)
+ {
+ searchEngine.remove(pa);
+ searchEngine.remove(pa.getPortlets());
+ searchEngine.remove(pa.getClones());
+ searchEngine.add(pa);
+ searchEngine.add(pa.getPortlets());
+ searchEngine.add(pa.getClones());
+ }
+ return pd;
+ }
+
+ public int restoreClones(PortletApplication pa)
+ throws RegistryException
+ {
+ int count = 0;
+ Criteria criteria = new Criteria();
+ criteria.addEqualTo("cloneParent", pa.getName());
+ Collection<PortletDefinitionImpl> clones =
getPersistenceBrokerTemplate().getCollectionByQuery(
+ QueryFactory.newQuery(PortletDefinitionImpl.class, criteria));
+ for (PortletDefinitionImpl pd : clones)
+ {
+ if (pd.isClone())
+ {
+ if (pa.getName().equals(pd.getCloneParent()))
+ {
+ // Restore Clone
+ pd.setApplication(pa);
+ pa.getClones().add(pd);
+ count++;
+ }
+ }
+ }
+ if (count > 0)
+ {
+ updatePortletApplication(pa);
}
- }
+ return count;
+ }
+
+ public void removeAllClones(PortletApplication pa)
+ throws RegistryException
+ {
+ Criteria c = new Criteria();
+ c.addEqualTo("cloneParent", pa.getName());
+
getPersistenceBrokerTemplate().deleteByQuery(QueryFactory.newQuery(PortletDefinitionImpl.class,
c));
+ pa.getClones().clear();
+ this.updatePortletApplication(pa);
+ }
+
}
\ No newline at end of file
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/PortletRegistryHelper.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/PortletRegistryHelper.java?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/PortletRegistryHelper.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/PortletRegistryHelper.java
Fri Feb 25 07:45:03 2011
@@ -71,4 +71,10 @@ public class PortletRegistryHelper
return split;
}
+ public static String makeUniqueName(String appName, String portletName)
+ {
+ return appName +
PersistenceBrokerPortletRegistry.PORTLET_UNIQUE_NAME_SEPARATOR + portletName;
+ }
+
+
}
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/RegistryPortletCache.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/RegistryPortletCache.java?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/RegistryPortletCache.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/RegistryPortletCache.java
Fri Feb 25 07:45:03 2011
@@ -77,10 +77,14 @@ public class RegistryPortletCache implem
public synchronized static void cacheAdd(Identity oid, Object obj)
{
oidCache.remove(oid);
+ PortletDefinition pd = (PortletDefinition)obj;
+ if (pd.getApplication() == null)
+ {
+ return;
+ }
CacheElement entry = new EhCacheElementImpl(oid, obj);
oidCache.put(entry);
- PortletDefinition pd = (PortletDefinition)obj;
DistributedCacheObject wrapper = new RegistryCacheObjectWrapper(oid,
pd.getUniqueName());
nameCache.remove(pd.getUniqueName());
CacheElement nameEntry = nameCache.createElement(pd.getUniqueName(),
wrapper);
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=1074422&r1=1074421&r2=1074422&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
Fri Feb 25 07:45:03 2011
@@ -41,6 +41,7 @@ import org.apache.jetspeed.om.portlet.Ev
import org.apache.jetspeed.om.portlet.Filter;
import org.apache.jetspeed.om.portlet.FilterMapping;
import org.apache.jetspeed.om.portlet.GenericMetadata;
+import org.apache.jetspeed.om.portlet.InitParam;
import org.apache.jetspeed.om.portlet.JetspeedServiceReference;
import org.apache.jetspeed.om.portlet.Listener;
import org.apache.jetspeed.om.portlet.LocaleEncodingMapping;
@@ -96,6 +97,7 @@ public class PortletApplicationDefinitio
private List<DisplayName> displayNames;
private List<SecurityRole> roles;
private List<PortletDefinition> portlets;
+ private List<PortletDefinition> clones;
private List<EventDefinition> eventDefinitions;
private List<PublicRenderParameter> publicRenderParameters;
private List<CustomPortletMode> customPortletModes;
@@ -359,6 +361,18 @@ public class PortletApplicationDefinitio
return null;
}
+ public PortletDefinition getClone(String cloneName)
+ {
+ for (PortletDefinition clone : getClones())
+ {
+ if (clone.getPortletName().equals(cloneName))
+ {
+ return clone;
+ }
+ }
+ return null;
+ }
+
@SuppressWarnings("unchecked")
public List<PortletDefinition> getPortlets()
{
@@ -369,6 +383,17 @@ public class PortletApplicationDefinitio
return portlets;
}
+ @SuppressWarnings("unchecked")
+ public List<PortletDefinition> getClones()
+ {
+ if (clones == null)
+ {
+ clones = CollectionUtils.createList();
+ }
+ return clones;
+ }
+
+
public PortletDefinition addPortlet(String name)
{
if (getPortlet(name) != null)
@@ -382,6 +407,19 @@ public class PortletApplicationDefinitio
return portlet;
}
+ public PortletDefinition addClone(String name)
+ {
+ if (getClone(name) != null)
+ {
+ throw new IllegalArgumentException("Portlet/Clone with name:
"+name+" already defined");
+ }
+ PortletDefinitionImpl clone = new
PortletDefinitionImpl(this.getName());
+ clone.setPortletName(name);
+ clone.setApplication(this);
+ getClones().add(clone);
+ return clone;
+ }
+
@SuppressWarnings("unchecked")
public List<EventDefinition> getEventDefinitions()
{
@@ -981,6 +1019,11 @@ public class PortletApplicationDefinitio
{
((Support)pd).postLoad(this);
}
+ for (PortletDefinition clone : clones)
+ {
+ ((Support)clone).postLoad(this);
+ }
+
}
/// PersistenceBrokerAware interface implementation
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=1074422&r1=1074421&r2=1074422&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
Fri Feb 25 07:45:03 2011
@@ -73,7 +73,8 @@ public class PortletDefinitionImpl imple
protected String preferenceValidatorClassname;
private Integer expirationCache;
private String cacheScope;
-
+ private String cloneParent = null;
+
/** Metadata property */
private Collection<LocalizedField> metadataFields = null;
@@ -100,6 +101,11 @@ public class PortletDefinitionImpl imple
{
}
+ public PortletDefinitionImpl(String cloneParent)
+ {
+ this.cloneParent = cloneParent;
+ }
+
public PortletApplication getApplication()
{
return app;
@@ -757,4 +763,13 @@ public class PortletDefinitionImpl imple
return this.addSupportedPublishingEvent(qname);
}
+ public boolean isClone()
+ {
+ return (cloneParent != null);
+ }
+
+ public String getCloneParent()
+ {
+ return this.cloneParent;
+ }
}
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/serializer/JetspeedRegistrySerializer.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/serializer/JetspeedRegistrySerializer.java?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/serializer/JetspeedRegistrySerializer.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/main/java/org/apache/jetspeed/serializer/JetspeedRegistrySerializer.java
Fri Feb 25 07:45:03 2011
@@ -107,11 +107,13 @@ public class JetspeedRegistrySerializer
for (PortletApplication pa : registry.getPortletApplications())
{
List<PortletDefinition> portlets = pa.getPortlets();
+ List<PortletDefinition> clones = pa.getClones();
if (searchEngine != null)
{
- List<Object> list = new
ArrayList<Object>(portlets.size() + 1);
+ List<Object> list = new
ArrayList<Object>(portlets.size() + clones.size() + 1);
list.add(pa);
list.addAll(portlets);
+ list.addAll(clones);
searchEngine.remove(list);
}
registry.removeApplication(pa);
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/TestPortletRegistryDAO.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/TestPortletRegistryDAO.java?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/TestPortletRegistryDAO.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/java/org/apache/jetspeed/components/portletregistry/TestPortletRegistryDAO.java
Fri Feb 25 07:45:03 2011
@@ -133,7 +133,7 @@ public class TestPortletRegistryDAO exte
final String appName = "App_1";
final String sourcePortletName = "Portlet 1";
final String clonedPortletName = "ClonedPortlet 1";
-
+
PortletApplication app =
portletRegistry.getPortletApplication(appName);
assertNotNull("Portlet application, " + appName + ", is not found.",
app);
@@ -148,9 +148,12 @@ public class TestPortletRegistryDAO exte
{
Collection<LocalizedField> sourceFields =
sourcePortlet.getMetadata().getFields();
portletRegistry.clonePortletDefinition(sourcePortlet,
clonedPortletName);
- clonedPortlet = app.getPortlet(clonedPortletName);
+ clonedPortlet = app.getClone(clonedPortletName);
assertNotNull("Cloned portlet is not found after invoking cloning
method.", clonedPortlet);
+ assertTrue("Portlet should've been a clone",
clonedPortlet.isClone());
+ assertEquals("Portlet clone parent not matching parent app",
clonedPortlet.getCloneParent(), app.getName());
+
Collection<LocalizedField> clonedFields =
clonedPortlet.getMetadata().getFields();
assertEquals("The metadata fields count is not equals.",
sourceFields.size(), clonedFields.size());
@@ -179,10 +182,52 @@ public class TestPortletRegistryDAO exte
{
if (clonedPortlet != null)
{
- app.getPortlets().remove(clonedPortlet);
+ List<PortletDefinition> clones = app.getClones();
+ assertEquals("count of clones off", 1, clones.size());
+ clones.remove(clonedPortlet);
portletRegistry.updatePortletApplication(app);
+ PortletApplication testApp =
portletRegistry.getPortletApplication("App_1");
+ clones = testApp.getClones();
+ assertEquals("count of clones should be zero", 0,
clones.size());
}
}
+ // test restoring clones
+ try
+ {
+ createApplicationAndPortlet("cloneTest", "/cloneTest",
"SourcePortlet", "Title Source Portlet", false);
+ PortletApplication testApp =
portletRegistry.getPortletApplication("cloneTest");
+ assertNotNull("test app is null", testApp);
+ assertEquals("test App name not what expected", "cloneTest",
testApp.getName());
+ PortletDefinition srcPortlet = testApp.getPortlet("SourcePortlet");
+ assertNotNull("src portlet is null", srcPortlet);
+ assertEquals("src portlet title is not what expected", "Title
Source Portlet", srcPortlet.getPortletInfo().getTitle() );
+
+ PortletDefinition myClone =
portletRegistry.clonePortletDefinition(srcPortlet, "restorePortlet");
+ assertNotNull("myClone portlet is null", myClone);
+ assertEquals("myClone portlet name is not what expected",
myClone.getPortletName(), "restorePortlet");
+ assertEquals("expecting one clone ", 1,
testApp.getClones().size());
+
+ portletRegistry.removeApplication(testApp);
+ testApp = portletRegistry.getPortletApplication("cloneTest");
+ assertNull("test app should be null", testApp);
+
+ createApplicationAndPortlet("cloneTest", "/cloneTest",
"SourcePortlet", "Title Source Portlet", false);
+ PortletApplication recreated =
portletRegistry.getPortletApplication("cloneTest");
+ assertNotNull("recreated test app is null", recreated);
+ int count = portletRegistry.restoreClones(recreated);
+ assertEquals("Expected to restore one clone", 1, count);
+ PortletDefinition cpd = recreated.getClone("restorePortlet");
+ assertEquals("Expected clone to be named 'restorePortlet' ",
cpd.getPortletName(), "restorePortlet");
+ }
+ finally
+ {
+ PortletApplication cleanup =
portletRegistry.getPortletApplication("cloneTest");
+ assertNotNull("cleanup app is null", cleanup);
+ assertEquals("expecting one clone ", 1,
cleanup.getClones().size());
+ portletRegistry.removeAllClones(cleanup);
+ assertEquals("expecting zero clones ", 0,
cleanup.getClones().size());
+ portletRegistry.removeApplication(cleanup);
+ }
}
private static List<LocalizedField>
findLocalizedFieldsByNameAndLocale(final Collection<LocalizedField>
sourceFields, final String name, final Locale locale)
@@ -245,6 +290,12 @@ public class TestPortletRegistryDAO exte
*/
private void buildTestData() throws RegistryException, LockFailedException
{
+ createApplicationAndPortlet("App_1", "/app1", "Portlet 1", "Portlet
1", true);
+ }
+
+ private void createApplicationAndPortlet(String appName, String
appContextPath, String portletName, String title, boolean create20Data)
+ throws RegistryException, LockFailedException
+ {
String lang = Locale.getDefault().toString();
// start clean
@@ -257,8 +308,8 @@ public class TestPortletRegistryDAO exte
// Create an Application and a Web app
PortletApplicationDefinitionImpl app = new
PortletApplicationDefinitionImpl();
- app.setName("App_1");
- app.setContextPath("/app1");
+ app.setName(appName);
+ app.setContextPath(appContextPath);
app.addDescription(Locale.FRENCH.toString()).setDescription("Description: Le
fromage est dans mon pantalon!");
app.addDisplayName(Locale.FRENCH.toString()).setDisplayName("Display
Name: Le fromage est dans mon pantalon!");
@@ -274,7 +325,7 @@ public class TestPortletRegistryDAO exte
addDublinCore(app.getMetadata());
- PortletDefinition portlet = app.addPortlet("Portlet 1");
+ PortletDefinition portlet = app.addPortlet(portletName);
portlet.setPortletClass("org.apache.Portlet");
portlet.addDescription(lang).setDescription("Portlet description.");
portlet.addDisplayName(lang).setDisplayName("Portlet display Name.");
@@ -291,8 +342,8 @@ public class TestPortletRegistryDAO exte
pref.addValue("value 2");
Language language = portlet.addLanguage(Locale.getDefault());
- language.setTitle("Portlet 1");
- language.setShortTitle("Portlet 1");
+ language.setTitle(title);
+ language.setShortTitle(title);
Supports supports = portlet.addSupports("html/text");
supports.addPortletMode(MODE_EDIT);
@@ -302,12 +353,15 @@ public class TestPortletRegistryDAO exte
supports = portlet.addSupports("wml");
supports.addPortletMode(MODE_HELP);
supports.addPortletMode(MODE_VIEW);
-
- build20TestData(app, portlet);
+
+ if (create20Data)
+ {
+ build20TestData(app, portlet);
+ }
portletRegistry.updatePortletApplication(app);
}
-
+
protected void verifyData(boolean afterUpdates) throws Exception
{
PortletApplication app;
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/resources/registry-test.xml
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/resources/registry-test.xml?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/resources/registry-test.xml
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-registry/src/test/resources/registry-test.xml
Fri Feb 25 07:45:03 2011
@@ -46,29 +46,40 @@
</constructor-arg>
<constructor-arg index="5">
<ref bean="PortletPreferencesProviderImpl" />
- </constructor-arg>
+ </constructor-arg>
</bean>
<bean id="org.apache.jetspeed.request.RequestContextComponent"
class="org.apache.jetspeed.request.MockRequestContextComponent"/>
-
- <bean id="org.apache.jetspeed.components.portletregistry.PortletRegistry"
name="portletRegistry" parent="baseTransactionProxy">
- <property name="proxyInterfaces">
-
<value>org.apache.jetspeed.components.portletregistry.PortletRegistry</value>
- </property>
- <property name="target">
- <ref bean="portletRegistryImpl" />
- </property>
- <property name="transactionAttributes">
- <props>
- <prop
key="register*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
- <prop
key="remove*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
- <prop
key="update*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
- <prop
key="save*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
- <prop key="*">PROPAGATION_SUPPORTS</prop>
- </props>
- </property>
- </bean>
+
+ <bean id="org.apache.jetspeed.components.portletregistry.PortletRegistry"
name="portletRegistry"
+ parent="baseTransactionProxy">
+ <property name="proxyInterfaces">
+
<value>org.apache.jetspeed.components.portletregistry.PortletRegistry</value>
+ </property>
+
+ <property name="target">
+ <ref bean="portletRegistryImpl" />
+ </property>
+ <property name="transactionAttributes">
+ <props>
+ <prop key="register*">
+
PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException
+ </prop>
+ <prop key="remove*">
+
PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException
+ </prop>
+ <prop key="update*">
+
PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException
+ </prop>
+ <prop
key="save*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
+ <prop
key="clone*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
+ <prop
key="restore*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
+ <prop key="*">PROPAGATION_SUPPORTS</prop>
+ </props>
+ </property>
+ </bean>
+
<!-- register JetspeedPortletFactory as RegistryEventLister on the
PortletRegistry -->
<bean id="registerPortletFactoryPortletRegistyEventListener"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
Modified: portals/jetspeed-2/portal/trunk/etc/registration/assembly/registry.xml
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/etc/registration/assembly/registry.xml?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/etc/registration/assembly/registry.xml
(original)
+++ portals/jetspeed-2/portal/trunk/etc/registration/assembly/registry.xml Fri
Feb 25 07:45:03 2011
@@ -42,7 +42,10 @@
</constructor-arg>
<constructor-arg index="5">
<ref bean="portletDefinitionNameCache" />
- </constructor-arg>
+ </constructor-arg>
+ <constructor-arg index="6">
+ <ref bean="org.apache.jetspeed.search.SearchEngine" />
+ </constructor-arg>
</bean>
<bean id="org.apache.jetspeed.components.portletregistry.PortletRegistry"
name="portletRegistry" parent="baseTransactionProxy">
Modified:
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/components/portletregistry/PortletRegistry.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/components/portletregistry/PortletRegistry.java?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/components/portletregistry/PortletRegistry.java
(original)
+++
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/components/portletregistry/PortletRegistry.java
Fri Feb 25 07:45:03 2011
@@ -34,9 +34,27 @@ import org.apache.jetspeed.om.portlet.Po
*/
public interface PortletRegistry
{
+ /**
+ * Retrieves all portlet definitions for this deployment
+ * including both clones and portlet definitions
+ * @return a collection of portlet definitions from all portlet apps
+ */
+ Collection<PortletDefinition> getAllDefinitions();
+
+ /**
+ * Retrieve all portlet definitions system wide
+ * The collection does not include clones
+ * @return a collection of portlet definitions from all portlet apps
+ */
Collection<PortletDefinition> getAllPortletDefinitions();
/**
+ * Retrieve all clone definitions system wide
+ * @return a collection of portlet definitions from all portlet apps
+ */
+ Collection<PortletDefinition> getAllCloneDefinitions();
+
+ /**
* Retrieves a PortletApplication by it's unique name. We use
* PortletApplication interface which extends the Pluto
PortletApplicationDefinition
* and adds additional functionallity to it.
@@ -153,11 +171,31 @@ public interface PortletRegistry
void removeRegistryEventListener(RegistryEventListener listener);
/**
- * Given a portlet definition, create a clone of it, with a new name
- * @param source the portlet definition to be cloned
- * @param newPortletName the unique name of the new portlet definition
+ * Create a portlet instance
+ *
+ * @param source create an instance from this given portlet definition
+ * @param newPortletName a unique portlet name
* @throws FailedToStorePortletDefinitionException
*/
- void clonePortletDefinition(PortletDefinition source, String
newPortletName) throws FailedToStorePortletDefinitionException;
-
+ PortletDefinition clonePortletDefinition(PortletDefinition source, String
newPortletName) throws FailedToStorePortletDefinitionException;
+
+ /**
+ * Restores all orphaned clones to a re-registered portlet application
+ * @param pa
+ * @return
+ * @throws RegistryException
+ */
+ public int restoreClones(PortletApplication pa)
+ throws RegistryException;
+
+
+ /**
+ * Remove all clones from a given portlet application
+ *
+ * @param pa the portlet application
+ * @throws RegistryException
+ */
+ void removeAllClones(PortletApplication pa)
+ throws RegistryException;
+
}
Modified:
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletApplication.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletApplication.java?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletApplication.java
(original)
+++
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletApplication.java
Fri Feb 25 07:45:03 2011
@@ -139,8 +139,11 @@ public interface PortletApplication exte
public GenericMetadata getMetadata();
PortletDefinition getPortlet(String name);
+ PortletDefinition getClone(String name);
List<PortletDefinition> getPortlets();
+ List<PortletDefinition> getClones();
PortletDefinition addPortlet(String name);
+ PortletDefinition addClone(String name);
List<EventDefinition> getEventDefinitions();
EventDefinition addEventDefinition(String name);
Modified:
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletDefinition.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletDefinition.java?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletDefinition.java
(original)
+++
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/portlet/PortletDefinition.java
Fri Feb 25 07:45:03 2011
@@ -19,7 +19,6 @@ package org.apache.jetspeed.om.portlet;
import java.io.Serializable;
import java.util.List;
import java.util.Locale;
-import java.util.ResourceBundle;
import javax.xml.namespace.QName;
@@ -33,6 +32,7 @@ import javax.xml.namespace.QName;
*/
public interface PortletDefinition extends
org.apache.pluto.container.om.portlet.PortletDefinition, Serializable
{
+ final String CLONE_PARENT_INIT_PARAM = "cloneParentPortlet";
PortletApplication getApplication();
InitParam getInitParam(String paramName);
List<InitParam> getInitParams();
@@ -171,4 +171,18 @@ public interface PortletDefinition exten
* @return true only if the internal identities are the same
*/
boolean isSameIdentity(PortletDefinition other);
+
+ /**
+ * Determine if this portlet defintion is a clon
+ */
+ boolean isClone();
+
+ /**
+ * returns the parent portlet definition name from which this
+ * portlet clone was cloned from. If not defined, returns null
+ *
+ * @return the parent application name or null if not a clone
+ */
+ String getCloneParent();
}
+
Modified:
portals/jetspeed-2/portal/trunk/jetspeed-archetype/src/main/resources/archetype-resources/pom.xml
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-archetype/src/main/resources/archetype-resources/pom.xml?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/jetspeed-archetype/src/main/resources/archetype-resources/pom.xml
(original)
+++
portals/jetspeed-2/portal/trunk/jetspeed-archetype/src/main/resources/archetype-resources/pom.xml
Fri Feb 25 07:45:03 2011
@@ -32,7 +32,7 @@
<properties>
<org.apache.portals.jetspeed.version>2.2.2-SNAPSHOT</org.apache.portals.jetspeed.version>
- <org.apache.pluto.version>2.0.0</org.apache.pluto.version>
+ <org.apache.pluto.version>2.0.3-SNAPSHOT</org.apache.pluto.version>
<org.apache.portals.applications.apa-logging.version>1.0</org.apache.portals.applications.apa-logging.version>
<ccpp.version>1.0</ccpp.version>
<org.apache.portals.bridges.common.version>2.0</org.apache.portals.bridges.common.version>
Modified:
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/registry-schema.xml
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/registry-schema.xml?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/registry-schema.xml
(original)
+++
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/registry-schema.xml
Fri Feb 25 07:45:03 2011
@@ -41,7 +41,8 @@ limitations under the License.
<column name="RESOURCE_BUNDLE" size="255" type="VARCHAR"/>
<column name="PREFERENCE_VALIDATOR" size="255" type="VARCHAR"/>
<column name="SECURITY_REF" size="40" type="VARCHAR"/>
- <column name="CACHE_SCOPE" size="30" type="VARCHAR"/>
+ <column name="CACHE_SCOPE" size="30" type="VARCHAR"/>
+ <column name="CLONE_PARENT" required="fals" size="80" type="VARCHAR"/>
</table>
<!--
Modified:
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/registry.xml
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/registry.xml?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/registry.xml
(original)
+++
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/registry.xml
Fri Feb 25 07:45:03 2011
@@ -71,7 +71,10 @@
</constructor-arg>
<constructor-arg index="5">
<ref
bean="org.apache.jetspeed.components.portletpreferences.PortletPreferencesProvider"
/>
- </constructor-arg>
+ </constructor-arg>
+ <constructor-arg index="6">
+ <ref bean="org.apache.jetspeed.search.SearchEngine" />
+ </constructor-arg>
</bean>
<bean id="org.apache.jetspeed.components.portletregistry.PortletRegistry"
name="portletRegistry"
@@ -97,6 +100,7 @@
</prop>
<prop
key="save*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
<prop
key="clone*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
+ <prop
key="restore*">PROPAGATION_REQUIRED,-org.apache.jetspeed.components.portletregistry.RegistryException</prop>
<prop key="*">PROPAGATION_SUPPORTS</prop>
</props>
</property>
Modified: portals/jetspeed-2/portal/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/pom.xml?rev=1074422&r1=1074421&r2=1074422&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/pom.xml (original)
+++ portals/jetspeed-2/portal/trunk/pom.xml Fri Feb 25 07:45:03 2011
@@ -277,7 +277,7 @@
<myfaces.version>1.1.5</myfaces.version>
<ojb.version>1.0.3</ojb.version>
<org.apache.derby.version>10.3.2.1</org.apache.derby.version>
- <org.apache.pluto.version>2.0.3-SNAPSHOT</org.apache.pluto.version>
+ <org.apache.pluto.version>2.0.3-SNAPSHOT</org.apache.pluto.version>
<org.apache.portals.bridges.common.version>2.0</org.apache.portals.bridges.common.version>
<org.apache.portals.bridges.frameworks.version>1.0.4</org.apache.portals.bridges.frameworks.version>
<org.apache.portals.bridges.velocity.version>2.0</org.apache.portals.bridges.velocity.version>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]