/*
 * $Id: HtmlDocConverter.java,v 1.7 2006/07/13 09:14:09 korowa Exp $
 *
 * Copyright (c) Siemens AG 2008 
 *           (c) Universität Paderborn 2008 
 * Licensed under EUPL 1.1. 
 *
 * $Log: HtmlDocConverter.java,v $
 * Revision 1.7  2006/07/13 09:14:09  korowa
 * Ne abgefangen.
 *
 * Revision 1.6  2006/06/06 20:36:02  marbobo
 * + Mögliche NPE abgefangen
 *
 * Revision 1.5  2003/11/29 22:13:53  koppy
 * InputStreams in VKCInputStream gekappselt
 *
 * Revision 1.4  2003/06/26 15:15:22  lawern
 * XLS und PPT eingefügt und Konverter überarbeitet
 *
 * Revision 1.3  2003/06/06 10:57:22  lawern
 * Anpassungen an Retriever
 *
 * Revision 1.2  2003/03/20 09:11:34  lawern
 * Konverter und Analyse überarbeitet
 *
 * Revision 1.1  2003/03/07 11:55:47  lawern
 * initiale Version
 *
 */
package vkc.converter;

import java.io.ByteArrayInputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import vkc.util.VKCInputStream;

/**
 * Klasse zum Konvertieren von Textdokumenten.
 *
 * @author lawern
 */
public class HtmlDocConverter extends DocConverter {
	private static Object monitor = new Object();

	HtmlExtractor extractor = null;

	boolean debug = false;

	public HtmlDocConverter() {
	}

	public void convert(URL docFile, Collection conversions) {
		//Hier könnte man optimieren indem man einen Pool solcher Objekte anlegt:
		extractor = new HtmlExtractor();

		extractor.render(docFile.toString());

		//Analyse aus Performanz-Gründen nur sequentiell ausführen
		synchronized (monitor) {
			extractor.analyse();
		}
	}

	/**
	 * Konvertiert eine Collection von Html-Dokumenten
	 *
	 * @param docFiles zu konvertierende Dokumente
	 * @param conversions Konvertierungen die erzeugt werden sollen
	 */
	public void convert(Collection docFiles, Collection conversions) {
		//Hier könnte man optimieren indem man einen Pool solcher Objekte anlegt:
		extractor = new HtmlExtractor();

		URL docFile;

		for (Iterator it = docFiles.iterator(); it.hasNext();) {
			docFile = (URL) it.next();

			if (debug) {
				System.out.println("render: " + docFile.toString());
			}

			extractor.render(docFile.toString());

			//Analyse aus Performanz-Gründen nur sequentiell ausführen
			synchronized (monitor) {
				extractor.analyse();
			}
		}
	}

	/**
	 * Gibt eine Liste zurueck, der alle HREFs einer Seite enthält.
	 *
	 * @return Link-Vektor
	 */
	public ArrayList getLinks() {
		if (extractor != null) {
			return extractor.getLinks();
		}

		return null;
	}

	/**
	 * Liefert den Titel des Dokuments zurück.
	 *
	 * @return Titel des Dokuments oder <code>null</code>
	 */
	public String getTitle() {
		if (extractor != null) {
			return extractor.getTitle();
		}

		return null;
	}

	/**
	 * Liefert eine Liste mit Objekten vom Typ TextStyle zurück, welche das
	 * Dokument beschreiben.
	 *
	 * @return Liste mit Objekten vom Typ TextStyle
	 */
	public Collection getElements() {
		if(extractor==null)return null;
		return extractor.getHtmlElements();
	}

	/**
	 * Liefert nach dem Aufruf der convert-Methode den Stream der
	 * Tdf-Konvertierung.
	 *
	 * @return Stream der Tdf-Konvertierung oder <code>null</code> falls er
	 *         nicht existiert
	 */
	public VKCInputStream getTdfStream() {		
		if(extractor == null)return null;
		byte[] tdfArray = extractor.getTdfArray();
		return new VKCInputStream(new ByteArrayInputStream(tdfArray), tdfArray.length);
	}
}