You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wsrp4j-dev@portals.apache.org by dl...@apache.org on 2006/11/21 20:11:20 UTC

svn commit: r477828 - in /portals/wsrp4j/trunk/consumer-proxyportlet/src: java/org/apache/wsrp4j/consumer/configportlet/beans/ java/org/apache/wsrp4j/consumer/configportlet/controller/ java/org/apache/wsrp4j/consumer/configportlet/exception/ java/org/a...

Author: dlouzan
Date: Tue Nov 21 11:11:19 2006
New Revision: 477828

URL: http://svn.apache.org/viewvc?view=rev&rev=477828
Log:
Added support for viewing portlet details
Completed support for creating new portlets (still without interactive producer & handler lookup)

Added:
    portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/exception/PortletNotFoundException.java
    portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showPortlet.jsp
Modified:
    portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/beans/PortletForm.java
    portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/controller/DeployPortletConfigPortlet.java
    portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/delegate/DeployPortletDelegate.java
    portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/delegate/impl/DeployPortletDelegateImpl.java
    portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/to/PortletTO.java
    portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/services/DeployPortletService.java
    portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/util/Constants.java
    portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/validator/PropertyValidator.java
    portals/wsrp4j/trunk/consumer-proxyportlet/src/resources/Messages.properties
    portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showAddPortlet.jsp
    portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showAllDeployedPortlets.jsp

Modified: portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/beans/PortletForm.java
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/beans/PortletForm.java?view=diff&rev=477828&r1=477827&r2=477828
==============================================================================
--- portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/beans/PortletForm.java (original)
+++ portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/beans/PortletForm.java Tue Nov 21 11:11:19 2006
@@ -27,6 +27,10 @@
     private String id;
     private String description;
     private String displayName;
+    private String title;
+    private String shortTitle;
+    private String keywords;
+    private String[] keywordsAsArray;
     private String portletHandle;
     private String producerId;
     
@@ -59,6 +63,34 @@
     public void setDisplayName(String displayName) {
         this.displayName = displayName;
     }
+    
+    public String getTitle() {
+        return title;
+    }
+    
+    public void setTitle(String title) {
+        this.title = title;
+    }
+    
+    public String getShortTitle() {
+        return shortTitle;
+    }
+    
+    public void setShortTitle(String shortTitle) {
+        this.shortTitle = shortTitle;
+    }
+    
+    public String getKeywords() {
+        return keywords;
+    }
+    
+    public void setKeywords(String keywords) {
+        this.keywords = keywords;
+    }
+    
+    public String[] getKeywordsAsArray() {
+        return keywordsAsArray;
+    }
 
     public String getPortletHandle() {
         return portletHandle;
@@ -85,6 +117,13 @@
                 description, false);
         validator.validateString(errors, Constants.PARAM_DISPLAY_NAME,
                 displayName, false);
