Revision 1340

View differences:

org.gvsig.raster.wcs/tags/buildNumber_23/org.gvsig.raster.wcs/org.gvsig.raster.wcs.app/distribution/distribution.xml
1
<assembly>
2
</assembly>
0 3

  
org.gvsig.raster.wcs/tags/buildNumber_23/org.gvsig.raster.wcs/org.gvsig.raster.wcs.app/buildNumber.properties
1
#maven.buildNumber.plugin properties file
2
#Mon Jun 25 09:21:36 CEST 2012
3
buildNumber=2
org.gvsig.raster.wcs/tags/buildNumber_23/org.gvsig.raster.wcs/org.gvsig.raster.wcs.app/org.gvsig.raster.wcs.app.wcsclient/distribution/distribution.xml
1
<assembly>
2
	<id>distribution</id>
3
	<formats>
4
		<format>dir</format>
5
	</formats>
6
	<fileSets>
7
		<!-- Estructure for the extension -->
8
		<fileSet>
9
			<directory>src/main/resources</directory>
10
			<outputDirectory>${extension.install.dir.name}
11
			</outputDirectory>
12
		</fileSet>
13
	</fileSets>
14
	<files>
15
	   <file>
16
          <source>package.info</source>
17
          <outputDirectory>${extension.install.dir.name}</outputDirectory>
18
       </file>
19
    </files>
20
	<dependencySets>
21
		<dependencySet>
22
			<outputDirectory>${extension.install.dir.name}/${library-dir}
23
			</outputDirectory>
24
			<includes>
25
				<include>org.gvsig:org.gvsig.raster.wcs.app.wcsclient:jar</include>
26
				<include>org.gvsig:org.gvsig.raster.wcs.io:jar</include>
27
				<include>org.gvsig:org.gvsig.remoteclient</include>
28
			</includes>
29
		</dependencySet>
30
	</dependencySets>
31
</assembly>
0 32

  
org.gvsig.raster.wcs/tags/buildNumber_23/org.gvsig.raster.wcs/org.gvsig.raster.wcs.app/org.gvsig.raster.wcs.app.wcsclient/buildNumber.properties
1
#maven.buildNumber.plugin properties file
2
#Fri Nov 09 13:25:53 CET 2012
3
buildNumber=23
org.gvsig.raster.wcs/tags/buildNumber_23/org.gvsig.raster.wcs/org.gvsig.raster.wcs.app/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestFormatsPanel.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 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.wcs.app.extension.gui.panel;
20

  
21
import javax.swing.JFrame;
22

  
23
import org.gvsig.raster.wcs.app.wcsclient.gui.panel.FormatPanel;
24

  
25
public class TestFormatsPanel {
26
	private int               w        = 510;
27
	private int               h        = 610;
28
	private JFrame            frame    = new JFrame();
29
	private FormatPanel       desc     = null;
30

  
31
	public TestFormatsPanel() {
32
		desc = new FormatPanel();
33
		frame.getContentPane().add(desc);
34
		frame.setSize(w, h);
35
		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
36
		frame.setVisible(true);
37
	}
38

  
39
	public static void main(String[] args) {
40
		new TestFormatsPanel();
41
	}
42
}
0 43

  
org.gvsig.raster.wcs/tags/buildNumber_23/org.gvsig.raster.wcs/org.gvsig.raster.wcs.app/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestInfoPanel.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 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.wcs.app.extension.gui.panel;
20

  
21
import javax.swing.JFrame;
22

  
23
import org.gvsig.raster.wcs.app.wcsclient.gui.panel.InfoPanel;
24

  
25
public class TestInfoPanel {
26
	private int               w        = 510;
27
	private int               h        = 610;
28
	private JFrame            frame    = new JFrame();
29
	private InfoPanel         desc     = null;
30

  
31
	public TestInfoPanel() {
32
		desc = new InfoPanel();
33
		frame.getContentPane().add(desc);
34
		frame.setSize(w, h);
35
		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
36
		frame.setVisible(true);
37
	}
38

  
39
	public static void main(String[] args) {
40
		new TestInfoPanel();
41
	}
42
}
0 43

  
org.gvsig.raster.wcs/tags/buildNumber_23/org.gvsig.raster.wcs/org.gvsig.raster.wcs.app/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestLayerPanel.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 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.wcs.app.extension.gui.panel;
20

  
21
import javax.swing.JFrame;
22

  
23
import org.gvsig.raster.wcs.app.wcsclient.gui.panel.LayerPanel;
24

  
25
public class TestLayerPanel {
26
	private int               w        = 510;
27
	private int               h        = 610;
28
	private JFrame            frame    = new JFrame();
29
	private LayerPanel        desc     = null;
30

  
31
	public TestLayerPanel() {
32
		desc = new LayerPanel();
33
		frame.getContentPane().add(desc);
34
		frame.setSize(w, h);
35
		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
36
		frame.setVisible(true);
37
	}
38

  
39
	public static void main(String[] args) {
40
		new TestLayerPanel();
41
	}
42
}
0 43

  
org.gvsig.raster.wcs/tags/buildNumber_23/org.gvsig.raster.wcs/org.gvsig.raster.wcs.app/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestParameterPanel.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 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.wcs.app.extension.gui.panel;
20

  
21
import javax.swing.JFrame;
22

  
23
import org.gvsig.raster.wcs.app.wcsclient.gui.panel.ParameterPanel;
24

  
25
public class TestParameterPanel {
26
	private int               w        = 510;
27
	private int               h        = 610;
28
	private JFrame            frame    = new JFrame();
29
	private ParameterPanel    desc     = null;
30

  
31
	public TestParameterPanel() {
32
		desc = new ParameterPanel();
33
		frame.getContentPane().add(desc);
34
		frame.setSize(w, h);
35
		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
36
		frame.setVisible(true);
37
	}
38

  
39
	public static void main(String[] args) {
40
		new TestParameterPanel();
41
	}
42
}
0 43

  
org.gvsig.raster.wcs/tags/buildNumber_23/org.gvsig.raster.wcs/org.gvsig.raster.wcs.app/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/WCSClientExtension.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
* 
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
* 
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
* 
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
* MA  02110-1301, USA.
20
* 
21
*/
22
package org.gvsig.raster.wcs.app.wcsclient;
23

  
24
import org.gvsig.andami.IconThemeHelper;
25
import org.gvsig.andami.plugins.Extension;
26
import org.gvsig.app.extension.AddLayer;
27
import org.gvsig.raster.wcs.app.wcsclient.gui.toc.WCSPropsTocMenuEntry;
28
import org.gvsig.raster.wcs.app.wcsclient.gui.toc.WCSZoomPixelCursorTocMenuEntry;
29
import org.gvsig.raster.wcs.app.wcsclient.gui.wizard.WCSWizard;
30
import org.gvsig.raster.wcs.app.wcsclient.layer.DynObjectSetWCSInfo;
31
import org.gvsig.raster.wcs.app.wcsclient.layer.FLyrWCS;
32
import org.gvsig.tools.ToolsLocator;
33
import org.gvsig.tools.extensionpoint.ExtensionPoint;
34

  
35

  
36
/**
37
 * Extension for adding WCS support to gvSIG.
38
 * @author jaume
39
 */
