Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extRasterTools-SE / src / org / gvsig / raster / beans / previewbase / PreviewRequestManager.java @ 30008

History | View | Annotate | Download (5.31 KB)

1
/* 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.awt.Dimension;
22
import java.awt.Graphics2D;
23

    
24
import org.gvsig.andami.PluginServices;
25
import org.gvsig.fmap.dal.exception.ReadException;
26
import org.gvsig.fmap.geom.GeometryLocator;
27
import org.gvsig.fmap.geom.GeometryManager;
28
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
29
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
30
import org.gvsig.fmap.geom.primitive.Envelope;
31
import org.gvsig.fmap.mapcontext.ViewPort;
32
import org.gvsig.fmap.mapcontext.layers.FLayer;
33
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
34
import org.gvsig.fmap.raster.layers.IRasterLayerActions;
35
import org.gvsig.gui.beans.imagenavigator.IClientImageNavigator;
36
import org.gvsig.gui.beans.imagenavigator.ImageUnavailableException;
37
import org.gvsig.raster.grid.filter.FilterTypeException;
38
import org.gvsig.raster.hierarchy.IRasterRendering;
39
import org.gvsig.raster.util.RasterToolsUtil;
40
import org.slf4j.Logger;
41
import org.slf4j.LoggerFactory;
42

    
43

    
44
/**
45
 * Gestor de visualizaci?n de preview. Se encarga del repintado de la imagen
46
 * de la previsualizaci?n
47
 *
48
 * 19/02/2008
49
 * @author Nacho Brodin nachobrodin@gmail.com
50
 */
51
public class PreviewRequestManager implements IClientImageNavigator {
52
        private static GeometryManager  geomManager       = GeometryLocator.getGeometryManager();
53
        private static final Logger     logger            = LoggerFactory.getLogger(PreviewRequestManager.class);
54
        private PreviewBasePanel        previewBasePanel  = null;
55
        private FLyrRasterSE            previewLayer      = null;
56
        private IPreviewRenderProcess   renderProcess     = null;
57

    
58
        /**
59
         * Construye un ColorTableListener
60
         * @param
61
         */
62
        public PreviewRequestManager(        PreviewBasePanel panel,
63
                                                                        IPreviewRenderProcess renderProcess,
64
                                                                        FLyrRasterSE layer) {
65
                this.previewBasePanel = panel;
66
                this.renderProcess = renderProcess;
67
                setLayer(layer);
68
        }
69

    
70
        /**
71
         * Asigna la capa raster de la vista
72
         * @param fLayer
73
         */
74
        private void setLayer(FLayer fLayer) {
75
                if (fLayer instanceof FLyrRasterSE) {
76
                        FLyrRasterSE ly = ((FLyrRasterSE) fLayer);
77
                        try {
78
                                if(ly.isActionEnabled(IRasterLayerActions.REMOTE_ACTIONS))
79
                                        previewLayer = (FLyrRasterSE)ly.getFileLayer();//ly;
80
                                else
81
                                        previewLayer = (FLyrRasterSE) fLayer.cloneLayer();                                        
82
                        } catch (Exception e) {
83
                                RasterToolsUtil.messageBoxError("preview_not_available", previewBasePanel, e);
84
                        }
85
                }
86
        }
87

    
88
        /**
89
         * Cierra la capa abierta para previsualizaci?n
90
         */
91
        public void closePreviewLayer() {
92
                if (previewLayer != null) {
93
                        previewLayer.setRemoveRasterFlag(true);
94
                        previewLayer.removeLayerListener(null);
95
                }
96
        }
97

    
98
        /*
99
         * (non-Javadoc)
100
         * @see org.gvsig.gui.beans.imagenavigator.IClientImageNavigator#drawImage(java.awt.Graphics2D,
101
         *      double, double, double, double, double, int, int)
102
         */
103
        public void drawImage(Graphics2D g, double x1, double y1, double x2, double y2, double zoom, int width, int height)
104
                throws ImageUnavailableException {
105
                if (previewLayer == null || !(previewLayer instanceof IRasterRendering))
106
                        throw new ImageUnavailableException(PluginServices.getText(this, "error_dont_exists_layer"));
107

    
108
                IRasterRendering rendering = (previewLayer);
109

    
110
                // Inicializo el ViewPort
111
                ViewPort vp = new ViewPort(null);
112
                Envelope env;
113
                try {
114
                        env = geomManager.createEnvelope(x1, y2, x2, y1, SUBTYPES.GEOM2D);
115
                        vp.setEnvelope(env);
116
                } catch (CreateEnvelopeException e3) {
117
                        logger.error("Error drawing the image", e3);
118
                }        
119
                vp.setImageSize(new Dimension(width, height));
120

    
121
                rendering.getRenderFilterList().pushStatus();
122
                try {
123
                        renderProcess.process(rendering);
124
                } catch (FilterTypeException e1) {
125
                        RasterToolsUtil.debug("error_adding_filters", this, e1);
126
                        throw new ImageUnavailableException(PluginServices.getText(this, "error_adding_filters"));
127
                } catch (ImageUnavailableException e2) {
128
                        throw new ImageUnavailableException(PluginServices.getText(this, "error_adding_filters"));
129
                } catch (Exception e2) {
130
                        RasterToolsUtil.debug("error_adding_filters", this, e2);
131
                        throw new ImageUnavailableException(PluginServices.getText(this, "error_adding_filters"));
132
                }
133

    
134
                try {
135
                        previewLayer.draw(null, g, vp, null, 1.0);
136
                } catch (ReadException e) {
137
                        RasterToolsUtil.debug("error_preview_render", this, e);
138
                        throw new ImageUnavailableException(PluginServices.getText(this, "error_preview_render"));
139
                } catch (Exception e2) {
140
                        RasterToolsUtil.debug("error_preview_render", this, e2);
141
                        throw new ImageUnavailableException(PluginServices.getText(this, "error_preview_render"));
142
                }
143
                rendering.getRenderFilterList().popStatus();
144
        }
145
}