/* * 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.services.portaltoolkit; import java.util.Iterator; import java.util.Map; import org.apache.jetspeed.om.profile.Entry; import org.apache.jetspeed.om.profile.Portlets; import org.apache.jetspeed.om.registry.PortletEntry; import org.apache.jetspeed.portal.BasePortletSet; import org.apache.jetspeed.portal.Portlet; import org.apache.jetspeed.portal.PortletControl; import org.apache.jetspeed.portal.PortletController; import org.apache.jetspeed.portal.PortletSet; import org.apache.jetspeed.services.PortletFactory; import org.apache.jetspeed.services.Registry; import org.apache.jetspeed.services.logging.JetspeedLogFactoryService; import org.apache.jetspeed.services.logging.JetspeedLogger; import org.apache.jetspeed.services.portaltoolkit.JetspeedPortalToolkitService; import org.apache.jetspeed.util.JetspeedException; import com.aimluck.eip.services.portal.ALPortalApplicationService; import com.aimluck.eip.util.CustomizeUtils; /** * */ public class ALPortalToolkitService extends JetspeedPortalToolkitService { private static final JetspeedLogger logger = JetspeedLogFactoryService .getLogger(ALPortalToolkitService.class.getName()); @Override protected PortletSet getSet(Portlets portlets, VariableInteger theCount) { // Create a new BasePortletSet to handle the portlets BasePortletSet set = new BasePortletSet(); PortletController controller = getController(portlets.getController()); set.setController(controller); String name = portlets.getName(); if (name != null) { set.setName(name); } else { set.setName(String.valueOf(theCount.getValue())); } set.setID(portlets.getId()); theCount.setValue(theCount.getValue() + 1); // FIXME: this sucks ! we should either associate the portlet set // with its portlets peer or set the porpoerties directly on the portlet // set object // Unfortunately, this would change the API too drastically for now... set.setPortletConfig(getPortletConfig(portlets)); // Add all sub portlet sets in the main set // Portlets[] subsets = portlets.getPortlets(); // for (int i=0; i < subsets.length; i++ ) for (@SuppressWarnings("unchecked") Iterator<Portlets> it = portlets.getPortletsIterator(); it.hasNext();) { Portlets subset = it.next(); // Set this subset's parent Portlets collection. subset.setParentPortlets(portlets); Map<?, ?> constraints = getParameters(subset.getLayout()); int position = getPosition(subset.getLayout()); set.addPortlet(getSet(subset, theCount), controller .getConstraints(constraints), position); } // Populate the PortletSet with Portlets // Entry[] entries = portlets.getEntry(); // for( int i = 0; i < entries.length; ++i ) for (@SuppressWarnings("unchecked") Iterator<Portlets> eit = portlets.getEntriesIterator(); eit.hasNext();) { try { Entry psmlEntry = (Entry) eit.next(); PortletEntry entry = (PortletEntry) Registry.getEntry(Registry.PORTLET, psmlEntry .getParent()); if (entry != null) { Portlet p = PortletFactory.getPortlet(psmlEntry); if (p != null) { Map<?, ?> constraints = getParameters(psmlEntry.getLayout()); int position = getPosition(psmlEntry.getLayout()); PortletControl control = getControl(psmlEntry.getControl(), entry); if (ALPortalApplicationService.isActive(p.getName()) && CustomizeUtils.isAdminUserView(entry)) { set.addPortlet(initControl(control, p), controller .getConstraints(constraints), position); } } } else { if (!"ScheduleAdmin".equals(psmlEntry.getParent())) { logger.error(" The portlet " + psmlEntry.getParent() + " does not exist in the Registry "); } continue; } } catch (JetspeedException e) { logger.error("ALPortalToolkitService.getSet", e); continue; } } // Decorate with a control if required and return if (portlets.getControl() != null) { PortletControl control = getControl(portlets.getControl()); return initControl(control, set); } set.sortPortletSet(); // Or return the set return set; } }