40
public class WCSClientExtension extends Extension {
41
	/**
42
	 * Initializes the toc menu
43
	 */
44
	public void initialize() {
45
		// Adds a new tab to the "add layer" wizard for WCS layer creation
46
		ExtensionPoint exPoint = ToolsLocator.getExtensionPointManager().add(
47
				"View_TocActions");
48
		
49
		AddLayer.addWizard(WCSWizard.class);
50

  
51
		exPoint.append("WCSProperties", "", new WCSPropsTocMenuEntry());
52
    	exPoint.append("WCSZoomPixel", "", new WCSZoomPixelCursorTocMenuEntry());
53

  
54
		ToolsLocator.getExtensionPointManager().add("CatalogLayers").append(
55
				"OGC:WCS", "", FLyrWCS.class);
56
    	initializeIcons();
57
    	DynObjectSetWCSInfo.registerDynClass();
58
	}
59
	
60
	/*
61
	 * (non-Javadoc)
62
	 * @see org.gvsig.andami.plugins.Extension#postInitialize()
63
	 */
64
	public void postInitialize() {
65
		FLyrWCS.registerPersistent();
66
	}
67

  
68
	public void execute(String actionCommand) {
69
		// no commands, no code.
70
	}
71

  
72
	public boolean isEnabled() {
73
		// may return whatever
74
		return true;
75
	}
76

  
77
	public boolean isVisible() {
78
		// may return whatever
79
		return false;
80
	}
81

  
82
	void initializeIcons(){
83
		IconThemeHelper.registerIcon(null, "view-previsualize-area", this);
84
		IconThemeHelper.registerIcon(null, "ico-WCS-Layer", this);
85
	}
86
}
0 87

  
org.gvsig.raster.wcs/tags/buildNumber_23/org.gvsig.raster.wcs/org.gvsig.raster.wcs.app/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/FLyrWCS.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 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
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41
package org.gvsig.raster.wcs.app.wcsclient.layer;
42

  
43
import java.awt.Dimension;
44
import java.awt.Graphics2D;
45
import java.awt.Point;
46
import java.awt.Rectangle;
47
import java.awt.geom.AffineTransform;
48
import java.awt.geom.NoninvertibleTransformException;
49
import java.awt.geom.Point2D;
50
import java.awt.geom.Rectangle2D;
51
import java.awt.image.BufferedImage;
52
import java.io.IOException;
53
import java.util.ArrayList;
54
import java.util.HashMap;
55

  
56
import javax.print.attribute.PrintRequestAttributeSet;
57

  
58
import org.cresques.cts.IProjection;
59
import org.gvsig.compat.net.ICancellable;
60
import org.gvsig.fmap.dal.DALLocator;
61
import org.gvsig.fmap.dal.DataManager;
62
import org.gvsig.fmap.dal.DataParameters;
63
import org.gvsig.fmap.dal.DataStore;
64
import org.gvsig.fmap.dal.DataStoreParameters;
65
import org.gvsig.fmap.dal.coverage.RasterLocator;
66
import org.gvsig.fmap.dal.coverage.RasterManager;
67
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
68
import org.gvsig.fmap.dal.coverage.datastruct.ViewPortData;
69
import org.gvsig.fmap.dal.coverage.exception.FilePaletteException;
70
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
71
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
72
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
73
import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
74
import org.gvsig.fmap.dal.coverage.grid.RasterFilter;
75
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
76
import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
77
import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
78
import org.gvsig.fmap.dal.coverage.store.props.Transparency;
79
import org.gvsig.fmap.dal.exception.DataException;
80
import org.gvsig.fmap.dal.exception.InitializeException;
81
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
82
import org.gvsig.fmap.dal.exception.ReadException;
83
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
84
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
85
import org.gvsig.fmap.geom.GeometryLocator;
86
import org.gvsig.fmap.geom.GeometryManager;
87
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
88
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
89
import org.gvsig.fmap.geom.primitive.Envelope;
90
import org.gvsig.fmap.mapcontext.ViewPort;
91
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
92
import org.gvsig.fmap.mapcontext.layers.FLayer;
93
import org.gvsig.fmap.mapcontext.layers.FLyrDefault;
94
import org.gvsig.fmap.mapcontext.layers.Tiling;
95
import org.gvsig.raster.fmap.layers.DefaultFLyrRaster;
96
import org.gvsig.raster.fmap.layers.IRasterLayerActions;
97
import org.gvsig.raster.fmap.layers.NotAvailableStateException;
98
import org.gvsig.raster.util.CancelTaskImpl;
99
import org.gvsig.raster.wcs.io.WCSDataParameters;
100
import org.gvsig.raster.wcs.io.WCSServerExplorer;
101
import org.gvsig.raster.wcs.io.WCSServerExplorerParameters;
102
import org.gvsig.tools.ToolsLocator;
103
import org.gvsig.tools.dynobject.DynObjectSet;
104
import org.gvsig.tools.dynobject.DynStruct;
105
import org.gvsig.tools.persistence.PersistenceManager;
106
import org.gvsig.tools.persistence.PersistentState;
107
import org.gvsig.tools.persistence.exception.PersistenceException;
108
import org.gvsig.tools.task.Cancellable;
109
import org.gvsig.tools.task.SimpleTaskStatus;
110
import org.gvsig.tools.task.TaskStatus;
111
import org.gvsig.tools.task.TaskStatusManager;
112
import org.slf4j.Logger;
113
import org.slf4j.LoggerFactory;
114

  
115

  
116
/**
117
 * Class for the WCS layer.
118
 *
119
 * Capa para el WCS.
120
 *
121
 * Las capas WCS son tileadas para descargarlas del servidor. Esto quiere decir que
122
 * est?n formadas por multiples ficheros raster. Por esto la fuente de datos raster (IRasterDatasource)
123
 * de la capa FLyrWCS es un objeto de tipo CompositeDataset. Este objeto est? compuesto por un array
124
 * bidimensional de MultiRasterDataset. Cada uno de los MultiRasterDataset corresponde con un tile
125
 * salvado en disco. Estos MultiRasterDataset se crean cada vez que se repinta ya que en WCS a cada
126
 * zoom varian los ficheros fuente. La secuencia de creaci?n de un CompositeDataset ser?a la siguiente:
127
 * <UL>
128
 * <LI>Se hace una petici?n de dibujado por parte del usuario llamando al m?todo draw de FLyrWCS</LI>
129
 * <LI>Se tilea la petici?n</LI>
130
 * <LI>Cada tile se dibuja abriendo una FLyrRaster para ese tile</LI>
131
 * <LI>Si es el primer dibujado se guarda una referencia en la capa WCS a las propiedades de renderizado, orden de bandas,
132
 * transparencia, filtros aplicados, ...</LI>
133
 * <LI>Si no es el primer dibujado se asignan las propiedades de renderizado cuya referencia se guarda en la capa WCS</LI>
134
 * <LI>Se guarda el MultiRasterDataset de cada tile</LI>
135
 * <LI>Al acabar todos los tiles creamos un CompositeDataset con los MultiRasterDataset de todos los tiles</LI>
136
 * <LI>Asignamos a la capa la referencia de las propiedades de renderizado que tenemos almacenadas. De esta forma si hay
137
 * alguna modificaci?n desde el cuadro de propiedades ser? efectiva sobre los tiles que se dibujan.</LI>
138
 * </UL>
139
 *
140
 * @author jaume - jaume.dominguez@iver.es
141
 */
