/* =============================================================================== * Part of the InfoGlue Content Management Platform (www.infoglue.org) * * =============================================================================== * * Copyright (C) * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2, as published by the * Free Software Foundation. See the file LICENSE.html for more information. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple * Place, Suite 330 / Boston, MA 02111-1307 / USA. * * =============================================================================== */ package org.infoglue.cms.applications.contenttool.actions; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FilenameFilter; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.infoglue.cms.applications.common.actions.InfoGlueAbstractAction; import org.infoglue.cms.applications.databeans.AssetKeyDefinition; import org.infoglue.cms.controllers.kernel.impl.simple.ContentController; import org.infoglue.cms.controllers.kernel.impl.simple.ContentTypeDefinitionController; import org.infoglue.cms.controllers.kernel.impl.simple.ContentVersionController; import org.infoglue.cms.controllers.kernel.impl.simple.DigitalAssetController; import org.infoglue.cms.entities.content.ContentVersionVO; import org.infoglue.cms.entities.content.DigitalAssetVO; import org.infoglue.cms.entities.management.ContentTypeDefinitionVO; import org.infoglue.cms.util.CmsPropertyHandler; import org.infoglue.cms.util.ConstraintExceptionBuffer; import org.infoglue.cms.util.graphics.Imaging; import webwork.action.Action; /** * @author Mattias Bogeblad * @version 1.0 * @since InfoglueCMS 2.4 * */ public class ImageEditorAction extends InfoGlueAbstractAction { private final static Logger logger = Logger.getLogger(ImageEditorAction.class.getName()); private static final long serialVersionUID = 1L; private DigitalAssetVO digitalAssetVO = null; private String modifiedFileUrl = ""; private int xpos1, ypos1, xpos2, ypos2 = 0; private int width, height = 0; private String keepRatio = "false"; private String bestFit = "true"; private Integer quality = 50; private Integer degrees = 90; private String direction = "cw"; private Integer contentVersionId = null; private Integer digitalAssetId = null; private String closeOnLoad; private ContentVersionVO contentVersionVO; private ContentTypeDefinitionVO contentTypeDefinitionVO; private String workingFileName; private String digitalAssetKey = null; private boolean isUpdated = false; private String reasonKey; //private DigitalAssetVO updatedDigitalAssetVO = null; private Integer contentTypeDefinitionId; private boolean refreshAll = false; private boolean clearHistory = false; private ConstraintExceptionBuffer ceb = new ConstraintExceptionBuffer(); /** * */ public String doExecute() throws Exception { if(clearHistory) { logger.info("Cleaning up all session images"); getHttpSession().removeAttribute("imageEditorOldWorkingFiles"); } ceb.throwIfNotEmpty(); this.digitalAssetVO = DigitalAssetController.getDigitalAssetVOWithId(this.digitalAssetId); this.contentVersionVO = ContentVersionController.getContentVersionController().getContentVersionVOWithId(this.contentVersionId); this.contentTypeDefinitionVO = ContentController.getContentController().getContentTypeDefinition(contentVersionVO.getContentId()); if(this.workingFileName == null) { String filePath = DigitalAssetController.getDigitalAssetFilePath(this.digitalAssetVO.getDigitalAssetId()); BufferedImage original = javax.imageio.ImageIO.read(new File(filePath)); workingFileName = "imageEditorWK_" + System.currentTimeMillis() + "_" + this.getInfoGluePrincipal().getName().hashCode() + "_" + digitalAssetVO.getDigitalAssetId() + getImageFileSuffix(digitalAssetVO.getAssetContentType()); File outputFile = new File(getImageEditorPath() + File.separator + workingFileName); javax.imageio.ImageIO.write(original, getImageFileType(digitalAssetVO.getAssetContentType()), outputFile); } this.modifiedFileUrl = getImageEditorBaseUrl() + workingFileName; //logger.info("modifiedFileUrl:" + modifiedFileUrl); return "success"; } /** * */ public String doUndo() throws Exception { this.digitalAssetVO = DigitalAssetController.getDigitalAssetVOWithId(this.digitalAssetId); this.contentVersionVO = ContentVersionController.getContentVersionController().getContentVersionVOWithId(this.contentVersionId); this.contentTypeDefinitionVO = ContentController.getContentController().getContentTypeDefinition(contentVersionVO.getContentId()); workingFileName = getFirstOldWorkingFile(); logger.info("workingFileName:" + workingFileName); this.modifiedFileUrl = getImageEditorBaseUrl() + workingFileName; logger.info("this.modifiedFileUrl:" + this.modifiedFileUrl); //logger.info("modifiedFileUrl:" + modifiedFileUrl); return "success"; } public String doResize() throws Exception { ceb.throwIfNotEmpty(); this.digitalAssetVO = DigitalAssetController.getDigitalAssetVOWithId(this.digitalAssetId); this.contentVersionVO = ContentVersionController.getContentVersionController().getContentVersionVOWithId(this.contentVersionId); this.contentTypeDefinitionVO = ContentController.getContentController().getContentTypeDefinition(contentVersionVO.getContentId()); File file = new File(getImageEditorPath() + File.separator + workingFileName); addOldWorkingFile(file); workingFileName = "imageEditorWK_" + System.currentTimeMillis() + "_" + this.getInfoGluePrincipal().getName().hashCode() + "_" + digitalAssetVO.getDigitalAssetId() + getImageFileSuffix(digitalAssetVO.getAssetContentType()); File outputFile = new File(getImageEditorPath() + File.separator + workingFileName); outputFile.getParentFile().mkdirs(); logger.info("height: " + height); logger.info("width: " + width); logger.info("keepRatio: " + keepRatio); logger.info("bestFit: " + bestFit); logger.info("quality: " + quality); if(keepRatio.equalsIgnoreCase("true")) { Imaging.resize(file, outputFile, width, height, getImageFileType(digitalAssetVO.getAssetContentType()), true, quality); } else //We don't support it for now but when the Imaging-class do it will kick in { Imaging.resize(file, outputFile, width, height, getImageFileType(digitalAssetVO.getAssetContentType()), false, quality); } //logger.info("outputFile:" + outputFile.length()); this.modifiedFileUrl = getImageEditorBaseUrl() + workingFileName; //logger.info("modifiedFileUrl:" + modifiedFileUrl); return "successResize"; } public String doRotate() throws Exception { ceb.throwIfNotEmpty(); this.digitalAssetVO = DigitalAssetController.getDigitalAssetVOWithId(this.digitalAssetId); this.contentVersionVO = ContentVersionController.getContentVersionController().getContentVersionVOWithId(this.contentVersionId); this.contentTypeDefinitionVO = ContentController.getContentController().getContentTypeDefinition(contentVersionVO.getContentId()); File file = new File(getImageEditorPath() + File.separator + workingFileName); addOldWorkingFile(file); workingFileName = "imageEditorWK_" + System.currentTimeMillis() + "_" + this.getInfoGluePrincipal().getName().hashCode() + "_" + digitalAssetVO.getDigitalAssetId() + getImageFileSuffix(digitalAssetVO.getAssetContentType()); File outputFile = new File(getImageEditorPath() + File.separator + workingFileName); outputFile.mkdirs(); /* String workingRealFileName = "imageEditorWK_" + System.currentTimeMillis() + "_" + this.getInfoGluePrincipal().getName().hashCode() + "_" + digitalAssetVO.getDigitalAssetId() + getImageFileSuffix(digitalAssetVO.getAssetContentType()); File outputRealFile = new File(getImageEditorPath() + File.separator + workingRealFileName); outputRealFile.mkdirs(); */ logger.info("direction: " + direction); logger.info("degrees: " + degrees); if(direction.equalsIgnoreCase("ccw")) degrees = -degrees; BufferedImage original = javax.imageio.ImageIO.read(file); AffineTransform transform = new AffineTransform(); int diff = original.getWidth() - original.getHeight(); if(diff > 0) transform.translate(0, diff / 2); else transform.translate(diff / 2, 0); transform.rotate(degrees * Math.PI / 180.0, original.getWidth()/2, original.getHeight()/2); AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR); BufferedImage image = op.filter(original, null); if(getImageFileType(digitalAssetVO.getAssetContentType()).equals("JPG")) { BufferedImage out2 = new BufferedImage (image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g = out2.createGraphics(); g.drawRenderedImage(image, null); image = out2; } javax.imageio.ImageIO.write(image, getImageFileType(digitalAssetVO.getAssetContentType()), outputFile); //logger.info("outputFile:" + outputFile.length()); this.modifiedFileUrl = getImageEditorBaseUrl() + workingFileName; //logger.info("modifiedFileUrl:" + modifiedFileUrl); return "successRotate"; } public String doCrop() throws Exception { ceb.throwIfNotEmpty(); this.digitalAssetVO = DigitalAssetController.getDigitalAssetVOWithId(this.digitalAssetId); this.contentVersionVO = ContentVersionController.getContentVersionController().getContentVersionVOWithId(this.contentVersionId); this.contentTypeDefinitionVO = ContentController.getContentController().getContentTypeDefinition(contentVersionVO.getContentId()); File file = new File(getImageEditorPath() + File.separator + workingFileName); addOldWorkingFile(file); BufferedImage original = javax.imageio.ImageIO.read(file); // create a cropped image from the original image BufferedImage image = original.getSubimage(xpos1, ypos1, xpos2 - xpos1, ypos2 - ypos1); //BufferedImage image = imaging.crop(original, xpos1, ypos1, xpos2 - xpos1, ypos2 - ypos1); workingFileName = "imageEditorWK_" + System.currentTimeMillis() + "_" + this.getInfoGluePrincipal().getName().hashCode() + "_" + digitalAssetVO.getDigitalAssetId() + getImageFileSuffix(digitalAssetVO.getAssetContentType()); File outputFile = new File(getImageEditorPath() + File.separator + workingFileName); javax.imageio.ImageIO.write(image, getImageFileType(digitalAssetVO.getAssetContentType()), outputFile); //logger.info("outputFile:" + outputFile.length()); this.modifiedFileUrl = getImageEditorBaseUrl() + workingFileName; //logger.info("modifiedFileUrl:" + modifiedFileUrl); return "successCrop"; } public String doSave() throws Exception { ceb.throwIfNotEmpty(); this.digitalAssetVO = DigitalAssetController.getDigitalAssetVOWithId(this.digitalAssetId); this.contentVersionVO = ContentVersionController.getContentVersionController().getContentVersionVOWithId(this.contentVersionId); this.contentTypeDefinitionVO = ContentController.getContentController().getContentTypeDefinition(contentVersionVO.getContentId()); File file = new File(getImageEditorPath() + File.separator + workingFileName); //logger.info("saving file:" + file.getAbsolutePath()); //logger.info("file:" + file.exists() + "\n" + file.getAbsolutePath()); if(file.exists()) { String contentType = digitalAssetVO.getAssetContentType(); this.digitalAssetVO.setAssetFileSize(new Integer(new Long(file.length()).intValue())); //logger.info("Setting file size to:" + new Integer(new Long(file.length()).intValue())); this.digitalAssetVO.setAssetContentType(digitalAssetVO.getAssetContentType()); InputStream is = new FileInputStream(file); if(this.contentTypeDefinitionId != null && digitalAssetVO.getAssetKey() != null) { AssetKeyDefinition assetKeyDefinition = ContentTypeDefinitionController.getController().getDefinedAssetKey(contentTypeDefinitionVO, true, digitalAssetKey); if(assetKeyDefinition != null) { if(assetKeyDefinition.getMaximumSize().intValue() < new Long(file.length()).intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnSizeText"; return "uploadFailed"; } if(assetKeyDefinition.getAllowedContentTypes().startsWith("image")) { if(!contentType.startsWith("image")) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnTypeNotImageText"; return "uploadFailed"; } Image image = javax.imageio.ImageIO.read(file); int width = image.getWidth(null); int height = image.getHeight(null); String allowedWidth = assetKeyDefinition.getImageWidth(); String allowedHeight = assetKeyDefinition.getImageHeight(); if(!allowedWidth.equals("*")) { Integer allowedWidthNumber = new Integer(allowedWidth.substring(1)); if(allowedWidth.startsWith("<") && width >= allowedWidthNumber.intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageToWideText"; return "uploadFailed"; } if(allowedWidth.startsWith(">") && width <= allowedWidthNumber.intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageNotWideEnoughText"; return "uploadFailed"; } if(!allowedWidth.startsWith(">") && !allowedWidth.startsWith("<") && width != new Integer(allowedWidth).intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageWrongWidthText"; return "uploadFailed"; } } if(!allowedHeight.equals("*")) { Integer allowedHeightNumber = new Integer(allowedHeight.substring(1)); if(allowedHeight.startsWith("<") && height >= allowedHeightNumber.intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageToHighText"; return "uploadFailed"; } if(allowedHeight.startsWith(">") && height <= allowedHeightNumber.intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageNotHighEnoughText"; return "uploadFailed"; } if(!allowedHeight.startsWith(">") && !allowedHeight.startsWith("<") && height != new Integer(allowedHeight).intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageWrongHeightText"; return "uploadFailed"; } } } } } if(this.contentVersionId != null) { List<Integer> newContentVersionIdList = new ArrayList<Integer>(); DigitalAssetVO digitalAssetVO = ContentVersionController.getContentVersionController().checkStateAndChangeIfNeeded(contentVersionId, digitalAssetId, getInfoGluePrincipal(), newContentVersionIdList); digitalAssetVO.setAssetContentType(this.digitalAssetVO.getAssetContentType()); digitalAssetVO.setAssetFileSize(this.digitalAssetVO.getAssetFileSize()); //digitalAssetVO = DigitalAssetController.create(newAsset, is, this.contentVersionId, this.getInfoGluePrincipal(), newContentVersionIdList); if(newContentVersionIdList.size() > 0) { Integer newContentVersionId = newContentVersionIdList.get(0); logger.debug("newContentVersionId:" + newContentVersionId + ":" + this.contentVersionId); if(this.contentVersionId != newContentVersionId) this.refreshAll = true; setContentVersionId(newContentVersionId); } DigitalAssetVO updatedDigitalAssetVO = DigitalAssetController.update(digitalAssetVO, is); } if(is != null) is.close(); workingFileName = "imageEditorWK_" + System.currentTimeMillis() + "_" + this.getInfoGluePrincipal().getName().hashCode() + "_" + digitalAssetVO.getDigitalAssetId() + getImageFileSuffix(digitalAssetVO.getAssetContentType()); if(CmsPropertyHandler.getEnableDiskAssets().equals("true") && file.exists()) { String folderName = "" + (digitalAssetVO.getDigitalAssetId().intValue() / 1000); String assetFileName = "" + digitalAssetVO.getAssetFilePath() + File.separator + folderName + File.separator + digitalAssetVO.getId() + "_" + digitalAssetVO.getAssetFileName(); //logger.info("Going to move " + file.getName() + " to " + assetFileName); File finalAssetFile = new File(assetFileName); boolean moved = file.renameTo(finalAssetFile); //logger.info("moved:" + finalAssetFile.getAbsolutePath() + ":" + moved); } else { boolean deleted = file.delete(); //logger.info("file:" + file.getAbsolutePath() + ":" + deleted); } cleanOldWorkingFiles(true); closeOnLoad = "true"; } return "successSaveAndExit"; } public String doSaveAs() throws Exception { ceb.throwIfNotEmpty(); this.digitalAssetVO = DigitalAssetController.getDigitalAssetVOWithId(this.digitalAssetId); this.contentVersionVO = ContentVersionController.getContentVersionController().getContentVersionVOWithId(this.contentVersionId); this.contentTypeDefinitionVO = ContentController.getContentController().getContentTypeDefinition(contentVersionVO.getContentId()); File file = new File(getImageEditorPath() + File.separator + workingFileName); //logger.info("saving file:" + file.getAbsolutePath()); String contentType = digitalAssetVO.getAssetContentType(); String fromEncoding = CmsPropertyHandler.getUploadFromEncoding(); if(fromEncoding == null) fromEncoding = "iso-8859-1"; String toEncoding = CmsPropertyHandler.getUploadToEncoding(); if(toEncoding == null) toEncoding = "utf-8"; this.digitalAssetKey = new String(digitalAssetKey.getBytes(fromEncoding), toEncoding); DigitalAssetVO newAsset = new DigitalAssetVO(); newAsset.setAssetContentType(contentType); newAsset.setAssetKey(this.digitalAssetKey); newAsset.setAssetFileName(digitalAssetVO.getAssetFileName()); newAsset.setAssetFilePath(digitalAssetVO.getAssetFilePath()); newAsset.setAssetFileSize(new Integer(new Long(file.length()).intValue())); InputStream is = new FileInputStream(file); if(this.contentTypeDefinitionId != null && digitalAssetKey != null) { AssetKeyDefinition assetKeyDefinition = ContentTypeDefinitionController.getController().getDefinedAssetKey(contentTypeDefinitionVO, true, digitalAssetKey); if(assetKeyDefinition != null) { if(assetKeyDefinition.getMaximumSize().intValue() < new Long(file.length()).intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnSizeText"; return "uploadFailed"; } if(assetKeyDefinition.getAllowedContentTypes().startsWith("image")) { if(!contentType.startsWith("image")) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnTypeNotImageText"; return "uploadFailed"; } Image image = javax.imageio.ImageIO.read(file); int width = image.getWidth(null); int height = image.getHeight(null); String allowedWidth = assetKeyDefinition.getImageWidth(); String allowedHeight = assetKeyDefinition.getImageHeight(); if(!allowedWidth.equals("*")) { Integer allowedWidthNumber = new Integer(allowedWidth.substring(1)); if(allowedWidth.startsWith("<") && width >= allowedWidthNumber.intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageToWideText"; return "uploadFailed"; } if(allowedWidth.startsWith(">") && width <= allowedWidthNumber.intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageNotWideEnoughText"; return "uploadFailed"; } if(!allowedWidth.startsWith(">") && !allowedWidth.startsWith("<") && width != new Integer(allowedWidth).intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageWrongWidthText"; return "uploadFailed"; } } if(!allowedHeight.equals("*")) { Integer allowedHeightNumber = new Integer(allowedHeight.substring(1)); if(allowedHeight.startsWith("<") && height >= allowedHeightNumber.intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageToHighText"; return "uploadFailed"; } if(allowedHeight.startsWith(">") && height <= allowedHeightNumber.intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageNotHighEnoughText"; return "uploadFailed"; } if(!allowedHeight.startsWith(">") && !allowedHeight.startsWith("<") && height != new Integer(allowedHeight).intValue()) { file.delete(); this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageWrongHeightText"; return "uploadFailed"; } } } } } if(this.contentVersionId != null) { List<Integer> newContentVersionIdList = new ArrayList<Integer>(); digitalAssetVO = DigitalAssetController.create(newAsset, is, this.contentVersionId, this.getInfoGluePrincipal(), newContentVersionIdList); if(newContentVersionIdList.size() > 0) { Integer newContentVersionId = newContentVersionIdList.get(0); logger.debug("newContentVersionId:" + newContentVersionId + ":" + this.contentVersionId); if(this.contentVersionId != newContentVersionId) this.refreshAll = true; setContentVersionId(newContentVersionId); } } if(is != null) is.close(); workingFileName = "imageEditorWK_" + System.currentTimeMillis() + "_" + this.getInfoGluePrincipal().getName().hashCode() + "_" + digitalAssetVO.getDigitalAssetId() + getImageFileSuffix(digitalAssetVO.getAssetContentType()); if(CmsPropertyHandler.getEnableDiskAssets().equals("true") && file.exists()) { String folderName = "" + (digitalAssetVO.getDigitalAssetId().intValue() / 1000); String assetFileName = "" + digitalAssetVO.getAssetFilePath() + File.separator + folderName + File.separator + digitalAssetVO.getId() + "_" + digitalAssetVO.getAssetFileName(); //logger.info("Going to move " + file.getName() + " to " + assetFileName); File finalAssetFile = new File(assetFileName); boolean moved = file.renameTo(finalAssetFile); //logger.info("moved:" + finalAssetFile.getAbsolutePath() + ":" + moved); } else { boolean deleted = file.delete(); //logger.info("file:" + file.getAbsolutePath() + ":" + deleted); } cleanOldWorkingFiles(true); closeOnLoad = "true"; return "successSaveAndExit"; } /** * This saves old files in session so you can do undo up to 10 times. */ private void addOldWorkingFile(File oldWorkingFile) throws Exception { List imageEditorOldWorkingFiles = (List)getHttpSession().getAttribute("imageEditorOldWorkingFiles"); if(imageEditorOldWorkingFiles == null) { imageEditorOldWorkingFiles = new ArrayList(); getHttpSession().setAttribute("imageEditorOldWorkingFiles", imageEditorOldWorkingFiles); } logger.info("Adding " + oldWorkingFile.getName()); imageEditorOldWorkingFiles.add(0, oldWorkingFile.getName()); List imageEditorOldWorkingFiles2 = (List)getHttpSession().getAttribute("imageEditorOldWorkingFiles"); logger.info("imageEditorOldWorkingFiles2: " + imageEditorOldWorkingFiles2.size()); } /** * This saves old files in session so you can do undo up to 10 times. */ private String getFirstOldWorkingFile() throws Exception { String oldWorkingFileName = null; List imageEditorOldWorkingFiles = (List)getHttpSession().getAttribute("imageEditorOldWorkingFiles"); if(imageEditorOldWorkingFiles != null) { logger.info("imageEditorOldWorkingFiles: " + imageEditorOldWorkingFiles.size()); oldWorkingFileName = (String)imageEditorOldWorkingFiles.get(0); logger.info("oldWorkingFileName:" + oldWorkingFileName); imageEditorOldWorkingFiles.remove(0); } else logger.info("imageEditorOldWorkingFiles was null"); return oldWorkingFileName; } /** * This method preserves space by only allowing 5 historic images and also cleaning up after a save totally. * All files older than 1 day are also removed. */ private void cleanOldWorkingFiles(boolean cleanAll) throws Exception { getHttpSession().removeAttribute("imageEditorOldWorkingFiles"); File workingAssetsDir = new File(getImageEditorPath()); final String matchString = "_" + this.getInfoGluePrincipal().getName() + "_" + this.digitalAssetId; FilenameFilter filter = new FilenameFilter() { public boolean accept(File dir, String name) { //logger.info("name: " + name + ":" + name.indexOf(matchString)); //logger.info("matchString: " + matchString); return name.indexOf(matchString) > -1; } }; File[] files = workingAssetsDir.listFiles(filter); for(int i=0; i < files.length; i++) { File file = files[i]; //logger.info("file:" + file.getName()); boolean deleted = file.delete(); } File[] allFiles = workingAssetsDir.listFiles(); for(int i=0; i < allFiles.length; i++) { File file = allFiles[i]; long modified = file.lastModified(); long difference = System.currentTimeMillis() - modified; if(difference > (1000 * 60 * 60 * 12)) file.delete(); } } private String getImageEditorPath() { String path = CmsPropertyHandler.getDigitalAssetPath() + File.separator + "imageEditor"; File dir = new File(path); dir.mkdirs(); return path; } private String getImageEditorBaseUrl() { return CmsPropertyHandler.getWebServerAddress() + "/" + CmsPropertyHandler.getDigitalAssetBaseUrl() + "/imageEditor/"; } private String getImageFileSuffix(String contentType) { if(contentType == null || contentType.equals("")) return ".jpg"; else if(contentType.equals("image/png") || contentType.equals("image/gif")) return ".png"; else return ".jpg"; } private String getImageFileType(String contentType) { if(contentType == null || contentType.equals("")) return "JPG"; else if(contentType.equals("image/png") || contentType.equals("image/gif")) return "PNG"; else return "JPG"; } public void setDigitalAssetKey(String digitalAssetKey) { this.digitalAssetKey = digitalAssetKey; } public List getDefinedAssetKeys() { return ContentTypeDefinitionController.getController().getDefinedAssetKeys(this.contentTypeDefinitionVO, true); } public Integer getDigitalAssetId() { return digitalAssetId; } public void setDigitalAssetId(Integer digitalAssetId) { this.digitalAssetId = digitalAssetId; } public String getDigitalAssetKey() { return digitalAssetKey; } public boolean getIsUpdated() { return isUpdated; } public Integer getContentVersionId() { return contentVersionId; } public void setContentVersionId(Integer contentVersionId) { this.contentVersionId = contentVersionId; } public String getCloseOnLoad() { return closeOnLoad; } public void setCloseOnLoad(String closeOnLoad) { this.closeOnLoad = closeOnLoad; } public String getModifiedFileUrl() { return modifiedFileUrl; } public int getXpos1() { return xpos1; } public void setXpos1(int xpos1) { this.xpos1 = xpos1; } public int getXpos2() { return xpos2; } public void setXpos2(int xpos2) { this.xpos2 = xpos2; } public int getYpos1() { return ypos1; } public void setYpos1(int ypos1) { this.ypos1 = ypos1; } public int getYpos2() { return ypos2; } public void setYpos2(int ypos2) { this.ypos2 = ypos2; } public String getWorkingFileName() { return workingFileName; } public void setWorkingFileName(String workingFileName) { this.workingFileName = workingFileName; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public void setKeepRatio(String keepRatio) { this.keepRatio = keepRatio; } public void setBestFit(String bestFit) { this.bestFit = bestFit; } public void setDegrees(Integer degrees) { this.degrees = degrees; } public void setDirection(String direction) { this.direction = direction; } public boolean getRefreshAll() { return this.refreshAll; } public void setClearHistory(boolean clearHistory) { this.clearHistory = clearHistory; } public Integer getQuality() { return quality; } public void setQuality(Integer quality) { this.quality = quality; } }