/*
* 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.
*
*/
package org.jacorb.imr;
import java.util.List;
import org.jacorb.imr.RegistrationPackage.DuplicatePOAName;
import org.jacorb.imr.RegistrationPackage.IllegalPOAName;
import org.jacorb.orb.iiop.IIOPAddress;
import org.omg.ETF.Profile;
import org.omg.CORBA.INTERNAL;
/**
* @author Nicolas Noffke
*/
public class ImRAccessImpl
implements org.jacorb.orb.ImRAccess
{
private Registration reg = null;
private ImRInfo info = null;
/**
* <code>ImRAccessImpl</code> private; use the static connect method.
*/
private ImRAccessImpl () {
// use the static connect method
}
/**
* <code>connect</code> resolves the IMR and returns a new ImRAccessImpl.
*
* @param orb an <code>org.omg.CORBA.ORB</code> value
* @return an <code>ImRAccessImpl</code> value
*/
public static ImRAccessImpl connect(org.omg.CORBA.ORB orb)
{
final ImRAccessImpl result = new ImRAccessImpl();
try
{
result.reg = RegistrationHelper.narrow( orb.resolve_initial_references("ImplementationRepository"));
}
catch( org.omg.CORBA.ORBPackage.InvalidName e)
{
throw new INTERNAL("unable to resolve ImplementationRepository: " + e.toString());
}
boolean non_exist = true;
if (result.reg != null)
{
try
{
non_exist = result.reg._non_existent();
}
catch (org.omg.CORBA.SystemException e)
{
non_exist = true;
}
}
if (non_exist)
{
throw new INTERNAL("Unable to resolve reference to ImR");
}
return result;
}
public org.jacorb.orb.etf.ProtocolAddressBase getImRAddress()
{
if( info == null )
{
info = reg.get_imr_info();
}
return new IIOPAddress (info.host, info.port);
}
public String getImRHost()
{
if( info == null )
{
info = reg.get_imr_info();
}
return info.host;
}
public int getImRPort()
{
if( info == null )
{
info = reg.get_imr_info();
}
return info.port;
}
public void registerPOA( String name,
String server,
org.jacorb.orb.etf.ProtocolAddressBase address)
throws INTERNAL
{
if (address instanceof IIOPAddress)
{
registerPOA (name, server,
((IIOPAddress)address).getHostName(),
((IIOPAddress)address).getPort());
}
else
{
throw new INTERNAL("IMR only supports IIOP based POAs");
}
}
public void registerPOA( String name,
String server,
String host,
int port)
throws INTERNAL
{
try
{
reg.register_poa(name, server, host, port );
}
catch( DuplicatePOAName e )
{
throw new INTERNAL( "A server with the same combination of ImplName/POA-Name (" +
name +
") is already registered and listed as active at the imr: " + e.toString() );
}
catch( IllegalPOAName e )
{
throw new INTERNAL( "The ImR replied that the POA name >>" +
e.name + "<< is illegal: " + e.toString() );
}
catch( UnknownServerName e )
{
throw new INTERNAL( "The ImR replied that the server name >>" +
e.name + "<< is unknown: " + e.toString());
}
}
public void registerPOA( org.jacorb.orb.ORB orb,
org.jacorb.poa.POA poa,
org.jacorb.orb.etf.ProtocolAddressBase address,
String implname)
throws INTERNAL
{
}
public void setServerDown( String name )
throws INTERNAL
{
try
{
reg.set_server_down( name );
}
catch(UnknownServerName e)
{
throw new INTERNAL( "The ImR replied that a server with name " +
name + " is unknown: " + e.toString() );
}
}
public void setServerDown( org.jacorb.orb.ORB orb,
org.jacorb.poa.POA poa,
String implname )
throws INTERNAL
{
}
public String getImRCorbaloc()
{
return null;
}
public List<Profile> getImRProfiles()
{
return null;
}
}