package net.sourceforge.squirrel_sql.client.session.schemainfo;
import java.util.ArrayList;
import java.util.regex.Pattern;
public class FilterMatcher
{
private String _sqlOrMetaDataMatchString;
private ArrayList<Pattern> _includeFilterPatterns = new ArrayList<Pattern>();
private ArrayList<Pattern> _excludeFilterPatterns = new ArrayList<Pattern>();
public FilterMatcher(String filterInclude, String filterExclude)
{
if(null != filterInclude)
{
String[] splits = filterInclude.split(",");
for (int i = 0; i < splits.length; i++)
{
if(0 < splits[i].trim().length())
{
String regExStr = splits[i].replaceAll("\\.", "\\\\.")
.replaceAll("%", ".*")
.replaceAll("_",".{1}");
_includeFilterPatterns.add(Pattern.compile(regExStr, Pattern.CASE_INSENSITIVE));
if(1 == _includeFilterPatterns.size())
{
_sqlOrMetaDataMatchString = splits[i];
}
}
}
}
if(null != filterExclude)
{
String[] splits = filterExclude.split(",");
for (int i = 0; i < splits.length; i++)
{
if(0 < splits[i].trim().length())
{
String regExStr = splits[i].replaceAll("\\.", "\\\\.")
.replaceAll("%", ".*")
.replaceAll("_",".{1}");
_excludeFilterPatterns.add(Pattern.compile(regExStr, Pattern.CASE_INSENSITIVE));
}
}
}
}
public boolean matches(String simpleObjectName)
{
return matchesPatterns(simpleObjectName, _includeFilterPatterns, false) && !matchesPatterns(simpleObjectName, _excludeFilterPatterns, true);
}
private boolean matchesPatterns(String simpleObjectName, ArrayList<Pattern> patterns, boolean exclude)
{
boolean matchesPatterns;
if(exclude)
{
matchesPatterns = false;
}
else
{
matchesPatterns = (0 == patterns.size());
}
for (Pattern includeFilterPattern : patterns)
{
if(includeFilterPattern.matcher(simpleObjectName).matches())
{
matchesPatterns = true;
break;
}
}
return matchesPatterns;
}
public String getMetaDataMatchString()
{
return _sqlOrMetaDataMatchString;
}
public String getSqlLikeMatchString()
{
if(null != _sqlOrMetaDataMatchString)
{
return _sqlOrMetaDataMatchString;
}
else
{
return "%";
}
}
public static void main(String[] args)
{
boolean b = new FilterMatcher("Geer%", null).matches("Gerhard");
System.out.println(b);
}
}