142
public class FLyrWCS extends DefaultFLyrRaster {
143
    public static final String           PERSISTENT_NAME           = "FLyrWCS_Persistent";
144
    public static final String           PERSISTENT_DESCRIPTION    = "FLyrWCS Persistent Definition";
145
    private static final int             MAX_RETRY_TIMES           = 5;
146

  
147
    private static final GeometryManager geomManager               = GeometryLocator.getGeometryManager();
148
    private static final Logger          logger                    = LoggerFactory.getLogger(FLyrWCS.class);
149
    private boolean 					 isPrinting                = false;
150

  
151
    private boolean 					 mustTileDraw              = false;
152
    private int 						 maxTileDrawWidth          = 1023;
153
    private int							 maxTileDrawHeight         = 1023;
154
    private final int 					 maxTilePrintWidth         = 1023;
155
    private final int 					 maxTilePrintHeight        = 1023;
156

  
157
    private boolean						 firstLoad                 = false;
158
    private Envelope					 fullEnvelope              = null;
159
    private int                          callCount;
160
    private RasterManager                rManager                  = RasterLocator.getManager();
161
    private DataStoreParameters          params                    = null;
162
    private WCSServerExplorer            explorer                  = null;
163
    private boolean                      deleteCache               = false;
164

  
165
    @SuppressWarnings("unused")
166
    private class MyCancellable implements ICancellable {
167
        private Cancellable original;
168

  
169
        public MyCancellable(Cancellable cancelOriginal) {
170
            this.original = cancelOriginal;
171
        }
172

  
173
        public boolean isCanceled() {
174
            return original.isCanceled();
175
        }
176

  
177
        public Object getID() {
178
            return this;
179
        }
180
    }
181

  
182
    public FLyrWCS() {
183
        super();
184
        this.updateDrawVersion();
185
        try {
186
            enableAwake();
187
        } catch (NotAvailableStateException e) {
188
            logger.error("Fallo el estado de open. Closed=" + isClosed() + " Awake=" + isAwake(), this, e);
189
        }
190
    }
191

  
192
    public FLyrWCS(DataStoreParameters dataStoreParameters) throws Exception {
193
        this();
194
        //Create the explorer and connect
195
        DataManager dataManager = DALLocator.getDataManager();
196
        WCSServerExplorerParameters explorerParams = (WCSServerExplorerParameters) 
197
        dataManager.createServerExplorerParameters(WCSServerExplorer.NAME);
198
        explorerParams.setHost((String)dataStoreParameters.getDynValue("uri"));
199
        WCSServerExplorer wmsServerExplorer = 
200
            (WCSServerExplorer) dataManager.openServerExplorer(WCSServerExplorer.NAME, explorerParams);
201
        wmsServerExplorer.connect(null);
202
        wmsServerExplorer.getCoverageList();
203
        
204
        //Set the parameters
205
        setParameters((WCSDataParameters)dataStoreParameters);
206
        setExplorer(wmsServerExplorer);
207
    }
208

  
209
    public static DataStore createDataStore(String host, IProjection srs) throws InitializeException {
210
        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
211
        RasterDataParameters params = null;
212
        try {
213
            params = (RasterDataParameters)dataman.createServerExplorerParameters(WCSServerExplorer.NAME);
214
        } catch (InitializeException e) {
215
            return null;
216
        } catch (ProviderNotRegisteredException e) {
217
            return null;
218
        }
219
        params.setURI(host);
220
        params.setSRS(srs);
221

  
222
        try {
223
            return dataman.openStore(params.getDataStoreName(), params);
224
        } catch (ValidateDataParametersException e) {
225
            throw new InitializeException(e);
226
        } catch (ProviderNotRegisteredException e) {
227
            throw new InitializeException(e);
228
        }
229
    }
230

  
231
    /*
232
     * (non-Javadoc)
233
     * @see org.gvsig.raster.fmap.layers.DefaultFLyrRaster#setDataStore(org.gvsig.fmap.dal.DataStore)
234
     */
235
    public void setDataStore(DataStore dataStore) throws LoadLayerException {
236
        this.dataStore = (RasterDataStore) dataStore;
237
        try {
238
            if(this.dataStore.isOpen())
239
                enableOpen();
240
        } catch (NotAvailableStateException e) {
241
            logger.error("Fallo el estado de open. Closed=" + isClosed() + " Awake=" + isAwake(), this, e);
242
        }
243
        setProjection(this.dataStore.getProjection());
244
    }
245

  
246
    /*
247
     *  (non-Javadoc)
248
     * @see com.iver.cit.gvsig.fmap.layers.FLayer#draw(java.awt.image.BufferedImage, java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort, com.iver.cit.gvsig.fmap.operations.Cancellable, double)
249
     */
250
    public void draw(BufferedImage image, Graphics2D g, ViewPort viewPort, Cancellable cancel, double scale) throws ReadException {
251
        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
252
		SimpleTaskStatus taskStatus = new RasterTaskStatus("Drawing " + getName() + "...", cancel);
253
		manager.add(taskStatus);
254
		taskStatus.setAutoremove(true);
255

  
256
        if(!firstLoad) {
257
            try {
258
                initFilters();
259
            } catch (FilePaletteException e) {
260
                logger.error(e.getMessage(), this, e);
261
            }
262
            firstLoad = true;
263
        }
264

  
265
        callCount = 0;  
266

  
267
        enableStopped();
268
        
269
        if(recalcLevel) {
270
			double pixelSize = viewPort.getEnvelope().getLength(0) / (double)viewPort.getImageWidth();
271
			zoomLevel = dataStore.getNearestLevel(pixelSize);
272
		}
273
		recalcLevel = true;
274

  
275
        if (isWithinScale(scale)) {
276

  
277
            if(mustTileDraw) {
278
                Point2D p = viewPort.getOffset();
279
                Rectangle r = new Rectangle((int) p.getX(), (int) p.getY(), viewPort.getImageWidth(), viewPort.getImageHeight());
280
                Tiling tiles = new Tiling(maxTileDrawWidth, maxTileDrawHeight, r);
281
                tiles.setAffineTransform((AffineTransform) viewPort.getAffineTransform().clone());
282

  
283
                for (int tileNr = 0; tileNr < tiles.getNumTiles(); tileNr++) {
284
                    // drawing part
285
                    try {
286
                        ViewPort vp = tiles.getTileViewPort(viewPort, tileNr);
287
                        drawTile(g, vp, taskStatus, scale);
288
                    } catch (LoadLayerException e) {
289
                        throw new ReadException(e.getMessage(), e);
290
                    } catch (NoninvertibleTransformException e) {
291
                        throw new ReadException(e.getMessage(), e);
292
                    }
293
                }
294
            } else {
295
                try {
296
                    drawTile(g, viewPort, taskStatus, scale);
297
                } catch (LoadLayerException e) {
298
                    throw new ReadException(e.getMessage(), e);
299
                }
300
            }
301
        }
302
        disableStopped();
303

  
304
        /*Runtime r = Runtime.getRuntime();
305
		System.err.println("********************WCS**********************");
306
		System.err.println("Memoria Total: " + (r.totalMemory() / 1024) +"KB");
307
		System.err.println("Memoria Usada: " + ((r.totalMemory() - r.freeMemory()) / 1024) +"KB");
308
		System.err.println("Memoria Libre: " + (r.freeMemory() / 1024) +"KB");
309
		System.err.println("Memoria MaxMemory: " + (r.maxMemory() / 1024) +"KB");
310
		System.err.println("*********************************************");*/
311
    }
312

  
313
    /**
314
     * This is the method used to draw a tile in a WCS mosaic layer.
315
     * @throws LoadLayerException
316
     * @throws ReadDriverException
317
     * @return true when a tile has been painted
318
     */
319
    @SuppressWarnings("deprecation")
320
    private void drawTile(Graphics2D g, ViewPort vp, SimpleTaskStatus taskStatus, double scale) throws LoadLayerException, ReadException {
321
        callCount++;
322

  
323
        // Compute the query geometry
324
        // 1. Check if it is within borders
325
        Envelope envelope = getFullEnvelope();
326
        Envelope vpEnv = vp.getAdjustedExtent();
327
        if (!vpEnv.intersects(envelope)) {
328
            return;
329
        }
330

  
331
        // 2. Compute extent to be requested.
332
        Rectangle2D bBox = new Rectangle2D.Double();
333
        Rectangle2D.intersect(getRectable2DFromEnvelope(vpEnv),
334
            getRectable2DFromEnvelope(envelope), bBox);
335

  
336
        // 3. Compute size in pixels
337
        double scalex = vp.getAffineTransform().getScaleX();
338
        double scaley = vp.getAffineTransform().getScaleY();
339
        int wImg = (int) Math.ceil(Math.abs(bBox.getWidth() * scalex) + 1);
340
        int hImg = (int) Math.ceil(Math.abs(bBox.getHeight() * scaley) + 1);
341

  
342
        Dimension sz = new Dimension(wImg, hImg);
343

  
344
        if ((wImg <= 0) || (hImg <= 0)) {
345
            return;
346
        }
347

  
348
        try {
349
            //Rectangle2D extent = new Rectangle2D.Double();
350
            //Rectangle2D.Double vpExtent = this.getRectable2DFromEnvelope(vpEnv);
351
            //Rectangle2D.intersect(vpExtent, bBox, extent);
352

  
353
            Extent ex = rManager.getDataStructFactory().createExtent(
354
                vp.getAdjustedEnvelope().getMinimum(0), 
355
                vp.getAdjustedEnvelope().getMaximum(1), 
356
                vp.getAdjustedEnvelope().getMaximum(0), 
357
                vp.getAdjustedEnvelope().getMinimum(1));
358
            ViewPortData vpData = rManager.createViewPortData(vp.getProjection(), ex, sz );
359
            vpData.setMat(vp.getAffineTransform());
360
    		
361
            try {
362
                getParameters().setExtent(bBox);
363
                getParameters().setWidth(wImg);
364
                getParameters().setHeight(hImg);
365
                if(params instanceof WCSDataParameters) {
366
					getRender().draw(g, vpData, taskStatus);
367
                } else {
368
                	Envelope adjustedExtent = vp.getAdjustedExtent();
369
					Extent e = rManager.getDataStructFactory().createExtent(adjustedExtent.getLowerCorner().getX(),
370
							adjustedExtent.getUpperCorner().getY(), adjustedExtent.getUpperCorner().getX(),
371
							adjustedExtent.getLowerCorner().getY());
372
					ViewPortData vp2 = rManager.createViewPortData(vp.getProjection(), e, vp.getImageSize() );
373
					vp2.setMat(vp.getAffineTransform());
374
					getParameters().setExtent(ex.toRectangle2D());
375
					getRender().drawTiledService(g, vp2, vp.getImageSize(), taskStatus);
376
                }
377
            } catch (RasterDriverException e) {
378
                throw new RemoteServiceException("Problems drawing this layer: " + e.getMessage(), e);
379
            } catch (InvalidSetViewException e) {
380
                throw new RemoteServiceException("Problems drawing this layer: " + e.getMessage(), e);
381
            } catch (ProcessInterruptedException e) {
382
            } finally {
383
            	taskStatus.terminate();            	
384
            }
385

  
386
        } catch (RemoteServiceException e) {
387
            if (!taskStatus.isCancellationRequested()) {
388
                if (callCount < MAX_RETRY_TIMES) {
389
                    logger.warn("\n[ FLyrWCS.drawFixedSize() ]  Failed in trying " + callCount + "/" + MAX_RETRY_TIMES + ")\n"); // mess code
390
                    drawTile(g, vp, taskStatus, scale);
391
                } else {
392
                    if (!isPrinting) {
393
                        this.setVisible(false);
394
                    }
395
                    throw new LoadLayerException(getName(), e);
396
                }
397
            }
398
        }
399
        callCount--;
400
        return;
401
    }
402

  
403
    /**
404
     * Gets the explorer
405
     * @return
406
     */
407
    public WCSServerExplorer getExplorer() {
408
        return this.explorer;
409
    }
410

  
411
    /**
412
     * <p>
413
     * Gets the max resolution allowed by the coverage. Requesting a higher resolution
414
     * than this value does not cause any error, but the info responsed is just an
415
     * interpolation. <br>
416
     * </p>
417
     *
418
     * <p>
419
     * In exchange for obtaining a greater file and without additional information,
420
     * we can easily fit it into the View. <br>
421
     * </p>
422
     *
423
     * <p>
424
     * Obtiene la resoluci?n m?xima soportada por la cobertura. La petici?n
425
     * de una resoluci?n superior a la soportada no provoca ning?n error, aunque
426
     * la informaci?n obtenida s?lo es una mera interpolaci?n de informaci?n. <br>
427
     * </p>
428
     *
429
     * <p>
430
     * A cambio de obtener un archivo mayor y sin informaci?n adicional, podemos
431
     * f?cilmente acoplarlo a la vista. <br>
432
     * </p>
433
     *
434
     * @return double
435
     */
436
    public Point2D getMaxResolution() {
437
        return explorer.getMaxResolution(getName());
438
    }
439

  
440
    private Rectangle2D.Double getRectable2DFromEnvelope(Envelope env) {
441
        return new Rectangle2D.Double(env.getMinimum(0), env.getMinimum(1), env
442
            .getLength(0), env.getLength(1));
443
    }
444

  
445
    /**
446
     * Calcula el contenido del fichero de georreferenciaci?n de una imagen.
447
     * @param bBox Tama?o y posici?n de la imagen (en coordenadas de usuario)
448
     * @param sz Tama?o de la imagen en pixeles.
449
     * @return el 'WorldFile', como String.
450
     * @throws IOException
451
     */
452
    public String getDataWorldFile(Rectangle2D bBox, Dimension sz) throws IOException {
453
        StringBuffer data = new StringBuffer();
454
        data.append((bBox.getMaxX() - bBox.getMinX()) / (sz.getWidth() - 1) + "\n");
455
        data.append("0.0\n");
456
        data.append("0.0\n");
457
        data.append("-" + (bBox.getMaxY() - bBox.getMinY()) / (sz.getHeight() - 1) + "\n");
458
        data.append("" + bBox.getMinX() + "\n");
459
        data.append("" + bBox.getMaxY() + "\n");
460
        return data.toString();
461
    }
462

  
463
    /*
464
     * (non-Javadoc)
465
     * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#cloneLayer()
466
     */
467
    public FLayer cloneLayer() throws Exception {
468
        RasterDataStore  ds = dataStore.cloneDataStore();
469
        FLyrWCS layer = new FLyrWCS();
470
        layer.setName(getParameters().getCoverageName());
471
        layer.setOpenRasterStore(ds);
472
        layer.fullEnvelope = fullEnvelope;
473
        layer.params = params;
474
        layer.explorer = explorer;
475

  
476
        ArrayList<RasterFilter> filters = getRender().getFilterList().getStatusCloned();
477

  
478
        //Hacemos una copia de las bandas a renderizar
479
        if(getRender().getRenderBands() != null) {
480
            int[] rb = new int[getRender().getRenderBands().length];
481
            for (int i = 0; i < rb.length; i++)
482
                rb[i] = getRender().getRenderBands()[i];
483
            layer.getRender().setRenderBands(rb);
484
        }
485

  
486
        //Asignamos el entorno
487
        if(layer.getRender().getFilterList() == null)
488
            layer.getRender().setFilterList(RasterLocator.getManager().createEmptyFilterList(getRender().getFilterList().getInitDataType()));
489
        layer.getRender().getFilterList().setEnv(getRender().getFilterList().getEnv());
490
        layer.getRender().getFilterList().setStatus(filters);
491

  
492
        // Asignamos los valores noData del original
493
        layer.setNoDataValue(getNoDataValue());
494
        if(dataStore.getNoDataValue().isDefined())
495
        	layer.setNoDataTransparent(true);
496
        layer.enableOpen();
497

  
498
        return layer;
499
    }
500

  
501
    public Transparency getRenderTransparency() {
502
        return getRender().getLastTransparency();
503
    }
504

  
505
    /*
506
     * (non-Javadoc)
507
     * @see org.gvsig.fmap.raster.layers.FLyrRasterSE#print(java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort, com.iver.utiles.swing.threads.Cancellable, double, javax.print.attribute.PrintRequestAttributeSet)
508
     */
509
    public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel, double scale, PrintRequestAttributeSet properties) throws ReadException {
510
        if (isVisible() && isWithinScale(scale)){
511
            draw(null, g, viewPort, cancel, scale);
512
        }
513
    }
