/*
* @(#)IdentifiableFactoryFinderBase.java 1.4 03/12/19
*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.sun.corba.se.impl.ior ;
import org.omg.CORBA_2_3.portable.InputStream ;
import java.util.Map ;
import java.util.HashMap ;
import com.sun.corba.se.spi.orb.ORB ;
import com.sun.corba.se.spi.ior.Identifiable ;
import com.sun.corba.se.spi.ior.IdentifiableFactory ;
import com.sun.corba.se.spi.ior.IdentifiableFactoryFinder ;
import com.sun.corba.se.spi.logging.CORBALogDomains ;
import com.sun.corba.se.impl.logging.IORSystemException ;
public abstract class IdentifiableFactoryFinderBase implements
IdentifiableFactoryFinder
{
private ORB orb ;
private Map map ;
protected IORSystemException wrapper ;
protected IdentifiableFactoryFinderBase( ORB orb )
{
map = new HashMap() ;
this.orb = orb ;
wrapper = IORSystemException.get( orb,
CORBALogDomains.OA_IOR ) ;
}
protected IdentifiableFactory getFactory(int id)
{
Integer ident = new Integer( id ) ;
IdentifiableFactory factory = (IdentifiableFactory)(map.get(
ident ) ) ;
return factory ;
}
public abstract Identifiable handleMissingFactory( int id, InputStream is ) ;
public Identifiable create(int id, InputStream is)
{
IdentifiableFactory factory = getFactory( id ) ;
if (factory != null)
return factory.create( is ) ;
else
return handleMissingFactory( id, is ) ;
}
public void registerFactory(IdentifiableFactory factory)
{
Integer ident = new Integer( factory.getId() ) ;
map.put( ident, factory ) ;
}
}
|