- /*
- * @(#)ServiceContextRegistry.java 1.17 04/06/21
- *
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- */
-
- package com.sun.corba.se.spi.servicecontext;
-
- import org.omg.CORBA.BAD_PARAM;
- import java.util.Vector ;
- import java.util.Enumeration ;
- import com.sun.corba.se.spi.servicecontext.ServiceContext ;
- import com.sun.corba.se.spi.servicecontext.ServiceContextData ;
- import com.sun.corba.se.spi.orb.ORB ;
- import com.sun.corba.se.impl.orbutil.ORBUtility ;
-
- public class ServiceContextRegistry {
- private ORB orb ;
- private Vector scCollection ;
-
- private void dprint( String msg )
- {
- ORBUtility.dprint( this, msg ) ;
- }
-
- public ServiceContextRegistry( ORB orb )
- {
- scCollection = new Vector() ;
- this.orb = orb ;
- }
-
- /** Register the ServiceContext class so that it will be recognized
- * by the read method.
- * Class cls must have the following properties:
- * <ul>
- * <li>It must derive from com.sun.corba.se.spi.servicecontext.ServiceContext.</li>
- * <li>It must have a public static final int SERVICE_CONTEXT_ID
- * member.</li>
- * <li>It must implement a constructor that takes a
- * org.omg.CORBA_2_3.portable.InputStream argument.</li>
- * </ul>
- */
- public void register( Class cls )
- {
- if (ORB.ORBInitDebug)
- dprint( "Registering service context class " + cls ) ;
-
- ServiceContextData scd = new ServiceContextData( cls ) ;
-
- if (findServiceContextData(scd.getId()) == null)
- scCollection.addElement( scd ) ;
- else
- throw new BAD_PARAM( "Tried to register duplicate service context" ) ;
- }
-
- public ServiceContextData findServiceContextData( int scId )
- {
- if (ORB.ORBInitDebug)
- dprint( "Searching registry for service context id " + scId ) ;
-
- Enumeration enumeration = scCollection.elements() ;
- while (enumeration.hasMoreElements()) {
- ServiceContextData scd =
- (ServiceContextData)(enumeration.nextElement()) ;
- if (scd.getId() == scId) {
- if (ORB.ORBInitDebug)
- dprint( "Service context data found: " + scd ) ;
-
- return scd ;
- }
- }
-
- if (ORB.ORBInitDebug)
- dprint( "Service context data not found" ) ;
-
- return null ;
- }
- }