You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by at...@apache.org on 2008/05/04 00:02:19 UTC

svn commit: r653151 - in /portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto: core/ internal/ internal/impl/ spi/optional/

Author: ate
Date: Sat May  3 15:02:19 2008
New Revision: 653151

URL: http://svn.apache.org/viewvc?rev=653151&view=rev
Log:
Refactoring of Preferences:
- PortletEntity.getDefaultPreferences() moved into PortletPreferencesService
- PortletEntity.getPreferencesValidator() moved into PortletPreferencesImpl

With these changes, PortletEntity is no longer tied to InternalPortletPreference and all preferences handling is abstracted away to the core and the PortletPreferencesService

Modified:
    portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/core/DefaultPortletPreferencesService.java
    portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/InternalPortletPreference.java
    portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/PortletEntity.java
    portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletEntityImpl.java
    portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletPreferenceImpl.java
    portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletPreferencesImpl.java
    portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletPreferencesService.java

Modified: portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/core/DefaultPortletPreferencesService.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/core/DefaultPortletPreferencesService.java?rev=653151&r1=653150&r2=653151&view=diff
==============================================================================
--- portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/core/DefaultPortletPreferencesService.java (original)
+++ portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/core/DefaultPortletPreferencesService.java Sat May  3 15:02:19 2008
@@ -26,6 +26,10 @@
 import org.apache.pluto.PortletContainerException;
 import org.apache.pluto.PortletWindow;
 import org.apache.pluto.internal.InternalPortletPreference;
+import org.apache.pluto.internal.impl.PortletPreferenceImpl;
+import org.apache.pluto.om.portlet.Portlet;
+import org.apache.pluto.om.portlet.PortletPreference;
+import org.apache.pluto.om.portlet.PortletPreferences;
 import org.apache.pluto.spi.optional.PortletPreferencesService;
 
 /**
@@ -51,7 +55,7 @@
 	 * The in-memory portlet preferences storage: key is the preference name as
 	 * a string, value is an array of PortletPreference objects.
 	 */
-	private Map storage = new HashMap();
+	private Map<String,InternalPortletPreference[]> storage = new HashMap<String,InternalPortletPreference[]>();
 
 
 	// Constructor -------------------------------------------------------------
@@ -66,6 +70,48 @@
 
 	// PortletPreferencesService Impl ------------------------------------------
 
+    /**
+     * Returns an array of default preferences for a PortletWindow. The default
+     * preferences are retrieved from the portlet application descriptor.
+     * <p>
+     * Data retrieved from <code>portlet.xml</code> are injected into the domain
+     * object <code>PortletPreferenceDefinition</code>. This method converts the domain
+     * objects into <code>PortletPreference</code> objects.
+     * </p>
+     * <p>
+     * Note that if no value is bound to a given preference key,
+     * <code>PortletPreferenceDefinition.getValues()</code> will return an empty string
+     * list, but the value array of <code>PortletPreference</code> should be set
+     * to null (instead of an empty array).
+     * </p>
+     * <p>
+     * This method never returns null, but the values held by PortletPreference
+     * may be null.
+     * </p>
+     * @return the preference set
+     * 
+     * @see org.apache.pluto.descriptors.portlet.PortletPreferenceDD
+     */
+    public InternalPortletPreference[] getDefaultPreferences( PortletWindow portletWindow,
+                                                              PortletRequest request )
+      throws PortletContainerException {
+        InternalPortletPreference[] preferences = null;
+        Portlet portletD = portletWindow.getPortletEntity().getPortletDefinition();
+        PortletPreferences prefsD = portletD.getPortletPreferences();
+        if (prefsD != null && prefsD.getPortletPreferences() != null) {
+            preferences = new InternalPortletPreference[prefsD.getPortletPreferences().size()];
+            int index = 0;
+            for (PortletPreference prefD : prefsD.getPortletPreferences()) {
+                String[] values = null;
+                if (prefD.getValues() != null && prefD.getValues().size() > 0) {
+                    values = prefD.getValues().toArray(new String[prefD.getValues().size()]);
+                }
+                preferences[index++] = new PortletPreferenceImpl(prefD.getName(), values, prefD.isReadOnly());
+            }
+        }
+        return preferences;
+    }
+
 	/**
 	 * Returns the stored portlet preferences array. The preferences managed by
 	 * this service should be protected from being directly accessed, so this
@@ -81,8 +127,7 @@
 			PortletRequest request)
 	throws PortletContainerException {
         String key = getFormattedKey(portletWindow, request);
-        InternalPortletPreference[] preferences = (InternalPortletPreference[])
-        		storage.get(key);
+        InternalPortletPreference[] preferences = storage.get(key);
         if (preferences == null) {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("No portlet preferences found for: " + key);
@@ -159,14 +204,11 @@
     			new InternalPortletPreference[preferences.length];
     	for (int i = 0; i < preferences.length; i++) {
     		if (preferences[i] != null) {
-    			copy[i] = (InternalPortletPreference) preferences[i].clone();
+    			copy[i] = preferences[i].clone();
     		} else {
     			copy[i] = null;
     		}
     	}
     	return copy;
     }
-
-}
-
-
+}
\ No newline at end of file

Modified: portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/InternalPortletPreference.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/InternalPortletPreference.java?rev=653151&r1=653150&r2=653151&view=diff
==============================================================================
--- portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/InternalPortletPreference.java (original)
+++ portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/InternalPortletPreference.java Sat May  3 15:02:19 2008
@@ -50,6 +50,6 @@
      * Clone a copy of itself.
      * @return a copy of itself.
      */
