/* * @(#)CorbanameURL.java 1.7 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.naming.namingutil; import com.sun.corba.se.impl.logging.NamingSystemException; import com.sun.corba.se.spi.logging.CORBALogDomains; /** * The corbaname: URL definitions from the -ORBInitDef and -ORBDefaultInitDef's * will be stored in this object. This object is capable of storing CorbaLoc * profiles as defined in the CorbaName grammer. * * @Author Hemanth */ public class CorbanameURL extends INSURLBase { private static NamingSystemException wrapper = NamingSystemException.get( CORBALogDomains.NAMING ) ; /** * This constructor takes a corbaname: url with 'corbaname:' prefix stripped * and initializes all the variables accordingly. If there are any parsing * errors then BAD_PARAM exception is raised. */ public CorbanameURL( String aURL ) { String url = aURL; // First Clean the URL Escapes if there are any try { url = Utility.cleanEscapes( url ); } catch( Exception e ) { badAddress( e ); } int delimiterIndex = url.indexOf( '#' ); String corbalocString = null; if( delimiterIndex != -1 ) { // Append corbaloc: for Grammar check, Get the string between // corbaname: and # which forms the corbaloc string corbalocString = "corbaloc:" + url.substring( 0, delimiterIndex ) + "/"; } else { // Build a corbaloc string to check the grammar. // 10 is the length of corbaname: corbalocString = "corbaloc:" + url.substring( 0, url.length() ); // If the string doesnot end with a / then add one to end the // URL correctly if( corbalocString.endsWith( "/" ) != true ) { corbalocString = corbalocString + "/"; } } try { // Check the corbaloc grammar and set the returned corbaloc // object to the CorbaName Object INSURL insURL = INSURLHandler.getINSURLHandler().parseURL( corbalocString ); copyINSURL( insURL ); // String after '#' is the Stringified name used to resolve // the Object reference from the rootnaming context. If // the String is null then the Root Naming context is passed // back if((delimiterIndex > -1) && (delimiterIndex < (aURL.length() - 1))) { int start = delimiterIndex + 1 ; String result = url.substring(start) ; theStringifiedName = result ; } } catch( Exception e ) { badAddress( e ); } } /** * A Utility method to throw BAD_PARAM exception. */ private void badAddress( java.lang.Throwable e ) throws org.omg.CORBA.BAD_PARAM { throw wrapper.insBadAddress( e ) ; } /** * A Utility method to copy all the variables from CorbalocURL object to * this instance. */ private void copyINSURL( INSURL url ) { rirFlag = url.getRIRFlag( ); theEndpointInfo = (java.util.ArrayList) url.getEndpointInfo( ); theKeyString = url.getKeyString( ); theStringifiedName = url.getStringifiedName( ); } public boolean isCorbanameURL( ) { return true; } }