/*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
* ORACLE 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 ) ;
}
}