package org.jacorb.orb.miop;
import org.jacorb.config.Configurable;
import org.jacorb.config.Configuration;
import org.jacorb.config.ConfigurationException;
import org.jacorb.orb.etf.FactoriesBase;
import org.jacorb.orb.etf.ProtocolAddressBase;
import org.jacorb.orb.iiop.IIOPAddress;
import org.omg.CORBA.BAD_PARAM;
import org.omg.ETF.Connection;
import org.omg.ETF.Listener;
import org.omg.ETF.Profile;
import org.omg.IOP.TAG_UIPMC;
import org.omg.IOP.TaggedComponent;
import org.omg.IOP.TaggedComponentSeqHolder;
import org.omg.IOP.TaggedProfileHolder;
/**
* Factories for MIOP ETF plugin. It is the entry point of the plugin.
*
* @author Alysson Neves Bessani
* @version 1.0
*/
public class MIOPFactories extends FactoriesBase implements Configurable
{
// the MIOP group listener for this ORB
private MIOPListener listener = null;
/**
* Return the correct type of connection
*/
protected Connection create_connection_internal ()
{
return new ClientMIOPConnection();
}
/**
* Return the correct type of address
*/
protected ProtocolAddressBase create_address_internal ()
{
return new IIOPAddress();
}
/**
* Configure this object.
*
* @param configuration the object configuration
* @throws ConfigurationException if any problem with the configuration is
* detected
*/
public void configure (Configuration configuration) throws ConfigurationException
{
this.configuration = configuration;
}
/**
* Return the correct type of listener
*/
public Listener create_listener_internal ()
{
if (listener == null)
{
listener = new MIOPListener();
}
return listener;
}
/**
* Demarshal a requested profile.
*
* @param taggedProfile the holder of the marshaled profile.
* @param taggedComponentSeq unused (can be null)
*
* @return the demarshaled miop profile.
*/
public Profile demarshal_profile (TaggedProfileHolder taggedProfile,
TaggedComponentSeqHolder taggedComponentSeq)
{
if (taggedProfile.value.tag != TAG_UIPMC.value)
{
throw new BAD_PARAM ("wrong profile for MIOP transport: tag = " + taggedProfile.value.tag);
}
MIOPProfile profile = new MIOPProfile (taggedProfile.value.profile_data);
configureResult (profile);
taggedComponentSeq.value = new TaggedComponent[0];
return profile;
}
/**
* Returns the UMIOP profile tag number.
*
* @return TAG_UIPMC.value
*/
public int profile_tag ()
{
return TAG_UIPMC.value;
}
/**
* Decodes a passed corbaloc(without corbaloc: part)
*
* @param corbaloc the string to be decoded
* @return the MIOP profile
*/
public Profile decode_corbaloc (String corbaloc)
{
if (corbaloc.toLowerCase ().startsWith ("miop"))
{
MIOPProfile profile = new MIOPProfile (corbaloc);
try
{
profile.configure (configuration);
}
catch (ConfigurationException ce)
{
throw new org.omg.CORBA.INTERNAL ("ConfigurationException: " + ce.getMessage ());
}
return profile;
}
else
{
return null;
}
}
}