INamed.java
/*
* SPDX-FileCopyrightText: none
* SPDX-License-Identifier: CC0-1.0
*/
package gov.nist.secauto.metaschema.core.model;
import javax.xml.XMLConstants;
import javax.xml.namespace.QName;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
public interface INamed {
/**
* Retrieve the name of the model element.
*
* @return the name
*/
@NonNull
String getName();
/**
* Retrieve the name to use for the model element, instead of the name.
*
* @return the use name or {@code null} if no use name is defined
*/
// from INamedModelElement
@Nullable
default String getUseName() {
// no use-name by default
return null;
}
/**
* Get the name to use based on the provided names. This method will return the
* use name provided by {@link #getUseName()} if the call is not {@code null},
* and fall back to the name provided by {@link #getName()} otherwise. This is
* the model name to use for the for an instance where the instance is
* referenced.
*
* @return the use name if available, or the name if not
*
* @see #getUseName()
* @see #getName()
*/
// from INamedModelElement
@NonNull
default String getEffectiveName() {
@Nullable
String useName = getUseName();
return useName == null ? getName() : useName;
}
/**
* Retrieve the XML namespace for this instance.
* <p>
* Multiple calls to this method are expected to produce the same, deterministic
* return value.
*
* @return the XML namespace or {@code null} if no namespace is defined
*/
@Nullable
default String getXmlNamespace() {
return getXmlQName().getNamespaceURI();
}
/**
* Get the unique XML qualified name for this model element.
* <p>
* The qualified name is considered to be unique relative to all sibling
* elements. For a flag, this name will be unique among all flag instances on
* the same field or assembly definition. For a field or assembly, this name
* will be unique among all sibling field or assembly instances on the same
* assembly definition.
* <p>
* Multiple calls to this method are expected to produce the same, deterministic
* return value.
* <p>
* If {@link #getXmlNamespace()} is {@code null}, the the resulting QName will
* have the namespace {@link XMLConstants#NULL_NS_URI}.
* <p>
* This implementation may be overridden by implementation that cache the QName
* or provide for a more efficient method for QName creation.
*
* @return the XML qualified name, or {@code null} if there isn't one
*/
// REFACTOR: rename to getQName
@NonNull
QName getXmlQName();
/**
* Retrieve the index value to use for binary naming.
*
* @return the name index or {@code null} if no name index is defined
*/
// from INamedModelElement
@Nullable
default Integer getIndex() {
// no index by default
return null;
}
/**
* Retrieve the index value to use for binary naming, instead of the name.
*
* @return the use name index or {@code null} if no use name index is defined
*/
// from INamedModelElement
@Nullable
default Integer getUseIndex() {
// no use-name index by default
return null;
}
/**
* Get the index value to use for binary naming based on the provided index
* values.
* <p>
* This method will return the use index value provided by
* {@link #getUseIndex()} if the call result is not {@code null}, and fall back
* to the index value provided by {@link #getIndex()} otherwise.
*
* @return the index value if available, or {@code null} otherwise
*/
// from INamedModelElement
@Nullable
default Integer getEffectiveIndex() {
@Nullable
Integer useIndex = getUseIndex();
return useIndex == null ? getIndex() : useIndex;
}
}