514

  
515
    /**
516
     * Inserta la extensi?n total de la capa en la proyeccion original.
517
     *
518
     * @param fullExtent
519
     *            Rect?ngulo.
520
     */
521
    public void setFullEnvelope(Envelope envelope) {
522
        Envelope cur = this.getFullEnvelope();
523
        if (cur == envelope) {
524
            return;
525
        }
526
        if (cur != null && cur.equals(envelope)) {
527
            return;
528
        }
529

  
530
        this.fullEnvelope = envelope;
531
        this.updateDrawVersion();
532
    }
533

  
534
    /**
535
     * Sets the layer's full extent.
536
     *
537
     * Establece la extensi?n m?xima de la capa.
538
     *
539
     * @param rect
540
     */
541
    public void setFullExtent(Rectangle2D fullExtent) {
542
        this.setFullEnvelope(this.getEnvelopeFromRectable2D(fullExtent));
543
    }
544

  
545
    private Envelope getEnvelopeFromRectable2D(Rectangle2D rect) {
546
        try {
547
            return geomManager.createEnvelope(rect.getMinX(), rect.getMinY(),
548
                rect.getMaxX(), rect.getMaxY(),
549
                SUBTYPES.GEOM2D);
550
        } catch (CreateEnvelopeException e) {
551
            logger.error("Error creating the envelope", e);
552
        }
553
        return null;
554
    }
