/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/osp/trunk/common/api-impl/src/java/org/theospi/portfolio/list/service/ListServiceImpl.java $ * $Id: ListServiceImpl.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2005, 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.theospi.portfolio.list.service; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.metaobj.security.AuthenticationManager; import org.sakaiproject.metaobj.shared.mgt.IdManager; import org.sakaiproject.metaobj.shared.model.Agent; import org.sakaiproject.metaobj.shared.model.Id; import org.sakaiproject.tool.api.Placement; import org.sakaiproject.tool.api.ToolManager; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.theospi.portfolio.list.intf.CustomLinkListGenerator; import org.theospi.portfolio.list.intf.ListGenerator; import org.theospi.portfolio.list.intf.ListService; import org.theospi.portfolio.list.model.Column; import org.theospi.portfolio.list.model.ListConfig; public class ListServiceImpl extends HibernateDaoSupport implements ListService { protected final transient Log logger = LogFactory.getLog(getClass()); public final static String LIST_GEN_ID_TAG = "listGenId"; public final static String SITE_TYPE_LIST_TAG = "siteTypeList"; private Map listGenerators; private IdManager idManager; private AuthenticationManager authnManager; private ToolManager toolManager; public List getCurrentDisplayColumns() { return getCurrentGenerator().getColumns(); } public List getSortableColumns() { return ((CustomLinkListGenerator)getCurrentGenerator()).getSortableColumns(); } public List getBundleLookupColumns() { return ((CustomLinkListGenerator)getCurrentGenerator()).getBundleLookupColumns(); } public String getEntryLink(Object entry) { if (getCurrentGenerator() instanceof CustomLinkListGenerator) { String uri = ((CustomLinkListGenerator)getCurrentGenerator()).getCustomLink(entry); if (uri != null) { return uri; } } return null; } public String getDefaultSortColumn() { return getCurrentGenerator().getDefaultSortColumn(); } public List getList() { return getCurrentGenerator().getObjects(); } protected Placement getCurrentTool() { return getToolManager().getCurrentPlacement(); } protected ListGenerator getCurrentGenerator() { Placement current = getCurrentTool(); String generatorName = current.getPlacementConfig().getProperty(LIST_GEN_ID_TAG); if (generatorName == null) { generatorName = current.getTool().getMutableConfig().getProperty(LIST_GEN_ID_TAG); } return getListGenerator(generatorName); } public ListGenerator getListGenerator(String generatorName) { return (ListGenerator)getListGenerators().get(generatorName); } public ListConfig getCurrentConfig() { ListGenerator listGen = getCurrentGenerator(); ListConfig currentConfig = loadCurrentConfig(); if (currentConfig == null) { currentConfig = initConfig(listGen); } List columns = new ArrayList(); List columnStringList = listGen.getColumns(); List selected = currentConfig.getSelectedColumns(); for (Iterator i=columnStringList.iterator();i.hasNext();) { String name = (String)i.next(); Column column = new Column(name, selected.contains(name)); columns.add(column); } currentConfig.setColumns(columns); return currentConfig; } private ListConfig initConfig(ListGenerator listGen) { ListConfig currentConfig = new ListConfig(); currentConfig.setSelectedColumns(listGen.getDefaultColumns()); currentConfig.setTitle(getCurrentTool().getTitle()); currentConfig.setToolId(getIdManager().getId( getCurrentTool().getId())); currentConfig.setOwner(getAuthnManager().getAgent()); return currentConfig; } public void saveOptions(ListConfig currentConfig) { List newSelected = new ArrayList(); for (Iterator i = currentConfig.getColumns().iterator();i.hasNext();) { Column col = (Column)i.next(); if (col.isSelected()) { newSelected.add(col.getName()); } } currentConfig.setSelectedColumns(newSelected); getHibernateTemplate().saveOrUpdate(currentConfig); } public boolean isNewWindow(Object entry) { return getCurrentGenerator().isNewWindow(entry); } protected ListConfig loadCurrentConfig() { Agent currentAgent = getAuthnManager().getAgent(); Id toolId = getIdManager().getId(getCurrentTool().getId()); Collection configs = getHibernateTemplate().findByNamedQuery("loadCurrentConfig", new Object[]{currentAgent, toolId}); if (configs.size() >= 1) { return (ListConfig)configs.iterator().next(); } else { return null; } } public void register(String id, ListGenerator listGenerator) { listGenerators.put(id, listGenerator); } public List getSiteTypeList() { Placement current = getCurrentTool(); String types = current.getPlacementConfig().getProperty(SITE_TYPE_LIST_TAG); if (types != null && types.length() > 0) { String siteTypes[] = types.split(","); return Arrays.asList(siteTypes); } return new ArrayList(); } public Map getListGenerators() { return listGenerators; } public void setListGenerators(Map listGenerators) { this.listGenerators = listGenerators; } public AuthenticationManager getAuthnManager() { return authnManager; } public void setAuthnManager(AuthenticationManager authnManager) { this.authnManager = authnManager; } public IdManager getIdManager() { return idManager; } public void setIdManager(IdManager idManager) { this.idManager = idManager; } public ToolManager getToolManager() { return toolManager; } public void setToolManager(ToolManager toolManager) { this.toolManager = toolManager; } }