it.unimi.di.big.mg4j.query.GenericItem.java Source code

Java tutorial

Introduction

Here is the source code for it.unimi.di.big.mg4j.query.GenericItem.java

Source

package it.unimi.di.big.mg4j.query;

/*       
 * MG4J: Managing Gigabytes for Java (big)
 *
 * Copyright (C) 2005-2015 Sebastiano Vigna 
 *
 *  This program is free software; you can redistribute it and/or modify it
 *  under the terms of the GNU General Public License as published by the Free
 *  Software Foundation; either version 3 of the License, or (at your option)
 *  any later version.
 *
 *  This program is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 *  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 *  for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, see <http://www.gnu.org/licenses/>.
 *
 */
import it.unimi.di.big.mg4j.document.Document;
import it.unimi.di.big.mg4j.document.DocumentCollection;
import it.unimi.di.big.mg4j.document.DocumentFactory;
import it.unimi.di.big.mg4j.document.DocumentFactory.FieldType;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Reader;

import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.collections.ExtendedProperties;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.servlet.VelocityViewServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/** An generic item, displaying all document fields.
 * 
 * <P>This kind of {@link it.unimi.di.big.mg4j.query.QueryServlet} item will display each field
 * of a document inside a <samp>FIELDSET</samp> element. It is mainly useful for debugging purposes.
 */

public class GenericItem extends VelocityViewServlet {
    private static final long serialVersionUID = 1L;

    private static final Logger LOGGER = LoggerFactory.getLogger(GenericItem.class);

    @Override
    protected ExtendedProperties loadConfiguration(final ServletConfig config)
            throws FileNotFoundException, IOException {
        return HttpQueryServer.setLiberalResourceLoading(super.loadConfiguration(config));
    }

    public Template handleRequest(final HttpServletRequest request, final HttpServletResponse response,
            final Context context) throws Exception {
        if (request.getParameter("doc") != null) {
            DocumentCollection collection = (DocumentCollection) getServletContext().getAttribute("collection");
            response.setContentType(request.getParameter("m"));
            response.setCharacterEncoding("UTF-8");
            final Document document = collection.document(Long.parseLong(request.getParameter("doc")));
            final DocumentFactory factory = collection.factory();
            final ObjectArrayList<String> fields = new ObjectArrayList<String>();
            final int numberOfFields = factory.numberOfFields();

            LOGGER.debug("ParsingFactory declares " + numberOfFields + " fields");

            for (int field = 0; field < numberOfFields; field++) {
                if (factory.fieldType(field) != FieldType.TEXT)
                    fields.add(StringEscapeUtils.escapeHtml(document.content(field).toString()));
                else
                    fields.add(StringEscapeUtils.escapeHtml(IOUtils.toString((Reader) document.content(field)))
                            .replaceAll("\n", "<br>\n"));
            }
            context.put("title", document.title());
            context.put("fields", fields);
            context.put("factory", factory);
            return getTemplate("it/unimi/dsi/mg4j/query/generic.velocity");
        }

        return null;
    }
}