-    public Object clone();
+    public InternalPortletPreference clone();
 
 }

Modified: portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/PortletEntity.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/PortletEntity.java?rev=653151&r1=653150&r2=653151&view=diff
==============================================================================
--- portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/PortletEntity.java (original)
+++ portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/PortletEntity.java Sat May  3 15:02:19 2008
@@ -16,9 +16,6 @@
  */
 package org.apache.pluto.internal;
 
-import javax.portlet.PreferencesValidator;
-import javax.portlet.ValidatorException;
-
 import org.apache.pluto.om.portlet.Portlet;
 
 /**
@@ -30,46 +27,11 @@
  *
  */
 public interface PortletEntity {
-
-    /**
-     * Returns an array of default preferences of this portlet. The default
-     * preferences are retrieved from the portlet application descriptor.
-     * <p>
-     * Data retrieved from <code>portlet.xml</code> are injected into the domain
-     * object <code>PortletPreferenceDD</code>. This method converts the domain
-     * objects into <code>PortletPreference</code> objects.
-     * </p>
-     * <p>
-     * Note that if no value is bound to a given preference key,
-     * <code>PortletPreferenceDD.getValues()</code> will return an empty string
-     * list, but the value array of <code>PortletPreference</code> should be set
-     * to null (instead of an empty array).
-     * </p>
-     * <p>
-     * This method never returns null, but the values held by PortletPreference
-     * may be null.
-     * </p>
-     * @return the preference set
-     *
-     * @see org.apache.pluto.descriptors.portlet.PortletPreferenceDD
-     */
-    public InternalPortletPreference[] getDefaultPreferences();
-
     /**
      * Returns the portlet description. The return value cannot be NULL.
      * @return the portlet description.
      */
     public Portlet getPortletDefinition();
-
-    /**
-     * Returns the preferences validator instance for this portlet.
-     * One validator instance is created per portlet definition.
-     * @return the preferences validator instance for this portlet.
-     * @throws ValidatorException  if fail to instantiate the validator.
-     */
-    public PreferencesValidator getPreferencesValidator()
-    throws ValidatorException;
-
 }
 
 

Modified: portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletEntityImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletEntityImpl.java?rev=653151&r1=653150&r2=653151&view=diff
==============================================================================
--- portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletEntityImpl.java (original)
+++ portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletEntityImpl.java Sat May  3 15:02:19 2008
@@ -16,22 +16,12 @@
  */
 package org.apache.pluto.internal.impl;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
 import javax.portlet.PreferencesValidator;
 import javax.portlet.ValidatorException;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.pluto.core.PreferencesValidatorRegistry;
-import org.apache.pluto.internal.InternalPortletPreference;
 import org.apache.pluto.internal.PortletEntity;
 import org.apache.pluto.om.portlet.Portlet;
