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 2005/11/25 03:25:20 UTC

svn commit: r348854 [3/16] - in /portals/jetspeed-2/trunk/applications/j2-admin: ./ src/java/org/apache/jetspeed/portlets/entityeditor/ src/java/org/apache/jetspeed/portlets/localeselector/ src/java/org/apache/jetspeed/portlets/localeselector/resources...

Added: portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/PortletApplicationDetail.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/PortletApplicationDetail.java?rev=348854&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/PortletApplicationDetail.java (added)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/PortletApplicationDetail.java Thu Nov 24 18:24:19 2005
@@ -0,0 +1,1293 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.portlets.pam;
+
+
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Locale;
+import java.util.StringTokenizer;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletException;
+import javax.portlet.PortletMode;
+import javax.portlet.PortletSession;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+import org.apache.jetspeed.CommonPortletServices;
+import org.apache.jetspeed.components.portletregistry.FailedToStorePortletDefinitionException;
+import org.apache.jetspeed.components.portletregistry.PortletRegistry;
+import org.apache.jetspeed.components.portletregistry.RegistryException;
+import org.apache.jetspeed.om.common.GenericMetadata;
+import org.apache.jetspeed.om.common.LocalizedField;
+import org.apache.jetspeed.om.common.MutableDescription;
+import org.apache.jetspeed.om.common.MutableDisplayName;
+import org.apache.jetspeed.om.common.MutableLanguage;
+import org.apache.jetspeed.om.common.ParameterComposite;
+import org.apache.jetspeed.om.common.SecurityRoleRefComposite;
+import org.apache.jetspeed.om.common.UserAttribute;
+import org.apache.jetspeed.om.common.portlet.MutablePortletApplication;
+import org.apache.jetspeed.om.common.portlet.PortletDefinitionComposite;
+import org.apache.jetspeed.om.common.preference.PreferenceComposite;
+import org.apache.jetspeed.portlets.pam.beans.PortletApplicationBean;
+import org.apache.pluto.om.common.DescriptionSet;
+import org.apache.pluto.om.common.SecurityRoleRef;
+import org.apache.pluto.om.portlet.ContentType;
+import org.apache.portals.bridges.beans.TabBean;
+import org.apache.portals.bridges.common.GenericServletPortlet;
+
+/**
+ * This portlet is a tabbed editor user interface for editing both portlet defintions
+ * and portlet applications.
+ *
+ * @author <a href="mailto:jford@apache.com">Jeremy Ford</a>
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: PortletApplicationDetail.java 348264 2005-11-22 22:06:45Z taylor $
+ */
+public class PortletApplicationDetail extends GenericServletPortlet
+{
+    private static final String PORTLET_ACTION = "portlet_action";
+    private final String VIEW_PA = "portletApplication"; 
+    private final String VIEW_PD = "portletDefinition";
+    
+    private static final String PORTLET_APP_ACTION_PREFIX = "portlet_app.";
+    private static final String PORTLET_ACTION_PREFIX = "portlet.";
+
+    private PortletContext context;
+    private PortletRegistry registry;
+    private LinkedHashMap paTabMap = new LinkedHashMap();
+    private LinkedHashMap pdTabMap = new LinkedHashMap();
+    
+    public void init(PortletConfig config)
+    throws PortletException 
+    {
+        super.init(config);
+        context = getPortletContext();
+        registry = (PortletRegistry)context.getAttribute(CommonPortletServices.CPS_REGISTRY_COMPONENT);
+        if (null == registry)
+        {
+            throw new PortletException("Failed to find the Portlet Registry on portlet initialization");
+        }
+        
+        TabBean tb1 = new TabBean("pa_details");
+        TabBean tb2 = new TabBean("pa_metadata");
+        TabBean tb3 = new TabBean("pa_portlets");
+        TabBean tb4 = new TabBean("pa_user_attribtues");
+        
+        paTabMap.put(tb1.getId(), tb1);
+        paTabMap.put(tb2.getId(), tb2);
+        paTabMap.put(tb3.getId(), tb3);
+        paTabMap.put(tb4.getId(), tb4);
+        
+        TabBean tb_1 = new TabBean("pd_details");
+        TabBean tb_2 = new TabBean("pd_metadata");
+        TabBean tb_3 = new TabBean("pd_preferences");
+        TabBean tb_4 = new TabBean("pd_languages");
+        TabBean tb_5 = new TabBean("pd_parameters");
+        TabBean tb_6 = new TabBean("pd_security");
+        TabBean tb_7 = new TabBean("pd_content_type");
+        
+        pdTabMap.put(tb_1.getId(), tb_1);
+        pdTabMap.put(tb_2.getId(), tb_2);
+        pdTabMap.put(tb_3.getId(), tb_3);
+        pdTabMap.put(tb_4.getId(), tb_4);
+        pdTabMap.put(tb_5.getId(), tb_5);
+        pdTabMap.put(tb_6.getId(), tb_6);
+        pdTabMap.put(tb_7.getId(), tb_7);
+    }
+    
+    public void doView(RenderRequest request, RenderResponse response)
+
+    throws PortletException, IOException
+
+    {
+        response.setContentType("text/html");
+        
+        String paName = (String)
+            request.getPortletSession().getAttribute(PortletApplicationResources.PAM_CURRENT_PA, 
+                                             PortletSession.APPLICATION_SCOPE);
+        
+        MutablePortletApplication pa = registry.getPortletApplication(paName);
+        
+        if (null != pa)
+        {
+            request.setAttribute(VIEW_PA, new PortletApplicationBean(pa));
+            
+            String pdefName = (String) request.getPortletSession().getAttribute(PortletApplicationResources.REQUEST_SELECT_PORTLET, PortletSession.APPLICATION_SCOPE);
+            PortletDefinitionComposite pdef = (PortletDefinitionComposite) pa.getPortletDefinitionByName(pdefName);
+            
+            request.setAttribute(VIEW_PD, pdef);
+            
+            request.setAttribute("tabs", paTabMap.values());
+            request.setAttribute("portlet_tabs", pdTabMap.values());
+            
+            TabBean selectedTab = (TabBean) request.getPortletSession().getAttribute(PortletApplicationResources.REQUEST_SELECT_TAB, PortletSession.APPLICATION_SCOPE);
+            if(selectedTab == null)
+            {
+                selectedTab = (TabBean) paTabMap.values().iterator().next();
+            }
+            
+            //this supports tabs for portlets
+            if(selectedTab.getId().equals("pa_portlets"))
+            {
+                TabBean selectedPortletTab = (TabBean) request.getPortletSession().getAttribute("selected_portlet_tab");
+                if(selectedPortletTab == null)
+                {
+                    selectedPortletTab = (TabBean) pdTabMap.values().iterator().next();
+                }
+                request.setAttribute("selected_portlet_tab", selectedPortletTab);
+            }
+            
+            request.setAttribute(PortletApplicationResources.REQUEST_SELECT_TAB, selectedTab);
+            
+        }
+
+        super.doView(request, response);
+
+    }
+
+    
+    public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) throws PortletException, IOException
+    {
+        String paName = (String)
+        actionRequest.getPortletSession().getAttribute(PortletApplicationResources.PAM_CURRENT_PA, 
+                                             PortletSession.APPLICATION_SCOPE);
+                
+        String selectedPortlet = actionRequest.getParameter(PortletApplicationResources.REQUEST_SELECT_PORTLET);
+        if(selectedPortlet != null)
+        {
+            actionRequest.getPortletSession().setAttribute(PortletApplicationResources.REQUEST_SELECT_PORTLET, selectedPortlet, PortletSession.APPLICATION_SCOPE);
+        }
+        
+        String selectedTab = actionRequest.getParameter(PortletApplicationResources.REQUEST_SELECT_TAB);
+        if(selectedTab != null)
+        {
+            TabBean tab = (TabBean) paTabMap.get(selectedTab);
+            actionRequest.getPortletSession().setAttribute(PortletApplicationResources.REQUEST_SELECT_TAB, tab, PortletSession.APPLICATION_SCOPE);
+        }
+        
+        String selectedPortletTab = actionRequest.getParameter("selected_portlet_tab");
+        if(selectedPortletTab != null)
+        {
+            TabBean tab = (TabBean) pdTabMap.get(selectedPortletTab);
+            actionRequest.getPortletSession().setAttribute("selected_portlet_tab", tab);
+        }
+        
+        String action = actionRequest.getParameter(PORTLET_ACTION);
+        if(action != null)
+        {
+            
+            if(isAppAction(action))
+            {
+                action = getAction(PORTLET_APP_ACTION_PREFIX, action);
+                
+                if(action.endsWith("metadata"))
+                {
+                    processMetadataAction(actionRequest, actionResponse, paName, null, action);
+                }
+                else if(action.endsWith("user_attribute"))
+                {
+                    processUserAttributeAction(actionRequest, actionResponse, paName, action);
+                }
+            }
+            else if(isPortletAction(action))
+            {
+                
+                action = getAction(PORTLET_ACTION_PREFIX, action);
+                String pdefName = (String) actionRequest.getPortletSession().getAttribute(PortletApplicationResources.REQUEST_SELECT_PORTLET, PortletSession.APPLICATION_SCOPE);
+                
+                try
+                {
+                    if(action.endsWith("metadata"))
+                    {
+                        processMetadataAction(actionRequest, actionResponse, paName, pdefName, action);
+                    }
+                    else if(action.endsWith("portlet"))
+                    {
+
+                        MutablePortletApplication pa = registry.getPortletApplication(paName);                                        
+
+                        PortletDefinitionComposite pdef = (PortletDefinitionComposite) pa.getPortletDefinitionByName(pdefName);
+                        
+                        processPortletAction(actionRequest, actionResponse, pa, pdef, action);
+                    }
+                    else if(action.endsWith("preference"))
+                    {
+
+                        MutablePortletApplication pa = registry.getPortletApplication(paName);                                        
+
+                        PortletDefinitionComposite pdef = (PortletDefinitionComposite) pa.getPortletDefinitionByName(pdefName);
+                        
+                        processPreferenceAction(actionRequest, actionResponse, pa, pdef, action);
+                    }
+                    else if(action.endsWith("language"))
+                    {
+
+                        MutablePortletApplication pa = registry.getPortletApplication(paName);                                        
+
+                        PortletDefinitionComposite pdef = (PortletDefinitionComposite) pa.getPortletDefinitionByName(pdefName);
+                        
+                        processLanguage(actionRequest, actionResponse, pa, pdef, action);
+                    }
+                    else if(action.endsWith("parameter"))
+                    {
+
+                        MutablePortletApplication pa = registry.getPortletApplication(paName);                                        
+
+                        PortletDefinitionComposite pdef = (PortletDefinitionComposite) pa.getPortletDefinitionByName(pdefName);
+                        
+                        processParameter(actionRequest, actionResponse, pa, pdef, action);
+                    }
+                    else if(action.endsWith("security"))
+                    {
+
+                        MutablePortletApplication pa = registry.getPortletApplication(paName);                                        
+
+                        PortletDefinitionComposite pdef = (PortletDefinitionComposite) pa.getPortletDefinitionByName(pdefName);
+                        
+                        processSecurity(actionRequest, actionResponse, pa, pdef, action);
+                    }
+                    else if(action.endsWith("content_type"))
+                    {
+
+                        MutablePortletApplication pa = registry.getPortletApplication(paName);                                        
+
+                        PortletDefinitionComposite pdef = (PortletDefinitionComposite) pa.getPortletDefinitionByName(pdefName);
+                        
+                        processContentType(actionRequest, actionResponse, pa, pdef, action);
+                    }
+                }
+                catch (RegistryException e)
+                {                    
+                    throw new PortletException("A Registry action has failed.  "+e.getMessage());                    
+                }
+                
+            }
+        }
+    }
+    
+    private boolean isAppAction(String action)
+    {
+        return action.startsWith(PORTLET_APP_ACTION_PREFIX);
+    }
+    
+    private boolean isPortletAction(String action)
+    {
+        return action.startsWith(PORTLET_ACTION_PREFIX);
+    }
+    
+    private String getAction(String prefix, String action)
+    {
+        return action.substring(prefix.length());
+    }
+    
+    /**
+     * @param actionRequest
+     * @param actionResponse
+     * @param pa
+     * @param action
+     */
+    private void processUserAttributeAction(ActionRequest actionRequest, ActionResponse actionResponse, String paName, String action) 
+    throws PortletException, IOException
+    {
+        
+        if(action.equals("edit_user_attribute"))
+        {
+            String userAttrName = "";
+            try
+            {
+                MutablePortletApplication mpa = registry.getPortletApplication(paName);
+                boolean modified = false;
+                Iterator userAttrIter = mpa.getUserAttributes().iterator();
+                while (userAttrIter.hasNext())
+                {
+                    UserAttribute userAttr = (UserAttribute) userAttrIter.next();
+                    
+                    userAttrName = userAttr.getName();
+                    String description = actionRequest.getParameter(userAttrName + ":description");
+                    if(!userAttr.getDescription().equals(description))
+                    {
+                        userAttr.setDescription(description);
+                        modified = true;
+                    }
+                }
+                if (modified)
+                {
+                    registry.updatePortletApplication(mpa);
+                }
+            }
+            catch (RegistryException e)
+            {
+                throw new PortletException("Failed update user attribute: " + userAttrName, e);
+                
+            }
+        }
+        else if(action.equals("add_user_attribute"))
+        {
+            String userAttrName = actionRequest.getParameter("user_attr_name");
+            String userAttrDesc = actionRequest.getParameter("user_attr_desc");
+            if (userAttrName != null && userAttrName.trim().length() > 0)                
+            {
+                try
+                {
+                    MutablePortletApplication mpa = registry.getPortletApplication(paName);
+                    
+                    mpa.addUserAttribute(userAttrName.trim(), userAttrDesc);                
+                    
+                    registry.updatePortletApplication(mpa);
+                }
+                catch (RegistryException e)
+                {
+                    throw new PortletException("Failed add user attribute: " + userAttrName, e);                    
+                }
+            }
+        }
+        else if(action.equals("remove_user_attribute"))
+        {
+            String[] userAttrNames = actionRequest.getParameterValues("user_attr_id");
+            
+            if(userAttrNames != null)
+            {
+                String userAttrName = "";
+                try
+                {
+                    int count = 0;
+                    MutablePortletApplication mpa = registry.getPortletApplication(paName);
+                    Iterator userAttrIter = mpa.getUserAttributes().iterator();
+                    while (userAttrIter.hasNext())
+                    {
+                        UserAttribute userAttr = (UserAttribute) userAttrIter.next();
+                        for(int ix = 0; ix < userAttrNames.length; ix++)
+                        {
+                            userAttrName = userAttrNames[ix];
+                            if(userAttr.getName().equals(userAttrName))
+                            {
+                                userAttrIter.remove();
+                                count++;                                
+                                break;
+                            }
+                        }
+                    }                    
+                    if (count > 0)
+                    {
+
+                        registry.updatePortletApplication(mpa);
+                    }
+                }
+                catch (RegistryException e)
+                {
+                    throw new PortletException("Failed remove user attribute: " + userAttrName, e);
+                    
+                }                
+            }
+        }
+    }
+
+    /**
+     * @param actionRequest
+     * @param actionResponse
+     * @param pa
+     * @param action
+     * @throws PortletException
+     * @throws IOException
+     */
+    private void processMetadataAction(ActionRequest actionRequest, 
+                                       ActionResponse actionResponse, 
+                                       String  paName, 
+                                       String  pdName,
+                                       String action)
+    throws PortletException, IOException
+    {
+        MutablePortletApplication pa = registry.getPortletApplication(paName);
+        if (pa == null)
+        {
+            return;
+        }        
+        PortletDefinitionComposite pd = null;
+        GenericMetadata meta = null;                
+        if (pdName != null)
+        {
+            pd = (PortletDefinitionComposite) pa.getPortletDefinitionByName(pdName);
+            if (pd != null)
+            {
+                meta = pd.getMetadata();
+            }
+            else
+            {
+                return;
+            }
+        }
+        else
+        {
+            meta = pa.getMetadata();
+        }
+        if (meta == null)
+        {
+            return;
+        }
+        
+        if(action.equals("edit_metadata"))
+        {               
+            try
+            {                
+                boolean modified = false;
+                Iterator fieldsIter = meta.getFields().iterator();            
+                while (fieldsIter.hasNext())
+                {
+                    LocalizedField field = (LocalizedField) fieldsIter.next();
+                    String id = field.getId().toString();
+                    String value = actionRequest.getParameter(id + ":value");
+                    if (value != null)
+                    {
+                        if (!value.equals(field.getValue()))
+                        {
+                            field.setValue(value);
+                            modified = true;
+                        }
+                    }
+                }
+                if (modified)
+                {
+                    if (pd == null)
+                    {                        
+                        registry.updatePortletApplication(pa);
+                    }
+                    else
+                    {                        
+                        registry.savePortletDefinition(pd);
+                    }                                         
+                }
+            }
+            catch (RegistryException e)
+            {
+                throw new PortletException("Failed update meta data attributes: " 
+                        + paName + ", " + ((pdName == null) ? "" : pdName), e);                                    
+            }            
+        }
+        else if (action.equals("remove_metadata"))
+        {
+            String[] ids = actionRequest.getParameterValues("metadata_id");            
+            if (ids != null)
+            {
+                try
+                {
+                    Iterator fieldsIter = meta.getFields().iterator();
+                    int count = 0;                        
+                    while (fieldsIter.hasNext())
+                    {
+                        LocalizedField field = (LocalizedField) fieldsIter.next();
+                        String id = field.getId().toString();
+    
+                        for(int i=0; i<ids.length; i++)
+                        {
+                            String mid = ids[i];
+                            if(mid.equals(id))
+                            {
+                                fieldsIter.remove();
+                                count++;
+                                break;
+                            }
+                        }
+                    }
+                    if (count > 0)
+                    {
+                        if (pd == null)
+                        {                            
+                            registry.updatePortletApplication(pa);
+                        }
+                        else
+                        {                                
+                            registry.savePortletDefinition(pd);
+                        }   
+                    
+                    }                        
+                }
+                catch (RegistryException e)
+                {
+                    throw new PortletException("Failed remove meta data attributes: " 
+                            + paName + ", " + ((pdName == null) ? "" : pdName), e);                                    
+                }                                            
+            }
+        }
+        else if(action.equals("add_metadata"))
+        {
+            String name = actionRequest.getParameter("name");
+            String value = actionRequest.getParameter("value");
+            String localeParam = actionRequest.getParameter("locale");
+            
+            if(localeParam == null || name.trim().length() == 0)
+            {
+                localeParam = "en"; //need to default better
+            }
+            Locale locale = new Locale(localeParam);
+            
+            if (name != null && name.trim().length() > 0)                
+            {
+                try
+                {
+                    meta.addField(locale, name, value);   
+                    if (pd == null)
+                    {
+                        registry.updatePortletApplication(pa);
+                    }
+                    else
+                    {
+                        registry.savePortletDefinition(pd);                      
+                    }                                      
+                  
+                }
+                catch (RegistryException e)
+                {
+                    throw new PortletException("Failed add meta data attribute: " + paName + ", " + name, e);                    
+                }                                                                
+            }
+        }
+    }
+        
+    private void processPortletAction(ActionRequest actionRequest, ActionResponse actionResponse, MutablePortletApplication pa, PortletDefinitionComposite portlet, String action) throws RegistryException
+    {
+        if(action.equals("edit_portlet"))
+        {
+            String displayNameParam = actionRequest.getParameter("display_name");
+            if(displayNameParam == null)
+            {            
+                int index = 0;
+                Iterator displayNameIter = portlet.getDisplayNameSet().iterator();
+                while (displayNameIter.hasNext())
+                {
+                    MutableDisplayName displayName = (MutableDisplayName) displayNameIter.next();
+                    displayNameParam = actionRequest.getParameter("display_name:" + index);
+                    
+                    //this should never happen
+                    if(displayNameParam != null)
+                    {
+                        if(displayNameParam.length() == 0)
+                        {
+                            displayNameIter.remove();
+                        }
+                        else if(!displayNameParam.equals(displayName.getDisplayName()))
+                        {
+                            displayName.setDisplayName(displayNameParam);
+                        }
+                    }
+                    index++;
+                }
+            }
+            else
+            {
+                String locale = actionRequest.getParameter("locale");
+                portlet.addDisplayName(new Locale(locale), displayNameParam);
+            }            
+            
+            registry.savePortletDefinition(portlet);
+        
+        }
+        else if(action.equals("remove_portlet"))
+        {
+            //TODO should this be allowed??
+        }
+        else if(action.equals("add_portlet"))
+        {
+            
+        }
+    }
+    
+    /**
+     * @param actionRequest
+     * @param actionResponse
+     * @param pa
+     * @param pdef
+     * @param action
+     * @throws RegistryException
+     */
+    private void processPreferenceAction(ActionRequest actionRequest, ActionResponse actionResponse, MutablePortletApplication pa, PortletDefinitionComposite portlet, String action) throws RegistryException
+    {
+        if(action.equals("add_preference"))
+        {
+            String name = actionRequest.getParameter("name");
+            String value = actionRequest.getParameter("value");
+            
+            PreferenceComposite pref = (PreferenceComposite) portlet.getPreferenceSet().get(name);
+            if(pref == null)
+            {
+                portlet.addPreference(name, new String[] { value });
+            }
+            else
+            {
+                pref.addValue(value);
+            }
+            
+            registry.savePortletDefinition(portlet);
+        }
+        else if(action.equals("edit_preference"))
+        {
+            String[] prefNames = actionRequest.getParameterValues("pref_edit_id");
+            for (int i = 0; i < prefNames.length; i++)
+            {
+                String prefName = prefNames[i];
+                PreferenceComposite prefComp = (PreferenceComposite) portlet.getPreferenceSet().get(prefName);
+                String[] values = prefComp.getValueArray();
+                for (int j = 0; j < values.length; j++)
+                {
+                    String value = values[j];
+                    String newValue = actionRequest.getParameter(prefName + ":" + j);
+                    if(!value.equals(newValue))
+                    {
+                        prefComp.setValueAt(j, newValue);
+                    }
+                }
+            }
+            
+            registry.savePortletDefinition(portlet);
+        }
+        else if(action.equals("remove_preference"))
+        {
+            String[] prefNames = actionRequest.getParameterValues("pref_remove_id");
+            
+            Iterator prefIter = portlet.getPreferenceSet().iterator();
+            while (prefIter.hasNext())
+            {
+                PreferenceComposite pref = (PreferenceComposite) prefIter.next();
+                String name = pref.getName();
+                
+                for(int i=0; i<prefNames.length; i++)
+                {
+                    String prefName = prefNames[i];
+                    if(name.equals(prefName))
+                    {
+                        prefIter.remove();
+                        break;
+                    }
+                }
+            }
+            
+         // registry.getPersistenceStore().getTransaction().commit();
+        }
+    }
+    
+    /**
+     * @param actionRequest
+     * @param actionResponse
+     * @param pa
+     * @param pdef
+     * @param action
+     * @throws RegistryException
+     */
+    private void processLanguage(ActionRequest actionRequest, ActionResponse actionResponse, MutablePortletApplication pa, PortletDefinitionComposite portlet, String action) throws RegistryException
+    {
+         if(action.equals("add_language"))
+         {
+             String title = actionRequest.getParameter("title");
+             String shortTitle = actionRequest.getParameter("short_title");
+             String keywords = actionRequest.getParameter("keyword");
+             String locale = actionRequest.getParameter("locale");
+
+             portlet.addLanguage(title, shortTitle, keywords, new Locale(locale));
+
+             registry.savePortletDefinition(portlet);
+         }
+         else if(action.equals("remove_language"))
+         {
+             String[] removeIds = actionRequest.getParameterValues("language_remove_id");
+
+             if(removeIds != null)
+             {
+                 int id = 0;
+                 Iterator langIter = portlet.getLanguageSet().iterator();
+                 while (langIter.hasNext())
+                 {
+                     langIter.next();
+
+                     int currentId = id++;
+                     for(int i=0; i<removeIds.length; i++)
+                     {
+                         String removeId = removeIds[i];
+                         String tempId = "" + currentId;
+                         if(removeId.equals(tempId))
+                         {
+                             langIter.remove();
+                             break;
+                         }
+                     }
+                 }
+
+                 registry.savePortletDefinition(portlet);
+             }
+         }
+         else if(action.equals("edit_language"))
+         {
+             String[] editIds = actionRequest.getParameterValues("language_edit_id");
+
+             if(editIds != null)
+             {
+                 //technically, the size and set of edit ids should be 
+                 //equal to the size and set of the language set
+
+                 String id;
+                 int index=0;
+                 Iterator langIter = portlet.getLanguageSet().iterator();
+                 while (langIter.hasNext())
+                 {
+                     id = editIds[index];
+                     
+                     String title = actionRequest.getParameter("title:" + id);
+                     String shortTitle = actionRequest.getParameter("short_title:" + id);
+
+                     //must cast to interface to avoid class loader issues
+                     MutableLanguage lang = (MutableLanguage) langIter.next();
+
+                     if(!lang.getTitle().equals(title))
+                     {
+                         lang.setTitle(title);
+                     }
+
+                     Iterator keywordIter = lang.getKeywords();
+                     int keywordIndex = 0;
+                     ArrayList keywordList = new ArrayList();
+                     
+                     while (keywordIter.hasNext())
+                     {
+                         String keyword = (String) keywordIter.next();
+                         String keywordParam = actionRequest.getParameter("keyword:" + id + ":" + keywordIndex);
+
+                         if(keywordParam != null && keywordParam.length() > 0)
+                         {
+                             keywordList.add(keywordParam);
+                         }
+
+                         keywordIndex++;
+                     }
+
+                     lang.setKeywords(keywordList);
+                     
+                     if(!lang.getShortTitle().equals(shortTitle))
+                     {
+                         lang.setShortTitle(shortTitle);
+                     }
+
+                     registry.savePortletDefinition(portlet);
+                     
+                     index++;
+                 }
+             }
+         }
+    }
+    
+    /**
+     * @param actionRequest
+     * @param actionResponse
+     * @param pa
+     * @param pdef
+     * @param action
+     * @throws FailedToStorePortletDefinitionException
+     */
+    private void processParameter(ActionRequest actionRequest, ActionResponse actionResponse, MutablePortletApplication pa, PortletDefinitionComposite portlet, String action) throws FailedToStorePortletDefinitionException
+    {
+        if(action.equals("add_parameter"))
+        {
+            String name = actionRequest.getParameter("name");
+            if(name != null)
+            {
+                String description = actionRequest.getParameter("description");
+                String locale = actionRequest.getParameter("locale");
+                
+                ParameterComposite parameter = (ParameterComposite)portlet.getInitParameterSet().get(name);
+                if(parameter == null)
+                {
+                    String value = actionRequest.getParameter("value");
+                    parameter = portlet.addInitParameter(name, value, description, new Locale(locale));
+                }
+                else
+                {
+                    parameter.addDescription(new Locale(locale), description);
+                }
+                
+                registry.savePortletDefinition(portlet);
+            }
+        }
+        else if(action.equals("edit_parameter"))
+        {
+            String[] paramIds = actionRequest.getParameterValues("parameter_edit_id");
+            
+            if(paramIds != null)
+            {
+                for(int i=0; i<paramIds.length; i++)
+                {
+                    String paramId = paramIds[i];
+                    ParameterComposite param = (ParameterComposite) portlet.getInitParameterSet().get(paramId);
+                    
+                    String value = actionRequest.getParameter(paramId + ":value");
+                    param.setValue(value);
+                    
+                    int index = 0;
+                    Iterator descIter = param.getDescriptionSet().iterator();
+                    while (descIter.hasNext())
+                    {
+                        MutableDescription description = (MutableDescription) descIter.next();
+                        String descParam = actionRequest.getParameter(paramId + ":description:" + index);
+                        //changing locale not allowed.
+                        
+                        if(descParam != null)
+                        {
+                            if(descParam.length() == 0)
+                            {
+                                descIter.remove();
+                            }
+                            else if(!descParam.equals(description.getDescription()))
+                            {
+                                description.setDescription(descParam);
+                            }
+                        }
+                        
+                        index++;
+                    }
+                    
+                }
+            }
+            
+            registry.savePortletDefinition(portlet);
+        }
+        else if(action.equals("remove_parameter"))
+        {
+            String[] paramIds = actionRequest.getParameterValues("parameter_remove_id");
+            
+            if(paramIds != null)
+            {
+                Iterator paramIter = portlet.getInitParameterSet().iterator();
+                while (paramIter.hasNext())
+                {
+                    ParameterComposite param = (ParameterComposite) paramIter.next();
+                    
+                    for(int i=0; i<paramIds.length; i++)
+                    {
+                        String paramId = paramIds[i];
+                        if(param.getName().equals(paramId))
+                        {
+                            paramIter.remove();
+                            break;
+                        }
+                    }
+                }
+            }
+            
+            registry.savePortletDefinition(portlet);
+        }
+    }
+    
+    /**
+     * @param actionRequest
+     * @param actionResponse
+     * @param pa
+     * @param pdef
+     * @param action
+     * @throws FailedToStorePortletDefinitionException
+     */
+    private void processSecurity(ActionRequest actionRequest, ActionResponse actionResponse, MutablePortletApplication pa, PortletDefinitionComposite portlet, String action) throws FailedToStorePortletDefinitionException
+    {
+        if(action.equals("add_security"))
+        {
+            String name = actionRequest.getParameter("name");
+            
+            if(name != null)
+            {
+                String link = actionRequest.getParameter("link");
+                
+                SecurityRoleRefComposite securityRoleRef = (SecurityRoleRefComposite) portlet.getInitSecurityRoleRefSet().get(name);
+                if(securityRoleRef == null && link != null)
+                {
+                    securityRoleRef = (SecurityRoleRefComposite) portlet.addSecurityRoleRef(name, link);
+                }
+                
+                if(securityRoleRef != null)
+                {
+                    String description = actionRequest.getParameter("description");
+                    if(description != null && description.length() > 0)
+                    {
+                        String locale = actionRequest.getParameter("locale");
+                        if(locale == null)
+                        {
+                            locale = "en";
+                        }
+                        securityRoleRef.addDescription(new Locale(locale), description);
+                    }
+                }
+                registry.savePortletDefinition(portlet);
+            }
+        }
+        else if(action.equals("edit_security"))
+        {
+            Iterator securityIter = portlet.getInitSecurityRoleRefSet().iterator();
+            while (securityIter.hasNext())
+            {
+                SecurityRoleRefComposite secRef = (SecurityRoleRefComposite) securityIter.next();
+                String name = secRef.getRoleName();
+                
+                //TODO:  should this be editable
+                String newName = actionRequest.getParameter(name + ":name");
+                String link = actionRequest.getParameter(name + ":link");
+                
+                if(!secRef.getRoleLink().equals(link))
+                {
+                    secRef.setRoleLink(link);
+                }
+                
+                int index = 0;
+                Iterator descIter = secRef.getDescriptionSet().iterator();
+                while (descIter.hasNext())
+                {
+                    MutableDescription description = (MutableDescription) descIter.next();
+                    String descParam = actionRequest.getParameter(name + ":description:" + index);
+                    //changing locale not allowed.
+                    
+                    if(descParam != null)
+                    {
+                        if(descParam.length() == 0)
+                        {
+                            descIter.remove();
+                        }
+                        else if(!descParam.equals(description.getDescription()))
+                        {
+                            description.setDescription(descParam);
+                        }
+                    }
+                    
+                    index++;
+                }
+            }
+            
+            registry.savePortletDefinition(portlet);
+        }
+        else if(action.equals("remove_security"))
+        {
+            String[] securityIds = actionRequest.getParameterValues("security_remove_id");
+            if(securityIds != null)
+            {
+                for(int i=0; i<securityIds.length; i++)
+                {
+                    String id = securityIds[i];
+                    SecurityRoleRef secRef = portlet.getInitSecurityRoleRefSet().get(id);
+                    portlet.getInitSecurityRoleRefSet().remove(secRef);
+                }
+                /*
+                Iterator securityIter = portlet.getInitSecurityRoleRefSet()..iterator();
+                while (securityIter.hasNext())
+                {
+                    SecurityRoleRefComposite secRef = (SecurityRoleRefComposite) securityIter.next();
+                    for(int i=0; i<securityIds.length; i++)
+                    {
+                        String id = securityIds[i];
+                        if(secRef.getRoleName().equals(id))
+                        {
+                            securityIter.remove();
+                            break;
+                        }
+                    }
+                }
+                */
+            }
+            
+            registry.savePortletDefinition(portlet);
+        }
+    }
+    
+    /**
+     * @param actionRequest
+     * @param actionResponse
+     * @param pa
+     * @param pdef
+     * @param action
+     * @throws FailedToStorePortletDefinitionException
+     */
+    private void processContentType(ActionRequest actionRequest, ActionResponse actionResponse, MutablePortletApplication pa, PortletDefinitionComposite portlet, String action) throws FailedToStorePortletDefinitionException
+    {
+        if(action.equals("add_content_type"))
+        {
+            String contentType = actionRequest.getParameter("content_type");
+            if(contentType != null)
+            {
+                ArrayList allModes = new ArrayList();
+                
+                
+                String[] modes = actionRequest.getParameterValues("mode");
+                if(modes != null)
+                {
+                    for(int i=0; i<modes.length; i++)
+                    {
+                        String mode = modes[i];
+                        //contentTypeImpl.addPortletMode(mode);
+                        allModes.add(new PortletMode(mode));
+                    }
+                }
+
+                String customModes = actionRequest.getParameter("custom_modes");
+                StringTokenizer tok = new StringTokenizer(customModes, ",");
+                while (tok.hasMoreTokens())
+                {
+                    //contentTypeImpl.addPortletMode(tok.nextToken());
+                    allModes.add(tok.nextToken());
+                }
+                
+                portlet.addContentType(contentType, allModes);
+                
+                //registry.getPersistenceStore().getTransaction().commit();
+                registry.savePortletDefinition(portlet);
+            }
+        }
+        else if(action.equals("edit_content_type"))
+        {
+            registry.savePortletDefinition(portlet);
+        }
+        else if(action.equals("remove_content_type"))
+        {
+            String[] contentIds = actionRequest.getParameterValues("content_type_remove_id");
+            if(contentIds != null)
+            {
+                Iterator contentIter = portlet.getContentTypeSet().iterator();
+                while (contentIter.hasNext())
+                {
+                    ContentType contentType = (ContentType) contentIter.next();
+                    for(int i=0; i<contentIds.length; i++)
+                    {
+                        String id = contentIds[i];
+                        if(contentType.getContentType().equals(id))
+                        {
+                            contentIter.remove();
+                            break;
+                        }
+                    }
+                }
+                
+                registry.savePortletDefinition(portlet);
+            }
+        }
+    }
+    
+    private String createXml(MutablePortletApplication pa)
+    {
+        StringBuffer buffer = new StringBuffer();
+        
+        buffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+        
+        //TODO:  add namespace
+        buffer.append("<portlet-app id=\"");
+        buffer.append(pa.getApplicationIdentifier());
+        buffer.append("\" version=\"");
+        buffer.append(pa.getVersion());
+        buffer.append("\">\n");
+        
+        Iterator portletDefsIter = pa.getPortletDefinitions().iterator();
+        while (portletDefsIter.hasNext())
+        {
+            PortletDefinitionComposite pDef = (PortletDefinitionComposite) portletDefsIter.next();
+            buffer.append(createPortletDefinitionXml(pDef));
+        }
+        
+        buffer.append("</portlet-app>\n");
+        
+        return buffer.toString();
+    }
+    
+    private String createPortletDefinitionXml(PortletDefinitionComposite pDef)
+    {
+        StringBuffer buffer = new StringBuffer();
+        
+        buffer.append("<portlet id=\"");
+        buffer.append(pDef.getPortletIdentifier());
+        buffer.append("\">\n");
+        
+        Iterator paramIter = pDef.getInitParameterSet().iterator();
+        while (paramIter.hasNext())
+        {
+            ParameterComposite param = (ParameterComposite) paramIter.next();
+            buffer.append("<init-param>\n");
+            
+            addDescriptions(buffer, param.getDescriptionSet());
+            
+            buffer.append("\t<name>");
+            buffer.append(param.getName());
+            buffer.append("</name>\n");
+            buffer.append("\t<value>");
+            buffer.append(param.getValue());
+            buffer.append("</value>\n");
+            buffer.append("</init-param>\n");
+        }
+        
+        buffer.append("\t<portlet-name>");
+        buffer.append(pDef.getName());
+        buffer.append("</portlet-name>\n");
+        
+        Iterator displayNameIter = pDef.getDisplayNameSet().iterator();
+        while (displayNameIter.hasNext())
+        {
+            MutableDisplayName displayName = (MutableDisplayName) displayNameIter.next();
+            buffer.append("\t<display-name");
+            if(displayName.getLocale() != null)
+            {
+                buffer.append(" xml:lang=\"");
+                buffer.append(displayName.getLocale().getCountry());
+                buffer.append("\"");
+            }
+            buffer.append(">");
+            buffer.append(displayName.getDisplayName());
+            buffer.append("</display-name>\n");
+        }
+        
+        addDescriptions(buffer, pDef.getDescriptionSet());
+        
+        buffer.append("\t<portlet-class>");
+        buffer.append(pDef.getClassName());
+        buffer.append("</portlet-class>\n");
+        
+        buffer.append("\t<expiration-cache>");
+        buffer.append(pDef.getExpirationCache());
+        buffer.append("</expiration-cache>\n");
+        
+        
+        Iterator contentTypeIter = pDef.getContentTypeSet().iterator();
+        while (contentTypeIter.hasNext())
+        {
+            buffer.append("\t<supports>\n");
+            ContentType contentType = (ContentType) contentTypeIter.next();
+            buffer.append("\t\t<mime-type>\n");
+            buffer.append(contentType.getContentType());
+            buffer.append("</mime-type>\n");
+            
+            Iterator modeIter = contentType.getPortletModes();
+            while (modeIter.hasNext())
+            {
+                PortletMode mode = (PortletMode) modeIter.next();
+                buffer.append("\t\t<portlet-mode>");
+                buffer.append(mode.toString());
+                buffer.append("</portlet-mode>\n");
+            }
+            
+            buffer.append("</supports>");
+        }
+        
+        
+        
+        String resourceBundle = pDef.getResourceBundle();
+        if(resourceBundle == null)
+        {
+	        //<portlet-info>
+	        //StringBuffer supportedLocaleBuffer = new StringBuffer();
+	        StringBuffer portletInfoBuffer = new StringBuffer();
+	        
+	        Iterator langIter = pDef.getLanguageSet().iterator();
+	        while (langIter.hasNext())
+	        {
+	            MutableLanguage lang = (MutableLanguage) langIter.next();
+	            /*
+	            supportedLocaleBuffer.append("\t<supported-locale>");
+	            supportedLocaleBuffer.append(lang.getLocale().getCountry());
+	            supportedLocaleBuffer.append("</supported-locale>\n");
+	            */
+	            
+	            //lang.
+	            portletInfoBuffer.append("\t<portlet-info>\n");
+	            portletInfoBuffer.append("\t\t<title>");
+	            portletInfoBuffer.append(lang.getTitle());
+	            portletInfoBuffer.append("</title>\n");
+	            if(lang.getShortTitle() != null)
+	            {
+	                portletInfoBuffer.append("\t\t<short-title>");
+	                portletInfoBuffer.append(lang.getShortTitle());
+	                portletInfoBuffer.append("</short-title>\n");
+	            }
+	            Iterator keywordIter = lang.getKeywords();
+	            if(keywordIter.hasNext())
+	            {
+	                portletInfoBuffer.append("\t\t<keywords>");
+		            while (keywordIter.hasNext())
+		            {
+		                String keyword = (String) keywordIter.next();
+		                portletInfoBuffer.append(keyword);
+		                if(keywordIter.hasNext())
+		                {
+		                    portletInfoBuffer.append(",");
+		                }
+		            }
+		            portletInfoBuffer.append("</keywords>\n");
+	            }
+	            portletInfoBuffer.append("\t</portlet-info>\n");
+	        }
+	        
+//	        buffer.append(supportedLocaleBuffer);
+	        buffer.append(portletInfoBuffer);
+        }
+        else
+        {
+            Iterator supportIter = pDef.getSupportedLocales().iterator();
+            while (supportIter.hasNext())
+            {
+                Locale locale = (Locale) supportIter.next();
+                buffer.append("\t<supported-locale>");
+                buffer.append(locale.getCountry());
+                buffer.append("<supported-locale>\n");
+            }
+        }
+        
+        buffer.append("\t<portlet-preferences>\n");
+        Iterator prefIter = pDef.getPreferenceSet().iterator();
+        while (prefIter.hasNext())
+        {
+            PreferenceComposite pref = (PreferenceComposite) prefIter.next();
+            buffer.append("\t\t<preference>\n");
+            buffer.append("\t\t\t<name>);");
+            buffer.append(pref.getName());
+            buffer.append("</name>\n");
+            String[] values = pref.getValueArray();
+            for (int i = 0; i < values.length; i++)
+            {
+                String value = values[i];
+                buffer.append("\t\t\t<value>");
+                buffer.append(value);
+                buffer.append("</value>\n");
+            }
+            
+            buffer.append("\t\t</preference>\n");
+        }
+        buffer.append("</portlet-preferences>");
+        
+        buffer.append("</portlet>\n");
+        
+        return buffer.toString();
+    }
+    
+    private void addDescriptions(StringBuffer buffer, DescriptionSet descriptions)
+    {
+        Iterator descIter = descriptions.iterator();
+        MutableDescription desc = (MutableDescription) descIter.next();
+        buffer.append("\t<description");
+        if(desc.getLocale() != null)
+        {
+            buffer.append(" xml:lang=\"");
+            buffer.append(desc.getLocale().getCountry());
+            buffer.append("\"");
+        }
+        buffer.append(">");
+        buffer.append(desc.getDescription());
+        buffer.append("</description>\n");
+    }
+
+}