+        validator.validateString(errors, Constants.PARAM_TITLE,
+                title, true);
+        validator.validateString(errors, Constants.PARAM_SHORT_TITLE,
+                shortTitle, false);
+        keywordsAsArray = 
+                validator.validateStringArray(errors, Constants.PARAM_KEYWORDS,
+                keywords, false);
         validator.validateString(errors, Constants.PARAM_REMOTE_PRODUCER_ID,
                 producerId, true);
         validator.validateString(errors, Constants.PARAM_REMOTE_PORTLET_HANDLE,
@@ -95,11 +134,15 @@
     
     private void reset() {
         
-        setId(null);
-        setDescription(null);
-        setDisplayName(null);
-        setPortletHandle(null);
-        setProducerId(null);
+        id = null;
+        description = null;
+        displayName = null;
+        title = null;
+        shortTitle = null;
+        keywords = null;
+        keywordsAsArray = null;
+        producerId = null;
+        portletHandle = null;
         
     }
     

Modified: portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/controller/DeployPortletConfigPortlet.java
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/controller/DeployPortletConfigPortlet.java?view=diff&rev=477828&r1=477827&r2=477828
==============================================================================
--- portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/controller/DeployPortletConfigPortlet.java (original)
+++ portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/controller/DeployPortletConfigPortlet.java Tue Nov 21 11:11:19 2006
@@ -88,6 +88,9 @@
             if ((action == null) || (action.equals(Constants.ACTION_SHOW_ALL_DEPLOYED_PORTLETS))) {
                 service.showAllDeployedPortlets(request);
                 delegateToJSP(request, response, "/jsp/configportlet/showAllDeployedPortlets.jsp");
+            } else if (action.equals(Constants.ACTION_SHOW_PORTLET)) {
+                service.showPortlet(request);
+                delegateToJSP(request, response, "/jsp/configportlet/showPortlet.jsp");
             } else if (action.equals(Constants.ACTION_SHOW_ADD_PORTLET)) {
                 service.showAddPortlet(request);
                 delegateToJSP(request, response, "/jsp/configportlet/showAddPortlet.jsp");

Added: portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/exception/PortletNotFoundException.java
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/exception/PortletNotFoundException.java?view=auto&rev=477828
==============================================================================
--- portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/exception/PortletNotFoundException.java (added)
+++ portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/exception/PortletNotFoundException.java Tue Nov 21 11:11:19 2006
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2003-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wsrp4j.consumer.configportlet.exception;
+
+
+public class PortletNotFoundException extends Exception {
+    
+    private String id;
+    
+    public PortletNotFoundException(String id) {
+        super();
+        this.id = id;
+    }
+    
+    public String getId() {
+        return id;
+    }
+    
+}

Modified: portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/delegate/DeployPortletDelegate.java
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/delegate/DeployPortletDelegate.java?view=diff&rev=477828&r1=477827&r2=477828
==============================================================================
--- portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/delegate/DeployPortletDelegate.java (original)
+++ portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/delegate/DeployPortletDelegate.java Tue Nov 21 11:11:19 2006
@@ -19,6 +19,7 @@
 
 import org.apache.wsrp4j.consumer.configportlet.exception.ConfigPortletException;
 import org.apache.wsrp4j.consumer.configportlet.exception.DuplicatePortletException;
+import org.apache.wsrp4j.consumer.configportlet.exception.PortletNotFoundException;
 
 import org.apache.wsrp4j.consumer.configportlet.model.to.PortletTO;
 
@@ -34,6 +35,9 @@
     
     public boolean existsPortlet(String id)
     throws ConfigPortletException;
+    
+    public PortletTO findPortlet(String id)
+    throws PortletNotFoundException, ConfigPortletException;
     
     public void addPortlet(PortletTO portletTO)
     throws DuplicatePortletException, ConfigPortletException;

Modified: portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/delegate/impl/DeployPortletDelegateImpl.java
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/delegate/impl/DeployPortletDelegateImpl.java?view=diff&rev=477828&r1=477827&r2=477828
==============================================================================
--- portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/delegate/impl/DeployPortletDelegateImpl.java (original)
+++ portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/delegate/impl/DeployPortletDelegateImpl.java Tue Nov 21 11:11:19 2006
@@ -27,6 +27,7 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Result;
 import javax.xml.transform.Source;
 import javax.xml.transform.Transformer;
@@ -54,6 +55,7 @@
 
 import org.apache.wsrp4j.consumer.configportlet.exception.ConfigPortletException;
 import org.apache.wsrp4j.consumer.configportlet.exception.DuplicatePortletException;
+import org.apache.wsrp4j.consumer.configportlet.exception.PortletNotFoundException;
 import org.apache.wsrp4j.consumer.configportlet.model.delegate.DeployPortletDelegate;
 import org.apache.wsrp4j.consumer.configportlet.model.to.PortletTO;
 
@@ -149,6 +151,17 @@
         
     }
     
+    public PortletTO findPortlet(String id)
+    throws PortletNotFoundException, ConfigPortletException {
+        
+        if (!existsPortlet(id)) {
+            throw new PortletNotFoundException(id);
+        }
+        
+        return (PortletTO) portletTOs.get(id);
+        
+    }
+    
     public void addPortlet(PortletTO portletTO)
     throws DuplicatePortletException, ConfigPortletException {
         
@@ -182,6 +195,9 @@
                 String id = null;
                 String description = null;
                 String displayName = null;
+                String title = null;
+                String shortTitle = null;
+                String keywords = null;
                 String portletHandle = null;
                 String producerId = null;
                 boolean isProxyPortlet = false;
@@ -203,6 +219,11 @@
                         description = child.getChildNodes().item(0).getNodeValue().trim();
                     } else if (child.getNodeName().equals("display-name")) {
                         displayName = child.getChildNodes().item(0).getNodeValue().trim();
+                    } else if (child.getNodeName().equals("portlet-info")) {
+                        Map portletInfo = getPortletInfoMap(child.getChildNodes());
+                        title = (String) portletInfo.get("title");
+                        shortTitle = (String) portletInfo.get("short-title");
+                        keywords = (String) portletInfo.get("keywords");
                     } else if (child.getNodeName().equals("portlet-preferences")) {
                         /* Examine <portlet-preferences> */
                         Map prefs = getPreferencesMap(child.getChildNodes());
@@ -213,6 +234,7 @@
                 
                 if (isProxyPortlet) {
                     PortletTO portletTO = new PortletTO(id, description, displayName,
+                            title, shortTitle, stringArrayFromString(keywords),
                             portletHandle, producerId);
                     portletMap.put(id, portletTO);
                 }
@@ -222,7 +244,7 @@
     }
     
     /**
-     * Get a Map containing the preferences for a portlet
+     * Get a <code>Map</code> containing the preferences for a portlet
      *
      * @param preferenceNodes a <code>NodeList</code> containing 
      *        <code><preference></code> elements
@@ -252,6 +274,35 @@
         return prefs;
     }
     
+    /**
+     * Get a <code>Map</code> with the contents of the <code>portlet-info</code>
+     * section of a portlet
+     * @return a <code>Map</code> of key-value for each of <code>title</code>,
+     *         <code>short-title</code> and <code>keywords</code>
+     */
+    private Map getPortletInfoMap(NodeList portletInfoNodes) {
+        Map portletInfo = new Hashtable();
+        
+        for (int i=0; i<portletInfoNodes.getLength(); i++) {
+            Node portletInfoNode = portletInfoNodes.item(i);
+            if (portletInfoNode.getNodeName().equals("title")) {
+                String title = 
+                        portletInfoNode.getChildNodes().item(0).getNodeValue().trim();
+                portletInfo.put("title", title);
+            } else if (portletInfoNode.getNodeName().equals("short-title")) {
+                String shortTitle = 
+                        portletInfoNode.getChildNodes().item(0).getNodeValue().trim();
+                portletInfo.put("short-title", shortTitle);
+            } else if (portletInfoNode.getNodeName().equals("keywords")) {
+                String keywords = 
+                        portletInfoNode.getChildNodes().item(0).getNodeValue().trim();
+                portletInfo.put("keywords", keywords);
+            }
+        }
+        
+        return portletInfo;
+    }
+    
     
     /**
      * Creates a DOM XML <code>Element</code> for a given {@link PortletTO}
@@ -262,10 +313,13 @@
         Element portletElement = portletXmlDOM.createElement("portlet");
         
         /* Add description element */
-        Element descriptionElement = portletXmlDOM.createElement("description");
-        descriptionElement.appendChild(portletXmlDOM.createTextNode(
-                portletTO.getDescription()));
-        portletElement.appendChild(descriptionElement);
+        if ((portletTO.getDescription() != null) 
+                && (!portletTO.getDescription().equals(""))) {
+            Element descriptionElement = portletXmlDOM.createElement("description");
+            descriptionElement.appendChild(portletXmlDOM.createTextNode(
+                    portletTO.getDescription()));
+            portletElement.appendChild(descriptionElement);
+        }
 
         /* Add portlet-name element */
         Element portletNameElement = portletXmlDOM.createElement("portlet-name");
@@ -274,10 +328,13 @@
         portletElement.appendChild(portletNameElement);
         
         /* Add display-name element */
-        Element displayNameElement = portletXmlDOM.createElement("display-name");
-        displayNameElement.appendChild(portletXmlDOM.createTextNode(
-                portletTO.getDisplayName()));
-        portletElement.appendChild(displayNameElement);
+        if ((portletTO.getDisplayName() != null) 
+                && (!portletTO.getDisplayName().equals(""))) {
+            Element displayNameElement = portletXmlDOM.createElement("display-name");
+            displayNameElement.appendChild(portletXmlDOM.createTextNode(
+                    portletTO.getDisplayName()));
+            portletElement.appendChild(displayNameElement);
+        }
         
         /* Add portlet-class element */
         Element portletClassElement = portletXmlDOM.createElement("portlet-class");
@@ -285,8 +342,47 @@
                 proxyPortletClassName));
         portletElement.appendChild(portletClassElement);
         
