package org.marketcetera.client; import org.marketcetera.util.misc.ClassVersion; import org.marketcetera.module.ModuleFactory; import org.marketcetera.module.ModuleURN; import org.marketcetera.module.Module; import org.marketcetera.module.ModuleCreationException; /* $License$ */ /** * The provider / factory that creates Client Module instance. * <p> * The factory assumes that the Client is already initialized if * the URL is not set. Otherwise if the URL is set and the Client is * not {@link ClientManager#isInitialized() initialized}, * the factory will initialize the Client before * creating the module instance. * <p> * The factory has the following characteristics. * <table> * <tr><th>Provider URN:</th><td><code>metc:server:system</code></td></tr> * <tr><th>Cardinality:</th><td>Singleton</td></tr> * <tr><th>InstanceURN:</th><td><code>metc:server:system:single</code></td></tr> * <tr><th>Auto-Instantiated:</th><td>No</td></tr> * <tr><th>Auto-Started:</th><td>Yes</td></tr> * <tr><th>Instantiation Arguments:</th><td>None</td></tr> * <tr><th>Management Interface</th><td>{@link ClientModuleFactoryMXBean}</td></tr> * <tr><th>Module Type</th><td>{@link ClientModule}</td></tr> * </table> * * @author anshul@marketcetera.com * @version $Id: ClientModuleFactory.java 16841 2014-02-20 19:59:04Z colin $ * @since 1.0.0 */ @ClassVersion("$Id: ClientModuleFactory.java 16841 2014-02-20 19:59:04Z colin $") //$NON-NLS-1$ public class ClientModuleFactory extends ModuleFactory implements ClientModuleFactoryMXBean { @Override public Module create(Object...inParameters) throws ModuleCreationException { if(getURL() != null && !ClientManager.isInitialized()) { ClientParameters parameters = new ClientParameters(getUsername(), getPassword() == null ? null : getPassword().toCharArray(),getURL(), getHostname(), getPort(), getIDPrefix()); try { ClientManager.init(parameters); } catch (ConnectionException e) { throw new ModuleCreationException(e, Messages.CREATE_MODULE_ERROR); } catch (ClientInitException e) { //This failure cannot happen as we only execute //this code when client is not initialized. throw new ModuleCreationException(e, Messages.CREATE_MODULE_ERROR); } } return new ClientModule(INSTANCE_URN, true); } /** * Creates an instance. */ public ClientModuleFactory() { super(PROVIDER_URN, Messages.PROVIDER_DESCRIPTION, false, false); } @Override public String getURL() { return mURL; } @Override public void setURL(String inURL) { mURL = inURL; } @Override public String getUsername() { return mUsername; } @Override public void setUsername(String inUsername) { mUsername = inUsername; } @Override public void setPassword(String inPassword) { mPassword = inPassword; } private String getPassword() { return mPassword; } @Override public String getHostname() { return mHostname; } @Override public void setHostname(String inHostname) { mHostname = inHostname; } @Override public int getPort() { return mPort; } @Override public void setPort(int inPort) { mPort = inPort; } @Override public String getIDPrefix() { return mIDPrefix; } @Override public void setIDPrefix(String inIDPrefix) { mIDPrefix = inIDPrefix; } private String mURL; private String mUsername; private String mPassword; private String mHostname; private int mPort; private String mIDPrefix; static final ModuleURN PROVIDER_URN = new ModuleURN("metc:server:system"); //$NON-NLS-1$ public static final ModuleURN INSTANCE_URN = new ModuleURN(PROVIDER_URN, "single"); //$NON-NLS-1$ }