Package com.agiletec.plugins.jpnewsletter.apsadmin.config

Source Code of com.agiletec.plugins.jpnewsletter.apsadmin.config.NewsletterConfigAction

/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando is a free software;
* You can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* See the file License for the specific language governing permissions  
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpnewsletter.apsadmin.config;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.agiletec.aps.system.ApsSystemUtils;
import com.agiletec.aps.system.common.entity.model.attribute.AttributeInterface;
import com.agiletec.aps.system.common.entity.model.attribute.BooleanAttribute;
import com.agiletec.aps.system.services.category.Category;
import com.agiletec.aps.system.services.category.ICategoryManager;
import com.agiletec.aps.system.services.page.IPage;
import com.agiletec.aps.system.services.page.IPageManager;
import com.agiletec.aps.util.SelectItem;
import com.agiletec.plugins.jacms.aps.system.services.content.model.SmallContentType;
import com.agiletec.plugins.jpmail.aps.services.mail.IMailManager;
import com.agiletec.plugins.jpnewsletter.aps.system.services.newsletter.model.NewsletterConfig;
import org.entando.entando.aps.system.services.userprofile.IUserProfileManager;
import org.entando.entando.aps.system.services.userprofile.model.IUserProfile;

/**
* @author E.Santoboni
*/
public class NewsletterConfigAction extends AbstractNewsletterConfigAction implements INewsletterConfigAction {

