• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License").
5  * You may not use this file except in compliance with the License.
6  * A copy of the License is located at
7  *
8  *  http://aws.amazon.com/apache2.0
9  *
10  * or in the "license" file accompanying this file. This file is distributed
11  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12  * express or implied. See the License for the specific language governing
13  * permissions and limitations under the License.
14  */
15 
16 package software.amazon.awssdk.codegen.jmespath.component;
17 
18 import software.amazon.awssdk.codegen.jmespath.parser.JmesPathVisitor;
19 import software.amazon.awssdk.utils.Validate;
20 
21 /**
22  * A bracket specifier within an {@link IndexExpression}. Either:
23  * <ul>
24  *     <li>With content, as in [1], [*] or [1:2:3]: {@link BracketSpecifierWithContents}</li>
25  *     <li>Without content, as in []: {@link BracketSpecifierWithContents}</li>
26  *     <li>With question-mark content, as in [?foo]: {@link BracketSpecifierWithQuestionMark}</li>
27  * </ul>
28  */
29 public class BracketSpecifier {
30     private BracketSpecifierWithContents bracketSpecifierWithContents;
31     private BracketSpecifierWithoutContents bracketSpecifierWithoutContents;
32     private BracketSpecifierWithQuestionMark bracketSpecifierWithQuestionMark;
33 
withContents(BracketSpecifierWithContents bracketSpecifierWithContents)34     public static BracketSpecifier withContents(BracketSpecifierWithContents bracketSpecifierWithContents) {
35         Validate.notNull(bracketSpecifierWithContents, "bracketSpecifierWithContents");
36         BracketSpecifier result = new BracketSpecifier();
37         result.bracketSpecifierWithContents = bracketSpecifierWithContents;
38         return result;
39     }
40 
withNumberContents(int numberContents)41     public static BracketSpecifier withNumberContents(int numberContents) {
42         return withContents(BracketSpecifierWithContents.number(numberContents));
43     }
44 
withSliceExpressionContents(SliceExpression sliceExpression)45     public static BracketSpecifier withSliceExpressionContents(SliceExpression sliceExpression) {
46         return withContents(BracketSpecifierWithContents.sliceExpression(sliceExpression));
47     }
48 
withWildcardExpressionContents(WildcardExpression wildcardExpression)49     public static BracketSpecifier withWildcardExpressionContents(WildcardExpression wildcardExpression) {
50         return withContents(BracketSpecifierWithContents.wildcardExpression(wildcardExpression));
51     }
52 
withoutContents()53     public static BracketSpecifier withoutContents() {
54         BracketSpecifier result = new BracketSpecifier();
55         result.bracketSpecifierWithoutContents = new BracketSpecifierWithoutContents();
56         return result;
57     }
58 
withQuestionMark(BracketSpecifierWithQuestionMark bracketSpecifierWithQuestionMark)59     public static BracketSpecifier withQuestionMark(BracketSpecifierWithQuestionMark bracketSpecifierWithQuestionMark) {
60         Validate.notNull(bracketSpecifierWithQuestionMark, "bracketSpecifierWithQuestionMark");
61         BracketSpecifier result = new BracketSpecifier();
62         result.bracketSpecifierWithQuestionMark = bracketSpecifierWithQuestionMark;
63         return result;
64     }
65 
isBracketSpecifierWithContents()66     public boolean isBracketSpecifierWithContents() {
67         return bracketSpecifierWithContents != null;
68     }
69 
isBracketSpecifierWithoutContents()70     public boolean isBracketSpecifierWithoutContents() {
71         return bracketSpecifierWithoutContents != null;
72     }
73 
isBracketSpecifierWithQuestionMark()74     public boolean isBracketSpecifierWithQuestionMark() {
75         return bracketSpecifierWithQuestionMark != null;
76     }
77 
asBracketSpecifierWithContents()78     public BracketSpecifierWithContents asBracketSpecifierWithContents() {
79         Validate.validState(isBracketSpecifierWithContents(), "Not a BracketSpecifierWithContents");
80         return bracketSpecifierWithContents;
81     }
82 
asBracketSpecifierWithoutContents()83     public BracketSpecifierWithoutContents asBracketSpecifierWithoutContents() {
84         Validate.validState(isBracketSpecifierWithoutContents(), "Not a BracketSpecifierWithoutContents");
85         return bracketSpecifierWithoutContents;
86     }
87 
asBracketSpecifierWithQuestionMark()88     public BracketSpecifierWithQuestionMark asBracketSpecifierWithQuestionMark() {
89         Validate.validState(isBracketSpecifierWithQuestionMark(), "Not a BracketSpecifierWithQuestionMark");
90         return bracketSpecifierWithQuestionMark;
91     }
92 
visit(JmesPathVisitor visitor)93     public void visit(JmesPathVisitor visitor) {
94         if (isBracketSpecifierWithContents()) {
95             visitor.visitBracketSpecifierWithContents(asBracketSpecifierWithContents());
96         } else if (isBracketSpecifierWithoutContents()) {
97             visitor.visitBracketSpecifierWithoutContents(asBracketSpecifierWithoutContents());
98         } else if (isBracketSpecifierWithQuestionMark()) {
99             visitor.visitBracketSpecifierWithQuestionMark(asBracketSpecifierWithQuestionMark());
100         } else {
101             throw new IllegalStateException();
102         }
103     }
104 }
105