Added: portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/PortletApplicationResources.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/PortletApplicationResources.java?rev=348854&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/PortletApplicationResources.java (added)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/PortletApplicationResources.java Thu Nov 24 18:24:19 2005
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.portlets.pam;
+
+/**
+ * Common resources used by Portlet Application Manager
+ *
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: PortletApplicationResources.java 348264 2005-11-22 22:06:45Z taylor $
+ */
+public interface PortletApplicationResources
+{    
+    /** the selected non-leaf node in the tree view */
+    public final static String REQUEST_NODE = "node";
+    /** the selected leaf node in the tree view */
+    public final static String REQUEST_SELECT_NODE = "select_node";
+    
+    public final static String PORTLET_URL = "portlet_url";
+    public final static String REQUEST_SELECT_PORTLET = "select_portlet";
+    public final static String REQUEST_SELECT_TAB = "selected_tab";
+    public final static String PAM_CURRENT_PA = "org.apache.jetspeed.pam.pa";
+    public final static String CURRENT_FOLDER = "current_folder";
+    public final static String CURRENT_PAGE = "current_page";
+    public final static String PORTLET_ACTION = "portlet_action";
+    public final static String REQUEST_SELECT_SITE_TAB = "selected_site_tab";
+    public final static String SITE_PORTLET = "SitePortlet";
+    
+    // Message Topics
+    public final static String TOPIC_PORTLET_SELECTOR = "portlet.selector";
+    
+    /** Messages **/
+    public static final String MESSAGE_SELECTED = "selected";
+    public static final String MESSAGE_CHANGED = "changed";
+    public static final String MESSAGE_STATUS = "status";
+    public static final String MESSAGE_REFRESH = "refresh";
+    public static final String MESSAGE_FILTERED = "filtered";    
+    
+}

