/**
   * It parses the feature typelist tag
   *
   * @param parser
   * @throws IOException
   * @throws XmlPullParserException
   */
  private void parseFeatureTypeListTag(KXmlParser parser)
      throws IOException, XmlPullParserException {
    int currentTag;
    boolean end = false;

    parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.WFS_FEATURETYPELIST);
    currentTag = parser.next();

    while (!end) {
      switch (currentTag) {
        case KXmlParser.START_TAG:
          if (parser.getName().compareToIgnoreCase(CapabilitiesTags.WFS_FEATURETYPE) == 0) {
            // Parse the namespaces...
            parseNamespaces(parser);
            WFSFeature1_0_0 feature = new WFSFeature1_0_0();
            feature.parse(parser);
            features.put(feature.getName(), feature);
          }
          break;
        case KXmlParser.END_TAG:
          if (parser.getName().compareTo(CapabilitiesTags.WFS_FEATURETYPELIST) == 0) end = true;
          break;
        case KXmlParser.TEXT:
          break;
      }
      if (!end) {
        currentTag = parser.next();
      }
    }
  }
  /**
   * Parse an operation into a DcpType tag
   *
   * @param parser The KXMLParser
   * @param operation The WFS operation to parse
   * @throws IOException
   * @throws XmlPullParserException
   */
  private void parserDcpType(KXmlParser parser, int operation)
      throws XmlPullParserException, IOException {
    int currentTag;
    boolean end = false;

    currentTag = parser.next();

    while (!end) {
      switch (currentTag) {
        case KXmlParser.START_TAG:
          if (parser.getName().compareTo(CapabilitiesTags.HTTP) == 0) {
            parseHTTPTag(parser, operation);
          }
          break;
        case KXmlParser.END_TAG:
          if (parser.getName().compareTo(CapabilitiesTags.DCPTYPE) == 0) end = true;
          break;
        case KXmlParser.TEXT:
          break;
      }
      if (!end) {
        currentTag = parser.next();
      }
    }
  }
  /** Parses the Request tag */
  private void parseRequestTag(KXmlParser parser) throws IOException, XmlPullParserException {
    int currentTag;
    boolean end = false;

    parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.REQUEST);
    currentTag = parser.next();

    while (!end) {
      switch (currentTag) {
        case KXmlParser.START_TAG:
          if (parser.getName().compareTo(CapabilitiesTags.GETCAPABILITIES) == 0) {
            parserDcpType(parser, WFSOperation.GETCAPABILITIES);
          } else if (parser.getName().compareTo(CapabilitiesTags.WFS_DESCRIBEFEATURETYPE) == 0) {
            parserDcpType(parser, WFSOperation.DESCRIBEFEATURETYPE);
          } else if (parser.getName().compareTo(CapabilitiesTags.WFS_GETFEATURE) == 0) {
            parserDcpType(parser, WFSOperation.GETFEATURE);
          } else if (parser.getName().compareTo(CapabilitiesTags.WFS_LOCKFEATURE) == 0) {
            parserDcpType(parser, WFSOperation.LOCKFEATURE);
          } else if (parser.getName().compareTo(CapabilitiesTags.WFS_TRANSACTION) == 0) {
            parserDcpType(parser, WFSOperation.TRANSACTION);
          }
          break;
        case KXmlParser.END_TAG:
          if (parser.getName().compareTo(CapabilitiesTags.REQUEST) == 0) end = true;
          break;
        case KXmlParser.TEXT:
          break;
      }
      if (!end) {
        currentTag = parser.next();
      }
    }
  }
  private void parseCapabilityTag(KXmlParser parser) throws IOException, XmlPullParserException {
    int currentTag;
    boolean end = false;

    parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.CAPABILITY);
    currentTag = parser.next();

    while (!end) {
      switch (currentTag) {
        case KXmlParser.START_TAG:
          if (parser.getName().compareTo(CapabilitiesTags.REQUEST) == 0) {
            parseRequestTag(parser);
          } else if (parser.getName().compareTo(CapabilitiesTags.EXCEPTION) == 0) {
            // TODO Parse exception tags...
            parser.skipSubTree();
          } else if ((parser.getName().compareTo(CapabilitiesTags.VENDORSPECIFICCAPABILITIES) == 0)
              || (parser.getName().compareTo(CapabilitiesTags.USERDEFINEDSYMBOLIZATION) == 0)) {
            parser.skipSubTree();
          }
          break;
        case KXmlParser.END_TAG:
          if (parser.getName().compareTo(CapabilitiesTags.CAPABILITY) == 0) end = true;
          break;
        case KXmlParser.TEXT:
          break;
      }
      if (!end) {
        currentTag = parser.next();
      }
    }
  }
  /** Parses the Service Information */
  private void parseServiceTag(KXmlParser parser) throws IOException, XmlPullParserException {
    int currentTag;
    boolean end = false;

    parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.SERVICE);
    currentTag = parser.next();

    while (!end) {
      switch (currentTag) {
        case KXmlParser.START_TAG:
          if (parser.getName().compareToIgnoreCase(CapabilitiesTags.NAME) == 0) {
            serviceInfo.name = parser.nextText();
          } else if (parser.getName().compareTo(CapabilitiesTags.WFS_TITLE) == 0) {
            serviceInfo.title = parser.nextText();
          } else if (parser.getName().compareTo(CapabilitiesTags.WFS_ABSTRACT) == 0) {
            serviceInfo.abstr = parser.nextText();
          } else if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE) == 0) {
            serviceInfo.online_resource = parser.nextText();
          }
          break;
        case KXmlParser.END_TAG:
          if (parser.getName().compareTo(CapabilitiesTags.SERVICE) == 0) end = true;
          break;
        case KXmlParser.TEXT:
          break;
      }
      if (!end) {
        currentTag = parser.next();
      }
    }
  }
  /**
   * Parse an operation into a HTTP tag
   *
   * @param parser The KXMLParser
   * @param operation The WFS operation to parse
   * @throws IOException
   * @throws XmlPullParserException
   */
  private void parseHTTPTag(KXmlParser parser, int operation)
      throws XmlPullParserException, IOException {
    int currentTag;
    boolean end = false;

    currentTag = parser.next();

    while (!end) {
      switch (currentTag) {
        case KXmlParser.START_TAG:
          int protocol = -1;
          if (parser.getName().compareTo(CapabilitiesTags.GET) == 0) {
            protocol = WFSOperation.PROTOCOL_GET;
          }
          if (parser.getName().compareTo(CapabilitiesTags.POST) == 0) {
            protocol = WFSOperation.PROTOCOL_POST;
          }
          if (protocol > -1) {
            String value = null;
            for (int i = 0; i < parser.getAttributeCount(); i++) {
              if (parser
                      .getAttributeName(i)
                      .toUpperCase()
                      .compareTo(CapabilitiesTags.ONLINERESOURCE.toUpperCase())
                  == 0) {
                value = parser.getAttributeValue(i);
              }
            }
            if (value == null) {
              serviceInfo.addOperation(operation, protocol);
            } else {
              serviceInfo.addOperation(operation, protocol, value);
            }
          }
          break;
        case KXmlParser.END_TAG:
          if (parser.getName().compareTo(CapabilitiesTags.HTTP) == 0) end = true;
          break;
        case KXmlParser.TEXT:
          break;
      }
      if (!end) {
        currentTag = parser.next();
      }
    }
  }
