/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * See LICENSE.txt included in this distribution for the specific * language governing permissions and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at LICENSE.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. */ package org.opensolaris.opengrok.analysis.archive; import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.io.StringReader; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.opensolaris.opengrok.analysis.FileAnalyzer; import org.opensolaris.opengrok.analysis.FileAnalyzerFactory; import org.opensolaris.opengrok.analysis.XrefWriter; import org.opensolaris.opengrok.analysis.plain.PlainFullTokenizer; import org.opensolaris.opengrok.web.Util; /** * Analyzes Zip files * Created on September 22, 2005 * * @author Chandan */ public class ZipAnalyzer extends FileAnalyzer { private final StringBuilder content; private static final Reader dummy = new StringReader(""); private final PlainFullTokenizer plainfull; /** * Create a new analyzer. * @param factory the factory to use to obtain default settings */ protected ZipAnalyzer(FileAnalyzerFactory factory) { super(factory); content = new StringBuilder(64*1024); plainfull = new PlainFullTokenizer(dummy); } /** * {@inheritDoc} */ @Override public void analyze(Document doc, InputStream in) throws IOException { content.setLength(0); ZipInputStream zis = new ZipInputStream(in); ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { content.append(entry.getName()).append('\n'); } content.trimToSize(); doc.add(new Field("full",dummy)); } /** * {@inheritDoc} */ @Override public TokenStream overridableTokenStream(String fieldName, Reader reader) { if("full".equals(fieldName)) { char[] cs = new char[content.length()]; content.getChars(0, cs.length, cs, 0); plainfull.reInit(cs, cs.length); return plainfull; } return super.overridableTokenStream(fieldName, reader); } /** * {@inheritDoc} */ @Override public void writeXref(XrefWriter out) throws IOException { out.write(Util.htmlize(content.toString(), "
")); } }