Revision 4578 trunk/libraries/libCq CMS for java.old/src/org/cresques/io/raster/RasterFilterStackManager.java

View differences:

RasterFilterStackManager.java
61 61
        typeFilters.put("computeminmax", new Integer(2));
62 62
        typeFilters.put("tail", new Integer(3));
63 63
        typeFilters.put("removebands", new Integer(4));
64
        typeFilters.put("sharpening", new Integer(5));
65 64
        init();
66 65
        this.filterStack.setOrder(order);
67 66
    }
......
70 69
     * Registra un manager del sistema
71 70
     * @param manager
72 71
     */
73
    protected void register(IStackManager manager) {
72
    public void register(IStackManager manager) {
74 73
        managers.add(manager);
75 74
    }
76 75

  
......
80 79
     */
81 80
    protected void init() {
82 81
        order = new int[typeFilters.size()];
83
        order[0] = ((Integer) typeFilters.get("sharpening")).intValue();
84
        order[1] = ((Integer) typeFilters.get("computeminmax")).intValue();
85
        order[2] = ((Integer) typeFilters.get("tail")).intValue();
86
        order[3] = ((Integer) typeFilters.get("enhanced")).intValue();
87
        order[4] = ((Integer) typeFilters.get("transparency")).intValue();
88
        order[5] = ((Integer) typeFilters.get("removebands")).intValue();
82
        //order[0] = ((Integer) typeFilters.get("sharpening")).intValue();
83
        order[0] = ((Integer) typeFilters.get("computeminmax")).intValue();
84
        order[1] = ((Integer) typeFilters.get("tail")).intValue();
85
        order[2] = ((Integer) typeFilters.get("enhanced")).intValue();
86
        order[3] = ((Integer) typeFilters.get("transparency")).intValue();
87
        order[4] = ((Integer) typeFilters.get("removebands")).intValue();
89 88
    }
90 89

  
91 90
    /**
......
93 92
     * @param key        Nombre del filtro
94 93
     * @param type        Constante entera asignada a ese tipo
95 94
     */
96
    protected void addTypeFilter(String key, int type, int position) {
95
    public void addTypeFilter(String key, int type, int position) {
97 96
        typeFilters.put(key, new Integer(type));
98 97

  
99 98
        int[] newOrder = new int[order.length + 1];
......
116 115
     * @return        Tipo de filtro
117 116
     */
118 117
    public int getTypeFilter(String key) {
119
        return ((Integer) typeFilters.get(key)).intValue();
118
    	Integer value = ((Integer) typeFilters.get(key));
119
    	if(value != null)
120
    		return value.intValue();
121
    	else 
122
    		return -1;
120 123
    }
121 124

  
122 125
    /**
......
346 349

  
347 350
        this.controlTypes();
348 351
    }
349

  
350
    /**
351
     * A?ade un filtro ComputeMinMax
352
     * @param files Ficheros que componen la imagen
353
     * @param i	Posici?n de la imagen de refinado dentro de la lista de GeoRasterFile
354
     * @param order	Orden de visualizado de las bandas RGB
355
     * @param alpha	Alpha aplicado a toda la imagen
356
     * @param method M?todo de calculo del refinado
357
     * @param coef	Coeficiente
358
     */
359
    public void addSharpeningFilter(GeoRasterFile[] files, int i, int[] order, int alpha, String method, double coef, int coefBrovey) {
360
    	//Si ya hay un filtro de sharpening nos lo cargamos
361
    	if (filterStack.isActive(((Integer) typeFilters.get("sharpening")).intValue())) {
362
            filterStack.removeFilter(((Integer) typeFilters.get("sharpening")).intValue());
363
        }
364

  
365
        RasterFilter filtro = null;
366

  
367
        switch (filterStack.getDataTypeInFilter(((Integer) typeFilters.get("sharpening")).intValue())) {
368
            case RasterBuf.TYPE_IMAGE:
369
                filtro = new SharpeningImageFilter();
370
                break;
371
            case RasterBuf.TYPE_SHORT:
372
            case RasterBuf.TYPE_USHORT:
373
            case RasterBuf.TYPE_INT:
374
                //filtro = new SharpeningShortFilter();
375
                break;
376
            }
377
        
378
        if(filtro != null){
379
	        filtro.addParam("stats", filterStack.getStats());
380
	        filtro.addParam("pancromatica", new Integer(i));
381
	        filtro.addParam("files", files);
382
	        filtro.addParam("order", order);
383
	        filtro.addParam("alpha", new Integer(alpha));
384
	        filtro.addParam("method", method);
385
	        filtro.addParam("coef", new Double(coef));
386
	        filtro.addParam("coefBrovey", new Integer(coefBrovey));
387
	        filterStack.addFilter(((Integer) typeFilters.get("sharpening")).intValue(),filtro);
388
	        
389
	        this.controlTypes();
390
        }
391
    }
392 352
    
393 353
    /**
394 354
     * Obtiene de la pila el primer filtro del tipo solicitado si existe sino devuelve null
......
406 366
     * @param rasterFilter        Objeto RasterFilter del cual se quiere saber que tipo de filtro contiene
407 367
     * @return        Tipo de filtro seg?n las constantes contenidas en RasterFilterStackManager
408 368
     */
409
    protected int getType(RasterFilter rasterFilter) {
410
        if (rasterFilter instanceof TransparencyFilter) {
411
            return 0;
412
        }
369
    public int getType(RasterFilter rasterFilter) {
370
        if (rasterFilter instanceof TransparencyFilter) 
371
            return ((Integer)typeFilters.get("transparency")).intValue();
372
      
373
        if (rasterFilter instanceof LinearEnhancementFilter) 
374
        	return ((Integer)typeFilters.get("enhanced")).intValue();
375
       
376
        if (rasterFilter instanceof ComputeMinMaxFilter)
377
        	return ((Integer)typeFilters.get("computeminmax")).intValue();
378
        
379
        if (rasterFilter instanceof PercentTailTrimFilter) 
380
        	return ((Integer)typeFilters.get("tail")).intValue();
381
        
382
        if (rasterFilter instanceof RemoveBandsFilter) 
383
        	return ((Integer)typeFilters.get("removebands")).intValue();
413 384

  
414
        if (rasterFilter instanceof LinearEnhancementFilter) {
415
            return 1;
416
        }
417

  
418
        if (rasterFilter instanceof ComputeMinMaxFilter) {
419
            return 2;
420
        }
421

  
422
        if (rasterFilter instanceof PercentTailTrimFilter) {
423
            return 3;
424
        }
425

  
426 385
        return -1;
427 386
    }
428 387

  
......
433 392
     * en el no coincidente. Esto es necesario ya que en la eliminaci?n de filtros puede
434 393
     * quedarse en inconsistencia de tipos.
435 394
     */
436
    protected void controlTypes() {
395
    public void controlTypes() {
437 396
        if (debug) {
438 397
            filterStack.show();
439 398
        }
......
558 517
     */
559 518
    public ArrayList getStringsFromStack() {
560 519
        filterList = new ArrayList();
561

  
562 520
        for (int i = 0; i < filterStack.lenght(); i++) {
563 521
            RasterFilter rf = filterStack.get(i);
564 522

  
......
584 542
                filterList.add("filter.removebands.active=true");
585 543
                filterList.add("filter.removebands.bands=" +
586 544
                               ((RemoveBandsFilter) rf).bands);
587
            } else if (rf instanceof SharpeningFilter) {
588
            	SharpeningFilter sharp = ((SharpeningFilter) rf);
589
                filterList.add("filter.pansharpening.active=true");
590
                filterList.add("filter.pansharpening.posPancromatica="+sharp.posPancromatica);
591
                filterList.add("filter.pansharpening.bandOrder="+sharp.bandOrder[0]+","+sharp.bandOrder[1]+","+sharp.bandOrder[2]);
592
                for(int file=0;file<sharp.files.length;file++)
593
                	filterList.add("filter.pansharpening.file"+file+"="+sharp.files[file].getName());
594
                filterList.add("filter.pansharpening.method="+sharp.method);
595
                filterList.add("filter.pansharpening.coefHSL="+sharp.coef);
596
                filterList.add("filter.pansharpening.coefBrovey="+sharp.coefBrovey);
597
                filterList.add("filter.pansharpening.alpha="+sharp.alpha);
598 545
            } else { //Se recorren todos los managers registrados comprobando si corresponde a la clase del filtro 
599

  
600
                for (int j = 0; j < managers.size(); j++)
601
                    ((IStackManager) managers.get(j)).getStringsFromStack();
546
                System.out.println("...Manager registrado "+rf.getClass().getName()+" - "+managers.size());
547
                for (int j = 0; j < managers.size(); j++){
548
                	filterList = ((IStackManager) managers.get(j)).getStringsFromStack(filterList, rf);
549
                }
602 550
            }
603 551
        }
604 552

  
605 553
        return filterList;
606 554
    }
607 555

  
556
    /* (non-Javadoc)
557
     * @see org.cresques.io.raster.StackManager#getStringsFromStack()
558
     */
559
    public ArrayList getStringsFromStack(ArrayList filterList, RasterFilter rf){
560
    	return null;
561
    }
562
    
563
    public int createStackFromStrings(String fil, ArrayList filters, int filteri){
564
    	return 0;
565
    }
566
    
608 567
    /**
609 568
     * Crea una pila de filtros a partir de un Array de Strings. Cada elemento del array debe
610 569
     * tener la forma elemento=valor.
......
640 599
            if (fil.startsWith("filter.transparency.active") &&
641 600
                    getValue(fil).equals("true")) {
642 601
                filters.remove(filteri);
643

  
644
                int[][] r = null;
645
                int[][] g = null;
646
                int[][] b = null;
647 602
                
648 603
                ArrayList list = new ArrayList();
649 604
                for (int propFilter = 0;propFilter < filters.size();propFilter++) {
......
745 700
                }
746 701
                filteri = -1;
747 702
            }
748

  
749
            if (fil.startsWith("filter.pansharpening.active") &&
750
                    getValue(fil).equals("true")) {
751
                filters.remove(filteri);
752
                
753
                int posPancromatica = 0;
754
                int[] bandOrder = {0, 1, 2};
755
                ArrayList files = new ArrayList();
756
                int alpha = 0;
757
                String method = "";
758
                double coef = 0D;
759
                int coefBrovey = 0;
760
                
761
                for (int propFilter = 0;propFilter < filters.size();propFilter++) {
762
                    String elem = (String) filters.get(propFilter);
763
                    
764
                    if (elem.startsWith("filter.pansharpening.posPancromatica")) {
765
                        posPancromatica = Integer.parseInt(getValue(elem));
766
                        filters.remove(propFilter);
767
                        propFilter--;
768
                    }
769
                    if (elem.startsWith("filter.pansharpening.bandOrder")) {
770
                    	String rango = getValue(elem);
771
                        bandOrder[0] = Integer.parseInt(rango.substring(0, rango.indexOf(",")));
772
                        bandOrder[1] = Integer.parseInt(rango.substring(rango.indexOf(",") + 1, rango.lastIndexOf(",")));
773
                        bandOrder[2] = Integer.parseInt(rango.substring(rango.lastIndexOf(",") + 1, rango.length()));
774
                        filters.remove(propFilter);
775
                        propFilter--;
776
                    }
777
                    if (elem.startsWith("filter.pansharpening.file")) {
778
                        files.add(getValue(elem));
779
                        filters.remove(propFilter);
780
                        propFilter--;
781
                    }
782
                    if (elem.startsWith("filter.pansharpening.alpha")) {
783
                        alpha = Integer.parseInt(getValue(elem));
784
                        filters.remove(propFilter);
785
                        propFilter--;
786
                    }
787
                    if (elem.startsWith("filter.pansharpening.method")) {
788
                        method = getValue(elem);
789
                        filters.remove(propFilter);
790
                        propFilter--;
791
                    }
792
                    if (elem.startsWith("filter.pansharpening.coefHSL")) {
793
                        coef = Double.parseDouble(getValue(elem));
794
                        filters.remove(propFilter);
795
                        propFilter--;
796
                    }
797
					if (elem.startsWith("filter.pansharpening.coefBrovey")) {
798
						coefBrovey = Integer.parseInt(getValue(elem));
799
						//filters.remove(propFilter);
800
						//propFilter--;
801
					}
802
                }
803
              
804
                addSharpeningFilter(this.grfList, posPancromatica, bandOrder, alpha, method, coef, coefBrovey);
805
                filteri = -1;
806
            }
807 703
            
808 704
            for (int j = 0; j < managers.size(); j++)
809
                ((IStackManager) managers.get(j)).createStackFromStrings(filters, new Integer(filteri));
705
                filteri = ((IStackManager) managers.get(j)).createStackFromStrings(fil, filters, filteri);
810 706

  
811 707
            filteri++;
812 708
        }
......
817 713
     * @param cadena
818 714
     * @return
819 715
     */
820
    public String getElem(String cadena) {
716
    public static String getElem(String cadena) {
821 717
        if (cadena != null) {
822 718
            return cadena.substring(0, cadena.indexOf("="));
823 719
        } else {
......
830 726
     * @param cadena
831 727
     * @return
832 728
     */
833
    public String getValue(String cadena) {
729
    public static String getValue(String cadena) {
834 730
        if (cadena != null) {
835 731
            return cadena.substring(cadena.indexOf("=") + 1, cadena.length());
836 732
        } else {
......
894 790
            return null;
895 791
        }
896 792
    }
793

  
794
    /**
795
     * Obtiene la pila de filtros
796
     * @return RasterFilterStack
797
     */
798
	public RasterFilterStack getFilterStack() {
799
		return filterStack;
800
	}
801

  
802
	/**
803
	 * Obtiene la Hashable que contiene los tipos de filtros registrados
804
	 * @return Hashtable
805
	 */
806
	public Hashtable getTypeFilters() {
807
		return typeFilters;
808
	}
809

  
897 810
}

Also available in: Unified diff