

package org.apache.cocoon.www.docs.public_.area.district.sector.postcode;

import java.io.File;
import java.io.StringReader;
//import java.net.*;
import java.util.Date;
import java.util.List;
import java.util.Stack;

//import org.w3c.dom.*;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;

//import org.apache.avalon.framework.*;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentSelector;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.excalibur.datasource.DataSourceComponent;
//import org.apache.avalon.framework.util.*;

import org.apache.cocoon.Constants;
import org.apache.cocoon.Roles;
import org.apache.cocoon.components.parser.Parser;
import org.apache.cocoon.generation.Generator;
//import org.apache.cocoon.util.*;

import org.apache.cocoon.components.language.markup.xsp.XSPGenerator;
import org.apache.cocoon.components.language.markup.xsp.XSPObjectHelper;
import org.apache.cocoon.components.language.markup.xsp.XSPRequestHelper;
import org.apache.cocoon.components.language.markup.xsp.XSPResponseHelper;


/* User Imports */

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.Statement;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.sql.Clob;

import java.text.SimpleDateFormat;

import java.text.DecimalFormat;

import java.io.StringWriter;

import java.io.PrintWriter;

import java.io.BufferedInputStream;

import java.io.InputStream;

import org.apache.cocoon.components.language.markup.xsp.XSPUtil;


/**
 * Generated by XSP. Edit at your own risk, :-)
 */
public class theft_xml extends XSPGenerator {

  static {
    dateCreated = 994423686703L;
    dependencies = new File[]{
                   };
  }

  /* Built-in parameters available for use */
  // context    - ServletContext
  // request    - HttpServletRequest
  // response   - HttpServletResponse
  // parameters - parameters defined in the sitemap

  /* User Class Declarations */

  class EsqlConnection {

    Connection connection = null;
    String dburl = null;
    java.util.Properties info = new java.util.Properties();
    int use_limit_clause = 0;
    static final int LIMIT_CLAUSE_POSTGRESQL = 1;
    static final int LIMIT_CLAUSE_MYSQL = 2;
  }
  class EsqlQuery {
    String query;
    Statement statement;
    PreparedStatement prepared_statement;
    ResultSet resultset;
    ResultSetMetaData resultset_metadata;
    /** the position of the current row in the resultset **/
    int position = -1;
    int max_rows = -1;
    int skip_rows = 0;
    boolean results;
  }

  private final String getAscii(ResultSet set, String column) {
    InputStream asciiStream = null;
    byte[] buffer = null;

    try {
      Clob dbClob = set.getClob(column);
      int length = (int) dbClob.length();
      asciiStream = new BufferedInputStream(dbClob.getAsciiStream());
      buffer = new byte[length];
      asciiStream.read(buffer);
      asciiStream.close();
    } catch (Exception e) {
      throw new RuntimeException("Error getting clob data: " +
                                 e.getMessage());
    }
    finally { if (asciiStream != null)
              try {
                  asciiStream.close();
              } catch (Exception ase) {
                  throw new RuntimeException(
                    "Error closing clob stream: " + ase.getMessage());
                }
            }
    if (buffer == null)
      return "";

    return new String(buffer);
  }

  private String formatGeography(String area) {
    return formatGeography(area, "", "", "");
  }

  private String formatGeography(String area, String district) {
    return formatGeography(area, district, "", "");
  }

  private String formatGeography(String area, String district, String sector) {
    return formatGeography(area, district, sector, "");
  }

