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