- /*
- * @(#)ObjectKeyTemplateBase.java 1.16 04/03/01
- *
- * 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 java.util.Iterator ;
-
- import org.omg.CORBA_2_3.portable.InputStream ;
- import org.omg.CORBA_2_3.portable.OutputStream ;
-
- import com.sun.corba.se.spi.protocol.CorbaServerRequestDispatcher ;
-
- import com.sun.corba.se.spi.ior.ObjectId ;
- import com.sun.corba.se.spi.ior.ObjectAdapterId ;
- import com.sun.corba.se.spi.ior.ObjectKeyTemplate ;
-
- import com.sun.corba.se.spi.orb.ORB ;
- import com.sun.corba.se.spi.orb.ORBVersion ;
-
- import com.sun.corba.se.spi.logging.CORBALogDomains ;
-
-
- import com.sun.corba.se.impl.encoding.EncapsOutputStream ;
-
- import com.sun.corba.se.impl.logging.IORSystemException ;
-
-
- /**
- * @author
- */
- public abstract class ObjectKeyTemplateBase implements ObjectKeyTemplate
- {
- // Fixed constants for Java IDL object key template forms
- public static final String JIDL_ORB_ID = "" ;
- private static final String[] JIDL_OAID_STRINGS = { "TransientObjectAdapter" } ;
- public static final ObjectAdapterId JIDL_OAID = new ObjectAdapterIdArray( JIDL_OAID_STRINGS ) ;
-
- private ORB orb ;
- protected IORSystemException wrapper ;
- private ORBVersion version ;
- private int magic ;
- private int scid ;
- private int serverid ;
- private String orbid ;
- private ObjectAdapterId oaid ;
-
- private byte[] adapterId ;
-
- public byte[] getAdapterId()
- {
- return (byte[])(adapterId.clone()) ;
- }
-
- private byte[] computeAdapterId()
- {
- // write out serverid, orbid, oaid
- ByteBuffer buff = new ByteBuffer() ;
-
- buff.append( getServerId() ) ;
- buff.append( orbid ) ;
-
- buff.append( oaid.getNumLevels() ) ;
- Iterator iter = oaid.iterator() ;
- while (iter.hasNext()) {
- String comp = (String)(iter.next()) ;
- buff.append( comp ) ;
- }
-
- buff.trimToSize() ;
-
- return buff.toArray() ;
- }
-
- public ObjectKeyTemplateBase( ORB orb, int magic, int scid, int serverid,
- String orbid, ObjectAdapterId oaid )
- {
- this.orb = orb ;
- this.wrapper = IORSystemException.get( orb,
- CORBALogDomains.OA_IOR ) ;
- this.magic = magic ;
- this.scid = scid ;
- this.serverid = serverid ;
- this.orbid = orbid ;
- this.oaid = oaid ;
-
- adapterId = computeAdapterId() ;
- }
-
- public boolean equals( Object obj )
- {
- if (!(obj instanceof ObjectKeyTemplateBase))
- return false ;
-
- ObjectKeyTemplateBase other = (ObjectKeyTemplateBase)obj ;
-
- return (magic == other.magic) && (scid == other.scid) &&
- (serverid == other.serverid) && (version.equals( other.version ) &&
- orbid.equals( other.orbid ) && oaid.equals( other.oaid )) ;
- }
-
- public int hashCode()
- {
- int result = 17 ;
- result = 37*result + magic ;
- result = 37*result + scid ;
- result = 37*result + serverid ;
- result = 37*result + version.hashCode() ;
- result = 37*result + orbid.hashCode() ;
- result = 37*result + oaid.hashCode() ;
- return result ;
- }
-
- public int getSubcontractId()
- {
- return scid ;
- }
-
- public int getServerId()
- {
- return serverid ;
- }
-
- public String getORBId()
- {
- return orbid ;
- }
-
- public ObjectAdapterId getObjectAdapterId()
- {
- return oaid ;
- }
-
- public void write(ObjectId objectId, OutputStream os)
- {
- writeTemplate( os ) ;
- objectId.write( os ) ;
- }
-
- public void write( OutputStream os )
- {
- writeTemplate( os ) ;
- }
-
- abstract protected void writeTemplate( OutputStream os ) ;
-
- protected int getMagic()
- {
- return magic ;
- }
-
- // All subclasses should set the version in their constructors.
- // Public so it can be used in a white-box test.
- public void setORBVersion( ORBVersion version )
- {
- this.version = version ;
- }
-
- public ORBVersion getORBVersion()
- {
- return version ;
- }
-
- protected byte[] readObjectKey( InputStream is )
- {
- int len = is.read_long() ;
- byte[] result = new byte[len] ;
- is.read_octet_array( result, 0, len ) ;
- return result ;
- }
-
- public CorbaServerRequestDispatcher getServerRequestDispatcher( ORB orb, ObjectId id )
- {
- return orb.getRequestDispatcherRegistry().getServerRequestDispatcher( scid ) ;
- }
- }