Files
HRMS/hrmsEjb/org/apache/commons/digester/RulesBase.java
2025-07-28 13:56:49 +05:30

101 lines
2.6 KiB
Java

package org.apache.commons.digester;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
public class RulesBase implements Rules {
protected HashMap cache = new HashMap();
protected Digester digester = null;
protected String namespaceURI = null;
protected ArrayList rules = new ArrayList();
public Digester getDigester() {
return this.digester;
}
public void setDigester(Digester digester) {
this.digester = digester;
Iterator items = this.rules.iterator();
while (items.hasNext()) {
Rule item = items.next();
item.setDigester(digester);
}
}
public String getNamespaceURI() {
return this.namespaceURI;
}
public void setNamespaceURI(String namespaceURI) {
this.namespaceURI = namespaceURI;
}
public void add(String pattern, Rule rule) {
List list = (List)this.cache.get(pattern);
if (list == null) {
list = new ArrayList();
this.cache.put(pattern, list);
}
list.add(rule);
this.rules.add(rule);
if (this.digester != null)
rule.setDigester(this.digester);
if (this.namespaceURI != null)
rule.setNamespaceURI(this.namespaceURI);
}
public void clear() {
this.cache.clear();
this.rules.clear();
}
public List match(String pattern) {
return match(null, pattern);
}
public List match(String namespaceURI, String pattern) {
List rulesList = lookup(namespaceURI, pattern);
if (rulesList == null || rulesList.size() < 1) {
String longKey = "";
Iterator keys = this.cache.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
if (key.startsWith("*/") && (
pattern.equals(key.substring(2)) || pattern.endsWith(key.substring(1))))
if (key.length() > longKey.length()) {
rulesList = lookup(namespaceURI, key);
longKey = key;
}
}
}
if (rulesList == null)
rulesList = new ArrayList();
return rulesList;
}
public List rules() {
return this.rules;
}
protected List lookup(String namespaceURI, String pattern) {
List list = (List)this.cache.get(pattern);
if (list == null)
return null;
if (namespaceURI == null || namespaceURI.length() == 0)
return list;
ArrayList results = new ArrayList();
Iterator items = list.iterator();
while (items.hasNext()) {
Rule item = items.next();
if (namespaceURI.equals(item.getNamespaceURI()) || item.getNamespaceURI() == null)
results.add(item);
}
return results;
}
}