555

  
556

  
557
    public HashMap<String, Object> getProperties() {
558
        HashMap<String, Object> info = new HashMap<String, Object>();
559
        try {
560
            info.put("name", getName());
561
            info.put("selectedLayers", getParameters().getCoverageName());
562
            info.put("host", getParameters().getURI());
563
            info.put("crs", getParameters().getSRSCode());
564
            info.put("format", getParameters().getFormat());
565
            info.put("time", getParameters().getTime());
566
            return info;
567
        } catch (Exception e) {
568
            e.printStackTrace();
569
        }
570
        return null;
571
    }
572

  
573
    /*
574
     *  (non-Javadoc)
575
     * @see com.iver.cit.gvsig.fmap.layers.RasterOperations#getTileSize()
576
     */
577
    public int[] getTileSize() {
578
        int[] size = {maxTileDrawWidth, maxTileDrawHeight};
579
        return size;
580
    }
581

  
582
    /*
583
     * (non-Javadoc)
584
     * @see org.gvsig.raster.fmap.layers.DefaultFLyrRaster#getTocImageIcon()
585
     */
586
    public String getTocImageIcon() {
587
        return "ico-WCS-Layer";
588
    }
589

  
590
    /*
591
     *  (non-Javadoc)
592
     * @see com.iver.cit.gvsig.fmap.layers.RasterOperations#isTiled()
593
     */
