Sure.  I can share all of the codez.

import static org.apache.commons.collections.CollectionUtils.isEmpty;
import static org.apache.commons.collections.CollectionUtils.isNotEmpty;
import static org.apache.commons.collections.ListUtils.intersection;
import static org.apache.commons.collections.MapUtils.isEmpty;
import static org.apache.commons.lang3.StringUtils.isNotBlank;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.swagger.core.filter.AbstractSpecFilter;
import io.swagger.model.ApiDescription;
import io.swagger.models.Operation;

public class SwaggerTagFilterExample extends AbstractSpecFilter {

 private static final Logger logger = 
LoggerFactory.getLogger(SwaggerTagFilterExample.class);
 
 private static final String TAG_NAME_ADMIN1 = "Bob";
 private static final String TAG_NAME_ADMIN2 = "Carl";
 private static final String TAG_NAME_ADMIN3 = "Frank";
 private static final String TAG_NAME_ADMIN4 = "Steve";
 
 private static final Set<String> TAG_NAME_SET = new HashSet<String>(); 
 static {
 TAG_NAME_SET.add(TAG_NAME_ADMIN1);
 TAG_NAME_SET.add(TAG_NAME_ADMIN2);
 TAG_NAME_SET.add(TAG_NAME_ADMIN3);
 TAG_NAME_SET.add(TAG_NAME_ADMIN4);
 }
 
 @Override
 public boolean isOperationAllowed (Operation operation, ApiDescription 
api, Map<String, List<String>> paramMap, 
              Map<String, String> cookies,  Map<String, List<String>> 
headers) {
 
 logger.debug("--Entering--");
 
 boolean showOperation = false;

 List<String> nameParamList = null;
 List<String> tagValueList = null;
 
 try {
 
 // get all the tags from the json
 tagValueList = operation.getTags();
 
 logger.debug("The tag values are: {}", tagValueList);

 nameParamList = getParamList(paramMap, "names");
 
 // apply name filtering logic
 showOperation = isEmpty(nameParamList) ? true : 
applyNameFiltering(nameParamList, tagValueList);
 // remove all name tags for this operation that are not in the 
nameParamList
 if (showOperation) {
 operation.setTags(purgeUnrequestedNameTags(nameParamList, tagValueList));
 }
 
 } catch (Exception e) {
 
 logger.error("Var - nameParamList: {}", nameParamList);
 logger.error("Var - tagValueList: {}", tagValueList);
 
 logger.error("Exception occurred when verifying allowed operations - No 
swagger operation displayed for you!!");
 }
 
 logger.debug("--Exiting--");
 
 return showOperation;
 }
 

@Override
 public boolean isRemovingUnreferencedDefinitions() {
     return true;
 }
 

/** 
  * Returns the values from the paramMap that are associated with the 
paramName key as a List<String>.  
  * 
  * @param paramMap
  * @param paramName
  * @return
  */
 private List<String> getParamList(Map<String, List<String>> paramMap, 
String paramName) {
 logger.debug("--Entering--");
 logger.debug("Var - paramMap: " + (isEmpty(paramMap) ? null : 
paramMap.toString()));
 logger.debug("Var - paramName: " + paramName);
 List<String> paramList = null;
 try {
 if (paramMap.containsKey(paramName)) {  
 logger.debug("paramMap.get(paramName).isEmpty() is: {}", 
paramMap.get(paramName).isEmpty());
 
 if (isNotBlank(paramMap.get(paramName).get(0))) { 
 
 // get specific tags from the query param
 paramList = Arrays.asList(paramMap.get(paramName).get(0).split(","));
 }
 
 logger.debug("The {} params are: {}", paramName, paramList);
 
 } 
 } catch (Exception e) {
 logger.error("Var - paramList: {}", paramList);
 logger.error("Exception occurred when checking the filter values against 
the operation tags: {}", e);
 logger.error("Continuing flow...");
 }
 logger.debug("--Exiting--");
 return paramList;
 }

private final boolean applyNameFiltering(List<String> nameParamList, 
List<String> tagValueList) {
   logger.debug("--Entering--");
   logger.debug("Var - nameParamList: " + (isEmpty(nameParamList) ? null : 
nameParamList.toString()));
   logger.debug("Var - tagValueList: " + (isEmpty(tagValueList) ? null : 
tagValueList.toString()));
boolean matchFound = false;
try {
if (isNotEmpty(nameParamList) && isNotEmpty(tagValueList)) {
matchFound = isNotEmpty(intersection(nameParamList, tagValueList));
}
   } catch (Exception e) {
   logger.error("Var - matchFound: {}", matchFound);
   logger.error("Exception occurred when finding matching name tags: {}", 
e);
   logger.error("Continuing flow...");
   }
logger.debug("--Exiting--");
return matchFound;
}
/**
* Returns a purged list of name tags based upon the master set of name tags 
while
* leaving non-name tags untouched.
* 
* @param nameParamList
* @param tagValueList
* @return
*/
private List<String> purgeUnrequestedNameTags(List<String> nameParamList, 
List<String> tagValueList) {

List<String> cleanNameTagValueList = new ArrayList<String>();
try {
if (isEmpty(nameParamList)) {
cleanNameTagValueList = tagValueList;
} else { 
for (String tag : tagValueList) {
// keep the name if it was passed in as a parameter (in the nameParamList),
// but if it is a name tag and was NOT passed in then don't keep it; this 
also
// makes sure that any non-name tags are also kept
if (nameParamList.contains(tag) || !TAG_NAME_SET.contains(tag)) {
cleanNameTagValueList.add(tag);
}
}
}
   } catch (Exception e) {
   logger.error("Var - cleanNameTagValueList: {}", cleanNameTagValueList);
   logger.error("Exception occurred while purging erroneous name tags: {}", 
e);
   logger.error("Continuing flow...");
   }
logger.debug("--Exiting--");
return cleanNameTagValueList;
}
}

Thanks!

-- 
You received this message because you are subscribed to the Google Groups 
"Swagger" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to