Nombres
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.