Package com.bbn.openmap.vpfservlet

Source Code of com.bbn.openmap.vpfservlet.ThematicIndexServlet

// **********************************************************************
// <copyright>
//  BBN Technologies
//  10 Moulton Street
//  Cambridge, MA 02138
//  (617) 873-8000
//
//  Copyright (C) BBNT Solutions LLC. All rights reserved.
// </copyright>
// **********************************************************************
// $Source: /cvs/distapps/openmap/src/vpfservlet/WEB-INF/src/com/bbn/openmap/vpfservlet/ThematicIndexServlet.java,v $
// $Revision: 1.2.2.2 $ $Date: 2005/08/11 21:03:07 $ $Author: dietrick $
// **********************************************************************
package com.bbn.openmap.vpfservlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.bbn.openmap.io.FormatException;
import com.bbn.openmap.layer.util.html.Element;
import com.bbn.openmap.layer.util.html.HtmlListElement;
import com.bbn.openmap.layer.util.html.ListElement;
import com.bbn.openmap.layer.util.html.TableHeaderElement;
import com.bbn.openmap.layer.util.html.TableRowElement;
import com.bbn.openmap.layer.util.html.WrapElement;
import com.bbn.openmap.layer.vpf.DcwThematicIndex;

/**
* This servlet generates HTML for VPF files in thematic index format.
*/
public class ThematicIndexServlet extends VPFHttpServlet {

    /**
     * A do-nothing constructor - init does all the work.
     */
    public ThematicIndexServlet() {
        super();
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String filePath = (String) request.getAttribute(DispatchServlet.ROOTPATH_FILENAME);
        if (filePath == null) {
            String pathInfo = setPathInfo(request);
            filePath = contextInfo.resolvePath(pathInfo);
            if (!pathOkay(filePath, pathInfo, response)) {
                return;
            }
        }

        DcwThematicIndex ti;
        try {
            ti = new DcwThematicIndex(filePath, false);
        } catch (FormatException fe) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND, fe.toString());
            return;
        }

        String valIndex = request.getParameter("valIndex");
        if (valIndex != null) {
            showTableIndexed(request, response, valIndex, ti);
        } else {
            showTableData(request, response, ti, filePath);
        }
        try {
            ti.close();
        } catch (FormatException fe) {
            // ignore
        }
    }

    protected void showTableData(HttpServletRequest request,
                                 HttpServletResponse response,
                                 DcwThematicIndex ti, String filePath)
            throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        String title = "VPF Thematic Index for " + new File(filePath).getName();
        String basepath = getRootDir(request);
        out.println("<HEAD><TITLE>" + title + "</TITLE></HEAD>");
        out.println(getStylesheetHTML(request));
        out.println("<BODY><H1 CLASS=TableHeadingColor>" + title + "</H1>");

        out.println("<H3 CLASS=TableSubheadingColor>General Thematic Index Information</H3>");
        HtmlListElement list = new HtmlListElement();
        list.addElement("Number of Codes: " + ti.getNumberOfCodes());
        list.addElement("Number of Rows: " + ti.getNumberOfRows());
        list.addElement("Type Of Index: " + ti.getTypeOfIndex());
        list.addElement("Field Type of Index: " + ti.getFieldTypeOfIndex());
        list.addElement("Number of Data Elements: "
                + ti.getNumberOfDataElements());
        list.addElement("Data Type Specifier: " + ti.getDataTypeSpecifier());
        list.addElement("Table Indexed: "
                + fileURL(request, response, basepath, ti.getTableIndexed()));
        list.addElement("Column Indexed: " + ti.getColumnIndexed());
        list.addElement("Fields Sorted: " + ti.getSorted());
        list.generate(out);

        out.println("<H3 CLASS=TableSubheadingColor>Thematic Index Data</H3>");
        Object[] values = ti.getValueIndexes();
        ListElement rows = null;
        Element table = null;
        TableRowElement th = new TableRowElement();
        th.addElement(new TableHeaderElement("CLASS=NavBarCell2", "Index Value"));
        th.addElement(new TableHeaderElement("Count"));
        th.addElement(new TableHeaderElement("Rows..."));
        String valStr = "<A HREF=\"" + request.getContextPath()
                + request.getServletPath() + getPathInfo(request)
                + "?valIndex=";
        for (int i = 0; i < values.length; i++) {
            if ((i % 50) == 0) {
                if (table != null) {
                    table.generate(out);
                }
                rows = new ListElement();
                table = new WrapElement("table", "BORDER=1", rows);
                rows.addElement(th);
            }
            TableRowElement tr = new TableRowElement();
            rows.addElement(tr);
            tr.addElement(valStr + values[i] + "\">" + values[i] + "</A>");
            try {
                int[] intvals = ti.get(values[i]);
                tr.addElement(Integer.toString(intvals.length));
                StringBuffer sb = new StringBuffer();
                sb.append(intvals[0]);
                for (int j = 1; j < intvals.length; j++) {
                    sb.append(", ").append(intvals[j]);
                }
                tr.addElement(sb.toString());
            } catch (FormatException fe) {
                tr.addElement(fe.toString());
            }
        }
        table.generate(out);
    }

    protected void showTableIndexed(HttpServletRequest request,
                                    HttpServletResponse response,
                                    String valIndex, DcwThematicIndex ti)
            throws IOException, ServletException {
        Object val = null;
        switch (ti.getFieldTypeOfIndex()) {
        case 'I':
            val = Integer.valueOf(valIndex);
            break;
        case 'S':
            val = Short.valueOf(valIndex);
            break;
        case 'T':
            val = valIndex;
            break;
        }
        try {
            int[] vals = ti.get(val);
            request.setAttribute(Data.ROWLIST_OBJECT, vals);
        } catch (FormatException fe) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND, fe.toString());
        }
        String pi = request.getPathInfo();
        int lin = pi.lastIndexOf('/') + 1;
        RequestDispatcher rd = request.getRequestDispatcher("/UnknownType"
                + pi.substring(0, lin) + ti.getTableIndexed());
        rd.forward(request, response);
    }

}
TOP

Related Classes of com.bbn.openmap.vpfservlet.ThematicIndexServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.