예제 #7
0
  /**
   * Comprueba si un fichero VRT esta en correcto estado, en caso contrario lanza una excepcion
   * indicando el tipo de error en la apertura.
   *
   * @param file
   * @throws FileOpenVRTException
   */
  private void checkFileVRT(File file) throws FileOpenVRTException {
    KXmlParser parser = new KXmlParser();

    FileReader fileReader = null;
    try {
      fileReader = new FileReader(file);
      parser.setInput(fileReader);

      parser.nextTag();

      parser.require(XmlPullParser.START_TAG, null, "VRTDataset");

      while (parser.nextTag() != XmlPullParser.END_TAG) {
        parser.require(XmlPullParser.START_TAG, null, "VRTRasterBand");

        String name;
        while (parser.nextTag() != XmlPullParser.END_TAG) {
          parser.require(XmlPullParser.START_TAG, null, null);
          boolean relativePath = false;
          for (int i = 0; i < parser.getAttributeCount(); i++) {
            if (parser.getAttributeName(i).equals("relativetoVRT")
                && parser.getAttributeValue(i).equals("1")) relativePath = true;
          }
          name = parser.getName();
          String nameFile = parser.nextText();
          if (name.equals("SourceFilename")) {
            if (relativePath) nameFile = file.getParent() + File.separator + nameFile;
            File tryFile = new File(nameFile);
            if (!tryFile.exists())
              throw new FileOpenVRTException(
                  PluginServices.getText(this, "no_existe_fichero") + " " + nameFile);
          }
          parser.require(XmlPullParser.END_TAG, null, name);
        }

        parser.require(XmlPullParser.END_TAG, null, "VRTRasterBand");
      }
      parser.require(XmlPullParser.END_TAG, null, "VRTDataset");
      parser.next();
      parser.require(XmlPullParser.END_DOCUMENT, null, null);
    } catch (XmlPullParserException e) {
      throw new FileOpenVRTException(
          PluginServices.getText(this, "el_fichero")
              + " "
              + file.getName().toString()
              + " "
              + PluginServices.getText(this, "esta_formato_desconocido"));
    } catch (IOException e) {
      throw new FileOpenVRTException(
          PluginServices.getText(this, "no_puede_abrir_fichero") + " " + file.getName().toString());
    } finally {
      if (fileReader != null)
        try {
          fileReader.close();
        } catch (IOException e) {
        }
    }
  }