  @Override
  public String edit() {
    try {
      NewsletterConfig config = this.getNewsletterManager().getNewsletterConfig();
      this.setNewsletterConfig(config);
      this.valueForm(config);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "edit");
      return FAILURE;
    }
    return SUCCESS;
  }

  @Override
  public String entryConfig() {
    try {
      NewsletterConfig config = this.getNewsletterConfig();
      if (config==null) {
        config = this.getNewsletterManager().getNewsletterConfig();
        this.setNewsletterConfig(config);
      }
      this.valueForm(config);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "edit");
      return FAILURE;
    }
    return SUCCESS;
  }

  @Override
  public String addCategoryMapping() {
    this.updateConfigOnSession();
    try {
      Collection<Object> mappedCategories = this.getNewsletterConfig().getSubscriptions().keySet();
      Collection<Object> mappedAttributes = this.getNewsletterConfig().getSubscriptions().values();
      String attribute = this.getAttributeName();
      if (null == attribute || attribute.trim().length() == 0) {
        this.addFieldError("attributeName", this.getText("error.attribute.not.valid"));
      } else if (mappedAttributes.contains(attribute)) {
        this.addFieldError("attributeName", this.getText("error.attribute.already.used"));
      }
      String category = this.getCategoryCode();
      if (null == category || category.trim().length() == 0) {
        this.addFieldError("categoryCode", this.getText("error.category.not.valid"));
      } else if (mappedCategories.contains(category)) {
        this.addFieldError("categoryCode", this.getText("error.category.already.used"));
      }
      if (this.hasFieldErrors()) return INPUT;
      NewsletterConfig config = this.getNewsletterConfig();
      config.getSubscriptions().put(category, attribute);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "addCategoryMapping");
      return FAILURE;
    }
    return SUCCESS;
  }

  @Override
  public String removeCategoryMapping() {
    this.updateConfigOnSession();
    try {
      String category = this.getCategoryCode();
      NewsletterConfig config = this.getNewsletterConfig();
      config.getSubscriptions().remove(category);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "removeCategoryMapping");
      return FAILURE;
    }
    return SUCCESS;
  }

  @Override
  public String addContentType() {
    this.updateConfigOnSession();
    try {
      //TODO Inserire eventuali parametri (codice e descr), da passare alle etichette,  degli oggetti che si cerca di utilizzare e che sono già in uso (tipo di contenuto e categorie)
      if (null == this.getContentManager().getSmallContentTypesMap().get(this.getContentTypeCode())) {
        this.addFieldError("contentTypeCode", this.getText("error.contenttype.not.valid"));
      }
      if (null != this.getNewsletterConfig().getContentType(this.getContentTypeCode())) {
        this.addFieldError("contentTypeCode", this.getText("error.contenttype.already.used"));
      }
      if (this.hasFieldErrors()) return INPUT;
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "addContentType");
      return FAILURE;
    }
    return SUCCESS;
  }

  @Override
  public String removeContentType() {
    this.updateConfigOnSession();
    try {
      NewsletterConfig config = this.getNewsletterConfig();
      config.getContentTypes().remove(this.getContentTypeCode());
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "removeContentType");
      return FAILURE;
    }
    return SUCCESS;
  }

  @Override
  public String save() {
    this.updateConfigOnSession();
    try {
      this.getNewsletterManager().updateNewsletterConfig(this.getNewsletterConfig());
      this.getRequest().getSession().removeAttribute(NEWSLETTER_CONFIG_SESSION_PARAM);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "save");
      return FAILURE;
    }
    return SUCCESS;
  }

  protected void valueForm(NewsletterConfig config) {
    this.setActiveService(config.isActive());
    Calendar startScheduler = Calendar.getInstance();
    startScheduler.setTime(config.getStartScheduler());
    this.setStartSchedulerHour(startScheduler.get(Calendar.HOUR_OF_DAY));
    this.setStartSchedulerMinute(startScheduler.get(Calendar.MINUTE));
    this.setAlsoHtml(config.isAlsoHtml());
  }

  protected void updateConfigOnSession() {
    NewsletterConfig config = this.getNewsletterConfig();
    config.setActive(this.getActiveService());
    Calendar startScheduler = Calendar.getInstance();
    startScheduler.setTime(config.getStartScheduler());
    startScheduler.set(Calendar.HOUR_OF_DAY, this.getStartSchedulerHour());
    startScheduler.set(Calendar.MINUTE, this.getStartSchedulerMinute());
    config.setStartScheduler(startScheduler.getTime());
    config.setAlsoHtml(this.getAlsoHtml());
  }

  public List<SelectItem> getMailSenders() {
    try {
      Map<String, String> senders = this.getMailManager().getMailConfig().getSenders();
      List<SelectItem> items = new ArrayList<SelectItem>(senders.size());
      Iterator<String> iter = senders.keySet().iterator();
      while (iter.hasNext()) {
        String string = (String) iter.next();
        SelectItem item = new SelectItem(string, senders.get(string));
        items.add(item);
      }
      return items;
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "getMailSenders");
      throw new RuntimeException(t);
    }
  }
 
  /**
   * Restituisce la lista di categorie definite nel sistema.
   * @return La lista di categorie definite nel sistema.
   */
  public List<Category> getCategories() {
    return this.getCategoryManager().getCategoriesList();
  }
 
  public IUserProfile getDefaultProfile() {
    return this.getProfileManager().getDefaultProfileType();
  }
 
  public List<AttributeInterface> getBooleanProfileAttributes() {
    List<AttributeInterface> attributes = new ArrayList<AttributeInterface>();
    List<AttributeInterface> profileAttributes = this.getDefaultProfile().getAttributeList();
    for (int i = 0; i < profileAttributes.size(); i++) {
      AttributeInterface attribute = profileAttributes.get(i);
      if (attribute instanceof BooleanAttribute) {
        attributes.add(attribute);
      }
    }
    return attributes;
  }

  public List<SmallContentType> getContentTypes() {
    return this.getContentManager().getSmallContentTypes();
  }

  public Category getCategory(String categoryCode) {
    return this.getCategoryManager().getCategory(categoryCode);
  }

  public Boolean getActiveService() {
    if (null == this._activeService) return new Boolean(false);
    return _activeService;
  }
  public void setActiveService(Boolean activeService) {
    this._activeService = activeService;
  }

  public Boolean getAlsoHtml() {
    if (null == this._alsoHtml) return new Boolean(false);
    return _alsoHtml;
  }
  public void setAlsoHtml(Boolean alsoHtml) {
    _alsoHtml = alsoHtml;
  }

  public String getCategoryCode() {
    return _categoryCode;
  }
  public void setCategoryCode(String categoryCode) {
    this._categoryCode = categoryCode;
  }

  public String getAttributeName() {
    return _attributeName;
  }
  public void setAttributeName(String attributeName) {
    this._attributeName = attributeName;
  }

  public Integer getStartSchedulerHour() {
    if (null == this._startSchedulerHour || this._startSchedulerHour == 0) {
      this._startSchedulerHour = this.getStartSchedulerField(Calendar.HOUR_OF_DAY);
    }
    return _startSchedulerHour;
  }
  public void setStartSchedulerHour(Integer startSchedulerHour) {
    this._startSchedulerHour = startSchedulerHour;
  }

  public Integer getStartSchedulerMinute() {
    if (null == this._startSchedulerMinute || this._startSchedulerMinute == 0) {
      this._startSchedulerMinute = this.getStartSchedulerField(Calendar.MINUTE);
    }
    return _startSchedulerMinute;
  }

  public void setStartSchedulerMinute(Integer startSchedulerMinute) {
    this._startSchedulerMinute = startSchedulerMinute;
  }

  private Integer getStartSchedulerField(int field) {
    NewsletterConfig config = this.getNewsletterConfig();
    Calendar startScheduler = Calendar.getInstance();
    startScheduler.setTime(config.getStartScheduler());
    return startScheduler.get(field);
  }

  public List<IPage> getPages() {
    if (this._pages==null) {
      this._pages = new ArrayList<IPage>();
      IPage root = this.getPageManager().getRoot();
      this.addPages(root, this._pages);
    }
    return this._pages;
  }

  protected void addPages(IPage page, List<IPage> pages) {
    pages.add(page);
    IPage[] children = page.getChildren();
    for (int i=0; i<children.length; i++) {
      this.addPages(children[i], pages);
    }
  }
 
  public String getContentTypeCode() {
    return _contentTypeCode;
  }
  public void setContentTypeCode(String contentTypeCode) {
    this._contentTypeCode = contentTypeCode;
  }
 
  protected ICategoryManager getCategoryManager() {
    return _categoryManager;
  }
  public void setCategoryManager(ICategoryManager categoryManager) {
    this._categoryManager = categoryManager;
  }
 
  protected IUserProfileManager getProfileManager() {
    return _profileManager;
  }
  public void setProfileManager(IUserProfileManager profileManager) {
    this._profileManager = profileManager;
  }
 
  protected IMailManager getMailManager() {
    return _mailManager;
  }
  public void setMailManager(IMailManager mailManager) {
    this._mailManager = mailManager;
  }

  protected IPageManager getPageManager() {
    return _pageManager;
  }
  public void setPageManager(IPageManager pageManager) {
    this._pageManager = pageManager;
  }

  private List<IPage> _pages;

  private Boolean _activeService;
  private Boolean _alsoHtml;

  private String _categoryCode;
  private String _attributeName;

  private Integer _startSchedulerHour;
  private Integer _startSchedulerMinute;

  private String _contentTypeCode;

  private ICategoryManager _categoryManager;
  private IUserProfileManager _profileManager;
  private IMailManager _mailManager;
  private IPageManager _pageManager;

  public static String NEWSLETTER_CONFIG_SESSION_PARAM = "newsletterConfig_sessionParam";

}
TOP

Related Classes of com.agiletec.plugins.jpnewsletter.apsadmin.config.NewsletterConfigAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.