Added: portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/beans/PortletApplicationBean.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/beans/PortletApplicationBean.java?rev=348854&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/beans/PortletApplicationBean.java (added)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/beans/PortletApplicationBean.java Thu Nov 24 18:24:19 2005
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.portlets.pam.beans;
+
+import java.util.Collection;
+
+import org.apache.jetspeed.om.common.GenericMetadata;
+import org.apache.jetspeed.om.common.portlet.PortletApplication;
+import org.apache.pluto.om.common.ObjectID;
+import org.apache.pluto.om.portlet.PortletDefinition;
+import org.apache.pluto.om.portlet.PortletDefinitionList;
+import org.apache.pluto.om.servlet.WebApplicationDefinition;
+
+/**
+ * This portlet is a browser over all the portlet applications in the system.
+ *
+ * @author <a href="mailto:jford@apache.com">Jeremy Ford</a>
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: PortletApplicationBean.java 348264 2005-11-22 22:06:45Z taylor $
+ */
+public class PortletApplicationBean implements PortletApplication
+{
+    PortletApplication pa;
+    
+    
+    public PortletApplicationBean(PortletApplication pa)
+    {
+        this.pa = pa;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.portlet.PortletApplication#getMetadata()
+     */
+    public GenericMetadata getMetadata()
+    {
+        return pa.getMetadata();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.portlet.PortletApplication#getName()
+     */
+    public String getName()
+    {
+        return pa.getName();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.portlet.PortletApplication#getPortletDefinitions()
+     */
+    public Collection getPortletDefinitions()
+    {
+        return pa.getPortletDefinitions();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.portlet.PortletApplication#getPortletDefinitionByName(java.lang.String)
+     */
+    public PortletDefinition getPortletDefinitionByName(String name)
+    {
+        return pa.getPortletDefinitionByName(name);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.portlet.PortletApplication#getUserAttributeRefs()
+     */
+    public Collection getUserAttributeRefs()
+    {
+        return pa.getUserAttributeRefs();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.portlet.PortletApplication#getUserAttributes()
+     */
+    public Collection getUserAttributes()
+    {
+        return pa.getUserAttributes();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.portlet.PortletApplication#getApplicationIdentifier()
+     */
+    public String getApplicationIdentifier()
+    {
+        return pa.getApplicationIdentifier();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.portlet.PortletApplication#getDescription()
+     */
+    public String getDescription()
+    {
+        return pa.getDescription();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.common.portlet.PortletApplication#getApplicationType()
+     */
+    public int getApplicationType()
+    {
+        return pa.getApplicationType();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.pluto.om.portlet.PortletApplicationDefinition#getId()
+     */
+    public ObjectID getId()
+    {
+        return pa.getId();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.pluto.om.portlet.PortletApplicationDefinition#getVersion()
+     */
+    public String getVersion()
+    {
+        return pa.getVersion();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.pluto.om.portlet.PortletApplicationDefinition#getPortletDefinitionList()
+     */
+    public PortletDefinitionList getPortletDefinitionList()
+    {
+        return pa.getPortletDefinitionList();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.pluto.om.portlet.PortletApplicationDefinition#getWebApplicationDefinition()
+     */
+    public WebApplicationDefinition getWebApplicationDefinition()
+    {
+        return pa.getWebApplicationDefinition();
+    }
+
+    public Collection getJetspeedServices()
+    {
+        return pa.getJetspeedServices();
+    }
+}

Added: portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources.properties
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources.properties?rev=348854&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources.properties (added)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources.properties Thu Nov 24 18:24:19 2005
@@ -0,0 +1,110 @@
+# Copyright 2004 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.
+#
+# $Id: PAMResources.properties 348264 2005-11-22 22:06:45Z taylor $
+#
+
+pam.details.name=Name
+pam.details.name.description=The Name of this item
+
+pam.details.description=Description
+pam.details.description.description=A descriptive phrase for this item
+
+pam.details.value=Value
+pam.details.value.description=The value for this item
+
+pam.details.locale=Locale
+pam.details.locale.description=A valid 2 letter country code
+
+pam.details.version=Version
+pam.details.type=Type
+pam.details.type.webapp=WEBAPP
+pam.details.type.local=Local
+pam.details.id=ID
+pam.details.services=Services
+
+pam.details.choose_portlet=Please Chooose a Portlet
+pam.details.edit=Update Selected
+pam.details.remove=Remove Selected
+pam.details.add_user_attribute=Add User Attribute
+
+##Metadata view
+pam.details.add_metadata=Add MetaData
+
+##Portlet view
+pam.details.expiration_cache=Expiration Cache
+pam.details.unique_name=Unique Name
+pam.details.preference_validator=Preference Validator
+pam.details.class_name=Class Name
+pam.details.display_name=Display Name
+pam.details.display_name.description=Name that will Display for this Portlet
+pam.details.edit_display_name=Update Display Name(s)
+pam.details.add_display_name=Add Display Name
+
+##Preference view
+pam.details.add_preference=Add Preference
+
+##Language view
+pam.details.title=Title
+pam.details.short_title=Short Title
+pam.details.keyword=Keyword
+pam.details.title.description=Title to appear in title bar
+pam.details.short_title.description=A short descriptive title
+pam.details.keyword.description=Comma delimited list of keywords
+pam.details.add_language=Add Language
+
+##Parameter View
+pam.details.add_parameter=Add Parameter
+
+##Security View
+pam.details.role_name=Role Name
+pam.details.role_name.description=The name of the role
+
+pam.details.role_link=Role Link
+pam.details.role_link.description=The id of the role link
+
+pam.details.add_security=Add Security
+
+##Content Type View
+pam.details.content_type=Content Type
+pam.details.content_type.description=MimeType like text/html.  Wildcards are allowed.
+
+pam.details.modes=Modes
+pam.details.portlet_mode=Portlet Mode
+pam.details.portlet_mode.view=View
+pam.details.portlet_mode.edit=Edit
+pam.details.portlet_mode.help=Help
+pam.details.portlet_mode.description=Standard portlet modes that the portlet supports
+
+pam.details.custom_mode=Custom Modes
+pam.details.custom_modes.description=Custom Modes that the portlet supports
+
+pam.details.add_content_type=Add Content Type
+
+##Portlet Application Tabs
+pam.details.tabs.pa_details=Details
+pam.details.tabs.pa_metadata=MetaData
+pam.details.tabs.pa_portlets=Portlets
+pam.details.tabs.pa_user_attribtues=User Attributes
+
+##Portlet Definition Tabs
+pam.details.tabs.pd_details=Details
+pam.details.tabs.pd_metadata=MetaData
+pam.details.tabs.pd_preferences=Preferences
+pam.details.tabs.pd_languages=Languages
+pam.details.tabs.pd_parameters=Parameters
+pam.details.tabs.pd_security=Security
+pam.details.tabs.pd_content_type=Content Type
+
+

Added: portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_ca.properties
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_ca.properties?rev=348854&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_ca.properties (added)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_ca.properties Thu Nov 24 18:24:19 2005
@@ -0,0 +1,108 @@
+# Copyright 2004 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.
+#
+# $Id: PAMResources_en.properties,v 1.2 2005/02/20 23:00:25 shinsuke Exp $
+#
+# LOCALIZATION MAINTAINER:
+#  Jetspeed Development Team
+
+pam.details.name=Nom
+pam.details.name.description=El nom d'aquest element
+
+pam.details.description=Descripci\u00f3
+pam.details.description.description=Una frase descriptiva per a aquest element
+
+pam.details.value=Valor
+pam.details.value.description=El valor per a aquest element
+
+pam.details.locale=Locale
+pam.details.locale.description=Un codi de pa\u00eds de 2 lletres v\u00e0lid
+
+pam.details.version=Versi\u00f3
+pam.details.type=Tipus
+pam.details.type.webapp=WEBAPP
+pam.details.type.local=Local
+pam.details.aneu=ANEU
+pam.details.services=Serveis
+
+pam.details.choose_portlet=Per favor esculli un portlet
+pam.details.edit=Actualitzar seleccionat
+pam.details.remove=Esborrar seleccionat
+pam.details.add_user_attribute=Afegir atribut d'usuari
+
+## Metadata view
+pam.details.add_metadata=Afegir metadades
+
+## Portlet view
+pam.details.expiration_cache=Expiraci\u00f3 de cach\u00e9
+pam.details.unique_name=Nom \u00fanic
+pam.details.preference_validator=Validador de prefer\u00e8ncia
+pam.details.class_name=Nom de classe
+pam.details.display_name=Nom de visualitzaci\u00f3
+pam.details.display_name.description=Nom que es mostrar\u00e0 per a aquest Portlet
+pam.details.edit_display_name=Actualitzar nom(s) a visualitzar
+pam.details.add_display_name=Afegir nom a visualitzar
+
+## Preference view
+pam.details.add_preference=Afegir prefer\u00e8ncia
+
+## Language view
+pam.details.title=T\u00edtol
+pam.details.short_title=T\u00edtol curt
+pam.details.keyword=Paraula clau
+pam.details.title.description=T\u00edtol a apar\u00e8ixer en la barra de t\u00edtol
+pam.details.short_title.description=Un t\u00edtol descriptiu curt
+pam.details.keyword.description=Llesta de paraules clau separades per coma
+pam.details.add_language=Afegir llenguatge
+
+## Parameter View
+pam.details.add_parameter=Afegir par\u00e0metre
+
+## Security View
+pam.details.role_name=Nom del rol
+pam.details.role_name.description=El nom del rol
+pam.details.role_link=Vincle del rol
+pam.details.role_link.description=L'aneu del vincle del rol
+pam.details.add_security=Afegir seguretat
+
+## Content Type View
+pam.details.content_type=Tipus de contingut
+pam.details.content_type.description=Tipus acaroni com text/html. Comodins permesos.
+
+pam.details.modes=Maneres
+pam.details.portlet_mode=Manera del Portlet
+pam.details.portlet_mode.view=Veure
+pam.details.portlet_mode.edit=Editar
+pam.details.portlet_mode.help=Ajuda
+pam.details.portlet_mode.description=Maneres de portlet est\u00e0ndard que el portlet suporta
+
+pam.details.custom_mode=Maneres personalitzades
+pam.details.custom_modes.description=Maneres personalitzades que el portlet suporta
+pam.details.add_content_type=Afegir tipus de contingut
+
+## Portlet Application Tabs
+pam.details.tabs.pa_details=Detalls
+pam.details.tabs.pa_metadata=MetaDatos
+pam.details.tabs.pa_portlets=Portlets
+pam.details.tabs.pa_user_attribtues=Atributs d'usuari
+
+## Portlet Definition Tabs
+pam.details.tabs.pd_details=Detalls
+pam.details.tabs.pd_metadata=MetaDatps
+pam.details.tabs.pd_preferences=Prefer\u00e8ncies
+pam.details.tabs.pd_languages=Llenguatges
+pam.details.tabs.pd_parameters=Par\u00e0metres
+pam.details.tabs.pd_security=Seguretat
+pam.details.tabs.pd_content_type=Tipus de contingut
+

Added: portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_en.properties
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_en.properties?rev=348854&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_en.properties (added)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_en.properties Thu Nov 24 18:24:19 2005
@@ -0,0 +1,112 @@
+# Copyright 2004 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.
+#
+# $Id: PAMResources_en.properties 348264 2005-11-22 22:06:45Z taylor $
+#
+# LOCALIZATION MAINTAINER:
+#  Jetspeed Development Team
+
+pam.details.name=Name
+pam.details.name.description=The Name of this item
+
+pam.details.description=Description
+pam.details.description.description=A descriptive phrase for this item
+
+pam.details.value=Value
+pam.details.value.description=The value for this item
+
+pam.details.locale=Locale
+pam.details.locale.description=A valid 2 letter country code
+
+pam.details.version=Version
+pam.details.type=Type
+pam.details.type.webapp=WEBAPP
+pam.details.type.local=Local
+pam.details.id=ID
+pam.details.services=Services
+
+pam.details.choose_portlet=Please Chooose a Portlet
+pam.details.edit=Update Selected
+pam.details.remove=Remove Selected
+pam.details.add_user_attribute=Add User Attribute
+
+##Metadata view
+pam.details.add_metadata=Add MetaData
+
+##Portlet view
+pam.details.expiration_cache=Expiration Cache
+pam.details.unique_name=Unique Name
+pam.details.preference_validator=Preference Validator
+pam.details.class_name=Class Name
+pam.details.display_name=Display Name
+pam.details.display_name.description=Name that will Display for this Portlet
+pam.details.edit_display_name=Update Display Name(s)
+pam.details.add_display_name=Add Display Name
+
+##Preference view
+pam.details.add_preference=Add Preference
+
+##Language view
+pam.details.title=Title
+pam.details.short_title=Short Title
+pam.details.keyword=Keyword
+pam.details.title.description=Title to appear in title bar
+pam.details.short_title.description=A short descriptive title
+pam.details.keyword.description=Comma delimited list of keywords
+pam.details.add_language=Add Language
+
+##Parameter View
+pam.details.add_parameter=Add Parameter
+
+##Security View
+pam.details.role_name=Role Name
+pam.details.role_name.description=The name of the role
+
+pam.details.role_link=Role Link
+pam.details.role_link.description=The id of the role link
+
+pam.details.add_security=Add Security
+
+##Content Type View
+pam.details.content_type=Content Type
+pam.details.content_type.description=MimeType like text/html.  Wildcards are allowed.
+
+pam.details.modes=Modes
+pam.details.portlet_mode=Portlet Mode
+pam.details.portlet_mode.view=View
+pam.details.portlet_mode.edit=Edit
+pam.details.portlet_mode.help=Help
+pam.details.portlet_mode.description=Standard portlet modes that the portlet supports
+
+pam.details.custom_mode=Custom Modes
+pam.details.custom_modes.description=Custom Modes that the portlet supports
+
+pam.details.add_content_type=Add Content Type
+
+##Portlet Application Tabs
+pam.details.tabs.pa_details=Details
+pam.details.tabs.pa_metadata=MetaData
+pam.details.tabs.pa_portlets=Portlets
+pam.details.tabs.pa_user_attribtues=User Attributes
+
+##Portlet Definition Tabs
+pam.details.tabs.pd_details=Details
+pam.details.tabs.pd_metadata=MetaData
+pam.details.tabs.pd_preferences=Preferences
+pam.details.tabs.pd_languages=Languages
+pam.details.tabs.pd_parameters=Parameters
+pam.details.tabs.pd_security=Security
+pam.details.tabs.pd_content_type=Content Type
+
+

Added: portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_es.properties
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_es.properties?rev=348854&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_es.properties (added)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_es.properties Thu Nov 24 18:24:19 2005
@@ -0,0 +1,112 @@
+# Copyright 2004 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.
+#
+# $Id: PAMResources_en.properties,v 1.2 2005/02/20 23:00:25 shinsuke Exp $
+#
+# LOCALIZATION MAINTAINER:
+#  Jetspeed Development Team
+
+pam.details.name=Nombre
+pam.details.name.description=El nombre de este elemento
+
+pam.details.description=Descripci\u00f3n
+pam.details.description.description=Una frase descriptiva para este elemento
+
+pam.details.value=Valor
+pam.details.value.description=El valor para este elemento
+
+pam.details.locale=Locale
+pam.details.locale.description=Un c\u00f3digo de pa\u00eds de 2 letras v\u00e1lido
+
+pam.details.version=Versi\u00f3n
+pam.details.type=Tipo
+pam.details.type.webapp=WEBAPP
+pam.details.type.local=Local
+pam.details.id=ID
+pam.details.services=Servicios
+
+pam.details.choose_portlet=Por favor escoja un portlet
+pam.details.edit=Actualizar seleccionado
+pam.details.remove=Borrar seleccionado
+pam.details.add_user_attribute=A\u00f1adir atributo de usuario
+
+##Metadata view
+pam.details.add_metadata=A\u00f1adir metadatos
+
+##Portlet view
+pam.details.expiration_cache=Expiraci\u00f3n de antememoria (cach\u00e9)
+pam.details.unique_name=Nombre \u00fanico
+pam.details.preference_validator=Validador de preferencia
+pam.details.class_name=Nombre de clase
+pam.details.display_name=Nombre de visualizaci\u00f3n
+pam.details.display_name.description=Nombre que se mostrar\u00e1 para este Portlet
+pam.details.edit_display_name=Actualizar nombre(s) a visualizar
+pam.details.add_display_name=A\u00f1adir nombre a visualizar
+
+##Preference view
+pam.details.add_preference=A\u00f1adir preferencia
+
+##Language view
+pam.details.title=T\u00edtulo
+pam.details.short_title=T\u00edtulo corto
+pam.details.keyword=Palabra clave
+pam.details.title.description=T\u00edtulo a aparecer en la barra de t\u00edtulo
+pam.details.short_title.description=Un t\u00edtulo descriptivo corto
+pam.details.keyword.description=Lista de palabras clave separadas por coma
+pam.details.add_language=A\u00f1adir lenguaje
+
+##Parameter View
+pam.details.add_parameter=A\u00f1adir par\u00e1metro
+
+##Security View
+pam.details.role_name=Nombre del rol
+pam.details.role_name.description=El nombre del rol
+
+pam.details.role_link=V\u00ednculo del rol
+pam.details.role_link.description=El id del v\u00ednculo del rol
+
+pam.details.add_security=A\u00f1adir seguridad
+
+##Content Type View
+pam.details.content_type=Tipo de contenido
+pam.details.content_type.description=Tipo mime como text/html. Comodines permitidos.
+
+pam.details.modes=Modos
+pam.details.portlet_mode=Modo del Portlet
+pam.details.portlet_mode.view=Ver
+pam.details.portlet_mode.edit=Editar
+pam.details.portlet_mode.help=Ayuda
+pam.details.portlet_mode.description=Modos de portlet est\u00e1ndar que el portlet soporta
+
+pam.details.custom_mode=Modos personalizados
+pam.details.custom_modes.description=Modos personalizados que el portlet soporta
+
+pam.details.add_content_type=A\u00f1adir tipo de contenido
+
+##Portlet Application Tabs
+pam.details.tabs.pa_details=Detalles
+pam.details.tabs.pa_metadata=MetaDatos
+pam.details.tabs.pa_portlets=Portlets
+pam.details.tabs.pa_user_attribtues=Atributos de usuario
+
+##Portlet Definition Tabs
+pam.details.tabs.pd_details=Detalles
+pam.details.tabs.pd_metadata=MetaDatps
+pam.details.tabs.pd_preferences=Preferencias
+pam.details.tabs.pd_languages=Lenguajes
+pam.details.tabs.pd_parameters=Par\u00e1metros
+pam.details.tabs.pd_security=Seguridad
+pam.details.tabs.pd_content_type=Tipo de contenido
+
+

Added: portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_hu.properties
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_hu.properties?rev=348854&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_hu.properties (added)
+++ portals/jetspeed-2/trunk/applications/j2-admin/src/java/org/apache/jetspeed/portlets/pam/resources/PAMResources_hu.properties Thu Nov 24 18:24:19 2005
@@ -0,0 +1,112 @@
+# Copyright 2004 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.
+#
+# $Id: PAMResources_en.properties 188342 2005-02-20 23:00:25Z shinsuke $
+#
+# LOCALIZATION MAINTAINER:
+#  Jetspeed Development Team
+
+pam.details.name=N\u00e9v
+pam.details.name.description=Ennek a t\u00e9telnek a neve
+
+pam.details.description=Le\u00edr\u00e1s
+pam.details.description.description=Ennek a t\u00e9telnek a le\u00edr\u00e1sa
+
+pam.details.value=\u00c9rt\u00e9k
+pam.details.value.description=Ennek a t\u00e9telnek az \u00e9rt\u00e9ke
+
+pam.details.locale=Locale
+pam.details.locale.description=A 2 bet\u0171s orsz\u00e1gk\u00f3d
+
+pam.details.version=Verzi\u00f3
+pam.details.type=Tipus
+pam.details.type.webapp=WEBAPP
+pam.details.type.local=Helyi
+pam.details.id=ID
+pam.details.services=Szolg\u00e1ltat\u00e1sok
+
+pam.details.choose_portlet=K\u00e9rem v\u00e1lassza ki a Portletet
+pam.details.edit=Kiv\u00e1lasztot m\u00f3dos\u00edt\u00e1sa
+pam.details.remove=Kiv\u00e1lasztott t\u00f6rl\u00e9se
+pam.details.add_user_attribute=Felhaszn\u00e1l\u00f3i tulajdons\u00e1g hozz\u00e1ad\u00e1sa
+
+##Metadata view
+pam.details.add_metadata=Metaadat hozz\u00e1ad\u00e1sa
+
+##Portlet view
+pam.details.expiration_cache=Cache lej\u00e1rat
+pam.details.unique_name=Egyedi n\u00e9v
+pam.details.preference_validator=Tulajdon\u00e1g ellen\u0151rz\u0151
+pam.details.class_name=Oszt\u00e1ly neve
+pam.details.display_name=Megjelen\u00edt\u00e9si n\u00e9v
+pam.details.display_name.description=A Portlet megjelen\u00edt\u00e9si neve
+pam.details.edit_display_name=Megjelen\u00edt\u00e9si nevek friss\u00edt\u00e9se
+pam.details.add_display_name=Megjelen\u00edt\u00e9si n\u00e9v hozz\u00e1ad\u00e1sa
+
+##Preference view
+pam.details.add_preference=Tulajdons\u00e1g hozz\u00e1ad\u00e1sa
+
+##Language view
+pam.details.title=C\u00edm
+pam.details.short_title=R\u00f6vid c\u00edm
+pam.details.keyword=Kulcsszavak
+pam.details.title.description=A c\u00edm, amely a C\u00edmsoron megjelenik
+pam.details.short_title.description=A r\u00f6vid, le\u00edr\u00f3 c\u00edm
+pam.details.keyword.description=A kulcsszavak vessz\u0151vel elv\u00e1lasztva
+pam.details.add_language=Nyelv hozz\u00e1ad\u00e1sa
+
+##Parameter View
+pam.details.add_parameter=Param\u00e9ter hozz\u00e1ad\u00e1sa
+
+##Security View
+pam.details.role_name=Szerepk\u00f6r neve
+pam.details.role_name.description=A szerepk\u00f6r neve
+
+pam.details.role_link=Szerepk\u00f6r Link
+pam.details.role_link.description=A Szerepk\u00f6r link azonos\u00edt\u00f3ja
+
+pam.details.add_security=Jogosults\u00e1g felv\u00e9tele
+
+##Content Type View
+pam.details.content_type=Tartalom tipusa
+pam.details.content_type.description=MimeType lehet text/html. Joker karakterek enged\u00e9lyezve.
+
+pam.details.modes=M\u00f3dok
+pam.details.portlet_mode=Portlet M\u00f3d
+pam.details.portlet_mode.view=N\u00e9zet
+pam.details.portlet_mode.edit=Szerkeszt\u00e9s
+pam.details.portlet_mode.help=Seg\u00edts\u00e9g
+pam.details.portlet_mode.description=Alapvet\u0151 portlet m\u00f3dok
+
+pam.details.custom_mode=Egyedi m\u00f3dok
+pam.details.custom_modes.description=Azon egyedi m\u00f3dok, melyeket a portlet t\u00e1mogat
+
+pam.details.add_content_type=Tartalom tipus hozz\u00e1ad\u00e1sa
+
+##Portlet Application Tabs
+pam.details.tabs.pa_details=Re\u00e9szletek
+pam.details.tabs.pa_metadata=Metaadatok
+pam.details.tabs.pa_portlets=Portletek
+pam.details.tabs.pa_user_attribtues=Felhaszn\u00f3l\u00f3i tulajdons\u00e1gok
+
+##Portlet Definition Tabs
+pam.details.tabs.pd_details=R\u00e9szletek
+pam.details.tabs.pd_metadata=Metaadatok
+pam.details.tabs.pd_preferences=Tulajdons\u00e1gok
+pam.details.tabs.pd_languages=Nyelvek
+pam.details.tabs.pd_parameters=Param\u00e9terek
+pam.details.tabs.pd_security=Jogosults\u00e1g
+pam.details.tabs.pd_content_type=Tartalom tipusa
+
+



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