001 package com.thaiopensource.relaxng.impl;
002
003 import com.thaiopensource.validate.Validator;
004 import com.thaiopensource.xml.sax.ForkContentHandler;
005 import com.thaiopensource.xml.sax.ForkDTDHandler;
006 import org.xml.sax.ContentHandler;
007 import org.xml.sax.DTDHandler;
008
009 public class CombineValidator implements Validator {
010 private final Validator v1;
011 private final Validator v2;
012 private ContentHandler contentHandler;
013 private DTDHandler dtdHandler;
014
015 public CombineValidator(Validator v1, Validator v2) {
016 this.v1 = v1;
017 this.v2 = v2;
018 createHandlers();
019 }
020
021 public void reset() {
022 v1.reset();
023 v2.reset();
024 createHandlers();
025 }
026
027 public ContentHandler getContentHandler() {
028 return contentHandler;
029 }
030
031 public DTDHandler getDTDHandler() {
032 return dtdHandler;
033 }
034
035 private void createHandlers() {
036 contentHandler = new ForkContentHandler(v1.getContentHandler(),
037 v2.getContentHandler());
038 DTDHandler d1 = v1.getDTDHandler();
039 DTDHandler d2 = v2.getDTDHandler();
040 if (d1 != null && d2 != null)
041 dtdHandler = new ForkDTDHandler(d1, d2);
042 else if (d1 != null)
043 dtdHandler = d1;
044 else if (d2 != null)
045 dtdHandler = d2;
046 else
047 dtdHandler = null;
048 }
049 }