Package org.bladerunnerjs.plugin.proxy

Source Code of org.bladerunnerjs.plugin.proxy.VirtualProxyPlugin

package org.bladerunnerjs.plugin.proxy;

import org.bladerunnerjs.model.BRJS;
import org.bladerunnerjs.plugin.Plugin;
import org.bladerunnerjs.plugin.exception.CircularPluginDependencyException;
import org.bladerunnerjs.plugin.utility.PluginLocatorUtils;

public class VirtualProxyPlugin implements Plugin {
  private Plugin plugin;
  private VirtualProxyState proxyState = VirtualProxyState.Uninitialized;
  private BRJS brjs;
 
  public VirtualProxyPlugin(Plugin plugin) {
    this.plugin = plugin;
  }
 
  protected void initializePlugin() {
    if(proxyState == VirtualProxyState.Uninitialized) {
      proxyState = VirtualProxyState.Initlializing;
      if (brjs == null)
      {
        throw new RuntimeException("BRJS hasn't been set!");
      }
      PluginLocatorUtils.setBRJSForPlugins(brjs, plugin);
      proxyState = VirtualProxyState.Initialized;
    }                           
    else if(proxyState == VirtualProxyState.Initlializing) {
      throw new CircularPluginDependencyException(plugin.getClass());
    }
  }
 
  @Override
  public void setBRJS(BRJS brjs) {
    this.brjs = brjs;
  }
 
  @Override
  public void close() {
    if(proxyState == VirtualProxyState.Initialized) {
      plugin.close();
    }
  }
 
  @Override
  public boolean instanceOf(Class<? extends Plugin> otherPluginCLass)
  {
    return otherPluginCLass.isAssignableFrom(plugin.getClass());
  }
 
  @Override
  public Class<?> getPluginClass() {
    return plugin.getClass();
  }
 
  @Override
  public boolean equals(Object object)
  {
    Plugin otherPlugin = (object instanceof VirtualProxyPlugin) ? ((VirtualProxyPlugin) object).plugin : (Plugin) object;
   
    return plugin == otherPlugin;
  }
 
  @Override
  public int hashCode()
  {
    return plugin.hashCode();
  }
 
  public Plugin getUnderlyingPlugin() {
    initializePlugin();
   
    return plugin;
  }
 
  public Plugin getUninitializedUnderlyingPlugin() {
    return plugin;
  }
 
}
TOP

Related Classes of org.bladerunnerjs.plugin.proxy.VirtualProxyPlugin

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.