594
    public boolean isTiled() {
595
        return mustTileDraw;
596
    }
597

  
598
    @SuppressWarnings("deprecation")
599
    @Override
600
    public DynObjectSet getInfo(Point p, double tolerance, Cancellable cancel,
601
        boolean fast) throws LoadLayerException, DataException {
602

  
603
        //try {
604
        ViewPort viewPort = getMapContext().getViewPort();
605

  
606
        Point tiledPoint = new Point((int) p.getX() % maxTilePrintWidth, (int) p.getY() % maxTilePrintHeight);
607
        Rectangle rect = new Rectangle(0, 0, viewPort.getImageWidth() - 1, viewPort.getImageHeight() - 1);
608
        Tiling tiles = new Tiling(maxTilePrintWidth, maxTilePrintHeight, rect);
609
        tiles.setAffineTransform((AffineTransform) viewPort.getAffineTransform().clone());
610
        int nCols = tiles.getNumCols();
611

  
612
        int col = (int) p.getX() / maxTilePrintWidth;
613
        int row = (int) p.getY() / maxTilePrintHeight;
614
        int tileIndex = (row * nCols) + col;
615

  
616
        ViewPort vp = null;
617
        try {
618
            vp = tiles.getTileViewPort(viewPort, tileIndex);
619
        } catch (NoninvertibleTransformException e1) {
620
            throw new LoadLayerException("", e1);
621
        }
622

  
623
        getParameters().setExtent(this.getRectable2DFromEnvelope(vp.getAdjustedExtent()));
624
        getParameters().setWidth(vp.getImageWidth());
625
        getParameters().setHeight(vp.getImageHeight());
626

  
627
        CancelTaskImpl cancellable = new CancelTaskImpl(cancel);
628
        getParameters().setCancellable(cancellable);
629

  
630
        String fInfo;
631
        try {
632
            fInfo = getDataStore().getInfoByPoint(tiledPoint.getX(), tiledPoint.getY(), cancellable);
633
        } catch (RemoteServiceException e) {
634
            throw new LoadLayerException("Error in getInfoByPoint", e);
635
        }
636
        return new DynObjectSetWCSInfo(fInfo, DynObjectSetWCSInfo.TYPE_TEXT);
637
    }
638
    
639
	/*
640
	 * (non-Javadoc)
641
	 * @see org.gvsig.raster.fmap.layers.FLyrRaster#getFileFormat()
642
	 */
643
	@Override
644
	public String getFileFormat() {
645
		return "WCS";
646
	}
647

  
648
    /*
649
     * (non-Javadoc)
650
     * @see org.gvsig.fmap.raster.layers.FLyrRasterSE#isActionEnabled(int)
651
     */
652
    public boolean isActionEnabled(int action) {
653
        switch (action) {
654
        case IRasterLayerActions.ZOOM_PIXEL_RESOLUTION:
655
        case IRasterLayerActions.FLYRASTER_BAR_TOOLS:
656
        case IRasterLayerActions.BANDS_FILE_LIST:
657
        case IRasterLayerActions.GEOLOCATION:
658
        case IRasterLayerActions.PANSHARPENING:
659
        case IRasterLayerActions.SAVE_COLORINTERP:
660
            return false;
661
        case IRasterLayerActions.BANDS_RGB:
662
        case IRasterLayerActions.REMOTE_ACTIONS:
663
        case IRasterLayerActions.COLOR_TABLE:
664
            return true;
665
        }
666

  
667
        return super.isActionEnabled(action);
668
    }
669

  
670
    /*
671
     * (non-Javadoc)
672
     * @see org.gvsig.fmap.raster.layers.FLyrRasterSE#overviewsSupport()
673
     */
674
    public boolean overviewsSupport() {
675
        return false;
676
    }
677

  
678
    /*
679
     * (non-Javadoc)
680
     * @see org.gvsig.raster.fmap.layers.FLyrRaster#getFullRasterExtent()
681
     */
682
    public org.gvsig.fmap.dal.coverage.datastruct.Extent getFullRasterExtent() {
683
        Envelope env = getFullEnvelope();
684
        double minx = env.getMinimum(0);
685
        double miny = env.getMinimum(1);
686
        double maxx = env.getMaximum(0);
687
        double maxy = env.getMaximum(1);
688
        Point2D ul = new Point2D.Double(minx, maxy);
689
        Point2D ur = new Point2D.Double(maxx, maxy);
690
        Point2D ll = new Point2D.Double(minx, miny);
691
        Point2D lr = new Point2D.Double(maxx, miny);
692
        return rManager.getDataStructFactory().createExtent(ul, lr, ur, ll);
693
    }
694

  
695
    @SuppressWarnings("deprecation")
696
    public WCSDataParameters getParameters() {
697
        if(params == null) {
698
            DataManager datamanager = DALLocator.getDataManager();
699
            WCSServerExplorerParameters explorerParams = null;
700
            try {
701
                explorerParams = (WCSServerExplorerParameters) datamanager.createServerExplorerParameters(WCSServerExplorer.NAME);
702
                explorerParams.setHost("");
703
                explorer = (WCSServerExplorer) datamanager.createServerExplorer(explorerParams);
704
                DataStoreParameters parameters = explorer.getStoreParameters();
705
                if(parameters instanceof WCSDataParameters) {
706
                    params = (WCSDataParameters) parameters;
707
                }
708
            } catch (InitializeException e) {
709
            } catch (ProviderNotRegisteredException e) {
710
            } catch (ValidateDataParametersException e) {
711
            }
712
        }
713
        return getWCSParameters(params);
714
    }
715
    
716
    /**
717
     * Gets <code>WCSDataParameters</code>
718
     * @param parameters
719
     * @return
720
     */
721
    private WCSDataParameters getWCSParameters(DataStoreParameters parameters) {
722
    	WCSDataParameters params = null;
723
    	if(parameters instanceof WCSDataParameters) {
724
			params = (WCSDataParameters) parameters;
725
		}
726
		
727
		if(parameters instanceof TileDataParameters) {
728
			DataParameters p = ((TileDataParameters) parameters).getDataParameters();
729
			if(p instanceof WCSDataParameters) {
730
				params = (WCSDataParameters) p;
731
			}
732
		}
733
		return params;
734
    }
735

  
736
    /**
737
     * Sets the explorer
738
     * @param explorer
739
     */
