/** * 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); } }
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; }
/** * 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++; } }
/** * 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(); }
/** * 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(); }
/** * 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); }