예제 #8
0
  /**
   * Parses the legendURL tag.
   *
   * @param parser
   * @throws IOException
   * @throws XmlPullParserException
   */
  protected void parseLegendURL(KXmlParser parser) throws IOException, XmlPullParserException {
    int currentTag;
    boolean end = false;

    parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.LEGENDURL);

    String value = new String();
    legendURL = new LegendURL();

    // First of all set whether the layer is Queryable reading the
    // attribute.
    value = parser.getAttributeValue("", CapabilitiesTags.WIDTH);
    if (value != null) {
      legendURL.width = Integer.parseInt(value);
    }
    value = parser.getAttributeValue("", CapabilitiesTags.HEIGHT);
    if (value != null) {
      legendURL.height = Integer.parseInt(value);
    }
    currentTag = parser.nextTag();

    while (!end) {
      switch (currentTag) {
        case KXmlParser.START_TAG:
          if (parser.getName().compareTo(CapabilitiesTags.FORMAT) == 0) {
            legendURL.format = parser.nextText();
          } else if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE) == 0) {
            value = parser.getAttributeValue("", CapabilitiesTags.XLINK_TYPE);
            if (value != null) legendURL.onlineResource_type = value;
            value = parser.getAttributeValue("", CapabilitiesTags.XLINK_HREF);
            if (value != null) legendURL.onlineResource_href = value;
          }
          break;
        case KXmlParser.END_TAG:
          if (parser.getName().compareTo(CapabilitiesTags.LEGENDURL) == 0) end = true;
          break;
        case KXmlParser.TEXT:
          break;
      }
      if (!end) {
        currentTag = parser.next();
      }
    }
    parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.LEGENDURL);
  }
예제 #9
0
  public static Parameter deserialize(final KXmlParser parser)
      throws XmlPullParserException, IOException {

    String sParent = null;
    boolean bMandatory = true;

    int tag = parser.nextTag();

    boolean bOver = false;
    while (!bOver) {
      switch (tag) {
        case XmlPullParser.START_TAG:
          if (parser.getName().compareTo(ATTRIBUTE) == 0) {
            final String sName = parser.getAttributeValue("", NAME);
            if (sName.compareTo(PARENT) == 0) {
              sParent = parser.getAttributeValue("", VALUE);
            } else if (sName.compareTo(PARENT) == 0) {
              final String sMandatory = parser.getAttributeValue("", VALUE);
              bMandatory = Boolean.parseBoolean(sMandatory);
            }
          }
          break;
        case XmlPullParser.END_TAG:
          if (parser.getName().compareTo(INPUT) == 0) {
            bOver = true;
          }
          break;
        case XmlPullParser.TEXT:
          break;
      }

      if (!bOver) {
        tag = parser.next();
      }
    }

    final ParameterTableField param = new ParameterTableField();
    final AdditionalInfoTableField ai = new AdditionalInfoTableField(sParent, bMandatory);
    param.setParameterAdditionalInfo(ai);

    return param;
  }
