All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.thaiopensource.relaxng.pattern.FeasibleTransform Maven / Gradle / Ivy

Go to download

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.

There is a newer version: 1.11
Show newest version
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));
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy