Coverage Report - org.kuali.rice.kew.plugin.PluginEnvironment
 
Classes in this File Line Coverage Branch Coverage Complexity
PluginEnvironment
0%
0/34
0%
0/4
1.25
 
 1  
 /*
 2  
  * Copyright 2005-2007 The Kuali Foundation
 3  
  * 
 4  
  * 
 5  
  * Licensed under the Educational Community License, Version 2.0 (the "License");
 6  
  * you may not use this file except in compliance with the License.
 7  
  * You may obtain a copy of the License at
 8  
  * 
 9  
  * http://www.opensource.org/licenses/ecl2.php
 10  
  * 
 11  
  * Unless required by applicable law or agreed to in writing, software
 12  
  * distributed under the License is distributed on an "AS IS" BASIS,
 13  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 14  
  * See the License for the specific language governing permissions and
 15  
  * limitations under the License.
 16  
  */
 17  
 package org.kuali.rice.kew.plugin;
 18  
 
 19  
 /**
 20  
  * A PluginEnvironment represents a Plugin and the PluginLoader from which it was loaded.
 21  
  * Grouping these together allows us to execute a reload of the Plugin since the Plugin
 22  
  * itself is not responsible for handling how it's own loading or reloading.
 23  
  * 
 24  
  * <p>The PluginEnvironment also keeps a reference to the PluginRegistry because this
 25  
  * allows it to add and remove Plugins as child resource loaders of the registry.
 26  
  *
 27  
  * @author Kuali Rice Team (rice.collab@kuali.org)
 28  
  */
 29  
 public class PluginEnvironment implements Reloadable {
 30  
 
 31  0
         private boolean loaded = false;
 32  
         private Plugin plugin;
 33  
         private final PluginLoader loader;
 34  
         private final PluginRegistry registry;
 35  0
         private boolean supressStartupFailure = true;
 36  
         
 37  
         /**
 38  
          * Constructs an unloaded PluginEnvironment from the given PluginLoader and PluginRegistry.
 39  
          * The environment will not be loaded until the first time that load() is executed.
 40  
          */
 41  0
         public PluginEnvironment(PluginLoader loader, PluginRegistry registry) {
 42  0
                 this.loader = loader;
 43  0
                 this.registry = registry;
 44  0
         }
 45  
         
 46  
         /**
 47  
          * Constructs a PluginEnvironment representing the given loaded Plugin.  Environments created
 48  
          * in this manner will indicate that they are loaded from the moment they are constructed.
 49  
          */
 50  
         public PluginEnvironment(Plugin plugin, PluginLoader loader, PluginRegistry registry) {
 51  0
                 this(loader, registry);
 52  0
                 this.plugin = plugin;
 53  0
                 this.loaded = true;
 54  0
         }
 55  
 
 56  
         /**
 57  
          * Returns true if this environment has been loaded, false otherwise.  If this method returns
 58  
          * false then getPlugin() may return null if the environment was never loaded after construction.
 59  
          */
 60  
         public boolean isLoaded() {
 61  0
                 return loaded;
 62  
         }
 63  
         
 64  
     /**
 65  
          * Returns a boolean indicating whether or not this PluginEnvironment is truly reloadable.
 66  
          * 
 67  
          * This will return false if the Plugin represents a plugin which can not be reloaded.
 68  
          */
 69  
         public boolean isReloadable() {
 70  0
             return true;
 71  
         }
 72  
 
 73  
         /**
 74  
          * Indicates whether or not a reload of this environment is needed.  If this method
 75  
          * returns true, it should continue to return true until a reload() is executed.
 76  
          */
 77  
         public synchronized boolean isReloadNeeded() {
 78  0
                 return loader.isModified();
 79  
         }
 80  
         
 81  
         /**
 82  
          * Reloads the environment by effectively executing an unload() followed by a load().
 83  
          */
 84  
         public synchronized void reload() throws Exception {
 85  0
                 unload();
 86  0
                 load();
 87  0
         }
 88  
         
 89  
         /**
 90  
          * Loads the plugin from the PluginLoader.  This will also start the Plugin and add it
 91  
          * to the PluginRegistry's resoure loaders.
 92  
          */
 93  
         public synchronized void load() throws Exception {
 94  0
             plugin = loader.load();
 95  0
                 plugin.setSupressStartupFailure(supressStartupFailure);
 96  
                 // it's important that the plugin is added to the resource loading system prior to startup because
 97  
                 // startup may need to grab services
 98  0
                 registry.addResourceLoader(plugin);
 99  0
                 plugin.start();
 100  0
                 loaded = true;
 101  0
         }
 102  
 
 103  
         /**
 104  
          * Unloads the plugin.  The effectively shuts the plugin down and removes it from the
 105  
          * PluginRegistry's resource loaders.
 106  
          * @throws Exception
 107  
          */
 108  
         public synchronized void unload() throws Exception {
 109  0
             if (plugin != null) {
 110  0
                 plugin.stop();
 111  
                 // it's important that the plugin be removed from the resource loading system after shutdown in
 112  
                 // case the plugin needs to access the resource loader during shutdown
 113  0
                 registry.removeResourceLoader(plugin.getName());
 114  
             }
 115  0
                 loaded = false;
 116  0
         }
 117  
         
 118  
         public String getPluginName() {
 119  0
             if (getPlugin() != null) {
 120  0
                 return getPlugin().getName().getLocalPart();
 121  
             }
 122  0
             return loader.getPluginName();
 123  
         }
 124  
         
 125  
         /**
 126  
          * Gets the Plugin represented by this environment.  May be null if this environment has not
 127  
          * yet been loaded.
 128  
          */
 129  
         public Plugin getPlugin() {
 130  0
                 return plugin;
 131  
         }
 132  
 
 133  
         /**
 134  
          * Gets the PluginLoader which loaded the Plugin in this environment.
 135  
          */
 136  
         public PluginLoader getLoader() {
 137  0
                 return loader;
 138  
         }
 139  
         
 140  
         /**
 141  
          * By default, startup failure is supressed.  If it is indicated that startup failure
 142  
          * supression is not desired, then startup errors will be thrown directly from calls to
 143  
          * load().
 144  
          */
 145  
         public void setSupressStartupFailure(boolean supressStartupFailure) {
 146  0
                 this.supressStartupFailure = supressStartupFailure;
 147  0
         }
 148  
         
 149  
 }