package org.jacorb.orb.diop;
/*
* JacORB - a free Java ORB
*
* Copyright (C) 1999-2014 Gerald Brose / The JacORB Team.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
import org.jacorb.orb.iiop.IIOPProfile;
import org.omg.CORBA.INTERNAL;
import org.omg.ETF.Connection;
import org.omg.ETF.Listener;
import org.omg.ETF.Profile;
import org.omg.IOP.TaggedComponentSeqHolder;
import org.omg.IOP.TaggedProfileHolder;
import org.omg.RTCORBA.ProtocolProperties;
/**
* DIOP Factory
*
* Currently this is only used to allow DIOP IOR's to be decoded. Delegates
* to IIOPProfile.
*
* @author Nick Cross
*/
public class DIOPFactories extends org.omg.ETF._FactoriesLocalBase
{
/**
* <code>TAG_DIOP_UDP</code> is a constant for DIOP IORs. This is a TAO
* protocol for GIOP/UDP.
*/
public static final int TAG_DIOP_UDP = 0x54414f04;
/**
* <code>factory</code> is a static instance cache - as this is currently not
* cached within TransportManager::factoriesList
*/
private static DIOPFactories factory;
private DIOPFactories()
{
super();
// use factory method instead
}
/**
* <code>getDIOPFactory</code> returns the cached instance.
*/
public static DIOPFactories getDIOPFactory()
{
synchronized(DIOPFactories.class)
{
if (factory == null)
{
factory = new DIOPFactories();
}
return factory;
}
}
public Connection create_connection (ProtocolProperties props)
{
throw new INTERNAL ("DIOP Connection not implemented");
}
public Listener create_listener (ProtocolProperties props,
int stacksize,
short base_priority)
{
throw new INTERNAL ("DIOP Listener not implemented");
}
public Profile demarshal_profile (TaggedProfileHolder tagged_profile,
TaggedComponentSeqHolder components)
{
if (tagged_profile.value.tag != TAG_DIOP_UDP)
{
throw new org.omg.CORBA.BAD_PARAM
("wrong profile for DIOP transport, tag: "
+ tagged_profile.value.tag);
}
IIOPProfile result = new IIOPProfile(tagged_profile.value.profile_data);
components.value = result.getComponents().asArray();
return result;
}
public int profile_tag()
{
return TAG_DIOP_UDP;
}
public Profile decode_corbaloc (String corbaloc)
{
final int colon = corbaloc.indexOf (':');
final String token = corbaloc.substring (0,colon).toLowerCase();
final Profile result;
if (token.length() == 0 ||
"diop".equals(token))
{
result = new IIOPProfile(corbaloc);
}
else
{
result = null;
}
return result;
}
}