+        /* Add supports element (hardcoded) */
+        Element supportsElement = portletXmlDOM.createElement("supports");
+        portletElement.appendChild(supportsElement);
+        Element mimeTypeElement = portletXmlDOM.createElement("mime-type");
+        supportsElement.appendChild(mimeTypeElement);
+        mimeTypeElement.appendChild(portletXmlDOM.createTextNode("text/html"));
+        Element portletModeView = portletXmlDOM.createElement("portlet-mode");
+        supportsElement.appendChild(portletModeView);
+        portletModeView.appendChild(portletXmlDOM.createTextNode("view"));
+        Element portletModeHelp = portletXmlDOM.createElement("portlet-mode");
+        supportsElement.appendChild(portletModeHelp);
+        portletModeHelp.appendChild(portletXmlDOM.createTextNode("help"));
+        Element portletModeEdit = portletXmlDOM.createElement("portlet-mode");
+        supportsElement.appendChild(portletModeEdit);
+        portletModeEdit.appendChild(portletXmlDOM.createTextNode("edit"));
+        
+        /* Add portlet-info element */
+        Element portletInfoElement = portletXmlDOM.createElement("portlet-info");
+        portletElement.appendChild(portletInfoElement);
+        Element portletInfoTitleElement = portletXmlDOM.createElement("title");
+        portletInfoElement.appendChild(portletInfoTitleElement);
+        portletInfoTitleElement.appendChild(portletXmlDOM.createTextNode(
+                portletTO.getTitle()));
+        if ((portletTO.getShortTitle() != null)
+                && (!portletTO.getShortTitle().equals(""))) {
+            Element portletInfoShortTitleElement = portletXmlDOM.createElement("short-title");
+            portletInfoElement.appendChild(portletInfoShortTitleElement);
+            portletInfoShortTitleElement.appendChild(portletXmlDOM.createTextNode(
+                    portletTO.getShortTitle()));
+        }
+        if ((portletTO.getKeywords() != null) 
+                && (!(portletTO.getKeywords())[0].equals(""))) {
+            Element portletInfoKeywordsElement = portletXmlDOM.createElement("keywords");
+            portletInfoElement.appendChild(portletInfoKeywordsElement);
+            portletInfoKeywordsElement.appendChild(portletXmlDOM.createTextNode(
+                    stringFromStringArray(portletTO.getKeywords())));
+        }
+        
         /* Add portlet-preferences */
         Element preferencesElement = portletXmlDOM.createElement("portlet-preferences");