-import org.apache.pluto.om.portlet.PortletPreference;
-import org.apache.pluto.om.portlet.PortletPreferences;
-
 
 /**
  * The PortletEntity encapsulates all data pertaining to a single portlet
@@ -43,18 +33,11 @@
  */
 public class PortletEntityImpl implements PortletEntity {
 	
-	/** Logger. */
-    private static final Log LOG = LogFactory.getLog(PortletEntityImpl.class);
-    
     // Private Member Variables ------------------------------------------------
     
     /** The cached PortletDD retrieved from the portlet descriptor registry. */
     private Portlet portletDefinition;
     
-    /** Default portlet preferences defined for this portlet. */
-    private InternalPortletPreference[] defaultPreferences;
-    
-    
     // Constructor -------------------------------------------------------------
     
     public PortletEntityImpl(Portlet portletDefinition) {
@@ -65,75 +48,10 @@
     // PortletEntity Impl ------------------------------------------------------
     
     /**
-     * Returns an array of default preferences of this portlet. The default
-     * preferences are retrieved from the portlet application descriptor.
-     * <p>
-     * Data retrieved from <code>portlet.xml</code> are injected into the domain
-     * object <code>PortletPreferenceDD</code>. This method converts the domain
-     * objects into <code>PortletPreference</code> objects.
-     * </p>
-     * <p>
-     * Note that if no value is bound to a given preference key,
-     * <code>PortletPreferenceDD.getValues()</code> will return an empty string
-     * list, but the value array of <code>PortletPreference</code> should be set
-     * to null (instead of an empty array).
-     * </p>
-     * <p>
-     * This method never returns null, but the values held by PortletPreference
-     * may be null.
-     * </p>
-     * @return the preference set
-     * 
-     * @see org.apache.pluto.descriptors.portlet.PortletPreferenceDD
-     */
-    public InternalPortletPreference[] getDefaultPreferences() {
-        if (defaultPreferences == null) {
-            Portlet portletDD = getPortletDefinition();
-            PortletPreferences prefsDD = portletDD.getPortletPreferences();
-            if (prefsDD != null) {
-            	List prefs = new ArrayList();
-            	if (prefsDD.getPortletPreferences() != null){
-	            	for (Iterator it = prefsDD.getPortletPreferences().iterator();
-	            			it.hasNext(); ) {
-	            		PortletPreference prefDD = (PortletPreference) it.next();
-	            		String[] values = null;
-	            		if (prefDD.getValues()!=null){
-		            		if (prefDD.getValues().size() > 0) {
-		            			values = (String[]) prefDD.getValues().toArray(
-		            					new String[prefDD.getValues().size()]);
-		            		}
-	            		}
-	            		PortletPreferenceImpl pref = new PortletPreferenceImpl(
-	            				prefDD.getName(), values, prefDD.isReadOnly());
-	            		prefs.add(pref);
-	            	}
-            	}
-            	defaultPreferences = (InternalPortletPreference[])
-            			prefs.toArray(new InternalPortletPreference[prefs.size()]);
-            }
-        }
-        return defaultPreferences;
-    }
-
-    /**
      * Returns the portlet description. The return value cannot be NULL.
      * @return the portlet description.
      */
     public Portlet getPortletDefinition() {
         return portletDefinition;
     }
-    
-    /**
-     * Returns the preferences validator instance for this portlet.
-     * One validator instance is created per portlet definition.
-     * @return the preferences validator instance for this portlet.
-     * @throws ValidatorException  if fail to instantiate the validator.
-     */
-    public PreferencesValidator getPreferencesValidator()
-    throws ValidatorException {
-    	PreferencesValidator validator = PreferencesValidatorRegistry
-    			.getRegistry()
-    			.getPreferencesValidator(getPortletDefinition());
-    	return validator;
-    }
 }

Modified: portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletPreferenceImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletPreferenceImpl.java?rev=653151&r1=653150&r2=653151&view=diff
==============================================================================
--- portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletPreferenceImpl.java (original)
+++ portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletPreferenceImpl.java Sat May  3 15:02:19 2008
@@ -89,7 +89,7 @@
         this.readOnly = readOnly;
     }
 
