|
24 | 24 | import software.amazon.smithy.model.SourceException; |
25 | 25 | import software.amazon.smithy.model.SourceLocation; |
26 | 26 | import software.amazon.smithy.model.node.Node; |
| 27 | +import software.amazon.smithy.model.node.ObjectNode; |
| 28 | +import software.amazon.smithy.model.node.StringNode; |
27 | 29 | import software.amazon.smithy.model.node.ToNode; |
28 | 30 | import software.amazon.smithy.model.shapes.Shape; |
29 | 31 | import software.amazon.smithy.model.shapes.ShapeId; |
@@ -171,6 +173,35 @@ public Node toNode() { |
171 | 173 | .build(); |
172 | 174 | } |
173 | 175 |
|
| 176 | + public static ValidationEvent fromNode(Node node) { |
| 177 | + ObjectNode objectNode = node.expectObjectNode(); |
| 178 | + |
| 179 | + // A source location should always have at least a filename in the node |
| 180 | + // representation of a ValidationEvent. Expect that and default the |
| 181 | + // other properties. |
| 182 | + SourceLocation location = new SourceLocation( |
| 183 | + objectNode.expectStringMember("filename").getValue(), |
| 184 | + objectNode.getNumberMemberOrDefault("line", 0).intValue(), |
| 185 | + objectNode.getNumberMemberOrDefault("column", 0).intValue()); |
| 186 | + |
| 187 | + // Set required properties. |
| 188 | + Builder builder = builder() |
| 189 | + .id(objectNode.expectStringMember("id").getValue()) |
| 190 | + .severity(Severity.valueOf(objectNode.expectStringMember("severity").getValue())) |
| 191 | + .message(objectNode.expectStringMember("message").getValue()) |
| 192 | + .sourceLocation(location); |
| 193 | + |
| 194 | + // Set optional properties. |
| 195 | + objectNode.getStringMember("suppressionReason").map(StringNode::getValue) |
| 196 | + .ifPresent(builder::suppressionReason); |
| 197 | + objectNode.getStringMember("shapeId") |
| 198 | + .map(StringNode::getValue) |
| 199 | + .map(ShapeId::from) |
| 200 | + .ifPresent(builder::shapeId); |
| 201 | + |
| 202 | + return builder.build(); |
| 203 | + } |
| 204 | + |
174 | 205 | /** |
175 | 206 | * @return The location at which the event occurred. |
176 | 207 | */ |
|
0 commit comments