/* * Copyright (c) 2011 Lockheed Martin Corporation * * 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.eurekastreams.server.service.actions.strategies; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.eurekastreams.server.action.response.settings.PersonPropertiesResponse; import org.eurekastreams.server.domain.Layout; import org.eurekastreams.server.domain.MembershipCriteria; import org.eurekastreams.server.domain.TabTemplate; import org.eurekastreams.server.domain.Theme; import org.eurekastreams.server.persistence.mappers.DomainMapper; import org.eurekastreams.server.persistence.mappers.requests.MapperRequest; /** * Returns tab templates and them for user based on person's sourceList parameters. If no source list parameter is * found, defaults are returned. * */ public class MembershipCriteriaPersonPropertyGenerator implements PersonPropertiesGenerator { /** * Name for default tab. */ private String defaultTabName; /** * Layout for default tab. */ private Layout defaultTabLayout; /** * Source list key in parameter map. */ private String sourceListKey = "sourceList"; /** * The SystemSettings mapper. */ @SuppressWarnings("unchecked") private DomainMapper<MapperRequest, List<MembershipCriteria>> membershipCriteriaDAO; /** * @param inDefaultTabName * Default tab name. * @param inDefaultTabLayout * Default tab layout. * @param inMembershipCriteriaDAO * used to look up the system settings. */ @SuppressWarnings("unchecked") public MembershipCriteriaPersonPropertyGenerator(final String inDefaultTabName, final Layout inDefaultTabLayout, final DomainMapper<MapperRequest, List<MembershipCriteria>> inMembershipCriteriaDAO) { defaultTabName = inDefaultTabName; defaultTabLayout = inDefaultTabLayout; membershipCriteriaDAO = inMembershipCriteriaDAO; } @SuppressWarnings("unchecked") @Override public PersonPropertiesResponse getPersonProperties(final Map<String, Serializable> inParameters) { ArrayList<TabTemplate> tabTemplateResults = new ArrayList<TabTemplate>(); Theme themeResult = null; // if params contain source list and it's not empty, try to create tab templates by matching against // membership criteria. if (inParameters.containsKey(sourceListKey) && !((ArrayList<String>) inParameters.get(sourceListKey)).isEmpty()) { // grab source list from params. ArrayList<String> sourceList = (ArrayList<String>) inParameters.get(sourceListKey); // grab all membershipCriteria from datastore. List<MembershipCriteria> membershipCriteria = membershipCriteriaDAO.execute(null); // loop through criteria checking against the persons source list values to see if the criteria applies, if // so, create copy of MC's tab template (if present) and put in result list. for (MembershipCriteria mc : membershipCriteria) { for (String source : sourceList) { if (StringUtils.containsIgnoreCase(source, mc.getCriteria())) { // if criteria has tab template specified add it to results. if (mc.getGalleryTabTemplate() != null) { // These tabs create their own templates based on other templates. tabTemplateResults.add(new TabTemplate(mc.getGalleryTabTemplate().getTabTemplate())); } // set theme. themeResult = mc.getTheme(); } } } } // if no tab templates were found via matching membership criteria, return default tab. if (tabTemplateResults.size() == 0) { tabTemplateResults.add(getDefaultTabTemplate()); } return new PersonPropertiesResponse(tabTemplateResults, themeResult); } /** * Return new TabTemplate instance with default name and layout. * * @return New TabTemplate instance with default name and layout. */ private TabTemplate getDefaultTabTemplate() { return new TabTemplate(defaultTabName, defaultTabLayout); } }