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 sm...@apache.org on 2007/09/24 21:20:52 UTC

svn commit: r578923 - in /portals/jetspeed-2/branches/JETSPEED-2.1.3/applications/j2-admin/src: java/org/apache/jetspeed/portlets/selector/CategoryPortletSelector.java webapp/WEB-INF/view/selectors/category-portlet-selector.vm

Author: smilek
Date: Mon Sep 24 12:20:51 2007
New Revision: 578923

URL: http://svn.apache.org/viewvc?rev=578923&view=rev
Log:
adjustments for major changes to desktop code; portlet selector specific javascript in core.js has been moved to selector.js

Modified:
    portals/jetspeed-2/branches/JETSPEED-2.1.3/applications/j2-admin/src/java/org/apache/jetspeed/portlets/selector/CategoryPortletSelector.java
    portals/jetspeed-2/branches/JETSPEED-2.1.3/applications/j2-admin/src/webapp/WEB-INF/view/selectors/category-portlet-selector.vm

Modified: portals/jetspeed-2/branches/JETSPEED-2.1.3/applications/j2-admin/src/java/org/apache/jetspeed/portlets/selector/CategoryPortletSelector.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/applications/j2-admin/src/java/org/apache/jetspeed/portlets/selector/CategoryPortletSelector.java?rev=578923&r1=578922&r2=578923&view=diff
==============================================================================
--- portals/jetspeed-2/branches/JETSPEED-2.1.3/applications/j2-admin/src/java/org/apache/jetspeed/portlets/selector/CategoryPortletSelector.java (original)
+++ portals/jetspeed-2/branches/JETSPEED-2.1.3/applications/j2-admin/src/java/org/apache/jetspeed/portlets/selector/CategoryPortletSelector.java Mon Sep 24 12:20:51 2007
@@ -1,788 +1,788 @@
-/*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jetspeed.portlets.selector;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Random;
-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.PortletPreferences;
-import javax.portlet.PortletSession;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jetspeed.CommonPortletServices;
-import org.apache.jetspeed.JetspeedActions;
-import org.apache.jetspeed.PortalReservedParameters;
-import org.apache.jetspeed.components.portletregistry.PortletRegistry;
-import org.apache.jetspeed.headerresource.HeaderResource;
-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.om.page.Fragment;
-import org.apache.jetspeed.om.page.Page;
-import org.apache.jetspeed.page.PageManager;
-import org.apache.jetspeed.portlets.CategoryInfo;
-import org.apache.jetspeed.portlets.PortletInfo;
-import org.apache.jetspeed.profiler.Profiler;
-import org.apache.jetspeed.request.RequestContext;
-import org.apache.jetspeed.search.ParsedObject;
-import org.apache.jetspeed.search.SearchEngine;
-import org.apache.jetspeed.security.SecurityAccessController;
-import org.apache.pluto.om.common.Parameter;
-import org.apache.portals.gems.dojo.AbstractDojoVelocityPortlet;
-import org.apache.velocity.context.Context;
-
-/**
- * CategoryPortletSelector selects categories organized by categories
- * 
- * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
- * @version $Id: $
- */
-public class CategoryPortletSelector extends AbstractDojoVelocityPortlet implements Comparator
-{
-    public final String[] DEFAULT_IMAGES = new String[]
-    {
-            "images/portlets/applications-development.png",
-            "images/portlets/applications-system.png",
-            "images/portlets/applications-other.png",
-            "images/portlets/linux.png"
-    };
-    protected final Log logger = LogFactory.getLog(this.getClass());
-    public final static String PORTLET_ICON = "portlet-icon";
-    protected final static String PORTLETS = "category.selector.portlets";
-    protected final static String CATEGORIES = "category.selector.categories";
-    protected final static String PAGE = "category.selector.page";
-    protected final static String LAYOUT = "category.selector.layout";
-    
-    private final String JSPAGE = "jspage";
-    private final String JSLAYOUT = "jslayoutid";
-	private final String CATEGORY = "category";
-	private final String PAGENUMNER = "pageNumber";
-	private final String FILTER = "filter";
-    
-    protected PortletRegistry registry;
-    protected SearchEngine searchEngine;
-    protected PageManager pageManager;
-    protected Profiler profiler;
-    protected SecurityAccessController securityAccessController;
-    protected Random rand;
-    
-    public void init(PortletConfig config)
-    throws PortletException 
-    {
-        super.init(config);
-        PortletContext 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");
-        }        
-        searchEngine = (SearchEngine)context.getAttribute(CommonPortletServices.CPS_SEARCH_COMPONENT);
-        if (null == searchEngine)
-        {
-            throw new PortletException("Failed to find the Search Engine on portlet initialization");
-        }
-        pageManager = (PageManager)context.getAttribute(CommonPortletServices.CPS_PAGE_MANAGER_COMPONENT);
-        if (null == pageManager)
-        {
-            throw new PortletException("Failed to find the Page Manager on portlet initialization");
-        }        
-        securityAccessController = (SecurityAccessController)context.getAttribute(CommonPortletServices.CPS_SECURITY_ACCESS_CONTROLLER);
-        if (null == securityAccessController)
-        {
-            throw new PortletException("Failed to find the Security Access Controller on portlet initialization");
-        }
-        profiler = (Profiler)context.getAttribute(CommonPortletServices.CPS_PROFILER_COMPONENT);
-        if (null == profiler)
-        {
-            throw new PortletException("Failed to find the Profiler on portlet initialization");
-        }        
-        rand = new Random( 19580427 );
-    }
-    
-    public void doView(RenderRequest request, RenderResponse response)
-            throws PortletException, IOException
-    {
-    	String category = "All";
-    	String pageNumber = "";	
-		String row = "";		
-		String columns = "";
-		int portletPerPages=0;
-    	PortletPreferences prefs = request.getPreferences();
-		category = request.getParameter(CATEGORY);
-		pageNumber = request.getParameter(PAGENUMNER);
-		String filter = request.getParameter(FILTER);
-		columns = prefs.getValue("Columns", "4");
-		row = prefs.getValue("Rows", "6");
-		portletPerPages = Integer.parseInt(columns) * Integer.parseInt(row);
-		if (category == null || category.equals("")) category = "All";
-		if (pageNumber == null || pageNumber.equals("")) pageNumber = "1";
-		if (filter == null ||  filter.equals("")) filter = null;
-		CategoryResult result = getPortlets(request, category, pageNumber, portletPerPages, filter);
-        this.getContext(request).put("Columns", columns);
-        this.getContext(request).put("Rows", row);
-        this.getContext(request).put("pageNumber", pageNumber);
-        this.getContext(request).put("category", category);
-        this.getContext(request).put("portlets", mergePortletCount(result.getList(),request));
-        this.getContext(request).put("Count", new Integer(result.getResultSize()));
-        this.getContext(request).put("categories", retrieveCategories(request));
-        processPage(request);
-        super.doView(request, response);
-    }
-    
-    protected Page getPage(RenderRequest request) throws Exception
-    {
-        String path = request.getParameter(JSPAGE);
-        RequestContext requestContext = (RequestContext) 
-            request.getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);        
-        return requestContext.locatePage(profiler, path);
-    }    
-    
-    protected void processPage(RenderRequest request)
-    {
-        String page = request.getParameter(JSPAGE);
-        if (page == null || page.equals(""))
-        {
-            page = (String)request.getPortletSession().getAttribute(PAGE);
-        }
-        else
-        {
-            request.getPortletSession().setAttribute(PAGE, page);
-        }
-        String layout = request.getParameter(JSLAYOUT);
-        this.getContext(request).put(JSPAGE, page); 
-        if (layout == null || layout.equals(""))
-        {
-            layout = (String)request.getPortletSession().getAttribute(LAYOUT);
-        }
-        else
-        {
-            request.getPortletSession().setAttribute(LAYOUT, layout);
-        }
-        this.getContext(request).put(JSLAYOUT, layout);                
-    }
-    
-    public List retrieveCategories(RenderRequest request)
-    throws PortletException
-    {
-        List categories = (List)request.getPortletSession().getAttribute(CATEGORIES);
-        if (categories != null)
-        {
-            return categories;
-        }
-        Locale locale = request.getLocale();        
-        categories = new ArrayList();
-        PortletPreferences prefs = request.getPreferences();
-        String cats = prefs.getValue("Categories", null);
-        if (cats == null)
-        {
-            throw new PortletException("No categories defined, please add categories via edit mode.");
-        }
-        StringTokenizer catTokenizer = new StringTokenizer(cats, ",");
-        while (catTokenizer.hasMoreTokens())
-        {
-            String name = catTokenizer.nextToken().trim();
-            CategoryInfo cat = new CategoryInfo(name);
-            String keywords = prefs.getValue("Keywords:" + name, null);
-            if (keywords != null)
-            {
-                StringTokenizer keyTokenizer = new StringTokenizer(keywords, ",");
-                StringBuffer searchString = new StringBuffer();
-                int count = 0;
-                while (keyTokenizer.hasMoreTokens())
-                {
-                    String keyword = keyTokenizer.nextToken().trim();
-                    if (count > 0)
-                    {
-                        searchString.append(" | ");
-                    }
-                    searchString.append(keyword);
-                    count++;
-                }
-                if (count > 0)
-                {
-                    Iterator portlets = searchEngine.search(searchString.toString()).getResults().iterator();
-                    while (portlets.hasNext())
-                    {
-                        PortletDefinitionComposite portlet = 
-                            getPortletFromParsedObject((ParsedObject)portlets.next());
-                        PortletInfo portletInfo = filterPortlet(portlet, locale);
-                        if (portletInfo != null)
-                        {
-                            cat.addPortlet(portletInfo);
-                        }                    
-                    }                
-                    Collections.sort(cat.getPortlets(), this);
-                    categories.add(cat);
-                }
-            }
-        }
-        request.getPortletSession().setAttribute(CATEGORIES, categories);        
-        return categories;
-    }
-    
-    public List retrievePortlets(RenderRequest request, String filter)
-    {
-        List portletsList = (List)request.getPortletSession().getAttribute(PORTLETS);
-        if (filter == null && portletsList != null)
-        {
-            return portletsList;
-        }        
-        Iterator portlets = null;
-        List list = new ArrayList();
-        Locale locale = request.getLocale();                
-        if (filter == null)
-            portlets = registry.getAllPortletDefinitions().iterator();
-        else
-            portlets = searchEngine.search(filter).getResults().iterator();
-        
-        while (portlets.hasNext())
-        {
-            PortletDefinitionComposite portlet = null;
-            if (filter == null)
-                portlet = (PortletDefinitionComposite)portlets.next();
-            else
-                portlet = getPortletFromParsedObject((ParsedObject)portlets.next());
-            
-            PortletInfo portletInfo = filterPortlet(portlet, locale);
-            if (portletInfo != null)
-            {
-                list.add(portletInfo);
-            }
-        }            
-        Collections.sort(list, this);
-        if(filter == null ) request.getPortletSession().setAttribute(PORTLETS, list);
-        return list;
-    }
-    
-
-    private List mergePortletCount(List sysPortlets,
-			RenderRequest request) {
-		List list = new ArrayList();
-		int sPortletCnt = 0;
-		Iterator iterator;
-		String usrPortletName = null;
-		PortletInfo tmpPortletInfo = null;
-		String portletName;
-		try {
-			Map usrPortlet = getUserPortlet(getPage(request));
-			sPortletCnt = sysPortlets.size();
-			for (int si = 0; si < sPortletCnt; si++) {
-				tmpPortletInfo = (PortletInfo)((PortletInfo)sysPortlets.get(si)).clone(); 
-				portletName = tmpPortletInfo.getName();
-				iterator = usrPortlet.keySet().iterator();
-				while (iterator.hasNext()) {
-					usrPortletName = (String) iterator.next();
-					if (usrPortletName.equalsIgnoreCase(portletName)) {
-						tmpPortletInfo.setCount(((Integer)usrPortlet.get(usrPortletName)).intValue());
-					}
-				}
-				list.add(tmpPortletInfo);
-				tmpPortletInfo = null;
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return list;
-	}
-
-    
-    /**
-     * Filters portlets being added to the based on security checks and layout criteria
-     * 
-     * @param portlet
-     * @return null if filtered, otherwise PortletInfo to be added to list
-     */
-    protected PortletInfo filterPortlet(PortletDefinitionComposite portlet, Locale locale)
-    {
-        if (portlet == null)
-            return null;
-        
-        // Do not display Jetspeed Layout Applications
-        MutablePortletApplication pa = (MutablePortletApplication)portlet.getPortletApplicationDefinition();
-        if (pa.isLayoutApplication())
-            return null;
-        
-        // SECURITY filtering
-        String uniqueName = pa.getName() + "::" + portlet.getName();
-        if (securityAccessController.checkPortletAccess(portlet, JetspeedActions.MASK_VIEW))
-        {
-            Parameter param = portlet.getInitParameterSet().get(PORTLET_ICON);
-            String image;
-            if (param != null)
-            {                
-                //String relativeImagePath = param.getValue();
-                //String context = muta.getWebApplicationDefinition().getContextRoot();
-                // Have to use a supported icon in jetspeed, otherwise image can be out of skew
-                String  imagePath = param.getValue();
-                if (imagePath == null)
-                {
-                    image = DEFAULT_IMAGES[rand.nextInt(DEFAULT_IMAGES.length)];
-                }
-                else
-                {
-                    if (-1 == imagePath.indexOf("/"))
-                        image = "images/portlets/" + param.getValue();
-                    else
-                        image = param.getValue();
-                }
-            }
-            else
-            {
-                image = DEFAULT_IMAGES[rand.nextInt(DEFAULT_IMAGES.length)];
-            }
-            return new PortletInfo(uniqueName, cleanup(portlet.getDisplayNameText(locale)), cleanup(portlet.getDescriptionText(locale)), image);
-        }
-        return null;
-    }
-    
-    protected String cleanup(String str)
-    {
-        if (str == null)
-            return str;
-        return str.replaceAll("\r|\n|\"|\'", "");
-    }
-    
-    protected PortletDefinitionComposite getPortletFromParsedObject(ParsedObject po)
-    {
-        boolean found = false;
-        String name = "";
-        Map fields = po.getFields();
-        if(fields != null)
-        {
-            Object id = fields.get("ID");
-    
-            if(id != null)
-            {
-                if(id instanceof Collection)
-                {
-                    Collection coll = (Collection)id;
-                    name = (String) coll.iterator().next();
-                }
-                else
-                {
-                    name = (String)id;
-                }
-            }
-            
-            if(po.getType().equals("portlet"))
-            {
-                Object pa = fields.get("portlet_application");
-                String paName = "";
-                if(pa != null)
-                {
-                    if(id instanceof Collection)
-                    {
-                        Collection coll = (Collection)pa;
-                        paName = (String) coll.iterator().next();
-                    }
-                    else
-                    {
-                        paName = (String)pa;
-                    }
-                }
-                name = paName + "::" + name;
-                found = true;
-            }
-        }
-        if (found == false)
-            return null;
-        
-        return registry.getPortletDefinitionByUniqueName(name);
-    }
-        
-    
-    public void processAction(ActionRequest request,
-            ActionResponse actionResponse) throws PortletException, IOException
-    {
-        if (request.getPortletMode() == PortletMode.EDIT)
-        {
-            String removes = request.getParameter("jsRemovedCats");
-            String modifiedCats = request.getParameter("jsModifiedCats");
-            String modifiedKeys = request.getParameter("jsModifiedKeys");
-            String addedCats = request.getParameter("jsAddedCats");
-            String addedKeys = request.getParameter("jsAddedKeys");
-            String columns = request.getParameter("Columns");
-            String rows = request.getParameter("Rows");
-            String cats = request.getParameter("jsCats");
-            String page = request.getParameter(JSPAGE);
-            MutablePortletApplication pa = registry.getPortletApplication("j2-admin");
-            String portletName = this.getPortletName();
-            PortletDefinitionComposite portlet = (PortletDefinitionComposite) pa.getPortletDefinitionByName(portletName);
-            boolean updated = updateNumericPref("Columns", columns, 10, portlet);
-            updated = updated | updateNumericPref("Rows", rows, 100, portlet);
-                        
-            // process removes first
-            if (!isEmpty(removes))
-            {
-                StringTokenizer tokenizer = new StringTokenizer(removes, ",");
-                while (tokenizer.hasMoreTokens())
-                {
-                    String name = tokenizer.nextToken().trim();
-                    updated = updated | removePref("Keywords:" + name, portlet);
-                }                
-            }
-            
-            // process adds
-            if (!isEmpty(addedCats))
-            {
-                StringTokenizer keyTokenizer = new StringTokenizer(addedKeys, "|");
-                StringTokenizer tokenizer = new StringTokenizer(addedCats, ",");
-                while (tokenizer.hasMoreTokens() && keyTokenizer.hasMoreTokens())
-                {
-                    String name = tokenizer.nextToken().trim();
-                    String keys = keyTokenizer.nextToken().trim();
-                    updated = updated | addPref("Keywords:" + name, keys, portlet);
-                }                
-            }
-            
-            // process updates
-            if (!isEmpty(modifiedCats))
-            {
-                StringTokenizer keyTokenizer = new StringTokenizer(modifiedKeys, "|");
-                StringTokenizer tokenizer = new StringTokenizer(modifiedCats, ",");
-                while (tokenizer.hasMoreTokens())
-                {
-                    String name = tokenizer.nextToken().trim();
-                    String keys = keyTokenizer.nextToken().trim();                    
-                    updated = updated | modifyPref("Keywords:" + name, keys, portlet);
-                }                
-            }
-                                    
-            try
-            {
-                if (updated)
-                {
-                    // process category string list
-                    // sort it first
-                    StringTokenizer catTokenizer = new StringTokenizer(cats, ",");
-                    List sorted = new ArrayList();
-                    while (catTokenizer.hasMoreTokens())
-                    {
-                        String name = catTokenizer.nextToken().trim();
-                        sorted.add(name);
-                    }
-                    Collections.sort(sorted);
-                    Iterator si = sorted.iterator();
-                    StringBuffer temp = new StringBuffer();
-                    int count = 0;
-                    while (si.hasNext())
-                    {
-                        String name = (String)si.next();
-                        if (count > 0)
-                        {
-                            temp.append(",");
-                        }
-                        temp.append(name);
-                        count++;
-                    }
-                    cats = temp.toString();
-                    //System.out.println("cats = [" + cats + "]");
-                    modifyPref("Categories", cats, portlet);
-                    
-                    // finally save it all
-                    registry.savePortletDefinition(portlet);
-                }
-            }
-            catch (Exception e)
-            {
-                throw new PortletException("Failed to update portlet", e);
-            }
-            PortletSession session = request.getPortletSession();
-            session.removeAttribute(PORTLETS);
-            session.removeAttribute(CATEGORIES);
-            actionResponse.setPortletMode(PortletMode.VIEW);
-            actionResponse.setRenderParameter(JSPAGE, page);
-        }
-        else
-        {            
-        	String reset = request.getParameter("reset");        
-            if (reset != null && reset.equals("true"))
-            {
-                PortletSession session = request.getPortletSession();
-                session.removeAttribute(PORTLETS);
-                session.removeAttribute(CATEGORIES);
-            }
-            String category = request.getParameter(CATEGORY);
-            if (category != null)
-                actionResponse.setRenderParameter(CATEGORY, category);
-            String pageNumber = request.getParameter(PAGENUMNER);
-            if (pageNumber != null)
-                actionResponse.setRenderParameter(PAGENUMNER, pageNumber);                
-            String filter = request.getParameter(FILTER);
-            if (filter != null)
-                actionResponse.setRenderParameter(FILTER, filter);
-            String pagePath = request.getParameter(JSPAGE);
-            if (pagePath != null)
-                actionResponse.setRenderParameter(JSPAGE, pagePath);            
-        }
-    }
-
-    private boolean addPref(String prefName, String keywords, PortletDefinitionComposite portlet)
-    {
-        PreferenceComposite pref = (PreferenceComposite) portlet.getPreferenceSet().get(prefName);        
-        if (pref == null)
-        {
-            portlet.addPreference(prefName, new String[] { keywords });
-        }
-        else
-        {
-            return modifyPref(prefName, keywords, portlet);           
-        }        
-        return true;
-    }
-    
-    private boolean modifyPref(String prefName, String keywords, PortletDefinitionComposite portlet)
-    {
-        PreferenceComposite prefComp = (PreferenceComposite) portlet.getPreferenceSet().get(prefName);
-        String[] values = prefComp.getValueArray();
-        if(!values[0].equals(keywords))
-        {
-            prefComp.setValueAt(0, keywords);
-            return true;
-        }
-        return false;
-    }
-    
-    private boolean removePref(String prefName, PortletDefinitionComposite portlet)
-    {
-        Iterator prefIter = portlet.getPreferenceSet().iterator();
-        while (prefIter.hasNext())
-        {
-            PreferenceComposite pref = (PreferenceComposite) prefIter.next();
-            String name = pref.getName();
-            if (name.equals(prefName))
-            {
-                    prefIter.remove();
-                    return true;
-            }
-        }
-        return false;
-    }
-    
-    private boolean updateNumericPref(String prefName, String param, int max, PortletDefinitionComposite portlet)
-    {
-        if (!isEmpty(param))
-        {
-            int val = 4;
-            try
-            {
-                val = Integer.parseInt(param);
-            }
-            catch (NumberFormatException e)
-            {
-                return false;                
-            }
-            if (val > max)
-                return false;
-            PreferenceComposite pref = (PreferenceComposite) portlet.getPreferenceSet().get(prefName);
-            String[] values = pref.getValueArray();
-            if(!values[0].equals(param))
-            {
-                pref.setValueAt(0, param);
-                return true;
-            }                           
-        }
-        return false;
-    }
-    private boolean isEmpty(String param)
-    {
-        if (param == null)
-            return true;
-        param = param.trim();
-        if (param.length() == 0)
-            return true;
-        return false;
-    }
-
-    public int compare(Object obj1, Object obj2)
-    {
-        PortletInfo portlet1 = (PortletInfo)obj1;
-        PortletInfo portlet2 = (PortletInfo)obj2;
-        String name1 = portlet1.getDisplayName();
-        String name2 = portlet2.getDisplayName();
-        name1 = (name1 == null) ? "unknown" : name1;
-        name2 = (name2 == null) ? "unknown" : name2;
-        return name1.compareTo(name2);
-    }
-        
-    protected void includeHeaderContent(HeaderResource headerResource)
-    {
-        headerResource.dojoAddCoreLibraryRequire( "dojo.widget.Dialog" );
-        headerResource.dojoAddCoreLibraryRequire( "dojo.widget.Button" );
-        headerResource.dojoAddCoreLibraryRequire( "dojo.widget.ContentPane" );
-        headerResource.dojoAddCoreLibraryRequire( "dojo.widget.LayoutContainer" );
-        headerResource.dojoAddModuleLibraryRequire( "jetspeed.desktop.core" );        
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.portals.bridges.velocity.GenericVelocityPortlet#doEdit(javax.portlet.RenderRequest, javax.portlet.RenderResponse)
-     */
-    public void doEdit(RenderRequest request, RenderResponse response) throws PortletException, IOException
-    {
-        Context context = getContext(request);
-        PortletPreferences prefs = request.getPreferences();
-        String cats = prefs.getValue("Categories", null);
-        List categories = new ArrayList();
-        if (cats != null)
-        {
-            StringTokenizer catTokenizer = new StringTokenizer(cats, ",");
-            while (catTokenizer.hasMoreTokens())
-            {
-                String name = catTokenizer.nextToken().trim();
-                CategoryInfo cat = new CategoryInfo(name);
-                String keys = prefs.getValue("Keywords:" + name, "");
-                cat.setKeywords(keys);
-                categories.add(cat);
-            }
-        }
-        context.put("categories", categories);
-        context.put("Rows", prefs.getValue("Rows", "5"));
-        context.put("Columns", prefs.getValue("Columns", "4"));
-        processPage(request);
-        super.doEdit(request, response);
-    }
-    
-    private CategoryResult getPortlets(RenderRequest request,
-			String category, String pageNumber, int portletPerPages,String filter) {
-		List list = new ArrayList();
-		List tmpList = null;
-		List catList = null;
-		Iterator iterator = null;
-		int portletCount = 0;
-		CategoryInfo catInfo = null;
-		int strtCnt = getStartRow(pageNumber, portletPerPages);
-		int endCnt = getEndRow(pageNumber, portletPerPages);
-		try {			
-			if (category.equalsIgnoreCase("all")) {				
-				tmpList = retrievePortlets(request, filter);
-				portletCount = tmpList.size();
-				if (endCnt > portletCount)
-					endCnt = portletCount;
-				for (int index = strtCnt; index < endCnt; index++) {
-					list.add(tmpList.get(index));
-				}
-			} else if (category.equalsIgnoreCase("search")) {
-				tmpList = retrievePortlets(request, filter);
-				portletCount = tmpList.size();
-				if (endCnt > portletCount)
-					endCnt = portletCount;
-				for (int index = strtCnt; index < endCnt; index++) {
-					list.add(tmpList.get(index));
-				}
-			} else {
-				tmpList =  retrieveCategories(request);
-				iterator = tmpList.iterator();
-				while (iterator.hasNext()) {
-					catInfo = (CategoryInfo) iterator.next();
-					if (catInfo.getName().equalsIgnoreCase(category)) {
-						catList = catInfo.getPortlets();
-						break;
-					}
-				}
-				portletCount = catList.size();
-				if (endCnt > portletCount)
-					endCnt = portletCount;
-				for (int index = strtCnt; index < endCnt; index++) {
-					list.add(catList.get(index));
-				}
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return new CategoryResult(list, portletCount);
-	}
-    
-    
-	private int getStartRow(String sPageNumber, int portletPerPages) {
-		int iPageNumber = Integer.parseInt(sPageNumber);
-		return (iPageNumber - 1) * portletPerPages;
-	}
-
-	private int getEndRow(String sPageNumber,int portletPerPages) {
-		int iPageNumber = Integer.parseInt(sPageNumber);
-		return iPageNumber * portletPerPages;
-	}
-	private Map getUserPortlet(Page page) {
-		int portletCount = 0;
-		Map map = new HashMap();
-		try {
-			Fragment fragment;
-			Iterator it = page.getRootFragment().getFragments().iterator();
-			while (it.hasNext()) {
-				fragment = (Fragment) it.next();
-				if (map.containsKey(fragment.getName())) {
-					portletCount =((Integer) map.get(fragment.getName())).intValue();				
-					map.put(fragment.getName(), new Integer(portletCount + 1));					
-				} else {
-					map.put(fragment.getName(), new Integer(1));
-				}
-			}
-		} catch (Exception e) {
-//			System.out.println(e.getMessage());
-			e.printStackTrace();
-		}
-		return map;
-	}
-
-    class CategoryResult {
-		List list;
-
-		int resultSize;
-
-		/**
-		 * @param list
-		 * @param resultSize
-		 */
-		public CategoryResult(List list, int resultSize) {
-			this.list = list;
-			this.resultSize = resultSize;
-		}
-
-		/**
-		 * @return the list
-		 */
-		public List getList() {
-			return list;
-		}
-
-		/**
-		 * @return the resultSize
-		 */
-		public int getResultSize() {
-			return resultSize;
-		}
-	}
-}
+ * 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.selector;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Random;
+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.PortletPreferences;
+import javax.portlet.PortletSession;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.CommonPortletServices;
+import org.apache.jetspeed.JetspeedActions;
+import org.apache.jetspeed.PortalReservedParameters;
+import org.apache.jetspeed.components.portletregistry.PortletRegistry;
+import org.apache.jetspeed.headerresource.HeaderResource;
+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.om.page.Fragment;
+import org.apache.jetspeed.om.page.Page;
+import org.apache.jetspeed.page.PageManager;
+import org.apache.jetspeed.portlets.CategoryInfo;
+import org.apache.jetspeed.portlets.PortletInfo;
+import org.apache.jetspeed.profiler.Profiler;
+import org.apache.jetspeed.request.RequestContext;
+import org.apache.jetspeed.search.ParsedObject;
+import org.apache.jetspeed.search.SearchEngine;
+import org.apache.jetspeed.security.SecurityAccessController;
+import org.apache.pluto.om.common.Parameter;
+import org.apache.portals.gems.dojo.AbstractDojoVelocityPortlet;
+import org.apache.velocity.context.Context;
+
+/**
+ * CategoryPortletSelector selects categories organized by categories
+ * 
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public class CategoryPortletSelector extends AbstractDojoVelocityPortlet implements Comparator
+{
+    public final String[] DEFAULT_IMAGES = new String[]
+    {
+            "images/portlets/applications-development.png",
+            "images/portlets/applications-system.png",
+            "images/portlets/applications-other.png",
+            "images/portlets/linux.png"
+    };
+    protected final Log logger = LogFactory.getLog(this.getClass());
+    public final static String PORTLET_ICON = "portlet-icon";
+    protected final static String PORTLETS = "category.selector.portlets";
+    protected final static String CATEGORIES = "category.selector.categories";
+    protected final static String PAGE = "category.selector.page";
+    protected final static String LAYOUT = "category.selector.layout";
+    
+    private final String JSPAGE = "jspage";
+    private final String JSLAYOUT = "jslayoutid";
+	private final String CATEGORY = "category";
+	private final String PAGENUMNER = "pageNumber";
+	private final String FILTER = "filter";
+    
+    protected PortletRegistry registry;
+    protected SearchEngine searchEngine;
+    protected PageManager pageManager;
+    protected Profiler profiler;
+    protected SecurityAccessController securityAccessController;
+    protected Random rand;
+    
+    public void init(PortletConfig config)
+    throws PortletException 
+    {
+        super.init(config);
+        PortletContext 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");
+        }        
+        searchEngine = (SearchEngine)context.getAttribute(CommonPortletServices.CPS_SEARCH_COMPONENT);
+        if (null == searchEngine)
+        {
+            throw new PortletException("Failed to find the Search Engine on portlet initialization");
+        }
+        pageManager = (PageManager)context.getAttribute(CommonPortletServices.CPS_PAGE_MANAGER_COMPONENT);
+        if (null == pageManager)
+        {
+            throw new PortletException("Failed to find the Page Manager on portlet initialization");
+        }        
+        securityAccessController = (SecurityAccessController)context.getAttribute(CommonPortletServices.CPS_SECURITY_ACCESS_CONTROLLER);
+        if (null == securityAccessController)
+        {
+            throw new PortletException("Failed to find the Security Access Controller on portlet initialization");
+        }
+        profiler = (Profiler)context.getAttribute(CommonPortletServices.CPS_PROFILER_COMPONENT);
+        if (null == profiler)
+        {
+            throw new PortletException("Failed to find the Profiler on portlet initialization");
+        }        
+        rand = new Random( 19580427 );
+    }
+    
+    public void doView(RenderRequest request, RenderResponse response)
+            throws PortletException, IOException
+    {
+    	String category = "All";
+    	String pageNumber = "";	
+		String row = "";		
+		String columns = "";
+		int portletPerPages=0;
+    	PortletPreferences prefs = request.getPreferences();
+		category = request.getParameter(CATEGORY);
+		pageNumber = request.getParameter(PAGENUMNER);
+		String filter = request.getParameter(FILTER);
+		columns = prefs.getValue("Columns", "4");
+		row = prefs.getValue("Rows", "6");
+		portletPerPages = Integer.parseInt(columns) * Integer.parseInt(row);
+		if (category == null || category.equals("")) category = "All";
+		if (pageNumber == null || pageNumber.equals("")) pageNumber = "1";
+		if (filter == null ||  filter.equals("")) filter = null;
+		CategoryResult result = getPortlets(request, category, pageNumber, portletPerPages, filter);
+        this.getContext(request).put("Columns", columns);
+        this.getContext(request).put("Rows", row);
+        this.getContext(request).put("pageNumber", pageNumber);
+        this.getContext(request).put("category", category);
+        this.getContext(request).put("portlets", mergePortletCount(result.getList(),request));
+        this.getContext(request).put("Count", new Integer(result.getResultSize()));
+        this.getContext(request).put("categories", retrieveCategories(request));
+        processPage(request);
+        super.doView(request, response);
+    }
+    
+    protected Page getPage(RenderRequest request) throws Exception
+    {
+        String path = request.getParameter(JSPAGE);
+        RequestContext requestContext = (RequestContext) 
+            request.getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);        
+        return requestContext.locatePage(profiler, path);
+    }    
+    
+    protected void processPage(RenderRequest request)
+    {
+        String page = request.getParameter(JSPAGE);
+        if (page == null || page.equals(""))
+        {
+            page = (String)request.getPortletSession().getAttribute(PAGE);
+        }
+        else
+        {
+            request.getPortletSession().setAttribute(PAGE, page);
+        }
+        String layout = request.getParameter(JSLAYOUT);
+        this.getContext(request).put(JSPAGE, page); 
+        if (layout == null || layout.equals(""))
+        {
+            layout = (String)request.getPortletSession().getAttribute(LAYOUT);
+        }
+        else
+        {
+            request.getPortletSession().setAttribute(LAYOUT, layout);
+        }
+        this.getContext(request).put(JSLAYOUT, layout);                
+    }
+    
+    public List retrieveCategories(RenderRequest request)
+    throws PortletException
+    {
+        List categories = (List)request.getPortletSession().getAttribute(CATEGORIES);
+        if (categories != null)
+        {
+            return categories;
+        }
+        Locale locale = request.getLocale();        
+        categories = new ArrayList();
+        PortletPreferences prefs = request.getPreferences();
+        String cats = prefs.getValue("Categories", null);
+        if (cats == null)
+        {
+            throw new PortletException("No categories defined, please add categories via edit mode.");
+        }
+        StringTokenizer catTokenizer = new StringTokenizer(cats, ",");
+        while (catTokenizer.hasMoreTokens())
+        {
+            String name = catTokenizer.nextToken().trim();
+            CategoryInfo cat = new CategoryInfo(name);
+            String keywords = prefs.getValue("Keywords:" + name, null);
+            if (keywords != null)
+            {
+                StringTokenizer keyTokenizer = new StringTokenizer(keywords, ",");
+                StringBuffer searchString = new StringBuffer();
+                int count = 0;
+                while (keyTokenizer.hasMoreTokens())
+                {
+                    String keyword = keyTokenizer.nextToken().trim();
+                    if (count > 0)
+                    {
+                        searchString.append(" | ");
+                    }
+                    searchString.append(keyword);
+                    count++;
+                }
+                if (count > 0)
+                {
+                    Iterator portlets = searchEngine.search(searchString.toString()).getResults().iterator();
+                    while (portlets.hasNext())
+                    {
+                        PortletDefinitionComposite portlet = 
+                            getPortletFromParsedObject((ParsedObject)portlets.next());
+                        PortletInfo portletInfo = filterPortlet(portlet, locale);
+                        if (portletInfo != null)
+                        {
+                            cat.addPortlet(portletInfo);
+                        }                    
+                    }                
+                    Collections.sort(cat.getPortlets(), this);
+                    categories.add(cat);
+                }
+            }
+        }
+        request.getPortletSession().setAttribute(CATEGORIES, categories);        
+        return categories;
+    }
+    
+    public List retrievePortlets(RenderRequest request, String filter)
+    {
+        List portletsList = (List)request.getPortletSession().getAttribute(PORTLETS);
+        if (filter == null && portletsList != null)
+        {
+            return portletsList;
+        }        
+        Iterator portlets = null;
+        List list = new ArrayList();
+        Locale locale = request.getLocale();                
+        if (filter == null)
+            portlets = registry.getAllPortletDefinitions().iterator();
+        else
+            portlets = searchEngine.search(filter).getResults().iterator();
+        
+        while (portlets.hasNext())
+        {
+            PortletDefinitionComposite portlet = null;
+            if (filter == null)
+                portlet = (PortletDefinitionComposite)portlets.next();
+            else
+                portlet = getPortletFromParsedObject((ParsedObject)portlets.next());
+            
+            PortletInfo portletInfo = filterPortlet(portlet, locale);
+            if (portletInfo != null)
+            {
+                list.add(portletInfo);
+            }
+        }            
+        Collections.sort(list, this);
+        if(filter == null ) request.getPortletSession().setAttribute(PORTLETS, list);
+        return list;
+    }
+    
+
+    private List mergePortletCount(List sysPortlets,
+			RenderRequest request) {
+		List list = new ArrayList();
+		int sPortletCnt = 0;
+		Iterator iterator;
+		String usrPortletName = null;
+		PortletInfo tmpPortletInfo = null;
+		String portletName;
+		try {
+			Map usrPortlet = getUserPortlet(getPage(request));
+			sPortletCnt = sysPortlets.size();
+			for (int si = 0; si < sPortletCnt; si++) {
+				tmpPortletInfo = (PortletInfo)((PortletInfo)sysPortlets.get(si)).clone(); 
+				portletName = tmpPortletInfo.getName();
+				iterator = usrPortlet.keySet().iterator();
+				while (iterator.hasNext()) {
+					usrPortletName = (String) iterator.next();
+					if (usrPortletName.equalsIgnoreCase(portletName)) {
+						tmpPortletInfo.setCount(((Integer)usrPortlet.get(usrPortletName)).intValue());
+					}
+				}
+				list.add(tmpPortletInfo);
+				tmpPortletInfo = null;
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return list;
+	}
+
+    
+    /**
+     * Filters portlets being added to the based on security checks and layout criteria
+     * 
+     * @param portlet
+     * @return null if filtered, otherwise PortletInfo to be added to list
+     */
+    protected PortletInfo filterPortlet(PortletDefinitionComposite portlet, Locale locale)
+    {
+        if (portlet == null)
+            return null;
+        
+        // Do not display Jetspeed Layout Applications
+        MutablePortletApplication pa = (MutablePortletApplication)portlet.getPortletApplicationDefinition();
+        if (pa.isLayoutApplication())
+            return null;
+        
+        // SECURITY filtering
+        String uniqueName = pa.getName() + "::" + portlet.getName();
+        if (securityAccessController.checkPortletAccess(portlet, JetspeedActions.MASK_VIEW))
+        {
+            Parameter param = portlet.getInitParameterSet().get(PORTLET_ICON);
+            String image;
+            if (param != null)
+            {                
+                //String relativeImagePath = param.getValue();
+                //String context = muta.getWebApplicationDefinition().getContextRoot();
+                // Have to use a supported icon in jetspeed, otherwise image can be out of skew
+                String  imagePath = param.getValue();
+                if (imagePath == null)
+                {
+                    image = DEFAULT_IMAGES[rand.nextInt(DEFAULT_IMAGES.length)];
+                }
+                else
+                {
+                    if (-1 == imagePath.indexOf("/"))
+                        image = "images/portlets/" + param.getValue();
+                    else
+                        image = param.getValue();
+                }
+            }
+            else
+            {
+                image = DEFAULT_IMAGES[rand.nextInt(DEFAULT_IMAGES.length)];
+            }
+            return new PortletInfo(uniqueName, cleanup(portlet.getDisplayNameText(locale)), cleanup(portlet.getDescriptionText(locale)), image);
+        }
+        return null;
+    }
+    
+    protected String cleanup(String str)
+    {
+        if (str == null)
+            return str;
+        return str.replaceAll("\r|\n|\"|\'", "");
+    }
+    
+    protected PortletDefinitionComposite getPortletFromParsedObject(ParsedObject po)
+    {
+        boolean found = false;
+        String name = "";
+        Map fields = po.getFields();
+        if(fields != null)
+        {
+            Object id = fields.get("ID");
+    
+            if(id != null)
+            {
+                if(id instanceof Collection)
+                {
+                    Collection coll = (Collection)id;
+                    name = (String) coll.iterator().next();
+                }
+                else
+                {
+                    name = (String)id;
+                }
+            }
+            
+            if(po.getType().equals("portlet"))
+            {
+                Object pa = fields.get("portlet_application");
+                String paName = "";
+                if(pa != null)
+                {
+                    if(id instanceof Collection)
+                    {
+                        Collection coll = (Collection)pa;
+                        paName = (String) coll.iterator().next();
+                    }
+                    else
+                    {
+                        paName = (String)pa;
+                    }
+                }
+                name = paName + "::" + name;
+                found = true;
+            }
+        }
+        if (found == false)
+            return null;
+        
+        return registry.getPortletDefinitionByUniqueName(name);
+    }
+        
+    
+    public void processAction(ActionRequest request,
+            ActionResponse actionResponse) throws PortletException, IOException
+    {
+        if (request.getPortletMode() == PortletMode.EDIT)
+        {
+            String removes = request.getParameter("jsRemovedCats");
+            String modifiedCats = request.getParameter("jsModifiedCats");
+            String modifiedKeys = request.getParameter("jsModifiedKeys");
+            String addedCats = request.getParameter("jsAddedCats");
+            String addedKeys = request.getParameter("jsAddedKeys");
+            String columns = request.getParameter("Columns");
+            String rows = request.getParameter("Rows");
+            String cats = request.getParameter("jsCats");
+            String page = request.getParameter(JSPAGE);
+            MutablePortletApplication pa = registry.getPortletApplication("j2-admin");
+            String portletName = this.getPortletName();
+            PortletDefinitionComposite portlet = (PortletDefinitionComposite) pa.getPortletDefinitionByName(portletName);
+            boolean updated = updateNumericPref("Columns", columns, 10, portlet);
+            updated = updated | updateNumericPref("Rows", rows, 100, portlet);
+                        
+            // process removes first
+            if (!isEmpty(removes))
+            {
+                StringTokenizer tokenizer = new StringTokenizer(removes, ",");
+                while (tokenizer.hasMoreTokens())
+                {
+                    String name = tokenizer.nextToken().trim();
+                    updated = updated | removePref("Keywords:" + name, portlet);
+                }                
+            }
+            
+            // process adds
+            if (!isEmpty(addedCats))
+            {
+                StringTokenizer keyTokenizer = new StringTokenizer(addedKeys, "|");
+                StringTokenizer tokenizer = new StringTokenizer(addedCats, ",");
+                while (tokenizer.hasMoreTokens() && keyTokenizer.hasMoreTokens())
+                {
+                    String name = tokenizer.nextToken().trim();
+                    String keys = keyTokenizer.nextToken().trim();
+                    updated = updated | addPref("Keywords:" + name, keys, portlet);
+                }                
+            }
+            
+            // process updates
+            if (!isEmpty(modifiedCats))
+            {
+                StringTokenizer keyTokenizer = new StringTokenizer(modifiedKeys, "|");
+                StringTokenizer tokenizer = new StringTokenizer(modifiedCats, ",");
+                while (tokenizer.hasMoreTokens())
+                {
+                    String name = tokenizer.nextToken().trim();
+                    String keys = keyTokenizer.nextToken().trim();                    
+                    updated = updated | modifyPref("Keywords:" + name, keys, portlet);
+                }                
+            }
+                                    
+            try
+            {
+                if (updated)
+                {
+                    // process category string list
+                    // sort it first
+                    StringTokenizer catTokenizer = new StringTokenizer(cats, ",");
+                    List sorted = new ArrayList();
+                    while (catTokenizer.hasMoreTokens())
+                    {
+                        String name = catTokenizer.nextToken().trim();
+                        sorted.add(name);
+                    }
+                    Collections.sort(sorted);
+                    Iterator si = sorted.iterator();
+                    StringBuffer temp = new StringBuffer();
+                    int count = 0;
+                    while (si.hasNext())
+                    {
+                        String name = (String)si.next();
+                        if (count > 0)
+                        {
+                            temp.append(",");
+                        }
+                        temp.append(name);
+                        count++;
+                    }
+                    cats = temp.toString();
+                    //System.out.println("cats = [" + cats + "]");
+                    modifyPref("Categories", cats, portlet);
+                    
+                    // finally save it all
+                    registry.savePortletDefinition(portlet);
+                }
+            }
+            catch (Exception e)
+            {
+                throw new PortletException("Failed to update portlet", e);
+            }
+            PortletSession session = request.getPortletSession();
+            session.removeAttribute(PORTLETS);
+            session.removeAttribute(CATEGORIES);
+            actionResponse.setPortletMode(PortletMode.VIEW);
+            actionResponse.setRenderParameter(JSPAGE, page);
+        }
+        else
+        {            
+        	String reset = request.getParameter("reset");        
+            if (reset != null && reset.equals("true"))
+            {
+                PortletSession session = request.getPortletSession();
+                session.removeAttribute(PORTLETS);
+                session.removeAttribute(CATEGORIES);
+            }
+            String category = request.getParameter(CATEGORY);
+            if (category != null)
+                actionResponse.setRenderParameter(CATEGORY, category);
+            String pageNumber = request.getParameter(PAGENUMNER);
+            if (pageNumber != null)
+                actionResponse.setRenderParameter(PAGENUMNER, pageNumber);                
+            String filter = request.getParameter(FILTER);
+            if (filter != null)
+                actionResponse.setRenderParameter(FILTER, filter);
+            String pagePath = request.getParameter(JSPAGE);
+            if (pagePath != null)
+                actionResponse.setRenderParameter(JSPAGE, pagePath);            
+        }
+    }
+
+    private boolean addPref(String prefName, String keywords, PortletDefinitionComposite portlet)
+    {
+        PreferenceComposite pref = (PreferenceComposite) portlet.getPreferenceSet().get(prefName);        
+        if (pref == null)
+        {
+            portlet.addPreference(prefName, new String[] { keywords });
+        }
+        else
+        {
+            return modifyPref(prefName, keywords, portlet);           
+        }        
+        return true;
+    }
+    
+    private boolean modifyPref(String prefName, String keywords, PortletDefinitionComposite portlet)
+    {
+        PreferenceComposite prefComp = (PreferenceComposite) portlet.getPreferenceSet().get(prefName);
+        String[] values = prefComp.getValueArray();
+        if(!values[0].equals(keywords))
+        {
+            prefComp.setValueAt(0, keywords);
+            return true;
+        }
+        return false;
+    }
+    
+    private boolean removePref(String prefName, PortletDefinitionComposite portlet)
+    {
+        Iterator prefIter = portlet.getPreferenceSet().iterator();
+        while (prefIter.hasNext())
+        {
+            PreferenceComposite pref = (PreferenceComposite) prefIter.next();
+            String name = pref.getName();
+            if (name.equals(prefName))
+            {
+                    prefIter.remove();
+                    return true;
+            }
+        }
+        return false;
+    }
+    
+    private boolean updateNumericPref(String prefName, String param, int max, PortletDefinitionComposite portlet)
+    {
+        if (!isEmpty(param))
+        {
+            int val = 4;
+            try
+            {
+                val = Integer.parseInt(param);
+            }
+            catch (NumberFormatException e)
+            {
+                return false;                
+            }
+            if (val > max)
+                return false;
+            PreferenceComposite pref = (PreferenceComposite) portlet.getPreferenceSet().get(prefName);
+            String[] values = pref.getValueArray();
+            if(!values[0].equals(param))
+            {
+                pref.setValueAt(0, param);
+                return true;
+            }                           
+        }
+        return false;
+    }
+    private boolean isEmpty(String param)
+    {
+        if (param == null)
+            return true;
+        param = param.trim();
+        if (param.length() == 0)
+            return true;
+        return false;
+    }
+
+    public int compare(Object obj1, Object obj2)
+    {
+        PortletInfo portlet1 = (PortletInfo)obj1;
+        PortletInfo portlet2 = (PortletInfo)obj2;
+        String name1 = portlet1.getDisplayName();
+        String name2 = portlet2.getDisplayName();
+        name1 = (name1 == null) ? "unknown" : name1;
+        name2 = (name2 == null) ? "unknown" : name2;
+        return name1.compareTo(name2);
+    }
+        
+    protected void includeHeaderContent(HeaderResource headerResource)
+    {
+        headerResource.dojoAddCoreLibraryRequire( "dojo.widget.Dialog" );
+        headerResource.dojoAddCoreLibraryRequire( "dojo.widget.Button" );
+        headerResource.dojoAddCoreLibraryRequire( "dojo.widget.ContentPane" );
+        headerResource.dojoAddCoreLibraryRequire( "dojo.widget.LayoutContainer" );
+        headerResource.dojoAddModuleLibraryRequire( "jetspeed.selector" );
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.portals.bridges.velocity.GenericVelocityPortlet#doEdit(javax.portlet.RenderRequest, javax.portlet.RenderResponse)
+     */
+    public void doEdit(RenderRequest request, RenderResponse response) throws PortletException, IOException
+    {
+        Context context = getContext(request);
+        PortletPreferences prefs = request.getPreferences();
+        String cats = prefs.getValue("Categories", null);
+        List categories = new ArrayList();
+        if (cats != null)
+        {
+            StringTokenizer catTokenizer = new StringTokenizer(cats, ",");
+            while (catTokenizer.hasMoreTokens())
+            {
+                String name = catTokenizer.nextToken().trim();
+                CategoryInfo cat = new CategoryInfo(name);
+                String keys = prefs.getValue("Keywords:" + name, "");
+                cat.setKeywords(keys);
+                categories.add(cat);
+            }
+        }
+        context.put("categories", categories);
+        context.put("Rows", prefs.getValue("Rows", "5"));
+        context.put("Columns", prefs.getValue("Columns", "4"));
+        processPage(request);
+        super.doEdit(request, response);
+    }
+    
+    private CategoryResult getPortlets(RenderRequest request,
+			String category, String pageNumber, int portletPerPages,String filter) {
+		List list = new ArrayList();
+		List tmpList = null;
+		List catList = null;
+		Iterator iterator = null;
+		int portletCount = 0;
+		CategoryInfo catInfo = null;
+		int strtCnt = getStartRow(pageNumber, portletPerPages);
+		int endCnt = getEndRow(pageNumber, portletPerPages);
+		try {			
+			if (category.equalsIgnoreCase("all")) {				
+				tmpList = retrievePortlets(request, filter);
+				portletCount = tmpList.size();
+				if (endCnt > portletCount)
+					endCnt = portletCount;
+				for (int index = strtCnt; index < endCnt; index++) {
+					list.add(tmpList.get(index));
+				}
+			} else if (category.equalsIgnoreCase("search")) {
+				tmpList = retrievePortlets(request, filter);
+				portletCount = tmpList.size();
+				if (endCnt > portletCount)
+					endCnt = portletCount;
+				for (int index = strtCnt; index < endCnt; index++) {
+					list.add(tmpList.get(index));
+				}
+			} else {
+				tmpList =  retrieveCategories(request);
+				iterator = tmpList.iterator();
+				while (iterator.hasNext()) {
+					catInfo = (CategoryInfo) iterator.next();
+					if (catInfo.getName().equalsIgnoreCase(category)) {
+						catList = catInfo.getPortlets();
+						break;
+					}
+				}
+				portletCount = catList.size();
+				if (endCnt > portletCount)
+					endCnt = portletCount;
+				for (int index = strtCnt; index < endCnt; index++) {
+					list.add(catList.get(index));
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return new CategoryResult(list, portletCount);
+	}
+    
+    
+	private int getStartRow(String sPageNumber, int portletPerPages) {
+		int iPageNumber = Integer.parseInt(sPageNumber);
+		return (iPageNumber - 1) * portletPerPages;
+	}
+
+	private int getEndRow(String sPageNumber,int portletPerPages) {
+		int iPageNumber = Integer.parseInt(sPageNumber);
+		return iPageNumber * portletPerPages;
+	}
+	private Map getUserPortlet(Page page) {
+		int portletCount = 0;
+		Map map = new HashMap();
+		try {
+			Fragment fragment;
+			Iterator it = page.getRootFragment().getFragments().iterator();
+			while (it.hasNext()) {
+				fragment = (Fragment) it.next();
+				if (map.containsKey(fragment.getName())) {
+					portletCount =((Integer) map.get(fragment.getName())).intValue();				
+					map.put(fragment.getName(), new Integer(portletCount + 1));					
+				} else {
+					map.put(fragment.getName(), new Integer(1));
+				}
+			}
+		} catch (Exception e) {
+//			System.out.println(e.getMessage());
+			e.printStackTrace();
+		}
+		return map;
+	}
+
+    class CategoryResult {
+		List list;
+
+		int resultSize;
+
+		/**
+		 * @param list
+		 * @param resultSize
+		 */
+		public CategoryResult(List list, int resultSize) {
+			this.list = list;
+			this.resultSize = resultSize;
+		}
+
+		/**
+		 * @return the list
+		 */
+		public List getList() {
+			return list;
+		}
+
+		/**
+		 * @return the resultSize
+		 */
+		public int getResultSize() {
+			return resultSize;
+		}
+	}
+}

Modified: portals/jetspeed-2/branches/JETSPEED-2.1.3/applications/j2-admin/src/webapp/WEB-INF/view/selectors/category-portlet-selector.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/applications/j2-admin/src/webapp/WEB-INF/view/selectors/category-portlet-selector.vm?rev=578923&r1=578922&r2=578923&view=diff
==============================================================================
--- portals/jetspeed-2/branches/JETSPEED-2.1.3/applications/j2-admin/src/webapp/WEB-INF/view/selectors/category-portlet-selector.vm (original)
+++ portals/jetspeed-2/branches/JETSPEED-2.1.3/applications/j2-admin/src/webapp/WEB-INF/view/selectors/category-portlet-selector.vm Mon Sep 24 12:20:51 2007
@@ -80,9 +80,9 @@
 function addPortletToPage(theNewPortlet,pID)
 {                                                      
    //dojo.widget.byId("AddPortletDialog").hide();   
-   var portletDef = new jetspeed.om.PortletDef( theNewPortlet );   
+   var portletDef = new jetspeed.selector.PortletDef( theNewPortlet );   
    var pagePath = jetspeed.url.removeAllQueryParameters( jetspeed.url.basePortalUrl() + jetspeed.url.path.AJAX_API + getReturnPagePath() );
-   jetspeed.addNewPortletDefinition( portletDef, null, pagePath, getAddToLayoutId() );
+   jetspeed.selector.addNewPortletDefinition( portletDef, null, pagePath, getAddToLayoutId() );
    selectorPortlets[pID].count = parseInt(selectorPortlets[pID].count) + 1;
    var cell = document.getElementById(theNewPortlet);
    if (cell != null)



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