Casi todos los m�todos del interface Context deben procesar nombres. Por consistencia, deber�amos usar el mismo patr�n en cada m�todo que procese nombres. Una forma de conseguir esta conveniencia es definir y utilizar m�todos de utilidad para procesar el nombre de entrada. Aqu� damos dos ejemplos, uno para una implementaci�n de contexto de un espacio de nombres plano y otro para una implementaci�n de contexto de un espacio de nombres en forma de �rbol. Si una implementaci�n de contexto soporta un espacio de nombre plano o en forma de �rbol est� determindo por el servicio de nombres/directorio subyacente o por los requerimientos del proveedor de servicio.
Como se recomend� en la lecci�n Las Reglas de Fondo , para �mbos ejemplos, cada m�todo del interface Context que acepta un nombre java.lang.String est� definido simplemente para llamar a su compa�ero que acepta un Name. El resto de esta explicaci�n se enfoca en tratar los nombres estructurados.
�Un Ejemplo de Espacio de Nombres Plano
El primer ejemplo implementa un espacio de nombres plano y no soporta federaci�n. Los m�todos que aceptan un Name usan el siguiente m�todo de utilidad para determinar los componentes del nombre que deben ser procesados:
protected String getMyComponents(Name name) throws NamingException {
if (name instanceof CompositeName) {
if (name.size() > 1) {
throw new InvalidNameException(name.toString() +
" has more components than namespace can handle");
}
return name.get(0);
} else {
// A compound name
return name.toString();
}
}
Como el contexto no soporta federaci�n, acepta s�lo nombres mixtos de un s�lo componente o nombres compuestos. Si recibe un nombre mixto multi-componente, lanza una InvalidNameException.
�Un Espacio de Nombres en Forma de �rbol
El segundo ejemplo implementa un espacio de nombres con forma de �rbol y no soporta federaci�n. Los m�todos que aceptan un Name usan el siguiente m�todo de utilidad para determinar los componentes del nombre que deber�an ser procesados:
protected Name getMyComponents(Name name) throws NamingException {
if (name instanceof CompositeName) {
if (name.size() > 1) {
throw new InvalidNameException(name.toString() +
" has more components than namespace can handle");
}
// Turn component that belongs to you into a compound name
return myParser.parse(name.get(0));
} else {
// Already parsed
return name;
}
}
Al contrario que en el ejemplo plano, este m�todo devuelve un Name que representa un nombre compuesto estructurado en lugar de un java.lang.String. Cuando este m�todo obtiene un CompositeName, convierte el primer componente en un nombre compuesto y lo devuelve.