- All Implemented Interfaces:
- Operation
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");
 
 Operations on multiple namespaces
If multiple namespaces are specified, the namespaces are treated as alternatives to each other in order of preference. The semantics of such operation is "first applicable". That is, a composite ofGET: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
 Map objects. A GET:PROPERTY|ELEMENT:empty operation
 against a Java map will always match
 the Map.isEmpty() 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");
 - 
Constructor SummaryConstructorsConstructorDescriptionNamespaceOperation(Operation baseOperation, Namespace... namespaces) Constructs a new namespace operation.
- 
Method SummaryModifier and TypeMethodDescriptionbooleanReturns true if this namespace operation contains a namespace equal to the specified namespace.static booleanReturns true if the specified operation is aNamespaceOperationand its base operation is equal to the specified operation, and it contains the specified namespace.booleanReturns true if the other object is also a namespace operation and their base operation and namespaces are equal.Returns the base operation of this named operation.static OperationIf the passed operation is a namespace operation, returns itsgetBaseOperation(), otherwise returns the operation as is.getNamespace(int i) Returns the i-th namespace in this namespace operation.intReturns the number of namespaces in this namespace operation.Returns the namespaces in this namespace operation.static Namespace[]If the passed operation is a namespace operation, returns itsgetNamespaces(), otherwise returns an empty array.inthashCode()Returns the hash code of this namespace operation.toString()Returns the string representation of this namespace operation.Methods declared in class java.lang.Objectclone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods declared in interface jdk.dynalink.Operationnamed, withNamespace, withNamespaces
- 
Constructor Details- 
NamespaceOperationConstructs a new namespace operation.- Parameters:
- baseOperation- the base operation that operates on one or more namespaces.
- namespaces- one or more namespaces this operation operates on.
- Throws:
- IllegalArgumentException- if less than one namespace is specified, or the base operation is itself a- NamespaceOperationor a- NamedOperation.
- NullPointerException- if either the- namespacesarray or any of its elements are- null, or if- baseOperationis- null.
 
 
- 
- 
Method Details- 
getBaseOperationReturns the base operation of this named operation.- Returns:
- the base operation of this named operation.
 
- 
getNamespacesReturns the namespaces in this namespace operation. The returned array is a copy and changes to it don't have effect on this object.- Returns:
- the namespaces in this namespace operation.
 
- 
getNamespaceCountpublic int getNamespaceCount()Returns the number of namespaces in this namespace operation.- Returns:
- the number of namespaces in this namespace operation.
 
- 
getNamespaceReturns the i-th namespace in this namespace operation.- Parameters:
- i- the namespace index
- Returns:
- the i-th namespace in this namespace operation.
- Throws:
- IndexOutOfBoundsException- if the index is out of range.
 
- 
containsReturns true if this namespace operation contains a namespace equal to the specified namespace.- Parameters:
- namespace- the namespace being searched for. Must not be null.
- Returns:
- true if the if this namespace operation contains a namespace equal to the specified namespace.
 
- 
equalsReturns true if the other object is also a namespace operation and their base operation and namespaces are equal.
- 
hashCodepublic int hashCode()Returns the hash code of this namespace operation. Defined to be equal tobaseOperation.hashCode() + 31 * Arrays.hashCode(namespaces).
- 
toStringReturns the string representation of this namespace operation. Defined to be thetoStringof its base operation, followed by a colon character, followed with the list of its namespaces separated with the vertical line character (e.g."GET:PROPERTY|ELEMENT").
- 
getBaseOperationIf the passed operation is a namespace operation, returns itsgetBaseOperation(), otherwise returns the operation as is.- Parameters:
- op- the operation
- Returns:
- the base operation of the passed operation.
 
- 
getNamespacesIf the passed operation is a namespace operation, returns itsgetNamespaces(), otherwise returns an empty array.- Parameters:
- op- the operation
- Returns:
- the namespaces of the passed operation.
 
- 
containsReturns true if the specified operation is aNamespaceOperationand its base operation is equal to the specified operation, and it contains the specified namespace. If it is not aNamespaceOperation, then it returns false.- Parameters:
- op- the operation. Must not be null.
- baseOperation- the base operation being searched for. Must not be null.
- namespace- the namespace being searched for. Must not be null.
- Returns:
- true if the if the passed operation is a NamespaceOperation, its base operation equals the searched base operation, and contains a namespace equal to the searched namespace.
 
 
-