740
    public void setExplorer(WCSServerExplorer explorer) {
741
        this.explorer = explorer;
742
    }
743
    
744
    /**
745
	 * Assigns the flag to delete this layer from the cache
746
	 * @param selected
747
	 */
748
	public void deleteCache(boolean deleteCache) {
749
		this.deleteCache = deleteCache;
750
	}
751

  
752
    /**
753
     * Sets the data store parameters
754
     * @param params
755
     * @throws InitializeException
756
     */
757
    public void setParameters(DataStoreParameters params) throws InitializeException {
758
        this.params = params;
759
        
760
        if(params instanceof TileDataParameters) {
761
			((TileDataParameters)params).deleteCache(deleteCache);
762
		}
763
        
764
        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
765
        try {
766
            DataStore dStore = dataman.openStore(params.getDataStoreName(), params);
767
            this.setDataStore(dStore);
768

  
769
			if(params instanceof WCSDataParameters) {
770
				this.setName((String)((WCSDataParameters)params).getURI());
771
			}
772
			
773
			if(params instanceof TileDataParameters) {
774
				DataParameters p = ((TileDataParameters) params).getDataParameters();
775
				if(p instanceof WCSDataParameters) {
776
					this.setName((String)((WCSDataParameters) p).getURI());
777
				}
778
			}
779
        } catch (ValidateDataParametersException e) {
780
            throw new InitializeException(e);
781
        } catch (ProviderNotRegisteredException e) {
782
            throw new InitializeException(e);
783
        } catch (InitializeException e) {
784
            throw new InitializeException(e);
785
        } catch (LoadLayerException e) {
786
            throw new InitializeException(e);
787
        }
788
    }
789
    
790
	/*
791
	 * (non-Javadoc)
792
	 * @see org.gvsig.raster.fmap.layers.DefaultFLyrRaster#loadFromState(org.gvsig.tools.persistence.PersistentState)
793
	 */
794
	@Override
795
	public void loadFromState(PersistentState state)
796
	throws PersistenceException {
797
		String host = state.getString("host");
798
		try {
799
			getParameters();
800
			WCSServerExplorerParameters params = (WCSServerExplorerParameters)explorer.getParameters();
801
			params.setHost(host);
802
			explorer.connect(new CancelTaskImpl());
803
			explorer.getCoverageList();
804
		} catch (Exception e) {
805
			throw new PersistenceException("Server comunication error", e);
806
		}
807

  
808
		super.loadFromState(state);
809
		params = getDataStore().getParameters();
810
		this.fullEnvelope = (Envelope) state.get("fullEnvelope");
811
		try {
812
			if(this.dataStore.isOpen())
813
				enableOpen();
814
		} catch (NotAvailableStateException e) {
815
			logger.error("Fallo el estado de open. Closed=" + isClosed() + " Awake=" + isAwake(), this, e);
816
		}
817
		//getParameters().setCoverageName((String)state.get("name"));
818
	}
819

  
820
	/*
821
	 * (non-Javadoc)
822
	 * @see org.gvsig.raster.fmap.layers.DefaultFLyrRaster#saveToState(org.gvsig.tools.persistence.PersistentState)
823
	 */
824
	@Override
825
	public void saveToState(PersistentState state) throws PersistenceException {
826
		super.saveToState(state);
827
		state.set("fullEnvelope", this.fullEnvelope);
828
		state.set("host", getParameters().getURI());
829
		state.set("name", getName());
830
	}
831
    
832
	public static void registerPersistent() {
833
		PersistenceManager manager = ToolsLocator.getPersistenceManager();
834
		DynStruct definition = manager.getDefinition(PERSISTENT_NAME);
835
		if( definition == null ) {
836
			if (manager.getDefinition(FLyrDefault.class) == null) {
837
				FLyrDefault.registerPersistent();
838
			}
839

  
840
			definition = manager.addDefinition(
841
					FLyrWCS.class,
842
					PERSISTENT_NAME,
843
					PERSISTENT_DESCRIPTION,
844
					null, 
845
					null
846
			);
847
			
848
			definition.extend(PersistenceManager.PERSISTENCE_NAMESPACE, "FLyrDefault");
849
		}
850

  
851
		DefaultFLyrRaster.registerPersistence(definition);
852
		definition.addDynFieldObject("fullEnvelope").setClassOfValue(Envelope.class).setMandatory(false);
853
		definition.addDynFieldString("host").setMandatory(false);
854
		definition.addDynFieldString("name").setMandatory(false);
855
	}
856
    
857
   /* public static void registerPersistent() {
858
		PersistenceManager manager = ToolsLocator.getPersistenceManager();
859
		DynStruct definition = manager.getDefinition(PERSISTENT_NAME);
860
		if( definition == null ) {
861
			if (manager.getDefinition(DefaultFLyrRaster.class) == null) {
862
				DefaultFLyrRaster.registerPersistence();
863
			}
864

  
865
			definition = manager.addDefinition(
866
					FLyrWCS.class,
867
					PERSISTENT_NAME,
868
					PERSISTENT_DESCRIPTION,
869
					null, 
870
					null
871
			);
872
			
873
			definition.extend(PersistenceManager.PERSISTENCE_NAMESPACE, DefaultFLyrRaster.PERSISTENT_NAME);
874
		}
875

  
876
		definition.addDynFieldObject("fullEnvelope").setClassOfValue(Envelope.class).setMandatory(true);
877
		definition.addDynFieldString("host").setMandatory(true);
878
		definition.addDynFieldBoolean("deleteCache").setMandatory(false);
879
		definition.addDynFieldString("time").setMandatory(false);
880
		definition.addDynFieldObject("maxres").setClassOfValue(Point2D.class).setMandatory(false);
881
		definition.addDynFieldString("parameter").setMandatory(false);
882
		definition.addDynFieldString("srsstr").setMandatory(false);
883
		definition.addDynFieldString("format").setMandatory(false);
884
		definition.addDynFieldString("name").setMandatory(false);
885
		definition.addDynFieldObject("extent").setClassOfValue(Rectangle2D.class).setMandatory(false);
886
		definition.addDynFieldInt("width").setMandatory(true);
887
		definition.addDynFieldInt("height").setMandatory(true);
888
		definition.addDynFieldBoolean("override").setMandatory(false);
889
		definition.addDynFieldMap("onlineResources").setClassOfItems(String.class).setMandatory(false);
890
		definition.addDynFieldString("depth").setMandatory(false);
891
	}*/
892
    
893
    /*
894
     * (non-Javadoc)
895
     * @see org.gvsig.raster.fmap.layers.DefaultFLyrRaster#saveToState(org.gvsig.tools.persistence.PersistentState)
896
     */
