Converted to use guard clause to reduce nesting.
This commit is contained in:
parent
756be6fed3
commit
28a138f8ec
|
@ -54,125 +54,127 @@ public class FilterInvocationDefinitionSourceEditor extends PropertyEditorSuppor
|
|||
|
||||
if ((s == null) || "".equals(s)) {
|
||||
// Leave target object empty
|
||||
source.setDecorated(new RegExpBasedFilterInvocationDefinitionMap());
|
||||
} else {
|
||||
// Check if we need to override the default definition map
|
||||
if (s.lastIndexOf(DIRECTIVE_PATTERN_TYPE_APACHE_ANT) != -1) {
|
||||
source.setDecorated(new PathBasedFilterInvocationDefinitionMap());
|
||||
setValue(new RegExpBasedFilterInvocationDefinitionMap());
|
||||
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug(("Detected " + DIRECTIVE_PATTERN_TYPE_APACHE_ANT
|
||||
+ " directive; using Apache Ant style path expressions"));
|
||||
}
|
||||
} else {
|
||||
source.setDecorated(new RegExpBasedFilterInvocationDefinitionMap());
|
||||
}
|
||||
|
||||
if (s.lastIndexOf(DIRECTIVE_CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON) != -1) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Detected " + DIRECTIVE_CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
|
||||
+ " directive; Instructing mapper to convert URLs to lowercase before comparison");
|
||||
}
|
||||
|
||||
source.setConvertUrlToLowercaseBeforeComparison(true);
|
||||
}
|
||||
|
||||
BufferedReader br = new BufferedReader(new StringReader(s));
|
||||
int counter = 0;
|
||||
String line;
|
||||
|
||||
List mappings = new ArrayList();
|
||||
|
||||
while (true) {
|
||||
counter++;
|
||||
|
||||
try {
|
||||
line = br.readLine();
|
||||
} catch (IOException ioe) {
|
||||
throw new IllegalArgumentException(ioe.getMessage());
|
||||
}
|
||||
|
||||
if (line == null) {
|
||||
break;
|
||||
}
|
||||
|
||||
line = line.trim();
|
||||
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Line " + counter + ": " + line);
|
||||
}
|
||||
|
||||
if (line.startsWith("//")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Attempt to detect malformed lines (as per SEC-204)
|
||||
if (line.lastIndexOf(DIRECTIVE_CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON) != -1) {
|
||||
// Directive found; check for second directive or name=value
|
||||
if ((line.lastIndexOf(DIRECTIVE_PATTERN_TYPE_APACHE_ANT) != -1) || (line.lastIndexOf("=") != -1)) {
|
||||
throw new IllegalArgumentException("Line appears to be malformed: " + line);
|
||||
}
|
||||
}
|
||||
|
||||
// Attempt to detect malformed lines (as per SEC-204)
|
||||
if (line.lastIndexOf(DIRECTIVE_PATTERN_TYPE_APACHE_ANT) != -1) {
|
||||
// Directive found; check for second directive or name=value
|
||||
if ((line.lastIndexOf(DIRECTIVE_CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON) != -1)
|
||||
|| (line.lastIndexOf("=") != -1)) {
|
||||
throw new IllegalArgumentException("Line appears to be malformed: " + line);
|
||||
}
|
||||
}
|
||||
|
||||
// Skip lines that are not directives
|
||||
if (line.lastIndexOf('=') == -1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (line.lastIndexOf("==") != -1) {
|
||||
throw new IllegalArgumentException("Only single equals should be used in line " + line);
|
||||
}
|
||||
|
||||
// Tokenize the line into its name/value tokens
|
||||
// As per SEC-219, use the LAST equals as the delimiter between LHS and RHS
|
||||
String name = StringSplitUtils.substringBeforeLast(line, "=");
|
||||
String value = StringSplitUtils.substringAfterLast(line, "=");
|
||||
|
||||
if (!StringUtils.hasText(name) || !StringUtils.hasText(value)) {
|
||||
throw new IllegalArgumentException("Failed to parse a valid name/value pair from " + line);
|
||||
}
|
||||
|
||||
// Attempt to detect malformed lines (as per SEC-204)
|
||||
if (source.isConvertUrlToLowercaseBeforeComparison()
|
||||
&& source.getDecorated() instanceof PathBasedFilterInvocationDefinitionMap) {
|
||||
// Should all be lowercase; check each character
|
||||
// We only do this for Ant (regexp have control chars)
|
||||
for (int i = 0; i < name.length(); i++) {
|
||||
String character = name.substring(i, i + 1);
|
||||
|
||||
if (!character.toLowerCase().equals(character)) {
|
||||
throw new IllegalArgumentException("You are using the "
|
||||
+ DIRECTIVE_CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
|
||||
+ " with Ant Paths, yet you have specified an uppercase character in line: " + line
|
||||
+ " (character '" + character + "')");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FilterInvocationDefinitionSourceMapping mapping = new FilterInvocationDefinitionSourceMapping();
|
||||
mapping.setUrl(name);
|
||||
|
||||
String[] tokens = org.springframework.util.StringUtils
|
||||
.commaDelimitedListToStringArray(value);
|
||||
|
||||
for (int i = 0; i < tokens.length; i++) {
|
||||
mapping.addConfigAttribute(tokens[i].trim());
|
||||
}
|
||||
|
||||
mappings.add(mapping);
|
||||
}
|
||||
source.setMappings(mappings);
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if we need to override the default definition map
|
||||
if (s.lastIndexOf(DIRECTIVE_PATTERN_TYPE_APACHE_ANT) != -1) {
|
||||
source.setDecorated(new PathBasedFilterInvocationDefinitionMap());
|
||||
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug(("Detected " + DIRECTIVE_PATTERN_TYPE_APACHE_ANT
|
||||
+ " directive; using Apache Ant style path expressions"));
|
||||
}
|
||||
} else {
|
||||
source.setDecorated(new RegExpBasedFilterInvocationDefinitionMap());
|
||||
}
|
||||
|
||||
if (s.lastIndexOf(DIRECTIVE_CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON) != -1) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Detected " + DIRECTIVE_CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
|
||||
+ " directive; Instructing mapper to convert URLs to lowercase before comparison");
|
||||
}
|
||||
|
||||
source.setConvertUrlToLowercaseBeforeComparison(true);
|
||||
}
|
||||
|
||||
BufferedReader br = new BufferedReader(new StringReader(s));
|
||||
int counter = 0;
|
||||
String line;
|
||||
|
||||
List mappings = new ArrayList();
|
||||
|
||||
while (true) {
|
||||
counter++;
|
||||
|
||||
try {
|
||||
line = br.readLine();
|
||||
} catch (IOException ioe) {
|
||||
throw new IllegalArgumentException(ioe.getMessage());
|
||||
}
|
||||
|
||||
if (line == null) {
|
||||
break;
|
||||
}
|
||||
|
||||
line = line.trim();
|
||||
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Line " + counter + ": " + line);
|
||||
}
|
||||
|
||||
if (line.startsWith("//")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Attempt to detect malformed lines (as per SEC-204)
|
||||
if (line.lastIndexOf(DIRECTIVE_CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON) != -1) {
|
||||
// Directive found; check for second directive or name=value
|
||||
if ((line.lastIndexOf(DIRECTIVE_PATTERN_TYPE_APACHE_ANT) != -1) || (line.lastIndexOf("=") != -1)) {
|
||||
throw new IllegalArgumentException("Line appears to be malformed: " + line);
|
||||
}
|
||||
}
|
||||
|
||||
// Attempt to detect malformed lines (as per SEC-204)
|
||||
if (line.lastIndexOf(DIRECTIVE_PATTERN_TYPE_APACHE_ANT) != -1) {
|
||||
// Directive found; check for second directive or name=value
|
||||
if ((line.lastIndexOf(DIRECTIVE_CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON) != -1)
|
||||
|| (line.lastIndexOf("=") != -1)) {
|
||||
throw new IllegalArgumentException("Line appears to be malformed: " + line);
|
||||
}
|
||||
}
|
||||
|
||||
// Skip lines that are not directives
|
||||
if (line.lastIndexOf('=') == -1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (line.lastIndexOf("==") != -1) {
|
||||
throw new IllegalArgumentException("Only single equals should be used in line " + line);
|
||||
}
|
||||
|
||||
// Tokenize the line into its name/value tokens
|
||||
// As per SEC-219, use the LAST equals as the delimiter between LHS and RHS
|
||||
String name = StringSplitUtils.substringBeforeLast(line, "=");
|
||||
String value = StringSplitUtils.substringAfterLast(line, "=");
|
||||
|
||||
if (!StringUtils.hasText(name) || !StringUtils.hasText(value)) {
|
||||
throw new IllegalArgumentException("Failed to parse a valid name/value pair from " + line);
|
||||
}
|
||||
|
||||
// Attempt to detect malformed lines (as per SEC-204)
|
||||
if (source.isConvertUrlToLowercaseBeforeComparison()
|
||||
&& source.getDecorated() instanceof PathBasedFilterInvocationDefinitionMap) {
|
||||
// Should all be lowercase; check each character
|
||||
// We only do this for Ant (regexp have control chars)
|
||||
for (int i = 0; i < name.length(); i++) {
|
||||
String character = name.substring(i, i + 1);
|
||||
|
||||
if (!character.toLowerCase().equals(character)) {
|
||||
throw new IllegalArgumentException("You are using the "
|
||||
+ DIRECTIVE_CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
|
||||
+ " with Ant Paths, yet you have specified an uppercase character in line: " + line
|
||||
+ " (character '" + character + "')");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FilterInvocationDefinitionSourceMapping mapping = new FilterInvocationDefinitionSourceMapping();
|
||||
mapping.setUrl(name);
|
||||
|
||||
String[] tokens = StringUtils.commaDelimitedListToStringArray(value);
|
||||
|
||||
for (int i = 0; i < tokens.length; i++) {
|
||||
mapping.addConfigAttribute(tokens[i].trim());
|
||||
}
|
||||
|
||||
mappings.add(mapping);
|
||||
}
|
||||
source.setMappings(mappings);
|
||||
|
||||
|
||||
setValue(source.getDecorated());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue