44import com .google .common .collect .ImmutableSet ;
55import com .sonar .sslr .api .AstNodeType ;
66import java .util .Arrays ;
7- import java .util .HashSet ;
87import java .util .Set ;
98import java .util .stream .Stream ;
109import org .apiaddicts .apitools .dosonarapi .api .v2 .OpenApi2Grammar ;
1110import org .apiaddicts .apitools .dosonarapi .api .v3 .OpenApi3Grammar ;
1211import org .apiaddicts .apitools .dosonarapi .api .v31 .OpenApi31Grammar ;
1312import org .apiaddicts .apitools .dosonarapi .sslr .yaml .grammar .JsonNode ;
1413import org .sonar .check .Rule ;
14+ import org .sonar .check .RuleProperty ;
1515
1616@ Rule (key = OAR017ResourcePathCheck .KEY )
1717public class OAR017ResourcePathCheck extends BaseCheck {
1818
1919 public static final String KEY = "OAR017" ;
2020 private static final String MESSAGE = "OAR017.error" ;
21- public static final Set <String > EXCLUDE_PATTERNS = new HashSet <>(Arrays .asList ("get" , "me" , "search" ));
21+ private static final String MESSAGE_PATTERN = "OAR017.error-patterns" ;
22+ // public static final Set<String> EXCLUDE_PATTERNS = new HashSet<>(Arrays.asList("get", "me", "search"));
23+ public static final String EXCLUDE_PATTERNS = "get,me,search" ;
24+
25+ @ RuleProperty (
26+ key = "exclude_patterns" ,
27+ description = "List of exlude pattenrs separated by coma." ,
28+ defaultValue = EXCLUDE_PATTERNS )
29+ public String patternsString = EXCLUDE_PATTERNS ;
2230
2331 @ Override
2432 public Set <AstNodeType > subscribedKinds () {
@@ -32,11 +40,12 @@ public void visitNode(JsonNode node) {
3240
3341 private void visitV2Node (JsonNode node ) {
3442 String path = node .key ().getTokenValue ();
35- if (!isCorrect (path )) addIssue (KEY , translate (MESSAGE ), node .key ());
43+ if (!isCorrect (path , node )) addIssue (KEY , translate (MESSAGE ), node .key ());
3644 }
3745
38- private boolean isCorrect (String path ) {
46+ private boolean isCorrect (String path , JsonNode node ) {
3947 String [] parts = Stream .of (path .split ("/" )).filter (p -> !p .trim ().isEmpty ()).toArray (String []::new );
48+ String [] patterns = Stream .of (patternsString .split ("," )).toArray (String []::new );
4049 if (parts .length == 0 ) return true ;
4150
4251 boolean previousWasVariable = false ;
@@ -45,8 +54,8 @@ private boolean isCorrect(String path) {
4554 for (int i = 0 ; i < parts .length ; i ++) {
4655 boolean currentIsVariable = isVariable (parts [i ]);
4756
48- if (!currentIsVariable && EXCLUDE_PATTERNS .contains (parts [i ])){
49- twoOrMoreVariablesInARow = false ;
57+ if (!currentIsVariable && Arrays . asList ( patterns ) .contains (parts [i ])){
58+ issuePatterns ( parts [ i ], node ) ;
5059 }
5160
5261 if (previousWasVariable && currentIsVariable ) {
@@ -63,4 +72,8 @@ private boolean isCorrect(String path) {
6372 private boolean isVariable (String part ) {
6473 return '{' == part .charAt (0 ) && '}' == part .charAt (part .length () - 1 );
6574 }
75+
76+ private void issuePatterns (String pattern ,JsonNode node ){
77+ addIssue (KEY , translate (MESSAGE_PATTERN ,pattern ), node .key ());
78+ }
6679}
0 commit comments