897
	/*public void saveToState(PersistentState state) throws PersistenceException {
898
		super.saveToState(state);
899
		state.set("fullEnvelope", this.fullEnvelope);
900
		state.set("host", getParameters().getURI());
901
		state.set("time", getParameters().getTime());
902
		state.set("deleteCache", getParameters().isDeletingCache());
903
		state.set("maxres", getParameters().getMaxResolution());
904
		state.set("parameter", getParameters().getParameter());
905
		state.set("srsstr", getParameters().getSRSCode());
906
		state.set("format", getParameters().getFormat());
907
		state.set("name", getParameters().getCoverageName());
908
		state.set("extent", getParameters().getExtent());
909
		state.set("width", getParameters().getWidth());
910
		state.set("height", getParameters().getHeight());
911
		state.set("override", getParameters().isOverridingHost());
912
		state.set("onlineResources", getParameters().getOnlineResource());
913
		state.set("depth", getParameters().getDepth());
914
	}*/
915
    
916
	/*
917
	 * (non-Javadoc)
918
	 * @see org.gvsig.raster.fmap.layers.DefaultFLyrRaster#loadFromState(org.gvsig.tools.persistence.PersistentState)
919
	 */
920
   /* public void loadFromState(PersistentState state)
921
	throws PersistenceException {
922
		super.loadFromState(state);
923

  
924
		this.fullEnvelope = (Envelope) state.get("fullExtent");
925
		getParameters().setURI(state.getString("host"));
926
		getParameters().setTime(state.getString("time"));
927
		getParameters().setFormat(state.getString("format"));
928
		getParameters().deleteCache(state.getBoolean("deleteCache"));
929
		getParameters().setMaxResolution((Point2D)state.get("maxres"));
930
		getParameters().setParameter(state.getString("parameter"));
931
		getParameters().setSRS(state.getString("srsstr"));
932
		getParameters().setFormat(state.getString("format"));
933
		getParameters().setCoverageName(state.getString("name"));
934
		getParameters().setExtent((Rectangle2D)state.get("extent"));
935
		getParameters().setWidth(state.getInt("width"));
936
		getParameters().setHeight(state.getInt("height"));
937
		getParameters().setOverrideHost(state.getBoolean("override"));
938
		getParameters().setOnlineResources(new Hashtable(state.getMap("onlineResources")));
939
		getParameters().setDepth(state.getString("depth"));
940
	}*/
941
}
0 942

  
org.gvsig.raster.wcs/tags/buildNumber_23/org.gvsig.raster.wcs/org.gvsig.raster.wcs.app/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/DynObjectIteratorWCSInfo.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.raster.wcs.app.wcsclient.layer;
23

  
24
import java.util.ArrayList;
25

  
26
import org.gvsig.fmap.dal.feature.Feature;
27
import org.gvsig.tools.dispose.DisposableIterator;
28
import org.gvsig.tools.dynobject.DynObject;
29
import org.gvsig.tools.dynobject.DynObjectSet;
30

  
31
/**
32
 * {@link DynObject} implementation to facade a iterator of a WCSInfo
33
 * and allow to be used as a {@link DynObjectSet} iterator.
34
 * 
35
 * @author Nacho Brodin (nachobrodin@gmail.com)
36
 * @version $Id$
37
 * 
38
 */
39
public class DynObjectIteratorWCSInfo implements DisposableIterator {
40

  
41
    private ArrayList<Object> infoList = new ArrayList<Object>();
42
    private int               index    = -1;
43

  
44
    /**
45
     * Creates a new DynObjects iterator facade over a feature iterator.
46
     * Each WMTSInfo will be returned through a new or reused
47
     * {@link DynObjectWMTSInfo} which allows the {@link Feature} to be
48
     * used like a DynObject.
49
     * 
50
     * @param featureIterator
51
     *            to facade
52
     * @param featureFacade
53
     *            if not null this object will be reused as the facade for the
54
     *            Feature objects of the feature iterator
55
     */
56
    public DynObjectIteratorWCSInfo(Object info) {
57
        this.infoList.add(info);
58
        index = 0;
59
    }
60
    
61
    public void addObject(Object info) {
62
    	this.infoList.add(info);
63
    	if(index == -1)
64
    		index = 0;
65
    }
66

  
67
    public synchronized void dispose() {
68
    	this.infoList.clear();
69
    	index = -1;
70
    }
71

  
72
    public synchronized boolean hasNext() {
73
        return (infoList.size() == 0 || index >= infoList.size()) ? false : true;
74
    }
75

  
76
    public synchronized Object next() {
77
        Object o = infoList.get(index);
78
        index ++;
79
        return o;
80
    }
81

  
82
    public synchronized void remove() {
83
    	if(index < infoList.size() && index >= 0) {
84
    		index --;
85
    		infoList.remove(index);
86
    	}
87
    }
88
    
89
    public long getSize() {
90
        return infoList.size();
91
    }
92
}
0 93

  
org.gvsig.raster.wcs/tags/buildNumber_23/org.gvsig.raster.wcs/org.gvsig.raster.wcs.app/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/DynObjectSetWCSInfo.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.raster.wcs.app.wcsclient.layer;
23

  
24
import org.gvsig.fmap.dal.feature.FeatureSet;
25
import org.gvsig.tools.ToolsLocator;
26
import org.gvsig.tools.dispose.DisposableIterator;
27
import org.gvsig.tools.dynobject.DynClass;
28
import org.gvsig.tools.dynobject.DynObject;
29
import org.gvsig.tools.dynobject.DynObjectManager;
30
import org.gvsig.tools.dynobject.DynObjectSet;
31
import org.gvsig.tools.exception.BaseException;
32
import org.gvsig.tools.observer.Observable;
33
import org.gvsig.tools.observer.Observer;
34
import org.gvsig.tools.observer.impl.BaseWeakReferencingObservable;
35
import org.gvsig.tools.visitor.Visitor;
36

  
37
/**
38
 * {@link DynObject} implementation to facade of a {@link FeatureSet} and allow
39
 * to be used as a {@link DynObjectSet}.
40
 * 
41
 * @author Nacho Brodin (nachobrodin@gmail.com)
42
 * @version $Id$
43
 */
44
public class DynObjectSetWCSInfo extends BaseWeakReferencingObservable
45
    implements DynObjectSet, Observer {
46
	public static final int             TYPE_TEXT = 0;
47
	public static final int             TYPE_HTML = 1;
48
	public static final int             TYPE_XML  = 2;
49
	private DynObjectIteratorWCSInfo   ite = null;
50
	
51
	public static void registerDynClass() {
52
		DynObjectManager manager = ToolsLocator.getDynObjectManager();
53
    	DynClass dynClass = manager.add("WCSInfoByPoint", "WCS InfoByPoint");
54
    	dynClass.setNamespace("InfoByPoint");
55
    	dynClass.addDynFieldString("info");
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff