src/core/net/sf/basedb/util/extensions/manager/processor/UnregisterExtensionsProcessor.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 net.sf.basedb.util.extensions.Extension;
5603 08 Apr 11 nicklas 25 import net.sf.basedb.util.extensions.ExtensionPoint;
5603 08 Apr 11 nicklas 26 import net.sf.basedb.util.extensions.Registry;
5607 15 Apr 11 nicklas 27 import net.sf.basedb.util.extensions.manager.ExtensionKey;
5607 15 Apr 11 nicklas 28 import net.sf.basedb.util.extensions.manager.ExtensionPointKey;
5603 08 Apr 11 nicklas 29 import net.sf.basedb.util.extensions.manager.ExtensionsFile;
5603 08 Apr 11 nicklas 30 import net.sf.basedb.util.extensions.manager.ExtensionsFileProcessor;
5603 08 Apr 11 nicklas 31 import net.sf.basedb.util.extensions.manager.ExtensionsManager;
5607 15 Apr 11 nicklas 32 import net.sf.basedb.util.extensions.manager.FactoryParametersKey;
5603 08 Apr 11 nicklas 33 import net.sf.basedb.util.extensions.manager.ProcessResults;
5603 08 Apr 11 nicklas 34 import net.sf.basedb.util.extensions.manager.ExtensionsFile.WriteableExtensionsFile;
5603 08 Apr 11 nicklas 35 import net.sf.basedb.util.extensions.manager.filter.DeletedFilter;
5603 08 Apr 11 nicklas 36
5603 08 Apr 11 nicklas 37 /**
5603 08 Apr 11 nicklas 38   Extensions file processor implementation that unregisters all extension
5603 08 Apr 11 nicklas 39   points and extensions. This processor is usually paired with a 
5603 08 Apr 11 nicklas 40   {@link DeletedFilter} to unregister extensions from deleted files. 
5603 08 Apr 11 nicklas 41   Using this processor without a filter will unregister all 
5603 08 Apr 11 nicklas 42   extensions.
5603 08 Apr 11 nicklas 43
5603 08 Apr 11 nicklas 44   @author Nicklas
5603 08 Apr 11 nicklas 45   @since 3.0
5603 08 Apr 11 nicklas 46   @base.modified $Date$
5603 08 Apr 11 nicklas 47 */
5603 08 Apr 11 nicklas 48 public class UnregisterExtensionsProcessor
5603 08 Apr 11 nicklas 49   implements ExtensionsFileProcessor
5603 08 Apr 11 nicklas 50 {
5603 08 Apr 11 nicklas 51
6444 09 Apr 14 nicklas 52   private static final org.slf4j.Logger log = 
6444 09 Apr 14 nicklas 53     org.slf4j.LoggerFactory.getLogger(UnregisterExtensionsProcessor.class);
5603 08 Apr 11 nicklas 54
5603 08 Apr 11 nicklas 55   private final ProcessResults results;
5603 08 Apr 11 nicklas 56   private int numFiles;
5603 08 Apr 11 nicklas 57   private int numError;
5603 08 Apr 11 nicklas 58   private int numUnregistered;
5603 08 Apr 11 nicklas 59   
5603 08 Apr 11 nicklas 60   /**
5603 08 Apr 11 nicklas 61     Create a new processor.
5603 08 Apr 11 nicklas 62     
5603 08 Apr 11 nicklas 63     @param results Optional object for storing results
5603 08 Apr 11 nicklas 64   */
5603 08 Apr 11 nicklas 65   public UnregisterExtensionsProcessor(ProcessResults results)
5603 08 Apr 11 nicklas 66   {
5603 08 Apr 11 nicklas 67     this.results = results;
5603 08 Apr 11 nicklas 68   }
5603 08 Apr 11 nicklas 69   
5603 08 Apr 11 nicklas 70   /*
5603 08 Apr 11 nicklas 71     From the ExtensionsFileProcessor interface
5603 08 Apr 11 nicklas 72     ------------------------------------------
5603 08 Apr 11 nicklas 73   */
5603 08 Apr 11 nicklas 74   @Override
5603 08 Apr 11 nicklas 75   public void begin(ExtensionsManager manager, int numFiles)
5603 08 Apr 11 nicklas 76   {
5603 08 Apr 11 nicklas 77     this.numFiles = 0;
5603 08 Apr 11 nicklas 78     this.numError = 0;
5603 08 Apr 11 nicklas 79     this.numUnregistered = 0;
5603 08 Apr 11 nicklas 80   }
5603 08 Apr 11 nicklas 81
5603 08 Apr 11 nicklas 82   @Override
5603 08 Apr 11 nicklas 83   public void processFile(ExtensionsManager manager,  WriteableExtensionsFile wFile)
5603 08 Apr 11 nicklas 84   {
5603 08 Apr 11 nicklas 85     ExtensionsFile xtFile = wFile.getExtensionsFile();
5603 08 Apr 11 nicklas 86     
5603 08 Apr 11 nicklas 87     log.info("Unregistering extensions in file: " + xtFile);
5603 08 Apr 11 nicklas 88     try
5603 08 Apr 11 nicklas 89     {
5607 15 Apr 11 nicklas 90       wFile.open();
5603 08 Apr 11 nicklas 91       int num = 0;
5603 08 Apr 11 nicklas 92       Registry registry = manager.getRegistry();
6875 20 Apr 15 nicklas 93       for (ExtensionPoint<?> ep : xtFile.getObjectsOfClass(ExtensionPoint.class))
5603 08 Apr 11 nicklas 94       {
5607 15 Apr 11 nicklas 95         unregisterExtensionPoint(wFile, ep, registry);
5603 08 Apr 11 nicklas 96         num++;
5603 08 Apr 11 nicklas 97       }
6875 20 Apr 15 nicklas 98       for (Extension<?> ext : xtFile.getObjectsOfClass(Extension.class))
5603 08 Apr 11 nicklas 99       {
5607 15 Apr 11 nicklas 100         unregisterExtension(wFile, ext, registry);
5603 08 Apr 11 nicklas 101         num++;
5603 08 Apr 11 nicklas 102       }
5603 08 Apr 11 nicklas 103       numUnregistered += num;
5603 08 Apr 11 nicklas 104       numFiles++;
5603 08 Apr 11 nicklas 105       if (results != null)
5603 08 Apr 11 nicklas 106       {
5607 15 Apr 11 nicklas 107         if (!xtFile.exists()) results.setStatus(xtFile, "Deleted");
5607 15 Apr 11 nicklas 108         if (num > 0) results.addMessage(xtFile, num + " extension(s) unregisterered.");
5603 08 Apr 11 nicklas 109       }
5603 08 Apr 11 nicklas 110       log.info("Unregistered  " + num + " extensions from file: " + xtFile);
5603 08 Apr 11 nicklas 111     }
5603 08 Apr 11 nicklas 112     catch (Throwable ex)
5603 08 Apr 11 nicklas 113     {
5603 08 Apr 11 nicklas 114       wFile.setError(true);
5603 08 Apr 11 nicklas 115       numError++;
5603 08 Apr 11 nicklas 116       if (results != null)
5603 08 Apr 11 nicklas 117       {
6379 13 Dec 13 nicklas 118         results.addErrorMessage(xtFile, "Could not unregister extensions: " + ex.getClass().getName() + "; " + ex.getMessage());
5603 08 Apr 11 nicklas 119       }
5603 08 Apr 11 nicklas 120       log.error("Could not unregister extensions in file: " + xtFile, ex);
5603 08 Apr 11 nicklas 121     }
5607 15 Apr 11 nicklas 122     finally
5607 15 Apr 11 nicklas 123     {
5607 15 Apr 11 nicklas 124       wFile.close();
5607 15 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     log.info(numFiles + " extensions has been deleted");
5603 08 Apr 11 nicklas 132     if (numError > 0)
5603 08 Apr 11 nicklas 133     {
5603 08 Apr 11 nicklas 134       log.warn(numError + " extensions could not be deleted");
5603 08 Apr 11 nicklas 135     }
5603 08 Apr 11 nicklas 136   }
5603 08 Apr 11 nicklas 137   
5603 08 Apr 11 nicklas 138   @Override
5603 08 Apr 11 nicklas 139   public void done(ExtensionsManager manager, Throwable t)
5603 08 Apr 11 nicklas 140   {}
5603 08 Apr 11 nicklas 141   // ----------------------------------------------------
5603 08 Apr 11 nicklas 142   
5603 08 Apr 11 nicklas 143   /**
5607 15 Apr 11 nicklas 144     Unregister the given extension including factory metadata etc.
5607 15 Apr 11 nicklas 145   */
6875 20 Apr 15 nicklas 146   private void unregisterExtension(WriteableExtensionsFile wFile, Extension<?> ext, Registry registry)
5607 15 Apr 11 nicklas 147   {
5607 15 Apr 11 nicklas 148     unregisterFactory(wFile, ext.getRendererFactory());
5607 15 Apr 11 nicklas 149     unregisterFactory(wFile, ext.getActionFactory());
5607 15 Apr 11 nicklas 150     ExtensionKey key = new ExtensionKey(ext);
5607 15 Apr 11 nicklas 151     wFile.unregisterObject(key);
5607 15 Apr 11 nicklas 152     registry.unregisterExtension(ext.getId());
5607 15 Apr 11 nicklas 153   }
5607 15 Apr 11 nicklas 154
5607 15 Apr 11 nicklas 155   /**
5607 15 Apr 11 nicklas 156     Unregister the given extension point including factory metadata etc.
5607 15 Apr 11 nicklas 157   */
6875 20 Apr 15 nicklas 158   private void unregisterExtensionPoint(WriteableExtensionsFile wFile, ExtensionPoint<?> ep, Registry registry)
5607 15 Apr 11 nicklas 159   {
5607 15 Apr 11 nicklas 160     unregisterFactory(wFile, ep.getRendererFactory());
5607 15 Apr 11 nicklas 161     unregisterFactory(wFile, ep.getErrorHandlerFactory());
5607 15 Apr 11 nicklas 162     ExtensionPointKey key = new ExtensionPointKey(ep);
5607 15 Apr 11 nicklas 163     wFile.unregisterObject(key);
5607 15 Apr 11 nicklas 164     registry.unregisterExtensionPoint(ep.getId());
5607 15 Apr 11 nicklas 165   }
5607 15 Apr 11 nicklas 166   
5607 15 Apr 11 nicklas 167   private void unregisterFactory(WriteableExtensionsFile wFile, Object factory)
5607 15 Apr 11 nicklas 168   {
5607 15 Apr 11 nicklas 169     if (factory == null) return;
5607 15 Apr 11 nicklas 170     wFile.unregisterMetadata(new FactoryParametersKey(factory));
5607 15 Apr 11 nicklas 171   }
5607 15 Apr 11 nicklas 172
5607 15 Apr 11 nicklas 173   
5607 15 Apr 11 nicklas 174   /**
5603 08 Apr 11 nicklas 175     Get the number of files that was successfully processed.
5603 08 Apr 11 nicklas 176   */
5603 08 Apr 11 nicklas 177   public int getNumFiles()
5603 08 Apr 11 nicklas 178   {
5603 08 Apr 11 nicklas 179     return numFiles;
5603 08 Apr 11 nicklas 180   }
5603 08 Apr 11 nicklas 181   
5603 08 Apr 11 nicklas 182   /**
5603 08 Apr 11 nicklas 183     Get the number of files that was had an error.
5603 08 Apr 11 nicklas 184   */
5603 08 Apr 11 nicklas 185   public int getNumError()
5603 08 Apr 11 nicklas 186   {
5603 08 Apr 11 nicklas 187     return numError;
5603 08 Apr 11 nicklas 188   }
5603 08 Apr 11 nicklas 189   
5603 08 Apr 11 nicklas 190   /**
5603 08 Apr 11 nicklas 191     Get the number of extensions + extension points that
5603 08 Apr 11 nicklas 192     was unregistered.
5603 08 Apr 11 nicklas 193   */
5603 08 Apr 11 nicklas 194   public int getNumUnregistered()
5603 08 Apr 11 nicklas 195   {
5603 08 Apr 11 nicklas 196     return numUnregistered;
5603 08 Apr 11 nicklas 197   }
5603 08 Apr 11 nicklas 198   
5603 08 Apr 11 nicklas 199 }