package org.infinispan.demo.distexec;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.infinispan.Cache;
import org.infinispan.distexec.DistributedCallable;
@SuppressWarnings("serial")
public class CacheValueRegEx<K, V, T> implements DistributedCallable<K, String, List<K>>, Serializable {
Cache<K, String> cache;
Set<K> keys;
public String pattern = "The Project Gutenberg EBook of The Complete Works of William Shakespeare";
@Override
public void setEnvironment(Cache<K, String> cache, Set<K> keys) {
this.cache = cache;
this.keys = keys;
}
@Override
public List<K> call() throws Exception {
List<K> result = new ArrayList<K>();
Pattern regexp = Pattern.compile(pattern);
Logger logger = Logger.getLogger(getClass().getName());
logger.info("Searching for regular expression '" + pattern + "'");
for (Entry<K, String> entry : this.cache.entrySet()) {
int foundCount = 0;
String valueString = entry.getValue();
Matcher matcher = regexp.matcher(valueString);
while (matcher.find()) {
foundCount++;
}
if (foundCount > 0) {
logger.finest("Found regular expression '" + pattern + "' " + foundCount + " times in key '"
+ entry.getKey() + "'");
result.add(entry.getKey());
}
}
return result;
}
public void setPattern(String pattern) {
this.pattern = pattern;
}
}