Package com.agiletec.plugins.jpmassiveresourceloader.apsadmin.resource

Source Code of com.agiletec.plugins.jpmassiveresourceloader.apsadmin.resource.MassiveResourceLoaderAction

/*
*
* 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.jpmassiveresourceloader.apsadmin.resource;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.activation.MimetypesFileTypeMap;

import org.apache.struts2.ServletActionContext;

import com.agiletec.aps.system.ApsSystemUtils;
import com.agiletec.aps.system.SystemConstants;
import com.agiletec.aps.system.services.baseconfig.ConfigInterface;
import com.agiletec.aps.system.services.category.Category;
import com.agiletec.aps.system.services.group.Group;
import com.agiletec.aps.system.services.group.IGroupManager;
import com.agiletec.aps.util.ApsWebApplicationUtils;
import com.agiletec.apsadmin.system.ApsFileUploadInterceptor;
import com.agiletec.plugins.jacms.aps.system.services.resource.model.ResourceInterface;
import com.agiletec.plugins.jacms.apsadmin.resource.AbstractResourceAction;

/**
* @author E.Santoboni
*/
public class MassiveResourceLoaderAction extends AbstractResourceAction implements IMassiveResourceLoaderAction {
 
  @Override
  public String save() {
    try {
      MassiveResourceDataBean bean = this.prepareDataBean();
      ResourceInterface resourcePrototype = this.getResourceManager().createResourceType(this.getResourceTypeCode());
      File folder = new File(this.getFolder());
      this.addFolder(folder, "/", this.isRecursive(), bean, resourcePrototype);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "save");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  protected void addFolder(File folder, String folderName, boolean recursive, MassiveResourceDataBean bean,
      ResourceInterface resourcePrototype) throws Exception {
    File[] files = folder.listFiles();
    if (null == files) return;
    for (int i=0; i<files.length; i++) {
      File file = files[i];
      if (file.isDirectory()) {
        String newFolderName = folderName+file.getName()+"/";
        if (!recursive) {
          String[] args = {newFolderName};
          this.addActionError(this.getText("jpmassiveresourceloader.Resource.file.directoryNotExplored", args));
        } else {
          this.addFolder(file, newFolderName, recursive, bean, resourcePrototype);
        }
      } else {
        if (this.checkFile(file, folderName, resourcePrototype)) {
          this.completeDataBean(bean, resourcePrototype, file);
          this.getResourceManager().addResource(bean);
          String[] args = {folderName+file.getName()};
          this.addActionMessage(this.getText("jpmassiveresourceloader.Resource.file.added", args));
        }
      }
    }
  }
 
  @Override
  public String joinCategory() {
    return this.joinRemoveCategory(true, this.getCategoryCode());
  }
 
  @Override
  public String removeCategory() {
    return this.joinRemoveCategory(false, this.getCategoryCode());
  }
 
  private String joinRemoveCategory(boolean isJoin, String categoryCode) {
    try {
      Category category = this.getCategory(categoryCode);
      if (category == null) return SUCCESS;
      List<String> categories = this.getCategoryCodes();
      if (isJoin) {
        if (!categories.contains(categoryCode)) {
          categories.add(categoryCode);
        }
      } else {
        categories.remove(categoryCode);
      }
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "joinRemoveCategory");
      return FAILURE;
    }
    return SUCCESS;
  }
 
  protected boolean checkFile(File file, String folderName, ResourceInterface resourcePrototype) {
    String fileName = file.getName();
    String[] args = {folderName + fileName};
    boolean success = true;
    if (!this.isRightType(fileName, resourcePrototype)) {
      this.addActionError(this.getText("jpmassiveresourceloader.Resource.file.wrongFormat", args));
      success = false;
    } else {
      if (!file.getName().matches("[_\\.a-zA-Z0-9]+")) {
        this.addActionError(this.getText("jpmassiveresourceloader.Resource.file.wrongFileNameFormat", args));
        success = false;
      }
      if (this.getMaximumSize()<file.length()) {
        this.addActionError(this.getText("jpmassiveresourceloader.Resource.file.tooBigFileLength", args));
        success = false;
      }
      if (this.isDuplicatedFile(fileName, resourcePrototype)) {
          this.addActionError(this.getText("jpmassiveresourceloader.Resource.file.alreadyPresent", args));
        success = false;
      }
    }
    return success;
  }
 
  protected boolean isRightType(String fileName, ResourceInterface resourcePrototype) {
    boolean isRight = false;
    if (fileName.length() > 0) {
      String docType = fileName.substring(fileName.lastIndexOf('.')+1).trim();
      String[] types = resourcePrototype.getAllowedFileTypes();
      isRight = this.isValidType(docType, types);
    } else {
      isRight = true;
    }
    return isRight;
  }
 
