Skip to content

Commit e0ad918

Browse files
committed
Address comments
1 parent 5d5f317 commit e0ad918

File tree

4 files changed

+35
-35
lines changed

4 files changed

+35
-35
lines changed

smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/model/Property.java

+14-17
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
package software.amazon.smithy.aws.cloudformation.schema.model;
1717

1818
import java.util.ArrayList;
19+
import java.util.Collections;
1920
import java.util.List;
21+
import java.util.Optional;
2022
import software.amazon.smithy.jsonschema.Schema;
2123
import software.amazon.smithy.model.node.Node;
2224
import software.amazon.smithy.model.node.ObjectNode;
@@ -32,8 +34,6 @@
3234
* @see <a href="https://github.com/aws-cloudformation/cloudformation-cli/blob/master/src/rpdk/core/data/schema/provider.definition.schema.v1.jsonL74">Resource Type Properties JSON Schema</a>
3335
*/
3436
public final class Property implements ToNode, ToSmithyBuilder<Property> {
35-
private final boolean insertionOrder;
36-
private final List<String> dependencies;
3737
private final Schema schema;
3838
// Other reserved property names in definition but not in the validation
3939
// JSON Schema, so not defined in code:
@@ -49,14 +49,12 @@ private Property(Builder builder) {
4949
schemaBuilder = builder.schema.toBuilder();
5050
}
5151

52-
this.insertionOrder = builder.insertionOrder;
53-
if (this.insertionOrder) {
52+
if (builder.insertionOrder) {
5453
schemaBuilder.putExtension("insertionOrder", Node.from(true));
5554
}
5655

57-
this.dependencies = builder.dependencies;
58-
if (!this.dependencies.isEmpty()) {
59-
schemaBuilder.putExtension("dependencies", Node.fromStrings(this.dependencies));
56+
if (!builder.dependencies.isEmpty()) {
57+
schemaBuilder.putExtension("dependencies", Node.fromStrings(builder.dependencies));
6058
}
6159

6260
this.schema = schemaBuilder.build();
@@ -69,19 +67,12 @@ public Node toNode() {
6967

7068
@Override
7169
public Builder toBuilder() {
72-
return builder()
73-
.insertionOrder(insertionOrder)
74-
.dependencies(dependencies)
75-
.schema(schema);
70+
return builder().schema(schema);
7671
}
7772

7873
public static Property fromNode(Node node) {
7974
ObjectNode objectNode = node.expectObjectNode();
8075
Builder builder = builder();
81-
82-
objectNode.getBooleanMember("insertionOrder", builder::insertionOrder);
83-
objectNode.getArrayMember("dependencies", StringNode::getValue, builder::dependencies);
84-
8576
builder.schema(Schema.fromNode(objectNode));
8677

8778
return builder.build();
@@ -96,11 +87,17 @@ public static Builder builder() {
9687
}
9788

9889
public boolean isInsertionOrder() {
99-
return insertionOrder;
90+
Optional<Boolean> insertionOrder = schema.getExtension("insertionOrder")
91+
.map(n -> n.toNode().expectBooleanNode().getValue());
92+
93+
return insertionOrder.orElse(false);
10094
}
10195

10296
public List<String> getDependencies() {
103-
return dependencies;
97+
Optional<List<String>> dependencies = schema.getExtension("dependencies")
98+
.map(n -> n.toNode().expectArrayNode().getElementsAs(StringNode::getValue));
99+
100+
return dependencies.orElse(Collections.emptyList());
104101
}
105102

106103
public Schema getSchema() {

smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/model/ResourceSchema.java

+5
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,11 @@ public Builder toBuilder() {
166166
.tagging(tagging);
167167
}
168168

169+
public static ResourceSchema fromNode(Node node) {
170+
NodeMapper mapper = new NodeMapper();
171+
return mapper.deserializeInto(node, ResourceSchema.builder()).build();
172+
}
173+
169174
public static Builder builder() {
170175
return new Builder();
171176
}

smithy-aws-cloudformation/src/test/java/software/amazon/smithy/aws/cloudformation/schema/fromsmithy/ResourceSchemaTest.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.junit.jupiter.params.provider.MethodSource;
2020
import software.amazon.smithy.aws.cloudformation.schema.model.ResourceSchema;
2121
import software.amazon.smithy.model.node.Node;
22-
import software.amazon.smithy.model.node.NodeMapper;
2322
import software.amazon.smithy.utils.IoUtils;
2423

2524
import java.io.IOException;
@@ -35,19 +34,18 @@ public class ResourceSchemaTest {
3534
@ParameterizedTest
3635
@MethodSource("resourceSchemaFiles")
3736
public void validateResourceSchemaFromNodeToNode(String resourceSchemaFile) {
38-
NodeMapper mapper = new NodeMapper();
3937
String json = IoUtils.readUtf8File(resourceSchemaFile);
4038

4139
Node node = Node.parse(json);
42-
ResourceSchema schemaFromNode = mapper.deserialize(node, ResourceSchema.class);
40+
ResourceSchema schemaFromNode = ResourceSchema.fromNode(node);
4341
Node nodeFromSchema = schemaFromNode.toNode();
4442

45-
Node.assertEquals(nodeFromSchema.withDeepSortedKeys(), node.withDeepSortedKeys());
43+
Node.assertEquals(nodeFromSchema, node);
4644
}
4745

4846
public static List<String> resourceSchemaFiles() {
4947
try {
50-
Path definitionPath = Paths.get(ResourceSchemaTest.class.getResource("aws-sagemaker-domain.json").toURI());
48+
Path definitionPath = Paths.get(ResourceSchemaTest.class.getResource("aws-sagemaker-domain.cfn.json").toURI());
5149

5250
return Files.walk(Paths.get(definitionPath.getParent().toUri()))
5351
.filter(Files::isRegularFile)
Original file line numberDiff line numberDiff line change
@@ -499,8 +499,8 @@
499499
"/properties/DomainSettings/RStudioServerProDomainSettings/DefaultResourceSpec",
500500
"/properties/KmsKeyId",
501501
"/properties/SubnetIds",
502-
"/properties/VpcId",
503-
"/properties/Tags"
502+
"/properties/Tags",
503+
"/properties/VpcId"
504504
],
505505
"writeOnlyProperties": [
506506
"/properties/Tags"
@@ -510,27 +510,27 @@
510510
],
511511
"readOnlyProperties": [
512512
"/properties/DomainArn",
513-
"/properties/Url",
514513
"/properties/DomainId",
515514
"/properties/HomeEfsFileSystemId",
516515
"/properties/SecurityGroupIdForDomainBoundary",
517-
"/properties/SingleSignOnManagedApplicationInstanceId"
516+
"/properties/SingleSignOnManagedApplicationInstanceId",
517+
"/properties/Url"
518518
],
519519
"handlers": {
520520
"create": {
521521
"permissions": [
522-
"sagemaker:CreateApp",
523-
"sagemaker:CreateDomain",
524-
"sagemaker:DescribeDomain",
525-
"sagemaker:DescribeImage",
526-
"sagemaker:DescribeImageVersion",
522+
"efs:CreateFileSystem",
527523
"iam:CreateServiceLinkedRole",
528524
"iam:PassRole",
529-
"efs:CreateFileSystem",
530525
"kms:CreateGrant",
531526
"kms:Decrypt",
532527
"kms:DescribeKey",
533-
"kms:GenerateDataKeyWithoutPlainText"
528+
"kms:GenerateDataKeyWithoutPlainText",
529+
"sagemaker:CreateApp",
530+
"sagemaker:CreateDomain",
531+
"sagemaker:DescribeDomain",
532+
"sagemaker:DescribeImage",
533+
"sagemaker:DescribeImageVersion"
534534
]
535535
},
536536
"read": {
@@ -540,12 +540,12 @@
540540
},
541541
"update": {
542542
"permissions": [
543+
"iam:PassRole",
543544
"sagemaker:CreateApp",
544-
"sagemaker:UpdateDomain",
545545
"sagemaker:DescribeDomain",
546546
"sagemaker:DescribeImage",
547547
"sagemaker:DescribeImageVersion",
548-
"iam:PassRole"
548+
"sagemaker:UpdateDomain"
549549
]
550550
},
551551
"delete": {

0 commit comments

Comments
 (0)