//System.err.println("DescriptionPattern: not converting " + desc);
} else {
descriptionMode = DescriptionMode.STRINGS;
descPattern = null;
exactMatch = null;
stringFilter = new ArrayStringFilter(ArrayStringFilter.Mode.EXACT, matchedGroup.split("[|]"));
//System.err.println("DescriptionPattern: converting " + desc + " to " + stringFilter);
}
} else if (CASE_INSENSITIVE_PATTERN.matcher(desc).matches()) {
Matcher matcher = CASE_INSENSITIVE_PATTERN.matcher(desc);
matcher.matches();
String matchedGroup = null;
for (int i = 1; i <= matcher.groupCount(); ++i) {
if (matcher.group(i) != null) {
matchedGroup = matcher.group(i);
break;
}
}
matchedGroup = matchedGroup.replaceAll("\\\\", "");
if (matchedGroup.split("[|]").length > MAX_STRING_MATCHER_SIZE) {
descriptionMode = DescriptionMode.PATTERN;
descPattern = Pattern.compile(desc.substring(1, desc.length() - 1));
exactMatch = null;
stringFilter = null;
//System.err.println("DescriptionPattern: not converting " + desc);
} else {
descriptionMode = DescriptionMode.STRINGS;
descPattern = null;
exactMatch = null;
stringFilter = new ArrayStringFilter(ArrayStringFilter.Mode.CASE_INSENSITIVE, matchedGroup.split("[|]"));
//System.err.println("DescriptionPattern: converting " + desc + " to " + stringFilter);
}
} else if (PREFIX_PATTERN.matcher(desc).matches()) {
Matcher matcher = PREFIX_PATTERN.matcher(desc);
matcher.matches();
String matchedGroup = null;
for (int i = 1; i <= matcher.groupCount(); ++i) {
if (matcher.group(i) != null) {
matchedGroup = matcher.group(i);
break;
}
}
if (matchedGroup.split("\\|").length > MAX_STRING_MATCHER_SIZE) {
descriptionMode = DescriptionMode.PATTERN;
descPattern = Pattern.compile(desc.substring(1, desc.length() - 1));
exactMatch = null;
stringFilter = null;
//System.err.println("DescriptionPattern: not converting " + desc);
} else {
descriptionMode = DescriptionMode.STRINGS;
descPattern = null;
exactMatch = null;
stringFilter = new ArrayStringFilter(ArrayStringFilter.Mode.PREFIX, matchedGroup.split("[|]"));
//System.err.println("DescriptionPattern: converting " + desc + " to " + stringFilter);
}
} else if (desc.matches("/.*/")) {
descriptionMode = DescriptionMode.PATTERN;
descPattern = Pattern.compile(desc.substring(1, desc.length() - 1));
exactMatch = null;
stringFilter = null;
} else if (desc.indexOf('|') >= 0) {
// patterns which contain ORs are a special case; we either
// promote those to regex match or make a string matcher out
// of them. for short enough disjunctions, a simple string
// matcher can be more efficient than a regex.
String[] words = desc.split("[|]");
if (words.length <= MAX_STRING_MATCHER_SIZE) {
descriptionMode = DescriptionMode.STRINGS;
descPattern = null;
exactMatch = null;
stringFilter = new ArrayStringFilter(ArrayStringFilter.Mode.EXACT, words);
} else {
descriptionMode = DescriptionMode.PATTERN;
descPattern = Pattern.compile("^(?:" + desc + ")$");
exactMatch = null;
stringFilter = null;