/* =============================================================================== * * 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.managementtool.actions; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.infoglue.cms.applications.common.actions.InfoGlueAbstractAction; 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.controllers.kernel.impl.simple.SiteNodeController; import org.infoglue.cms.entities.content.ContentVO; import org.infoglue.cms.entities.management.ContentTypeDefinitionVO; import org.infoglue.cms.exception.SystemException; import org.infoglue.cms.jobs.CleanOldVersionsJob; import org.infoglue.cms.util.CmsPropertyHandler; import org.infoglue.cms.util.FileUploadHelper; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.SimpleTrigger; import org.quartz.jobs.NoOpJob; import org.quartz.spi.TriggerFiredBundle; import webwork.action.ActionContext; /** * This class represents the optimization tools of the system * It offers the user a few options in which to optimize the database and model. * * @author mattias */ public class ViewArchiveToolAction extends InfoGlueAbstractAction { private static final long serialVersionUID = 1L; private int numberOfVersionsToKeep = 3; private int assetFileSizeLimit = 5000000; private int assetNumberLimit = 50; private List optimizationBeanList = new ArrayList(); private String[] digitalAssetId; private String archiveUrl; private StringBuffer archiveFileSize = new StringBuffer(); private boolean nullAssets = false; private boolean deleteVersions = false; private Integer redoNumberOfTimes = 1; private Integer numberOfCleanedSiteNodeVersions = null; private Integer numberOfCleanedContentVersions = null; private Map<String,Integer> cleaningMap = null; private Integer contentId = null; private Boolean recurse = false; private Map<Integer,Long> sizes = new HashMap<Integer,Long>(); public String doInput() throws Exception { return "input"; } public String doInputArchiveOldAssets() throws Exception { //optimizationBeanList = ContentVersionController.getContentVersionController().getHeavyContentVersions(numberOfVersionsToKeep, assetFileSizeLimit, assetNumberLimit); optimizationBeanList = ContentVersionController.getContentVersionController().getAssetsPossibleToArchive(numberOfVersionsToKeep, assetFileSizeLimit, assetNumberLimit); return "inputArchiveOldAssets"; } public String doInputRestoreAssetArchive() throws Exception { return "inputRestoreAssetArchive"; } public String doArchiveOldAssets() throws Exception { archiveUrl = DigitalAssetController.getController().archiveDigitalAssets(digitalAssetId, archiveFileSize, nullAssets); return "successArchive"; } public String doRestoreAssetArchive() throws Exception { File file = FileUploadHelper.getUploadedFile(ActionContext.getContext().getMultiPartRequest()); if(file == null || !file.exists()) throw new SystemException("The file upload must have gone bad as no file reached the restore utility."); DigitalAssetController.getController().restoreAssetArchive(file); return "successRestoreArchive"; } public String doCleanOldVersions() throws Exception { JobDetail jobDetail = new JobDetail(); SimpleTrigger trig = new SimpleTrigger(); JobExecutionContext jec = new JobExecutionContext(null, new TriggerFiredBundle(jobDetail, trig, null, false, null, null, null, null), new NoOpJob()); jec.put("deleteVersions", new Boolean(deleteVersions)); jec.put("redoNumberOfTimes", redoNumberOfTimes); new CleanOldVersionsJob().execute(jec); Map<String,Integer> result = (Map<String,Integer>)jec.getResult(); this.cleaningMap = result; return "input"; } public String doCleanOldVersionsForContent() throws Exception { Map<String,Integer> totalCleanedContentVersions = new HashMap<String,Integer>(); ContentVO contentVOToClean = ContentController.getContentController().getContentVOWithId(contentId); ContentTypeDefinitionVO ctdVO = ContentTypeDefinitionController.getController().getContentTypeDefinitionVOWithId(contentVOToClean.getContentTypeDefinitionId()); String keepOnlyOldPublishedVersionsString = CmsPropertyHandler.getKeepOnlyOldPublishedVersionsDuringClean(); long minimumTimeBetweenVersionsDuringClean = CmsPropertyHandler.getMinimumTimeBetweenVersionsDuringClean(); boolean keepOnlyOldPublishedVersions = Boolean.parseBoolean(keepOnlyOldPublishedVersionsString); int cleanedContentVersions = ContentVersionController.getContentVersionController().cleanContentVersions(contentVOToClean, recurse, numberOfVersionsToKeep, keepOnlyOldPublishedVersions, minimumTimeBetweenVersionsDuringClean, deleteVersions); totalCleanedContentVersions.put(ctdVO.getName(), cleanedContentVersions); this.cleaningMap = totalCleanedContentVersions; return "input"; } public String doExecute() throws Exception { return "success"; } public int getNumberOfVersionsToKeep() { return numberOfVersionsToKeep; } public void setNumberOfVersionsToKeep(int numberOfVersionsToKeep) { this.numberOfVersionsToKeep = numberOfVersionsToKeep; } public List getOptimizationBeanList() { return optimizationBeanList; } public void setDigitalAssetId(String[] digitalAssetId) { this.digitalAssetId = digitalAssetId; } public String getArchiveUrl() { return archiveUrl; } public String getArchiveFileSize() { return archiveFileSize.toString(); } public int getAssetFileSizeLimit() { return assetFileSizeLimit; } public int getAssetNumberLimit() { return assetNumberLimit; } public void setAssetFileSizeLimit(int assetFileSizeLimit) { this.assetFileSizeLimit = assetFileSizeLimit; } public void setAssetNumberLimit(int assetNumberLimit) { this.assetNumberLimit = assetNumberLimit; } public boolean getNullAssets() { return nullAssets; } public void setNullAssets(boolean nullAssets) { this.nullAssets = nullAssets; } public Integer getNumberOfCleanedContentVersions() { return numberOfCleanedContentVersions; } public Integer getNumberOfCleanedSiteNodeVersions() { return numberOfCleanedSiteNodeVersions; } public boolean getDeleteVersions() { return deleteVersions; } public void setDeleteVersions(boolean deleteVersions) { this.deleteVersions = deleteVersions; } public void setRedoNumberOfTimes(Integer redoNumberOfTimes) { this.redoNumberOfTimes = redoNumberOfTimes; } public Integer getContentId() { return contentId; } public void setContentId(Integer contentId) { this.contentId = contentId; } public Boolean getRecurse() { return recurse; } public void setRecurse(Boolean recurse) { this.recurse = recurse; } public Map<String, Integer> getCleaningMap() { return cleaningMap; } public Map<Integer, Long> getContentSizes() { return this.sizes; } }