55import io .swagger .models .Operation ;
66import io .swagger .models .Path ;
77import io .swagger .models .Swagger ;
8+ import io .swagger .models .Tag ;
89import io .swagger .models .parameters .Parameter ;
910import io .swagger .models .properties .Property ;
1011
1112import java .util .ArrayList ;
1213import java .util .HashMap ;
14+ import java .util .HashSet ;
15+ import java .util .Iterator ;
1316import java .util .LinkedHashMap ;
1417import java .util .List ;
1518import java .util .Map ;
19+ import java .util .Set ;
1620
1721public class SpecFilter {
1822 public Swagger filter (Swagger swagger , SwaggerSpecFilter filter , Map <String , List <String >> params , Map <String , String > cookies , Map <String , List <String >> headers ) {
1923 Swagger clone = new Swagger ();
2024 clone .info (swagger .getInfo ())
21- .tags (swagger .getTags ())
25+ .tags (swagger .getTags () == null ? null : new ArrayList < Tag >( swagger . getTags ()) )
2226 .host (swagger .getHost ())
2327 .basePath (swagger .getBasePath ())
2428 .schemes (swagger .getSchemes ())
2529 .consumes (swagger .getConsumes ())
2630 .produces (swagger .getProduces ())
2731 .externalDocs (swagger .getExternalDocs ());
2832
33+ final Set <String > filteredTags = new HashSet <String >();
34+ final Set <String > allowedTags = new HashSet <String >();
2935 for (String resourcePath : swagger .getPaths ().keySet ()) {
3036 Path path = swagger .getPaths ().get (resourcePath );
3137 Map <String , Operation > ops = new HashMap <String , Operation >();
@@ -41,15 +47,34 @@ public Swagger filter(Swagger swagger, SwaggerSpecFilter filter, Map<String, Lis
4147 Operation op = ops .get (key );
4248 if (op != null ) {
4349 ApiDescription desc = new ApiDescription (resourcePath , key );
50+ final Set <String > tags ;
4451 if (filter .isOperationAllowed (op , desc , params , cookies , headers )) {
4552 clonedPath .set (key , filterOperation (filter , op , desc , params , cookies , headers ));
53+ tags = allowedTags ;
54+ } else {
55+ tags = filteredTags ;
56+ }
57+ if (op .getTags () != null ) {
58+ tags .addAll (op .getTags ());
4659 }
4760 }
4861 }
4962 if (!clonedPath .isEmpty ()) {
5063 clone .path (resourcePath , clonedPath );
5164 }
5265 }
66+ final List <Tag > tags = clone .getTags ();
67+ filteredTags .removeAll (allowedTags );
68+ if (tags != null && !filteredTags .isEmpty ()) {
69+ for (Iterator <Tag > it = tags .iterator (); it .hasNext (); ) {
70+ if (filteredTags .contains (it .next ().getName ())) {
71+ it .remove ();
72+ }
73+ }
74+ if (clone .getTags ().isEmpty ()) {
75+ clone .setTags (null );
76+ }
77+ }
5378
5479 Map <String , Model > definitions = filterDefinitions (filter , swagger .getDefinitions (), params , cookies , headers );
5580 clone .setSecurityDefinitions (swagger .getSecurityDefinitions ());
0 commit comments