  protected boolean isDuplicatedFile(String fileName, ResourceInterface resourcePrototype) {
    boolean isDuplicated = false;
    resourcePrototype.setMainGroup(this.getMainGroup());
      try {
        isDuplicated = resourcePrototype.exists(fileName);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "isDuplicatedFile",
          "Error while check duplicate file - master file name '" + fileName + "'");
    }
      return isDuplicated;
  }
 
  public List<Group> getAllowedGroups() {
    return this.getResourceActionHelper().getAllowedGroups(this.getCurrentUser());
  }
 
  public Category getCategory(String categoryCode) {
    return this.getCategoryManager().getCategory(categoryCode);
  }
 
  protected MassiveResourceDataBean prepareDataBean() {
    MassiveResourceDataBean bean = new MassiveResourceDataBean();
    bean.setCategories(this.getCategories());
    bean.setMainGroup(this.getMainGroup());
    bean.setResourceType(this.getResourceTypeCode());
    return bean;
  }
 
  protected void completeDataBean(MassiveResourceDataBean bean, ResourceInterface resourcePrototype, File file) throws FileNotFoundException {
    bean.setDescr(this.prepareDescr(file));
    bean.setFileName(file.getName());
    bean.setFileSize((int) file.length()/1000);
    bean.setInputStream(new FileInputStream(file));
    bean.setMimeType(this._mimeTypes.getContentType(file));
  }
 
  protected String prepareDescr(File file) {
    String descr = this.getDescr() + " " + file.getName();
    descr = descr.length()>50 ? descr.substring(0, 50) : descr;
    return descr;
  }
 
  protected boolean isValidType(String docType, String[] rightTypes) {
    boolean isValid = false;
    if (rightTypes.length > 0) {
      for (int i=0; i<rightTypes.length; i++) {
        if (docType.toLowerCase().equals(rightTypes[i])) {
          isValid = true;
          break;
        }
      }
    } else {
      isValid = true;
    }
    return isValid;
  }
 
  public List<Category> getCategories() {
    List<Category> categories = new ArrayList<Category>(this.getCategoryCodes().size());
    Iterator<String> iter = this.getCategoryCodes().iterator();
    while (iter.hasNext()) {
      String categoryCode = iter.next();
      Category category = this.getCategoryManager().getCategory(categoryCode);
      if (null != category) categories.add(category);
    }
    return categories;
  }
 
  public String getFolder() {
    return _folder;
  }
  public void setFolder(String folder) {
    this._folder = folder;
  }
 
  public String getDescr() {
    return _descr;
  }
  public void setDescr(String descr) {
    this._descr = descr;
  }
 
  public String getMainGroup() {
    return this._mainGroup;
  }
  public void setMainGroup(String mainGroup) {
    this._mainGroup = mainGroup;
  }
 
  public List<String> getCategoryCodes() {
    return _categoryCodes;
  }
  public void setCategoryCodes(List<String> categoryCodes) {
    this._categoryCodes = categoryCodes;
  }
 
  public boolean isRecursive() {
    return _recursive;
  }
  public void setRecursive(boolean recursive) {
    this._recursive = recursive;
  }
 
  public String getCategoryCode() {
    return _categoryCode;
  }
  public void setCategoryCode(String categoryCode) {
    this._categoryCode = categoryCode;
  }
 
  public long getMaximumSize() {
    if (this._maximumSize<=0) {
      ConfigInterface configManager = (ConfigInterface) ApsWebApplicationUtils.getBean(SystemConstants.BASE_CONFIG_MANAGER, ServletActionContext.getRequest());
      String maxSizeParam = configManager.getParam(SystemConstants.PAR_FILEUPLOAD_MAXSIZE);
      if (null != maxSizeParam) {
        try {
          this._maximumSize = Long.parseLong(maxSizeParam);
        } catch (Throwable t) {
          ApsSystemUtils.getLogger().error("Error parsing param 'maxSize' - value '" + maxSizeParam + "' - message " + t.getMessage());
        }
      }
    }
    if (this._maximumSize<=0) {
      this._maximumSize = ApsFileUploadInterceptor.DEFAULT_MAX_SIZE;
    }
    return this._maximumSize;
  }
 
  protected IGroupManager getGroupManager() {
    return _groupManager;
  }
  public void setGroupManager(IGroupManager groupManager) {
    this._groupManager = groupManager;
  }
 
  private String _folder;
  private String _descr = "";
  private String _mainGroup;
  private List<String> _categoryCodes = new ArrayList<String>();
  private boolean _recursive;
 
  private String _categoryCode;
  private long _maximumSize;
 
  private IGroupManager _groupManager;
  private MimetypesFileTypeMap _mimeTypes = new MimetypesFileTypeMap();
 
}
TOP

Related Classes of com.agiletec.plugins.jpmassiveresourceloader.apsadmin.resource.MassiveResourceLoaderAction

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.