-    public Object clone() {
+    public InternalPortletPreference clone() {
     	PortletPreferenceImpl copy = new PortletPreferenceImpl();
     	copy.name = this.name;
     	if (this.values != null) {

Modified: portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletPreferencesImpl.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletPreferencesImpl.java?rev=653151&r1=653150&r2=653151&view=diff
==============================================================================
--- portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletPreferencesImpl.java (original)
+++ portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/internal/impl/PortletPreferencesImpl.java Sat May  3 15:02:19 2008
@@ -17,11 +17,9 @@
 package org.apache.pluto.internal.impl;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.Vector;
 
@@ -36,9 +34,10 @@
 import org.apache.pluto.PortletContainer;
 import org.apache.pluto.PortletContainerException;
 import org.apache.pluto.PortletWindow;
+import org.apache.pluto.core.PreferencesValidatorRegistry;
 import org.apache.pluto.internal.InternalPortletPreference;
 import org.apache.pluto.internal.InternalPortletRequest;
-import org.apache.pluto.internal.PortletEntity;
+import org.apache.pluto.om.portlet.Portlet;
 import org.apache.pluto.spi.optional.PortletPreferencesService;
 import org.apache.pluto.util.StringManager;
 
@@ -77,7 +76,7 @@
      * Current portlet preferences: key is the preference name as a string,
      * value is the PortletPreference instance.
      */
-    private final Map preferences = new HashMap();
+    private final Map<String, InternalPortletPreference> preferences = new HashMap<String, InternalPortletPreference>();
 
     /** Current method used for managing these preferences. */
     private Integer methodId;
@@ -108,36 +107,34 @@
             		+ preferencesService.getClass().getName());
         }
         
-        // Put default portlet preferences into preferences map.
-        PortletEntity entity = window.getPortletEntity();
-        defaultPreferences = entity.getDefaultPreferences();
-        if (defaultPreferences!=null){
-	        for (int i = 0; i < defaultPreferences.length; i++) {
-	            preferences.put(defaultPreferences[i].getName(),
-                            defaultPreferences[i].clone());
-	        }
-        }
-        if (LOG.isDebugEnabled()) {
-        	LOG.debug("Loaded default preferences: " + toString());
-        }
-        
-        // Merge stored portlet preferences into preferences map.
         try {
-        	InternalPortletPreference[] storedPreferences = preferencesService
+            // Put default portlet preferences into preferences map.
+            defaultPreferences = preferencesService.getDefaultPreferences(window, request);
+            if (defaultPreferences != null) {
+                for (InternalPortletPreference p : defaultPreferences) {
+                    preferences.put(p.getName(), p.clone());
+                }
+            }
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Loaded default preferences: " + toString());
+            }
+            
+            // Merge stored portlet preferences into preferences map.
+            
+            InternalPortletPreference[] storedPreferences = preferencesService
             		.getStoredPreferences(window, request);
-            for (int i = 0; i < storedPreferences.length; i++) {
-            	if (LOG.isDebugEnabled()) {
-            		LOG.debug("Merging stored preference: "
-            				+ storedPreferences[i].getName());
-            	}
-                preferences.put(storedPreferences[i].getName(),
-                                storedPreferences[i]);
+            for (InternalPortletPreference p : storedPreferences) {
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Merging stored preference: "
+                            + p.getName());
+                }
+                preferences.put(p.getName(), p);
             }
         	// Store the preferences retrieved from portlet.xml.
             //   Portlet preferences are stored everytime when a
             //   PortletPreferencesImpl instance is created.
             //   So here we do not check the portlet request method ID.
-            if (storedPreferences.length >0)
+            if (storedPreferences.length > 0)
             	internalStore();
         	
         } catch (PortletContainerException ex) {
@@ -164,8 +161,7 @@
             throw new IllegalArgumentException(
             		EXCEPTIONS.getString("error.null", "Preference key "));
         }
-        InternalPortletPreference pref = (InternalPortletPreference)
-        		preferences.get(key);
+        InternalPortletPreference pref = preferences.get(key);
         return (pref != null && pref.isReadOnly());
     }
 
@@ -187,8 +183,7 @@
             		EXCEPTIONS.getString("error.null", "Preference key "));
         }
         String[] values = null;
-        InternalPortletPreference pref = (InternalPortletPreference)
-        		preferences.get(key);
+        InternalPortletPreference pref = preferences.get(key);
         if (pref != null) {
             values = pref.getValues();
         }
@@ -203,8 +198,7 @@
             throw new ReadOnlyException(EXCEPTIONS.getString(
             		"error.preference.readonly", key));
         }
-        InternalPortletPreference pref = (InternalPortletPreference)
-        		preferences.get(key);
+        InternalPortletPreference pref = preferences.get(key);
         if (pref != null) {
             pref.setValues(new String[] { value });
         } else {
@@ -218,8 +212,7 @@
             throw new ReadOnlyException(EXCEPTIONS.getString(
             		"error.preference.readonly"));
         }
-        InternalPortletPreference pref = (InternalPortletPreference)
-        		preferences.get(key);
+        InternalPortletPreference pref = preferences.get(key);
         if (pref != null) {
             pref.setValues(values);
         } else {
@@ -228,16 +221,13 @@
         }
     }
 