예제 #10
0
  public static ArrayList open(final String sFilename) {

    ArrayList images = null;
    final ArrayList elements = new ArrayList();
    HelpElement element = null;
    final KXmlParser parser = new KXmlParser();

    try {
      final File file = new File(sFilename);
      parser.setInput(new FileInputStream(file), encoding);
      int tag = parser.nextTag();
      boolean bOut = false;

      if (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
        while ((tag != XmlPullParser.END_DOCUMENT) && !bOut) {
          switch (tag) {
            case XmlPullParser.START_TAG:
              if (parser.getName().compareTo(HELP) == 0) {
              } else if (parser.getName().compareTo(HelpElement.ELEMENT) == 0) {
                images = new ArrayList();
                final String sText = parser.getAttributeValue("", HelpElement.TEXT);
                final String sName = parser.getAttributeValue("", HelpElement.NAME);
                final String sDescription = parser.getAttributeValue("", HelpElement.DESCRIPTION);
                final int iType = Integer.parseInt(parser.getAttributeValue("", HelpElement.TYPE));
                element = new HelpElement();
                element.setText(sText);
                element.setName(sName);
                element.setType(iType);
                element.setDescription(sDescription);
              } else if (parser.getName().compareTo(ImageAndDescription.IMAGE) == 0) {
                final ImageAndDescription iad = new ImageAndDescription();
                final String sImageFilename =
                    parser.getAttributeValue("", ImageAndDescription.FILE);
                final String sDesc = parser.getAttributeValue("", ImageAndDescription.DESCRIPTION);
                iad.setDescription(sDesc);
                iad.setFilename(sImageFilename);
                images.add(iad);
              }
              break;
            case XmlPullParser.END_TAG:
              if (parser.getName().compareTo(HELP) == 0) {
                bOut = true;
              } else if (parser.getName().compareTo(HelpElement.ELEMENT) == 0) {
                element.setImages(images);
                elements.add(element);
              }
              break;
            case XmlPullParser.TEXT:
              break;
          }
          if (!bOut) {
            tag = parser.next();
          }
        }
      }

    } catch (final Exception e) {
      return null;
    }
    return elements;
  }
  /**
   * Reads the public.xml file in data/res/values/ for a given resource folder and builds up a map
   * of public resources.
   *
   * <p>This map is a subset of the full resource map that only contains framework resources that
   * are public.
   *
   * @param logger a logger to report issues to
   */
  public void loadPublicResources(@Nullable ILogger logger) {
    IAbstractFolder valueFolder = getResFolder().getFolder(SdkConstants.FD_RES_VALUES);
    if (valueFolder.exists() == false) {
      return;
    }

    IAbstractFile publicXmlFile = valueFolder.getFile("public.xml"); // $NON-NLS-1$
    if (publicXmlFile.exists()) {
      Reader reader = null;
      try {
        reader =
            new BufferedReader(new InputStreamReader(publicXmlFile.getContents(), Charsets.UTF_8));
        KXmlParser parser = new KXmlParser();
        parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
        parser.setInput(reader);

        ResourceType lastType = null;
        String lastTypeName = "";
        while (true) {
          int event = parser.next();
          if (event == XmlPullParser.START_TAG) {
            // As of API 15 there are a number of "java-symbol" entries here
            if (!parser.getName().equals("public")) { // $NON-NLS-1$
              continue;
            }

            String name = null;
            String typeName = null;
            for (int i = 0, n = parser.getAttributeCount(); i < n; i++) {
              String attribute = parser.getAttributeName(i);

              if (attribute.equals("name")) { // $NON-NLS-1$
                name = parser.getAttributeValue(i);
                if (typeName != null) {
                  // Skip id attribute processing
                  break;
                }
              } else if (attribute.equals("type")) { // $NON-NLS-1$
                typeName = parser.getAttributeValue(i);
              }
            }

            if (name != null && typeName != null) {
              ResourceType type = null;
              if (typeName.equals(lastTypeName)) {
                type = lastType;
              } else {
                type = ResourceType.getEnum(typeName);
                lastType = type;
                lastTypeName = typeName;
              }
              if (type != null) {
                ResourceItem match = null;
                Map<String, ResourceItem> map = mResourceMap.get(type);
                if (map != null) {
                  match = map.get(name);
                }

                if (match != null) {
                  List<ResourceItem> publicList = mPublicResourceMap.get(type);
                  if (publicList == null) {
                    // Pick initial size for the list to hold the public
                    // resources. We could just use map.size() here,
                    // but they're usually much bigger; for example,
                    // in one platform version, there are 1500 drawables
                    // and 1200 strings but only 175 and 25 public ones
                    // respectively.
                    int size;
                    switch (type) {
                      case STYLE:
                        size = 500;
                        break;
                      case ATTR:
                        size = 1000;
                        break;
                      case DRAWABLE:
                        size = 200;
                        break;
                      case ID:
                        size = 50;
                        break;
                      case LAYOUT:
                      case COLOR:
                      case STRING:
                      case ANIM:
                      case INTERPOLATOR:
                        size = 30;
                        break;
                      default:
                        size = 10;
                        break;
                    }
                    publicList = new ArrayList<ResourceItem>(size);
                    mPublicResourceMap.put(type, publicList);
                  }

                  publicList.add(match);
                } else {
                  // log that there's a public resource that doesn't actually
                  // exist?
                }
              } else {
                // log that there was a reference to a typo that doesn't actually
                // exist?
              }
            }
          } else if (event == XmlPullParser.END_DOCUMENT) {
            break;
          }
        }
      } catch (Exception e) {
        if (logger != null) {
          logger.error(e, "Can't read and parse public attribute list");
        }
      } finally {
        if (reader != null) {
          try {
            reader.close();
          } catch (IOException e) {
            // Nothing to be done here - we don't care if it closed or not.
          }
        }
      }
    }

    // put unmodifiable list for all res type in the public resource map
    // this will simplify access
    for (ResourceType type : ResourceType.values()) {
      List<ResourceItem> list = mPublicResourceMap.get(type);
      if (list == null) {
        list = Collections.emptyList();
      } else {
        list = Collections.unmodifiableList(list);
      }

      // put the new list in the map
      mPublicResourceMap.put(type, list);
    }
  }