Package com.agiletec.plugins.jprss.apsadmin.rss

Source Code of com.agiletec.plugins.jprss.apsadmin.rss.RssAction

/*
*
* 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.jprss.apsadmin.rss;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.apache.commons.beanutils.BeanComparator;

import com.agiletec.aps.system.ApsSystemUtils;
import com.agiletec.aps.system.common.entity.model.IApsEntity;
import com.agiletec.aps.system.common.entity.model.attribute.AttributeInterface;
import com.agiletec.aps.system.exception.ApsSystemException;
import com.agiletec.aps.system.services.category.Category;
import com.agiletec.aps.system.services.category.ICategoryManager;
import com.agiletec.aps.util.SelectItem;
import com.agiletec.apsadmin.system.ApsAdminSystemConstants;
import com.agiletec.apsadmin.system.BaseAction;
import com.agiletec.plugins.jacms.aps.system.services.content.IContentManager;
import com.agiletec.plugins.jacms.aps.system.services.content.model.Content;
import com.agiletec.plugins.jacms.aps.system.services.content.model.SmallContentType;
import com.agiletec.plugins.jacms.aps.system.services.content.widget.util.FilterUtils;
import com.agiletec.plugins.jacms.apsadmin.portal.specialwidget.listviewer.IContentListFilterAction;
import com.agiletec.plugins.jprss.aps.system.services.rss.Channel;
import com.agiletec.plugins.jprss.aps.system.services.rss.IRssManager;
import com.agiletec.plugins.jprss.aps.system.services.rss.RssContentMapping;
import com.opensymphony.xwork2.Action;

/**
* This action handles backend operations for the channel
*/
public class RssAction extends BaseAction implements IRssAction {
 
  @Override
  public void validate() {
    super.validate();
    if (this.getActionErrors().size()>0 || this.getFieldErrors().size()>0) {
      String filters = this.getFilters();
      List<Properties> properties = FilterUtils.getFiltersProperties(filters);
      this.setFiltersProperties(properties);
    }
  }

