/* * @(#)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 ) ; } }