/*
* Copyright 2004 Guy Van den Broeck
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.outerj.daisy.diff;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Locale;
import org.outerj.daisy.diff.html.HTMLDiffer;
import org.outerj.daisy.diff.html.HtmlSaxDiffOutput;
import org.outerj.daisy.diff.html.SideBySideHTMLDiffer;
import org.outerj.daisy.diff.html.TextNodeComparator;
import org.outerj.daisy.diff.html.dom.DomTreeBuilder;
import org.outerj.daisy.diff.tag.TagComparator;
import org.outerj.daisy.diff.tag.TagDiffer;
import org.outerj.daisy.diff.tag.TagSaxDiffOutput;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
public class DaisyDiff {
/**
* Diffs two html files, outputting the result to the specified consumer.
*/
public static void diffHTML(InputSource oldSource, InputSource newSource,
ContentHandler consumer, String prefix, Locale locale)
throws SAXException, IOException {
DomTreeBuilder oldHandler = new DomTreeBuilder();
XMLReader xr1 = XMLReaderFactory.createXMLReader();
xr1.setContentHandler(oldHandler);
xr1.parse(oldSource);
TextNodeComparator leftComparator = new TextNodeComparator(oldHandler,
locale);
DomTreeBuilder newHandler = new DomTreeBuilder();
XMLReader xr2 = XMLReaderFactory.createXMLReader();
xr2.setContentHandler(newHandler);
xr2.parse(newSource);
TextNodeComparator rightComparator = new TextNodeComparator(newHandler,
locale);
HtmlSaxDiffOutput output = new HtmlSaxDiffOutput(consumer, prefix);
SideBySideHTMLDiffer differ = new SideBySideHTMLDiffer(output);
differ.diff(leftComparator, rightComparator);
}
/**
* Diffs two html files word for word as source, outputting the result to
* the specified consumer.
*/
public static void diffTag(String oldText, String newText,
ContentHandler consumer) throws Exception {
consumer.startDocument();
TagComparator oldComp = new TagComparator(oldText);
TagComparator newComp = new TagComparator(newText);
TagSaxDiffOutput output = new TagSaxDiffOutput(consumer);
TagDiffer differ = new TagDiffer(output);
differ.diff(oldComp, newComp);
consumer.endDocument();
}
/**
* Diffs two html files word for word as source, outputting the result to
* the specified consumer.
*/
public static void diffTag(BufferedReader oldText, BufferedReader newText,
ContentHandler consumer) throws Exception {
TagComparator oldComp = new TagComparator(oldText);
TagComparator newComp = new TagComparator(newText);
TagSaxDiffOutput output = new TagSaxDiffOutput(consumer);
TagDiffer differ = new TagDiffer(output);
differ.diff(oldComp, newComp);
}
}