= ApplicationFeatureId
:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR  CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Value type representing a namespace, type or member.

This value is _Comparable_ , the implementation of which considers _#getSort() (feature) sort_ , _#getNamespace() namespace_ , _#getTypeSimpleName() type simple name_ and _#getLogicalMemberName() member-logical-name_ .

If the represented member is an _action_ , then _#getLogicalMemberName() member-logical-name_ must *not* include any parameter list or parentheses. Consequently method overloading is not supported.

If there is a member name clash involving an _action_ and an _association_ , then consequently any permissions defined automatically apply to both and one cannot separate these.

== API

[source,java]
.ApplicationFeatureId.java
----
class ApplicationFeatureId {
  public static final ApplicationFeatureId NAMESPACE_DEFAULT;
  ApplicationFeatureId fromIdentifier(Identifier identifier)
  ApplicationFeatureId newFeature(ApplicationFeatureSort featureSort, String qualifiedLogicalName)
  ApplicationFeatureId newFeature(String namespace, String logicalTypeSimpleName, String memberName)
  ApplicationFeatureId newNamespace(String namespace)
  ApplicationFeatureId newNamespace(LogicalType logicalType)     // <.>
  ApplicationFeatureId newType(String logicalTypeName)
  ApplicationFeatureId newType(LogicalType logicalType)
  ApplicationFeatureId newMember(LogicalType logicalType, String memberLogicalName)
  ApplicationFeatureId newMember(String logicalTypeName, String memberLogicalName)
  ApplicationFeatureId newMember(String fullyQualifiedLogicalName)
  String title()     // <.>
  ApplicationFeatureId getParentTypeFeatureId()     // <.>
  String getFullyQualifiedName()
  String getLogicalTypeName()
  ApplicationFeatureId getParentNamespaceFeatureId()     // <.>
  String stringify()
  ApplicationFeatureId parse(String stringified)     // <.>
  String asEncodedString()
  ApplicationFeatureId parseEncoded(String encodedString)     // <.>
  Can<ApplicationFeatureId> getPathIds()
  Can<ApplicationFeatureId> getParentFeatureIds()
  boolean contains(ApplicationFeatureId otherFeatureId)
  int compareTo(ApplicationFeatureId other)
  boolean equals(Object o)
  int hashCode()
  String toString()
  ApplicationFeatureId withNamespace(String namespace)     // <.>
  ApplicationFeatureId withLogicalTypeName(String logicalTypeName)     // <.>
}
----

<.> xref:#newNamespace_LogicalType[newNamespace(LogicalType)]
+
--
Creates a new xref:refguide:applib:index/services/appfeat/ApplicationFeatureId.adoc[ApplicationFeatureId] based on the _LogicalType#getNamespace() namespace_ of the provided xref:refguide:applib:index/id/LogicalType.adoc[LogicalType] .
--
<.> xref:#title_[title()]
+
--
having a title() method (rather than using @Title annotation) is necessary as a workaround to be able to use wrapperFactory#unwrap(...) method, which is otherwise broken in Causeway 1.6.0
--
<.> xref:#getParentTypeFeatureId_[getParentTypeFeatureId()]
+
--
The xref:refguide:applib:index/services/appfeat/ApplicationFeatureId.adoc[ApplicationFeatureId] of the member's logical type.
--
<.> xref:#getParentNamespaceFeatureId_[getParentNamespaceFeatureId()]
+
--
The xref:refguide:applib:index/services/appfeat/ApplicationFeatureId.adoc[ApplicationFeatureId] of the parent package of this class or package.
--
<.> xref:#parse_String[parse(String)]
+
--
Round-trip with _#stringify()_
--
<.> xref:#parseEncoded_String[parseEncoded(String)]
+
--
Round-trip with _#asEncodedString()_
--
<.> xref:#withNamespace_String[withNamespace(String)]
+
--
Returns a new instance that is a clone of this, except for the namespace, which is taken from the argument.
--
<.> xref:#withLogicalTypeName_String[withLogicalTypeName(String)]
+
--
Returns a new instance that is a clone of this feature (expected to be a _ApplicationFeatureSort#MEMBER member_ or _ApplicationFeatureSort#TYPE type_ ), but with the logicalTypeName taken from the argument.
--

== Members

[#newNamespace_LogicalType]
=== newNamespace(LogicalType)

Creates a new xref:refguide:applib:index/services/appfeat/ApplicationFeatureId.adoc[ApplicationFeatureId] based on the _LogicalType#getNamespace() namespace_ of the provided xref:refguide:applib:index/id/LogicalType.adoc[LogicalType] .

[#title_]
=== title()

having a title() method (rather than using @Title annotation) is necessary as a workaround to be able to use wrapperFactory#unwrap(...) method, which is otherwise broken in Causeway 1.6.0

[#getParentTypeFeatureId_]
=== getParentTypeFeatureId()

The xref:refguide:applib:index/services/appfeat/ApplicationFeatureId.adoc[ApplicationFeatureId] of the member's logical type.

[#getParentNamespaceFeatureId_]
=== getParentNamespaceFeatureId()

The xref:refguide:applib:index/services/appfeat/ApplicationFeatureId.adoc[ApplicationFeatureId] of the parent package of this class or package.

[#parse_String]
=== parse(String)

Round-trip with _#stringify()_

[#parseEncoded_String]
=== parseEncoded(String)

Round-trip with _#asEncodedString()_

[#withNamespace_String]
=== withNamespace(String)

Returns a new instance that is a clone of this, except for the namespace, which is taken from the argument.

[#withLogicalTypeName_String]
=== withLogicalTypeName(String)

Returns a new instance that is a clone of this feature (expected to be a _ApplicationFeatureSort#MEMBER member_ or _ApplicationFeatureSort#TYPE type_ ), but with the logicalTypeName taken from the argument.

If this feature is instead a _ApplicationFeatureSort#NAMESPACE namespace_ then the feature is returned unchanged.

Note: if the feature is a _ApplicationFeatureSort#TYPE type_ , then this method will be the same as if _ApplicationFeatureId#newType(String)_ had been used to create a new instance. The method exists though to provide a standardized way of transforming xref:refguide:applib:index/services/appfeat/ApplicationFeatureId.adoc[ApplicationFeatureId] s where possible, without the caller having to worry as to what _#getSort() sort_ of feature it is dealing with.