+        portletElement.appendChild(preferencesElement);
         /* Add portlet-handle pref */
         Element prefPortletHandleElement = portletXmlDOM.createElement("preference");
         preferencesElement.appendChild(prefPortletHandleElement);
@@ -321,9 +417,13 @@
             
             TransformerFactory factory = TransformerFactory.newInstance();
             Transformer transformer = factory.newTransformer();
+            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+            transformer.setOutputProperty(
+                    "{http://xml.apache.org/xslt}indent-amount", "4");
 
             Source src = new DOMSource(document);
             Result dest = new StreamResult(file);
+            
             transformer.transform(src, dest);
             
         } catch (TransformerConfigurationException e) {
@@ -332,6 +432,28 @@
             throw new ConfigPortletException(e);
         }
         
+    }
+    
+    private String stringFromStringArray(String[] array) {
+        String result = new String();
+        
+        for (int i=0; i<array.length; i++) {
+            if (i < array.length-1) {
+                result += array[i] + ", ";
+            } else {
+                result += array[i];
+            }
+        }
+        
+        return result;
+    }
+    
+    private String[] stringArrayFromString(String s) {
+        if (s != null) {
+            return s.split(",\\s");
+        } else {
+            return null;
+        }
     }
     
 }

Modified: portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/to/PortletTO.java
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/to/PortletTO.java?view=diff&rev=477828&r1=477827&r2=477828
==============================================================================
--- portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/to/PortletTO.java (original)
+++ portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/model/to/PortletTO.java Tue Nov 21 11:11:19 2006
@@ -23,14 +23,21 @@
     private String id;
     private String description;
     private String displayName;
