/*
* 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.action.execution.gallery;
import java.io.Serializable;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.eurekastreams.commons.actions.ExecutionStrategy;
import org.eurekastreams.commons.actions.context.service.ServiceActionContext;
import org.eurekastreams.server.domain.GalleryItemCategory;
import org.eurekastreams.server.domain.GalleryItemType;
import org.eurekastreams.server.domain.GalleryTabTemplate;
import org.eurekastreams.server.domain.Tab;
import org.eurekastreams.server.domain.TabTemplate;
import org.eurekastreams.server.persistence.GalleryItemCategoryMapper;
import org.eurekastreams.server.persistence.mappers.DomainMapper;
import org.eurekastreams.server.persistence.mappers.requests.FindByIdRequest;
import org.eurekastreams.server.persistence.mappers.requests.PersistenceRequest;
/**
* Create and store GalleryTabTemplate.
*
*/
public class CreateGalleryTabTemplateExecution implements ExecutionStrategy<ServiceActionContext>
{
/**
* Category key.
*/
private static final String CATEGORY_KEY = "category";
/**
* Description key.
*/
private static final String DESCRIPTION_KEY = "description";
/**
* Tab key.
*/
private static final String TAB_KEY = "tab";
/**
* GalleryTabTemplate id key.
*/
private static final String GALLERYTABTEMPLATE_ID_KEY = "id";
/**
* Mapper to find tab by id.
*/
private DomainMapper<FindByIdRequest, Tab> findTabByIdMapper;
/**
* Mapper to find GalleryTabTemplate by id.
*/
private DomainMapper<FindByIdRequest, GalleryTabTemplate> getGalleryTabTemplateByIdMapper;
/**
* Mapper used to look up the theme category.
*/
private GalleryItemCategoryMapper galleryItemCategoryMapper;
/**
* Mapper for persisting GalleryTabTemplate.
*/
private DomainMapper<PersistenceRequest<GalleryTabTemplate>, Boolean> persistMapper;
/**
* Constructor.
*
* @param inFindTabByIdMapper
* Mapper to find tab by id.
* @param inGetGalleryTabTemplateByIdMapper
* Mapper to find gallery tab template by id.
* @param inGalleryItemCategoryMapper
* Mapper used to look up the theme category.
* @param inPersistMapper
* Mapper for persisting GalleryTabTemplate.
*/
public CreateGalleryTabTemplateExecution(final DomainMapper<FindByIdRequest, Tab> inFindTabByIdMapper,
final DomainMapper<FindByIdRequest, GalleryTabTemplate> inGetGalleryTabTemplateByIdMapper,
final GalleryItemCategoryMapper inGalleryItemCategoryMapper,
final DomainMapper<PersistenceRequest<GalleryTabTemplate>, Boolean> inPersistMapper)
{
findTabByIdMapper = inFindTabByIdMapper;
getGalleryTabTemplateByIdMapper = inGetGalleryTabTemplateByIdMapper;
galleryItemCategoryMapper = inGalleryItemCategoryMapper;
persistMapper = inPersistMapper;
}
/**
* Create new GalleryTabTemplate item based on parameters. NOTE: This creates a new COPY of tab template referenced
* by incoming tab
*
* @param inActionContext
* The action context.
* @return True on success.
*/
@Override
public Serializable execute(final ServiceActionContext inActionContext)
{
// convert the params to a map
Map<String, Serializable> fields = (Map<String, Serializable>) inActionContext.getParams();
// grab param values.
String category = (String) fields.get(CATEGORY_KEY);
String description = (String) fields.get(DESCRIPTION_KEY);
String tabStringId = (String) fields.get(TAB_KEY);
Long tabId = StringUtils.isNotEmpty(tabStringId) && !StringUtils.equalsIgnoreCase(tabStringId, "-1") ? Long
.parseLong(tabStringId) : null;
String galleryTabTemplateStringId = (String) fields.get(GALLERYTABTEMPLATE_ID_KEY);
Long galleryTabTemplateId = StringUtils.isNotEmpty(galleryTabTemplateStringId) ? Long
.parseLong(galleryTabTemplateStringId) : null;
// find/create the GalleryTabTemplate.
GalleryTabTemplate gtt = getGalleryTabTemplateByIdMapper.execute(galleryTabTemplateId == null ? null
: new FindByIdRequest("GalleryTabTemplate", galleryTabTemplateId));
// if required set the tab template.
if (tabId != null)
{
// look up source tab by id.
Tab tab = findTabByIdMapper.execute(new FindByIdRequest("Tab", tabId));
// create new tabTemplate from source.
TabTemplate newTabTemplate = new TabTemplate(tab.getTemplate());
gtt.setTabTemplate(newTabTemplate);
gtt.setTitle(newTabTemplate.getTabName());
}
// get/create the category and set it.
GalleryItemCategory galleryItemCategory = galleryItemCategoryMapper.findByName(GalleryItemType.TAB, category);
gtt.setCategory(galleryItemCategory);
// set the description
gtt.setDescription(description);
// persist the new GalleryTabTemplate to datastore.
return persistMapper.execute(new PersistenceRequest<GalleryTabTemplate>(gtt));
}
}