示例#1
0
  /**
   * Prints a VPF Coverage
   *
   * @param pathPrefix lines get printed with this prefix
   * @param cat the CoverageAttributeTable to get the Coverage from
   * @param covname the name of the coverage to print
   */
  public void printCoverage(
      HttpServletRequest request,
      HttpServletResponse response,
      String pathPrefix,
      String libName,
      CoverageAttributeTable cat,
      String covname)
      throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println(
        "<H3><A NAME=\""
            + libName
            + "_"
            + covname
            + "\">Coverage "
            + buildURL(request, response, pathPrefix, "", covname)
            + " for Library <A HREF=\"#"
            + libName
            + "\">"
            + libName
            + "</A></H3>");
    HtmlListElement list = new HtmlListElement();
    list.addElement("Description: " + cat.getCoverageDescription(covname));
    list.addElement("Topology Level: " + cat.getCoverageTopologyLevel(covname));
    String fcsURL =
        buildURL(
            request,
            response,
            pathPrefix,
            "fcs?" + Data.RowSelectParam + "=" + Data.RowSelectAll,
            "fcs");
    list.addElement("Feature Class Schema: " + fcsURL);
    CoverageTable ct = cat.getCoverageTable(covname);
    // CoverageTable opens alot of files, go through and close
    // them
    for (Iterator i = ct.getFeatureClasses().values().iterator(); i.hasNext(); ) {
      FeatureClassInfo fci = (FeatureClassInfo) i.next();
      fci.close();
    }

    Map ftypeinfo = new TreeMap(ct.getFeatureTypeInfo());
    if (ftypeinfo.size() == 0) {
      list.addElement("No Feature Types in FCA");
    } else {
      HtmlListElement flist =
          new HtmlListElement(
              "Feature Types (from " + buildURL(request, response, pathPrefix, "fca") + ")");
      list.addElement(flist);
      for (Iterator i = ftypeinfo.values().iterator(); i.hasNext(); ) {
        CoverageTable.FeatureClassRec fcr = (CoverageTable.FeatureClassRec) i.next();
        String name = fcr.feature_class.toLowerCase();
        // char t = fcr.type;
        String desc = fcr.description;
        String tstring = "[unknown] ";
        String suffix = "";
        switch (fcr.type) {
          case CoverageTable.TEXT_FEATURETYPE:
            tstring = "[text feature] ";
            suffix = ".tft";
            break;
          case CoverageTable.EDGE_FEATURETYPE:
            tstring = "[edge feature] ";
            suffix = ".lft";
            break;
          case CoverageTable.AREA_FEATURETYPE:
            tstring = "[area feature] ";
            suffix = ".aft";
            break;
          case CoverageTable.UPOINT_FEATURETYPE:
            FeatureClassInfo fci = ct.getFeatureClassInfo(name);
            char type = (fci != null) ? fci.getFeatureType() : CoverageTable.SKIP_FEATURETYPE;
            if (type == CoverageTable.EPOINT_FEATURETYPE) {
              tstring = "[entity point feature] ";
            } else if (type == CoverageTable.CPOINT_FEATURETYPE) {
              tstring = "[connected point feature] ";
            } else {
              tstring = "[missing point feature] ";
            }
            suffix = ".pft";
            break;
          case CoverageTable.COMPLEX_FEATURETYPE:
            tstring = "[complex feature] ";
            suffix = ".cft";
            break;
          default:
            tstring = "[unknown] ";
            suffix = "";
        }
        String url = buildURL(request, response, pathPrefix, name + suffix, name);
        flist.addElement(url + ": " + tstring + desc);
      }
    }
    try {
      HtmlListElement flist = new HtmlListElement("Feature Types (from " + fcsURL + ")");
      boolean generateflist = false;
      DcwRecordFile fcs =
          new DcwRecordFile(ct.getDataPath() + File.separator + "fcs" + (ct.appendDot ? "." : ""));
      int featureClassColumn = fcs.whatColumn("feature_class");
      int table1Column = fcs.whatColumn("table1");
      // int table1_keyColumn = fcs.whatColumn("table1_key");
      // int table2Column = fcs.whatColumn("table2");
      // int table2_keyColumn = fcs.whatColumn("table2_key");

      List fcsl = new ArrayList(fcs.getColumnCount());
      while (fcs.parseRow(fcsl)) {
        String featureclass = ((String) fcsl.get(featureClassColumn)).toLowerCase();
        String table1 = ((String) fcsl.get(table1Column)).toLowerCase();
        if (!ftypeinfo.containsKey(featureclass)) {
          ftypeinfo.put(featureclass, null);
          String type = null;
          if (table1.endsWith(".cft")) {
            type = "complex feature";
          } else if (table1.endsWith(".pft")) {
            type = "point feature";
          } else if (table1.endsWith(".lft")) {
            type = "line feature";
          } else if (table1.endsWith(".aft")) {
            type = "area feature";
          } else if (table1.endsWith(".tft")) {
            type = "text feature";
          }
          if (type != null) {
            generateflist = true;
            flist.addElement(
                type + " " + buildURL(request, response, pathPrefix, table1, featureclass));
          }
        }
      }
      if (generateflist) {
        list.addElement(flist);
      }
      fcs.close();
    } catch (FormatException fe) {
      list.addElement("no fcs");
    }
    list.generate(out);
  }