/* * Aipo is a groupware program developed by TOWN, Inc. * Copyright (C) 2004-2015 TOWN, Inc. * http://www.aipo.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.aimluck.eip.modules.parameters; /* * 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. */ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.jetspeed.om.registry.Parameter; import org.apache.jetspeed.om.registry.PortletInfoEntry; import org.apache.jetspeed.om.registry.RegistryEntry; import org.apache.jetspeed.om.security.JetspeedUser; import org.apache.jetspeed.services.JetspeedSecurity; import org.apache.jetspeed.services.Registry; import org.apache.jetspeed.services.rundata.JetspeedRunData; import org.apache.jetspeed.services.security.PortalResource; import org.apache.turbine.services.localization.Localization; import org.apache.turbine.util.RunData; import org.apache.velocity.context.Context; /** * Returns list box control populated with registry entries from selected * registry. * <p> * Options: * <UL> * <LI><code>registry</code> * [Portlet|Security|PortletControl|PortletController|Skin * |security|MediaType|Client] - registry name</LI> * <LI><code>sort</code> [<strong>true</strong>|false] - return sorted list of * items</LI> * <LI><code>select-hidden</code> [<strong>false</strong>|true] - allow multiple * selections</LI> * <LI><code>null-if-empty</code> [<strong>true</strong>|false] - do not return * a select control if item list is empty</LI> * <LI><code>set-label</code> [<strong>false</strong>|true] - put label in front * of the list box based on the registry name</LI> * <LI><code>disabled-if-wml</code> [<strong>false</strong>|true] - set disabled * attribute for the list box if using wml</LI> * <LI><code>select-if-simple</code> [<strong>false</strong>|true] - select only * entries with parameter "simple" set to true</LI> * </UL> * * @author <a href="morciuch@apache.org">Mark Orciuch</a> * @version $Id: RegistryEntryListBox.java,v 1.8 2004/02/23 03:01:20 jford Exp $ */ public class RegistryEntryListBox extends VelocityParameterPresentationStyle { public static final String OPTION_REGISTRY = "registry"; public static final String OPTION_SORT = "sort"; public static final String OPTION_SELECT_HIDDEN = "select-hidden"; public static final String OPTION_NULL_IF_EMPTY = "null-if-empty"; public static final String OPTION_SET_LABEL = "set-label"; public static final String OPTION_DISABLED_IF_WML = "disabled-if-wml"; public static final String OPTION_SELECT_IF_SIMPLE = "select-if-simple"; /** * Put custom objects in the velocity context * * @param data * @param name * @param value * @param parms * @param context */ @SuppressWarnings({ "deprecation", "rawtypes" }) @Override public void buildContext(RunData data, String name, String value, Map parms, Context context) { // Initialize options JetspeedRunData jdata = (JetspeedRunData) data; String mediaType = jdata.getProfile().getMediaType(); String regName = (String) getParm(OPTION_REGISTRY, Registry.PORTLET); boolean sort = (Boolean.valueOf((String) getParm(OPTION_SORT, "true"))).booleanValue(); boolean selectHidden = (Boolean.valueOf((String) getParm(OPTION_SELECT_HIDDEN, "false"))) .booleanValue(); String nullIfEmpty = (String) getParm(OPTION_NULL_IF_EMPTY, "true"); boolean setLabel = (Boolean.valueOf((String) getParm(OPTION_SET_LABEL, "false"))) .booleanValue(); boolean disabledIfWML = (Boolean.valueOf((String) getParm(OPTION_DISABLED_IF_WML, "false"))) .booleanValue(); boolean selectIfSimple = (Boolean.valueOf((String) getParm(OPTION_SELECT_IF_SIMPLE, "false"))) .booleanValue(); String defaultEntry = null; // Iterate thru entries from selected registry List<RegistryEntry> list = new ArrayList<RegistryEntry>(); for (Iterator<?> i = Registry.get(regName).listEntryNames(); i.hasNext();) { RegistryEntry entry = Registry.getEntry(regName, (String) i.next()); boolean selected = false; selected = JetspeedSecurity.checkPermission( (JetspeedUser) data.getUser(), new PortalResource(entry), "customize"); if (selected && !selectHidden) { selected = !entry.isHidden(); } if (selected && (entry instanceof PortletInfoEntry)) { selected = ((PortletInfoEntry) entry).hasMediaType(mediaType); } if (selected && selectIfSimple) { Parameter simpleParam = ((PortletInfoEntry) entry).getParameter("simple"); if (simpleParam != null) { selected = Boolean.valueOf(simpleParam.getValue()).booleanValue(); } else { selected = false; } } if (selected) { list.add(entry); } } // Perform optional sort of list box items if (sort) { Collections.sort(list, new Comparator<RegistryEntry>() { @Override public int compare(RegistryEntry o1, RegistryEntry o2) { String t1 = ((o1).getTitle() != null) ? (o1).getTitle() : (o1).getName(); String t2 = ((o2).getTitle() != null) ? (o2).getTitle() : (o2).getName(); return t1.compareTo(t2); } }); } // Set list box label String label = null; if (regName.equals(Registry.PORTLET)) { label = Localization.getString(data, "CUSTOMIZER_PORTLET"); } else if (regName.equals(Registry.SECURITY)) { label = Localization.getString(data, "CUSTOMIZER_SECURITY_REF"); // SecurityReference defaultRef = PortalToolkit.getDefaultSecurityRef( // ((JetspeedRunData) data).getCustomizedProfile()); // if (defaultRef != null) // { // defaultEntry = defaultRef.getParent(); // } } else if (regName.equals(Registry.MEDIA_TYPE)) { label = Localization.getString(data, "CUSTOMIZER_MEDIATYPE"); } else if (regName.equals(Registry.PORTLET_CONTROLLER)) { label = Localization.getString(data, "CUSTOMIZER_LAYOUT"); } else if (regName.equals(Registry.PORTLET_CONTROL)) { label = Localization.getString(data, "CUSTOMIZER_DECORATION"); } else if (regName.equals(Registry.CLIENT)) { label = "Client"; } else { label = ""; } context.put("entries", list); context.put("nullIfEmpty", nullIfEmpty); if (setLabel) { context.put("label", label); } if (disabledIfWML && mediaType.equalsIgnoreCase("wml")) { context.put("disabled", "disabled"); } context.put("defaultEntry", defaultEntry); } }