+    private String title;
+    private String shortTitle;
+    private String[] keywords;
     private String portletHandle;
     private String producerId;
     
     public PortletTO(String id, String description, String displayName,
+            String title, String shortTitle, String[] keywords,
             String portletHandle, String producerId) {
         this.id = id;
         this.description = description;
         this.displayName = displayName;
+        this.title = title;
+        this.shortTitle = shortTitle;
+        this.keywords = keywords;
         this.portletHandle = portletHandle;
         this.producerId = producerId;
     }
@@ -57,6 +64,45 @@
     
     public void setDisplayName(String displayName) {
         this.displayName = displayName;
+    }
+    
+    public String getTitle() {
+        return title;
+    }
+    
+    public void setTitle(String title) {
+        this.title = title;
+    }
+    
+    public String getShortTitle() {
+        return shortTitle;
+    }
+    
+    public void setShortTitle(String shortTitle) {
+        this.shortTitle = shortTitle;
+    }
+    
+    public String[] getKeywords() {
+        return keywords;
+    }
+    
+    public void setKeywords(String[] keywords) {
+        this.keywords = keywords;
+    }
+    
+    public String getKeywordsAsString() {
+        String result = null;
+        if (keywords != null) {
+            result = new String();
+            for (int i=0; i<keywords.length; i++) {
+                if (i<keywords.length-1) {
+                    result += keywords[i] + " ";
+                } else {
+                    result += keywords[i];
+                }
+            }
+        }
+        return result;
     }
 
     public String getPortletHandle() {

Modified: portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/services/DeployPortletService.java
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/services/DeployPortletService.java?view=diff&rev=477828&r1=477827&r2=477828
==============================================================================
--- portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/services/DeployPortletService.java (original)
+++ portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/services/DeployPortletService.java Tue Nov 21 11:11:19 2006
@@ -33,6 +33,7 @@
 import org.apache.wsrp4j.consumer.configportlet.beans.PortletForm;
 import org.apache.wsrp4j.consumer.configportlet.exception.ConfigPortletException;
 import org.apache.wsrp4j.consumer.configportlet.exception.DuplicatePortletException;
+import org.apache.wsrp4j.consumer.configportlet.exception.PortletNotFoundException;
 import org.apache.wsrp4j.consumer.configportlet.model.delegate.DeployPortletDelegate;
 import org.apache.wsrp4j.consumer.configportlet.model.delegate.DeployPortletDelegateFactory;
 import org.apache.wsrp4j.consumer.configportlet.model.to.PortletTO;
@@ -70,6 +71,26 @@
         
     }
     
