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 2004/08/16 20:29:17 UTC
cvs commit: jakarta-jetspeed-2/components/registry/src/java/org/apache/jetspeed/components/portletregistry PortletRegistryComponentImpl.java
taylor 2004/08/16 11:29:17
Modified: components/registry/src/java/META-INF ojb_repository.xml
components/registry/src/java/org/apache/jetspeed/om/portlet/impl
PortletDefinitionImpl.java
PortletApplicationDefinitionImpl.java
components/registry/src/java/org/apache/jetspeed/om/impl
LanguageImpl.java LanguageSetImpl.java
components/registry/src/java/org/apache/jetspeed/components/portletregistry
PortletRegistryComponentImpl.java
Log:
adding support for full language support for JSR 168, contribution from Shinsuke
CVS: ----------------------------------------------------------------------
CVS: PR:
CVS: If this change addresses a PR in the problem report tracking
CVS: database, then enter the PR number(s) here.
CVS: Obtained from:
CVS: If this change has been taken from another system, such as NCSA,
CVS: then name the system in this line, otherwise delete it.
CVS: Submitted by:
CVS: If this code has been contributed to Apache by someone else; i.e.,
CVS: they sent us a patch or a new module, then include their name/email
CVS: address here. If this is your work then delete this line.
CVS: Reviewed by:
CVS: If we are doing pre-commit code reviews and someone else has
CVS: reviewed your changes, include their name(s) here.
CVS: If you have not had it reviewed then delete this line.
Revision Changes Path
1.13 +6 -0 jakarta-jetspeed-2/components/registry/src/java/META-INF/ojb_repository.xml
Index: ojb_repository.xml
===================================================================
RCS file: /home/cvs/jakarta-jetspeed-2/components/registry/src/java/META-INF/ojb_repository.xml,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- ojb_repository.xml 10 Aug 2004 15:02:51 -0000 1.12
+++ ojb_repository.xml 16 Aug 2004 18:29:11 -0000 1.13
@@ -341,6 +341,12 @@
/>
<field-descriptor
+ name="resourceBundle"
+ column="RESOURCE_BUNDLE"
+ jdbc-type="VARCHAR"
+ />
+
+ <field-descriptor
name="preferenceValidatorClassname"
column="PREFERENCE_VALIDATOR"
jdbc-type="VARCHAR"
1.17 +80 -2 jakarta-jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/portlet/impl/PortletDefinitionImpl.java
Index: PortletDefinitionImpl.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/portlet/impl/PortletDefinitionImpl.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- PortletDefinitionImpl.java 14 Aug 2004 00:21:30 -0000 1.16
+++ PortletDefinitionImpl.java 16 Aug 2004 18:29:13 -0000 1.17
@@ -23,15 +23,20 @@
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
+import java.util.StringTokenizer;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
+import javax.portlet.Portlet;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.factory.JetspeedPortletFactoryProxy;
import org.apache.jetspeed.om.common.GenericMetadata;
import org.apache.jetspeed.om.common.MutableDescription;
import org.apache.jetspeed.om.common.MutableDisplayName;
import org.apache.jetspeed.om.common.ParameterComposite;
+import org.apache.jetspeed.om.common.Support;
import org.apache.jetspeed.om.common.portlet.MutablePortletApplication;
import org.apache.jetspeed.om.common.portlet.PortletDefinitionComposite;
import org.apache.jetspeed.om.common.preference.PreferenceComposite;
@@ -76,7 +81,7 @@
* @version $Id$
*
*/
-public class PortletDefinitionImpl implements PortletDefinitionComposite, Serializable
+public class PortletDefinitionImpl implements PortletDefinitionComposite, Serializable, Support
{
private static final Log log = LogFactory.getLog(PortletDefinitionImpl.class);
private long id;
@@ -98,6 +103,8 @@
private DisplayNameSetImpl DNListWrapper = new DisplayNameSetImpl();
private Collection descriptions;
private DescriptionSetImpl descListWrapper = new DescriptionSetImpl(DescriptionImpl.TYPE_PORTLET);
+ private String resourceBundle;
+ private ArrayList supportedLocales;
private Collection contentTypes;
private ContentTypeSetImpl ctListWrapper = new ContentTypeSetImpl();
@@ -124,6 +131,7 @@
//userAttributeSet = new ArrayList();
//userAttributeRefSet = new ArrayList();
contentTypes = new ArrayList();
+ supportedLocales= new ArrayList();
}
catch (RuntimeException e)
{
@@ -168,6 +176,22 @@
{
if ( languageSet != null )
langListWrapper.setInnerCollection(languageSet);
+ try
+ {
+ Portlet portlet = JetspeedPortletFactoryProxy.loadPortletClass(getClassName());
+ if (portlet != null)
+ {
+ setPortletClassLoader(portlet.getClass().getClassLoader());
+ langListWrapper.setClassLoader(getPortletClassLoader());
+ }
+ }
+ catch (InstantiationException e)
+ {
+ }
+ catch (IllegalAccessException e)
+ {
+ }
+
return langListWrapper;
}
@@ -765,4 +789,58 @@
{
this.metadataFields = metadataFields;
}
+
+ /**
+ * @return
+ */
+ public String getResourceBundle()
+ {
+ return resourceBundle;
+ }
+
+ /**
+ * @param string
+ */
+ public void setResourceBundle(String string)
+ {
+ resourceBundle = string;
+ }
+
+ public void addSupportedLocale(String locale)
+ {
+ // parse locale String
+ StringTokenizer tokenizer = new StringTokenizer(locale, "_");
+ String[] localeDef = new String[3];
+ for (int i = 0; i < 3; i++)
+ {
+ if (tokenizer.hasMoreTokens())
+ {
+ localeDef[i] = tokenizer.nextToken();
+ }
+ else
+ {
+ localeDef[i] = "";
+ }
+ }
+ supportedLocales.add(new Locale(localeDef[0], localeDef[1], localeDef[2]));
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.om.Support#postLoad(java.lang.Object)
+ */
+ public void postLoad(Object parameter) throws Exception
+ {
+ if (resourceBundle != null)
+ {
+ langListWrapper.setResources(resourceBundle);
+ }
+ Portlet portlet = JetspeedPortletFactoryProxy.loadPortletClass(getClassName());
+ if (portlet != null)
+ {
+ setPortletClassLoader(portlet.getClass().getClassLoader());
+ langListWrapper.setClassLoader(getPortletClassLoader());
+ }
+ langListWrapper.postLoad(this.supportedLocales);
+ }
+
}
1.19 +17 -2 jakarta-jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/portlet/impl/PortletApplicationDefinitionImpl.java
Index: PortletApplicationDefinitionImpl.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/portlet/impl/PortletApplicationDefinitionImpl.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- PortletApplicationDefinitionImpl.java 14 Aug 2004 00:21:30 -0000 1.18
+++ PortletApplicationDefinitionImpl.java 16 Aug 2004 18:29:13 -0000 1.19
@@ -19,9 +19,11 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Iterator;
import org.apache.jetspeed.om.common.GenericMetadata;
import org.apache.jetspeed.om.common.JetspeedServiceReference;
+import org.apache.jetspeed.om.common.Support;
import org.apache.jetspeed.om.common.UserAttribute;
import org.apache.jetspeed.om.common.UserAttributeRef;
import org.apache.jetspeed.om.common.portlet.MutablePortletApplication;
@@ -39,7 +41,7 @@
* @version $Id$
* @since 1.0
*/
-public class PortletApplicationDefinitionImpl implements MutablePortletApplication, Serializable
+public class PortletApplicationDefinitionImpl implements MutablePortletApplication, Serializable, Support
{
/**
* Unique id of the application. This serves as the primary key in database
@@ -371,4 +373,17 @@
this.checksumLong = checksum;
this.checksum = Long.toString(checksum);
}
+
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.om.common.Support#postLoad(java.lang.Object)
+ */
+ public void postLoad(Object parameter) throws Exception
+ {
+ Iterator portletDefinitions = getPortletDefinitions().iterator();
+ while (portletDefinitions.hasNext())
+ {
+ ((Support) portletDefinitions.next()).postLoad(this);
+ }
+ }
+
}
1.5 +95 -6 jakarta-jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/impl/LanguageImpl.java
Index: LanguageImpl.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/impl/LanguageImpl.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- LanguageImpl.java 8 Jul 2004 19:22:05 -0000 1.4
+++ LanguageImpl.java 16 Aug 2004 18:29:14 -0000 1.5
@@ -18,7 +18,10 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
import java.util.Iterator;
+import java.util.ListResourceBundle;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.StringTokenizer;
@@ -26,6 +29,7 @@
import org.apache.jetspeed.om.common.MutableLanguage;
import org.apache.jetspeed.util.HashCodeBuilder;
import org.apache.pluto.om.common.Language;
+import org.apache.pluto.util.Enumerator;
/**
*
@@ -47,10 +51,11 @@
public class LanguageImpl implements MutableLanguage, Serializable
{
- private Locale locale = new Locale("en");
+ private Locale locale; // new Locale("en");
private String title;
private String shortTitle;
private Collection keywords;
+ private ResourceBundle resourceBundle;
/**
* This field can be used by persistence tools for storing PK info
@@ -60,16 +65,32 @@
protected long portletId;
- protected static final String RESOURCE_BUNDLE_NAME = "portlet";
-
public LanguageImpl()
{
+ this(Locale.getDefault(), null, "", "", "");
}
public LanguageImpl(Locale locale, String title)
{
+ this(locale, null, "", "", "");
+ }
+
+ public LanguageImpl(
+ Locale locale,
+ ResourceBundle bundle,
+ String defaultTitle,
+ String defaultShortTitle,
+ String defaultKeyWords)
+ {
+ this.resourceBundle =
+ new ResourceBundleImpl(
+ bundle,
+ new DefaultsResourceBundle(defaultTitle, defaultShortTitle, defaultKeyWords));
+
this.locale = locale;
- this.title = title;
+ setTitle(this.resourceBundle.getString("javax.portlet.title"));
+ setShortTitle(this.resourceBundle.getString("javax.portlet.short-title"));
+ setKeywords(this.resourceBundle.getString("javax.portlet.keywords"));
}
/**
@@ -115,7 +136,8 @@
*/
public ResourceBundle getResourceBundle()
{
- return ResourceBundle.getBundle(RESOURCE_BUNDLE_NAME, getLocale(), Thread.currentThread().getContextClassLoader());
+
+ return resourceBundle;
}
/**
@@ -195,6 +217,73 @@
while (tok.hasMoreTokens())
{
keywords.add(tok.nextToken());
+ }
+ }
+
+ private static class DefaultsResourceBundle extends ListResourceBundle
+ {
+ private Object[][] resources;
+
+ public DefaultsResourceBundle(String defaultTitle, String defaultShortTitle, String defaultKeyWords)
+ {
+ if (defaultTitle == null)
+ {
+ defaultTitle = "";
+ }
+ if (defaultShortTitle == null)
+ {
+ defaultShortTitle = "";
+ }
+ if (defaultKeyWords == null)
+ {
+ defaultKeyWords = "";
+ }
+ resources = new Object[][] { { "javax.portlet.title", defaultTitle }, {
+ "javax.portlet.short-title", defaultShortTitle }, {
+ "javax.portlet.keywords", defaultKeyWords
+ }
+ };
+ }
+
+ protected Object[][] getContents()
+ {
+ return resources;
+ }
+ }
+
+ private static class ResourceBundleImpl extends ResourceBundle
+ {
+ private HashMap data;
+
+ public ResourceBundleImpl(ResourceBundle bundle, ResourceBundle defaults)
+ {
+ data = new HashMap();
+
+ importData(defaults);
+ importData(bundle);
+ }
+
+ private void importData(ResourceBundle bundle)
+ {
+ if (bundle != null)
+ {
+ for (Enumeration enum = bundle.getKeys(); enum.hasMoreElements();)
+ {
+ String key = (String) enum.nextElement();
+ Object value = bundle.getObject(key);
+ data.put(key, value);
+ }
+ }
+ }
+
+ protected Object handleGetObject(String key)
+ {
+ return data.get(key);
+ }
+
+ public Enumeration getKeys()
+ {
+ return new Enumerator(data.keySet());
}
}
1.4 +137 -4 jakarta-jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/impl/LanguageSetImpl.java
Index: LanguageSetImpl.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/impl/LanguageSetImpl.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- LanguageSetImpl.java 8 Jul 2004 19:22:05 -0000 1.3
+++ LanguageSetImpl.java 16 Aug 2004 18:29:14 -0000 1.4
@@ -21,10 +21,14 @@
import java.util.HashSet;
import java.util.Iterator;
import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import org.apache.commons.lang.StringUtils;
import org.apache.jetspeed.util.JetspeedLocale;
import org.apache.jetspeed.om.common.MutableLanguage;
+import org.apache.jetspeed.om.common.Support;
import org.apache.pluto.om.common.Language;
import org.apache.pluto.om.common.LanguageSet;
@@ -36,11 +40,12 @@
* @version $Id$
*
*/
-public class LanguageSetImpl implements LanguageSet, Serializable
+public class LanguageSetImpl implements LanguageSet, Serializable, Support
{
+ private ClassLoader classLoader = null;
-
+ private String resources;
protected Collection innerCollection;
/**
@@ -96,8 +101,20 @@
if (lang.getLocale().equals(locale))
{
+ if (resources != null)
+ {
+ return createLanguage(
+ lang.getLocale(),
+ loadResourceBundle(lang.getLocale()),
+ lang.getTitle(),
+ lang.getShortTitle(),
+ StringUtils.join(lang.getKeywords(), ","));
+ }
+ else
+ {
return lang;
}
+ }
else if (lang.getLocale().getLanguage().equals(locale.getLanguage()))
{
fallBack = lang;
@@ -106,7 +123,25 @@
}
if (fallBack == null)
{
- fallBack = new LanguageImpl(locale, "");
+ ResourceBundle bundle = null;
+ if (resources != null)
+ {
+ bundle = loadResourceBundle(locale);
+ }
+ fallBack = createLanguage(locale, bundle);
+ }
+ else
+ {
+ if (resources != null)
+ {
+ fallBack =
+ createLanguage(
+ fallBack.getLocale(),
+ loadResourceBundle(fallBack.getLocale()),
+ fallBack.getTitle(),
+ fallBack.getShortTitle(),
+ StringUtils.join(fallBack.getKeywords(), ","));
+ }
}
return fallBack;
}
@@ -163,4 +198,102 @@
return innerCollection.size();
}
+ /**
+ * @param string
+ */
+ public void setResources(String string)
+ {
+ resources = string;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.om.common.Support#postLoad(java.lang.Object)
+ */
+ public void postLoad(Object parameter) throws Exception
+ {
+ Iterator iter = ((Collection) parameter).iterator();
+ while (iter.hasNext())
+ {
+ Locale locale = (Locale) iter.next();
+ Language language = createLanguage(locale, null);
+ remove(language);
+ add(language);
+ }
+ }
+
+ protected ResourceBundle loadResourceBundle(Locale locale)
+ {
+ ResourceBundle resourceBundle = null;
+ try
+ {
+ if (classLoader != null)
+ {
+ resourceBundle=ResourceBundle.getBundle(resources, locale, classLoader);
+ }
+ else
+ {
+ resourceBundle=ResourceBundle.getBundle(resources, locale, Thread.currentThread().getContextClassLoader());
+ }
+ }
+ catch (MissingResourceException x)
+ {
+ return null;
+ }
+ return resourceBundle;
+ }
+
+ /**
+ *
+ * Sets Portlet Class Loader
+ *
+ * @param loader
+ */
+ public void setClassLoader(ClassLoader loader)
+ {
+ classLoader = loader;
+ }
+
+ /**
+ * Creates Language instance from a default Language
+ *
+ * @param locale
+ * @param bundle
+ * @return
+ */
+ private Language createLanguage(Locale locale, ResourceBundle bundle)
+ {
+ String title = "";
+ String shortTitle = "";
+ String keywords = "";
+ Language defaultLang = get(getDefaultLocale());
+
+ if (defaultLang != null)
+ {
+ title = defaultLang.getTitle();
+ shortTitle = defaultLang.getShortTitle();
+ keywords = StringUtils.join(defaultLang.getKeywords(), ",");
+ }
+ return createLanguage(locale, bundle, title, shortTitle, keywords);
+ }
+
+ /**
+ * Creates Language instance.
+ *
+ * @param locale
+ * @param bundle
+ * @param title
+ * @param shortTitle
+ * @param keywords
+ * @return
+ */
+ private Language createLanguage(
+ Locale locale,
+ ResourceBundle bundle,
+ String title,
+ String shortTitle,
+ String keywords)
+ {
+ LanguageImpl lang = new LanguageImpl(locale, bundle, title, shortTitle, keywords);
+ return (Language) lang;
+ }
}
1.15 +52 -7 jakarta-jetspeed-2/components/registry/src/java/org/apache/jetspeed/components/portletregistry/PortletRegistryComponentImpl.java
Index: PortletRegistryComponentImpl.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed-2/components/registry/src/java/org/apache/jetspeed/components/portletregistry/PortletRegistryComponentImpl.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- PortletRegistryComponentImpl.java 2 Jul 2004 13:31:56 -0000 1.14
+++ PortletRegistryComponentImpl.java 16 Aug 2004 18:29:17 -0000 1.15
@@ -29,6 +29,7 @@
import org.apache.jetspeed.components.persistence.store.LockFailedException;
import org.apache.jetspeed.components.persistence.store.PersistenceStore;
import org.apache.jetspeed.om.common.MutableLanguage;
+import org.apache.jetspeed.om.common.Support;
import org.apache.jetspeed.om.common.portlet.MutablePortletApplication;
import org.apache.jetspeed.om.common.portlet.PortletDefinitionComposite;
import org.apache.jetspeed.om.impl.LanguageImpl;
@@ -150,7 +151,19 @@
{
PersistenceStore store = getPersistenceStore();
prepareTransaction(store);
- return new ArrayList(store.getExtent(portletDefClass));
+ Collection pds = store.getExtent(portletDefClass);
+ Iterator itrPds = pds.iterator();
+ while (itrPds.hasNext())
+ {
+ try
+ {
+ ((Support) itrPds.next()).postLoad(this);
+ }
+ catch (Exception e)
+ {
+ }
+ }
+ return new ArrayList(pds);
}
public PersistenceStore getPersistenceStore()
@@ -174,7 +187,7 @@
Filter filter = store.newFilter();
filter.addEqualTo("id", new Long(id.toString()));
Object query = store.newQuery(portletAppClass, filter);
- return (MutablePortletApplication) store.getObjectByQuery(query);
+ return (MutablePortletApplication) postLoad(store.getObjectByQuery(query));
}
private void prepareTransaction(PersistenceStore store)
@@ -201,7 +214,7 @@
Filter filter = store.newFilter();
filter.addEqualTo("name", name);
Object query = store.newQuery(portletAppClass, filter);
- return (MutablePortletApplication) store.getObjectByQuery(query);
+ return (MutablePortletApplication) postLoad(store.getObjectByQuery(query));
}
/**
@@ -220,7 +233,7 @@
Filter filter = store.newFilter();
filter.addEqualTo("applicationIdentifier", ident);
Object query = store.newQuery(portletAppClass, filter);
- return (MutablePortletApplication) store.getObjectByQuery(query);
+ return (MutablePortletApplication) postLoad(store.getObjectByQuery(query));
}
/**
@@ -235,7 +248,19 @@
{
PersistenceStore store = getPersistenceStore();
prepareTransaction(store);
- return new ArrayList(store.getExtent(portletAppClass));
+ Collection pas = store.getExtent(portletAppClass);
+ Iterator itrPas = pas.iterator();
+ while (itrPas.hasNext())
+ {
+ try
+ {
+ ((Support) itrPas.next()).postLoad(this);
+ }
+ catch (Exception e)
+ {
+ }
+ }
+ return new ArrayList(pas);
}
/**
@@ -264,7 +289,7 @@
log.error(msg);
throw new IllegalStateException(msg);
}
- return getStoreableInstance(portlet);
+ return getStoreableInstance((PortletDefinitionComposite) postLoad(portlet));
}
else
{
@@ -312,7 +337,7 @@
}
portlet.setPortletApplicationDefinition(app);
}
- return getStoreableInstance(portlet);
+ return getStoreableInstance((PortletDefinitionComposite)postLoad(portlet));
}
else
{
@@ -514,5 +539,25 @@
{
return null;
}
+ }
+
+ private Object postLoad(Object obj)
+ {
+ if (obj == null)
+ {
+ return obj;
+ }
+
+ if (obj instanceof Support)
+ {
+ try
+ {
+ ((Support) obj).postLoad(obj);
+ }
+ catch (Exception e)
+ {
+ }
+ }
+ return obj;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org