com.thaiopensource.relaxng.pattern.FeasibleTransform Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of wicketstuff-jing Show documentation
Show all versions of wicketstuff-jing Show documentation
Jing is a validator for RELAX NG and other schema languages. This
project was taken from http://code.google.com/p/jing-trang and
mavenized for inclusion in the Wicket Stuff HTML Validator.
The code was taken from the 20091111 release.
package com.thaiopensource.relaxng.pattern;
import java.util.HashSet;
import java.util.Set;
public class FeasibleTransform {
private static class FeasiblePatternFunction extends AbstractPatternFunction {
private final SchemaPatternBuilder spb;
private final Set elementDone = new HashSet();
FeasiblePatternFunction(SchemaPatternBuilder spb) {
this.spb = spb;
}
public Pattern caseChoice(ChoicePattern p) {
return spb.makeChoice(p.getOperand1().apply(this), p.getOperand2().apply(this));
}
public Pattern caseGroup(GroupPattern p) {
return spb.makeGroup(p.getOperand1().apply(this), p.getOperand2().apply(this));
}
public Pattern caseInterleave(InterleavePattern p) {
return spb.makeInterleave(p.getOperand1().apply(this), p.getOperand2().apply(this));
}
public Pattern caseOneOrMore(OneOrMorePattern p) {
return spb.makeOneOrMore(p.getOperand().apply(this));
}
public Pattern caseElement(ElementPattern p) {
if (!elementDone.contains(p)) {
elementDone.add(p);
p.setContent(p.getContent().apply(this));
}
return spb.makeOptional(p);
}
public Pattern caseOther(Pattern p) {
return spb.makeOptional(p);
}
}
public static Pattern transform(SchemaPatternBuilder spb, Pattern p) {
return p.apply(new FeasiblePatternFunction(spb));
}
}