+    public void showPortlet(RenderRequest request)
+    throws ConfigPortletException {
+        
+        try {
+            String portletId = request.getParameter(Constants.PARAM_PORTLET_ID);
+            PortletTO portletTO = delegate.findPortlet(portletId);
+            request.setAttribute(Constants.ATTR_PORTLET, portletTO);
+        } catch (PortletNotFoundException e) {
+            errors = new Hashtable();
+            errors.put(Constants.PARAM_PORTLET_ID, Constants.ERROR_PORTLET_NOT_FOUND);
+            request.setAttribute(Constants.ATTR_ERRORS, errors);
+        }
+        
+        String isError = request.getParameter(Constants.PARAM_IS_ERROR);
+        if (isError != null) {
+            request.setAttribute(Constants.ATTR_ERRORS, errors);
+        }
+        
+    }
+    
     public void showAddPortlet(RenderRequest request)
     throws ConfigPortletException {
         
@@ -118,7 +139,8 @@
     
     private PortletTO createPortletTO(PortletForm form) {
         return new PortletTO(form.getId(), form.getDescription(),
-                form.getDisplayName(), form.getPortletHandle(),
+                form.getDisplayName(), form.getTitle(), form.getShortTitle(),
+                form.getKeywordsAsArray(), form.getPortletHandle(), 
                 form.getProducerId());
     }
     

Modified: portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/util/Constants.java
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/util/Constants.java?view=diff&rev=477828&r1=477827&r2=477828
==============================================================================
--- portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/util/Constants.java (original)
+++ portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/util/Constants.java Tue Nov 21 11:11:19 2006
@@ -23,6 +23,7 @@
     public static final String ERROR_DUPLICATE_PRODUCER = "Duplicate producer key";
     public static final String ERROR_MALFORMED_URL="This is not a valid URL";
     public static final String ERROR_DUPLICATE_PORTLET = "Duplicate portlet key";
+    public static final String ERROR_PORTLET_NOT_FOUND = "Portlet not found";
     
     public static final String PARAM_ACTION = "action";
     public static final String PARAM_IS_ERROR = "isError";
@@ -36,6 +37,9 @@
     public static final String PARAM_REGISTRATION_REQUIRED = "registrationRequired";
     public static final String PARAM_PORTLET_ID = "id";
     public static final String PARAM_DISPLAY_NAME = "displayName";
+    public static final String PARAM_TITLE = "title";
+    public static final String PARAM_SHORT_TITLE = "shortTitle";
+    public static final String PARAM_KEYWORDS = "keywords";
     public static final String PARAM_REMOTE_PORTLET_HANDLE = "portletHandle";
     public static final String PARAM_REMOTE_PRODUCER_ID = "producerId";
     
@@ -43,6 +47,7 @@
     public static final String ATTR_PRODUCER = "producer";
     public static final String ATTR_ERRORS = "errors";
     public static final String ATTR_ALL_PORTLETS = "portlets";
+    public static final String ATTR_PORTLET = "portlet";
     
     public static final String ATTR_PRODUCER_FORM = "producerForm";
     public static final String ATTR_PORTLET_FORM = "portletForm";
@@ -56,6 +61,7 @@
     public static final String ACTION_DELETE_PRODUCER = "deleteProducer";
     
     public static final String ACTION_SHOW_ALL_DEPLOYED_PORTLETS = "showAllDeployedPortlets";
+    public static final String ACTION_SHOW_PORTLET = "showPortlet";
     public static final String ACTION_SHOW_ADD_PORTLET = "showAddPortlet";
     public static final String ACTION_ADD_PORTLET = "addPortlet";
     

Modified: portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/validator/PropertyValidator.java
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/validator/PropertyValidator.java?view=diff&rev=477828&r1=477827&r2=477828
==============================================================================
--- portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/validator/PropertyValidator.java (original)
+++ portals/wsrp4j/trunk/consumer-proxyportlet/src/java/org/apache/wsrp4j/consumer/configportlet/validator/PropertyValidator.java Tue Nov 21 11:11:19 2006
@@ -43,6 +43,22 @@
         
     }
     
