Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extRasterTools-SE / src / org / gvsig / raster / beans / previewbase / PreviewFiltering.java @ 19376

History | View | Annotate | Download (6.97 KB)

1 19307 nbrodin
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 */
19
package org.gvsig.raster.beans.previewbase;
20
21
import java.util.ArrayList;
22
23
import org.gvsig.raster.dataset.Params;
24
import org.gvsig.raster.grid.filter.FilterTypeException;
25
import org.gvsig.raster.grid.filter.IRasterFilterListManager;
26
import org.gvsig.raster.grid.filter.RasterFilter;
27
import org.gvsig.raster.grid.filter.RasterFilterList;
28
import org.gvsig.raster.grid.filter.RasterFilterListManager;
29
import org.gvsig.raster.hierarchy.IRasterRendering;
30
import org.gvsig.raster.util.RasterToolsUtil;
31
32
import com.iver.andami.PluginServices;
33
34
/**
35
 * Procesado de la imagen para la previsualizaci?n. Para poder usar esta clase despu?s de instanciarla
36
 * habr? que asignarle un valor a showFiltersSelected aunque por defecto est? a true por lo que se
37
 * visualizaran los cambios sin problemas, asigna una lista de filtros inicial (que ya tenga el raster
38
 * aplicado) con setFilterStatus y asignar los filtros que queramos aplicar con addNewParam (una llamada
39
 * por cada filtro).
40
 *
41
 * 19/02/2008
42
 * @author Nacho Brodin nachobrodin@gmail.com
43
 */
