/* Generated by Together */ package multimonster.mediaproxy; import java.rmi.RemoteException; import javax.ejb.RemoveException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import multimonster.common.FormatId; import multimonster.common.ProtocolId; import multimonster.common.Session; import multimonster.common.media.MOIdentifier; import multimonster.common.plugin.PlugInFactory; import multimonster.common.plugin.PlugInIdentifier; import multimonster.common.util.EjbCreator; import multimonster.common.util.EjbHomeGetter; import multimonster.exceptions.PlugInInstantiationException; import multimonster.mediaproxy.exceptions.MediaProxyException; import multimonster.systemadministration.interfaces.SystemAdministrationImpl; import multimonster.systemadministration.interfaces.SystemAdministrationImplHome; import org.apache.log4j.Logger; public class MediaProxyPluginFactory extends PlugInFactory { private Logger log; private Context context; private SystemAdministrationImplHome sysadminHome; private static MediaProxyPluginFactory instance = null; /** * protected constructor, * this is a factory which is created by * getInsance() */ protected MediaProxyPluginFactory() { this.log = Logger.getLogger(this.getClass()); try { context = new InitialContext(); sysadminHome = EjbHomeGetter.getSystemAdministrationHome(context); } catch (NamingException e) { log.error("Couldn't reinit context while activating EJB."); } } /** * returns a MediaProxyPluginFactory for * "production" of MediaProxyPlugins * * @return */ public static MediaProxyPluginFactory getInstance() { if (instance == null) { synchronized (MediaProxyPluginFactory.class) { if (instance == null) { instance = new MediaProxyPluginFactory(); } } } return instance; } /** * Creates a InputProxy for a given protocol. * * @param p0 * @return * @throws MediaProxyException */ public MediaProxyPlugin getInputProxy(Session session, MOIdentifier mOId, ProtocolId protocolId) throws MediaProxyException { String errorText = ""; PlugInIdentifier plugInId = null; MediaProxyPlugin plugin = null; // check parameter if (session == null) { errorText = "session is null - aborting."; log.error(errorText); throw new MediaProxyException(errorText); } else if (mOId == null) { errorText = "mOId is null - aborting."; log.error(errorText); throw new MediaProxyException(errorText); } else if (protocolId == null) { errorText = "protocolId is null - aborting."; log.error(errorText); throw new MediaProxyException(errorText); } else { log.debug("Parameter ok."); } //get a pluginId for the requested protocol plugInId = getPlugInId(protocolId, true); // get plugin, identified by id try { plugin = (MediaProxyPlugin) getPlugIn(plugInId); } catch (PlugInInstantiationException e) { errorText = "Couldn't get Plugin for plugInId='" + plugInId.getClassName() + "'."; log.error(errorText); throw new MediaProxyException(errorText, e); } //initialize the plugin plugin.init(session, mOId, protocolId, null); return plugin; } /** * Creates a OutputProxy for a given protocol. * * @param session * @param mOId * @param protocolId * @param formatId * @return * @throws MediaProxyException */ public MediaProxyPlugin getOutputProxy(Session session, MOIdentifier mOId, ProtocolId protocolId, FormatId fId) throws MediaProxyException { String errorText = ""; PlugInIdentifier plugInId = null; MediaProxyPlugin plugin = null; // check parameter if (session == null) { errorText = "session is null - aborting."; log.error(errorText); throw new MediaProxyException(errorText); } else if (mOId == null) { errorText = "mOId is null - aborting."; log.error(errorText); throw new MediaProxyException(errorText); } else if (protocolId == null) { errorText = "protocolId is null - aborting."; log.error(errorText); throw new MediaProxyException(errorText); } else if (fId == null) { errorText = "fd is null - aborting."; log.error(errorText); throw new MediaProxyException(errorText); } else { log.debug("Parameter ok."); } //get a pluginId for the requested protocol plugInId = getPlugInId(protocolId, false); // get plugin, identified by id try { plugin = (MediaProxyPlugin) getPlugIn(plugInId); } catch (PlugInInstantiationException e) { errorText = "Couldn't get Plugin for plugInId='" + plugInId.getClassName() + "'."; log.error(errorText); throw new MediaProxyException(errorText, e); } //initialize the plugin plugin.init(session, mOId, protocolId, fId); return plugin; } private PlugInIdentifier getPlugInId(ProtocolId protocolId, boolean isInput) throws MediaProxyException{ //ProtocolId.pId_RAW_SOCKET = multimonster.mediaproxy.plugin.RawSocketInputProxy //ProtocolId.pId_HTTP = multimonster.mediaproxy.plugin.HttpProxy SystemAdministrationImpl sysadmin = null; PlugInIdentifier plugInId; String errorText = ""; // trying to get SysAdminEJB try { sysadmin = EjbCreator.createSystemAdministration(sysadminHome, context); } catch (Exception e) { errorText = e.getMessage(); log.error(errorText); throw new MediaProxyException(errorText); } try { // ask sysadmin to get a pluginid plugInId = sysadmin.getProxyPlugInId(protocolId, isInput); sysadmin.remove(); } catch (RemoteException e) { errorText = e.getMessage(); log.error(errorText); throw new MediaProxyException(errorText); } catch (RemoveException e) { errorText = e.getMessage(); log.error(errorText); throw new MediaProxyException(errorText); } if (protocolId == null) { errorText = "Didn't get a Proxy for Protocol " + protocolId.getId() + "."; log.error(errorText); throw new MediaProxyException(errorText); } return plugInId; } }