package org.signalml.plugin.impl; import java.util.HashMap; import java.util.MissingResourceException; import org.apache.log4j.Logger; import org.signalml.app.util.i18n.SvarogI18n; import org.signalml.app.view.workspace.ViewerElementManager; import org.signalml.plugin.export.SvarogAccess; import org.signalml.plugin.export.change.SvarogAccessChangeSupport; import org.signalml.plugin.export.config.SvarogAccessConfig; import org.signalml.plugin.export.i18n.SvarogAccessI18n; import org.signalml.plugin.export.method.SvarogAccessMethod; import org.signalml.plugin.export.signal.SvarogAccessSignal; import org.signalml.plugin.export.view.SvarogAccessGUI; import org.signalml.plugin.export.resources.SvarogAccessResources; import org.signalml.plugin.impl.change.SvarogAccessChangeSupportImpl; import org.signalml.plugin.loader.PluginHead; /** * Implementation of {@link SvarogAccess} interface. * Allows to return only one, {@link #getSharedInstance() shared instance} * of this class. * Passes the information that the {@link #setInitializationPhaseEnd * initialization phase} has finished to the {@link GUIAccessImpl GUI access} * and the information that the application is {@link #onClose() closing} * to {@link SvarogAccessChangeSupportImpl change support}. * * @author Marcin Szumski * @author Stanislaw Findeisen (Eisenbits) */ public class PluginAccessClass implements SvarogAccess { private static final Logger logger = Logger.getLogger(PluginAccessClass.class); /** * the manager of Svarog elements */ private static ViewerElementManager manager = null; private final Class _klass; private SvarogI18n i18nAccessImpl; private final SvarogAccessResourcesImpl resourcesAccessImpl; /** * access to GUI features of Svarog */ protected static final GUIAccessImpl guiAccess = GUIAccessImpl.getInstance(); /** Svarog methods and tasks facade. */ private static final MethodAccessImpl methodAccessImpl = MethodAccessImpl.getInstance(); /** Svarog configuration facade. */ private static final ConfigAccessImpl configAccessImpl = ConfigAccessImpl.getInstance(); /** * access to ordinary features of Svarog */ private static final SignalsAccessImpl signalsAccess = SignalsAccessImpl.getInstance(); /** * access to listen on changes in Svarog */ private static final SvarogAccessChangeSupportImpl changeSupport = SvarogAccessChangeSupportImpl.getInstance(); /** * The plugin map. */ private static HashMap<Object, PluginHead> pluginMap = new HashMap<Object, PluginHead>(); /** * Constructor. Creates child accesses. */ public PluginAccessClass(PluginHead head) { this._klass = head.getPluginObj().getClass(); this.resourcesAccessImpl = new SvarogAccessResourcesImpl(this._klass); } /** * Adds given plugin to {@link #pluginMap}. * @param head plugin to add */ public synchronized static void addPlugin(PluginHead head) { if (pluginMap.containsKey(head)) { throw new IllegalArgumentException("Duplicate plugin auth! (" + head + ")"); } pluginMap.put(head, head); logger.debug("addPlugin: " + head + " --> " + head); } /** * Returns the implementation of {@link SvarogAccessGUI}. * @return the implementation of GUI access */ public static GUIAccessImpl getGUIImpl() { return guiAccess; } /** * @param manager the element manager to set */ public static void setManager(ViewerElementManager manager) { try { assert(PluginAccessClass.manager == null); PluginAccessClass.manager = manager; signalsAccess.setViewerElementManager(manager); guiAccess.setViewerElementManager(manager); changeSupport.setViewerElementManager(manager); configAccessImpl.setViewerElementManager(manager); methodAccessImpl.setViewerElementManager(manager); } catch (Exception e) { logger.error("error in plug-in interface while setting element manager"); logger.error("", e); } } /** * @return the element manager */ public static ViewerElementManager getManager() { return PluginAccessClass.manager; } /* (non-Javadoc) * @see org.signalml.plugin.export.PluginAccess#getGUIAccess() */ @Override public SvarogAccessGUI getGUIAccess() { return guiAccess; } /* (non-Javadoc) * @see org.signalml.plugin.export.PluginAccess#getSignalAccess() */ @Override public SvarogAccessSignal getSignalAccess() { return signalsAccess; } /* (non-Javadoc) * @see org.signalml.plugin.export.PluginAccess#getChangeSupport() */ @Override public SvarogAccessChangeSupport getChangeSupport() { return changeSupport; } /** * @param initializationPhase true if it is an initialization phase, * false otherwise */ public static void setInitializationPhaseEnd() { guiAccess.setInitializationPhaseEnd(); } /** * Calls {@link SvarogAccessChangeSupportImpl#onClose()}. */ public static void onClose() { changeSupport.onClose(); } @Override public SvarogAccessMethod getMethodAccess() { return methodAccessImpl; } @Override public SvarogAccessConfig getConfigAccess() { return configAccessImpl; } @Override public synchronized SvarogAccessI18n getI18nAccess() { if (this.i18nAccessImpl == null) this.i18nAccessImpl = new SvarogI18n(this._klass); return this.i18nAccessImpl; } @Override public SvarogAccessResources getResourcesAccess() { return this.resourcesAccessImpl; } }