Skip to content

Commit

Permalink
Updated Metaschema module to incorporate latest module changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
david-waltermire committed Jun 16, 2024
1 parent 58a28ce commit 67ab0b6
Show file tree
Hide file tree
Showing 51 changed files with 810 additions and 806 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
xmlns="https://csrc.nist.gov/ns/metaschema-binding/1.0">
<model-binding namespace="http://csrc.nist.gov/ns/oscal/metaschema/1.0">
<java>
<use-package-name>gov.nist.secauto.metaschema.databind.metaschema</use-package-name>
<use-package-name>gov.nist.secauto.metaschema.databind.binding.metaschema</use-package-name>
</java>
</model-binding>
<metaschema-binding
Expand All @@ -13,5 +13,45 @@
<use-class-name>GroupingAs</use-class-name>
</java>
</define-assembly-binding>
<define-assembly-binding name="assembly-constraints">
<java>
<implement-interface>gov.nist.secauto.metaschema.databind.model.metaschema.IModelConstraintsBase</implement-interface>
</java>
</define-assembly-binding>
<define-assembly-binding name="constraint-value-enum">
<java>
<extend-base-class>gov.nist.secauto.metaschema.databind.model.metaschema.impl.AbstractAllowedValue</extend-base-class>
</java>
</define-assembly-binding>
<define-assembly-binding name="field-constraints">
<java>
<implement-interface>gov.nist.secauto.metaschema.databind.model.metaschema.IValueConstraintsBase</implement-interface>
</java>
</define-assembly-binding>
<define-assembly-binding name="flag-allowed-values">
<java>
<implement-interface>gov.nist.secauto.metaschema.databind.model.metaschema.IConstraintBase</implement-interface>
</java>
</define-assembly-binding>
<define-assembly-binding name="flag-constraints">
<java>
<implement-interface>gov.nist.secauto.metaschema.databind.model.metaschema.IValueConstraintsBase</implement-interface>
</java>
</define-assembly-binding>
<define-assembly-binding name="flag-expect">
<java>
<implement-interface>gov.nist.secauto.metaschema.databind.model.metaschema.IConstraintBase</implement-interface>
</java>
</define-assembly-binding>
<define-assembly-binding name="flag-index-has-key">
<java>
<implement-interface>gov.nist.secauto.metaschema.databind.model.metaschema.IConstraintBase</implement-interface>
</java>
</define-assembly-binding>
<define-assembly-binding name="flag-matches">
<java>
<implement-interface>gov.nist.secauto.metaschema.databind.model.metaschema.IConstraintBase</implement-interface>
</java>
</define-assembly-binding>
</metaschema-binding>
</metaschema-bindings>
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import gov.nist.secauto.metaschema.core.model.IFieldDefinition;
import gov.nist.secauto.metaschema.core.model.IModelDefinition;
import gov.nist.secauto.metaschema.core.model.IModule;
import gov.nist.secauto.metaschema.core.util.CollectionUtil;
import gov.nist.secauto.metaschema.core.util.ObjectUtils;
import gov.nist.secauto.metaschema.databind.codegen.ClassUtils;
import gov.nist.secauto.metaschema.databind.codegen.xmlbeans.JavaModelBindingType;
Expand All @@ -49,6 +50,7 @@
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
Expand Down Expand Up @@ -104,12 +106,9 @@ public IDefinitionBindingConfiguration getBindingConfigurationForDefinition(
@Override
public String getQualifiedBaseClassName(IModelDefinition definition) {
IDefinitionBindingConfiguration config = getBindingConfigurationForDefinition(definition);

String retval = null;
if (config != null) {
retval = config.getQualifiedBaseClassName();
}
return retval;
return config == null
? null
: config.getQualifiedBaseClassName();
}

@Override
Expand All @@ -127,6 +126,14 @@ public String getClassName(IModelDefinition definition) {
return retval;
}

@Override
public List<String> getQualifiedSuperinterfaceClassNames(IModelDefinition definition) {
IDefinitionBindingConfiguration config = getBindingConfigurationForDefinition(definition);
return config == null
? CollectionUtil.emptyList()
: config.getInterfacesToImplement();
}

@Override
public @NonNull String getClassName(@NonNull IModule module) {
// TODO: make this configurable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,8 @@

package gov.nist.secauto.metaschema.databind.codegen.config;

import gov.nist.secauto.metaschema.core.util.CollectionUtil;

import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.LinkedList;
import java.util.List;

import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
Expand All @@ -41,7 +38,7 @@ public class DefaultDefinitionBindingConfiguration implements IMutableDefinition
@Nullable
private String baseClassName;
@NonNull
private final Set<String> interfacesToImplement = new LinkedHashSet<>();
private final List<String> interfacesToImplement = new LinkedList<>();

/**
* Create a new definition binding configuration.
Expand Down Expand Up @@ -84,9 +81,8 @@ public void setQualifiedBaseClassName(String name) {
}

@Override
public Collection<String> getInterfacesToImplement() {
return interfacesToImplement.isEmpty() ? CollectionUtil.emptySet()
: CollectionUtil.unmodifiableCollection(interfacesToImplement);
public List<String> getInterfacesToImplement() {
return interfacesToImplement;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
import gov.nist.secauto.metaschema.core.model.IModelDefinition;
import gov.nist.secauto.metaschema.core.model.IModule;

import java.util.List;

import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;

Expand Down Expand Up @@ -75,4 +77,15 @@ public interface IBindingConfiguration {
*/
@Nullable
String getQualifiedBaseClassName(@NonNull IModelDefinition definition);

/**
* Get the Java class names of the superinterfaces to use for the class
* associated with the provided definition.
*
* @param definition
* a definition that may be built as a class
* @return a list of superinterface class names
*/
@NonNull
List<String> getQualifiedSuperinterfaceClassNames(@NonNull IModelDefinition definition);
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

package gov.nist.secauto.metaschema.databind.codegen.config;

import java.util.Collection;
import java.util.List;

import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
Expand Down Expand Up @@ -56,5 +56,5 @@ public interface IDefinitionBindingConfiguration {
* @return a list of fully qualified type names for interfaces
*/
@NonNull
Collection<String> getInterfacesToImplement();
List<String> getInterfacesToImplement();
}
Original file line number Diff line number Diff line change
Expand Up @@ -423,24 +423,25 @@ protected TypeSpec.Builder newClassBuilder(
TypeSpec.Builder builder = TypeSpec.classBuilder(typeInfo.getClassName()).addModifiers(Modifier.PUBLIC);
assert builder != null;
if (isChild) {
builder.addModifiers(Modifier.STATIC, Modifier.FINAL);
builder.addModifiers(Modifier.STATIC);
}
builder.addModifiers(Modifier.FINAL);

builder.addSuperinterface(ClassName.get(IBoundObject.class));

// add field for Metaschema info
builder.addField(FieldSpec.builder(IMetaschemaData.class, "__metaschemaData", Modifier.PRIVATE)
builder.addField(FieldSpec.builder(IMetaschemaData.class, "__metaschemaData", Modifier.PRIVATE, Modifier.FINAL)
.build());

builder.addMethod(MethodSpec.constructorBuilder()
.addModifiers(Modifier.PUBLIC)
.addParameter(IMetaschemaData.class, "data")
.addStatement("this.$N = $N", "__metaschemaData", "data")
.addStatement("this(null)")
.build());

builder.addMethod(MethodSpec.constructorBuilder()
.addModifiers(Modifier.PUBLIC)
.addStatement("this(null)")
.addParameter(IMetaschemaData.class, "data")
.addStatement("this.$N = $N", "__metaschemaData", "data")
.build());

// generate a toString method that will help with debugging
Expand All @@ -456,6 +457,10 @@ protected TypeSpec.Builder newClassBuilder(
builder.superclass(baseClassName);
}

for (ClassName superinterface : typeInfo.getSuperinterfaces()) {
builder.addSuperinterface(superinterface);
}

Set<IModelDefinition> additionalChildClasses;
if (typeInfo instanceof IAssemblyDefinitionTypeInfo) {
additionalChildClasses = buildClass((IAssemblyDefinitionTypeInfo) typeInfo, builder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,11 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;

import edu.umd.cs.findbugs.annotations.NonNull;

Expand Down Expand Up @@ -272,6 +274,14 @@ public ClassName getBaseClassName(IModelDefinition definition) {
return retval;
}

@Override
public List<ClassName> getSuperinterfaces(IModelDefinition definition) {
List<String> classNames = bindingConfiguration.getQualifiedSuperinterfaceClassNames(definition);
return classNames.stream()
.map(ClassName::bestGuess)
.collect(Collectors.toUnmodifiableList());
}

@Override
public String getPackageName(@NonNull IModule module) {
return bindingConfiguration.getPackageNameForModule(module);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@
import gov.nist.secauto.metaschema.databind.codegen.typeinfo.def.IFieldDefinitionTypeInfo;
import gov.nist.secauto.metaschema.databind.codegen.typeinfo.def.IModelDefinitionTypeInfo;

import java.util.List;

import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;

Expand Down Expand Up @@ -167,6 +169,17 @@ IGroupedNamedModelInstanceTypeInfo getTypeInfo(
@NonNull
ClassName getClassName(@NonNull IModelDefinition definition);

/**
* Get the name of the super interfaces associated with the provided Metaschema
* definition.
*
* @param definition
* the Metaschema definition to get the super ineterfaces for
* @return the super interface information for the definition
*/
@NonNull
List<ClassName> getSuperinterfaces(@NonNull IModelDefinition definition);

/**
* Get the name of the class associated with the provided Metaschema definition.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;

Expand All @@ -63,6 +64,9 @@ public abstract class AbstractModelDefinitionTypeInfo<DEF extends IModelDefiniti
private final ClassName className;
@Nullable
private final ClassName baseClassName;
@NonNull
private final List<ClassName> superinterfaces;
@NonNull
private final Lazy<Map<String, IFlagInstanceTypeInfo>> flagTypeInfos;

public AbstractModelDefinitionTypeInfo(
Expand All @@ -72,6 +76,7 @@ public AbstractModelDefinitionTypeInfo(
this.typeResolver = typeResolver;
this.className = typeResolver.getClassName(definition);
this.baseClassName = typeResolver.getBaseClassName(definition);
this.superinterfaces = typeResolver.getSuperinterfaces(definition);
this.flagTypeInfos = ObjectUtils.notNull(Lazy.lazy(() -> flags()
.collect(CustomCollectors.toMap(
ITypeInfo::getPropertyName,
Expand Down Expand Up @@ -105,6 +110,11 @@ public ClassName getBaseClassName() {
return baseClassName;
}

@Override
public List<ClassName> getSuperinterfaces() {
return superinterfaces;
}

private Stream<IFlagInstanceTypeInfo> flags() {
return getDefinition().getFlagInstances().stream()
.map(instance -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import gov.nist.secauto.metaschema.databind.codegen.typeinfo.ITypeResolver;

import java.util.Collection;
import java.util.List;

import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
Expand Down Expand Up @@ -90,6 +91,15 @@ static IModelDefinitionTypeInfo newTypeInfo(
@NonNull
ClassName getClassName();

/**
* Get the list of super interfaces the class must implement for the object
* definition for which this class is being generated.
*
* @return a list of super interfaces to implement
*/
@NonNull
List<ClassName> getSuperinterfaces();

/**
* Get the type information for the provided {@code instance} value.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,15 @@
formalName = "Any Additional Content",
name = "any",
moduleClass = MetaschemaModelModule.class)
public class Any
implements IBoundObject {
public class Any implements IBoundObject {
private final IMetaschemaData __metaschemaData;

public Any() {
this(null);
}

public Any(IMetaschemaData metaschemaData) {
this.__metaschemaData = metaschemaData;
public Any(IMetaschemaData data) {
this.__metaschemaData = data;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,7 @@
@MetaschemaAssembly(
name = "assembly-constraints",
moduleClass = MetaschemaModelModule.class)
public class AssemblyConstraints
implements IBoundObject, IModelConstraintsBase {
public class AssemblyConstraints implements IBoundObject, IModelConstraintsBase {
private final IMetaschemaData __metaschemaData;

@BoundAssembly(
Expand Down Expand Up @@ -89,8 +88,8 @@ public AssemblyConstraints() {
this(null);
}

public AssemblyConstraints(IMetaschemaData metaschemaData) {
this.__metaschemaData = metaschemaData;
public AssemblyConstraints(IMetaschemaData data) {
this.__metaschemaData = data;
}

@Override
Expand Down
Loading

0 comments on commit 67ab0b6

Please sign in to comment.