src/core/net/sf/basedb/util/extensions/manager/processor/DeleteResourcesProcessor.java

Code
Comments
Other
Rev Date Author Line
5603 08 Apr 11 nicklas 1 /**
5603 08 Apr 11 nicklas 2   $Id$
5603 08 Apr 11 nicklas 3
5603 08 Apr 11 nicklas 4   Copyright (C) 2011 Nicklas Nordborg
5603 08 Apr 11 nicklas 5
5603 08 Apr 11 nicklas 6   This file is part of BASE - BioArray Software Environment.
5603 08 Apr 11 nicklas 7   Available at http://base.thep.lu.se/
5603 08 Apr 11 nicklas 8
5603 08 Apr 11 nicklas 9   BASE is free software; you can redistribute it and/or
5603 08 Apr 11 nicklas 10   modify it under the terms of the GNU General Public License
5603 08 Apr 11 nicklas 11   as published by the Free Software Foundation; either version 3
5603 08 Apr 11 nicklas 12   of the License, or (at your option) any later version.
5603 08 Apr 11 nicklas 13
5603 08 Apr 11 nicklas 14   BASE is distributed in the hope that it will be useful,
5603 08 Apr 11 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
5603 08 Apr 11 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5603 08 Apr 11 nicklas 17   GNU General Public License for more details.
5603 08 Apr 11 nicklas 18
5603 08 Apr 11 nicklas 19   You should have received a copy of the GNU General Public License
5603 08 Apr 11 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5603 08 Apr 11 nicklas 21 */
5603 08 Apr 11 nicklas 22 package net.sf.basedb.util.extensions.manager.processor;
5603 08 Apr 11 nicklas 23
5603 08 Apr 11 nicklas 24 import java.io.File;
5603 08 Apr 11 nicklas 25
5603 08 Apr 11 nicklas 26 import net.sf.basedb.util.FileUtil;
5603 08 Apr 11 nicklas 27 import net.sf.basedb.util.extensions.manager.ExtensionsFile;
5603 08 Apr 11 nicklas 28 import net.sf.basedb.util.extensions.manager.ExtensionsFileProcessor;
5603 08 Apr 11 nicklas 29 import net.sf.basedb.util.extensions.manager.ExtensionsManager;
5603 08 Apr 11 nicklas 30 import net.sf.basedb.util.extensions.manager.ProcessResults;
5603 08 Apr 11 nicklas 31 import net.sf.basedb.util.extensions.manager.ExtensionsFile.WriteableExtensionsFile;
5603 08 Apr 11 nicklas 32 import net.sf.basedb.util.extensions.manager.filter.DeletedFilter;
5603 08 Apr 11 nicklas 33
5603 08 Apr 11 nicklas 34 /**
5603 08 Apr 11 nicklas 35   A file processor implementation that removes all resources that 
5603 08 Apr 11 nicklas 36   was previously extracted from a JAR file. The main target directory must 
5603 08 Apr 11 nicklas 37   be specified when an instance is constructed. Each processed JAR file is 
5603 08 Apr 11 nicklas 38   assumed to have been extracted into a subdirectory with the same name
5603 08 Apr 11 nicklas 39   as the JAR file. This directory will be removed.
5603 08 Apr 11 nicklas 40   <p>
5603 08 Apr 11 nicklas 41   This processor is usually paired with a {@link DeletedFilter} to only
5603 08 Apr 11 nicklas 42   delete resources related to extension files that have been deleted. 
5603 08 Apr 11 nicklas 43   Using this processor without a filter will remove resources for
5603 08 Apr 11 nicklas 44   all extensions.
5603 08 Apr 11 nicklas 45   <p>
5603 08 Apr 11 nicklas 46   Extensions files that are not a JAR file are always ignored by
5603 08 Apr 11 nicklas 47   this processer.
5603 08 Apr 11 nicklas 48
5603 08 Apr 11 nicklas 49   @author Nicklas
5603 08 Apr 11 nicklas 50   @since 3.0
5603 08 Apr 11 nicklas 51   @base.modified $Date$
5603 08 Apr 11 nicklas 52 */
5603 08 Apr 11 nicklas 53 public class DeleteResourcesProcessor
5603 08 Apr 11 nicklas 54   implements ExtensionsFileProcessor
5603 08 Apr 11 nicklas 55 {
5603 08 Apr 11 nicklas 56
6444 09 Apr 14 nicklas 57   private static final org.slf4j.Logger log = 
6444 09 Apr 14 nicklas 58     org.slf4j.LoggerFactory.getLogger(DeleteResourcesProcessor.class);
5603 08 Apr 11 nicklas 59   
5603 08 Apr 11 nicklas 60   private final File mainDir;
5603 08 Apr 11 nicklas 61   private final ProcessResults results;
5603 08 Apr 11 nicklas 62   
5603 08 Apr 11 nicklas 63   private int numFiles;
5603 08 Apr 11 nicklas 64   private int numError;
5603 08 Apr 11 nicklas 65   private int numDeleted;
5603 08 Apr 11 nicklas 66
5603 08 Apr 11 nicklas 67   
5603 08 Apr 11 nicklas 68   /**
5603 08 Apr 11 nicklas 69     Create a new processor.
5603 08 Apr 11 nicklas 70     
5603 08 Apr 11 nicklas 71     @param mainDir The main directory to where the resources are located
5603 08 Apr 11 nicklas 72     @param results Optional object for storing results
5603 08 Apr 11 nicklas 73   */
5603 08 Apr 11 nicklas 74   public DeleteResourcesProcessor(File mainDir, ProcessResults results)
5603 08 Apr 11 nicklas 75   {
5603 08 Apr 11 nicklas 76     this.mainDir = mainDir;
5603 08 Apr 11 nicklas 77     this.results = results;
5603 08 Apr 11 nicklas 78   }
5603 08 Apr 11 nicklas 79   
5603 08 Apr 11 nicklas 80   /*
5603 08 Apr 11 nicklas 81     From the ExtensionsFileProcessor interface
5603 08 Apr 11 nicklas 82     ------------------------------------------
5603 08 Apr 11 nicklas 83   */
5603 08 Apr 11 nicklas 84   @Override
5603 08 Apr 11 nicklas 85   public void begin(ExtensionsManager manager, int numFiles)
5603 08 Apr 11 nicklas 86   {
5603 08 Apr 11 nicklas 87     this.numFiles = 0;
5603 08 Apr 11 nicklas 88     this.numError = 0;
5603 08 Apr 11 nicklas 89     this.numDeleted = 0;
5603 08 Apr 11 nicklas 90   }
5603 08 Apr 11 nicklas 91
5603 08 Apr 11 nicklas 92   @Override
5603 08 Apr 11 nicklas 93   public void processFile(ExtensionsManager manager, WriteableExtensionsFile wFile)
5603 08 Apr 11 nicklas 94   {
5603 08 Apr 11 nicklas 95     ExtensionsFile xtFile = wFile.getExtensionsFile();
5603 08 Apr 11 nicklas 96     if (!xtFile.isJar()) 
5603 08 Apr 11 nicklas 97     {
5603 08 Apr 11 nicklas 98       log.info("File is not a JAR file (skipping): " + xtFile);
5603 08 Apr 11 nicklas 99       return;
5603 08 Apr 11 nicklas 100     }
5603 08 Apr 11 nicklas 101     
5603 08 Apr 11 nicklas 102     File jar = xtFile.getFile();
5603 08 Apr 11 nicklas 103     File targetDir = new File(mainDir, jar.getName());
5603 08 Apr 11 nicklas 104     log.info("Removing resources from directory: " + targetDir);
5603 08 Apr 11 nicklas 105     try
5603 08 Apr 11 nicklas 106     {
5603 08 Apr 11 nicklas 107       int num = FileUtil.deleteTempDirectory(targetDir);
5603 08 Apr 11 nicklas 108       numDeleted += num;
5603 08 Apr 11 nicklas 109       numFiles++;
5603 08 Apr 11 nicklas 110       if (results != null)
5603 08 Apr 11 nicklas 111       {
5603 08 Apr 11 nicklas 112         results.addMessage(xtFile, num + " resources deleted.");
5603 08 Apr 11 nicklas 113       }
5603 08 Apr 11 nicklas 114       log.info("Removed  " + num + " resources from directory: " + targetDir);
5603 08 Apr 11 nicklas 115     }
5603 08 Apr 11 nicklas 116     catch (Throwable ex)
5603 08 Apr 11 nicklas 117     {
5603 08 Apr 11 nicklas 118       wFile.setError(true);
5603 08 Apr 11 nicklas 119       numError++;
5603 08 Apr 11 nicklas 120       if (results != null)
5603 08 Apr 11 nicklas 121       {
6379 13 Dec 13 nicklas 122         results.addErrorMessage(xtFile, "Could remove resources: " + ex.getClass().getName() + "; " + ex.getMessage());
5603 08 Apr 11 nicklas 123       }
5603 08 Apr 11 nicklas 124       log.error("Could not remove resources in directory: " + targetDir, ex);
5603 08 Apr 11 nicklas 125     }
5603 08 Apr 11 nicklas 126   }
5603 08 Apr 11 nicklas 127   
5603 08 Apr 11 nicklas 128   @Override
5603 08 Apr 11 nicklas 129   public void done(ExtensionsManager manager)
5603 08 Apr 11 nicklas 130   {}
5603 08 Apr 11 nicklas 131   
5603 08 Apr 11 nicklas 132   @Override
5603 08 Apr 11 nicklas 133   public void done(ExtensionsManager manager, Throwable t)
5603 08 Apr 11 nicklas 134   {}
5603 08 Apr 11 nicklas 135   // ---------------------------------------------------
5603 08 Apr 11 nicklas 136   
5603 08 Apr 11 nicklas 137   /**
5603 08 Apr 11 nicklas 138     Get the number of files that was successfully processed.
5603 08 Apr 11 nicklas 139   */
5603 08 Apr 11 nicklas 140   public int getNumFiles()
5603 08 Apr 11 nicklas 141   {
5603 08 Apr 11 nicklas 142     return numFiles;
5603 08 Apr 11 nicklas 143   }
5603 08 Apr 11 nicklas 144   
5603 08 Apr 11 nicklas 145   /**
5603 08 Apr 11 nicklas 146     Get the number of files that was had an error.
5603 08 Apr 11 nicklas 147   */
5603 08 Apr 11 nicklas 148   public int getNumError()
5603 08 Apr 11 nicklas 149   {
5603 08 Apr 11 nicklas 150     return numError;
5603 08 Apr 11 nicklas 151   }
5603 08 Apr 11 nicklas 152   
5603 08 Apr 11 nicklas 153   /**
5603 08 Apr 11 nicklas 154     Get the total number of resources that was deleted.
5603 08 Apr 11 nicklas 155   */
5603 08 Apr 11 nicklas 156   public int getNumDeleted()
5603 08 Apr 11 nicklas 157   {
5603 08 Apr 11 nicklas 158     return numDeleted;
5603 08 Apr 11 nicklas 159   }
5603 08 Apr 11 nicklas 160
5603 08 Apr 11 nicklas 161   
5603 08 Apr 11 nicklas 162 }