/* * * 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.jpremoteresourceloader.apsadmin.resource; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.ConnectException; import java.net.URLConnection; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.agiletec.aps.system.ApsSystemUtils; import com.agiletec.aps.system.services.category.Category; import com.agiletec.aps.system.services.group.Group; import com.agiletec.apsadmin.system.ApsAdminSystemConstants; import com.agiletec.plugins.jacms.aps.system.services.resource.model.ResourceDataBean; import com.agiletec.plugins.jacms.aps.system.services.resource.model.ResourceInterface; import com.agiletec.plugins.jacms.apsadmin.resource.ResourceAction; import com.agiletec.plugins.jpremoteresourceloader.apsadmin.resource.helper.RemoteResourceLoaderActionHelper; public class RemoteResourceLoaderAction extends ResourceAction implements IRemoteResourceLoaderAction, ResourceDataBean { @Override public void validate() { if (ApsAdminSystemConstants.ADD == this.getStrutsAction()) { String resourceType = this.getResourceType(); ResourceInterface resourcePrototype = this.getResourceManager().createResourceType(resourceType); this.clearFieldErrors(); this.loadExternalResource(); if (this.hasFieldErrors()) return; this.checkRightFileType(resourcePrototype); if (this.hasFieldErrors()) return; //this.checkFileName(); //if (this.hasFieldErrors()) return; this.checkDuplicateFile(resourcePrototype); } } public void loadExternalResource() { try { if (this.getUrl().startsWith("file://")) { this.addFieldError("url", "ResourceURL.protocolNotAllowed"); return; } InputStream inputStream = null; try { URLConnection conn = RemoteResourceLoaderActionHelper.getRemoteResourceConnection(this.getUrl(), this.getDefaultStorageDirPath()); conn.connect(); inputStream = conn.getInputStream(); } catch (ConnectException ce) { this.addFieldError("url", this.getText("jpremoteresourceloader.ResourceURL.file.ConnectionProblem")); ApsSystemUtils.logThrowable(ce, this, "loadExternalResource"); return; } catch (IOException ioe) { this.addFieldError("url", this.getText("jpremoteresourceloader.ResourceURL.file.ConnectionProblem")); ApsSystemUtils.logThrowable(ioe, this, "loadExternalResource"); return; } String filename = null; String urlFileName = RemoteResourceLoaderActionHelper.extractFilenameFromUrl(this.getUrl()) ; if (null != urlFileName && urlFileName.length() > 0) { if (null == this.getAlternateName() || this.getAlternateName().trim().length() == 0) { filename = urlFileName; } else { //String[] fullFileName = urlFileName.split("\\."); String docType = urlFileName.substring(urlFileName.lastIndexOf(".")+1).trim(); filename = new StringBuffer(this.getAlternateName()).append(".").append(docType).toString(); } File file = RemoteResourceLoaderActionHelper.createFileFromInputStream(inputStream, filename); this.setUpload(file); this.setFileName(filename); } if (null == this.getFileName() || null == this.getUpload()) { this.addFieldError("url", this.getText("ResourceURL.file.error")); } } catch (Throwable t) { this.addFieldError("url", this.getText("ResourceURL.file.error")); ApsSystemUtils.logThrowable(t, this, "loadExternalResource"); } } @Override public String newResource() { this.setStrutsAction(ApsAdminSystemConstants.ADD); return SUCCESS; } @Override public String joinCategory() { return this.joinRemoveCategory(true, this.getCategoryCode()); } @Override public String removeCategory() { return this.joinRemoveCategory(false, this.getCategoryCode()); } public Category getCategory(String categoryCode) { return this.getCategoryManager().getCategory(categoryCode); } public List<Group> getAllowedGroups() { return this.getResourceActionHelper().getAllowedGroups(this.getCurrentUser()); } @Override public String save() { try { this.getResourceManager().addResource(this); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "save"); return FAILURE; } return SUCCESS; } // public String saveOnEditContent() { // try { // ResourceInterface resource = this.getResourceManager().addResource(this); // this.setResourceLangCode(this.getCurrentAttributeLang()); // ResourceAttributeActionHelper.joinResource(resource, this.getRequest()); // } catch (Throwable t) { // ApsSystemUtils.logThrowable(t, this, "save"); // return FAILURE; // } // return SUCCESS; // } // // public String getCurrentAttributeLang() { // HttpSession session = this.getRequest().getSession(); // return (String) session.getAttribute(ResourceAttributeActionHelper.RESOURCE_LANG_CODE_SESSION_PARAM); // } // // public boolean isOnEditContent() { // return true; // } @Override 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; } 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 void checkRightFileType(ResourceInterface resourcePrototype) { if (!this.isRightType(resourcePrototype)) { this.addFieldError("upload", this.getText("Resource.file.wrongFormat")); } } */ /* private void checkFileName() { String fileName = this.getFileName(); if (!fileName.matches("[a-zA-Z_\\.0-9]+")) { String[] args = {fileName}; this.addFieldError("upload", this.getText("Resource.file.wrongFileNameFormat", args)); } } @Override protected void checkDuplicateFile(ResourceInterface resourcePrototype) { String formFileName = this._filename; try { resourcePrototype.setMainGroup(this.getMainGroup()); if (resourcePrototype.exists(formFileName)) { String[] args = {formFileName}; this.addFieldError("upload", this.getText("Resource.file.alreadyPresent", args)); } } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "checkDuplicateFile", "Error while check duplicate file - master file name '" + formFileName + "'"); } } */ /* private boolean isRightType(ResourceInterface resourcePrototype) { boolean isRight = false; if (this._filename.length() > 0) { String fileName = _filename; String docType = fileName.substring(fileName.lastIndexOf(".")+1).trim(); String[] types = resourcePrototype.getAllowedFileTypes(); isRight = this.isValidType(docType, types); } else { isRight = true; } return isRight; } private 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; } */ @Override public int getFileSize() { return (int) this.getUpload().length()/1000; } @Override public InputStream getInputStream() throws Throwable { return new FileInputStream(this.getUpload()); } // @Override // public String getMimeType() { // return super.getcon // } @Override public String getResourceType() { return this.getResourceTypeCode(); } public void setUrl(String url) { this._url = url; } public String getUrl() { return _url; } public void setFileName(String filename) { this._filename = filename; } public String getFilename() { return _filename; } @Override public String getFileName() { return this.getFilename(); } // public void setUpload(File upload) { // this._upload = upload; // } // public File getUpload() { // return _upload; // } // public void setCategoryCodes(List<String> categoryCodes) { // this._categoryCodes = categoryCodes; // } // public List<String> getCategoryCodes() { // return _categoryCodes; // } // public void setDescr(String descr) { // this._descr = descr; // } // public String getDescr() { // return _descr; // } // public void setMainGroup(String mainGroup) { // this._mainGroup = mainGroup; // } // public String getMainGroup() { // return _mainGroup; // } // public void setContentType(String contentType) { // this._contentType = contentType; // } // public String getContentType() { // return _contentType; // } // public void setCategoryCode(String categoryCode) { // this._categoryCode = categoryCode; // } // public String getCategoryCode() { // return _categoryCode; // } // public String getResourceLangCode() { // return _resourceLangCode; // } // public void setResourceLangCode(String resourceLangCode) { // this._resourceLangCode = resourceLangCode; // } public void setAlternateName(String alternateName) { this._alternateName = alternateName; } public String getAlternateName() { return _alternateName; } //private String _resourceLangCode; public void setDefaultStorageDirPath(String defaultStorageDirPath) { this._defaultStorageDirPath = defaultStorageDirPath; } public String getDefaultStorageDirPath() { return _defaultStorageDirPath; } private String _url; private String _filename; //private File _upload; //private List<String> _categoryCodes = new ArrayList<String>(); //private String _descr; //private String _mainGroup; //private String _contentType; private String _alternateName; //private String _categoryCode; private String _defaultStorageDirPath; }