  @Override
  public List<Channel> getChannels() {
    List<Channel> channels = new ArrayList<Channel>();
    try {
      channels = this.getRssManager().getChannels(Channel.STATUS_ALL);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "getChannels");
      throw new RuntimeException("Errore recupero lista channels", t);
    }
    return channels;
  }

  @Override
  public String newChannel() {
    try {
      this.setStrutsAction(ApsAdminSystemConstants.ADD);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "newChannel");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  @Override
  public String save() {
    try {
      Channel channel = this.buildChannel();
      if (this.getStrutsAction() == ApsAdminSystemConstants.ADD) {
        this.getRssManager().addChannel(channel);
      } else if (this.getStrutsAction() == ApsAdminSystemConstants.EDIT) {
        this.getRssManager().updateChannel(channel);
      }
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "save");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  @Override
  public String delete() {
    try {
      if (0 == this.getId()) {
        this.addActionError(this.getText("jprss.message.rss.invalidId"));
        return INPUT;
      }
      this.getRssManager().deleteChannel(this.getId());
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "delete");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  @Override
  public String edit() {
    try {
      if (0 == this.getId()) {
        this.addActionError(this.getText("jprss.message.rss.invalidId"));
        return INPUT;
      }
      this.setStrutsAction(ApsAdminSystemConstants.EDIT);
      Channel channel = this.getRssManager().getChannel(this.getId());
      this.setActive(channel.isActive());
      this.setCategory(channel.getCategory());
      this.setContentType(channel.getContentType());
      this.setDescription(channel.getDescription());
      this.setFeedType(channel.getFeedType());
      this.setFilters(channel.getFilters());
      this.setTitle(channel.getTitle());
      this.setMaxContentsSize(channel.getMaxContentsSize());
      this.setFiltersProperties(this.buildFilterProperties());
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "edit");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  @Override
  public String trash() {
    try {
      if (0 == this.getId()) {
        this.addActionError(this.getText("jprss.message.rss.invalidId"));
        return INPUT;
      }
      this.setStrutsAction(ApsAdminSystemConstants.DELETE);
      Channel channel = this.getRssManager().getChannel(this.getId());
      this.setActive(channel.isActive());
      this.setCategory(channel.getCategory());
      this.setContentType(channel.getContentType());
      this.setDescription(channel.getDescription());
      this.setFeedType(channel.getFeedType());
      this.setFilters(channel.getFilters());
      this.setTitle(channel.getTitle());
      this.setMaxContentsSize(channel.getMaxContentsSize());
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "trash");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  public List<Category> getAvailableCategories() {
    return this.getCategoryManager().getCategoriesList();
  }
 
  public SmallContentType getSmallContentType(String code) {
    Map<String, SmallContentType> smallContentTypes = this.getContentManager().getSmallContentTypesMap();
    return smallContentTypes.get(code);
  }
 
  public List<IApsEntity> getContentTypes() {
    List<IApsEntity> entityPrototypes = null;
    try {
      Map<String, IApsEntity> modelMap = this.getContentManager().getEntityPrototypes();
      entityPrototypes = new ArrayList<IApsEntity>(modelMap.values());
      BeanComparator comparator = new BeanComparator("typeDescr");
      Collections.sort(entityPrototypes, comparator);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "getContentTypes");
      throw new RuntimeException("Error extracting content types", t);
    }
    return entityPrototypes;
  }
 
  public List<SelectItem> getAllowedFilterTypes() throws ApsSystemException {
    List<SelectItem> types = new ArrayList<SelectItem>();
    try {
      types.add(new SelectItem(IContentListFilterAction.METADATA_KEY_PREFIX + IContentManager.CONTENT_CREATION_DATE_FILTER_KEY, this.getText("label.creationDate")));
      types.add(new SelectItem(IContentListFilterAction.METADATA_KEY_PREFIX + IContentManager.CONTENT_MODIFY_DATE_FILTER_KEY, this.getText("label.lastModifyDate")));
      //String contentType = this.getShowlet().getConfig().getProperty(IContentListWidgetHelper.WIDGET_PARAM_CONTENT_TYPE);
      Content prototype = this.getContentManager().createContentType(this.getContentType());
      List<AttributeInterface> contentAttributes = prototype.getAttributeList();
      for (int i=0; i<contentAttributes.size(); i++) {
        AttributeInterface attribute = contentAttributes.get(i);
        if (attribute.isSearcheable()) {
          types.add(new SelectItem(attribute.getName(), this.getText("label.attribute", new String[]{attribute.getName()})));
        }
      }
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "getAllowedFilterTypes");
      throw new ApsSystemException("Error extracting allowed filter types", t);
    }
    return types;
  }
 
  public Map<String, String> getAvailableFeedTypes() {
    return this.getRssManager().getAvailableFeedTypes();
  }
 
  /**
   * Restituisce una mappa [codice, descr] dei tipi di contenuto configurati come erogabili via rss
   * @return
   */
  public Map<String, String> getAvailableContentTypes() {
    return this.getRssManager().getAvailableContentTypes();
  }
 
  public RssContentMapping getContentMapping(String typeCode) {
    return this.getRssManager().getContentMapping(typeCode);
  }
 
  public String selectContentType() {
    try {
      if (null != this.getContentType() &&  this.getContentType().trim().length() > 0) {
        // nothing to do
      } else {
        String[] args = {"contentType"};
        this.addFieldError("contentType", this.getText("requiredstring", args));
        return Action.INPUT;
      }
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "newChannel");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  private Channel buildChannel() {
    Channel channel = new Channel();
    channel.setActive(this.isActive());
    channel.setCategory(this.getCategory());
    channel.setContentType(this.getContentType());
    channel.setDescription(this.getDescription());
    channel.setFeedType(this.getFeedType());
    channel.setTitle(this.getTitle());
    channel.setFilters(this.getFilters());
    if (this.getStrutsAction() == ApsAdminSystemConstants.EDIT) {
      channel.setId(this.getId());
    }
    if (this.getMaxContentsSize() > 0) {
      channel.setMaxContentsSize(this.getMaxContentsSize());
    }
    return channel;
  }

  public String addFilter() {
    try {
      List<Properties> properties = this.buildFilterProperties();
      Properties newFilter = this.getNewFilter();
      if (null != newFilter) {
        properties.add(newFilter);
      }
      String newShowletParam = FilterUtils.getShowletParam(properties);
      this.setFilters(newShowletParam);
      this.setFiltersProperties(properties);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "addFilter");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  private List<Properties> buildFilterProperties() {
    String filters = this.getFilters();
    if (null == filters || filters.trim().length() == 0) {
      filters = null;
    }
    List<Properties> properties = FilterUtils.getFiltersProperties(filters);
    return properties;
  }

  public String removeFilter() {
    try {
      //ESTRAI "filters" campo testo
      String filters = this.getFilters();
      //Estrai lista properties da testo
      List<Properties> properties = FilterUtils.getFiltersProperties(filters);
      //ELIMINA
      int filterIndex = this.getFilterIndex();
      properties.remove(filterIndex);
      //Setta Properties
      this.setFiltersProperties(properties);
      //crea nuovo "filters" String
      String newShowletParam = FilterUtils.getShowletParam(properties);
      this.setFilters(newShowletParam);
      //SETTA property FILTERS nella showlet
      this.setFiltersProperties(properties);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "removeFilter");
      return FAILURE;
    }
    return SUCCESS;
  }

  public String moveFilter() {
    try {
      //ESTRAI "filters" campo testo
      String filters = this.getFilters();
     
      //Estrai lista properties da testo
      List<Properties> properties = FilterUtils.getFiltersProperties(filters);
     
      //FAI LO SPOSTAMENTO.
      int filterIndex = this.getFilterIndex();
      Properties element = properties.get(filterIndex);
      if (getMovement().equalsIgnoreCase(IRssAction.MOVEMENT_UP_CODE)){
        if (filterIndex > 0) {
          properties.remove(filterIndex);
          properties.add(filterIndex -1, element);
        }
      } else if (getMovement().equalsIgnoreCase(IRssAction.MOVEMENT_DOWN_CODE)) {
        if (filterIndex < properties.size() -1) {
          properties.remove(filterIndex);
          properties.add(filterIndex + 1, element);
        }
      }
      //Setta Properties
      this.setFiltersProperties(properties);
     
      //crea nuovo "filters" String
      String newShowletParam = FilterUtils.getShowletParam(properties);
      this.setFilters(newShowletParam);
     
      //SETTA property FILTERS nella showlet
      this.setFiltersProperties(properties);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "moveFilter");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  public int getId() {
    return _id;
  }
  public void setId(int id) {
    this._id = id;
  }
 
  public String getTitle() {
    return _title;
  }
  public void setTitle(String title) {
    this._title = title;
  }
 
  public String getDescription() {
    return _description;
  }
  public void setDescription(String description) {
    this._description = description;
  }
 
  public boolean isActive() {
    return _active;
  }
  public void setActive(boolean active) {
    this._active = active;
  }

  public String getFeedType() {
    return _feedType;
  }
  public void setFeedType(String feedType) {
    this._feedType = feedType;
  }

  public void setStrutsAction(int strutsAction) {
    this._strutsAction = strutsAction;
  }
  public int getStrutsAction() {
    return _strutsAction;
  }
 
  public void setFiltersProperties(List<Properties> filtersProperties) {
    this._filtersProperties = filtersProperties;
  }
  public List<Properties> getFiltersProperties() {
    return _filtersProperties;
  }

  public void setFilterIndex(int filterIndex) {
    this._filterIndex = filterIndex;
  }
  public int getFilterIndex() {
    return _filterIndex;
  }

  public void setMovement(String movement) {
    this._movement = movement;
  }
  public String getMovement() {
    return _movement;
  }
 
  public void setContentType(String contentType) {
    this._contentType = contentType;
  }
  public String getContentType() {
    return _contentType;
  }

  public void setCategory(String category) {
    this._category = category;
  }
  public String getCategory() {
    return _category;
  }
 
  public int getMaxContentsSize() {
    return _maxContentsSize;
  }
  public void setMaxContentsSize(int maxContentsSize) {
    this._maxContentsSize = maxContentsSize;
  }
 
  public void setFilters(String filters) {
    this._filters = filters;
  }
  public String getFilters() {
    return _filters;
  }

  public void setNewFilter(Properties newFilter) {
    this._newFilter = newFilter;
  }
  public Properties getNewFilter() {
    return _newFilter;
  }
 
  protected IRssManager getRssManager() {
    return _rssManager;
  }
  public void setRssManager(IRssManager rssManager) {
    this._rssManager = rssManager;
  }
 
  protected ICategoryManager getCategoryManager() {
    return _categoryManager;
  }
  public void setCategoryManager(ICategoryManager categoryManager) {
    this._categoryManager = categoryManager;
  }
 
  protected IContentManager getContentManager() {
    return _contentManager;
  }
  public void setContentManager(IContentManager contentManager) {
    this._contentManager = contentManager;
  }
 
  private int _id;
  private String _title;
  private String _description;
  private boolean _active;
  private String _feedType;
  private int _filterIndex;
  private String _contentType;
  private String _category;
  private int _maxContentsSize = -1;
 
  private String _filters;
  private String _movement;
 
  private Properties _newFilter;
 
  private List<Properties> _filtersProperties;
 
  private int _strutsAction;
 
  private IRssManager _rssManager;
  private ICategoryManager _categoryManager;
  private IContentManager _contentManager;
 
}
TOP

Related Classes of com.agiletec.plugins.jprss.apsadmin.rss.RssAction

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.