-    public Enumeration getNames() {
-        return new Vector(preferences.keySet()).elements();
+    public Enumeration<String> getNames() {
+        return new Vector<String>(preferences.keySet()).elements();
     }
 
-    public Map getMap() {
-        Map map = new HashMap();
-        Iterator it = preferences.keySet().iterator();
-        while (it.hasNext()) {
-        	InternalPortletPreference pref = (InternalPortletPreference)
-        			preferences.get(it.next());
+    public Map<String,String[]> getMap() {
+        Map<String,String[]> map = new HashMap<String,String[]>();
+        for (InternalPortletPreference pref : preferences.values()) {
             map.put(pref.getName(),
                     pref.getValues() != null ? pref.getValues().clone() : null);
         }
@@ -252,15 +242,15 @@
         }
         // Try to reset preference to the default values.
         boolean resetDone = false;
-        for (int i = 0; !resetDone && i < defaultPreferences.length; i++) {
-        	if (key.equals(defaultPreferences[i].getName())) {
-        		if (LOG.isDebugEnabled()) {
-        			LOG.debug("Resetting preference for key: " + key);
-        		}
-        		preferences.put(key,
-        				defaultPreferences[i].clone());
-        		resetDone = true;
-        	}
+        for (InternalPortletPreference p : defaultPreferences) {
+            if (key.equals(p.getName())) {
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Resetting preference for key: " + key);
+                }
+                preferences.put(key,p.clone());
+                resetDone = true;
+                break;
+            }
         }
         // Remove preference if default values are not defined (PLT.14.1).
         if (!resetDone) {
@@ -308,15 +298,18 @@
         // Validate the preferences before storing, if a validator is defined.
         //   If the preferences cannot pass the validation,
         //   an ValidatorException will be thrown out.
-        PreferencesValidator validator = window.getPortletEntity()
-        		.getPreferencesValidator();
+        Portlet portletD = window.getPortletEntity().getPortletDefinition();
+        PreferencesValidator validator = PreferencesValidatorRegistry.getRegistry()
+                                           .getPreferencesValidator(portletD);
         if (validator != null) {
         	validator.validate(this);
         }
         // Store the portlet preferences.
-        InternalPortletPreference[] prefs = (InternalPortletPreference[]) 
-        		(new ArrayList(preferences.values())).toArray(
-        				new InternalPortletPreference[preferences.size()]);
+        InternalPortletPreference[] prefs = new InternalPortletPreference[preferences.size()];
+        int index = 0;
+        for (InternalPortletPreference p : preferences.values()) {
+            prefs[index++] = p;
+        }
         try {
         	preferencesService.store(window, request, prefs);
         } catch (PortletContainerException ex) {
@@ -336,27 +329,25 @@
      * @see java.lang.Object#toString()
      */
     public String toString() {
-    	StringBuffer buffer = new StringBuffer();
+    	StringBuffer buffer = new StringBuffer();    	
     	buffer.append(getClass().getName()).append("[");
-    	for (Enumeration en = getNames(); en.hasMoreElements(); ) {
-    		String name = (String) en.nextElement();
-    		buffer.append(name);
-    		buffer.append("(readOnly:").append(isReadOnly(name)).append(")=");
-    		String[] values = getValues(name, null);
-    		if (values != null) {
-	    		for (int i = 0; i < values.length; i++) {
-	    			buffer.append(values[i]);
-	    			if (i < values.length - 1) {
-	    				buffer.append(",");
-	    			}
-				}
-    		} else {
-    			buffer.append("NULL");
-    		}
-    		buffer.append(";");
+    	for (InternalPortletPreference p : preferences.values()) {
+            buffer.append(p.getName());
+            buffer.append("(readOnly:").append(p.isReadOnly()).append(")=");
+            String[] values = p.getValues();
+            if (values != null) {
+                for (int i = 0; i < values.length; i++) {
+                    buffer.append(values[i]);
+                    if (i < values.length - 1) {
+                        buffer.append(",");
+                    }
+                }
+            } else {
+                buffer.append("NULL");
+            }
+            buffer.append(";");
     	}
     	buffer.append("]");
     	return buffer.toString();
     }
-    
 }

Modified: portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletPreferencesService.java
URL: http://svn.apache.org/viewvc/portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletPreferencesService.java?rev=653151&r1=653150&r2=653151&view=diff
==============================================================================
--- portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletPreferencesService.java (original)
+++ portals/pluto/branches/2.0-spi-refactoring/pluto-container/src/main/java/org/apache/pluto/spi/optional/PortletPreferencesService.java Sat May  3 15:02:19 2008
@@ -30,6 +30,18 @@
  */
 public interface PortletPreferencesService extends ContainerService {
 
+    /**
+     * Returns the default portlet preferences.
+     * @param portletWindow  the portlet window.
+     * @param request  the portlet request.
+     * @return the default portlet preferences.
+     * @throws PortletContainerException  if fail to get default preferences.
+     */
+    public InternalPortletPreference[] getDefaultPreferences(
+            PortletWindow portletWindow,
+            PortletRequest request)
+    throws PortletContainerException;
+
 	/**
 	 * Returns the stored portlet preferences.
 	 * @param portletWindow  the portlet window.