Class Model
- java.lang.Object
-
- software.amazon.smithy.model.Model
-
- All Implemented Interfaces:
ToSmithyBuilder<Model>
public final class Model extends java.lang.Object implements ToSmithyBuilder<Model>
A Smithy model that contains shapes, traits, metadata, and various computed information used to interpret the model.
-
-
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)
java.util.Set<ShapeId>
getAppliedTraits()
Gets a set of every trait shape ID that is used in the model.<T extends KnowledgeIndex>
TgetKnowledge(java.lang.Class<T> type)
Deprecated.<T extends KnowledgeIndex>
TgetKnowledge(java.lang.Class<T> type, java.util.function.Function<Model,T> constructor)
Gets a computed "knowledge index" of a specific type for the model and caches it for subsequent retrieval.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)
java.util.Set<ShapeId>
getShapeIds()
Gets the immutable set ofShapeId
in the model.java.util.Set<Shape>
getShapesWithTrait(java.lang.Class<? extends Trait> trait)
Gets a set of shapes in the model marked with a specific trait.java.util.Set<Shape>
getShapesWithTrait(ToShapeId trait)
Gets a set of shapes in the model marked with a specific trait.java.util.Optional<TraitDefinition>
getTraitDefinition(ToShapeId traitId)
Gets the trait definition of a specific trait shape ID.int
hashCode()
boolean
isTraitApplied(java.lang.Class<? extends Trait> trait)
Returns true if the given trait shape ID was used in the model.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()
Take this object and create a builder that contains all of the current property values of this object.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.
-
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.
-
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.
-
getShapesWithTrait
public java.util.Set<Shape> getShapesWithTrait(ToShapeId trait)
Gets a set of shapes in the model marked with a specific trait.- Parameters:
trait
- Trait shape ID to look for on shapes.- Returns:
- Returns the immutable set of matching shapes.
-
getShapeIds
public java.util.Set<ShapeId> getShapeIds()
Gets the immutable set ofShapeId
in the model.- Returns:
- Returns the shape IDs.
-
getShapesWithTrait
public java.util.Set<Shape> getShapesWithTrait(java.lang.Class<? extends Trait> trait)
Gets a set of shapes in the model marked with a specific trait.The result is an exact match on trait classes and does not utilize any kind of polymorphic instance of checks.
- Parameters:
trait
- Trait class to look for on shapes.- Returns:
- Returns the immutable set of matching shapes.
-
getAppliedTraits
public java.util.Set<ShapeId> getAppliedTraits()
Gets a set of every trait shape ID that is used in the model.- Returns:
- Returns the shape IDs of traits used in the model.
-
isTraitApplied
public boolean isTraitApplied(java.lang.Class<? extends Trait> trait)
Returns true if the given trait shape ID was used in the model.- Parameters:
trait
- The trait class to check.- Returns:
- Returns true if the trait was used 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.- Type Parameters:
T
- Expected shape 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 model 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.
-
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()
Description copied from interface:ToSmithyBuilder
Take this object and create a builder that contains all of the current property values of this object.- Specified by:
toBuilder
in interfaceToSmithyBuilder<Model>
- Returns:
- a builder for type T
-
getKnowledge
@Deprecated public <T extends KnowledgeIndex> T getKnowledge(java.lang.Class<T> type)
Deprecated.This method is deprecated. Use theof
method of theKnowledgeIndex
you wish to create instead.- Type Parameters:
T
- The type of knowledge index to retrieve.- Parameters:
type
- Type of knowledge index to retrieve.- Returns:
- Returns the computed knowledge index.
-
getKnowledge
public <T extends KnowledgeIndex> T getKnowledge(java.lang.Class<T> type, java.util.function.Function<Model,T> constructor)
Gets a computed "knowledge index" of a specific type for the model and caches it for subsequent retrieval.This method should not typically be called directly because KnowledgeIndex classes should all provide a public static
of
method that accepts aModel
and returns an instance of the index by invokinggetKnowledge
.If a
KnowledgeIndex
of the given type has not yet been computed, one will be created using the providedconstructor
function that accepts aModel
. Computed knowledge indexes are cached and returned on subsequent retrievals.- Type Parameters:
T
- The type of knowledge index to retrieve.- Parameters:
type
- Type of knowledge index to retrieve.constructor
- The method used to createtype
.- Returns:
- Returns the computed knowledge index.
-
-