Пример #1
0
 /**
  * Reemplaza un filtro segun su nombre a la lista de filtros, util para cambiar el tipo de datos
  * de un filtro en la pila de filtros.
  *
  * @param nameFilter
  * @param pos
  * @param exceptions
  */
 private void renewFilterFromControlTypes(String nameFilter, int pos, ArrayList exceptions) {
   try {
     RasterFilter newFilter = RasterFilter.createFilter(nameFilter);
     newFilter.params = rasterFilterList.get(pos).params;
     if (newFilter.params.get("filterName") != null)
       newFilter.setName((String) newFilter.params.get("filterName"));
     else newFilter.setName(rasterFilterList.get(pos).getName());
     rasterFilterList.replace(newFilter, pos);
   } catch (FilterTypeException e) {
     exceptions.add(e);
   }
 }
Пример #2
0
  public ArrayList getStringsFromFilterList() {
    filterList = new ArrayList();
    for (int i = 0; i < rasterFilterList.lenght(); i++) {
      RasterFilter rf = rasterFilterList.get(i);

      // Se recorren todos los managers registrados comprobando si corresponde a
      // la clase del filtro
      for (int j = 0; j < managers.size(); j++)
        filterList =
            ((IRasterFilterListManager) managers.get(j)).getStringsFromFilterList(filterList, rf);
    }

    return filterList;
  }
Пример #3
0
  /**
   * Crea una pila de filtros a partir de un Array de Strings. Cada elemento del array debe tener la
   * forma elemento=valor.
   *
   * @param pos Posición desde la cual se empieza a analizar.
   * @param filters
   * @throws FilterTypeException
   */
  private void createFilterListFromStrings(ArrayList f, Integer pos) throws FilterTypeException {
    ArrayList filters = (ArrayList) f.clone();
    rasterFilterList.clear();

    int filteri = pos.intValue();

    // Busca un filtro activo y después todas las propiedades que necesita ese
    // filtro para ser creado. Una vez las tiene añade en la pila el tipo de
    // filtro.
    while ((filters.size() > 0) && (filteri < filters.size())) {
      String fil = (String) filters.get(filteri);

      for (int j = 0; j < managers.size(); j++)
        try {
          filteri =
              ((IRasterFilterListManager) managers.get(j))
                  .createFilterListFromStrings(filters, fil, filteri);
        } catch (NullPointerException e) {
        }

      filteri++;
    }
  }
Пример #4
0
  /**
   * Controla que los tipos de los filtros de la pila sean correctos, es decir, que el tipo de
   * salida de un filtro de salida coincida con el tipo de la entrada del siguiente. En caso de no
   * ser así crea el filtro de tipo adecuado y lo sustituye en el no coincidente. Esto es necesario
   * ya que en la eliminación de filtros puede quedarse en inconsistencia de tipos.
   */
  public void controlTypes() throws FilterTypeException {
    ArrayList exceptions = new ArrayList();
    for (int i = 0; i < rasterFilterList.lenght(); i++) {
      String classFilter = null, packageFilter = null, oldClass = null;
      try {
        RasterFilter rf = rasterFilterList.get(i);
        if (rf == null) return;
        classFilter = rf.getClass().toString();
        packageFilter =
            classFilter.substring(classFilter.indexOf(" ") + 1, classFilter.lastIndexOf("."));
        oldClass = classFilter.substring(classFilter.lastIndexOf(".") + 1, classFilter.length());
      } catch (ArrayIndexOutOfBoundsException ex) {
        return;
      } catch (NullPointerException ex) {
        return;
      }

      // Para el primer filtro comprobamos con el tipo de dato de entrada a la pila
      if (i == 0) {
        if (rasterFilterList.getInitDataType() != rasterFilterList.get(i).getInRasterDataType()) {
          Pattern p =
              Pattern.compile(
                  RasterUtilities.typesToString(rasterFilterList.get(i).getInRasterDataType()));
          Matcher m = p.matcher(oldClass);
          String newClass =
              m.replaceAll(RasterUtilities.typesToString(rasterFilterList.getInitDataType()));
          String strPackage = packageFilter + "." + newClass;

          renewFilterFromControlTypes(strPackage, i, exceptions);
        }

        // Desde el filtro 2 en adelante se compara la salida de uno con la entrada del siguiente
      } else if (rasterFilterList.get(i - 1).getOutRasterDataType()
          != rasterFilterList.get(i).getInRasterDataType()) {
        Pattern p =
            Pattern.compile(
                RasterUtilities.typesToString(rasterFilterList.get(i).getInRasterDataType()));
        Matcher m = p.matcher(oldClass);
        String newClass =
            m.replaceAll(
                RasterUtilities.typesToString(rasterFilterList.get(i - 1).getOutRasterDataType()));
        String strPackage = packageFilter + "." + newClass;

        renewFilterFromControlTypes(strPackage.trim(), i, exceptions);
      }
    }

    if (exceptions.size() > 0) throw new FilterTypeException("");

    if (debug) rasterFilterList.show();
  }
Пример #5
0
 /**
  * Elimina los filtros de la pila de un determinado tipo
  *
  * @param type Tipo de filtro a eliminar
  * @throws FilterTypeException
  */
 public void removeFilter(String name) throws FilterTypeException {
   rasterFilterList.remove(name);
   this.controlTypes();
 }
Пример #6
0
 /**
  * Método que devuelve true si el tipo de filtro pasado por parámetro está en la pila y false si
  * no lo está.
  *
  * @param filter Tipo de filtro a comprobar
  * @return true si está en la pila y false si no lo está
  */
 public boolean isActive(String name) {
   return rasterFilterList.isActive(name);
 }