Class Model
- java.lang.Object
-
- software.amazon.smithy.model.Model
-
- All Implemented Interfaces:
software.amazon.smithy.utils.ToSmithyBuilder<Model>
public final class Model extends java.lang.Object implements software.amazon.smithy.utils.ToSmithyBuilder<Model>
A Smithy model, including shapes, traits, custom traits, validators, suppressions and metadata.A "model" contains all of the loaded shapes (including their traits), validator definitions, suppression definitions, metadata properties, the Smithy version number, and all custom trait definitions. Each of these properties of a model contain a
SourceLocation
, allowing a reference back to where they were defined and how they were originally grouped into separate document files.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
Model.Builder
Builder used to create a Model.
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
MODEL_VERSION
Specifies the highest supported version of the IDL.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static ModelAssembler
assembler()
Assembles and validates a Smithy model from files, nodes, and other disparate sources.static ModelAssembler
assembler(java.lang.ClassLoader classLoader)
Creates aModelAssembler
that is configured to discover traits, validators, and built-in validators using the givenClassLoader
.static Model.Builder
builder()
Builds an explicitly configured Smithy model.boolean
equals(java.lang.Object other)
Shape
expectShape(ShapeId id)
<T extends Shape>
TexpectShape(ShapeId id, java.lang.Class<T> type)
<T extends KnowledgeIndex>
TgetKnowledge(java.lang.Class<T> type)
Gets a computed knowledge index of a specific type for the model.java.util.Map<java.lang.String,Node>
getMetadata()
java.util.Optional<Node>
getMetadataProperty(java.lang.String name)
Gets a metadata property by namespace and name.java.util.Optional<Shape>
getShape(ShapeId id)
ShapeIndex
getShapeIndex()
Deprecated.java.util.Optional<TraitDefinition>
getTraitDefinition(java.lang.String traitId)
Gets the trait definition of a specific trait shape ID.java.util.Optional<TraitDefinition>
getTraitDefinition(ToShapeId traitId)
Gets the trait definition of a specific trait shape ID.java.util.Map<Shape,TraitDefinition>
getTraitDefinitions()
Returns are trait shapes in the model as a map ofShape
objects to theirTraitDefinition
traits.java.util.Collection<Shape>
getTraitShapes()
int
hashCode()
java.util.stream.Stream<Shape>
shapes()
Gets a stream ofShape
s in the index.<T extends Shape>
java.util.stream.Stream<T>shapes(java.lang.Class<T> shapeType)
Gets a stream of shapes in the index of a specific typeT
.Model.Builder
toBuilder()
java.util.Set<Shape>
toSet()
Converts the model to an immutable Set of shapes.
-
-
-
Field Detail
-
MODEL_VERSION
public static final java.lang.String MODEL_VERSION
Specifies the highest supported version of the IDL.- See Also:
- Constant Field Values
-
-
Method Detail
-
builder
public static Model.Builder builder()
Builds an explicitly configured Smithy model.Note that the builder does not validate the correctness of the model. Use the
assembler()
method to build and validate a model.- Returns:
- Returns a model builder.
- See Also:
assembler()
-
assembler
public static ModelAssembler assembler()
Assembles and validates a Smithy model from files, nodes, and other disparate sources.- Returns:
- Returns a model assembler.
-
assembler
public static ModelAssembler assembler(java.lang.ClassLoader classLoader)
Creates aModelAssembler
that is configured to discover traits, validators, and built-in validators using the givenClassLoader
.- Parameters:
classLoader
- Class loader used to discover services.- Returns:
- Returns a model assembler.
-
getShapeIndex
@Deprecated public ShapeIndex getShapeIndex()
Deprecated.
-
getMetadataProperty
public java.util.Optional<Node> getMetadataProperty(java.lang.String name)
Gets a metadata property by namespace and name.- Parameters:
name
- Name of the property to retrieve.- Returns:
- Returns the optional property.
-
getMetadata
public java.util.Map<java.lang.String,Node> getMetadata()
- Returns:
- Gets the unmodifiable metadata of the model across all namespaces.
-
getTraitDefinitions
public java.util.Map<Shape,TraitDefinition> getTraitDefinitions()
Returns are trait shapes in the model as a map ofShape
objects to theirTraitDefinition
traits.- Returns:
- Returns all trait definitions in the model.
-
getTraitDefinition
public java.util.Optional<TraitDefinition> getTraitDefinition(ToShapeId traitId)
Gets the trait definition of a specific trait shape ID.- Parameters:
traitId
- ID of the shape to get the trait definition of.- Returns:
- Returns the optionally found trait definition.
-
getTraitDefinition
public java.util.Optional<TraitDefinition> getTraitDefinition(java.lang.String traitId)
Gets the trait definition of a specific trait shape ID.- Parameters:
traitId
- ID of the shape to get the trait definition of.- Returns:
- Returns the optionally found trait definition.
-
getTraitShapes
public java.util.Collection<Shape> getTraitShapes()
- Returns:
- Returns all trait definition shapes in the model.
-
getShape
public java.util.Optional<Shape> getShape(ShapeId id)
- Parameters:
id
- Shape to retrieve by ID.- Returns:
- Returns the optional shape.
-
expectShape
public Shape expectShape(ShapeId id)
- Parameters:
id
- Shape to retrieve by ID.- Returns:
- Returns the shape.
- Throws:
ExpectationNotMetException
- if the shape is not found.
-
expectShape
public <T extends Shape> T expectShape(ShapeId id, java.lang.Class<T> type)
Attempts to retrieve aShape
byShapeId
and throws if not found or if the shape is not of the expected type.- Parameters:
id
- Shape to retrieve by ID.type
- Shape type to expect and convert to.- Returns:
- Returns the shape.
- Throws:
ExpectationNotMetException
- if the shape is not found or is not the expected type.
-
shapes
public java.util.stream.Stream<Shape> shapes()
Gets a stream ofShape
s in the index.- Returns:
- Returns a stream of shapes.
-
shapes
public <T extends Shape> java.util.stream.Stream<T> shapes(java.lang.Class<T> shapeType)
Gets a stream of shapes in the index of a specific typeT
.The provided shapeType class must exactly match the class of a shape in the shape index in order to be returned from this method; that is, the provided class must be a concrete subclass of
Shape
and not an abstract class likeNumberShape
.- Type Parameters:
T
- Shape type to stream from the index.- Parameters:
shapeType
- Shape typeT
to retrieve.- Returns:
- A stream of shapes of
T
matchingshapeType
.
-
toSet
public java.util.Set<Shape> toSet()
Converts the model to an immutable Set of shapes.- Returns:
- Returns an unmodifiable set of Shapes in the index.
-
equals
public boolean equals(java.lang.Object other)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
toBuilder
public Model.Builder toBuilder()
- Specified by:
toBuilder
in interfacesoftware.amazon.smithy.utils.ToSmithyBuilder<Model>
-
getKnowledge
public <T extends KnowledgeIndex> T getKnowledge(java.lang.Class<T> type)
Gets a computed knowledge index of a specific type for the model.If a
KnowledgeIndex
of the given type has not yet been computed, one will be created using a constructor of the given type that accepts aModel
. Computed knowledge indexes are cached and returned on subsequent retrievals.Using this method is preferred over directly instantiating instances of a KnowledgeIndex if the KnowledgeIndex required in various unrelated code paths where passing around an instance of a KnowledgeIndex is not practical or impossible.
- Type Parameters:
T
- The type of knowledge index to retrieve.- Parameters:
type
- Type of knowledge index to retrieve.- Returns:
- Returns the computed knowledge index.
-
-