001 package com.thaiopensource.relaxng.impl;
002
003 abstract class ApplyAfterFunction extends AbstractPatternFunction {
004 private final ValidatorPatternBuilder builder;
005
006 ApplyAfterFunction(ValidatorPatternBuilder builder) {
007 this.builder = builder;
008 }
009
010 public Object caseAfter(AfterPattern p) {
011 return builder.makeAfter(p.getOperand1(), apply(p.getOperand2()));
012 }
013
014 public Object caseChoice(ChoicePattern p) {
015 return builder.makeChoice(p.getOperand1().applyForPattern(this),
016 p.getOperand2().applyForPattern(this));
017 }
018
019 public Object caseNotAllowed(NotAllowedPattern p) {
020 return p;
021 }
022
023 public Object caseOther(Pattern p) {
024 throw new RuntimeException("apply after botch");
025 }
026
027 abstract Pattern apply(Pattern p);
028 }