/**
   * getMapperClass
   *
   * @param sd
   * @return
   * @throws Exception
   */
  public Class getMapperClass(ServiceDescription sd) throws Exception {
    Property property;
    boolean mapperFound = false;
    String mapperClassName = null;

    Iterator it = sd.getAllProperties();
    while (it.hasNext() && !mapperFound) {
      property = (Property) it.next();
      if (WSIGConstants.WSIG_MAPPER.equalsIgnoreCase(property.getName())) {
        mapperClassName = (String) property.getValue();
        mapperFound = true;
      }
    }

    if (!mapperFound) {
      return null;
    }

    Class mapperClass;
    try {
      mapperClass = Class.forName(mapperClassName);
    } catch (ClassNotFoundException e) {
      throw new Exception("Class " + mapperClassName + " not found!", e);
    }

    return mapperClass;
  }
  /**
   * Return service prefix
   *
   * @param sd
   * @return
   */
  private String getServicePrefix(ServiceDescription sd) {

    Property property;
    Iterator it = sd.getAllProperties();
    while (it.hasNext()) {
      property = (Property) it.next();

      if (WSIGConstants.WSIG_PREFIX.equalsIgnoreCase(property.getName())
          && property.getValue().toString().length() != 0) {
        return property.getValue().toString() + WSDLConstants.SEPARATOR;
      }
    }
    return "";
  }
  /**
   * Return true if service is of type wsig
   *
   * @param sd
   * @return
   */
  private boolean isWSIGService(ServiceDescription sd) {

    Property property;
    Iterator it = sd.getAllProperties();
    while (it.hasNext()) {
      property = (Property) it.next();

      if (WSIGConstants.WSIG_FLAG.equalsIgnoreCase(property.getName())
          && "true".equals(property.getValue().toString())) {
        return true;
      }
    }
    return false;
  }
    /**
     * Extract a Location from a list of properties from a Service description
     *
     * @param it iterator over the list of properties
     * @return the location on the map described by this set of properties
     */
    public static Location extractLocation(Iterator it) {
      Location loc = new Location("mygps");

      while (it.hasNext()) {
        Property p = (Property) it.next();

        String propertyName = p.getName();

        if (propertyName.equals(DFUpdaterBehaviour.PROPERTY_NAME_LOCATION_ALT)) {
          double altitude = Double.parseDouble((String) p.getValue());
          loc.setAltitude(altitude);
        } else if (propertyName.equals(DFUpdaterBehaviour.PROPERTY_NAME_LOCATION_LAT)) {
          double latitude = Double.parseDouble((String) p.getValue());
          loc.setLatitude(latitude);
        } else if (propertyName.equals(DFUpdaterBehaviour.PROPERTY_NAME_LOCATION_LONG)) {
          double longitude = Double.parseDouble((String) p.getValue());
          loc.setLongitude(longitude);
        }
      }

      return loc;
    }