44
public class PreviewFiltering implements IPreviewRenderProcess {
45
46
        private boolean          showFiltersSelected     = true;
47
        private ArrayList        paramsList              = new ArrayList();
48 19335 nbrodin
        private ArrayList        filtersInit             = new ArrayList();
49 19307 nbrodin
50
        /**
51
         * Flag de selecci?n de activaci?n y desactivaci?n
52
         * @param show
53
         */
54
        public void showFiltersSelected(boolean show) {
55
                this.showFiltersSelected = show;
56
        }
57
58
        /**
59
         * Obtiene la lista de par?metros
60
         * @return the paramsList
61
         */
62
        public ArrayList getParamsList() {
63
                return paramsList;
64
        }
65
66
        /**
67
         * Asigna la lista de par?metros
68
         * @param params
69
         */
70
        public void setParamsList(ArrayList params) {
71
                this.paramsList = params;
72
        }
73
74
        /**
75 19362 nbrodin
         * Asigna el arrayList de filtros inicial. Esto hace que aplique los filtros que ya
76
         * existen en el raster. Estos pueden ser obtenidos del render de la capa de la forma
77
         * lyr.getRender().getFilterList().getStatusCloned().
78
         * @param params Lista de filtros aplicados.
79 19307 nbrodin
         */
80
        public void setFilterStatus(ArrayList filtersInit) {
81
                this.filtersInit = filtersInit;
82
        }
83
84
        /**
85
         * Devuelve el arrayList de filtros inicial
86
         * @return
87
         */
88
        public ArrayList getFilterStatus() {
89
                return filtersInit;
90
        }
91
92
        /**
93
         * A?adir un nuevo Params a la lista de Params que podemos manejar. Un Params
94
         * equivale a un filtro cargado. El hecho de trabajar con Params y no con
95
         * filtros, simplifica totalmente el panel. Sin tener que depender de los
96
         * filtros nada m?s que para el momento de dibujado o guardado.
97
         * @param name
98
         * @param params
99
         * @param classFilter
100
         */
101
        public void addNewParam(String name, Params params, Class classFilter) {
102
                ParamStruct param = new ParamStruct();
103
                param.setFilterName(name);
104
                param.setFilterParam(params);
105
                param.setFilterClass(classFilter);
106
                paramsList.add(param);
107
        }
108
109
        /**
110
         * Procesa la imagen con la lista de filtros si el flag showFilterSelected est? a true.
111
         * Esta funci?n llama a addFilter por cada filtro a?adido pero es applyFilters la encargada
112
         * de construir la lista.
113
         */
114
        public void process(IRasterRendering rendering) throws FilterTypeException {
115
                rendering.getRenderFilterList().clear();
116
117
                if (showFiltersSelected) {
118
                        RasterFilterList filterList = rendering.getRenderFilterList();
119
                        RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
120
121
                        ArrayList listFilterUsed = applyFilters(rendering);
122
                        ArrayList exc = new ArrayList();
123 19362 nbrodin
                        for (int i = 0; i < listFilterUsed.size(); i++) {
124
                                IRasterFilterListManager filterManager = stackManager.getManagerByFilterClass(((ParamStruct) listFilterUsed.get(i)).getFilterClass());
125 19307 nbrodin
                                try {
126 19362 nbrodin
                                        filterManager.addFilter(((ParamStruct) listFilterUsed.get(i)).getFilterClass(), ((ParamStruct) listFilterUsed.get(i)).getFilterParam());
127 19307 nbrodin
                                } catch (FilterTypeException e) {
128
                                        exc.add(e);
129
                                }
130
                        }
131
                        if(exc.size() != 0) {
132
                                RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_adding_filters"), this, exc);
133
                                exc.clear();
134
                        }
135
                }
136
        }
137
138
        /**
139
         * Aqui se seleccionan que filtros se van a aplicar y se devuelven en forma
140
         * de ArrayList tanto para el dibujado como cuando aceptan o aplican el panel.
141
         * @param rendering
142
         * @return
143
         */
144
        public ArrayList applyFilters(IRasterRendering rendering) {
145
                ArrayList listFilterUsed = new ArrayList();
146
147
                RasterFilterList filterList = new RasterFilterList();
148
                filterList.setEnv(rendering.getRenderFilterList().getEnv());
149
                RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
150
151
                if(filtersInit == null)
152
                        return listFilterUsed;
153
154 19362 nbrodin
                // Conservamos filtros ya existentes
155 19307 nbrodin
                for (int i = 0; i < filtersInit.size(); i++) {
156 19362 nbrodin
157 19307 nbrodin
                        RasterFilter obj = null;
158
                        for (int j = 0; j < stackManager.getRasterFilterList().size(); j++) {
159
                                Class classFilter = (Class) stackManager.getRasterFilterList().get(j);
160
                                try {
161
                                        obj = (RasterFilter) classFilter.newInstance();
162
                                        if (obj.getName().equals(((RasterFilter) filtersInit.get(i)).getName()))
163
                                                break;
164
                                } catch (InstantiationException e) {
165
                                        RasterToolsUtil.messageBoxError("error_creando_filtro", this, e);
166
                                } catch (IllegalAccessException e) {
167
                                        RasterToolsUtil.messageBoxError("error_creando_filtro", this, e);
168
                                }
169
                        }
170
171
                        // Si no encontramos el filtro apropiado, nos olvidamos de el
172
                        if (obj == null)
173
                                continue;
174
175
                        // Si no es visible tenemos que conservar el filtro
176
                        try {
177
                                Params params = (Params) ((RasterFilter) filtersInit.get(i)).getUIParams(((RasterFilter) filtersInit.get(i)).getName()).clone();
178
                                // A?ado el parametro RenderBands a los parametros del filtro
179
                                String rgb = rendering.getRenderBands()[0] + " " + rendering.getRenderBands()[1] + " " + rendering.getRenderBands()[2];
180
                                params.setParam("RenderBands", rgb, 0, null);
181 19376 nbrodin
182 19307 nbrodin
                                ParamStruct newParam = new ParamStruct();
183
                                newParam.setFilterClass(obj.getClass());
184
                                newParam.setFilterName(((RasterFilter) filtersInit.get(i)).getName());
185
                                newParam.setFilterParam(params);
186
                                listFilterUsed.add(newParam);
187
                        } catch (CloneNotSupportedException e) {
188
                        }
189
                }
190 19335 nbrodin
191 19362 nbrodin
                // Metemos los filtros seleccionados en listFilterUsed
192
                for (int i = 0; i < paramsList.size(); i++)
193
                        listFilterUsed.add(paramsList.get(i));
194 19335 nbrodin
195 19307 nbrodin
                return listFilterUsed;
196
        }
197
198
}