  private String formatGeography(String area, String district,
                                 String sector, String pc) {

    StringBuffer r = new StringBuffer("");

    area = area.trim().toUpperCase();
    if (!area.equals("")) {
      r.append((area + "  ").substring(0, 2));
      district = district.trim().toUpperCase();
      if (!district.equals("")) {
        r.append(("  " + district).substring(district.length())))
        ; sector = sector.trim().toUpperCase(); if (
            !sector.equals("")) {
          r.append( ("  " + sector).substring(
                      sector.length()))); postcode =
                      postcode.trim().toUpperCase(); if (
                            !postcode.equals("")) {
            r.append( ("  " + postcode). substring(
                        postcode.length()))); }
        }
      }
    }
    return r.toString();
         }


         /**
          * Generate XML data.
          */
         public void generate() throws SAXException {
           this.contentHandler.startDocument();
           AttributesImpl xspAttr = new AttributesImpl();



           this.contentHandler.startPrefixMapping("xspdoc", "http://apache.org/cocoon/XSPDoc/v1");

           this.contentHandler.startPrefixMapping("esql", "http://apache.org/cocoon/SQL/v2");

           this.contentHandler.startPrefixMapping("xsp", "http://apache.org/xsp");

           this.contentHandler.startPrefixMapping("feed", "https://experian.com/xmlfeed1");

           this.contentHandler.startPrefixMapping("geo", "http://experian.com/xsp/geography/1.0");


           this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                            "data", "feed:data", xspAttr);

           xspAttr.clear();


           Stack _esql_connections = new Stack();
           EsqlConnection _esql_connection = null;
           Stack _esql_queries = new Stack();
           EsqlQuery _esql_query = null;
           SQLException _esql_exception = null;
           StringWriter _esql_exception_writer = null;

           this.characters("\n\t\t");

         if (_esql_connection != null) {
             _esql_connections.push(_esql_connection);
           }
           _esql_connection = new EsqlConnection();
         try {

           try {
               Thread.currentThread().getContextClassLoader().loadClass(
                 String.valueOf(""
                                + "com.ashna.jturbo.driver.Driver")).newInstance();
           } catch (Exception _esql_exception_N13) {
               throw new RuntimeException("Error loading driver: "+
                                          String.valueOf(""
                                                         + "com.ashna.jturbo.driver.Driver"));
             }

           try {
               _esql_connection.dburl = String.valueOf(""
                                                       +
                                                       (context.getInitParameter("db1")));

               _esql_connection.info.put("user", String.valueOf(""
                                         +
                                         (parameters.getParameter("id1", ""))));

               _esql_connection.info.put("password", String.valueOf(""
                                         +
                                         (parameters.getParameter("id2", ""))));

               _esql_connection.connection = DriverManager.getConnection(
                                               _esql_connection.dburl, _esql_connection.info);
           } catch (Exception _esql_exception_N13) {
               throw new RuntimeException("Error opening connection to dburl: "+
                                          String.valueOf(""
                                                         +
                                                         (context.getInitParameter("db1"))) + ": "+
                                          _esql_exception_N13.getMessage());
             }

           try {
             if ("false".equals(String.valueOf(""))) {
               if (_esql_connection.connection.getAutoCommit()) {
                   _esql_connection.connection.setAutoCommit(false);
                 }
             } else {
               if (!_esql_connection.connection.getAutoCommit()) {
                   _esql_connection.connection.setAutoCommit(true);
                 }
               }
           } catch (Exception _esql_exception_N13) {
               // do NOT: throw new RuntimeException("Error setting connection autocommit");
             }

             this.characters("\n    \t");

             this.characters("\n\t\t\t");

             this.characters("\n\t\t\t");

             this.characters("\n\t\t\t");

             this.characters("\n\t\t\t");

           if (_esql_query != null) {
               _esql_queries.push(_esql_query);
             }
             _esql_query = new EsqlQuery();
             _esql_query.query = String.valueOf(""
                                                + "\n         SELECT  PerilsTheft.Pctl_B,\n                 PerilsTheft.RISK_1YR,\n                 PerilsTheft.VALUE,\n                 PerilsTheft.VAL_BAND,\n                 PerilsTheft.REPEAT,\n                 PerilsTheft.REP_BAND, \n                 PerilsTheft.Pctl_M,\n                 PerilsTheft.MRISK1YR\n         FROM    PerilsTheft INNER JOIN\n                   PostcodeAliasSector ON PerilsTheft.PostcodeID = PostcodeAliasSector.PostcodeID\n         WHERE   (PostcodeAliasSector.PostcodeAlias = '"
                                                +
                                                (formatGeography(parameters.getParameter("area", ""),
                                                                 parameters.getParameter("district", ""),
                                                                 parameters.getParameter("sector", ""),
                                                                 parameters.getParameter("postcode", "")))
                                                + "')\n       ");
           try {
               _esql_query.max_rows = Integer.parseInt(String.valueOf(""));
           } catch (NumberFormatException e) {}
           try {
               _esql_query.skip_rows = Integer.parseInt(String.valueOf(""));
           } catch (NumberFormatException e) {}
           if (_esql_connection.use_limit_clause > 0) {
             if (_esql_query.max_rows > -1) {
               if (_esql_query.skip_rows > 0) {
                 if (_esql_connection.use_limit_clause ==
                       _esql_connection.LIMIT_CLAUSE_POSTGRESQL) {
                     _esql_query.query +=
                       " LIMIT "+_esql_query.max_rows + ","+
                       _esql_query.skip_rows;
                 } else if (_esql_connection.use_limit_clause ==
                       _esql_connection.LIMIT_CLAUSE_MYSQL) {
                     _esql_query.query +=
                       " LIMIT "+_esql_query.skip_rows + ","+
                       _esql_query.max_rows;
                   }
               } else {
                   _esql_query.query += " LIMIT "+_esql_query.max_rows;
                 }
             } else {
               if (_esql_query.skip_rows > 0) {
                 if (_esql_connection.use_limit_clause ==
                       _esql_connection.LIMIT_CLAUSE_POSTGRESQL) {
                     _esql_query.query +=
                       " OFFSET "+_esql_query.skip_rows;
                 } else if (_esql_connection.use_limit_clause ==
                       _esql_connection.LIMIT_CLAUSE_MYSQL) {
                     throw new RuntimeException("Limit clause may not be used for this query - mysql has not semantics for skipping rows with no maximum");
                   }
                 }
               }
             }
           try {

               _esql_query.statement =
                 _esql_connection.connection.createStatement();
               _esql_query.results =
                 _esql_query.statement.execute(_esql_query.query);

               getLogger().debug("esql query: "+_esql_query.query);

             if (_esql_query.results) {
                 _esql_query.resultset = _esql_query.statement.getResultSet();
                 _esql_query.resultset_metadata =
                   _esql_query.resultset.getMetaData();
                 _esql_query.position = 0;
               if (_esql_connection.use_limit_clause == 0 &&
                     _esql_query.skip_rows > 0) {
                 while (_esql_query.resultset.next()) {
                     _esql_query.position++;
                   if (_esql_query.position == _esql_query.skip_rows) {
                       break;
                     }
                   }
                 }

                 this.characters("\n         ");


                 this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                  "country", "feed:country", xspAttr);

                 xspAttr.clear();


                 this.characters("\n           ");


                 this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                  "county", "feed:county", xspAttr);

                 xspAttr.clear();


                 this.characters("\n             ");


                 xspAttr.addAttribute("", "code", "code", "CDATA",
                                      String.valueOf( parameters.getParameter("area",
                                                                              "").toUpperCase()) + "");


                 this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                  "area", "feed:area", xspAttr);

                 xspAttr.clear();


                 this.characters("\n               ");

                 this.characters("\n               ");


                 xspAttr.addAttribute("", "code", "code", "CDATA",
                                      String.valueOf( parameters.getParameter("district",
                                                                              "").toUpperCase()) + "");


                 this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                  "district", "feed:district", xspAttr);

                 xspAttr.clear();


                 this.characters("\n                 ");

                 this.characters("\n                 ");


                 xspAttr.addAttribute("", "code", "code", "CDATA",
                                      String.valueOf( parameters.getParameter("sector",
                                                                              "").toUpperCase()) + "");


                 this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                  "sector", "feed:sector", xspAttr);

                 xspAttr.clear();


                 this.characters("\n                   ");

                 this.characters("\n                   ");


                 xspAttr.addAttribute("", "code", "code", "CDATA",
                                      String.valueOf( parameters.getParameter("postcode",
                                                                              "").toUpperCase()) + "");


                 this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                  "postcode", "feed:postcode", xspAttr);

                 xspAttr.clear();


                 this.characters("\n                     ");

                 this.characters("\n                     ");


                 this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                  "theft", "feed:theft", xspAttr);

                 xspAttr.clear();


                 this.characters("\n             \t\t\t\t  ");

               while (_esql_query.resultset.next()) {

                   this.characters("\n                         ");


                   this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                    "burglary", "feed:burglary", xspAttr);

                   xspAttr.clear();


                   this.characters("\n                          ");


                   this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                    "percentileriskscore", "feed:percentileriskscore",
                                                    xspAttr);

                   xspAttr.clear();



                   XSPObjectHelper.xspExpr(contentHandler,
                                           _esql_query.resultset.getString("Pctl_B"));


                   this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                  "percentileriskscore", "feed:percentileriskscore");


                   this.characters("\n                           ");


                   this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                    "risk", "feed:risk", xspAttr);

                   xspAttr.clear();



                   XSPObjectHelper.xspExpr(contentHandler,
                                           _esql_query.resultset.getString("RISK_1YR"));


                   this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                  "risk", "feed:risk");


                   this.characters("\n                           ");


                   this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                    "value", "feed:value", xspAttr);

                   xspAttr.clear();



                   XSPObjectHelper.xspExpr(contentHandler,
                                           _esql_query.resultset.getString("VALUE"));


                   this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                  "value", "feed:value");


                   this.characters("\n                           ");


                   this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                    "valueband", "feed:valueband", xspAttr);

                   xspAttr.clear();



                   XSPObjectHelper.xspExpr(contentHandler,
                                           _esql_query.resultset.getString("VAL_BAND"));


                   this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                  "valueband", "feed:valueband");


                   this.characters("\n                           ");


                   this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                    "repeat", "feed:repeat", xspAttr);

                   xspAttr.clear();



                   XSPObjectHelper.xspExpr(contentHandler,
                                           _esql_query.resultset.getString("REPEAT"));


                   this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                  "repeat", "feed:repeat");


                   this.characters("\n                           ");


                   this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                    "repeatband", "feed:repeatband", xspAttr);

                   xspAttr.clear();



                   XSPObjectHelper.xspExpr(contentHandler,
                                           _esql_query.resultset.getString("REP_BAND"));


                   this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                  "repeatband", "feed:repeatband");


                   this.characters("\n                         ");


                   this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                  "burglary", "feed:burglary");


                   this.characters("\n                         ");


                   this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                    "motor", "feed:motor", xspAttr);

                   xspAttr.clear();


                   this.characters("\n                          ");


                   this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                    "percentileriskscore", "feed:percentileriskscore",
                                                    xspAttr);

                   xspAttr.clear();



                   XSPObjectHelper.xspExpr(contentHandler,
                                           _esql_query.resultset.getString("Pctl_M"));


                   this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                  "percentileriskscore", "feed:percentileriskscore");


                   this.characters("\n                          ");


                   this.contentHandler.startElement("https://experian.com/xmlfeed1",
                                                    "risk", "feed:risk", xspAttr);

                   xspAttr.clear();



                   XSPObjectHelper.xspExpr(contentHandler,
                                           _esql_query.resultset.getString("MRISK1YR"));


                   this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                  "risk", "feed:risk");


                   this.characters("\n                         ");


                   this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                  "motor", "feed:motor");


                   this.characters("\n           \t\t\t\t\t  ");

                 if (_esql_connection.use_limit_clause == 0 &&
                       _esql_query.max_rows != -1 &&
                       _esql_query.position - _esql_query.skip_rows ==
                       _esql_query.max_rows - 1) {
                     _esql_query.position++;
                     break;
                   }
                   _esql_query.position++;
                 }
               if (_esql_query.resultset.next()) {

                   _esql_query.position++;
                 }

                 this.characters("\n                     ");


                 this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                "theft", "feed:theft");


                 this.characters("\n                   ");


                 this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                "postcode", "feed:postcode");


                 this.characters("\n                 ");


                 this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                "sector", "feed:sector");


                 this.characters("\n               ");


                 this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                "district", "feed:district");


                 this.characters("\n             ");


                 this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                "area", "feed:area");


                 this.characters("\n           ");


                 this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                "county", "feed:county");


                 this.characters("\n         ");


                 this.contentHandler.endElement("https://experian.com/xmlfeed1",
                                                "country", "feed:country");


                 this.characters("\n\t\t\t\t");

                 _esql_query.resultset.close();
             } else {
                 _esql_query.position =
                   _esql_query.statement.getUpdateCount();
               if (_esql_query.position >= 0) {

                 }
               }
               _esql_query.statement.close();
           } catch (SQLException _esql_exception_N2A) {
             try {

                 _esql_exception = _esql_exception_N2A;
                 _esql_exception_writer = new StringWriter();
                 _esql_exception.printStackTrace(
                   new PrintWriter(_esql_exception_writer));

                 this.characters("\n\t\t\t\t\t");


                 this.contentHandler.startElement("", "error-results",
                                                  "error-results", xspAttr);

                 xspAttr.clear();


                 this.characters("\n            ");


                 this.contentHandler.startElement("", "error", "error",
                                                  xspAttr);

                 xspAttr.clear();


                 this.characters("\n              ");


                 this.contentHandler.startElement("", "message", "message",
                                                  xspAttr);

                 xspAttr.clear();



                 XSPObjectHelper.xspExpr(contentHandler,
                                         _esql_exception.getMessage());


                 this.contentHandler.endElement("", "message", "message");


                 this.characters("\n              ");


                 this.contentHandler.startElement("", "stack", "stack",
                                                  xspAttr);

                 xspAttr.clear();



                 XSPObjectHelper.xspExpr(contentHandler,
                                         _esql_exception_writer.toString());


                 this.contentHandler.endElement("", "stack", "stack");


                 this.characters("\n            ");


                 this.contentHandler.endElement("", "error", "error");


                 this.characters("\n\t\t\t\t\t");


                 this.contentHandler.endElement("", "error-results", "error-results");


                 this.characters("\n\t\t\t\t");

               if (!_esql_connection.connection.getAutoCommit()) {
                   _esql_connection.connection.rollback();
                 }

             } catch (Exception _esql_exception_N2A_2) {}
             }
           if (_esql_queries.empty()) {
               _esql_query = null;
           } else {
               _esql_query = (EsqlQuery)_esql_queries.pop();
             }

             this.characters("\n\t\t");

           }
         finally { try {
                     if (!_esql_connection.connection.getAutoCommit()) {
                         _esql_connection.connection.commit();
                       }

                       _esql_connection.connection.close();

                     if (_esql_connections.empty()) {
                         _esql_connection = null;
                     } else {
                         _esql_connection = (EsqlConnection)_esql_connections.pop();
                       }
                   } catch (Exception _esql_exception_N13) {}
                   }
           this.characters("\n\t");


           this.contentHandler.endElement("https://experian.com/xmlfeed1", "data",
                                          "feed:data");


           this.contentHandler.endPrefixMapping("feed");

           this.contentHandler.endPrefixMapping("geo");

           this.contentHandler.endPrefixMapping("xspdoc");

           this.contentHandler.endPrefixMapping("esql");

           this.contentHandler.endPrefixMapping("xsp");


           this.contentHandler.endDocument();
         }
       }