+    public String[] validateStringArray(Map errors, String propertyName,
+            String propertyValue, boolean mandatory) {
+        
+        String[] result = null;
+        
+        if (validateMandatory(errors, propertyName, propertyValue,
+                mandatory)) {
+            if (propertyValue != null) {
+                result = propertyValue.split("\\s");
+            }
+        }
+        
+        return result;
+        
+    }
+    
     public boolean validateBoolean(Map errors, String propertyName,
             String propertyValue, boolean mandatory) {
         

Modified: portals/wsrp4j/trunk/consumer-proxyportlet/src/resources/Messages.properties
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/consumer-proxyportlet/src/resources/Messages.properties?view=diff&rev=477828&r1=477827&r2=477828
==============================================================================
--- portals/wsrp4j/trunk/consumer-proxyportlet/src/resources/Messages.properties (original)
+++ portals/wsrp4j/trunk/consumer-proxyportlet/src/resources/Messages.properties Tue Nov 21 11:11:19 2006
@@ -13,11 +13,13 @@
 # limitations under the License.
 
 Alert.deleteProducer=Are you sure you want to delete this producer?
+Alert.deletePortlet=Are you sure you want to delete this portlet?
 
 Error.exceptionNotFound=Exception Object Not Found
 Error.exceptionThrown=Exception Thrown
 Error.noPortletsFound=No Deployed Portlets Found
 Error.noProducersFound=No Producers Found
+Error.portletNotFound=Portlet Not Found
 Error.producerNotFound=Producer Not Found
 
 Form.addPortlet=Add Portlet
@@ -28,14 +30,19 @@
 
 Link.addPortlet=Add Portlet
 Link.addProducer=Add Producer
+Link.deletePortlet=Delete Portlet
 Link.deleteProducer=Delete Producer
+Link.editPortlet=Edit Portlet
 Link.editProducer=Edit Producer
 
 Portlet.id=ID
 Portlet.description=Description
 Portlet.displayName=Display Name
+Portlet.keywords=Keywords
 Portlet.remoteProducer=Remote Producer ID
 Portlet.remoteHandle=Remote Portlet Handle
+Portlet.shortTitle=Short Title
+Portlet.title=Title
 
 Producer.description=Description
 Producer.id=ID
@@ -51,4 +58,5 @@
 Title.editProducer=Edit Producer
 Title.viewAllDeployedPortlets=Deployed Portlets
 Title.viewAllProducers=ProxyPortlet Producers
+Title.viewPortlet=View Portlet
 Title.viewProducer=View Producer

Modified: portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showAddPortlet.jsp
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showAddPortlet.jsp?view=diff&rev=477828&r1=477827&r2=477828
==============================================================================
--- portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showAddPortlet.jsp (original)
+++ portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showAddPortlet.jsp Tue Nov 21 11:11:19 2006
@@ -74,6 +74,48 @@
         </tr>
         <tr>
             <td class="portlet-font">
+                <fmt:message key="Portlet.title"/>
+            </td>
+            <td>
+                <input type="text" name="title"
+                       class="portlet-form-input-field"
+                       value="<c:out value='${portletForm.title}'/>"
+                       size="30"/>
+                <span class="portlet-msg-error">
+                    <c:out value="${errors['title']}"/>
+                </span>
+            </td>
+        </tr>
+        <tr>
+            <td class="portlet-font">
+                <fmt:message key="Portlet.shortTitle"/>
+            </td>
+            <td>
+                <input type="text" name="shortTitle"
+                       class="portlet-form-input-field"
+                       value="<c:out value='${portletForm.shortTitle}'/>"
+                       size="30"/>
+                <span class="portlet-msg-error">
+                    <c:out value="${errors['shortTitle']}"/>
+                </span>
+            </td>
+        </tr>
+        <tr>
+            <td class="portlet-font">
+                <fmt:message key="Portlet.keywords"/>
+            </td>
+            <td>
+                <input type="text" name="keywords"
+                       class="portlet-form-input-field"
+                       value="<c:out value='${portletForm.keywords}'/>"
+                       size="30"/>
+                <span class="portlet-msg-error">
+                    <c:out value="${errors['keywords']}"/>
+                </span>
+            </td>
+        </tr>
+        <tr>
+            <td class="portlet-font">
                 <fmt:message key="Portlet.remoteProducer"/>
             </td>
             <td>

Modified: portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showAllDeployedPortlets.jsp
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showAllDeployedPortlets.jsp?view=diff&rev=477828&r1=477827&r2=477828
==============================================================================
--- portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showAllDeployedPortlets.jsp (original)
+++ portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showAllDeployedPortlets.jsp Tue Nov 21 11:11:19 2006
@@ -44,9 +44,19 @@
     </tr>
     
 <c:forEach var="portlet" items="${portlets}">
+    
+    <c:set var="portletID" scope="page" value="${portlet.id}"/>
+    <jsp:useBean id="portletID" class="java.lang.String"/>
+    <portlet:renderURL var="showPortletURL">
+        <portlet:param name="action" value="showPortlet"/>
+        <portlet:param name="id" value="<%= portletID %>"/>
+    </portlet:renderURL>
+    
     <tr>
         <td class="portlet-section-body">
-            <c:out value="${portlet.id}"/>
+            <a href="<c:out value='${showPortletURL}'/>" escapeXml="false">
+                <c:out value="${portlet.id}"/>
+            </a>
         </td>
         <td class="portlet-section-body">
             <c:out value="${portlet.producerId}"/>

Added: portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showPortlet.jsp
URL: http://svn.apache.org/viewvc/portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showPortlet.jsp?view=auto&rev=477828
==============================================================================
--- portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showPortlet.jsp (added)
+++ portals/wsrp4j/trunk/consumer-proxyportlet/src/webapp/jsp/configportlet/showPortlet.jsp Tue Nov 21 11:11:19 2006
@@ -0,0 +1,143 @@
+<%--
+Copyright 2003-2006 The Apache Software Foundation
+Licensed  under the  Apache License,  Version 2.0  (the "License");
+you may not use  this file  except in  compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed  under the  License is distributed on an "AS IS" BASIS,
+WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+implied.
+
+See the License for the specific language governing permissions and
+limitations under the License.
+--%>
+
+<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
+<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
+<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
+
+<script type="text/javascript">
+    function <portlet:namespace/>checkDeletePortlet() {
+        return confirm("<fmt:message key='Alert.deletePortlet'/>");
+    }
+</script>
+
+<portlet:defineObjects/>
+
+<p class="portlet-section-header">
+    <fmt:message key="Title.viewPortlet"/>
+</p>
+
+<c:choose>
+
+<c:when test="${!empty portlet}">
+    
+    <table width="100%">
+        
+        <tr>
+            <td class="portlet-section-subheader">
+                <fmt:message key="Portlet.id"/>
+            </td>
+            <td class="portlet-section-body">
+                <c:out value="${portlet.id}"/>
+            </td>
+        </tr>
+        <tr>
+            <td class="portlet-section-subheader">
+                <fmt:message key="Portlet.description"/>
+            </td>
+            <td class="portlet-section-body">
+                <c:out value="${portlet.description}"/>
+            </td>
+        </tr>
+        <tr>
+            <td class="portlet-section-subheader">
+                <fmt:message key="Portlet.displayName"/>
+            </td>
+            <td class="portlet-section-body">
+                <c:out value="${portlet.displayName}"/>
+            </td>
+        </tr>
+        <tr>
+            <td class="portlet-section-subheader">
+                <fmt:message key="Portlet.title"/>
+            </td>
+            <td class="portlet-section-body">
+                <c:out value="${portlet.title}"/>
+            </td>
+        </tr>
+        <tr>
+            <td class="portlet-section-subheader">
+                <fmt:message key="Portlet.shortTitle"/>
+            </td>
+            <td class="portlet-section-body">
+                <c:out value="${portlet.shortTitle}"/>
+            </td>
+        </tr>
+        <tr>
+            <td class="portlet-section-subheader">
+                <fmt:message key="Portlet.keywords"/>
+            </td>
+            <td class="portlet-section-body">
+                <c:out value="${portlet.keywordsAsString}"/>
+            </td>
+        </tr>
+        <tr>
+            <td class="portlet-section-subheader">
+                <fmt:message key="Portlet.remoteHandle"/>
+            </td>
+            <td class="portlet-section-body">
+                <c:out value="${portlet.portletHandle}"/>
+            </td>
+        </tr>
+        <tr>
+            <td class="portlet-section-subheader">
+                <fmt:message key="Portlet.remoteProducer"/>
+            </td>
+            <td class="portlet-section-body">
+                <c:out value="${portlet.producerId}"/>
+            </td>
+        </tr>
+        
+    </table>
+    
+    <c:set var="portletID" scope="page" value="${portlet.id}"/>
+    <jsp:useBean id="portletID" class="java.lang.String"/>
+    <portlet:renderURL var="editPortletURL">
+        <portlet:param name="action" value="showEditPortlet"/>
+        <portlet:param name="id" value="<%= portletID %>"/>
+    </portlet:renderURL>
+    <portlet:actionURL var="deletePortletURL">
+        <portlet:param name="action" value="deletePortlet"/>
+        <portlet:param name="id" value="<%= portletID %>"/>
+    </portlet:actionURL>
+    <p class="portlet-font">
+        <a href="<c:out value='${editPortletURL}'/>" escapeXml="false">
+            <fmt:message key="Link.editPortlet"/>
+        </a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        <a href="<c:out value='${deletePortletURL}'/>" escapeXml="false"
+           onclick="return <portlet:namespace/>checkDeletePortlet()">
+            <fmt:message key="Link.deletePortlet"/>
+        </a>
+    </p>
+    
+    <c:if test="${!empty errors}">
+        <c:forEach var="error" items="${errors}">
+            <p class="portlet-msg-error">
+                <c:out value="${error.key}"/> : <c:out value="${error.value}"/>
+            </p>
+        </c:forEach>
+    </c:if>
+    
+</c:when>
+
+<c:otherwise>
+    <p class="portlet-msg-error">
+        <fmt:message key="Error.portletNotFound"/>
+    </p>
+</c:otherwise>
+
+</c:choose>
\ No newline at end of file