Namespace of
an object. E.g. a property getter would be described as
Operation propertyGetter = new NamespaceOperation(
StandardOperation.GET,
StandardNamespace.PROPERTY);
They are often combined with NamedOperation, e.g. to express a
property getter for a property named "color", you would construct:
Operation colorPropertyGetter = new NamedOperation(
new NamespaceOperation(
StandardOperation.GET,
StandardNamespace.PROPERTY),
"color");
While NamespaceOperation can be constructed directly, it is often convenient
to use the Operation#withNamespace(Namespace) and Operation#withNamespaces(Namespace. factory
methods instead, e.g.:
Operation getElementOrPropertyEmpty =
StandardOperation.GET
.withNamespace(StandardNamespace.PROPERTY)
.named("color");
GET:PROPERTY|ELEMENT:color should be
interpreted as get the property named "color" on the object, but if the
property does not exist, then get the collection element named "color"
instead.
Operations with multiple namespaces are helpful in implementation of languages that
don't distinguish between one or more of the namespaces, or when expressing operations
against objects that can be considered both ordinary objects and collections, e.g. Java
java. objects. A GET:PROPERTY|ELEMENT:empty operation
against a Java map will always match
the java. property, but
GET:ELEMENT|PROPERTY:empty will actually match a map element with
key "empty" if the map contains that key, and only fall back to the
isEmpty() property getter if the map does not contain the key. If
the source language mandates this semantics, it can be easily achieved using
operations on multiple namespaces.
Even if the language itself doesn't distinguish between some of the
namespaces, it can be helpful to map different syntaxes to different namespace orderings.
E.g. the source expression obj.color could map to
GET:PROPERTY|ELEMENT|METHOD:color, but a different source
expression that looks like collection element access obj[key] could
be expressed instead as GET:ELEMENT|PROPERTY|METHOD in order to favor the
element semantics. Finally, if the retrieved value is subsequently called, then it makes sense
to bring METHOD to the front of the namespace list: the getter part of the
source expression obj.color() could be
GET:METHOD|PROPERTY|ELEMENT:color and the one for
obj[key]() could be GET:METHOD|ELEMENT|PROPERTY.
The base operation of a namespace operation can not itself be a namespace or named
operation, but rather one of simple operations such are elements of
StandardOperation. A namespace operation itself can serve as the base
operation of a named operation, though; a typical way to construct e.g. the
GET:ELEMENT|PROPERTY:empty from above would be:
Operation getElementOrPropertyEmpty = StandardOperation.GET
.withNamespaces(
StandardNamespace.ELEMENT,
StandardNamespace.PROPERTY)
.named("empty");
| Modifier and Type | Field and Description |
|---|---|
| private final Operation | |
| private final Namespace[] |
| Access | Constructor and Description |
|---|---|
| public | NamespaceOperation(final Operation
the base operation that operates on one or more namespaces. baseOperation, final Namespace... one or more namespaces this operation operates on. namespaces)Constructs a new namespace operation. |
| Modifier and Type | Method and Description |
|---|---|
| public boolean | |
| public static boolean | Returns: true if the if the passed operation is aNamespaceOperation,
its base operation equals the searched base operation, and contains a namespace
equal to the searched namespace.the operation. Must not be null. op, final Operation the base operation being searched for. Must not be null. baseOperation, final Namespace the namespace being searched for. Must not be null. namespace)Returns true if the specified operation is a |
| public boolean | Returns: true if this object is equal to the other one, false otherwise.the object to compare to obj)Overrides java. Returns true if the other object is also a namespace operation and their base operation and namespaces are equal. |
| public Operation | Returns: the base operation of this named operation.Returns the base operation of this named operation. |
| public static Operation | Returns: the base operation of the passed operation.the operation op)If the passed operation is a namespace operation, returns its
|
| public Namespace | Returns: the i-th namespace in this namespace operation.the namespace index i)Returns the i-th namespace in this namespace operation. |
| public int | Returns: the number of namespaces in this namespace operation.Returns the number of namespaces in this namespace operation. |
| public Namespace[] | Returns: the namespaces in this namespace operation.Returns the namespaces in this namespace operation. |
| public static Namespace[] | Returns: the namespaces of the passed operation.the operation op)If the passed operation is a namespace operation, returns its
|
| public int | |
| public String | Returns: the string representation of this namespace operation.Overrides java. Returns the string representation of this namespace operation. |
| baseOperation | back to summary |
|---|---|
| private final Operation baseOperation | |
| namespaces | back to summary |
|---|---|
| private final Namespace[] namespaces | |
| NamespaceOperation | back to summary |
|---|---|
| public NamespaceOperation(final Operation baseOperation, final Namespace... namespaces) Constructs a new namespace operation.
| |
| contains | back to summary |
|---|---|
| public boolean contains(final Namespace namespace) Returns true if this namespace operation contains a namespace equal to the specified namespace.
| |
| contains | back to summary |
|---|---|
| public static boolean contains(final Operation op, final Operation baseOperation, final Namespace namespace) Returns true if the specified operation is a
| |
| equals | back to summary |
|---|---|
| public boolean equals(final Object obj) Overrides java. Returns true if the other object is also a namespace operation and their base operation and namespaces are equal. | |
| getBaseOperation | back to summary |
|---|---|
| public Operation getBaseOperation() Returns the base operation of this named operation.
| |
| getBaseOperation | back to summary |
|---|---|
| public static Operation getBaseOperation(final Operation op) If the passed operation is a namespace operation, returns its
| |
| getNamespace | back to summary |
|---|---|
| public Namespace getNamespace(final int i) Returns the i-th namespace in this namespace operation.
| |
| getNamespaceCount | back to summary |
|---|---|
| public int getNamespaceCount() Returns the number of namespaces in this namespace operation.
| |
| getNamespaces | back to summary |
|---|---|
| public Namespace[] getNamespaces() Returns the namespaces in this namespace operation. The returned array is a copy and changes to it don't have effect on this object.
| |
| getNamespaces | back to summary |
|---|---|
| public static Namespace[] getNamespaces(final Operation op) If the passed operation is a namespace operation, returns its
| |
| hashCode | back to summary |
|---|---|
| public int hashCode() Overrides java. Returns the hash code of this namespace operation. Defined to be equal
to
| |
| toString | back to summary |
|---|---|
| public String toString() Overrides java. Returns the string representation of this namespace operation. Defined to
be the | |