/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * 
 * Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved.
 * 
 * The contents of this file are subject to the terms of the GNU
 * General Public License Version 3 only ("GPL").  
 * You may not use this file except in compliance with the License. 
 * You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html
 * See the License for the specific language governing permissions and limitations under the License.
 * 
 * When distributing the software, include this License Header Notice in each file.
 * 
 */

package org.jopendocument.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class ODTContentExtractor {

	private File file;

	private String text;

	public ODTContentExtractor(File f) {
		this.file = f;
	}

	public void load() throws IOException {
		ZipFile zFile = new ZipFile(this.file);
		ZipEntry e = zFile.getEntry("content.xml");
		InputStream in = zFile.getInputStream(e);

		BufferedReader r = new BufferedReader(new InputStreamReader(in));

		final char[] chars = new char[(int) e.getSize()];
		r.read(chars);
		StringBuilder builder = new StringBuilder();
		boolean add = false;
		final int length = chars.length;
		for (int i = 0; i < length; i++) {
			char c = chars[i];
			if (c == '<') {
				add = false;
			} else if (c == '>') {
				add = true;
			} else if (add) {
				builder.append(c);
			}
		}
		in.close();
		zFile.close();
		this.text = builder.toString();
	}

	/**
	 * Checks if the file contains a word. This method is case insensitive.
	 * 
	 * @param s
	 *            a word or text
	 * @return true if the text if found
	 */
	public boolean containsIgnoreCase(String s) {
		String all = this.text.toLowerCase();
		String string = s.toLowerCase();
		return (all.indexOf(string) >= 0);
	}

}
