| The Essential Components

## More Names

> The `Context` interface contains two name-related methods: `Context.getNameInNamespace()` and `Context.composeName()`. They allow the API user to manipulate names with respect to a context.

> #### Fully Qualified Names

> The API user uses `Context.getNameInNamespace()` to get a `Context` instance's fully qualified name within its namespace. The definition of this method depends on the underlying naming/directory service. In an actual implementation, this method might access the underlying naming/directory service or use bookkeeping information stored in the `Context` instance to generate an answer.

> The hierarchical example maintains a back pointer to determine the fully qualified name of a context. Here is its `getNameInNamespace()` definition.

> >     public String getNameInNamespace() throws NamingException {
> >         HierCtx ancestor = parent;

> >         // No ancestor; at root of namespace
> >         if (ancestor == null) {
> >             return "";
> >         }

> >         Name name = myParser.parse("");
> >         name.add(myAtomicName);

> >         // Get the parent's names
> >         while (ancestor != null && ancestor.myAtomicName != null) {
> >             name.add(0, ancestor.myAtomicName);
> >     	ancestor = ancestor.parent;
> >         }

> >         return name.toString();
> >     }

> #### Compose Name

> The API user uses `Context.composeName()` to compose names that span possibly multiple namespaces. The What's in a Name? lesson describes this in more detail.

> Because the hierarchical namespace example does not support federation, its `composeName()` name deals only with compound names. Here is its definition.

> >     public Name composeName(Name name, Name prefix) throws NamingException {
> >         Name result;

> >         // Both are compound names; compose using compound name rules
> >         if (!(name instanceof CompositeName) &&
> >             !(prefix instanceof CompositeName)) {
> >             result = (Name)(prefix.clone());
> >     	result.addAll(name);
> >     	return new CompositeName().add(result.toString());
> >         }

> >         // Simplistic implementation; do not support federation
> >         throw new OperationNotSupportedException(
> >     	"Do not support composing composite names");
> >     }

| The Essential Components