diff --git a/core/metaschema b/core/metaschema index e54d01d0a..88e050a9e 160000 --- a/core/metaschema +++ b/core/metaschema @@ -1 +1 @@ -Subproject commit e54d01d0a1332ed792c57b794ed8a7dbdee16a9d +Subproject commit 88e050a9e2b1ed7c158f35f4f5468e01e0e76d88 diff --git a/core/src/main/java/gov/nist/secauto/metaschema/core/model/IAssemblyDefinition.java b/core/src/main/java/gov/nist/secauto/metaschema/core/model/IAssemblyDefinition.java index fd24a38d6..4d0d07381 100644 --- a/core/src/main/java/gov/nist/secauto/metaschema/core/model/IAssemblyDefinition.java +++ b/core/src/main/java/gov/nist/secauto/metaschema/core/model/IAssemblyDefinition.java @@ -49,6 +49,15 @@ public interface IAssemblyDefinition */ String getRootName(); + /** + * Get the root index to use for binary data, if this assembly is a top-level + * root. + * + * @return the root index if provided and this assembly is a top-level root, or + * {@code null} otherwise + */ + Integer getRootIndex(); + /** * Get the XML qualified name to use in XML as the root element. * diff --git a/core/src/main/java/gov/nist/secauto/metaschema/core/model/INamedInstance.java b/core/src/main/java/gov/nist/secauto/metaschema/core/model/INamedInstance.java index 5117c97df..0e04cd093 100644 --- a/core/src/main/java/gov/nist/secauto/metaschema/core/model/INamedInstance.java +++ b/core/src/main/java/gov/nist/secauto/metaschema/core/model/INamedInstance.java @@ -31,6 +31,7 @@ import javax.xml.namespace.QName; import edu.umd.cs.findbugs.annotations.NonNull; +import edu.umd.cs.findbugs.annotations.Nullable; /** * This marker interface indicates that the instance has a flag, field, or @@ -104,6 +105,12 @@ default String toCoordinates() { definition.isInline() ? 0 : definition.hashCode()); } + @Override + default Integer getIndex() { + // does not have an index + return null; + } + @Override @NonNull default String getEffectiveName() { @@ -116,6 +123,18 @@ default String getEffectiveName() { return result; } + @Override + @Nullable + default Integer getEffectiveIndex() { + Integer result = getUseIndex(); + if (result == null) { + // fall back to the definition + IDefinition def = getDefinition(); + result = def.getEffectiveIndex(); + } + return result; + } + @Override default String getEffectiveFormalName() { String result = getFormalName(); diff --git a/core/src/main/java/gov/nist/secauto/metaschema/core/model/INamedModelElement.java b/core/src/main/java/gov/nist/secauto/metaschema/core/model/INamedModelElement.java index 3e670ed2d..41516c373 100644 --- a/core/src/main/java/gov/nist/secauto/metaschema/core/model/INamedModelElement.java +++ b/core/src/main/java/gov/nist/secauto/metaschema/core/model/INamedModelElement.java @@ -155,6 +155,22 @@ default String getJsonName() { return getEffectiveName(); } + /** + * 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 + */ + @Nullable + String getUseName(); + /** * 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}, @@ -174,18 +190,24 @@ default String getEffectiveName() { } /** - * Retrieve the name of the model element. + * Retrieve the index value to use for binary naming. * - * @return the name + * @return the name index or {@code null} if no name index is defined */ - @NonNull - String getName(); + @Nullable + Integer getIndex(); /** - * Retrieve the name to use for the model element, instead of the name. + * Retrieve the index value to use for binary naming, instead of the name. * - * @return the use name or {@code null} if no use name is defined + * @return the use name index or {@code null} if no use name index is defined */ @Nullable - String getUseName(); + Integer getUseIndex(); + + @Nullable + default Integer getEffectiveIndex() { + @Nullable Integer useIndex = getUseIndex(); + return useIndex == null ? getIndex() : useIndex; + } } diff --git a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlAssemblyInstance.java b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlAssemblyInstance.java index 4cf6647bb..8ecb88ae3 100644 --- a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlAssemblyInstance.java +++ b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlAssemblyInstance.java @@ -115,7 +115,19 @@ public String getName() { @Override public String getUseName() { - return getXmlAssembly().isSetUseName() ? getXmlAssembly().getUseName() : null; + return getXmlAssembly().isSetUseName() ? getXmlAssembly().getUseName().getStringValue() : null; + } + + @Override + public Integer getUseIndex() { + Integer retval = null; + if (getXmlAssembly().isSetUseName()) { + AssemblyReferenceType.UseName useName = getXmlAssembly().getUseName(); + if (useName.isSetIndex()) { + retval = useName.getIndex().intValue(); + } + } + return retval; } @Override diff --git a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlFieldInstance.java b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlFieldInstance.java index 328bdc4a6..1acdb1e67 100644 --- a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlFieldInstance.java +++ b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlFieldInstance.java @@ -125,7 +125,19 @@ public String getName() { @Override public String getUseName() { - return getXmlField().isSetUseName() ? getXmlField().getUseName() : null; + return getXmlField().isSetUseName() ? getXmlField().getUseName().getStringValue() : null; + } + + @Override + public Integer getUseIndex() { + Integer retval = null; + if (getXmlField().isSetUseName()) { + FieldReferenceType.UseName useName = getXmlField().getUseName(); + if (useName.isSetIndex()) { + retval = useName.getIndex().intValue(); + } + } + return retval; } @Override diff --git a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlFlagInstance.java b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlFlagInstance.java index 1cbca0e37..c3047f68b 100644 --- a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlFlagInstance.java +++ b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlFlagInstance.java @@ -113,7 +113,19 @@ public boolean isRequired() { @Override public String getUseName() { - return getXmlFlag().isSetUseName() ? getXmlFlag().getUseName() : null; + return getXmlFlag().isSetUseName() ? getXmlFlag().getUseName().getStringValue() : null; + } + + @Override + public Integer getUseIndex() { + Integer retval = null; + if (getXmlFlag().isSetUseName()) { + FlagReferenceType.UseName useName = getXmlFlag().getUseName(); + if (useName.isSetIndex()) { + retval = useName.getIndex().intValue(); + } + } + return retval; } @Override diff --git a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlGlobalAssemblyDefinition.java b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlGlobalAssemblyDefinition.java index c2a1ccee1..25c63964c 100644 --- a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlGlobalAssemblyDefinition.java +++ b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlGlobalAssemblyDefinition.java @@ -130,9 +130,26 @@ public String getName() { return ObjectUtils.requireNonNull(getXmlAssembly().getName()); } + @Override + public Integer getIndex() { + return getXmlAssembly().isSetIndex() ? getXmlAssembly().getIndex().intValue() : null; + } + @Override public String getUseName() { - return getXmlAssembly().isSetUseName() ? getXmlAssembly().getUseName() : null; + return getXmlAssembly().isSetUseName() ? getXmlAssembly().getUseName().getStringValue() : null; + } + + @Override + public Integer getUseIndex() { + Integer retval = null; + if (getXmlAssembly().isSetUseName()) { + GlobalAssemblyDefinitionType.UseName useName = getXmlAssembly().getUseName(); + if (useName.isSetIndex()) { + retval = useName.getIndex().intValue(); + } + } + return retval; } @Override @@ -159,7 +176,19 @@ public boolean isRoot() { @Override public String getRootName() { - return getXmlAssembly().isSetRootName() ? getXmlAssembly().getRootName() : null; + return getXmlAssembly().isSetRootName() ? getXmlAssembly().getRootName().getStringValue() : null; + } + + @Override + public Integer getRootIndex() { + Integer retval = null; + if (getXmlAssembly().isSetRootName()) { + GlobalAssemblyDefinitionType.RootName rootName = getXmlAssembly().getRootName(); + if (rootName.isSetIndex()) { + retval = rootName.getIndex().intValue(); + } + } + return retval; } @SuppressWarnings("null") diff --git a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlGlobalFieldDefinition.java b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlGlobalFieldDefinition.java index b094b1614..59289d94d 100644 --- a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlGlobalFieldDefinition.java +++ b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlGlobalFieldDefinition.java @@ -140,9 +140,26 @@ public String getName() { return getXmlField().getName(); } + @Override + public Integer getIndex() { + return getXmlField().isSetIndex() ? getXmlField().getIndex().intValue() : null; + } + @Override public String getUseName() { - return getXmlField().isSetUseName() ? getXmlField().getUseName() : null; + return getXmlField().isSetUseName() ? getXmlField().getUseName().getStringValue() : null; + } + + @Override + public Integer getUseIndex() { + Integer retval = null; + if (getXmlField().isSetUseName()) { + GlobalFieldDefinitionType.UseName useName = getXmlField().getUseName(); + if (useName.isSetIndex()) { + retval = useName.getIndex().intValue(); + } + } + return retval; } @Override diff --git a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlGlobalFlagDefinition.java b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlGlobalFlagDefinition.java index be64d337d..cb82d8b00 100644 --- a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlGlobalFlagDefinition.java +++ b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlGlobalFlagDefinition.java @@ -140,11 +140,24 @@ public String getName() { return getXmlFlag().getName(); } + @Override + public Integer getIndex() { + return getXmlFlag().isSetIndex() ? getXmlFlag().getIndex().intValue() : null; + } + @Override public String getUseName() { - String retval = getXmlFlag().getUseName(); - if (retval == null) { - retval = getName(); + return getXmlFlag().isSetUseName() ? getXmlFlag().getUseName().getStringValue() : null; + } + + @Override + public Integer getUseIndex() { + Integer retval = null; + if (getXmlFlag().isSetUseName()) { + GlobalFlagDefinitionType.UseName useName = getXmlFlag().getUseName(); + if (useName.isSetIndex()) { + retval = useName.getIndex().intValue(); + } } return retval; } diff --git a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlInlineAssemblyDefinition.java b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlInlineAssemblyDefinition.java index 39b3f7f36..648847cfb 100644 --- a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlInlineAssemblyDefinition.java +++ b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlInlineAssemblyDefinition.java @@ -129,6 +129,11 @@ public String getName() { return getXmlAssembly().getName(); } + @Override + public Integer getIndex() { + return getXmlAssembly().isSetIndex() ? getXmlAssembly().getIndex().intValue() : null; + } + @Override public String getGroupAsName() { return getXmlAssembly().isSetGroupAs() ? getXmlAssembly().getGroupAs().getName() : null; @@ -170,6 +175,12 @@ public String getUseName() { return null; } + @Override + public Integer getUseIndex() { + // an inline definition doesn't have a use name index + return null; + } + @Override public Object getValue(@NonNull Object parentValue) { // there is no value @@ -250,12 +261,23 @@ public String getName() { return XmlInlineAssemblyDefinition.this.getName(); } + @Override + public Integer getIndex() { + return XmlInlineAssemblyDefinition.this.getIndex(); + } + @Override public String getUseName() { // always use the name instead return null; } + @Override + public Integer getUseIndex() { + // always use the name index instead + return null; + } + @Override public boolean isRoot() { // a local assembly is never a root @@ -268,6 +290,12 @@ public String getRootName() { return null; } + @Override + public Integer getRootIndex() { + // a local assembly is never a root + return null; + } + @SuppressWarnings("null") @Override public XmlFlagContainerSupport getFlagContainer() { diff --git a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlInlineFieldDefinition.java b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlInlineFieldDefinition.java index 85b330b0e..092982c61 100644 --- a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlInlineFieldDefinition.java +++ b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlInlineFieldDefinition.java @@ -147,6 +147,11 @@ public String getName() { return getXmlField().getName(); } + @Override + public Integer getIndex() { + return getXmlField().isSetIndex() ? getXmlField().getIndex().intValue() : null; + } + @Override public String getGroupAsName() { return getXmlField().isSetGroupAs() ? getXmlField().getGroupAs().getName() : null; @@ -188,6 +193,12 @@ public String getUseName() { return null; } + @Override + public Integer getUseIndex() { + // an inline definition doesn't have a use name index + return null; + } + @Override public Object getValue(@NonNull Object parentValue) { // there is no value @@ -318,12 +329,23 @@ public String getName() { return XmlInlineFieldDefinition.this.getName(); } + @Override + public Integer getIndex() { + return XmlInlineFieldDefinition.this.getIndex(); + } + @Override public String getUseName() { // always use the name instead return null; } + @Override + public Integer getUseIndex() { + // always use the name index instead + return null; + } + @SuppressWarnings("null") @Override public XmlFlagContainerSupport getFlagContainer() { diff --git a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlInlineFlagDefinition.java b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlInlineFlagDefinition.java index d3b03a06a..28279ecd1 100644 --- a/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlInlineFlagDefinition.java +++ b/core/src/main/java/gov/nist/secauto/metaschema/core/model/xml/XmlInlineFlagDefinition.java @@ -135,6 +135,11 @@ public String getName() { return getXmlFlag().getName(); } + @Override + public Integer getIndex() { + return getXmlFlag().isSetIndex() ? getXmlFlag().getIndex().intValue() : null; + } + @Override public boolean isRequired() { return getXmlFlag().isSetRequired() ? getXmlFlag().getRequired() : MetaschemaModelConstants.DEFAULT_FLAG_REQUIRED; @@ -156,6 +161,12 @@ public String getUseName() { return null; } + @Override + public Integer getUseIndex() { + // an inline definition doesn't have a use name index + return null; + } + @Override public Object getValue(@NonNull Object parentValue) { // there is no value @@ -214,12 +225,23 @@ public String getName() { return XmlInlineFlagDefinition.this.getName(); } + @Override + public Integer getIndex() { + return XmlInlineFlagDefinition.this.getIndex(); + } + @Override public String getUseName() { // always use the name return null; } + @Override + public Integer getUseIndex() { + // always use the name index instead + return null; + } + @Override public ModuleScopeEnum getModuleScope() { return ModuleScopeEnum.LOCAL; diff --git a/core/src/test/java/gov/nist/secauto/metaschema/core/model/xml/ModuleLoaderTest.java b/core/src/test/java/gov/nist/secauto/metaschema/core/model/xml/ModuleLoaderTest.java index 9bbc83340..2d6992042 100644 --- a/core/src/test/java/gov/nist/secauto/metaschema/core/model/xml/ModuleLoaderTest.java +++ b/core/src/test/java/gov/nist/secauto/metaschema/core/model/xml/ModuleLoaderTest.java @@ -72,7 +72,7 @@ void testUrl() throws MetaschemaException, IOException { // NOPMD - intentional void testFile() throws MetaschemaException, IOException { ModuleLoader loader = new ModuleLoader(); URI moduleUri = ObjectUtils.notNull( - Paths.get("metaschema/test-suite/docs-models/models_metaschema.xml").toUri()); + Paths.get("src/test/resources/content/custom-entity-metaschema.xml").toUri()); IModule module = loader.load(moduleUri); assertFalse(module.getExportedRootAssemblyDefinitions().isEmpty(), "no roots found"); } diff --git a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/AbstractClassBinding.java b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/AbstractClassBinding.java index bf38fa733..adbf10467 100644 --- a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/AbstractClassBinding.java +++ b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/AbstractClassBinding.java @@ -88,6 +88,12 @@ public String getUseName() { // NOPMD return null; } + @Override + public Integer getUseIndex() { + // a use name index is never provided + return null; + } + @SuppressWarnings("null") @Override public String toCoordinates() { diff --git a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/AbstractFieldProperty.java b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/AbstractFieldProperty.java index bfe0ec613..83026cccc 100644 --- a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/AbstractFieldProperty.java +++ b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/AbstractFieldProperty.java @@ -89,6 +89,12 @@ public String getUseName() { return ModelUtil.resolveToString(getFieldAnnotation().useName()); } + @Override + public Integer getUseIndex() { + int value = getFieldAnnotation().useIndex(); + return value == Integer.MIN_VALUE ? null : value; + } + @Override public boolean isInXmlWrapped() { return getFieldAnnotation().inXmlWrapped(); diff --git a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/ClassBindingAssemblyProperty.java b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/ClassBindingAssemblyProperty.java index 3dbdfd5d3..28be18fe9 100644 --- a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/ClassBindingAssemblyProperty.java +++ b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/ClassBindingAssemblyProperty.java @@ -101,6 +101,12 @@ public String getUseName() { return ModelUtil.resolveToString(getAssemblyAnnotation().useName()); } + @Override + public Integer getUseIndex() { + int value = getAssemblyAnnotation().useIndex(); + return value == Integer.MIN_VALUE ? null : value; + } + @Override public String getXmlNamespace() { return ObjectUtils diff --git a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultAssemblyClassBinding.java b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultAssemblyClassBinding.java index 37d4ba44a..5329046a4 100644 --- a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultAssemblyClassBinding.java +++ b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultAssemblyClassBinding.java @@ -30,8 +30,8 @@ import gov.nist.secauto.metaschema.core.datatype.markup.MarkupMultiline; import gov.nist.secauto.metaschema.core.model.IChoiceInstance; import gov.nist.secauto.metaschema.core.model.IFlagContainerSupport; -import gov.nist.secauto.metaschema.core.model.IModule; import gov.nist.secauto.metaschema.core.model.IModelContainerSupport; +import gov.nist.secauto.metaschema.core.model.IModule; import gov.nist.secauto.metaschema.core.model.constraint.IConstraint.InternalModelSource; import gov.nist.secauto.metaschema.core.model.constraint.IModelConstrained; import gov.nist.secauto.metaschema.core.util.ObjectUtils; @@ -162,6 +162,12 @@ public String getName() { return getMetaschemaAssemblyAnnotation().name(); } + @Override + public Integer getIndex() { + int value = getMetaschemaAssemblyAnnotation().index(); + return value == Integer.MIN_VALUE ? null : value; + } + @Override public boolean isInline() { return false; @@ -186,6 +192,12 @@ public String getRootName() { return qname == null ? null : qname.getLocalPart(); } + @Override + public Integer getRootIndex() { + int value = getMetaschemaAssemblyAnnotation().rootIndex(); + return value == Integer.MIN_VALUE ? null : value; + } + @Override public QName getRootXmlQName() { // Overriding this is more efficient, since it is already built diff --git a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultFieldClassBinding.java b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultFieldClassBinding.java index 1b4f72989..0cfa3e517 100644 --- a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultFieldClassBinding.java +++ b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultFieldClassBinding.java @@ -141,6 +141,12 @@ public String getName() { return getMetaschemaFieldAnnotation().name(); } + @Override + public Integer getIndex() { + int value = getMetaschemaFieldAnnotation().index(); + return value == Integer.MIN_VALUE ? null : value; + } + @Override public Object getDefaultValue() { return getFieldValueInstance().getDefaultValue(); diff --git a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultFieldValueProperty.java b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultFieldValueProperty.java index 838f7ac03..8a83e5b7c 100644 --- a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultFieldValueProperty.java +++ b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultFieldValueProperty.java @@ -133,6 +133,12 @@ public String getUseName() { return null; } + @Override + public Integer getUseIndex() { + // TODO: implement? + return null; + } + @Override public @NonNull ModelType getModelType() { // TODO: is this right? Is there a way to not make this derived from a property? diff --git a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultFlagProperty.java b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultFlagProperty.java index 2f5c0f62f..0dceae00a 100644 --- a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultFlagProperty.java +++ b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/DefaultFlagProperty.java @@ -149,6 +149,12 @@ public String getUseName() { return ModelUtil.resolveToString(getFlagAnnotation().useName()); } + @Override + public Integer getUseIndex() { + int value = getFlagAnnotation().useIndex(); + return value == Integer.MIN_VALUE ? null : value; + } + @Override public String getXmlNamespace() { return ModelUtil.resolveOptionalNamespace(getFlagAnnotation().namespace(), getParentClassBinding()); @@ -235,12 +241,23 @@ public String getName() { return getJavaFieldName(); } + @Override + public Integer getIndex() { + return DefaultFlagProperty.this.getIndex(); + } + @Override public String getUseName() { // always use the name instead return null; } + @Override + public Integer getUseIndex() { + // always use the index instead + return null; + } + @Override public MarkupMultiline getRemarks() { return DefaultFlagProperty.this.getRemarks(); diff --git a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/SimpleFieldProperty.java b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/SimpleFieldProperty.java index eff333ce2..09a9d6a94 100644 --- a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/SimpleFieldProperty.java +++ b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/SimpleFieldProperty.java @@ -112,20 +112,10 @@ protected IDataTypeHandler newDataTypeHandler() { return IDataTypeHandler.newDataTypeHandler(this); } - @Override - public boolean isInXmlWrapped() { - return getFieldAnnotation().inXmlWrapped(); - } - protected Object getDefaultValue() { return defaultValue; } - @Override - public String getUseName() { - return ModelUtil.resolveToString(getFieldAnnotation().useName()); - } - @Override public Object defaultValue() { return getMaxOccurs() == 1 ? getDefaultValue() : getPropertyInfo().newPropertyCollector().getValue(); @@ -187,6 +177,16 @@ public String getName() { return getJavaFieldName(); } + @Override + public Integer getIndex() { + return null; // no index by default; + } + + @Override + public Integer getUseIndex() { + return null; // none + } + @Override public String getUseName() { return ModelUtil.resolveToString(getFieldAnnotation().useName()); diff --git a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/BoundAssembly.java b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/BoundAssembly.java index 682b87fa3..766b6ce04 100644 --- a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/BoundAssembly.java +++ b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/BoundAssembly.java @@ -86,6 +86,15 @@ @NonNull String useName() default Constants.NO_STRING_VALUE; + /** + * The binary use name of the assembly. + *

+ * The value {@link Integer#MIN_VALUE} indicates that there is no use name. + * + * @return the index value + */ + int useIndex() default Integer.MIN_VALUE; + /** * The namespace to use for associated XML elements. *

diff --git a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/BoundField.java b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/BoundField.java index d6bedffcd..fc562c69b 100644 --- a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/BoundField.java +++ b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/BoundField.java @@ -95,6 +95,15 @@ @NonNull String useName() default Constants.NO_STRING_VALUE; + /** + * The binary use name of the field. + *

+ * The value {@link Integer#MIN_VALUE} indicates that there is no use name. + * + * @return the index value + */ + int useIndex() default Integer.MIN_VALUE; + /** * The namespace to use for associated XML elements. *

diff --git a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/BoundFlag.java b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/BoundFlag.java index 4a66814f6..f5113ed2e 100644 --- a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/BoundFlag.java +++ b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/BoundFlag.java @@ -80,6 +80,15 @@ @NonNull String useName() default Constants.NO_STRING_VALUE; + /** + * The binary use name of the flag. + *

+ * The value {@link Integer#MIN_VALUE} indicates that there is no use name. + * + * @return the index value + */ + int useIndex() default Integer.MIN_VALUE; + /** * XML target namespace of the XML Schema element. *

diff --git a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/MetaschemaAssembly.java b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/MetaschemaAssembly.java index 109ae45cc..e97e1cedc 100644 --- a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/MetaschemaAssembly.java +++ b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/MetaschemaAssembly.java @@ -82,6 +82,15 @@ @NonNull String name(); + /** + * The binary name of the assembly. + *

+ * The value {@link Integer#MIN_VALUE} indicates that there is no index. + * + * @return the index value + */ + int index() default Integer.MIN_VALUE; + /** * Name of the root XML element or the JSON/YAML property. *

@@ -92,6 +101,15 @@ @NonNull String rootName() default Constants.NO_STRING_VALUE; + /** + * The binary root name of the assembly. + *

+ * The value {@link Integer#MIN_VALUE} indicates that there is no root index. + * + * @return the index value + */ + int rootIndex() default Integer.MIN_VALUE; + /** * XML target namespace of the XML element. *

diff --git a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/MetaschemaField.java b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/MetaschemaField.java index 30c1506ab..7a7bd94f6 100644 --- a/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/MetaschemaField.java +++ b/databind/src/main/java/gov/nist/secauto/metaschema/databind/model/annotations/MetaschemaField.java @@ -78,9 +78,27 @@ @NonNull String name(); + /** + * The binary name of the assembly. + *

+ * The value {@link Integer#MIN_VALUE} indicates that there is no index. + * + * @return the index value + */ + int index() default Integer.MIN_VALUE; + @NonNull String useName() default Constants.NO_STRING_VALUE; + /** + * The binary use name of the assembly. + *

+ * The value {@link Integer#MIN_VALUE} indicates that there is no use name. + * + * @return the index value + */ + int useIndex() default Integer.MIN_VALUE; + /** * Get the metaschema class that "owns" this assembly, which is the concrete * implementation of the metaschema containing the assembly.