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