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