/*
* Provided by CSTI Consulting
* Following GNU LESSER GENERAL PUBLIC LICENSE
* You may obtain more details at
*
* http://www.csticonsulting.com
* Copyright (c) 2006-2010 Consultation CS-TI inc.
*
* 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 com.salesmanager.central.merchantstore;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import com.salesmanager.central.BaseAction;
import com.salesmanager.central.profile.Context;
import com.salesmanager.central.util.FileException;
import com.salesmanager.central.web.DynamicImage;
import com.salesmanager.core.constants.CatalogConstants;
import com.salesmanager.core.constants.ConfigurationConstants;
import com.salesmanager.core.constants.Constants;
import com.salesmanager.core.constants.LabelConstants;
import com.salesmanager.core.entity.merchant.MerchantConfiguration;
import com.salesmanager.core.entity.merchant.MerchantStore;
import com.salesmanager.core.entity.reference.CoreModuleService;
import com.salesmanager.core.entity.reference.DynamicLabel;
import com.salesmanager.core.entity.reference.DynamicLabelDescription;
import com.salesmanager.core.entity.reference.DynamicLabelDescriptionId;
import com.salesmanager.core.entity.reference.ModuleConfiguration;
import com.salesmanager.core.module.model.application.FileModule;
import com.salesmanager.core.service.ServiceFactory;
import com.salesmanager.core.service.merchant.ConfigurationRequest;
import com.salesmanager.core.service.merchant.ConfigurationResponse;
import com.salesmanager.core.service.merchant.MerchantService;
import com.salesmanager.core.service.reference.ReferenceService;
import com.salesmanager.core.util.CountryUtil;
import com.salesmanager.core.util.FileUtil;
import com.salesmanager.core.util.LabelUtil;
import com.salesmanager.core.util.SpringUtil;
public class StoreFrontAction extends ContentAction {
private Logger log = Logger.getLogger(StoreFrontAction.class);
private Collection templates = new ArrayList();// store front templates
private CoreModuleService currrentTempate = null;
private List<String> storeDescription = new ArrayList<String>();// store
// text
// submited
private List<String> storeFrontPageTitle = new ArrayList<String>();// text submited
private List<String> metaKeywords = new ArrayList<String>();// text submited
private List<String> metaDescription = new ArrayList<String>();// text
// submited
ModuleConfiguration sliderConf = null;
private void prepareContent() throws Exception {
super.setPageTitle("label.storesetup");
Context ctx = super.getContext();
String countryCode = CountryUtil.getCountryIsoCodeById(ctx
.getCountryid());
ReferenceService rservice = (ReferenceService) ServiceFactory
.getService(ServiceFactory.ReferenceService);
templates = rservice.getCoreModules(
CatalogConstants.STORE_FRONT_TEMPLATES_CODE, countryCode);
// overwrite name
/* if (templates != null && templates.size() > 0) {
Iterator i = templates.iterator();
while (i.hasNext()) {
CoreModuleService cms = (CoreModuleService) i.next();
try {
String title = LabelUtil.getInstance().getText(
ctx.getLang(),
"module." + cms.getCoreModuleName() + ".title");
cms.setCoreModuleServiceDescription(title);
} catch (Exception e) {
log.error(e);
}
}
}*/
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
// get current template
MerchantStore store = mservice.getMerchantStore(ctx.getMerchantid());
String templateModule = store.getTemplateModule();
// selected
if (!StringUtils.isBlank(templateModule)) {
currrentTempate = rservice.getCoreModuleService(ctx.getLang(),
templateModule);
if (currrentTempate != null) {
currrentTempate.setCoreModuleServiceDescription(templateModule);
}
}
//get module configuration slider for current template module
sliderConf = rservice.getModuleConfiguration(store.getTemplateModule(), ConfigurationConstants.SLIDER_CONFIGURATION_KEY, Constants.ALLCOUNTRY_ISOCODE);
Collection<DynamicLabel> dynamicLabels = rservice
.getDynamicLabels(super.getContext().getMerchantid().intValue());
if (dynamicLabels != null && dynamicLabels.size() > 0) {
Iterator i = dynamicLabels.iterator();
while (i.hasNext()) {
DynamicLabel dl = (DynamicLabel) i.next();
Set dynamicLabelSet = dl.getDescriptions();
Iterator labelSetIterator = dynamicLabelSet.iterator();
if (dl.getSectionId() == LabelConstants.STORE_FRONT_LANDING_DESCRIPTION) {
Map labelMap = new HashMap();
while (labelSetIterator.hasNext()) {
DynamicLabelDescription description = (DynamicLabelDescription) labelSetIterator
.next();
labelMap.put(description.getId().getLanguageId(),
description);
}
for (int icount = 0; icount < reflanguages.size(); icount++) {
int langid = (Integer) reflanguages.get(icount);
DynamicLabelDescription desc = (DynamicLabelDescription) labelMap
.get(langid);
if (desc != null) {
storeDescription.add(desc
.getDynamicLabelDescription());
}
}
}
else if (dl.getSectionId() == LabelConstants.STORE_FRONT_LANDING_PAGE_TITLE) {
Map labelMap = new HashMap();
while (labelSetIterator.hasNext()) {
DynamicLabelDescription description = (DynamicLabelDescription) labelSetIterator
.next();
labelMap.put(description.getId().getLanguageId(),
description);
}
for (int icount = 0; icount < reflanguages.size(); icount++) {
int langid = (Integer) reflanguages.get(icount);
DynamicLabelDescription desc = (DynamicLabelDescription) labelMap
.get(langid);
if (desc != null) {
storeFrontPageTitle.add(desc.getDynamicLabelDescription());
}
}
}
if (dl.getSectionId() == LabelConstants.SLIDER_SECTION) {
if(sliderConf!=null) {
if(pages==null) {
pages = new ArrayList();
}
pages.add(dl);
}
}
if (dl.getSectionId() == LabelConstants.STORE_FRONT_LANDING_META_KEYWORDS) {
Map labelMap = new HashMap();
while (labelSetIterator.hasNext()) {
DynamicLabelDescription description = (DynamicLabelDescription) labelSetIterator
.next();
labelMap.put(description.getId().getLanguageId(),
description);
}
for (int icount = 0; icount < reflanguages.size(); icount++) {
int langid = (Integer) reflanguages.get(icount);
DynamicLabelDescription desc = (DynamicLabelDescription) labelMap
.get(langid);
if (desc != null) {
metaKeywords.add(desc.getDynamicLabelDescription());
}
}
}
if (dl.getSectionId() == LabelConstants.STORE_FRONT_LANDING_META_DESCRIPTION) {
Map labelMap = new HashMap();
while (labelSetIterator.hasNext()) {
DynamicLabelDescription description = (DynamicLabelDescription) labelSetIterator
.next();
labelMap.put(description.getId().getLanguageId(),
description);
}
for (int icount = 0; icount < reflanguages.size(); icount++) {
int langid = (Integer) reflanguages.get(icount);
DynamicLabelDescription desc = (DynamicLabelDescription) labelMap
.get(langid);
if (desc != null) {
metaDescription.add(desc
.getDynamicLabelDescription());
}
}
}
}
}
}
/**
* Displays the page allowing basic store front configuration
*
* @return
*/
public String displayStoreFrontConfig() {
try {
Context ctx = super.getContext();
prepareLanguages();
prepareContent();
} catch (Exception e) {
log.error(e);
}
return SUCCESS;
}
public String editStoreFontConfig() {
try {
prepareLanguages();
prepareContent();
Context ctx = super.getContext();
if (this.reflanguages.size() == 0) {
log.error("Languages were not loaded");
super.setTechnicalMessage();
return INPUT;
}
// retreive current values
ReferenceService rservice = (ReferenceService) ServiceFactory
.getService(ServiceFactory.ReferenceService);
Collection<DynamicLabel> dynamicLabels = rservice
.getDynamicLabels(super.getContext().getMerchantid()
.intValue());
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
Map submited = new HashMap();
if (this.getStoreDescription().size() > 0) {
submited.put(LabelConstants.STORE_FRONT_LANDING_DESCRIPTION,
this.getStoreDescription());
}
if (this.getStoreFrontPageTitle().size() > 0) {
submited.put(LabelConstants.STORE_FRONT_LANDING_PAGE_TITLE,
this.getStoreFrontPageTitle());
}
if (this.getMetaKeywords().size() > 0) {
submited.put(LabelConstants.STORE_FRONT_LANDING_META_KEYWORDS,
this.getMetaKeywords());
}
if (this.getMetaDescription().size() > 0) {
submited.put(
LabelConstants.STORE_FRONT_LANDING_META_DESCRIPTION,
this.getMetaDescription());
}
if (dynamicLabels != null && dynamicLabels.size() > 0) {
Collection removable = new ArrayList();
Iterator i = dynamicLabels.iterator();
while (i.hasNext()) {
DynamicLabel dl = (DynamicLabel) i.next();
if (dl.getSectionId() == LabelConstants.STORE_FRONT_LANDING_DESCRIPTION) {
removable.add(dl);
}
else if (dl.getSectionId() == LabelConstants.STORE_FRONT_LANDING_PAGE_TITLE) {
removable.add(dl);
}
if (dl.getSectionId() == LabelConstants.STORE_FRONT_LANDING_META_KEYWORDS) {
removable.add(dl);
}
if (dl.getSectionId() == LabelConstants.STORE_FRONT_LANDING_META_DESCRIPTION) {
removable.add(dl);
}
}
rservice.deleteAllDynamicLabel(removable);
}
Map newLabels = new HashMap();
Map elements = new HashMap();
Iterator submitedIterator = submited.keySet().iterator();
while (submitedIterator.hasNext()) {
int section = (Integer) submitedIterator.next();
List valuesSubmited = (List) submited.get(section);
Iterator valuesSubmitedIterator = valuesSubmited.iterator();
Iterator i = reflanguages.keySet().iterator();
while (i.hasNext()) {
int langcount = (Integer) i.next();
String desc = (String) valuesSubmited.get(langcount);
// if not blank
if (!StringUtils.isBlank(desc)) {
DynamicLabel label = null;
int submitedlangid = (Integer) reflanguages
.get(langcount);
if (!newLabels.containsKey(section)) {
label = new DynamicLabel();
newLabels.put(section, label);
} else {
label = (DynamicLabel) newLabels.get(section);
}
// create
DynamicLabelDescriptionId id = new DynamicLabelDescriptionId();
id.setLanguageId(submitedlangid);
DynamicLabelDescription description = new DynamicLabelDescription();
description.setId(id);
description.setDynamicLabelDescription(desc);
description.setDynamicLabelTitle(" ");
Set descs = label.getDescriptions();
if (descs == null) {
descs = new HashSet();
}
descs.add(description);
label.setMerchantId(ctx.getMerchantid());
label.setSectionId(section);
label.setDescriptions(descs);
}
}
}
rservice.saveDynamicLabel(newLabels.values());
super.setSuccessMessage();
return SUCCESS;
} catch (Exception e) {
log.error(e);
super.setTechnicalMessage();
return INPUT;
}
}
public String updateSlideList() {
try {
ReferenceService rservice = (ReferenceService) ServiceFactory
.getService(ServiceFactory.ReferenceService);
// get all slides
Collection<DynamicLabel> labels = rservice.getDynamicLabels(super
.getContext().getMerchantid(),LabelConstants.SLIDER_SECTION, super
.getLocale());
labels = super.updatePageList(labels);
if(labels!=null) {
rservice.saveDynamicLabel(labels);
super.setSuccessMessage();
}
} catch (Exception e) {
log.error(e);
super.setTechnicalMessage();
}
displayStoreFrontConfig();
return SUCCESS;
}
public String viewSlide() {
super.setPageTitle("label.storefront.slides.title");
super.getPageDetails();
DynamicLabel l = super.getLabel();
if(l!=null) {
//get image
if (!StringUtils.isBlank(l.getImage())) {
// set image info in the request
DynamicImage img = new DynamicImage();
img.setEntityId(String.valueOf(l.getDynamicLabelId()));
img.setImageName(l.getImage());
String imgPath = FileUtil.getFileTreeBinPathForImages(super.getContext().getMerchantid());
img.setImagePath(imgPath);
super.getServletRequest().setAttribute("SLIDE", img);
}
}
return SUCCESS;
}
public String deleteSlide() {
try {
ReferenceService rservice = (ReferenceService) ServiceFactory
.getService(ServiceFactory.ReferenceService);
DynamicLabel l = rservice.getDynamicLabel(label.getDynamicLabelId());
rservice.deleteDynamicLabel(l);
//delete image
if(!StringUtils.isBlank(l.getImage())) {
String imgfolder = FileUtil.getFileTreeBinPathForImages(super.getContext().getMerchantid());
FileModule futil = (FileModule) SpringUtil.getBean("localfile");
futil.deleteFile(super.getContext().getMerchantid(), new File(imgfolder + "/" + l.getImage()));
}
super.setSuccessMessage();
} catch (Exception e) {
log.error(e);
super.setTechnicalMessage();
return INPUT;
}
return SUCCESS;
}
public String editSlide() throws Exception {
super.setPageTitle("label.storefront.slides.title");
try {
super.prepareLanguages();
DynamicImage img = null;
if(label==null) {
return SUCCESS;
}
boolean hasError = super.populateLabel();
if(hasError) {
return INPUT;
}
if (!StringUtils.isBlank(super.getUploadImageFileName())) {
FileModule futil = (FileModule) SpringUtil
.getBean("localfile");
String finalfilename = futil.uploadFile(
super.getContext().getMerchantid(), "core.bin.images", super.getUploadImage(), super.getUploadImageFileName(), super.getUploadImageContentType());
super.getLabel().setImage(super.getUploadImageFileName());
}
if(!StringUtils.isBlank(super.getLabel().getImage())) {
// set image info in the request
img = new DynamicImage();
img.setImageName(super.getLabel().getImage());
String imgPath = FileUtil.getFileTreeBinPathForImages(super.getContext().getMerchantid());
img.setImagePath(imgPath);
super.getServletRequest().setAttribute("SLIDE", img);
}
ReferenceService rservice = (ReferenceService) ServiceFactory
.getService(ServiceFactory.ReferenceService);
rservice.saveOrUpdateDynamicLabel(super.getLabel());
if(img!=null) {
img.setEntityId(String.valueOf(super.getLabel().getDynamicLabelId()));
}
super.setSuccessMessage();
} catch (Exception e) {
if(e instanceof FileException) {
super.setMessage("errors.filetoolarge");
}
throw(e);
}
return SUCCESS;
}
public String deleteFile() throws Exception {
super.setPageTitle("label.storefront.slides.title");
super.prepareLanguages();
ReferenceService rservice = (ReferenceService) ServiceFactory
.getService(ServiceFactory.ReferenceService);
label = rservice.getDynamicLabel(super.getLabel().getDynamicLabelId());
if(label==null) {
throw new Exception ("label.dynamicLabelId is null");
}
if(label!=null && label.getMerchantId()!=super.getContext().getMerchantid()) {
return "unauthorized";
}
FileModule futil = (FileModule) SpringUtil
.getBean("localfile");
String imgPath = FileUtil.getFileTreeBinPathForImages(super.getContext().getMerchantid());
futil.deleteFile(super.getContext().getMerchantid(), new File(new StringBuffer()
.append(imgPath).append(label.getImage()).toString()));
label.setImage(null);
rservice.saveOrUpdateDynamicLabel(label);
super.setSuccessMessage();
return SUCCESS;
}
public Collection getTemplates() {
return templates;
}
public void setTemplates(Collection templates) {
this.templates = templates;
}
public CoreModuleService getCurrrentTempate() {
return currrentTempate;
}
public void setCurrrentTempate(CoreModuleService currrentTempate) {
this.currrentTempate = currrentTempate;
}
public List<String> getMetaDescription() {
return metaDescription;
}
public void setMetaDescription(List<String> metaDescription) {
this.metaDescription = metaDescription;
}
public List<String> getMetaKeywords() {
return metaKeywords;
}
public void setMetaKeywords(List<String> metaKeywords) {
this.metaKeywords = metaKeywords;
}
public List<String> getStoreFrontPageTitle() {
return storeFrontPageTitle;
}
public void setStoreFrontPageTitle(List<String> pageTitle) {
this.storeFrontPageTitle = pageTitle;
}
public List<String> getStoreDescription() {
return storeDescription;
}
public void setStoreDescription(List<String> storeDescription) {
this.storeDescription = storeDescription;
}
public ModuleConfiguration getSliderConf() {
return sliderConf;
}
public String[] getSlideList() {
return visible;
}
}