Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSServerExplorer.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSServerExplorer.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSServerExplorer.java	(revision 6982)
@@ -0,0 +1,310 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 IVER T.I   {{Task}}
+*/
+
+package org.gvsig.raster.wcs.io;
+
+import java.awt.geom.Point2D;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Hashtable;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.NewDataStoreParameters;
+import org.gvsig.fmap.dal.coverage.exception.ConnectException;
+import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
+import org.gvsig.fmap.dal.coverage.store.RasterDataServerExplorer;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.spi.AbstractDataServerExplorer;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProvider;
+import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
+import org.gvsig.i18n.Messages;
+
+/**
+ * Explorer for a WCS server
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class WCSServerExplorer extends AbstractDataServerExplorer implements RasterDataServerExplorer, DataServerExplorerProvider {
+	private WCSConnector                connector                = null;
+//	private WCSServerExplorerParameters parameters               = null;
+	private static final Logger         logger                    = LoggerFactory.getLogger(WCSServerExplorer.class);
+
+
+	public WCSServerExplorer(
+			WCSServerExplorerParameters parameters,
+			DataServerExplorerProviderServices services)
+			throws InitializeException {
+                super(parameters, services);
+//		this.parameters = parameters;
+	}
+
+	/**
+	 * Gets the provider's name
+	 * @return
+	 */
+	public String getDataStoreProviderName() {
+		return WCSProvider.NAME;
+	}
+
+	public String getDescription() {
+		return WCSProvider.DESCRIPTION;
+	}
+
+	public boolean add(String provider, NewDataStoreParameters parameters,
+			boolean overwrite) throws DataException {
+		return false;
+	}
+
+	public boolean canAdd() {
+		return false;
+	}
+
+	public boolean canAdd(String storeName) throws DataException {
+		return false;
+	}
+
+	public NewDataStoreParameters getAddParameters(String storeName)
+			throws DataException {
+		return null;
+	}
+
+	public List getDataStoreProviderNames() {
+		return null;
+	}
+
+	public WCSServerExplorerParameters getParameters() {
+		return (WCSServerExplorerParameters) super.getParameters();
+	}
+
+	public List list() throws DataException {
+		return null;
+	}
+
+	public List list(int mode) throws DataException {
+		return null;
+	}
+
+	public void remove(DataStoreParameters parameters) throws DataException {
+
+	}
+
+	public String getProviderName() {
+		return null;
+	}
+
+	/**
+	 * Gets the online resources
+	 * @return
+	 */
+	public Hashtable getOnlineResources() {
+		return null;
+	}
+
+	//**********************************************
+	//Connector
+	//**********************************************
+
+	public DataStoreParameters getStoredParameters() {
+		DataManager manager = DALLocator.getDataManager();
+		WCSDataParametersImpl params = null;
+		try {
+			params = (WCSDataParametersImpl) manager.createStoreParameters(this.getDataStoreProviderName());
+
+		} catch (InitializeException e) {
+            logger.warn("Can't get DataStoreParameters from WCSServerExplorer", e);
+		} catch (ProviderNotRegisteredException e) {
+            logger.warn("Can't get DataStoreParameters from WCSServerExplorer", e);
+		}
+		String host = getParameters().getHost();
+		URI hostURI;
+        try {
+            hostURI = new URI(host);
+            params.setURI(hostURI);
+        } catch (URISyntaxException e) {
+            logger.warn("Can't create URI from"+host, e);
+        }
+		return params;
+	}
+
+	/**
+	 * Connects to the server and throws a getCapabilities. This loads
+	 * the basic information to make requests.
+	 * @throws RemoteServiceException
+	 */
+	public void connect(ICancellable cancellable) throws ConnectException {
+		URL url = null;
+		boolean override = false;
+
+		try {
+			url = new URL(getParameters().getHost());
+		} catch (Exception e) {
+			throw new ConnectException(Messages.getText("malformed_url"), e);
+		}
+        try {
+        	connector = WCSProvider.getConnectorFromURL(url);
+        	if (!connector.connect(override, cancellable))
+        		throw new ConnectException(Messages.getText("error_connecting"));
+        } catch (IOException e) {
+			throw new ConnectException(Messages.getText("error_connecting"), e);
+		}
+
+	}
+
+	/**
+	 * Checks if the network and host are reachable
+	 * @param timeout for the host
+	 * @return true if both are reachable and false if they are not
+	 */
+	public boolean isHostReachable(int timeout) {
+		URL url = null;
+		try {
+			url = new URL(getParameters().getHost());
+			URLConnection con = url.openConnection();
+			if(con == null)
+				return false;
+			con.connect();
+			InputStream stream = con.getInputStream();
+			if(stream == null)
+				return false;
+		} catch (MalformedURLException e) {
+			return false;
+		} catch (IOException e) {
+			return false;
+		}
+
+		return true;
+	}
+
+	/**
+	 * Checks if the network and host are reachable
+	 * @return true if both are reachable and false if they are not
+	 */
+	public boolean isHostReachable() {
+		int timeout = 10000;
+		return isHostReachable(timeout);
+	}
+
+	/**
+	 * Returns true if this provider is connected to the server
+	 * @return
+	 */
+	public boolean isConnected() {
+		if(connector != null)
+			return true;
+		return false;
+	}
+
+	/**
+	 * Gets the description of this service
+	 * @return
+	 */
+	public String getAbstract() {
+		if(connector != null)
+			return connector.getDescription();
+		return null;
+	}
+
+	/**
+	 * Gets the server title
+	 * @return
+	 */
+	public String getServerType() {
+		if (getVersion() == null)
+			return "WCS";
+        return "WCS "+ getVersion();
+	}
+
+	/**
+	 * Gets the protocol supported by the server
+	 * @return
+	 */
+	public String getVersion() {
+		if(connector != null) {
+			return (connector.getVersion() == null) ? "" : connector.getVersion();
+		}
+		return null;
+	}
+
+	/**
+	 * Gets the host URI
+	 * @return
+	 */
+	public String getHost() {
+		return getParameters().getHost();
+	}
+
+	/**
+	 * Gets the title
+	 * @return
+	 */
+	public String getTitle() {
+		return null;
+	}
+
+	public DataServerExplorerProviderServices getServerExplorerProviderServices() {
+		return null;
+	}
+
+	public Point2D getMaxResolution(String layerName) {
+		return connector.getMaxResolution(layerName);
+	}
+
+	/**
+	 * Gets the coverage list
+	 * @return
+	 */
+	public WCSLayerNode[] getCoverageList() {
+		return connector.getLayerList();
+	}
+
+	/**
+	 * Gets a layer searching by its name
+	 * @return
+	 */
+	public WCSLayerNode getCoverageByName(String name) {
+		WCSLayerNode[] list = getCoverageList();
+		for (int i = 0; i < list.length; i++) {
+			if(list[i].getName().compareTo(name) == 0)
+				return list[i];
+		}
+		return null;
+	}
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSServerExplorer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSConnector.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSConnector.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSConnector.java	(revision 6982)
@@ -0,0 +1,471 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.raster.wcs.io;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.io.BufferedOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.net.ConnectException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.prefs.Preferences;
+
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
+import org.gvsig.remoteclient.exceptions.ServerErrorException;
+import org.gvsig.remoteclient.exceptions.WCSException;
+import org.gvsig.remoteclient.utils.BoundaryBox;
+import org.gvsig.remoteclient.wcs.WCSClient;
+import org.gvsig.remoteclient.wcs.WCSCoverage;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+import org.gvsig.remoteclient.wcs.WCSCoverage.AxisDescription;
+import org.gvsig.remoteclient.wcs.WCSCoverage.RectifiedGrid;
+
+/**
+ * Connector between a WCS data provider and a WCSClient. 
+ *
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class WCSConnector  {
+	private WCSClient                         client;
+	private Hashtable<String, WCSLayerNode>   coverages;
+    private WCSLayerNode[]                    layerList;
+    
+    public WCSConnector(URL url) throws ConnectException, IOException {
+    	client = new WCSClient(url.toString());
+    }
+
+	/**
+	 * Returns the string "WCSDriver", which is the driver's name.
+	 * @return String
+	 */
+	public String getName() { 
+		return "WCSDriver"; 
+	}
+
+	/**
+	 * Sets the server that we want to connect to.
+	 *
+	 * @param host
+	 * @throws IOException
+	 */
+	public void setHost(String host) throws IOException{
+		client = new WCSClient(host);
+	}
+
+
+	/**
+	 * Returns a human-readable string containing the server's name.
+	 *
+	 * @return String
+	 */
+	public String getLabel() {
+		return client.getServiceTitle();
+	}
+
+	/**
+	 * Returns a string containing the server's WCS version number.
+	 *
+	 * @return String
+	 */
+	public String getVersion(){
+		return client.getVersion();
+	}
+
+	/**
+	 * <p>
+	 * Returns name and description of the server. It is supposed to be used
+	 * as the source of the abstract field in your application's interface.
+	 * </p>
+	 * <p>
+	 * Devuelve nombre y descripci�n (abstract) del servidor.
+	 * </p>
+	 * @return String
+	 */
+	public String getDescription(){
+		return client.getDescription();
+	}
+
+	/**
+	 * Returns the layer descriptor for a given coverage name.
+	 * @param layerName
+	 * @return WCSLayer
+	 */
+	public WCSLayerNode getLayer(String layerName) {
+		getLayerList();
+		return (WCSLayerNode) getCoverages().get(layerName);
+	}
+	
+	private Hashtable<String, WCSLayerNode> getCoverages() {
+		if(coverages == null || coverages.isEmpty()) {
+			getLayerList();
+		}
+		return coverages;
+	}
+
+	/**
+	 * Returns an array of WCSLayer's with the descriptors of all coverages
+	 * @return WCSLayer[]
+	 */
+	public WCSLayerNode[] getLayerList() {
+		if (coverages == null || coverages.isEmpty()) {
+			// the WCSLayer collection will be built
+			coverages = new Hashtable<String, WCSLayerNode>();
+			Hashtable wcsCoverages  = client.getCoverageList();
+			int sz = wcsCoverages.size();
+
+			// Create an array with the WCSCoverages
+			WCSCoverage[] coverageList = new WCSCoverage[sz];
+			Iterator it = wcsCoverages.keySet().iterator();
+			int i = 0;
+			while (it.hasNext()) {
+				coverageList[i] = (WCSCoverage) wcsCoverages.get(it.next());
+				i++;
+			}
+
+			// Create a WCSLayer array from the previous WCSCoverage array
+			layerList = new WCSLayerNode[sz];
+			for (int j = 0; j < layerList.length; j++) {
+				WCSLayerNode lyr = new WCSLayerNode();
+				WCSCoverage cov = coverageList[j];
+				// name
+				lyr.setName(cov.getName());
+
+				// title
+				lyr.setTitle(cov.getTitle());
+
+				// description
+				lyr.setDescription(cov.getAbstract());
+
+				// srs
+				lyr.addAllSrs(cov.getAllSrs());
+
+				// native srs
+				lyr.setNativeSRS(cov.getNativeSRS());
+
+				// extents
+				Set k = cov.getBBoxes().keySet();
+				if (!k.isEmpty()) {
+					it = k.iterator();
+					while (it.hasNext()) {
+						String srs = (String) it.next();
+						BoundaryBox bBox = cov.getBbox(srs);
+						Rectangle2D r = new Rectangle2D.Double(
+								bBox.getXmin(),
+								bBox.getYmin(),
+								bBox.getXmax() - bBox.getXmin(),
+								bBox.getYmax() - bBox.getYmin()
+						);
+						lyr.addExtent(srs, r);
+					}
+				}
+
+				// formats
+				lyr.setFormats(cov.getFormats());
+
+				// time positions
+				lyr.setTimePositions(cov.getTimePositions());
+				
+				RectifiedGrid rf = cov.getRectifiedGrid();
+				if(rf != null){
+					int w = rf.getHighGridEnvelopLimits()[0][0] - rf.getLowGridEnvelopLimits()[0][0];
+					int h = rf.getHighGridEnvelopLimits()[0][1] - rf.getLowGridEnvelopLimits()[0][1];
+					
+					lyr.setWidth(w);
+					lyr.setHeight(h);
+				}
+				
+				// max res
+				lyr.setMaxRes(new Point2D.Double(cov.getResX(), cov.getResY()));
+
+				// interpolations
+				lyr.setInterpolationMethods(cov.getInterpolationMethods());
+
+				// parameters
+				k = cov.axisPool.keySet();
+				if (!k.isEmpty()) {
+					it = k.iterator();
+					while (it.hasNext()) {
+						AxisDescription ad = (AxisDescription) cov.axisPool.get(it.next());
+						FMapWCSParameter p = new FMapWCSParameter();
+						p.setName(ad.getName());
+						p.setLabel(ad.getLabel());
+						p.setType(ad.getInterval() == null ? FMapWCSParameter.VALUE_LIST : FMapWCSParameter.INTERVAL);
+						if (p.getType() == FMapWCSParameter.VALUE_LIST) {
+							p.setValueList(ad.getSingleValues());
+						} /*else {
+							p.setInterval(ad.getInterval());
+						}*/
+						lyr.addParameter(p);
+					}
+				}
+				layerList[j] = lyr;
+				coverages.put(lyr.getName(), lyr);
+			}
+		}
+		return layerList;
+	}
+
+	/**
+	 * Establishes the connection to the WCS server. Connecting to a WCS is
+	 * an abstraction.<br>
+	 * <p>
+	 * Actually, it sends a GetCapabilities and a general DescribeCoverage
+	 * request (not a coverage-specific DescribeCoverage request) to read the
+	 * necessary data for building further GetCoverage requests.
+	 * </p>
+	 * @param override
+	 * @throws IOException.
+	 */
+	public boolean connect(boolean override, ICancellable cancel)
+			throws IOException {
+		coverages = null;
+		setHost(client.getHost());
+		return client.connect(override, cancel);
+	}
+
+	/**
+	 * No close operation is needed since WCS service it is a non-session based
+	 * protocol. So, this does nothing and you can omit it.<br>
+	 */
+	public void close() {
+//		connected = false;
+	}
+
+	/**
+	 * Returns the label of an specific coverage given by the coverage name
+	 * @param coverage name (string)
+	 * @return string
+	 */
+	public String getLabel(String coverageName) {
+		return client.getLabel(coverageName);
+	}
+
+	/**
+	 * Returns the coverage's MAX extent from the server.
+	 * @return Rectangle2D
+	 * @throws IOException
+	 */
+	public Rectangle2D getFullExtent(String coverageName, String srs)
+			throws IOException {
+		return client.getExtent(coverageName, srs);
+	}
+
+	/**
+	 * Returns the max resolution of a specific coverage given by the coverage's name.
+	 * @param coverage name (string)
+	 * @return double
+	 */
+	public Point2D getMaxResolution(String coverageName) {
+		if (getCoverages().containsKey(coverageName)) {
+			return ((WCSLayerNode) getCoverages().get(coverageName)).getMaxRes();
+		}
+		return null;
+	}
+	
+	/**
+	 * Gets the maximum width in pixels of this coverage
+	 * @param coverageName
+	 * @return
+	 */
+	public int getWidth(String coverageName) {
+		if (getCoverages().containsKey(coverageName)) {
+			return ((WCSLayerNode) getCoverages().get(coverageName)).getWidth();
+		}
+		return 0;
+	}
+
+	/**
+	 * Gets the maximum height in pixels of this coverage
+	 * @param coverageName
+	 * @return
+	 */
+	public int getHeight(String coverageName) {
+		if (getCoverages().containsKey(coverageName)) {
+			return ((WCSLayerNode) getCoverages().get(coverageName)).getHeight();
+		}
+		return 0;
+	}
+
+	/**
+	 * Returns an ArrayList containing a set of Strings with the coverage's SRSs.
+	 * @param coverage name (string)
+	 * @return ArrayList
+	 */
+	public ArrayList getSRSs(String coverageName) {
+		if (getCoverages().containsKey(coverageName)) {
+			return ((WCSLayerNode) getCoverages().get(coverageName)).getSRSs();
+		}
+		return null;
+	}
+
+	/**
+	 * Returns a String containing a description of an specific coverage.
+	 * @param coverage name (string)
+	 * @return string
+	 */
+	public String getCoverageDescription(String coverageName) {
+		if (getCoverages().containsKey(coverageName)) {
+			return ((WCSLayerNode) getCoverages().get(coverageName)).getDescription();
+		}
+		return null;
+	}
+
+	/**
+	 * Returns an ArrayList containing strings for the time positions of an
+	 * specific coverage given by the coverage's name.
+	 * @param coverage name (string)
+	 * @return ArrayList
+	 */
+	public ArrayList getTimes(String coverageName) {
+		if (getCoverages().containsKey(coverageName)) {
+			return ((WCSLayerNode) getCoverages().get(coverageName)).getTimePositions();
+		}
+		return null;
+	}
+
+	/**
+	 * Sends a GetCoverage request to the client.
+	 * @param status
+	 * @return
+	 * @throws WCSException
+	 */
+	public File getCoverage(WCSStatus status, ICancellable cancel) throws RemoteServiceException {
+		try {
+			return client.getCoverage(status, cancel);
+		} catch (ServerErrorException e) {
+			throw new RemoteServiceException(getName(), e);
+		} catch (org.gvsig.remoteclient.exceptions.WCSException e) {
+			throw new RemoteServiceException(e.getMessage(), e);
+		}
+	}
+	
+	/**
+	 * Sends a GetCoverage request to the client.
+	 * @param status
+	 * @return
+	 * @throws WCSException
+	 */
+	public void getCoverageURL(WCSStatus status, ICancellable cancel, File file) throws RemoteServiceException {
+		try {
+			URL url = client.getCoverageURL(status, cancel);
+			downloadFile(url, file, cancel);
+			String exceptionMessage = client.getExceptionMessage(file);
+			if(exceptionMessage != null)
+				throw new RemoteServiceException(exceptionMessage);
+		} catch(IOException e) {
+			throw new RemoteServiceException("WCS: error downloading the file. File:" + file.getAbsolutePath() + "...." + e.getMessage(),e);
+		} catch (ServerErrorException e) {
+			throw new RemoteServiceException("WCS Unexpected server error."+e.getMessage(),e);
+//		}  catch (org.gvsig.remoteclient.exceptions.WMSException e) {
+//			throw new RemoteServiceException(e.getMessage());
+		}
+	}
+	
+	public void downloadFile(URL url, File dstFile, ICancellable cancel) throws IOException {
+		Preferences prefs = Preferences.userRoot().node( "gvsig.downloader" );
+		// by default 1 minute (60000 milliseconds.
+		int timeout = prefs.getInt("timeout", 60000);
+
+		DataOutputStream dos;
+		DataInputStream is;
+		OutputStreamWriter os = null;
+		HttpURLConnection connection = null;
+		//If the used protocol is HTTPS
+		if (url.getProtocol().equals("https")) {
+			try {
+				disableHttsValidation();
+			} catch (KeyManagementException e) {
+				e.printStackTrace();
+			} catch (NoSuchAlgorithmException e) {
+				e.printStackTrace();
+			}
+		}
+		connection = (HttpURLConnection)url.openConnection();
+		connection.setConnectTimeout(timeout);
+		is = new DataInputStream(url.openStream());
+
+		dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(dstFile)));
+		byte[] buffer = new byte[1024 * 4];
+
+
+		long readed = 0;
+		for (int i = is.read(buffer); i > 0; i = is.read(buffer)){
+			dos.write(buffer, 0, i);
+			readed += i;
+			if(cancel != null && cancel.isCanceled())
+				return;
+		}
+		if(os != null) {
+			os.close();
+		}
+		dos.close();
+		is.close();
+		is = null;
+		dos = null;
+	}
+
+	/**
+	 * This method disables the Https certificate validation.
+	 * @throws KeyManagementException
+	 * @throws NoSuchAlgorithmException
+	 */
+	private void disableHttsValidation() throws KeyManagementException, NoSuchAlgorithmException{
+		// Create a trust manager that does not validate certificate chains
+		TrustManager[] trustAllCerts = new TrustManager[] {
+				new X509TrustManager() {
+					public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+						return null;
+					}
+					public void checkClientTrusted(
+							java.security.cert.X509Certificate[] certs, String authType) {
+					}
+					public void checkServerTrusted(
+							java.security.cert.X509Certificate[] certs, String authType) {
+					}
+				}
+		};
+
+		// Install the all-trusting trust manager
+		SSLContext sc = SSLContext.getInstance("SSL");
+		sc.init(null, trustAllCerts, new java.security.SecureRandom());
+		HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+	}
+   
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSConnector.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSProvider.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSProvider.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSProvider.java	(revision 6982)
@@ -0,0 +1,972 @@
+package org.gvsig.raster.wcs.io;
+
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.coverage.RasterLocator;
+import org.gvsig.fmap.dal.coverage.dataset.Buffer;
+import org.gvsig.fmap.dal.coverage.datastruct.BandList;
+import org.gvsig.fmap.dal.coverage.datastruct.Extent;
+import org.gvsig.fmap.dal.coverage.exception.BandAccessException;
+import org.gvsig.fmap.dal.coverage.exception.BandNotFoundInListException;
+import org.gvsig.fmap.dal.coverage.exception.FileNotOpenException;
+import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
+import org.gvsig.fmap.dal.coverage.exception.InvalidSourceException;
+import org.gvsig.fmap.dal.coverage.exception.NotSupportedExtensionException;
+import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
+import org.gvsig.fmap.dal.coverage.exception.QueryException;
+import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
+import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
+import org.gvsig.fmap.dal.coverage.store.RasterQuery;
+import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
+import org.gvsig.fmap.dal.coverage.store.props.HistogramComputer;
+import org.gvsig.fmap.dal.coverage.store.props.Transparency;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.OpenException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
+import org.gvsig.metadata.MetadataLocator;
+import org.gvsig.raster.cache.tile.provider.TileServer;
+import org.gvsig.raster.impl.buffer.SpiRasterQuery;
+import org.gvsig.raster.impl.datastruct.BandListImpl;
+import org.gvsig.raster.impl.datastruct.DatasetBandImpl;
+import org.gvsig.raster.impl.datastruct.ExtentImpl;
+import org.gvsig.raster.impl.provider.AbstractRasterProvider;
+import org.gvsig.raster.impl.provider.RasterProvider;
+import org.gvsig.raster.impl.provider.RemoteRasterProvider;
+import org.gvsig.raster.impl.store.DefaultRasterStore;
+import org.gvsig.raster.impl.store.DefaultStoreFactory;
+import org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation;
+import org.gvsig.raster.impl.store.properties.DataStoreTransparency;
+import org.gvsig.raster.impl.store.properties.RemoteDataStoreStatistics;
+import org.gvsig.raster.impl.store.properties.RemoteStoreHistogram;
+import org.gvsig.raster.util.DefaultProviderServices;
+import org.gvsig.raster.wcs.io.downloader.WCSTileServer;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+import org.gvsig.tools.ToolsLocator;
+/**
+ * Clase que representa al driver de acceso a datos de wcs.
+ *
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class WCSProvider extends AbstractRasterProvider implements RemoteRasterProvider {
+	public static String                NAME                     = "Wcs Store";
+	public static String                DESCRIPTION              = "Wcs Raster file";
+	public static final String          METADATA_DEFINITION_NAME = "WcsStore";
+
+	private Extent                      viewRequest              = null;
+	private static Hashtable<URL, WCSConnector>
+	drivers                  = new Hashtable<URL, WCSConnector> ();
+	private boolean                     open                     = false;
+	private DataStoreTransparency       fileTransparency         = null;
+	private File                        lastRequest              = null;
+	private AbstractRasterProvider      lastRequestProvider      = null;
+	private static final Logger         logger                    = LoggerFactory.getLogger(WCSProvider.class);
+
+	public static void register() {
+		DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
+		if (dataman != null && !dataman.getStoreProviders().contains(NAME)) {
+			dataman.registerStoreProvider(NAME,
+					WCSProvider.class, WCSDataParametersImpl.class);
+		}
+
+		if (!dataman.getExplorerProviders().contains(NAME)) {
+			dataman.registerExplorerProvider(NAME, WCSServerExplorer.class, WCSServerExplorerParameters.class);
+		}
+		dataman.registerStoreFactory(NAME, DefaultStoreFactory.class);
+	}
+
+	public WCSProvider() throws NotSupportedExtensionException {
+		super();
+	}
+
+	/**
+	 * Constructor. Abre el dataset.
+	 * @throws OpenException
+	 * @throws NotSupportedExtensionException
+     * @deprecated use {@link #WCSProvider(URI)}, this constructor will be removed in gvSIG 2.5
+     */
+	public WCSProvider(String params) throws InitializeException, OpenException {
+		super(params);
+        logger.info("Deprecated use of WCSProvider constructor");
+		if(params instanceof String) {
+			WCSDataParametersImpl p = new WCSDataParametersImpl();
+            try {
+                p.setURI(new URI((String) params));
+            } catch (URISyntaxException e) {
+                throw new OpenException("Can't create URI from" + (String) params, e);
+            }
+            super.init(p, null, ToolsLocator.getDynObjectManager()
+					.createDynObject(
+							MetadataLocator.getMetadataManager().getDefinition(
+									DataStore.METADATA_DEFINITION_NAME)));
+			init(p, null);
+		}
+	}
+
+    public WCSProvider(URI uri) throws InitializeException, OpenException {
+        super(uri);
+        WCSDataParametersImpl p = new WCSDataParametersImpl();
+            p.setURI(uri);
+        super.init(
+            p,
+            null,
+            ToolsLocator.getDynObjectManager().createDynObject(
+                MetadataLocator.getMetadataManager().getDefinition(DataStore.METADATA_DEFINITION_NAME)));
+        init(p, null);
+    }
+
+	public WCSProvider(WCSDataParametersImpl params,
+			DataStoreProviderServices storeServices) throws InitializeException {
+		super(params, storeServices, ToolsLocator.getDynObjectManager()
+				.createDynObject(
+						MetadataLocator.getMetadataManager().getDefinition(
+								DataStore.METADATA_DEFINITION_NAME)));
+		init(params, storeServices);
+	}
+
+	/**
+	 * Gets the connector from the URL
+	 * @return
+	 * @throws RemoteServiceException
+	 */
+	public WCSConnector getConnector() throws RemoteServiceException {
+		WCSDataParametersImpl p = (WCSDataParametersImpl)parameters;
+		URL url = null;
+		try {
+			url = p.getURI().toURL();
+		} catch (Exception e) {
+			throw new RemoteServiceException("Malformed URL",e);
+		}
+		try {
+			return WCSProvider.getConnectorFromURL(url);
+		} catch (IOException e) {
+			throw new RemoteServiceException("Error getting the connector",e);
+		}
+	}
+
+	/**
+	 * Crea las referencias al fichero y carga
+	 * las estructuras con la informaci�n y los metadatos.
+	 * @param proj Proyecci�n
+	 * @param param Parametros de carga
+	 * @throws NotSupportedExtensionException
+	 * @throws RasterDriverException
+	 */
+	public void init (DataStoreParameters params,
+			DataStoreProviderServices storeServices) throws InitializeException {
+		setParam(storeServices, params);
+		open = true;
+		try {
+			loadInitialInfo();
+		} catch (RasterDriverException e) {
+			throw new InitializeException(e.getMessage(), e);
+		}
+
+		stats = new RemoteDataStoreStatistics(this);
+	}
+
+	public static final WCSConnector getConnectorFromURL(URL url) throws IOException {
+		WCSConnector drv = (WCSConnector) drivers.get(url);
+		if (drv == null) {
+			drv = new WCSConnector(url);
+			drivers.put(url, drv);
+		}
+		return drv;
+	}
+
+	/**
+	 * Obtiene el objeto que contiene que contiene la interpretaci�n de
+	 * color por banda
+	 * @return
+	 */
+	public ColorInterpretation getColorInterpretation() {
+		if(super.getColorInterpretation() == null) {
+			ColorInterpretation colorInterpretation = new DataStoreColorInterpretation();
+			colorInterpretation.initColorInterpretation(getBandCount());
+			if(getBandCount() == 3) {
+				colorInterpretation = DataStoreColorInterpretation.createRGBInterpretation();
+			} else {
+				for (int i = 0; i < getBandCount(); i++) {
+					colorInterpretation.setColorInterpValue(i, DataStoreColorInterpretation.GRAY_BAND);
+				}
+			}
+			setColorInterpretation(colorInterpretation);
+		}
+		return super.getColorInterpretation();
+	}
+
+	/**
+	 * Gets WCS parameters
+	 * @return
+	 */
+	public WCSDataParameters getParameters() {
+		return (WCSDataParameters)parameters;
+	}
+
+	public AffineTransform getAffineTransform() {
+		Extent e = getExtent();
+		double resolutionX = e.width() / getWidth();
+		double resolutionY = e.height() / getHeight();
+
+
+		ownTransformation = new AffineTransform(
+				resolutionX,                        // ESCALADO en X
+				0,                                  // CIZALLAMIENTO de la Y
+				0,                                  // CIZALLAMIENTO de la X
+				-resolutionY,                       // ESCALADO en Y
+				e.getULX() - (resolutionX / 2),     // TRASLACION en X
+				e.getULY() - (resolutionY / 2));    // TRASLACION en Y
+
+		externalTransformation = (AffineTransform) ownTransformation.clone();
+		return ownTransformation;
+	}
+
+	/**
+	 * Calcula el extent en coordenadas del mundo real
+	 * @return Extent
+	 */
+	public Extent getExtent() {
+		WCSDataParametersImpl p = (WCSDataParametersImpl)parameters;
+		try {
+			p.setFormat("image/tiff");
+			if(p.getSRSCode() == null){
+				WCSConnector connector = WCSProvider.getConnectorFromURL(p.getURI().toURL());
+				ArrayList srs = connector.getSRSs(p.getCoverageName());
+				if(!srs.isEmpty() && !StringUtils.isBlank((String)srs.get(0))){
+					p.setSRSID((String) srs.get(0));
+				}else{
+					return null;
+				}
+			}
+			Rectangle2D r = getConnector().getFullExtent(p.getCoverageName(), p.getSRSCode());
+			if(r == null)
+				return null;
+			return new ExtentImpl(r.getX(),  r.getY() + r.getHeight(), r.getX() + r.getWidth(), r.getY());
+		} catch (RemoteServiceException e1) {
+			e1.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	public Rectangle2D getLayerExtent(String layerName, String srs) throws RemoteServiceException {
+		return null;
+	}
+
+	public RasterProvider load() {
+		return this;
+	}
+
+	public boolean isOpen() {
+		return open;
+	}
+
+	public void close() {
+		open = false;
+	}
+
+	public Transparency getTransparency() {
+		if(fileTransparency == null)
+			fileTransparency = new DataStoreTransparency(getColorInterpretation());
+		return fileTransparency;
+	}
+
+	public URI translateURI(URI uri) {
+		return uri;
+	}
+
+	public void setView(Extent e) {
+		viewRequest = e;
+	}
+
+	public Extent getView() {
+		return viewRequest;
+	}
+
+	public double getWidth() {
+		WCSDataParametersImpl p = (WCSDataParametersImpl)parameters;
+		try {
+			return getConnector().getWidth(p.getCoverageName());
+		} catch (RemoteServiceException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+
+	public double getHeight() {
+		WCSDataParametersImpl p = (WCSDataParametersImpl)parameters;
+		try {
+			return getConnector().getHeight(p.getCoverageName());
+		} catch (RemoteServiceException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+
+	public Object readCompleteLine(int line, int band)
+			throws InvalidSetViewException, FileNotOpenException, RasterDriverException {
+		return null;
+	}
+
+	/**
+	 * When the remote layer has fixed size this method downloads the file and return its reference.
+	 * File layer has in the long side FIXED_SIZE pixels and the bounding box is complete. This file could be
+	 * useful to build an histogram or calculate statistics. This represents a sample of data.
+	 * @return
+	 * @throws RasterDriverException
+	 */
+	public File getFileLayer() throws RasterDriverException {
+		Extent e = getExtent();
+		Rectangle2D bBox = new Rectangle2D.Double(e.getULX(), e.getLRY(), e.width(), e.height());
+		WCSStatus wcsStatus = loadWCSStatus(bBox);
+
+		return downloadFile(wcsStatus, e, (int)getWidth(), (int)getHeight());
+	}
+
+	/**
+	 * Reads a complete block of data and returns an tridimensional array of the right type. This function is useful
+	 * to read a file very fast without setting a view. In a WCS service when the size is fixed then it will read the
+	 * entire image but when the source hasn't pixel size it will read a sample of data. This set of data will have
+	 * the size defined in FIXED_SIZE.
+	 *
+	 * @param pos Posici�n donde se empieza  a leer
+	 * @param blockHeight Altura m�xima del bloque leido
+	 * @return Object que es un array tridimendional del tipo de datos del raster. (Bandas X Filas X Columnas)
+	 * @throws InvalidSetViewException
+	 * @throws FileNotOpenException
+	 * @throws RasterDriverException
+	 */
+	public Object readBlock(int pos, int blockHeight, double scale)
+			throws InvalidSetViewException, FileNotOpenException, RasterDriverException, ProcessInterruptedException {
+		File lastFile = getFileLayer();
+		BandList bandList = new BandListImpl();
+		for (int i = 0; i < 3; i++) {
+			try {
+				bandList.addBand(new DatasetBandImpl(lastFile.getPath(), pos, Buffer.TYPE_BYTE, 3));
+			} catch (BandNotFoundInListException e1) {
+			}
+		}
+		bandList.setDrawableBands(new int[]{0, 1, 2});
+
+		try {
+			lastRequestProvider = openLastRequest();
+			return lastRequestProvider.readBlock(pos, blockHeight, scale);
+		} catch (ProviderNotRegisteredException exc) {
+			throw new RasterDriverException("Error building GdalDriver", exc);
+		} catch (InitializeException exc) {
+			throw new RasterDriverException("Error building GdalDriver", exc);
+		}
+	}
+
+	public double getLastRequestHeight() throws RasterDriverException {
+		if(lastRequestProvider == null) {
+			try {
+				lastRequestProvider = openLastRequest();
+			} catch (ProviderNotRegisteredException e) {
+				throw new RasterDriverException("Error building GdalDriver", e);
+			} catch (InitializeException e) {
+				throw new RasterDriverException("Error building GdalDriver", e);
+			}
+		}
+		return lastRequestProvider.getHeight();
+	}
+
+	public double getLastRequestWidth() throws RasterDriverException {
+		if(lastRequestProvider == null) {
+			try {
+				lastRequestProvider = openLastRequest();
+			} catch (ProviderNotRegisteredException e) {
+				throw new RasterDriverException("Error building GdalDriver", e);
+			} catch (InitializeException e) {
+				throw new RasterDriverException("Error building GdalDriver", e);
+			}
+		}
+		return lastRequestProvider.getWidth();
+	}
+
+	public File getLastRequest() {
+		return lastRequest;
+	}
+
+	public Buffer getBufferLastRequest() throws ProcessInterruptedException, RasterDriverException {
+		try {
+			lastRequestProvider = openLastRequest();
+
+			/*BandList bandList = new BandListImpl();
+			for (int i = 0; i < lastRequestProvider.getBandCount(); i++) {
+				try {
+					bandList.addBand(new DatasetBandImpl(lastRequest.getPath(), i, Buffer.TYPE_BYTE, 3));
+				} catch (BandNotFoundInListException e1) {
+				}
+			}
+			bandList.setDrawableBands(new int[]{0, 1, 2});*/
+
+			RasterQuery q = RasterLocator.getManager().createQuery();
+			q.setAreaOfInterest(lastRequestProvider.getExtent(),
+					(int)lastRequestProvider.getWidth(),
+					(int)lastRequestProvider.getHeight());
+			q.setAllDrawableBands();
+			q.setAdjustToExtent(true);
+
+			DefaultRasterStore store = new DefaultRasterStore();
+			store.setProvider(lastRequestProvider);
+			return store.query(q);
+		} catch (ProviderNotRegisteredException e) {
+			throw new RasterDriverException("Error building GdalDriver", e);
+		} catch (InitializeException e) {
+			throw new RasterDriverException("Error building GdalDriver", e);
+		} catch (QueryException e) {
+			throw new RasterDriverException("Error reading data", e);
+		}
+	}
+
+	/**
+	 * Opens the last request downloaded
+	 * @return
+	 * @throws ProviderNotRegisteredException
+	 * @throws InitializeException
+	 * @throws RasterDriverException
+	 */
+	private AbstractRasterProvider openLastRequest() throws ProviderNotRegisteredException, InitializeException, RasterDriverException {
+		if(lastRequestProvider != null)
+			lastRequestProvider.close();
+		File lastFile = getFileLayer();
+		lastRequestProvider = DefaultProviderServices.loadProvider(new File(lastFile.getPath()));
+		return lastRequestProvider;
+	}
+
+	public Object getData(int x, int y, int band)
+			throws InvalidSetViewException, FileNotOpenException, RasterDriverException {
+		int w = 25;
+		int h = 25;
+
+		Point2D p1 = rasterToWorld(new Point2D.Double(x, y));
+		Point2D p2 = rasterToWorld(new Point2D.Double(x + w, y + h));
+		Rectangle2D bBox = new Rectangle2D.Double(p1.getX(), p1.getY(), Math.abs(p1.getX() - p2.getX()), Math.abs(p1.getY() - p2.getY()));
+
+		WCSDataParametersImpl p = (WCSDataParametersImpl)parameters;
+		WCSStatus wcsStatus = new WCSStatus();
+		wcsStatus.setCoveraName(p.getCoverageName());
+		wcsStatus.setSrs(p.getSRSCode());
+		wcsStatus.setFormat(p.getFormat());
+		wcsStatus.setOnlineResource(p.getOnlineResource() != null ? (String) p.getOnlineResource().get("GetCoverage") : null);
+		wcsStatus.setExtent(bBox);
+		wcsStatus.setHeight(h);
+		wcsStatus.setWidth(w);
+		wcsStatus.setDepth(p.getDepth());
+		wcsStatus.setParameters(p.getParameter());
+		wcsStatus.setTime(p.getTime());
+
+		lastRequest = downloadFile(wcsStatus, p1.getX(), p1.getY(), p2.getX(), p2.getY(), w, h);
+
+		AbstractRasterProvider driver = null;
+		try {
+			driver = DefaultProviderServices.loadProvider(new File(lastRequest.getPath()));
+			/*Buffer buf = DefaultRasterManager.getInstance().createBuffer(getDataType()[0], w, h, getBandCount(), true);
+			BandList bandList = new BandListImpl();
+			int[] drawable = new int[getBandCount()];
+			for (int i = 0; i < getBandCount(); i++) {
+				try {
+					bandList.addBand(new DatasetBandImpl(lastRequest.getPath(), i, getDataType()[i], getBandCount()));
+					drawable[i] = i;
+				} catch (BandNotFoundInListException e1) {
+				}
+			}
+			bandList.setDrawableBands(drawable);*/
+
+			RasterQuery q = RasterLocator.getManager().createQuery();
+			Rectangle r = new Rectangle(0, 0, 25, 25);
+			q.setAreaOfInterest(r);
+			q.setAllDrawableBands();
+			DefaultRasterStore store = new DefaultRasterStore();
+			store.setProvider(driver);
+
+			Buffer buf = store.query(q);
+			driver.close();
+			if(buf.getDataType() == Buffer.TYPE_BYTE) {
+				return new Integer(buf.getElemByte(0, 0, band));
+			}
+			if(buf.getDataType() == Buffer.TYPE_SHORT) {
+				return new Integer(buf.getElemShort(0, 0, band));
+			}
+			if(buf.getDataType() == Buffer.TYPE_INT) {
+				return new Integer(buf.getElemInt(0, 0, band));
+			}
+			if(buf.getDataType() == Buffer.TYPE_FLOAT) {
+				return new Float(buf.getElemFloat(0, 0, band));
+			}
+			if(buf.getDataType() == Buffer.TYPE_DOUBLE) {
+				return new Double(buf.getElemDouble(0, 0, band));
+			}
+		} catch(InitializeException e) {
+			throw new RasterDriverException("", e);
+		} catch (ProviderNotRegisteredException e) {
+			throw new RasterDriverException("", e);
+		} catch (ProcessInterruptedException e) {
+		} catch (QueryException e) {
+			throw new RasterDriverException("", e);
+		}
+		return null;
+	}
+
+	/**
+	 * Gets the georeferencing file name form a raster file
+	 * @param file
+	 * a raster file
+	 * @return
+	 * a georeferencing file
+	 */
+	private String getWorldFile(String file){
+		String worldFile = file;
+		int index = file.lastIndexOf(".");
+		if (index > 0) {
+			worldFile = file.substring(0, index) + getExtensionWorldFile();
+		} else {
+			worldFile = file + getExtensionWorldFile();
+		}
+		return worldFile;
+	}
+
+	/**
+	 * Obtiene la extensi�n del fichero de georreferenciaci�n
+	 * @return String con la extensi�n del fichero de georreferenciaci�n dependiendo
+	 * del valor del formato obtenido del servidor. Por defecto asignaremos un .wld
+	 */
+	private String getExtensionWorldFile() {
+		WCSDataParametersImpl p = (WCSDataParametersImpl)parameters;
+		String extWorldFile = ".wld";
+		if(p.getFormat().equals("image/tif") || p.getFormat().equals("image/tiff")) {
+			extWorldFile = ".tfw";
+		}
+		return extWorldFile;
+	}
+
+	private WCSStatus loadWCSStatus(Rectangle2D bBox) {
+		WCSDataParametersImpl p = (WCSDataParametersImpl)parameters;
+		WCSStatus wcsStatus = new WCSStatus();
+		wcsStatus.setCoveraName(p.getCoverageName());
+		wcsStatus.setSrs(p.getSRSCode());
+		wcsStatus.setFormat(p.getFormat());
+		wcsStatus.setOnlineResource(p.getOnlineResource() != null ? (String) p.getOnlineResource().get("GetCoverage") : null);
+		wcsStatus.setExtent(bBox);
+		wcsStatus.setHeight(p.getHeight());
+		wcsStatus.setWidth(p.getWidth());
+		wcsStatus.setDepth(p.getDepth());
+		wcsStatus.setParameters(p.getParameter());
+		wcsStatus.setTime(p.getTime());
+		return wcsStatus;
+	}
+
+	public boolean needEnhanced() {
+		return (getDataType()[0] != Buffer.TYPE_BYTE ||
+				(getBandCount() == 1 && getDataType()[0] == Buffer.TYPE_BYTE));
+	}
+
+	/**
+	 * This function downloads the file and creates the georeferencing file
+	 * @param wcsStatus
+	 * @param ulx
+	 * @param uly
+	 * @param lrx
+	 * @param lry
+	 * @param w
+	 * @param h
+	 * @return
+	 * @throws RasterDriverException
+	 */
+	private File downloadFile(WCSStatus wcsStatus, double ulx, double uly, double lrx, double lry, int w, int h) throws RasterDriverException {
+		Extent extent = new ExtentImpl(ulx, uly, lrx, lry);
+		return downloadFile(wcsStatus, extent, w, h);
+	}
+
+	/**
+	 * This function downloads the file and creates the georeferencing file
+	 * @param wcsStatus
+	 * @param ulx
+	 * @param uly
+	 * @param lrx
+	 * @param lry
+	 * @param w
+	 * @param h
+	 * @return
+	 * @throws RasterDriverException
+	 */
+	private File downloadFile(WCSStatus wcsStatus, Extent extent, int w, int h) throws RasterDriverException {
+		try {
+			lastRequest = getConnector().getCoverage(wcsStatus, ((WCSDataParametersImpl)parameters).getCancellable());
+		} catch (RemoteServiceException e) {
+			throw new RasterDriverException(e.getMessage(), e);
+		}
+
+		String nameWorldFile = getWorldFile(lastRequest.getPath());
+		try {
+			fileUtil.createWorldFile(nameWorldFile, extent, w, h);
+		} catch (IOException e) {
+			throw new RasterDriverException("Error downloading file", e);
+		}
+
+		return lastRequest;
+	}
+
+	/**
+	 * Assigns the list of bands RGB and read a window of data
+	 * @param rasterBuf
+	 * @param bandList
+	 * @param lastFile
+	 * @param ulx
+	 * @param uly
+	 * @param lrx
+	 * @param lry
+	 * @return
+	 * @throws RasterDriverException
+	 * @throws ProcessInterruptedException
+	 */
+	public Buffer getBuffer(BandList bandList, File lastFile,
+			double ulx, double uly, double lrx, double lry) throws RasterDriverException, ProcessInterruptedException {
+		try {
+			//El nombre de fichero que ha puesto en el bandList es el del servidor y no el del fichero en disco
+			/*String serverName = bandList.getBand(0).getFileName();
+			for (int i = 0; i < bandList.getBandCount(); i++) {
+				bandList.getBand(i).setFileName(lastFile.getPath());
+			}*/
+
+			AbstractRasterProvider driver = DefaultProviderServices.loadProvider(lastFile);
+
+			RasterQuery q = RasterLocator.getManager().createQuery();
+			q.setAreaOfInterest(new ExtentImpl(ulx, uly, lrx, lry));
+			q.setDrawableBands(bandList.getDrawableBands());
+			DefaultRasterStore store = new DefaultRasterStore();
+			store.setProvider(driver);
+			Buffer buf = store.query(q);
+
+			/*for (int i = 0; i < bandList.getBandCount(); i++) {
+				bandList.getBand(i).setFileName(serverName);
+			}*/
+
+			return buf;
+		} catch (ProviderNotRegisteredException e) {
+			throw new RasterDriverException("Error building GdalDriver", e);
+		} catch (InitializeException e) {
+			throw new RasterDriverException("Error building GdalDriver", e);
+		} catch (QueryException e) {
+			throw new RasterDriverException("Error reading data", e);
+		}
+	}
+
+	@Override
+	public void loadBuffer(SpiRasterQuery query)
+			throws ProcessInterruptedException, RasterDriverException {
+		Extent ex = query.getAdjustedRequestBoundingBox();
+		WCSStatus wcsStatus = loadWCSStatus(ex.toRectangle2D());
+
+		lastRequest = downloadFile(
+				wcsStatus,
+				ex,
+				query.getAdjustedBufWidth(),
+				query.getAdjustedBufHeight());
+
+		if (lastRequest == null) {
+			return;
+		}
+
+		try {
+			AbstractRasterProvider driver = DefaultProviderServices.loadProvider(lastRequest);
+			DefaultRasterStore store = new DefaultRasterStore();
+			store.setProvider(driver);
+			query.createBuffer(store);
+			store.query((RasterQuery)query);
+		} catch (ProviderNotRegisteredException e) {
+			throw new RasterDriverException("Error building GdalDriver", e);
+		} catch (InitializeException e) {
+			throw new RasterDriverException("Error building GdalDriver", e);
+		} catch (QueryException e) {
+			throw new RasterDriverException("Error reading data", e);
+		}
+
+	}
+
+	/**
+	 * When a WCS provider is opened the information of data type and number of bands is not
+	 * available. Only after the first time a raster has been downloaded it can be know.
+	 * @param newDataType
+	 * @param buf
+	 * @param bandList
+	 * @return
+	 * @throws RasterDriverException
+	 */
+	private void loadInitialInfo() throws RasterDriverException {
+		WCSDataParametersImpl p = (WCSDataParametersImpl)parameters;
+		Extent ext = getExtent();
+		if(ext != null){
+			Rectangle2D bBox = ext.toRectangle2D();
+			int w = 0;
+			int h = 0;
+			if(ext.width() > ext.height()) {
+				w = 200;
+				h = (int)((ext.height() * w) / ext.width());
+			} else {
+				h = 200;
+				w = (int)((ext.width() * h) / ext.height());
+			}
+			p.setWidth(w);
+			p.setHeight(h);
+			p.setExtent(bBox);
+			WCSStatus wcsStatus = loadWCSStatus(bBox);
+
+			lastRequest = downloadFile(wcsStatus, ext.getULX(), ext.getULY(), ext.getLRX(), ext.getLRY(), w, h);
+			AbstractRasterProvider driver;
+			try {
+				driver = DefaultProviderServices.loadProvider(lastRequest);
+				setDataType(driver.getDataType());
+				bandCount = driver.getBandCount();
+				driver.close();
+			} catch (ProviderNotRegisteredException e) {
+				throw new RasterDriverException("", e);
+			} catch (InitializeException e) {
+				throw new RasterDriverException("", e);
+			}
+		}
+	}
+
+	/**
+	 * When a WCS provider is opened the information of data type and number of bands is not
+	 * available. Only after the first time a raster has been downloaded it can be know.
+	 * @param newDataType
+	 * @param buf
+	 * @param bandList
+	 * @return
+	 */
+	/*private Buffer changeBufferDataType(int newDataType, Buffer buf, BandList bandList) {
+		Buffer newBuffer = null;
+		if(buf.getDataType() != newDataType) {
+			newBuffer = DefaultRasterManager.getInstance().createReadOnlyBuffer(newDataType, buf.getWidth(), buf.getHeight(), buf.getBandCount());
+			buf.free();
+		} else
+			return buf;
+
+		bandList.clear();
+		for(int i = 0; i < getBandCount(); i++)
+			try {
+				int dataType = getDataType()[i];
+				DatasetBand band = new DatasetBandImpl(getFName(), i, dataType, getBandCount());
+				bandList.addBand(band, i);
+			} catch(BandNotFoundInListException ex) {
+				//No a�adimos la banda
+			}
+		return newBuffer;
+	}*/
+
+	/*public Buffer getWindow(int x, int y, int w, int h,
+			BandList bandList, Buffer rasterBuf, TaskStatus status) throws ProcessInterruptedException, RasterDriverException {
+		Point2D p1 = rasterToWorld(new Point2D.Double(x, y));
+		Point2D p2 = rasterToWorld(new Point2D.Double(x + w, y + h));
+		Rectangle2D bBox = new Rectangle2D.Double(p1.getX(), p1.getY(), Math.abs(p1.getX() - p2.getX()), Math.abs(p1.getY() - p2.getY()));
+		WCSStatus wcsStatus = loadWCSStatus(bBox);
+
+		lastRequest = downloadFile(wcsStatus, p1.getX(), p1.getY(), p2.getX(), p2.getY(), rasterBuf.getWidth(), rasterBuf.getHeight());
+
+		if (lastRequest == null) {
+			return rasterBuf;
+		}
+
+		AbstractRasterProvider driver = null;
+		try {
+			driver = DefaultProviderServices.loadProvider(new File(lastRequest.getPath()));
+
+			//El nombre de fichero que ha puesto en el bandList es el del servidor y no el del fichero en disco
+			String serverName = bandList.getBand(0).getFileName();
+			for (int i = 0; i < bandList.getBandCount(); i++) {
+				bandList.getBand(i).setFileName(lastRequest.getPath());
+			}
+
+			DefaultRasterQuery q = (DefaultRasterQuery)RasterLocator.getManager().createQuery();
+			q.setAreaOfInterest(0, 0, w, h);
+			q.setBandList(bandList);
+			q.setBuffer(rasterBuf);
+			Buffer buf = driver.getDataSet(q);
+
+			for (int i = 0; i < bandList.getBandCount(); i++) {
+				bandList.getBand(i).setFileName(serverName);
+			}
+			driver.close();
+			return buf;
+		} catch (ProviderNotRegisteredException e) {
+			throw new RasterDriverException("Error building GdalDriver", e);
+		} catch (InitializeException e) {
+			throw new RasterDriverException("Error building GdalDriver", e);
+		}
+	}*/
+
+	public int getBlockSize() {
+		return 0;
+	}
+
+	public void setAffineTransform(AffineTransform t){
+
+	}
+
+	public int getOverviewCount(int band) throws BandAccessException, RasterDriverException {
+		return 0;
+	}
+
+	public int getOverviewWidth(int band, int overview) throws BandAccessException, RasterDriverException {
+		return 0;
+	}
+
+	public int getOverviewHeight(int band, int overview) throws BandAccessException, RasterDriverException {
+		return 0;
+	}
+
+	public boolean isOverviewsSupported() {
+		return false;
+	}
+
+	public boolean isReproyectable() {
+		return false;
+	}
+
+	public String getProviderName() {
+		return NAME;
+	}
+
+	public String getName() {
+		return this.getParameters().getCoverageName();
+	}
+
+	/**
+	 * Convierte un punto desde coordenadas pixel a coordenadas del mundo.
+	 * @param pt Punto a transformar
+	 * @return punto transformado en coordenadas del mundo
+	 */
+	public Point2D rasterToWorld(Point2D pt) {
+		Point2D p = new Point2D.Double();
+		getAffineTransform().transform(pt, p);
+		return p;
+	}
+
+	/**
+	 * Convierte un punto desde del mundo a coordenadas pixel.
+	 * @param pt Punto a transformar
+	 * @return punto transformado en coordenadas pixel
+	 */
+	public Point2D worldToRaster(Point2D pt) {
+		Point2D p = new Point2D.Double();
+		try {
+			getAffineTransform().inverseTransform(pt, p);
+		} catch (NoninvertibleTransformException e) {
+			return pt;
+		}
+		return p;
+	}
+
+	public void setStatus(RasterProvider provider) {
+		if(provider instanceof WCSProvider) {
+		}
+	}
+
+	/**
+	 * ASigna el par�metro de inicializaci�n del driver.
+	 */
+	public void setParam(DataStoreProviderServices storeServices, DataStoreParameters param) {
+		if(param instanceof WCSDataParametersImpl)
+			this.uri = ((WCSDataParametersImpl)param).getURI();
+		this.param = param;
+	}
+
+	/**
+	 * Gets the suffix of the downloaded image
+	 * @return
+	 */
+	public String getFileSuffix() {
+		WCSDataParametersImpl p = (WCSDataParametersImpl)parameters;
+		String format = p.getFormat().toLowerCase();
+		if (format == null) {
+			return "xml";
+		}
+		if (format.indexOf("png") >= 0){
+			return "png";
+		}
+		if (format.indexOf("xml") >= 0){
+			return "xml";
+		}
+		if (format.indexOf("gif") >= 0){
+			return "gif";
+		}
+		if (format.indexOf("tif") >= 0){
+			return "tif";
+		}
+		if (format.indexOf("bmp") >= 0){
+			return "bmp";
+		}
+		if (format.indexOf("jpg") >= 0
+				|| format.indexOf("jpeg") >= 0){
+			return "jpg";
+		}
+		return "xml";
+	}
+
+	public TileServer getTileServer() {
+		if(tileServer == null) {
+			DefaultRasterStore store = new DefaultRasterStore();
+			store.setProvider(this);
+			tileServer = new WCSTileServer(store);
+		}
+		return tileServer;
+	}
+
+	public boolean isRasterEnclosed() {
+		return true;
+	}
+
+	public File getRMFFile() {
+		if(lastRequest != null)
+			return new File(FilenameUtils.removeExtension(lastRequest.getAbsolutePath()) + ".rmf");
+		return null;
+	}
+
+	public HistogramComputer getHistogramComputer() {
+		if (histogram == null)
+			histogram = new RemoteStoreHistogram(this);
+		return histogram;
+	}
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.impl.provider.RasterProvider#addFile(java.io.File)
+     */
+    @Override
+    public void addFile(File file) throws InvalidSourceException {
+        // Do nothing
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.raster.impl.provider.RasterProvider#removeFile(java.io.File)
+     */
+    @Override
+    public void removeFile(File file) {
+        // Do nothing
+
+    }
+
+}
\ No newline at end of file

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSProvider.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSServerExplorerParameters.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSServerExplorerParameters.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSServerExplorerParameters.java	(revision 6982)
@@ -0,0 +1,143 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+
+/*
+* AUTHORS (In addition to CIT):
+* 2009 IVER T.I   {{Task}}
+*/
+
+package org.gvsig.raster.wcs.io;
+
+import org.gvsig.fmap.dal.DataServerExplorerParameters;
+import org.gvsig.fmap.dal.spi.AbstractDataParameters;
+import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+/**
+ * Parameters for the WCS provider
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class WCSServerExplorerParameters extends AbstractDataParameters implements DataServerExplorerParameters {
+	protected static final String  FIELD_HOST          = "host";
+	protected static DynClass      DYNCLASS            = null;
+	private DelegatedDynObject     delegatedDynObject  = null;
+	private static final String    AXIS_ORDER          = "axisorder";
+	
+	public WCSServerExplorerParameters() {
+		super();
+		initialize();
+	}
+
+	protected void initialize() {
+		this.delegatedDynObject = (DelegatedDynObject) ToolsLocator
+				.getDynObjectManager().createDynObject(
+						registerDynClass());
+	}
+	
+	public static DynStruct registerDynClass() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.getDefinition("WCSServerExplorerParameters_Persistent");
+		if( definition == null ) {
+			definition = manager.addDefinition(
+					WCSServerExplorerParameters.class,
+					"WCSServerExplorerParameters_Persistent",
+					"WCS Explorer DataParameters Persistency",
+					null, 
+					null
+			);
+		}
+
+		AbstractRasterDataParameters.registerDynClass(definition);
+
+		definition.addDynFieldBoolean(AXIS_ORDER)
+		.setDescription("Longitude first in axis order")
+		.setMandatory(false);
+
+		definition.addDynFieldString(FIELD_HOST)
+		.setDescription("Uniform Resource Identifier (File name or URL)")
+		.setMandatory(false);		
+		return definition;
+	}
+	
+	protected DelegatedDynObject getDelegatedDynObject() {
+		return delegatedDynObject;
+	}
+	
+	/**
+	 * Gets the assigned host
+	 * @return
+	 */
+	public String getHost() {
+		return (String) this.getDynValue(FIELD_HOST);
+	}
+
+	/**
+	 * Assign the host to this explorer
+	 * @param host
+	 */
+	public void setHost(String host) {
+		this.setDynValue(FIELD_HOST, host);
+	}
+
+	public String getDataStoreName() {
+		return WCSProvider.NAME;
+	}
+	
+	public String getDescription() {
+		return WCSProvider.DESCRIPTION;
+	}
+
+	public String getExplorerName() {
+		return WCSProvider.NAME;
+	}
+	
+	/**
+	 * Returns true if the longitude is first in axis order
+	 * @return
+	 */
+	public boolean isLongitudeFirst() {
+		Object obj = getDynValue(AXIS_ORDER);
+		if(obj instanceof Boolean) {
+			Boolean b = (Boolean)getDynValue(AXIS_ORDER);
+			if(b != null)
+				return ((Boolean)b).booleanValue();
+		}
+		if(obj instanceof String) {
+			String b = (String)getDynValue(AXIS_ORDER);
+			if(b != null)
+				return new Boolean(((String)b));
+		}
+		return false;
+	}
+	
+	/**
+	 * Sets the longitude first in axis order
+	 * @param longFirst
+	 */
+	public void setLongitudeFirst(boolean longFirst) {
+		this.setDynValue(AXIS_ORDER, new Boolean(longFirst));
+	}
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSServerExplorerParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSDataParameters.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSDataParameters.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSDataParameters.java	(revision 6982)
@@ -0,0 +1,125 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+
+package org.gvsig.raster.wcs.io;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.net.URI;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.fmap.dal.coverage.store.parameter.RemoteStoreParameters;
+
+/**
+ * Parameters for the WCS provider
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public interface WCSDataParameters extends RemoteStoreParameters {
+	/**
+	 * Gets the time information for the request
+	 * @return
+	 */
+	public Object getTime();
+
+	/**
+	 * Sets the time information for the request
+	 * @param time
+	 */
+	public void setTime(String time);
+
+	/**
+	 * Gets the format
+	 * @return Formato.
+	 */
+	public Object getFormat();
+
+	/**
+	 * Sets the format
+	 * @param format Formato.
+	 */
+	public void setFormat(String format);
+
+	public Object getSRSCode();
+
+	public URI getURI();
+
+	public String getCoverageName();
+
+	public Point2D getMaxResolution();
+
+	public String getParameter();
+
+	/**
+	 * Gets the bounding box
+	 * @return
+	 */
+	public Rectangle2D getExtent();
+
+	public int getWidth();
+
+	public int getHeight();
+
+	public boolean isOverridingHost();
+
+	/**
+	 * Gets the online resource map
+	 * @param onlineResources
+	 */
+	public Map<String,String> getOnlineResource();
+
+	public String getDepth();
+
+	public void setCancellable(ICancellable cancel);
+
+	public void setOverrideHost(boolean over);
+
+	/**
+	 * Assigns the extent.
+	 * When a provider is initialized this will need to know what is the extent before the request.
+	 *
+	 * @param bBox
+	 */
+	public void setExtent(Rectangle2D bBox);
+
+	public void setURI(URI uri);
+
+	public void setSRS(String srs);
+
+	public void setCoverageName(String selectedCoverageName);
+
+	public void setParameter(String parameterString);
+
+	public void setMaxResolution(Point2D maxRes);
+
+	/**
+	 * Sets the set of URLs that should be accessed for each operation performed
+	 * to the server.
+	 *
+	 * @param onlineResources
+	 */
+	public void setOnlineResources(Hashtable<String, String> onlineResources);
+
+	public void setDepth(String depth);
+
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSDataParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSDataParametersImpl.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSDataParametersImpl.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSDataParametersImpl.java	(revision 6982)
@@ -0,0 +1,370 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+
+package org.gvsig.raster.wcs.io;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.fmap.crs.CRSFactory;
+import org.gvsig.fmap.dal.coverage.store.RasterDataServerExplorer;
+import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
+import org.gvsig.raster.impl.store.AbstractRasterDataParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DelegatedDynObject;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+
+/**
+ * Parameters for the WCS provider
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class WCSDataParametersImpl extends AbstractRasterDataParameters implements WCSDataParameters {
+	private static final String      FIELD_TIME            = "time";
+	private static final String      FIELD_MAXRES          = "maxres";
+	private static final String      FIELD_PARAM           = "parameter";
+	private static final String      FIELD_FORMAT          = "format";
+	private static final String      FIELD_NAME            = "name";
+	private static final String      FIELD_SRSSTR          = "srsstr";
+	private static final String      FIELD_EXTENT          = "extent";
+	private static final String      FIELD_WIDTH           = "width";
+	private static final String      FIELD_HEIGHT          = "height";
+	private static final String      FIELD_OVERRIDE        = "override";
+	private static final String      FIELD_ONLINERESOURC   = "onlineresources";
+	private static final String      FIELD_DEPTH           = "depth";
+	private static final String      FIELD_DELETECACHE     = "deletecache";
+	
+	private DelegatedDynObject       delegatedDynObject    = null;
+	protected static DynClass        DYNCLASS              = null;
+	private ICancellable             cancel                = null;
+	
+	public WCSDataParametersImpl() {
+		super();
+		initialize();
+	}
+	
+	protected void initialize() {
+		this.delegatedDynObject = (DelegatedDynObject) ToolsLocator
+				.getDynObjectManager().createDynObject(registerDynClass());
+	}
+	
+	public static DynStruct registerDynClass() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.getDefinition("WCSDataParameters_Persistent");
+		if( definition == null ) {
+			definition = manager.addDefinition(
+					WCSDataParametersImpl.class,
+					"WCSDataParameters_Persistent",
+					"WCS DataParameters Persistency",
+					null, 
+					null
+			);
+		}
+
+		AbstractRasterDataParameters.registerDynClass(definition);
+		
+		definition.addDynFieldObject(FIELD_MAXRES)
+		.setClassOfValue(Point2D.class)
+		.setMandatory(false);
+		
+		definition.addDynFieldString(FIELD_PARAM)
+		.setMandatory(false);
+		
+		definition.addDynFieldString(FIELD_DEPTH)
+		.setMandatory(false);
+		
+		definition.addDynFieldString(FIELD_TIME)
+		.setMandatory(false);
+		
+		definition.addDynFieldObject(FIELD_EXTENT)
+		.setDescription("Bounding box")
+		.setClassOfValue(Rectangle2D.class)
+		.setMandatory(false);
+		
+		definition.addDynFieldInt(FIELD_WIDTH)
+		.setDescription("Width")
+		.setMandatory(false);
+		
+		definition.addDynFieldInt(FIELD_HEIGHT)
+		.setDescription("Height")
+		.setMandatory(false);
+		
+		definition.addDynFieldString(FIELD_FORMAT)
+		.setDescription("Format")
+		.setMandatory(false);
+		
+		definition.addDynFieldString(FIELD_NAME)
+		.setDescription("Name")
+		.setMandatory(false);			
+		
+		definition.addDynFieldString(FIELD_SRSSTR)
+		.setDescription("String that represents the SRS")
+		.setMandatory(false);
+		
+		definition.addDynFieldBoolean(FIELD_OVERRIDE)
+		.setDescription("Override a host capabilities")
+		.setMandatory(false);
+		
+		definition.addDynFieldMap(FIELD_ONLINERESOURC)
+		.setDescription("online resources")
+		.setClassOfItems(String.class)
+		.setMandatory(false);
+		
+		definition.addDynFieldBoolean(FIELD_DELETECACHE)
+		.setDescription("Flag to delete cache the next request")
+		.setMandatory(false);
+
+		return definition;
+	}
+	
+	public void setMaxResolution(Point2D res) {
+		this.setDynValue(FIELD_MAXRES, res);
+	}
+	
+	public Point2D getMaxResolution() {
+		return (Point2D) this.getDynValue(FIELD_MAXRES);
+	}
+	
+	public void setParameter(String parameter) {
+		this.setDynValue(FIELD_PARAM, parameter);
+	}
+	
+	public String getParameter() {
+		return (String) this.getDynValue(FIELD_PARAM);
+	}
+	
+	public String getFormat() {
+		return (String) this.getDynValue(FIELD_FORMAT);
+	}
+
+	public void setFormat(String format) {
+		this.setDynValue(FIELD_FORMAT, format);
+	}
+	
+	/**
+	 * Devuelve el SRS.
+	 * @return SRS.
+	 */
+	public String getSRSCode() {
+		return (String) this.getDynValue(FIELD_SRSSTR);
+	}
+	
+	/**
+	 * Inserta el SRS.
+	 * @param m_srs SRS.
+	 */
+	public void setSRS(String m_srs) {
+		this.setDynValue(FIELD_SRSSTR, m_srs);
+		if(m_srs.equals("CRS:84"))
+			m_srs = "EPSG:4326";
+		setSRS(CRSFactory.getCRS(m_srs));
+	}
+	
+	public void setSRSID(String srsid) {
+		if (srsid == null) {
+			setDynValue(FIELD_SRSSTR, null);
+		} else {
+			setDynValue(FIELD_SRSSTR, CRSFactory.getCRS(srsid));
+		}
+	}
+	
+	public String getCoverageName() {
+		return (String) this.getDynValue(FIELD_NAME);
+	}
+
+	public void setCoverageName(String name) {
+		this.setDynValue(FIELD_NAME, name);
+	}
+	
+	public void setCancellable(ICancellable cancel) {
+		this.cancel = cancel;
+	}
+	
+	public ICancellable getCancellable() {
+		return this.cancel;
+	}
+	
+	public void setExtent(Rectangle2D bBox) {
+		this.setDynValue(FIELD_EXTENT, bBox);
+	}
+	
+	public void setWidth(int w) {
+		this.setDynValue(FIELD_WIDTH, new Integer(w));
+	}
+	
+	public void setHeight(int h) {
+		this.setDynValue(FIELD_HEIGHT, new Integer(h));
+	}
+	
+	public Rectangle2D getExtent() {
+		return (Rectangle2D)getDynValue(FIELD_EXTENT);
+	}
+	
+	/**
+	 * Gets the width
+	 * @return
+	 */
+	public int getWidth() {
+		Integer b = (Integer)getDynValue(FIELD_WIDTH);
+		if(b != null)
+			return ((Integer)b).intValue();
+		return 0;
+	}
+	
+	/**
+	 * Gets the height
+	 * @return
+	 */
+	public int getHeight() {
+		Integer b = (Integer)getDynValue(FIELD_HEIGHT);
+		if(b != null)
+			return ((Integer)b).intValue();
+		return 0;
+	}
+	
+	//**********************************************
+	
+	public String getDataStoreName() {
+		return WCSProvider.NAME;
+	}
+	
+	public String getDescription() {
+		return WCSProvider.DESCRIPTION;
+	}
+
+	public String getExplorerName() {
+		return WCSProvider.NAME;
+	}
+	
+	public boolean isValid() {
+		return (this.getURI() != null);
+	}
+	
+	protected DelegatedDynObject getDelegatedDynObject() {
+		return delegatedDynObject;
+	}
+	
+	@SuppressWarnings("unchecked")
+	public WCSDataParametersImpl clone() {
+		WCSDataParametersImpl p = new WCSDataParametersImpl();
+		p.setFormat(getFormat());
+		p.setHeight(getHeight());
+		p.setWidth(getWidth());
+		p.setExtent(getExtent());
+		p.setCoverageName(getCoverageName());
+		p.setOverrideHost(isOverridingHost());
+		p.setSRS(getSRS());
+		p.setSRS(getSRSCode());
+		p.setURI(getURI());
+		p.setCancellable(getCancellable());
+		p.setOnlineResources((Hashtable<String, String>)this.getDynValue(FIELD_ONLINERESOURC));
+		p.setTime(getTime());
+		return p;
+	}
+	
+	@SuppressWarnings("unchecked")
+	public void assignFields(RasterDataParameters par, RasterDataServerExplorer explorer) {
+		super.assignFields(par, explorer);
+		WCSDataParametersImpl p = null;
+		if(par instanceof WCSDataParametersImpl)
+			p = (WCSDataParametersImpl)par;
+		else
+			return;
+		setFormat(p.getFormat());
+		setHeight(p.getHeight());
+		setWidth(p.getWidth());
+		setExtent(p.getExtent());
+		setCoverageName(p.getCoverageName());
+		setOverrideHost(p.isOverridingHost());
+		setSRS(p.getSRS());
+		setSRS(p.getSRSCode());
+		setURI(p.getURI());
+		setCancellable(p.getCancellable());
+		setOnlineResources((Hashtable<String, String>)p.getDynValue(FIELD_ONLINERESOURC));
+		setTime(p.getTime());
+	}
+
+	public String getTime() {
+		return (String) this.getDynValue(FIELD_TIME);
+	}
+
+	public void setTime(String time) {
+		this.setDynValue(FIELD_TIME, time);
+	}
+	
+	public boolean isOverridingHost() {
+		Boolean b = (Boolean)getDynValue(FIELD_OVERRIDE);
+		if(b != null)
+			return ((Boolean)b).booleanValue();
+		return false;
+	}
+	
+	public void setOverrideHost(boolean over) {
+		this.setDynValue(FIELD_OVERRIDE, new Boolean(over));;
+	}
+	
+	public void setOnlineResources(Hashtable<String, String> onlineResources) {
+		this.setDynValue(FIELD_ONLINERESOURC, onlineResources);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public Map<String,String> getOnlineResource() {
+		return (Map<String,String>) this.getDynValue(FIELD_ONLINERESOURC);
+	}
+
+	/**
+	 * Gets the URL that should be accessed for an operation performed
+	 * to the server.
+	 *
+	 * @param onlineResources
+	 */
+	public String getOnlineResource(String operation) {
+		return (String) getOnlineResource().get(operation);
+	}
+	
+	
+	public String getDepth() {
+		return (String) this.getDynValue(FIELD_DEPTH);
+	}
+
+	
+	public void setDepth(String depth) {
+		this.setDynValue(FIELD_DEPTH, depth);
+	}
+
+	public boolean isSizeFixed() {
+		return true;
+	}
+	
+	public void deleteCache(boolean deleteCache) {
+		this.setDynValue(FIELD_DELETECACHE, new Boolean(deleteCache));
+	}
+	
+	public boolean isDeletingCache() {
+		return ((Boolean)getDynValue(FIELD_DELETECACHE)).booleanValue();
+	}
+
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSDataParametersImpl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/DefaultWCSIOLibrary.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/DefaultWCSIOLibrary.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/DefaultWCSIOLibrary.java	(revision 6982)
@@ -0,0 +1,55 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.raster.wcs.io;
+
+import org.gvsig.i18n.Messages;
+import org.gvsig.tools.library.AbstractLibrary;
+import org.gvsig.tools.library.LibraryException;
+/**
+ *
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class DefaultWCSIOLibrary extends AbstractLibrary {
+
+	public DefaultWCSIOLibrary() {
+		/*super(DefaultWCSIOLibrary.class,Library.TYPE.IMPL);
+		require(ToolsLibrary.class);
+		require(DALLibrary.class);
+		require(DALFileLibrary.class);*/
+	}
+
+	@Override
+	protected void doInitialize() throws LibraryException {
+		//RasterLibrary.wakeUp();
+
+		Messages.addResourceFamily("org.gvsig.raster.wcs.io.i18n.text",
+				DefaultWCSIOLibrary.class.getClassLoader(),
+				DefaultWCSIOLibrary.class.getClass().getName());
+	}
+
+	@Override
+	protected void doPostInitialize() throws LibraryException {
+		WCSServerExplorerParameters.registerDynClass();
+		WCSDataParametersImpl.registerDynClass();
+		WCSProvider.register();
+	}
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/DefaultWCSIOLibrary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/downloader/TileDownloaderForWCS.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/downloader/TileDownloaderForWCS.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/downloader/TileDownloaderForWCS.java	(revision 6982)
@@ -0,0 +1,59 @@
+package org.gvsig.raster.wcs.io.downloader;
+
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
+import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
+import org.gvsig.raster.cache.tile.Tile;
+import org.gvsig.raster.cache.tile.exception.TileGettingException;
+import org.gvsig.raster.impl.provider.tile.BaseTileDownloader;
+import org.gvsig.raster.wcs.io.WCSConnector;
+import org.gvsig.raster.wcs.io.WCSDataParametersImpl;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+
+/** 
+ * Tile getter 
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class TileDownloaderForWCS extends BaseTileDownloader {
+	private WCSConnector             connector  = null;
+	
+	public TileDownloaderForWCS(RasterDataStore store, 
+			int tilePxWidth,
+			int tilePxHeight,
+			WCSConnector connector) {
+		super(store, tilePxWidth, tilePxHeight);
+		this.connector = connector;
+	}
+	
+	public synchronized Tile downloadTile(Tile tile) throws TileGettingException {
+		try {
+			Rectangle2D r = new Rectangle2D.Double(tile.getExtent().getMinX(), 
+					tile.getExtent().getMinY() - tile.getExtent().getHeight(), 
+					tile.getExtent().getWidth(), 
+					tile.getExtent().getHeight());
+			WCSDataParametersImpl p = (WCSDataParametersImpl)store.getParameters();
+			WCSStatus wcsStatus = new WCSStatus();
+			wcsStatus.setCoveraName(p.getCoverageName());
+			wcsStatus.setSrs((String)p.getSRSCode());
+			wcsStatus.setFormat((String)p.getFormat());
+			wcsStatus.setDepth(p.getDepth());
+			wcsStatus.setOnlineResource(p.getOnlineResource() != null ? (String) p.getOnlineResource().get("GetCoverage") : null);
+			wcsStatus.setExtent(r);
+			wcsStatus.setHeight(tile.getHeightPx());
+			wcsStatus.setWidth(tile.getWidthPx());
+			
+			connector.getCoverageURL(wcsStatus, tile.getCancelled(), tile.getFile());
+			//Si borramos el rmf no se puede leer la etiqueta Alpha. En caso de que se modifique jgdal para
+			//poder guardar esta etiqueta deberiamos borrar el rmf para ahorrar ficheros
+			//File rmf = new File(tile.getFile().getAbsolutePath() + ".rmf");
+			//if(rmf.exists())
+				//rmf.delete();
+		} catch (RemoteServiceException e) {
+			throw new TileGettingException(e);
+		}
+		readTileFromDisk(tile);
+		return tile;
+	}
+	
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/downloader/TileDownloaderForWCS.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/downloader/WCSTileServer.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/downloader/WCSTileServer.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/downloader/WCSTileServer.java	(revision 6982)
@@ -0,0 +1,119 @@
+package org.gvsig.raster.wcs.io.downloader;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.fmap.dal.coverage.RasterLibrary;
+import org.gvsig.fmap.dal.coverage.datastruct.Extent;
+import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
+import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
+import org.gvsig.raster.cache.tile.TileCacheLibrary;
+import org.gvsig.raster.cache.tile.TileCacheLocator;
+import org.gvsig.raster.cache.tile.TileCacheManager;
+import org.gvsig.raster.cache.tile.provider.CacheStruct;
+import org.gvsig.raster.cache.tile.provider.Downloader;
+import org.gvsig.raster.cache.tile.provider.TileServer;
+import org.gvsig.raster.impl.provider.RasterProvider;
+import org.gvsig.raster.wcs.io.WCSProvider;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+* Data server for the tile cache in a WMSProvider
+* @author Nacho Brodin (nachobrodin@gmail.com)
+*/
+public class WCSTileServer implements TileServer {
+	private static Logger              logger               = LoggerFactory.getLogger(WCSTileServer.class);
+	private CacheStruct                struct               = null;
+	private Downloader                 downloader           = null;
+	private RasterDataStore            store                = null;
+	private String                     suffix               = ".tif";
+
+	/**
+	 * @param store
+	 */
+	public WCSTileServer(RasterDataStore store) {
+		this.store = store;
+		this.suffix = ((RasterProvider)store.getProvider()).getFileSuffix();
+	}
+
+	public Downloader getDownloader() {
+		if(downloader == null ||
+		   ((TileDownloaderForWCS)downloader).getTileSize()[0] != TileCacheLibrary.ALTERNATIVE_TILESIZE ||
+		   ((TileDownloaderForWCS)downloader).getTileSize()[1] != TileCacheLibrary.ALTERNATIVE_TILESIZE) {
+
+			try {
+				downloader = new TileDownloaderForWCS(
+						store,
+						TileCacheLibrary.ALTERNATIVE_TILESIZE,
+						TileCacheLibrary.ALTERNATIVE_TILESIZE,
+						((WCSProvider)store.getProvider()).getConnector());
+			} catch (RemoteServiceException e) {
+				return null;
+			}
+		}
+		return downloader;
+	}
+
+	public CacheStruct getStruct() {
+		if(struct == null) {
+			TileCacheManager  manager = TileCacheLocator.getManager();
+
+			int coordinates = CacheStruct.FLAT;
+			if(store.getProjection() != null)
+				coordinates = (store.getProjection() != null && store.getProjection().isProjected()) ? CacheStruct.FLAT : CacheStruct.GEOGRAFIC;
+			else {
+				Extent e = store.getExtent();
+				if(e.getULX() >= -180 && e.getULX() <= 180 && e.getLRX() >= -180 && e.getLRX() <= 180 &&
+					e.getULY() >= -90 && e.getULY() <= 90 && e.getLRY() >= -90 && e.getLRY() <= 90) {
+					coordinates = CacheStruct.GEOGRAFIC;
+				}
+			}
+
+			String epsg = null;
+			IProjection proj = store.getProjection();
+			if(proj != null)
+				epsg = proj.getAbrev();
+
+			WCSProvider wcsProvider = (WCSProvider)store.getProvider();
+            struct = manager.createCacheStructure(coordinates,
+					TileCacheLibrary.DEFAULT_LEVELS,
+					store.getExtent().toRectangle2D(),
+					store.getCellSize(),
+					TileCacheLibrary.ALTERNATIVE_TILESIZE,
+					TileCacheLibrary.ALTERNATIVE_TILESIZE,
+					wcsProvider.getURIOfFirstProvider().getPath(),
+					wcsProvider.getParameters().getCoverageName(),
+					TileCacheLibrary.DEFAULT_STRUCTURE,
+					RasterLibrary.pathTileCache,
+					getFileSuffix(),
+					epsg,
+					0);
+		}
+		return struct;
+	}
+
+	public void setStruct(CacheStruct struct) {
+		if(struct != null) {
+			this.struct = struct;
+			if(struct.getTileSizeByLevel(0) != null) {
+				try {
+					downloader = new TileDownloaderForWCS(store,
+							struct.getTileSizeByLevel(0)[0],
+							struct.getTileSizeByLevel(0)[1],
+							((WCSProvider)store.getProvider()).getConnector());
+				} catch (RemoteServiceException ex) {
+					logger.error("Constructing TileDownloaderForWCS: " + ex.getMessage());
+				}
+			}
+		}
+	}
+
+	public String getFileSuffix() {
+		return suffix;
+	}
+
+	public void setFileSuffix(String extension) {
+		this.suffix = extension;
+	}
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/downloader/WCSTileServer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/package.html
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/package.html	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/package.html	(revision 6982)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>org.gvsig.raster.wcs.io package documentation</title>
+</head>
+<body>
+
+	<p>WCS provider</p>
+
+</body>
+</html>
\ No newline at end of file

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSLayerNode.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSLayerNode.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSLayerNode.java	(revision 6982)
@@ -0,0 +1,232 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.raster.wcs.io;
+
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+/**
+ * Class defining the node of the layer tree of a common WCS service.
+ * @author jaume
+ */
+@SuppressWarnings("unchecked")
+public class WCSLayerNode {
+	private String       name                  = null;
+	private ArrayList    srs                   = null;
+	private String       title                 = null;
+	private String       nativeSRS             = null;
+	private ArrayList    formats               = null;
+	private Point2D      maxRes                = null;
+	private int          width                 = 0;
+	private int          height                = 0;
+	private ArrayList    timePositions         = null;
+	private String       description           = null;
+	private ArrayList    interpolationMethods  = null;
+	private ArrayList    pList                 = null;
+	private Hashtable    extents               = null;
+	private String       latLonBox             = null;
+	private String       lAbstract             = null;
+	private ArrayList    children              = new ArrayList();
+	private boolean      transparency;
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void addAllSrs(ArrayList srs) {
+		if (this.srs == null)
+			this.srs = new ArrayList();
+		this.srs.addAll(srs);
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public void setNativeSRS(String nativeSRS) {
+		this.nativeSRS = nativeSRS;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setFormats(ArrayList formats) {
+		this.formats = formats;
+	}
+
+	public ArrayList getFormats() {
+		return formats;
+	}
+
+	public ArrayList getSRSs() {
+		if (!srs.contains(nativeSRS)) {
+			ArrayList l = new ArrayList(srs);
+			l.add(nativeSRS);
+			return l;
+		}
+		return srs;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public Rectangle2D getExtent(String srs) {
+		if ( extents != null ) {
+			return (Rectangle2D) extents.get(srs);
+		}
+		return null;
+	}
+	
+	public void addExtent(String srs, Rectangle2D extent) {
+		if ( extents == null ) extents = new Hashtable();
+		extents.put(srs, extent);
+	}
+
+	public Point2D getMaxRes() {
+		return maxRes;
+	}
+	
+
+	public void setMaxRes(Point2D maxRes) {
+		this.maxRes = maxRes;
+	}
+	
+	public String toString(){
+    	String str;
+    	if (getName()==null)
+    		str = getTitle();
+    	else
+    		str = "["+getName()+"] "+getTitle();
+        return str;
+    }
+
+	public void setTimePositions(ArrayList timePositions) {
+		this.timePositions = timePositions;
+	}
+    
+	public ArrayList getTimePositions() {
+		return this.timePositions;
+	}
+
+	public String getDescription() {
+		return this.description;
+	}
+	
+	public void setDescription(String descr) {
+		this.description = descr;
+	}
+
+	public String getLonLatEnvelope() {
+		return "yet unimplemented";
+	}
+
+	public void setInterpolationMethods(ArrayList interpolationMethods) {
+		this.interpolationMethods = interpolationMethods;
+	}
+	
+	public ArrayList getInterpolationMethods() {
+		return interpolationMethods;
+	}
+
+	public ArrayList getParameterList() {
+		return pList;
+	}
+	
+	public void addParameter(FMapWCSParameter p) {
+		if (pList == null) pList = new ArrayList();
+		pList.add(p);
+	}
+	
+	/**
+     * Gets the layer abstract.
+     * @return Returns the abstract.
+     */
+    public String getAbstract() {
+        return lAbstract;
+    }
+
+    /**
+     * Sets the layer abstract.
+     * @param abstract The abstract to set.
+     */
+    public void setAbstract(String _abstract) {
+        lAbstract = _abstract;
+    }
+    
+    public void setLatLonBox(String _latLonBox) {
+        latLonBox = _latLonBox;
+    }
+
+    public String getLatLonBox() {
+        return latLonBox;
+    }
+    
+    /**
+     * Gets the list of sons of this layer.
+     */
+    public ArrayList getChildren() {
+        return children;
+    }
+    
+    /**
+     * Sets the list of sons of this layer.
+     * @param children
+     */
+    public void setChildren(ArrayList children) {
+        this.children = children;
+    }
+    
+    /**
+     * @return Returns the transparency.
+     */
+    public boolean isTransparent() {
+        return transparency;
+    }
+
+    /**
+     * @param transparency The transparency to set.
+     */
+    public void setTransparency(boolean transparency) {
+        this.transparency = transparency;
+    }
+
+	public int getWidth() {
+		return width;
+	}
+
+	public void setWidth(int width) {
+		this.width = width;
+	}
+
+	public int getHeight() {
+		return height;
+	}
+
+	public void setHeight(int height) {
+		this.height = height;
+	}
+
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/WCSLayerNode.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/FMapWCSParameter.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/FMapWCSParameter.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/FMapWCSParameter.java	(revision 6982)
@@ -0,0 +1,71 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+package org.gvsig.raster.wcs.io;
+
+import java.util.ArrayList;
+
+/**
+ * Class abstracting WCS's axis descriptions into FMap
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ * @TODO add interval parameters support
+ */
+@SuppressWarnings("unchecked")
+public class FMapWCSParameter {
+	public static final int VALUE_LIST = 0;
+	public static final int INTERVAL = 1;
+	private String name;
+	private int type;
+	private ArrayList valueList;
+	private String label;
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setType(int type) {
+		this.type = type;
+	}
+
+	public int getType() {
+		return type;
+	}
+
+	public void setValueList(ArrayList singleValues) {
+		this.valueList = singleValues;
+	}
+
+	public void setLabel(String label) {
+		this.label = label;
+	}
+
+	public String toString() {
+		return (label!=null) ? label : name;
+	}
+
+	public ArrayList getValueList() {
+		return valueList;
+	}
+
+	public String getName() {
+		return name;
+	}
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/java/org/gvsig/raster/wcs/io/FMapWCSParameter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 6982)
@@ -0,0 +1 @@
+org.gvsig.raster.wcs.io.DefaultWCSIOLibrary
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/resources/org/gvsig/raster/wcs/io/i18n/text.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/resources/org/gvsig/raster/wcs/io/i18n/text.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/resources/org/gvsig/raster/wcs/io/i18n/text.properties	(revision 6982)
@@ -0,0 +1,2 @@
+error_connecting=Error conectando con el servidor
+malformed_url=URL mal formada

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/resources/org/gvsig/raster/wcs/io/i18n/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/resources/org/gvsig/raster/wcs/io/i18n/text_en.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/resources/org/gvsig/raster/wcs/io/i18n/text_en.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/resources/org/gvsig/raster/wcs/io/i18n/text_en.properties	(revision 6982)
@@ -0,0 +1,2 @@
+error_connecting=Error connecting with the server
+malformed_url=Malformed URL
\ No newline at end of file

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/src/main/resources/org/gvsig/raster/wcs/io/i18n/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/pom.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/pom.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/pom.xml	(revision 6982)
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.raster.wcs.io</artifactId>
+    <packaging>jar</packaging>
+    <name>org.gvsig.raster.wcs.io</name>
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.raster.wcs</artifactId>
+        <version>2.2.48</version>
+    </parent>
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.cache.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.impl</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.wcs.remoteclient</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.remoteclient</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.i18n</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.projection.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.projection.cresques.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.compat.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.compat.se</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.file.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.spi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    <!--
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.generalpath</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.operation</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+    -->
+    </dependencies>
+</project>

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/resources/META-INF/services/org.gvsig.tools.library.Library
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/resources/META-INF/services/org.gvsig.tools.library.Library	(revision 6982)
@@ -0,0 +1 @@
+org.gvsig.raster.wcs.io.DefaultWCSIOLibrary
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/resources/README.txt
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/resources/README.txt	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/resources/README.txt	(revision 6982)
@@ -0,0 +1,8 @@
+Put into this folder the resources needed by your test classes.
+
+This folder is added to the Tests classpath, so you can load any resources 
+through the ClassLoader.
+
+By default, in this folder you can find an example of log4j configuration,
+prepared to log messages through the console, so logging works when you
+run your tests classes.
\ No newline at end of file

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io/resources/README.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.io
___________________________________________________________________
Added: svn:ignore
   + target

.settings

.classpath

.project


Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestParameterPanel.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestParameterPanel.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestParameterPanel.java	(revision 6982)
@@ -0,0 +1,42 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.wcs.app.extension.gui.panel;
+
+import javax.swing.JFrame;
+
+import org.gvsig.raster.wcs.app.wcsclient.gui.panel.ParameterPanel;
+
+public class TestParameterPanel {
+	private int               w        = 510;
+	private int               h        = 610;
+	private JFrame            frame    = new JFrame();
+	private ParameterPanel    desc     = null;
+
+	public TestParameterPanel() {
+		desc = new ParameterPanel();
+		frame.getContentPane().add(desc);
+		frame.setSize(w, h);
+		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestParameterPanel();
+	}
+}
\ No newline at end of file

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestParameterPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestFormatsPanel.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestFormatsPanel.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestFormatsPanel.java	(revision 6982)
@@ -0,0 +1,42 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.wcs.app.extension.gui.panel;
+
+import javax.swing.JFrame;
+
+import org.gvsig.raster.wcs.app.wcsclient.gui.panel.FormatPanel;
+
+public class TestFormatsPanel {
+	private int               w        = 510;
+	private int               h        = 610;
+	private JFrame            frame    = new JFrame();
+	private FormatPanel       desc     = null;
+
+	public TestFormatsPanel() {
+		desc = new FormatPanel();
+		frame.getContentPane().add(desc);
+		frame.setSize(w, h);
+		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestFormatsPanel();
+	}
+}
\ No newline at end of file

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestFormatsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestInfoPanel.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestInfoPanel.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestInfoPanel.java	(revision 6982)
@@ -0,0 +1,42 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.wcs.app.extension.gui.panel;
+
+import javax.swing.JFrame;
+
+import org.gvsig.raster.wcs.app.wcsclient.gui.panel.InfoPanel;
+
+public class TestInfoPanel {
+	private int               w        = 510;
+	private int               h        = 610;
+	private JFrame            frame    = new JFrame();
+	private InfoPanel         desc     = null;
+
+	public TestInfoPanel() {
+		desc = new InfoPanel();
+		frame.getContentPane().add(desc);
+		frame.setSize(w, h);
+		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestInfoPanel();
+	}
+}
\ No newline at end of file

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestInfoPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestLayerPanel.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestLayerPanel.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestLayerPanel.java	(revision 6982)
@@ -0,0 +1,42 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ */
+package org.gvsig.wcs.app.extension.gui.panel;
+
+import javax.swing.JFrame;
+
+import org.gvsig.raster.wcs.app.wcsclient.gui.panel.LayerPanel;
+
+public class TestLayerPanel {
+	private int               w        = 510;
+	private int               h        = 610;
+	private JFrame            frame    = new JFrame();
+	private LayerPanel        desc     = null;
+
+	public TestLayerPanel() {
+		desc = new LayerPanel();
+		frame.getContentPane().add(desc);
+		frame.setSize(w, h);
+		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+		frame.setVisible(true);
+	}
+
+	public static void main(String[] args) {
+		new TestLayerPanel();
+	}
+}
\ No newline at end of file

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/test/java/org/gvsig/wcs/app/extension/gui/panel/TestLayerPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/assembly/gvsig-plugin-package.xml	(revision 6982)
@@ -0,0 +1,37 @@
+<assembly>
+    <id>gvsig-plugin-package</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <baseDirectory>${project.artifactId}</baseDirectory>
+    <includeBaseDirectory>true</includeBaseDirectory>
+    <files>
+        <file>
+            <source>target/${project.artifactId}-${project.version}.jar</source>
+            <outputDirectory>lib</outputDirectory>
+        </file>
+        <file>
+            <source>target/package.info</source>
+        </file>
+    </files>
+
+    <fileSets>
+        <fileSet>
+            <directory>src/main/resources-plugin</directory>
+            <outputDirectory>.</outputDirectory>
+        </fileSet>
+    </fileSets>
+
+
+    <dependencySets>
+        <dependencySet>
+            <useProjectArtifact>false</useProjectArtifact>
+            <useTransitiveDependencies>false</useTransitiveDependencies>
+            <outputDirectory>lib</outputDirectory>
+            <includes> 
+                <include>org.gvsig:org.gvsig.raster.wcs.io:jar</include>
+                <include>org.gvsig:org.gvsig.raster.wcs.remoteclient:jar</include>
+            </includes>
+        </dependencySet>
+    </dependencySets>
+</assembly>

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/assembly/gvsig-plugin-package.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSZoomPixelCursorListener.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSZoomPixelCursorListener.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSZoomPixelCursorListener.java	(revision 6982)
@@ -0,0 +1,163 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+package org.gvsig.raster.wcs.app.wcsclient.gui.toc;
+
+import java.awt.Cursor;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.Toolkit;
+import java.awt.geom.Point2D;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
+import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
+import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
+import org.gvsig.raster.wcs.app.wcsclient.layer.FLyrWCS;
+
+
+/**
+ * <p>Listener that executes a <i>zoom in</i> operation in the associated <code>MapControl</code>,
+ *  having as center the point selected.</p>
+ * 
+ * <p>Listens a single click of any mouse's button.</p>
+ * 
+ * <p>The <i>zoom in</i> factor will depend on the maximum resolution of the <i>WCS</i> layers in
+ *  the <code>MapControl</code>.</p>
+ *
+ * @author Nacho Brodin (brodin_ign@gva.es)
+ */
+public class WCSZoomPixelCursorListener implements PointListener {
+	private static final GeometryManager 	geomManager 				= GeometryLocator.getGeometryManager();
+	/**
+	 * Object used to log messages for this listener.
+	 */
+	//private static Logger 	logger = Logger.getLogger(WCSZoomPixelCursorListener.class.getName());
+
+	/**
+	 * The image to display when the cursor is active.
+	 */	
+	private final Image img = IconThemeHelper.getImageIcon("view-previsualize-area").getImage();
+
+	/**
+	 * The cursor used to work with this tool listener.
+	 * 
+	 * @see #getCursor()
+	 */ 
+	private Cursor 			cur = Toolkit.getDefaultToolkit().createCustomCursor(	img,
+
+	/**
+	 * Reference to the <code>MapControl</code> object that uses.
+	 */																					new Point(16, 16), "");
+	private MapControl 		mapCtrl;
+
+	/**
+	 * <p>Creates a new <code>WCSZoomPixelCursorListener</code> object.</p>
+	 * 
+	 * @param mc the <code>MapControl</code> where be applied the changes
+	 */
+	public WCSZoomPixelCursorListener(MapControl mc) {
+		this.mapCtrl = mc;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void point(PointEvent event) throws BehaviorException {
+		Point2D pReal = mapCtrl.getMapContext().getViewPort().toMapPoint(event.getPoint());
+		//Point imagePoint = new Point((int) event.getPoint().getX(), (int) event.getPoint().getY());
+		ViewPort v = mapCtrl.getMapContext().getViewPort();
+
+		FLayer[] actives = mapCtrl.getMapContext().getLayers().getActives();
+		Envelope ext = null;
+
+		try {
+			ext = actives[0].getFullEnvelope();
+		} catch (ReadException e) {
+			throw new BehaviorException(e.getMessage());
+		}
+
+  		if(	ext != null ){
+
+  	    	double w2 = v.getImageWidth()/2D;
+  	    	double h2 = v.getImageHeight()/2D;
+  	    	double wcOriginX = pReal.getX();
+  	    	double wcOriginY = pReal.getY();
+
+  	    	Point2D maxRes = ((FLyrWCS)actives[0]).getMaxResolution();
+  	    	double wcDstMinX = wcOriginX-w2*maxRes.getX();
+  	    	double wcDstMinY = wcOriginY-h2*maxRes.getY();
+  	    	double wcDstWidth = w2*maxRes.getX()*2D;
+  	    	double wcDstHeight = h2*maxRes.getY()*2D;
+
+  	    	Envelope rect;
+			try {
+				rect = geomManager.createEnvelope(
+						wcDstMinX, wcDstMinY, wcDstMinX + wcDstWidth, wcDstMinY - wcDstHeight, SUBTYPES.GEOM2D);
+			} catch (CreateEnvelopeException e) {
+				throw new BehaviorException(e.getMessage());
+			}
+  	       	mapCtrl.getMapContext().getViewPort().setEnvelope(rect);
+  		}
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getCursor()
+	 */
+	public Cursor getCursor() {
+		return cur;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+	 */
+	public boolean cancelDrawing() {
+		return false;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#pointDoubleClick(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+	 */
+	public void pointDoubleClick(PointEvent event) throws BehaviorException {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener#getImageCursor()
+	 */
+	public Image getImageCursor() {
+		return img;
+	}
+}
\ No newline at end of file

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSZoomPixelCursorListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSPropsTocMenuEntry.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSPropsTocMenuEntry.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSPropsTocMenuEntry.java	(revision 6982)
@@ -0,0 +1,62 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+package org.gvsig.raster.wcs.app.wcsclient.gui.toc;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.raster.wcs.app.wcsclient.gui.dialog.WCSPropsDialog;
+import org.gvsig.raster.wcs.app.wcsclient.layer.FLyrWCS;
+
+
+/**
+ * Changes the connection properties.
+ *
+ * Cambia las propiedades de la conexi�n al servidor WCS.
+ *
+ * @author jaume - jaume.dominguez@iver.es
+ */
+public class WCSPropsTocMenuEntry extends AbstractTocContextMenuAction {
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+       	WCSPropsDialog dialog = new WCSPropsDialog((FLyrWCS) selectedItems[0]);
+       	PluginServices.getMDIManager().addWindow(dialog);
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "wcs_properties");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1 && selectedItems[0].isAvailable();
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (selectedItems.length != 1) {
+			return false;
+		}
+		return selectedItems[0] instanceof FLyrWCS;
+
+	}
+
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSPropsTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSZoomPixelCursorTocMenuEntry.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSZoomPixelCursorTocMenuEntry.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSZoomPixelCursorTocMenuEntry.java	(revision 6982)
@@ -0,0 +1,80 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+package org.gvsig.raster.wcs.app.wcsclient.gui.toc;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
+import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction;
+import org.gvsig.app.project.documents.view.toc.ITocItem;
+import org.gvsig.app.project.documents.view.toolListeners.StatusBarListener;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.MouseMovementBehavior;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
+import org.gvsig.raster.wcs.app.wcsclient.layer.FLyrWCS;
+
+
+/**
+ * @author Nacho Brodin <nachobrodin@gmail.com>
+ *
+ * Entrada de men� para la activaci�n de la funcionalidad de zoom a un
+ * pixel centrado en el cursor.
+ */
+public class WCSZoomPixelCursorTocMenuEntry extends
+		AbstractTocContextMenuAction {
+
+	public void execute(ITocItem item, FLayer[] selectedItems) {
+
+		AbstractViewPanel vista = (AbstractViewPanel) PluginServices.getMDIManager().getActiveWindow();
+		MapControl mapCtrl = vista.getMapControl();
+
+		if (!mapCtrl.hasTool("zoom_pixel_cursor")) {
+			StatusBarListener sbl = new StatusBarListener(mapCtrl);
+
+			WCSZoomPixelCursorListener zp = new WCSZoomPixelCursorListener(
+					mapCtrl);
+			mapCtrl.addBehavior("zoom_pixel_cursor", new Behavior[] {
+					new PointBehavior(zp), new MouseMovementBehavior(sbl) });
+
+		}
+
+		mapCtrl.setTool("zoom_pixel_cursor");
+	}
+
+	public String getText() {
+		return PluginServices.getText(this, "Zoom_pixel");
+	}
+
+	public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
+		return selectedItems.length == 1 && selectedItems[0].isAvailable();
+	}
+
+	public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
+		if (selectedItems.length != 1) {
+			return false;
+		}
+		return selectedItems[0] instanceof FLyrWCS;
+
+	}
+
+}
\ No newline at end of file

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSZoomPixelCursorTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSZoomToPixelTocMenuEntry.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSZoomToPixelTocMenuEntry.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSZoomToPixelTocMenuEntry.java	(revision 6982)
@@ -0,0 +1,113 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+
+package org.gvsig.raster.wcs.app.wcsclient.gui.toc;
+
+import java.awt.event.ActionEvent;
+import java.awt.geom.Point2D;
+
+import javax.swing.JMenuItem;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.toc.TocMenuEntry;
+import org.gvsig.app.project.documents.view.toc.gui.FPopupMenu;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.raster.wcs.app.wcsclient.layer.FLyrWCS;
+
+
+/**
+ * This class implements the TOC meny entry to do a zoom to pixel. Zooming to a
+ * pixel causes to change the view's zoom to fit in the coverage's native
+ * resolution.
+ *
+ * Entrada de men� para la activaci�n de la funcionalidad de zoom a un pixel.
+ *
+ * @author Jaume - jaume.dominguez@iver.es
+ *
+ * @deprecated not used
+ */
+public class WCSZoomToPixelTocMenuEntry extends TocMenuEntry {
+	public static final int ZOOM_TO_VIEW_CENTER = 0x2;
+	private JMenuItem properties;
+	FLayer lyr = null;
+	public int zoomType = ZOOM_TO_VIEW_CENTER;
+
+	public void initialize(FPopupMenu m) {
+		super.initialize(m);
+
+		if (isTocItemBranch()) {
+			lyr = getNodeLayer();
+    		// Opciones para capas raster
+    		if ((lyr instanceof FLyrWCS)) {
+    			properties = new JMenuItem(PluginServices.getText(this, "Zoom_pixel"));
+    			getMenu().add( properties );
+    			//properties.setFont(FPopupMenu.theFont);
+    			getMenu().setEnabled(true);
+    			properties.addActionListener(this);
+     		}
+		}
+	}
+	/**
+	 * Calculates the zoom that fits the coverage native resolution.
+	 *
+	 * TODO fix the little loss of accuracy caused by a floating point issue
+	 */
+	public void actionPerformed(ActionEvent e) {
+		//System.out.println("Zoom a un pixel");
+
+    	ViewPort v = getMapContext().getViewPort();
+
+    	double w2 = v.getImageWidth()/2D;
+    	double h2 = v.getImageHeight()/2D;
+    	double wcOriginCenterX = v.getExtent().getMinX()+((v.getExtent().getMaxX()-v.getExtent().getMinX())/2D);
+    	double wcOriginCenterY = v.getExtent().getMinY()+((v.getExtent().getMaxY()-v.getExtent().getMinY())/2D);
+
+    	Point2D maxRes = ((FLyrWCS) lyr).getMaxResolution();
+    	//double wcDstMinX = wcOriginCenterX-w2*maxRes;
+    	double wcDstMinX = wcOriginCenterX-w2*maxRes.getX();
+    	//double wcDstMinY = wcOriginCenterY+h2*maxRes;
+    	double wcDstMinY = wcOriginCenterY+h2*maxRes.getY();
+    	//double wcDstWidth = w2*maxRes*2D;
+    	double wcDstWidth = w2*maxRes.getX()*2D;
+       	//double wcDstHeight = h2*maxRes*2D;
+    	double wcDstHeight = h2*maxRes.getY()*2D;
+
+
+    	GeometryManager geoMan = GeometryLocator.getGeometryManager();
+		Envelope rAux = null;
+		try {
+			rAux = geoMan.createEnvelope(wcDstMinX, wcDstMinY, wcDstMinX
+					+ wcDstWidth, wcDstMinY + wcDstHeight, SUBTYPES.GEOM2D);
+
+    	} catch (Exception e1) {
+			e1.printStackTrace();
+		}
+		getMapContext().getViewPort().setEnvelope(rAux);
+
+	}
+}
+

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/toc/WCSZoomToPixelTocMenuEntry.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/dialog/WCSPropsDialog.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/dialog/WCSPropsDialog.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/dialog/WCSPropsDialog.java	(revision 6982)
@@ -0,0 +1,406 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+ 
+package org.gvsig.raster.wcs.app.wcsclient.gui.dialog;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.HashMap;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.gui.wizards.WizardListener;
+import org.gvsig.app.gui.wizards.WizardListenerSupport;
+import org.gvsig.fmap.dal.coverage.exception.ConnectException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.exceptions.ConnectionErrorLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.DriverLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.LegendLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.NameLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.ProjectionLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.TypeLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.URLLayerException;
+import org.gvsig.fmap.mapcontext.exceptions.UnsupportedVersionLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.raster.fmap.layers.FLyrRaster;
+import org.gvsig.raster.swing.RasterSwingLibrary;
+import org.gvsig.raster.util.CancelTaskImpl;
+import org.gvsig.raster.wcs.app.wcsclient.gui.panel.WCSParamsPanel;
+import org.gvsig.raster.wcs.app.wcsclient.layer.FLyrWCS;
+import org.gvsig.raster.wcs.io.WCSServerExplorer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The TOC WCS properties panel container.
+ *
+ * @author jaume - jaume.dominguez@iver.es
+ *
+ */
+public class WCSPropsDialog extends JPanel implements IWindow {
+
+	private static final long         serialVersionUID    = 1L;
+	JDialog                           dlg                 = null;  
+	private JPanel                    buttonsPanel        = null;
+	private FLyrRaster                fLayer              = null;
+	boolean                           applied             = false;;
+	private WindowInfo                m_ViewInfo          = null;
+
+	private JButton                   btnApply            = null;
+	private JButton                   btnOk               = null;
+	private JButton                   btnCancel           = null;
+	private WCSParamsPanel            wcsParamsTabbedPane;
+    private CommandListener           m_actionListener;
+    private WCSServerExplorer         explorer            = null;
+    private Logger                    logger              = LoggerFactory.getLogger(WCSPropsDialog.class);
+
+    public WCSPropsDialog(FLayer layer) {
+		super();
+		if(layer instanceof FLyrRaster)
+			initialize((FLyrRaster)layer);
+	}
+
+
+	private void initialize(FLyrRaster layer) {
+		setLayout(null);
+
+        setFLayer(layer);
+        wcsParamsTabbedPane = getParamsPanel(((FLyrWCS) layer).getProperties());
+        wcsParamsTabbedPane.addWizardListener(new WizardListener() {
+			public void wizardStateChanged(boolean finishable) {
+				getBtnOk().setEnabled(finishable);
+				getBtnApply().setEnabled(finishable);
+			}
+
+			public void error(Exception e) {
+			}
+
+        })  ;
+        this.add(wcsParamsTabbedPane);
+        this.add(getButtonsPanel(), null);
+
+	}
+
+
+	public void setFLayer(FLyrRaster f) {
+		fLayer = f;
+	}
+
+	/**
+	 * With getParamsPanel we have access to the map config TabbedPane.
+	 * If this panel doesn't exist yet (which can occur when an existing project is
+	 * recovered) it is been automatically constructed by connecting to the server,
+	 * reloading the necessary data, filling up the content and setting the selected
+	 * values that were selected when the projet was saved.
+	 *
+	 *
+	 * Since a connection to the server is needed when rebuiliding the panel, this
+	 * causes a delay for the panel's showing up or a nullPointer error if there is
+	 * no path to the server.
+	 *
+	 *
+	 * Con getParamsPanel tenemos acceso a juego de pesta�as de configuraci�n
+	 * del mapa. Si este panel todav�a no existe (como puede ser cuando
+	 * recuperamos un proyecto guardado) �ste se crea autom�ticamente conectando
+	 * al servidor, recuperando los datos necesarios, rellenando el contenido y
+	 * dejando seleccionados los valores que estaban seleccionados cuando se
+	 * guarda el proyecto.
+	 *
+	 *
+	 * Como para reconstruirse requiere una conexi�n con el servidor esto causa
+	 * un retardo en la aparici�n en el toc o un error de nullPointer si no
+	 * hay conexi�n hasta el servidor.
+	 *
+	 *
+	 * @return WCSParamsPanel
+	 */
+	public WCSParamsPanel getParamsPanel(HashMap info) {
+	    if (info != null) {
+	    	try {
+	    		if(explorer == null) {
+					explorer = ((FLyrWCS)fLayer).getExplorer();
+					
+					try {
+			    		explorer.connect(new CancelTaskImpl());
+					} catch (ConnectException e) {
+						RasterSwingLibrary.messageBoxError("The connection cannot be established", this, e);
+						return null;
+					} 
+	    		}
+	    	} catch (Exception e) {
+	    		explorer = null;
+	    		JOptionPane.showMessageDialog(null, "error_comunicacion_servidor", "Error", JOptionPane.ERROR_MESSAGE);
+	    	}
+	    	try {
+
+				WCSParamsPanel toc = new WCSParamsPanel();
+				toc.setVisible(true);
+				toc.setListenerSupport(new WizardListenerSupport());
+				toc.setWizardData(explorer);
+
+				toc.getLayerPanel().getLstCoverages().setListData(explorer.getCoverageList());
+
+				String coverageName = (String) info.get("name");
+				int index = toc.getLayerPanel().getCoverageIndex( coverageName );
+				if (index != -1) {
+					toc.getLayerPanel().getLstCoverages().setSelectedIndex(index);
+				}
+
+				toc.refreshData(((FLyrWCS)fLayer).getParameters());
+
+				index = toc.getFormatsPanel().getSRSIndex((String) info.get("crs") );
+				if (index != -1) {
+					toc.getFormatsPanel().getLstCRSs().setSelectedIndex(index);
+				}
+				index = toc.getFormatsPanel().getFormatIndex((String) info.get("format"));
+				if (index != -1) {
+					toc.getFormatsPanel().getLstFormats().setSelectedIndex(index);
+				}
+				String time = (String) info.get("time");
+				if (time != null && !time.equals("")) {
+					toc.getTimePanel().getLstSelectedTimes().setListData(time.split(","));
+				}
+				String parameter = (String) info.get("parameter");
+				if (parameter != null && !parameter.equals("")){
+					String[] s = parameter.split("=");
+					String pName = s[0];
+
+					String regexDouble = "-?[0-9]+(\\.[0-9]+)?";
+					String regexInterval = regexDouble+"/"+regexDouble;
+					String regexIntervalList = regexInterval+"(,"+regexInterval+")*";
+					if (s[1].matches(regexInterval)){
+						// Single Interval
+						toc.getParameterPanel().getJScrollPane5().setVisible(false);
+						toc.getParameterPanel().getSingleParamValuesList().setEnabled(false);
+
+
+					} else if (s[1].matches(regexIntervalList)){
+						// Multiple Interval
+
+					} else {
+						// Single values
+						toc.getParameterPanel().getJScrollPane5().setVisible(true);
+						toc.getParameterPanel().getSingleParamValuesList().setEnabled(true);
+
+						String[] pVals = s[1].split(",");
+						index = toc.getParameterPanel().getParamIndex(pName);
+						toc.getParameterPanel().getCmbParam().setSelectedIndex(index);
+						//toc.refreshParamValues( coverageName );
+						int[] indexes = new int[pVals.length];
+						for (int i = 0; i < pVals.length; i++) {
+							indexes[i] = toc.getParameterPanel().getValueIndex(pVals[i]);
+						}
+
+						toc.getParameterPanel().getSingleParamValuesList().setSelectedIndices(indexes);
+					}
+				}
+				toc.refreshInfo();
+				return toc;
+			} catch (Exception e) {
+				JOptionPane.showMessageDialog(null, "servidor_wcs_no_responde", "Error", JOptionPane.ERROR_MESSAGE);
+				e.printStackTrace();
+			}
+	    }
+	    return null;
+	}
+
+	public JPanel getButtonsPanel() {
+		if (buttonsPanel == null) {
+			m_actionListener = new CommandListener(this);
+			buttonsPanel = new JPanel();
+	        buttonsPanel.setBounds(5, wcsParamsTabbedPane.getHeight(), 471, 40);
+			buttonsPanel.setLayout(null);
+			buttonsPanel.setName("buttonPanel");
+
+	        buttonsPanel.add(getBtnOk(), null);
+	        buttonsPanel.add(getBtnApply(), null);
+	        buttonsPanel.add(getBtnCancel(), null);
+		}
+		return buttonsPanel;
+	}
+
+	public JButton getBtnOk() {
+		if (btnOk == null) {
+	        btnOk = new JButton("ok");
+	        btnOk.setText(PluginServices.getText(this,"ok"));
+	        btnOk.setActionCommand("OK");
+	        btnOk.addActionListener(m_actionListener);
+	        btnOk.setBounds(367, 9, 90, 25);
+		}
+		return btnOk;
+	}
+
+	public JButton getBtnApply() {
+		if (btnApply == null) {
+	        btnApply = new JButton("apply");
+	        btnApply.setText(PluginServices.getText(this,"apply"));
+	        btnApply.setEnabled(false);
+	        btnApply.setActionCommand("APPLY");
+	        btnApply.addActionListener(m_actionListener);
+	        btnApply.setBounds(267, 9, 90, 25);
+		}
+		return btnApply;
+	}
+
+	public JButton getBtnCancel() {
+		if (btnCancel == null) {
+	        btnCancel = new JButton("cancel");
+	        btnCancel.setText(PluginServices.getText(this,"cancel"));
+	        btnCancel.setActionCommand("CANCEL");
+	        btnCancel.addActionListener(m_actionListener);
+	        btnCancel.setBounds(137, 9, 90, 25);
+		}
+		return btnCancel;
+	}
+
+	private class CommandListener implements ActionListener {
+
+		/**
+		 * Creates a new ComandosListener object.
+		 *
+		 * @param lg DOCUMENT ME!
+		 */
+		public CommandListener(WCSPropsDialog tp) {
+			//m_tp = tp;
+		}
+
+		/* (non-Javadoc)
+		 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+		 */
+		public void actionPerformed(ActionEvent e) {
+			if (e.getActionCommand() == "CANCEL") {
+				close();
+			} else {
+				((FLyrWCS) fLayer).getParameters().setFormat(wcsParamsTabbedPane.getFormat());
+				try {
+					((FLyrWCS) fLayer).getParameters().setSRS(wcsParamsTabbedPane.getSRS());
+					((FLyrWCS) fLayer).getParameters().setCoverageName(wcsParamsTabbedPane.getLayerPanel().getSelectedCoverageName());
+
+					//fLayer = wcsParamsTabbedPane.getLayer();
+					FLayers parent = ((FLayer)fLayer).getParentLayer();
+
+					MapControl mapCtrl = null;
+
+					IWindow[] w = PluginServices.getMDIManager().getAllWindows();
+					for (int i = 0; i < w.length; i++) {
+						if (w[i] instanceof org.gvsig.app.project.documents.view.gui.AbstractViewPanel) {
+							MapContext mapContext = ((org.gvsig.app.project.documents.view.gui.AbstractViewPanel)w[i]).getMapControl().getMapContext();
+							if(mapContext == fLayer.getMapContext())
+								mapCtrl = ((org.gvsig.app.project.documents.view.gui.AbstractViewPanel)w[i]).getMapControl();
+						}
+					} 
+
+					if (parent != null) {
+						FLayer layer = wcsParamsTabbedPane.getLayer();
+						if(layer == null)
+							return;
+						mapCtrl.getMapContext().getLayers().
+						replaceLayer(fLayer.getName(), layer);
+					} else {
+						mapCtrl.getMapContext().getLayers().replaceLayer(fLayer.getName(), wcsParamsTabbedPane.getLayer());
+					}
+					//mapCtrl.getMapContext().getLayers().addLayer( fLayer );
+					mapCtrl.getMapContext().invalidate();
+					applied = true;
+					getBtnApply().setEnabled(!applied);
+					
+					if (e.getActionCommand() == "OK") {
+						close();
+					}
+				} catch (ConnectionErrorLayerException e1) {
+					logger.info("", e1);
+				} catch (DriverLayerException e1) {
+					logger.info("", e1);
+				} catch (LegendLayerException e1) {
+					logger.info("", e1);
+				} catch (NameLayerException e1) {
+					logger.info("", e1);
+				} catch (ProjectionLayerException e1) {
+					logger.info("", e1);
+				} catch (TypeLayerException e1) {
+					logger.info("", e1);
+				} catch (UnsupportedVersionLayerException e1) {
+					logger.info("", e1);
+				} catch (URLLayerException e1) {
+					logger.info("", e1);
+				} catch (LoadLayerException e1) {
+					logger.info("", e1);
+				} catch (InitializeException e1) {
+					logger.info("", e1);
+				}
+			}
+		}
+	}
+    /**
+     * Merge two FLayers in one
+     * @param group1
+     * @param group2
+     * @return
+     */
+    @SuppressWarnings("unused")
+	private FLayers mergeFLayers(FLayers group1, FLayers group2) {
+    	//FLayers agrupation = new FLayers(group1.getFMap(), group1.getParentLayer());
+    	FLayer layer;
+    	for(int i = 0; i < group2.getLayersCount(); i++) {
+    		layer = group2.getLayer( i );
+    		if(group1.getLayer( layer.getName()) == null ) {
+    			group1.addLayer( layer );
+    		}
+    	}
+
+    	return group1;
+    }
+
+
+
+	public WindowInfo getWindowInfo() {
+		if (m_ViewInfo==null){
+			m_ViewInfo=new WindowInfo(WindowInfo.MODALDIALOG);
+			m_ViewInfo.setTitle(PluginServices.getText(this,"fit_WCS_layer"));
+	        m_ViewInfo.setWidth(wcsParamsTabbedPane.getWidth()+10);
+	        m_ViewInfo.setHeight(wcsParamsTabbedPane.getHeight()+40);
+
+		}
+		return m_ViewInfo;
+	}
+
+	public void close() {
+		PluginServices.getMDIManager().closeWindow(this);
+	}
+
+
+	public Object getWindowProfile() {
+		return WindowInfo.DIALOG_PROFILE;
+	}
+
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/dialog/WCSPropsDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/TimePanel.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/TimePanel.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/TimePanel.java	(revision 6982)
@@ -0,0 +1,290 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+ 
+package org.gvsig.raster.wcs.app.wcsclient.gui.panel;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.util.ArrayList;
+
+import javax.swing.JButton;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.andami.PluginServices;
+
+
+/**
+ * Time Panel
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class TimePanel extends JPanel {
+	private static final long   serialVersionUID   = 1L;
+	private JList               lstSelectedTimes   = null;
+	private JList               lstTimes           = null;
+	private JScrollPane         jScrollPane4       = null;
+	private JButton             btnDelTime         = null;
+	private JButton             btnAddTime         = null;
+	private JScrollPane         jScrollPane3       = null;
+	private WCSParamsPanel      parent             = null;
+	private JPanel              buttonsPanel       = null;
+	
+	public TimePanel() {
+		init();
+	}
+	
+	public void init() {
+		setLayout(new GridBagLayout());
+		setBorder(javax.swing.BorderFactory.createTitledBorder(
+				null, PluginServices.getText(this, "seleccionar_tiempo"),
+				javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+				javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+		GridBagConstraints gbc = new GridBagConstraints();
+		gbc.fill = GridBagConstraints.BOTH;
+		gbc.weightx = 1;
+		gbc.weighty = 1;
+		
+		gbc.gridx = 0;
+		add(getJScrollPane3(), gbc);
+		
+		gbc.gridx = 2;
+		add(getJScrollPane4(), gbc);
+		
+		gbc.gridx = 1;
+		gbc.fill = GridBagConstraints.VERTICAL;
+		gbc.weightx = 0;
+		gbc.weighty = 1;
+		add(getButtonsPanel(), gbc);
+	}
+	
+	/**
+	 * This method initializes jScrollPane3
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane3() {
+		if (jScrollPane3 == null) {
+			jScrollPane3 = new JScrollPane();
+			jScrollPane3.setViewportView(getLstTimes());
+		}
+		return jScrollPane3;
+	}
+	
+	/**
+	 * This method initializes jScrollPane4
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane4() {
+		if (jScrollPane4 == null) {
+			jScrollPane4 = new JScrollPane();
+			jScrollPane4.setViewportView(getLstSelectedTimes());
+		}
+		return jScrollPane4;
+	}
+	
+	/**
+	 * Sets the parent panel
+	 * @param parent
+	 */
+	public void setWCSParamsPanel(WCSParamsPanel parent) {
+		this.parent = parent;
+	}
+	
+	private JPanel getButtonsPanel() {
+		if(buttonsPanel == null) {
+			buttonsPanel = new JPanel();
+			buttonsPanel.setLayout(new GridBagLayout());
+			GridBagConstraints gbc = new GridBagConstraints();
+			gbc.insets = new Insets(0, 2, 0, 2);
+			gbc.fill = GridBagConstraints.VERTICAL;
+			gbc.weighty = 1;
+			
+			gbc.gridy = 0;
+			buttonsPanel.add(new JPanel(), gbc);
+			gbc.gridy = 3;
+			buttonsPanel.add(new JPanel(), gbc);
+			
+			gbc.fill = GridBagConstraints.NONE;
+			gbc.weighty = 0;
+			
+			gbc.gridy = 1;
+			buttonsPanel.add(getBtnAddTime(), gbc);
+			gbc.gridy = 2;
+			buttonsPanel.add(getBtnDelTime(), gbc);
+		}
+		return buttonsPanel;
+	}
+	
+	/**
+	 * This method initializes jButton2
+	 */
+	public JButton getBtnAddTime() {
+		if (btnAddTime == null) {
+			btnAddTime = new JButton();
+			btnAddTime.setPreferredSize(new Dimension(40, 40));
+			btnAddTime.setSize(new Dimension(40, 40));
+			btnAddTime.setText(">");
+			btnAddTime.addActionListener(
+				new java.awt.event.ActionListener() {
+					public void actionPerformed(java.awt.event.ActionEvent e) {
+						addTime();
+					}
+				});
+		}
+		return btnAddTime;
+	}
+	
+	/**
+	 * This method initializes btnDelTemps
+	 *
+	 * @return org.gvsig.gui.beans.swing.JButton
+	 */
+	public JButton getBtnDelTime() {
+		if (btnDelTime == null) {
+			btnDelTime = new JButton();
+			btnDelTime.setPreferredSize(new Dimension(40, 40));
+			btnDelTime.setSize(new Dimension(40, 40));
+			btnDelTime.setText("<");
+			btnDelTime.addActionListener(
+				new java.awt.event.ActionListener() {
+					public void actionPerformed(java.awt.event.ActionEvent e) {
+						delTime();
+					}
+				});
+		}
+		return btnDelTime;
+	}
+	
+	
+	/**
+	 * This method initializes lstSelectedTimes
+	 *
+	 * @return javax.swing.JList
+	 */
+	public JList getLstSelectedTimes() {
+		if (lstSelectedTimes == null) {
+			lstSelectedTimes = new JList();
+			lstSelectedTimes.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+				public void valueChanged(javax.swing.event.ListSelectionEvent e) {
+					parent.fireWizardComplete(parent.isCorrectlyConfigured());
+				}
+			});
+		}
+		return lstSelectedTimes;
+	}
+	
+	/**
+	 * Returns the time positions or null if none.
+	 * @return String
+	 */
+	public String getTime() {
+		String[] ss = new String[getLstSelectedTimes().getModel().getSize()];
+		for (int i = 0; i < ss.length; i++) {
+			ss[i] = (String) getLstSelectedTimes().getModel().getElementAt(i);
+		}
+		String s = null;
+		if (ss.length > 0){
+			s = ss[0];
+			for (int i = 1; i < ss.length; i++) {
+				s += ","+ ss[i];
+			}
+		}
+		System.out.println(s);
+		return s;
+	}
+	
+	/**
+	 * This method initializes lstTemps
+	 *
+	 * @return javax.swing.JList
+	 */
+	public JList getLstTimes() {
+		if (lstTimes == null) {
+			lstTimes = new JList();
+		}
+		return lstTimes;
+	}
+	
+	/**
+	 * Adds the selected items from the time list to the selected times list.
+	 */
+	@SuppressWarnings("unchecked")
+	public void addTime() {
+		ArrayList times = new ArrayList();
+		for (int i = 0; i < getLstSelectedTimes()
+				.getModel().getSize(); i++) {
+			times.add(getLstSelectedTimes().getModel().getElementAt(i));
+		}
+
+		Object[] obj = getLstTimes().getSelectedValues();
+		for (int i = 0; i < obj.length; i++) {
+			if (!times.contains(obj[i])) {
+				times.add(obj[i]);
+			}
+		}
+		getLstSelectedTimes()
+				.setListData(times.toArray());
+		parent.fireWizardComplete(parent.isCorrectlyConfigured());
+	}
+
+	/**
+	 * Removes the selected items from the selected times list.
+	 */
+	@SuppressWarnings("unchecked")
+	public void delTime() {
+		ArrayList tiempos = new ArrayList();
+		Object[] obj = getLstSelectedTimes()
+				.getSelectedValues();
+		for (int i = 0; i < getLstSelectedTimes().getModel().getSize(); i++) {
+			tiempos.add(getLstSelectedTimes().getModel().getElementAt(i));
+		}
+
+		for (int j = 0; j < obj.length; j++) {
+			if (tiempos.contains(obj[j])) {
+				tiempos.remove(obj[j]);
+			}
+		}
+		obj = new Object[tiempos.size()];
+		for (int i = 0; i < obj.length; i++) {
+			obj[i] = tiempos.get(i);
+		}
+		getLstSelectedTimes().setListData(tiempos.toArray());
+		parent.fireWizardComplete(parent.isCorrectlyConfigured());
+	}
+	
+	/**
+	 * True if the TIME parameter is required, else false.
+	 *
+	 * True si se requiere especificar una posici�n para el tiempo.
+	 * (jo crec que a�� no val per a res, per� per si de cas la tinc)
+	 *
+	 * @return
+	 */
+	public boolean timeRequired() {
+		return getLstTimes().getModel().getSize() > 0;
+	}
+}
+

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/TimePanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/ParameterPanel.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/ParameterPanel.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/ParameterPanel.java	(revision 6982)
@@ -0,0 +1,202 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+ 
+package org.gvsig.raster.wcs.app.wcsclient.gui.panel;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JComboBox;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.gui.beans.controls.dnd.JDnDList;
+import org.gvsig.gui.beans.controls.dnd.JDnDListModel;
+import org.gvsig.raster.wcs.io.FMapWCSParameter;
+
+
+/**
+ * Parameter Panel
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class ParameterPanel extends JPanel {
+	private static final long serialVersionUID = 1L;
+	private JComboBox cmbParam = null;
+	private JDnDList lstParamValues = null;
+	private JScrollPane jScrollPane5 = null;
+	private WCSParamsPanel parent = null;
+	
+	public ParameterPanel() {
+		init();
+	}
+	
+	/**
+	 * Sets the parent panel
+	 * @param parent
+	 */
+	public void setWCSParamsPanel(WCSParamsPanel parent) {
+		this.parent = parent;
+	}
+	
+	public void init() {
+		setLayout(new GridBagLayout());
+		setBorder(javax.swing.BorderFactory.createTitledBorder(
+				null, PluginServices.getText(this, "seleccionar_parametros"),
+				javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+				javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+		
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		
+		gridBagConstraints1.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints1.anchor = GridBagConstraints.NORTH;
+		gridBagConstraints1.weightx = 1.0;
+		gridBagConstraints1.insets = new java.awt.Insets(2, 2, 2, 2);
+		gridBagConstraints1.gridx = 0;
+		add(getCmbParam(), gridBagConstraints1);
+		
+		gridBagConstraints1.fill = GridBagConstraints.BOTH;
+		gridBagConstraints1.anchor = GridBagConstraints.CENTER;
+		gridBagConstraints1.weightx = 1.0;
+		gridBagConstraints1.weighty = 1.0;
+		gridBagConstraints1.insets = new java.awt.Insets(2, 2, 2, 2);
+		gridBagConstraints1.gridx = 1;
+		add(getJScrollPane5(), gridBagConstraints1);
+	}
+	
+	/**
+	 * This method initializes cmbParam
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	public JComboBox getCmbParam() {
+		if (cmbParam == null) {
+			cmbParam = new JComboBox();
+			cmbParam.setEditable(false);
+			cmbParam.addItemListener(new java.awt.event.ItemListener() {
+				public void itemStateChanged(java.awt.event.ItemEvent e) {
+					FMapWCSParameter p = (FMapWCSParameter) cmbParam.getSelectedItem();
+					if (p!=null) {
+						getSingleParamValuesList().setListData(p.getValueList().toArray());
+					}
+					parent.fireWizardComplete(parent.isCorrectlyConfigured());
+				}
+			});
+		}
+		return cmbParam;
+	}
+	
+	/**
+	 * This method initializes jScrollPane5
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	public JScrollPane getJScrollPane5() {
+		if (jScrollPane5 == null) {
+			jScrollPane5 = new JScrollPane();
+			jScrollPane5.setViewportView(getSingleParamValuesList());
+		}
+		return jScrollPane5;
+	}
+	
+	/**
+	 * This method initializes lstParamValues
+	 *
+	 * @return javax.swing.JList
+	 */
+	public JDnDList getSingleParamValuesList() {
+		if (lstParamValues == null) {
+			lstParamValues = new JDnDList();
+			lstParamValues.setModel(new JDnDListModel());
+			lstParamValues.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+			lstParamValues.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+				public void valueChanged(javax.swing.event.ListSelectionEvent e) {
+					parent.fireWizardComplete(parent.isCorrectlyConfigured());
+				}
+			});
+		}
+		return lstParamValues;
+	}
+	
+	/**
+	 * Returns the parameter's name's index within the cmbBox.
+	 *
+	 * Devuelve la posicion que ocupa el nombre dle par�metro en el comboBox
+	 * de par�metros
+	 *
+	 * @param nParam
+	 * @return The index if it exists, -1 if it not exists.
+	 */
+	public int getParamIndex(String nParam) {
+		for (int i = 0; i < getCmbParam().getModel().getSize(); i++) {
+			if (nParam.equals(((FMapWCSParameter)getCmbParam().getItemAt(i)).getName())) {
+				return i;
+			}
+		}
+		return -1;
+	}
+	
+	/**
+	 * Returns the position for the parameter's value within the parameter
+	 * values list.
+	 *
+	 * Devuelve la posicion que ocupa el valor para parametro
+	 * en la lista de valores para par�metro
+	 *
+	 * @param valor
+	 * @return The index if it exists, -1 if it not exists.
+	 */
+	public int getValueIndex(String valor) {
+		for (int i = 0; i < getSingleParamValuesList().getModel().getSize(); i++){
+			if (valor.equals(getSingleParamValuesList().getModel().getElementAt(i))) {
+				return i;
+			}
+		}
+		return -1;
+	}
+	
+	/**
+	 * Extracts the parameter query string.
+	 * @return
+	 */
+	public String getParameterString() {
+		FMapWCSParameter p = (FMapWCSParameter) getCmbParam().getSelectedItem();
+		if (p == null) {
+			return null;
+		}
+		// TODO missing intervals!!!
+		if (p.getType() == FMapWCSParameter.VALUE_LIST) {
+			Object[] v = getSingleParamValuesList().getSelectedValues();
+			/*if(v.length == 1)
+				return p.getName() + "=" + (String) v[0];*/
+			if (p != null && v.length > 0) {
+				String s = p.getName() + "=" + (String) v[0];
+				for (int i = 1; i < v.length; i++) {
+					s += "," + v[i];
+				}
+				return s;
+			}
+		}
+		return null;
+	} 
+}
+

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/ParameterPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/WCSParamsPanel.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/WCSParamsPanel.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/WCSParamsPanel.java	(revision 6982)
@@ -0,0 +1,613 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+
+package org.gvsig.raster.wcs.app.wcsclient.gui.panel;
+
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.geom.Rectangle2D;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.prefs.Preferences;
+
+import javax.swing.JOptionPane;
+import javax.swing.JTabbedPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.gui.WizardPanel;
+import org.gvsig.app.gui.wizards.WizardListenerSupport;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
+import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.raster.wcs.app.wcsclient.layer.FLyrWCS;
+import org.gvsig.raster.wcs.io.FMapWCSParameter;
+import org.gvsig.raster.wcs.io.WCSDataParameters;
+import org.gvsig.raster.wcs.io.WCSLayerNode;
+import org.gvsig.raster.wcs.io.WCSServerExplorer;
+
+
+/**
+ * This class implements the map option panel.
+ *
+ * It includes a set of Listeners that implement some control rules which
+ * refresh the component values that depends on those selected in the other
+ * components to avoid to choose an invalid set of options. It also includes a
+ * method (isCorrectlyConfigured()) that checks if the current set of values is
+ * enough to correctly launch a GetMap request.
+ *
+ * The information is obtained from a WCSWizardDataSource object.
+ *
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ *
+ */
+public class WCSParamsPanel extends WizardPanel {
+	private static final long      serialVersionUID   = 1L;
+	public	static Preferences     fPrefs             = Preferences.userRoot().node( "gvsig.wcs-wizard" );
+	protected WCSServerExplorer    explorer           = null;
+	private LayerPanel             layerPanel         = null;
+	private InfoPanel              infoPanel          = null;
+	private FormatPanel            formatsPanel       = null;
+	private TimePanel              timesPanel         = null;
+	private ParameterPanel         parameterPanel     = null;
+	private int                    indTime;
+	private int                    indParameter;
+	private WizardListenerSupport  listenerSupport;
+	private JTabbedPane            jTabbedPane        = null;
+	private boolean                lastCached         = false;
+
+	public WCSParamsPanel() {
+		super();
+		initialize();
+	}
+
+	/**
+	 * This method initializes panelPage2
+	 *
+	 * @return Panel
+	 */
+	private void initialize() {
+		this.setLayout(null);
+		this.setVisible(false);
+		this.setBounds(0, 0, 510, 427);
+		this.add(getJTabbedPane(), null);
+	}
+
+	/**
+	 * Fires a notification to this wizard listeners telling them if the
+	 * configuration is fair enough to send a GetMap request.
+	 *
+	 * @param b
+	 */
+	public void fireWizardComplete(boolean b) {
+		listenerSupport.callStateChanged(b);
+		callStateChanged(b);
+	}
+
+	/**
+	 * WCSWizard doesn't have a JCheckBox for selecting with or without cache.
+	 *
+	 * @return
+	 * @throws LoadLayerException
+	 */
+	public FLayer getLayer() throws InitializeException {
+		return getLayer(lastCached);
+	}
+
+	@SuppressWarnings("unchecked")
+	public FLayer getLayer(boolean cached) throws InitializeException {
+		lastCached = cached;
+		FLyrWCS layer = new FLyrWCS();
+		WCSDataParameters par = (WCSDataParameters)explorer.getStoredParameters();
+		DataStoreParameters parameters = par;
+
+		if(cached) {
+			DataManager manager = DALLocator.getDataManager();
+			TileDataParameters tileParams = null;
+			try {
+				tileParams = (TileDataParameters) manager.createStoreParameters("Tile Store");
+			} catch (ProviderNotRegisteredException e) {
+				throw new InitializeException(e.getMessage(), e);
+			}
+			tileParams.setDataParameters(par);
+			parameters = tileParams;
+		}
+
+		String host = explorer.getHost();
+		URI hostURI;
+        try {
+            hostURI = new URI(host);
+        } catch (URISyntaxException e1) {
+            throw new InitializeException(e1);
+        }
+		par.setURI(hostURI);
+		par.setSRS(getSRS());
+		par.setFormat(getFormat());
+		par.setCoverageName(getLayerPanel().getSelectedCoverageName());
+		par.setExtent(getExtent());
+		par.setTime(getTimePanel().getTime());
+		par.setParameter(getParameterPanel().getParameterString());
+		String cName = getLayerPanel().getSelectedCoverageName();
+		WCSLayerNode lNode = explorer.getCoverageByName(cName);
+		par.setMaxResolution(lNode.getMaxRes());
+		par.setOnlineResources(explorer.getOnlineResources());
+
+		try {
+			layer.setParameters(parameters);
+			layer.setExplorer(explorer);
+			layer.setFullExtent(getExtent());
+			layer.setName(getLayerName());
+		} catch (InitializeException e) {
+			String msg = getDriverExceptionMessage(e);
+			if(msg != null && !msg.equals("")) {
+				JOptionPane.showMessageDialog(this, msg, Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
+				return null;
+			} else
+				throw e;
+		}
+		return layer;
+	}
+
+	/**
+	 * Gets the <code>RasterDriverException</code> message. The message
+	 * of this exception is returned by the server
+	 * @param e
+	 * @return
+	 */
+	private String getDriverExceptionMessage(InitializeException e) {
+		Throwable ex = e;
+		final int MAX_DEEP = 10;
+		int deep = 0;
+		while(deep < MAX_DEEP) {
+			Throwable t = null;
+			if(ex instanceof RasterDriverException) {
+				return ex.getMessage();
+			} else if(ex instanceof InitializeException) {
+				t = ex.getCause();
+			} else if(ex instanceof InvocationTargetException) {
+				t = ((InvocationTargetException)ex).getTargetException();
+			}
+			if(t == null)
+				return null;
+			else
+				ex = t;
+			deep++;
+		}
+		return null;
+	}
+
+	/**
+	 * Refreshes the content shown by this.
+	 */
+	@SuppressWarnings("unchecked")
+	public void refreshData(WCSDataParameters par) {
+		String coverageName = getLayerPanel().getSelectedInListCoverageName();
+		if(coverageName == null && par != null) {
+			coverageName = par.getCoverageName();
+			//coverageName = getLayerPanel().getNameByTitle(coverageName);
+		}
+		cleanupWizard();
+		if (coverageName != null) {
+			WCSLayerNode lyr = explorer.getCoverageByName(coverageName);
+			getLayerPanel().getTxtName().setText(lyr.getTitle());
+
+			// CRS
+			getFormatsPanel().getLstCRSs().clearSelection();
+			getFormatsPanel().getLstCRSs().setListData(lyr.getSRSs().toArray());
+
+			// Formats
+			getFormatsPanel().getLstFormats().clearSelection();
+			getFormatsPanel().getLstFormats().setListData(lyr.getFormats().toArray());
+
+			// InterpolationMethods
+			boolean b = lyr.getInterpolationMethods() != null;
+			getFormatsPanel().getCmbInterpolationMethods().removeAllItems();
+			if (b) {
+				ArrayList im = lyr.getInterpolationMethods();
+				for (int i = 0; i < im.size(); i++) {
+					getFormatsPanel().getCmbInterpolationMethods().addItem(im.get(i));
+				}
+			}
+			getFormatsPanel().getChkUseInterpolationMethod().setEnabled(b);
+			getFormatsPanel().getCmbInterpolationMethods().setEnabled(b);
+
+			// Time
+			getTimePanel().getLstTimes().removeAll();
+			ArrayList list = lyr.getTimePositions();
+			b = !(list == null || list.isEmpty());
+			if (b) {
+				getTimePanel().getLstTimes().setListData(list.toArray());
+			}
+			jTabbedPane.setEnabledAt(indTime, b);
+
+			// Parameters
+			getParameterPanel().getCmbParam().removeAllItems();
+			list = lyr.getParameterList();
+			b = !(list == null || list.isEmpty());
+			if (b) {
+				for (int i = 0; i < list.size(); i++) {
+					getParameterPanel().getCmbParam().addItem(list.get(i));
+				}
+				getParameterPanel().getSingleParamValuesList().setListData(
+						((FMapWCSParameter) getParameterPanel().getCmbParam().getSelectedItem()).getValueList().toArray()
+						);
+			}
+			jTabbedPane.setEnabledAt(indParameter, b);
+			fireWizardComplete(isCorrectlyConfigured());
+		}
+	}
+
+	/**
+	 * Cleans up the wizard's components but the server's layers list.
+	 *
+	 * Limpia todos los componentes del wizard excepto la lista de capas del
+	 * servidor.
+	 */
+	public void cleanupWizard() {
+		Object[] nada = new Object[0];
+
+		getFormatsPanel().getLstCRSs().clearSelection();
+		getFormatsPanel().getLstCRSs().setListData(nada);
+
+		getFormatsPanel().getLstFormats().clearSelection();
+		getFormatsPanel().getLstFormats().setListData(nada);
+
+		getTimePanel().getLstTimes().clearSelection();
+		getTimePanel().getLstTimes().setListData(nada);
+
+		getTimePanel().getLstSelectedTimes().clearSelection();
+		getTimePanel().getLstSelectedTimes().setListData(nada);
+
+		getParameterPanel().getCmbParam().removeAllItems();
+		getParameterPanel().getSingleParamValuesList().setVisible(true);
+
+		getParameterPanel().getSingleParamValuesList().clearSelection();
+		getParameterPanel().getSingleParamValuesList().setListData(nada);
+	}
+
+	/**
+	 * Refreshes the info tab
+	 */
+	public void refreshInfo() {
+		FMapWCSParameter p = (FMapWCSParameter) getParameterPanel().getCmbParam().getSelectedItem();
+		String pString = (p != null && getParameterPanel().getParameterString() != null) ? p.toString() + "=" + getParameterPanel().getParameterString().split("=")[1] : null;
+		infoPanel.refresh(explorer,
+				(WCSLayerNode) getLayerPanel().getLstCoverages().getSelectedValue(),
+				getTimePanel().getTime(),
+				getFormat(),
+				getSRS(),
+				pString);
+	}
+
+
+	public void setListenerSupport(WizardListenerSupport support) {
+		listenerSupport = support;
+	}
+
+	public void setWizardData(WCSServerExplorer data) {
+		this.explorer = data;
+		getLayerPanel().getLstCoverages().setListData(data.getCoverageList());
+		//((JDnDListModel) getLstSelectedLayers().getModel()).clear();
+		//getLstSelectedLayers().repaint();
+		//getLstFormats().setModel(new FormatListModel(this.explorer.getFormats()));
+		//getTreeLayers().setModel(new LayerTreeModel(this.explorer.getLayerTree()));
+		refreshInfo();
+	}
+
+	/**
+	 * This method initializes jTabbedPane
+	 *
+	 * @return TabbedPane
+	 */
+	public JTabbedPane getJTabbedPane() {
+		if (jTabbedPane == null) {
+			jTabbedPane = new JTabbedPane();
+			jTabbedPane.setBounds(4, 4, 502, 415);
+			InfoPanel ip = getInfoPanel();
+			ip.addFocusListener(new FocusListener() {
+				public void focusGained(FocusEvent e) {
+					refreshInfo();
+				}
+
+				public void focusLost(FocusEvent e) {
+				}
+			});
+
+			jTabbedPane.addTab(PluginServices.getText(this, "info"), null, ip, null);
+			LayerPanel lp = getLayerPanel();
+			lp.setWCSParamsPanel(this);
+			jTabbedPane.addTab(PluginServices.getText(this, "coverage"), null, lp, null);
+			FormatPanel fp = getFormatsPanel();
+			fp.setWCSParamsPanel(this);
+			jTabbedPane.addTab(PluginServices.getText(this, "format"), null, fp, null);
+			TimePanel tp = getTimePanel();
+			tp.setWCSParamsPanel(this);
+			jTabbedPane.addTab(PluginServices.getText(this, "time"), null, tp, null);
+			indTime = jTabbedPane.getTabCount() - 1;
+			jTabbedPane.setEnabledAt(indTime, false);
+			ParameterPanel pp = getParameterPanel();
+			pp.setWCSParamsPanel(this);
+			jTabbedPane.addTab(PluginServices.getText(this, "parameters"), null, pp, null);
+			indParameter = jTabbedPane.getTabCount() - 1;
+			jTabbedPane.setEnabledAt(indParameter, false);
+		}
+		return jTabbedPane;
+	}
+
+
+	/**
+	 * This method initializes InfoPanel
+	 *
+	 * @return Panel
+	 */
+	public InfoPanel getInfoPanel() {
+		if (infoPanel == null) {
+			infoPanel = new InfoPanel();
+
+		}
+		return infoPanel;
+	}
+
+	/**
+	 * This method initializes TimePanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	public TimePanel getTimePanel() {
+		if (timesPanel == null) {
+			timesPanel = new TimePanel();
+		}
+		return timesPanel;
+	}
+
+	/**
+	 * This method initializes FormatPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	public FormatPanel getFormatsPanel() {
+		if (formatsPanel == null) {
+			formatsPanel = new FormatPanel();
+		}
+		return formatsPanel;
+	}
+
+	/**
+	 * This method initializes ParameterPanel
+	 * @return javax.swing.JPanel
+	 */
+	public ParameterPanel getParameterPanel() {
+		if (parameterPanel == null) {
+			parameterPanel = new ParameterPanel();
+		}
+		return parameterPanel;
+	}
+
+	/**
+	 * This method initializes LayerPanel
+	 * @return javax.swing.JPanel
+	 */
+	public LayerPanel getLayerPanel() {
+		if (layerPanel == null) {
+			layerPanel = new LayerPanel();
+		}
+		return layerPanel;
+	}
+
+	/**
+	 * Sets the focus to the tab next to the current one.
+	 *
+	 * Enfoca a la solapa siguiente a la actualmente enfocada del TabbedPane
+	 *
+	 */
+	public void avanzaTab() {
+		int currentPage = currentPage();
+		int nPages = getNumTabs();
+		if (nPages - 1 > currentPage) {
+			getJTabbedPane().setSelectedIndex(nextEnabledPage());
+		}
+	}
+
+	/**
+	 * Sets the focus to the tab previous to the current one.
+	 */
+	public void retrocedeTab() {
+		this.getJTabbedPane().setSelectedIndex(previousEnabledPage());
+
+	}
+
+	/**
+	 * Returns the index of the current tab.
+	 * @return
+	 */
+	public int currentPage() {
+		return getJTabbedPane().getSelectedIndex();
+	}
+
+	/**
+	 * Returns the tab amount that the WCSParamsPanel currently have
+	 * @return int
+	 */
+	public int getNumTabs() {
+		return getJTabbedPane().getTabCount();
+	}
+
+	/**
+	 * <p>
+	 * Returns the index of the previous enabled tab.
+	 * </p>
+	 *
+	 * @return The index, or -1 if there is no one.
+	 */
+	public int previousEnabledPage() {
+		int currentPage = currentPage();
+		int j = 0;
+		if (currentPage == 0) {
+			j = -1;
+		}
+		for (int i = currentPage - 1; i > -1; i--) {
+			if (getJTabbedPane().isEnabledAt(i)) {
+				j = i;
+				break;
+			}
+		}
+		return j;
+	}
+
+	/**
+	 * <p>
+	 * Returns the previous of the previous enabled tab.
+	 * </p>
+	 * @return The index, or -1 if there is no one.
+	 */
+	public int nextEnabledPage() {
+		int currentPage = currentPage();
+		int nPages = getNumTabs();
+		if (currentPage == nPages) {
+			return -1;
+		}
+		for (int i = currentPage + 1; i < nPages; i++) {
+			if (getJTabbedPane().isEnabledAt(i)) {
+				return i;
+			}
+		}
+		return -1;
+	}
+
+	public void initWizard() {
+	}
+
+	public void execute() {
+	}
+
+	@Override
+	public DataStoreParameters[] getParameters() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public void close() {
+		// Nothing to do
+	}
+
+	public WCSServerExplorer getExplorer() {
+		return explorer;
+	}
+
+	/**
+	 * Returns the extent of the currently selected coverage for the currently
+	 * selected SRS.
+	 *
+	 * @return Rectangle2D
+	 */
+	public Rectangle2D getExtent() {
+		String cName = getLayerPanel().getSelectedCoverageName();
+		if (cName!=null) {
+			return explorer.getCoverageByName(cName).getExtent(getSRS());
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the name of the selected coverage.
+	 *
+	 * @return String
+	 */
+	public String getLayerName() {
+		return getLayerPanel().getTxtName().getText();
+	}
+
+	/**
+	 * Returns the selected CRS.
+	 *
+	 * @return String
+	 */
+	public String getSRS() {
+		return (String) getFormatsPanel().getLstCRSs().getSelectedValue();
+	}
+
+	/**
+	 * Returns the selected format.
+	 *
+	 * @return String
+	 */
+	public String getFormat() {
+		return (String) getFormatsPanel().getLstFormats().getSelectedValue();
+	}
+
+	/**
+	 * Verifies that the selected parameters are enough to request the coverage
+	 * to the server.
+	 *
+	 * Comprueba que los par�metros seleccionados son suficientes para pedir la
+	 * cobertura al servidor.
+	 *
+	 * @return boolean
+	 */
+	public boolean isCorrectlyConfigured() {
+
+		if (getLayerPanel().getSelectedCoverageName() == null) {
+			return false;
+		}
+		/*
+		 * Seg�n el est�ndar WCS, si se especifica bounding box el par�metro TIME
+		 * no es necesario. �ste es el caso de gvSIG, que siempre especifica BBOX
+		 * As� que, en teor�a, no deber�amos comprobar si se ha seleccionado algo
+		 * o no. Pero en las pruebas, el servidor que us�bamos respond�a con una
+		 * cobertura en blanco (negro) as� que se ha optado por evitar que se pueda
+		 * consultar sin ninguna posici�n para el tiempo (siempre que la cobertura
+		 * especifique posiciones para el tiempo).
+		 *
+		 * En cualquier caso con comentarizar la l�nea basta.
+		 */
+		if (getTimePanel().timeRequired() && getTimePanel().getTime()==null) {
+			return false;
+		}
+
+		/*if (getParameterPanel().getCmbParam().getSelectedItem()!=null){
+			if (parameterType == SINGLE_VALUE && getParameterPanel().getParameterString()==null) {
+				return false;
+			}
+			if (parameterType == INTERVAL) {
+			}
+		}*/
+
+		if (getSRS() == null) {
+			return false;
+		}
+
+		if (getFormat() == null) {
+			return false;
+		}
+
+		return true;
+	}
+} // @jve:decl-index=0:visual-constraint="10,10"

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/WCSParamsPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/FormatPanel.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/FormatPanel.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/FormatPanel.java	(revision 6982)
@@ -0,0 +1,278 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+ 
+package org.gvsig.raster.wcs.app.wcsclient.gui.panel;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.andami.PluginServices;
+
+
+/**
+ * Format Panel
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class FormatPanel extends JPanel {
+	private static final long serialVersionUID            = 1L;
+	private JPanel            jPanel2                     = null;
+	private JPanel            jPanel3                     = null;
+	private JPanel            jPanel4                     = null;
+	private JScrollPane       jScrollPane1                = null;
+	private JScrollPane       jScrollPane2                = null;
+	private JList             lstCRSs                     = null;
+	private JList             lstFormats                  = null;
+	private JComboBox         cmbInterpolationMethods     = null;
+	private JCheckBox         chkUseInterpolationMethod   = null;
+	private WCSParamsPanel    parent                      = null;
+	
+	public FormatPanel() {
+		init();
+	}
+	
+	/**
+	 * Sets the parent panel
+	 * @param parent
+	 */
+	public void setWCSParamsPanel(WCSParamsPanel parent) {
+		this.parent = parent;
+	}
+	
+	public void init() {
+		setLayout(new GridBagLayout());
+		
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.fill = GridBagConstraints.BOTH;
+		gridBagConstraints1.anchor = GridBagConstraints.CENTER;
+		gridBagConstraints1.weightx = 1.0;
+		gridBagConstraints1.weighty = 1.0;
+		gridBagConstraints1.insets = new java.awt.Insets(2, 2, 2, 2);
+		gridBagConstraints1.gridy = 1;
+		add(getJPanel2(), gridBagConstraints1);
+		
+		gridBagConstraints1.gridy = 0;
+		add(getJPanel3(), gridBagConstraints1);
+	}
+	
+	/**
+	 * This method initializes jScrollPane2
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane2() {
+		if (jScrollPane2 == null) {
+			jScrollPane2 = new JScrollPane();
+			jScrollPane2.setViewportView(getLstCRSs());
+		}
+		return jScrollPane2;
+	}
+	
+	/**
+	 * This method initializes lstCRSs
+	 *
+	 * @return javax.swing.JList
+	 */
+	public JList getLstCRSs() {
+		if (lstCRSs == null) {
+			lstCRSs = new JList();
+			lstCRSs.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+			lstCRSs.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+				public void valueChanged(javax.swing.event.ListSelectionEvent e) {
+					parent.fireWizardComplete(parent.isCorrectlyConfigured());
+				}
+			});
+		}
+		return lstCRSs;
+	}
+	
+	/**
+	 * This method initializes jPanel2
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel2() {
+		if (jPanel2 == null) {
+			jPanel2 = new JPanel(new BorderLayout());
+			jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(
+					null, PluginServices.getText(this, "seleccionar_CRS"),
+					javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+					javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+			jPanel2.add(getJScrollPane2(), BorderLayout.CENTER);
+		}
+		return jPanel2;
+	}
+	
+	/**
+	 * This method initializes jScrollPane1
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane1() {
+		if (jScrollPane1 == null) {
+			jScrollPane1 = new JScrollPane();
+			jScrollPane1.setViewportView(getLstFormats());
+		}
+		return jScrollPane1;
+	}
+	
+	/**
+	 * This method initializes lstFormats
+	 *
+	 * @return javax.swing.JList
+	 */
+	public JList getLstFormats() {
+		if (lstFormats == null) {
+			lstFormats = new JList();
+			lstFormats.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+			lstFormats.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+				public void valueChanged(javax.swing.event.ListSelectionEvent e) {
+					parent.fireWizardComplete(parent.isCorrectlyConfigured());
+				}
+			});
+		}
+		return lstFormats;
+	}
+	
+	/**
+	 * This method initializes jPanel3
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel3() {
+		if (jPanel3 == null) {
+
+			jPanel3 = new JPanel(new GridBagLayout());
+			
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.fill = GridBagConstraints.BOTH;
+			gridBagConstraints1.anchor = GridBagConstraints.CENTER;
+			gridBagConstraints1.weightx = 1.0;
+			gridBagConstraints1.weighty = 1.0;
+			gridBagConstraints1.insets = new java.awt.Insets(2, 2, 2, 2);
+			
+			jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(
+					null, PluginServices.getText(this, "seleccionar_formato"),
+					javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+					javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+			jPanel3.add(getJScrollPane1(), gridBagConstraints1);
+
+			gridBagConstraints1.gridx = 1;
+			jPanel3.add(getJPanel4(), gridBagConstraints1);
+		}
+		return jPanel3;
+	}
+	
+	/**
+	 * This method initializes jPanel3
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel4() {
+		if (jPanel4 == null) {
+			jPanel4 = new JPanel(new GridBagLayout());
+			
+			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+			gridBagConstraints1.fill = GridBagConstraints.HORIZONTAL;
+			gridBagConstraints1.weightx = 1.0;
+			gridBagConstraints1.insets = new java.awt.Insets(2, 2, 2, 2);
+
+			jPanel4.add(getCmbInterpolationMethods(), gridBagConstraints1);
+			gridBagConstraints1.gridy = 1;
+			jPanel4.add(getChkUseInterpolationMethod(), gridBagConstraints1);
+			
+			gridBagConstraints1.fill = GridBagConstraints.BOTH;
+			gridBagConstraints1.weighty = 1.0;
+			gridBagConstraints1.gridy = 2;
+			jPanel4.add(new JPanel(), gridBagConstraints1);
+		}
+		return jPanel4;
+	}
+	
+	/**
+	 * This method initializes jComboBox
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	public JComboBox getCmbInterpolationMethods() {
+		if (cmbInterpolationMethods == null) {
+			cmbInterpolationMethods = new JComboBox();
+			cmbInterpolationMethods.setEnabled(false);
+			cmbInterpolationMethods.setEditable(false);
+		}
+		return cmbInterpolationMethods;
+	}
+	
+	/**
+	 * This method initializes jCheckBox
+	 *
+	 * @return javax.swing.JCheckBox
+	 */
+	public JCheckBox getChkUseInterpolationMethod() {
+		if (chkUseInterpolationMethod == null) {
+			chkUseInterpolationMethod = new JCheckBox();
+			chkUseInterpolationMethod.setText(PluginServices.getText(this, "use_interpolation_method"));
+			chkUseInterpolationMethod.setSelected(false);
+			chkUseInterpolationMethod.setEnabled(false);
+			chkUseInterpolationMethod.addItemListener(new java.awt.event.ItemListener() {
+				public void itemStateChanged(java.awt.event.ItemEvent e) {
+					cmbInterpolationMethods.setEnabled(chkUseInterpolationMethod.isSelected());
+				}
+			});
+		}
+		return chkUseInterpolationMethod;
+	}
+	
+	/**
+	 * Returns the index of the CRS within the CRS list.
+	 * @param crs
+	 * @return The CRS's index if it exists, -1 if it not exists.
+	 */
+	public int getSRSIndex(String crs) {
+		for (int i = 0; i < getLstCRSs().getModel().getSize(); i++){
+			if (crs.equals(getLstCRSs().getModel().getElementAt(i))) {
+				return i;
+			}
+		}
+		return -1;
+	}
+	
+	/**
+	 * Returns the index of the format within the formats list.
+	 * @return The format's index if it exists, -1 if it not exists.
+	 */
+	public int getFormatIndex(String format) {
+		for (int i = 0; i < getLstFormats().getModel().getSize(); i++){
+			if (format.equals(getLstFormats().getModel().getElementAt(i))) {
+				return i;
+			}
+		}
+		return -1;
+	}
+}
+

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/FormatPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/LayerList.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/LayerList.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/LayerList.java	(revision 6982)
@@ -0,0 +1,76 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+ 
+package org.gvsig.raster.wcs.app.wcsclient.gui.panel;
+
+import java.awt.Component;
+import java.awt.Dimension;
+
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JList;
+
+import org.gvsig.gui.beans.controls.dnd.JDnDList;
+import org.gvsig.raster.wcs.io.WCSLayerNode;
+
+
+/**
+ * Class implementing a JList component adapted to the WCSLayerNode
+ * needs (use it as a JList with drag'n'drop capabilities).
+ * 
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class LayerList extends JDnDList {
+	private static final long serialVersionUID = 1L;
+	public boolean showLayerNames = false;
+	private int count = 0; 
+	
+	public LayerList() {
+		super();
+		setCellRenderer(new MyRenderer());
+	}
+	
+	private class MyRenderer extends DefaultListCellRenderer {
+		private static final long serialVersionUID = 1L;
+
+		public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+			super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+			if (value instanceof WCSLayerNode){
+				WCSLayerNode layer = (WCSLayerNode) value;
+                
+                if (!showLayerNames) {
+                	if (layer.getName() != null || layer.getName() == "") {
+                		String text = layer.toString();
+                		text = text.substring(text.indexOf(']')+2, text.length());
+                		setText(text);
+                	}
+                }
+                
+                Dimension sz  = getPreferredSize();
+                sz.setSize((sz.getWidth()+50) - (50*count), sz.getHeight());
+                setPreferredSize(sz);
+                count++;
+            }  
+			return this;
+		}
+	}
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/LayerList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/InfoPanel.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/InfoPanel.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/InfoPanel.java	(revision 6982)
@@ -0,0 +1,239 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+ 
+package org.gvsig.raster.wcs.app.wcsclient.gui.panel;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JEditorPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.raster.wcs.io.WCSLayerNode;
+import org.gvsig.raster.wcs.io.WCSServerExplorer;
+
+
+/**
+ * Service Information Panel
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class InfoPanel extends JPanel {
+	private static final long serialVersionUID = 1L;
+	private final String bgColor0 = "\"#FEEDD6\""; // light salmon
+    private final String bgColor1 = "\"#EAEAEA\""; // light grey
+    //private final String bgColor2 = "\"#F2FEFF\""; // light blue
+    private final String bgColor3 = "\"#FBFFE1\""; // light yellow
+
+    private final String service_title       = PluginServices.getText(this, "service_info");
+    private final String server              = PluginServices.getText(this, "server");
+    private final String server_type         = PluginServices.getText(this, "server_type");
+    private final String server_abstract     = PluginServices.getText(this, "server_abstract");
+    private final String server_title        = PluginServices.getText(this, "server_title");
+    private final String layers_title        = PluginServices.getText(this, "selected_layers");
+    private final String layer_title         = PluginServices.getText(this, "layer_title");
+    private final String layer_abstract      = PluginServices.getText(this, "layer_abstract");
+    private final String selected_parameters = PluginServices.getText(this, "selected_parameters");
+    private final String time_title          = PluginServices.getText(this, "time");
+    private final String format_title        = PluginServices.getText(this, "format");
+    private final String srs_title           = "CRS";
+    private final String properties			 = PluginServices.getText(this, "properties");
+    private final String layer_name			 = PluginServices.getText(this, "name");
+	private JEditorPane editor = null;
+
+
+    /**
+     * Creates a new instance of InfoPanel with double buffer and null layout
+     *
+     */
+	public InfoPanel() {
+        setLayout(new BorderLayout());
+        JScrollPane src = new JScrollPane();
+        src.setViewportView(getEditor());
+        add(src, BorderLayout.CENTER);
+	}
+
+    /**
+     * This method initializes tblInfo
+     *
+     * @return javax.swing.JTable
+     */
+    private JEditorPane getEditor() {
+        if (editor == null) {
+            editor = new JEditorPane();
+            editor.setEditable(false);
+        }
+        return editor;
+    }
+
+
+    /**
+     * Fills the text pane with a data table describing the service and the
+     * selected settings.
+     *
+     * @param WCSWizardData dataSource: connection info
+     * @param WCSLayer layer: the selected layer
+     * @param String time: the time value.
+     * @param String format: the format value
+     * @param String crs: the CRS value
+     * @param String parameters: comma-separated key-value string containing the values for the parameters
+     */
+
+    public void refresh(WCSServerExplorer dataSource, WCSLayerNode layer, String time, String format, String crs, String parameters) {
+
+        String server_text = dataSource.getHost();
+        String server_type_text = dataSource.getServerType();
+        String server_title_text = dataSource.getTitle();
+        String server_abstract_text = dataSource.getAbstract();
+        String font = "Arial";
+
+        if (server_text == null)
+            server_text = "-";
+        if (server_type_text == null)
+            server_type_text = "-";
+        if (server_title_text == null)
+            server_title_text = "-";
+        if (server_abstract_text == null)
+            server_abstract_text = "-";
+
+        if (format == null)
+            format = PluginServices.getText(this, "none_selected");
+        if (crs == null)
+            crs = PluginServices.getText(this, "none_selected");
+
+        String layers_html = "";
+        if (layer!=null) {
+            String layer_name_text = layer.getName();
+            String time_text = (time==null) ? PluginServices.getText(this, "not_available") : time;//((FMapWCSStyle) selectedStyles.get(i)).title;
+            String layer_abstract_text = layer.getDescription();
+            String layer_title_text = layer.getTitle();
+
+            if (layer_name_text ==null)
+            	layer_name_text = "-";
+            if (time_text==null)
+            	time_text = "-";
+            if (layer_abstract_text==null)
+            	layer_abstract_text = "-";
+            if (layer_title_text == null)
+            	layer_title_text = "-";
+            String layer_html =
+            	"  <tr valign=\"top\">" +
+                "     <td bgcolor=\"#D6D6D6\" align=\"right\"><font face=\"Arial\" size=\"3\" align=\"right\"><b>"+layer_name+"</b></font></td>" +
+                "     <td bgcolor="+bgColor0+"><font face=\"Arial\" size=\"3\">"+layer_name_text+"</font></td>" +
+                "  </tr>" +
+                "  <tr valign=\"top\">" +
+                "     <td width=\"119\" height=\"18\" bgcolor=\"#D6D6D6\" align=\"right\"><font face=\"Arial\" size=\"3\"><b>"+layer_title+"</b></font></td>" +
+                "     <td width=\"322\" height=\"18\" bgcolor="+bgColor1+"><font face=\"Arial\" size=\"3\">"+layer_title_text+"</font></td>" +
+                "  </tr>" +
+                "  <tr valign=\"top\">" +
+                "     <td bgcolor=\"#D6D6D6\" align=\"right\"><font face=\"Arial\" size=\"3\" align=\"right\"><b>"+layer_abstract+"</b></font></td>" +
+                "     <td bgcolor="+bgColor0+"><font face=\"Arial\" size=\"3\">"+layer_abstract_text+"</font></td>" +
+                "  </tr>" +
+                "  <tr valign=\"top\">" +
+                "     <td bgcolor=\"#D6D6D6\" align=\"right\"><font face=\"Arial\" size=\"3\" align=\"right\"><b>"+time_title+"</b></font></td>" +
+                "     <td bgcolor="+bgColor1+"><font face=\"Arial\" size=\"3\">"+time_text+"</font></td>" +
+                "  </tr>" +
+                "  <tr>" +
+                "  </tr>";
+            layers_html += layer_html;
+        }
+        if (!layers_html.equals(""))
+            layers_html =
+                "  <tr valign=\"top\" bgcolor=\"#FFFFFF\">" +
+                "    <td width=\"92\" height=\"18\" bgcolor="+bgColor3+" colspan=\"2\"><font face=\""+font+"\" size=\"4\"><b>"+layers_title+"</font></b></td>" +
+                "  </tr>" + layers_html;
+        String parameter_html = "";
+        if (parameters!=null) {
+        	boolean swap = false;
+        	String[] myParameters = parameters.split("&");
+        	for (int i = 0; i < myParameters.length; i++) {
+        		String color = swap ? bgColor0 : bgColor1;
+        		String[] parameter = myParameters[i].split("=");
+        		parameter_html +=
+        			"  <tr valign=\"top\" bgcolor="+color+">" +
+        			"    <td width=\"120\" height=\"18\" bgcolor=\"#D6D6D6\" align=\"right\"><b>"+parameter[0]+"</b></td>" +
+        			"    <td width=\"322\" height=\"18\">"+parameter[1]+"</td>" +
+        			"  </tr>";
+        		swap = !swap;
+        	}
+        	parameter_html +=
+        		"  <tr>" +
+        		"  </tr>";
+        }
+        if (!parameter_html.equals(""))
+        	parameter_html =
+        		"  <tr valign=\"top\">" +
+        		"    <td width=\"92\" height=\"18\" bgcolor="+bgColor3+" colspan=\"2\"><font face=\""+font+"\" size=\"4\"><b>"+selected_parameters+"</font></b></td>" +
+        		"  </tr>" + parameter_html;
+
+        String format_html =
+        	"  <tr valign=\"top\" bgcolor=\"#FFFFFF\">" +
+            "    <td width=\"92\" height=\"18\" bgcolor="+bgColor3+" colspan=\"2\"><font face=\""+font+"\" size=\"4\"><b>"+properties+"</font></b></td>" +
+            "  </tr>" +
+            "  <tr valign=\"top\" bgcolor="+bgColor0+">" +
+            "    <td height=\"18\" bgcolor=\"#D6D6D6\" align=\"right\"><font face=\""+font+"\" size=\"3\"><b>"+format_title+"</b></font></td>" +
+            "    <td><font face=\""+font+"\" size=\"3\"><font face=\""+font+"\" size=\"3\">"+format+"</font></td>" +
+            "  </tr>" +
+            "  <tr valign=\"top\" bgcolor="+bgColor1+">" +
+            "    <td height=\"18\" bgcolor=\"#D6D6D6\" align=\"right\"><font face=\""+font+"\" size=\"3\"><b>"+srs_title+"</font></b></td>" +
+            "    <td><font face=\""+font+"\" size=\"3\">"+crs+"</font></td>" +
+            "  </tr>";
+
+        String html =
+
+            "<html>" +
+            "<body>" +
+            "<table align=\"center\" width=\"437\" height=\"156\" border=\"0\" cellpadding=\"4\" cellspacing=\"4\">" +
+            "  <tr valign=\"top\" bgcolor=\"#FFFFFF\">" +
+            "    <td width=\"92\" height=\"18\" bgcolor="+bgColor3+" colspan=\"2\"><font face=\""+font+"\" size=\"4\"><b>"+service_title+"</font></b></td>" +
+            "  </tr>" +
+            "  <tr valign=\"top\" bgcolor="+bgColor0+">" +
+            "    <td width=\"92\" height=\"18\" bgcolor=\"#D6D6D6\" align=\"right\"><font face=\""+font+"\" size=\"3\"><b>"+server+"</font></b></td>" +
+            "    <td width=\"268\"><font face=\""+font+"\" size=\"3\">"+server_text+"</font></td>" +
+            "  </tr>" +
+            "  <tr valign=\"top\" bgcolor="+bgColor1+">" +
+            "    <td height=\"18\" bgcolor=\"#D6D6D6\" align=\"right\"><font face=\""+font+"\" size=\"3\"><b>"+server_type+"</b></font></td>" +
+            "    <td><font face=\""+font+"\" size=\"3\">"+server_type_text+"</font></td>" +
+            "  </tr>" +
+            "  <tr valign=\"top\" bgcolor="+bgColor0+">" +
+            "    <td height=\"18\" bgcolor=\"#D6D6D6\" align=\"right\"><font face=\""+font+"\" size=\"3\"><b>"+server_title+"</b></font></td>" +
+            "    <td><font face=\""+font+"\" size=\"3\"><font face=\""+font+"\" size=\"3\">"+server_title_text+"</font></td>" +
+            "  </tr>" +
+            "  <tr valign=\"top\" bgcolor="+bgColor1+">" +
+            "    <td height=\"18\" bgcolor=\"#D6D6D6\" align=\"right\"><font face=\""+font+"\" size=\"3\"><b>"+server_abstract+"</font></b></td>" +
+            "    <td><font face=\""+font+"\" size=\"3\">"+server_abstract_text+"</font></td>" +
+            "  </tr>" +
+
+            "  <tr>" +
+            "  </tr>" +
+            layers_html +
+            parameter_html +
+            format_html +
+            "</table>" +
+            "</body>" +
+            "</html>";
+
+        getEditor().setContentType("text/html");
+        getEditor().setText(html);
+    }
+}
+

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/InfoPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/LayerPanel.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/LayerPanel.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/LayerPanel.java	(revision 6982)
@@ -0,0 +1,265 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+ 
+package org.gvsig.raster.wcs.app.wcsclient.gui.panel;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.util.prefs.Preferences;
+
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.raster.wcs.io.WCSLayerNode;
+
+
+/**
+ * Layer Panel
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ */
+public class LayerPanel extends JPanel {
+	private static final long  serialVersionUID = 1L;
+	public	static Preferences fPrefs             = Preferences.userRoot().node( "gvsig.wcs-wizard" );
+	private JPanel             jPanel4            = null;
+	private JPanel             pnlName            = null;
+	private LayerList          lstCoverages       = null;
+	private JScrollPane        jScrollPane        = null;
+	private JTextField         txtName            = null;
+	private JCheckBox          chkExtendedNames   = null;
+	private WCSParamsPanel     parent             = null;
+	
+	public LayerPanel() {
+		init();
+	}
+	
+	public void init() {
+		setLayout(new GridBagLayout());
+		
+		GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
+		gridBagConstraints1.fill = GridBagConstraints.BOTH;
+		gridBagConstraints1.anchor = GridBagConstraints.CENTER;
+		gridBagConstraints1.weightx = 1.0;
+		gridBagConstraints1.weighty = 1.0;
+		gridBagConstraints1.insets = new java.awt.Insets(2, 2, 2, 2);
+		gridBagConstraints1.gridy = 1;
+		add(getJPanel4(), gridBagConstraints1);
+		
+		gridBagConstraints1.fill = GridBagConstraints.HORIZONTAL;
+		gridBagConstraints1.anchor = GridBagConstraints.CENTER;
+		gridBagConstraints1.weightx = 1.0;
+		gridBagConstraints1.weighty = 0;
+		gridBagConstraints1.insets = new java.awt.Insets(2, 2, 2, 2);
+		gridBagConstraints1.gridy = 0;
+		add(getPnlName(), gridBagConstraints1);
+		
+		gridBagConstraints1.gridy = 2;
+		add(getChkExtendedNames(), gridBagConstraints1);
+	}
+	
+	public void setWCSParamsPanel(WCSParamsPanel parent) {
+		this.parent = parent;
+	}
+	
+	/**
+	 * This method initializes chkExtendedNames
+	 *
+	 * @return javax.swing.JCheckBox
+	 */
+	private JCheckBox getChkExtendedNames() {
+		if (chkExtendedNames == null) {
+			chkExtendedNames = new JCheckBox();
+			chkExtendedNames.setText(PluginServices.getText(this, "show_layer_names"));
+			chkExtendedNames.addItemListener(new java.awt.event.ItemListener() {
+				public void itemStateChanged(java.awt.event.ItemEvent e) {
+					boolean b = chkExtendedNames.isSelected();
+					getLstCoverages().showLayerNames = b;
+					getLstCoverages().repaint();
+				}
+			});
+			chkExtendedNames.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					fPrefs.putBoolean("show_layer_names", chkExtendedNames.isSelected());
+				}
+			});
+			chkExtendedNames.setSelected(fPrefs.getBoolean("show_layer_names", false));
+
+		}
+		return chkExtendedNames;
+	}
+	
+	/**
+	 * This method initializes pnlName
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPnlName() {
+		if (pnlName == null) {
+			pnlName = new JPanel(new BorderLayout());
+			pnlName.setBorder(javax.swing.BorderFactory.createTitledBorder(
+					null, PluginServices.getText(this, "nombre_cobertura"),
+					javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+					javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+			pnlName.add(getTxtName(), BorderLayout.CENTER);
+		}
+		return pnlName;
+	}
+	
+	/**
+	 * This method initializes jTextField
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	public JTextField getTxtName() {
+		if (txtName == null) {
+ 			txtName = new JTextField();
+		}
+		return txtName;
+	}
+	
+	/**
+	 * This method initializes jList1
+	 *
+	 * @return javax.swing.JList
+	 */
+	public LayerList getLstCoverages() {
+		if (lstCoverages == null) {
+			lstCoverages = new LayerList();
+			lstCoverages.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+			lstCoverages.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+				public void valueChanged(javax.swing.event.ListSelectionEvent e) {
+					parent.refreshData(null);
+				}
+			});
+		}
+		return lstCoverages;
+	}
+	
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new JScrollPane();
+			jScrollPane.setViewportView(getLstCoverages());
+		}
+		return jScrollPane;
+	}
+	
+	/**
+	 * This method initializes jPanel4
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getJPanel4() {
+		if (jPanel4 == null) {
+			jPanel4 = new JPanel(new BorderLayout());
+			jPanel4.add(getJScrollPane(), BorderLayout.CENTER);
+			jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(
+					null, PluginServices.getText(this, "seleccionar_coberturas"),
+					javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+					javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+		}
+		return jPanel4;
+	}
+	
+	/**
+	 * Returns the index of the coverage within the coverages list
+	 *
+	 * @param coverageName
+	 * @return The coverage's index if it exists, -1 if it not exists.
+	 */
+	public int getCoverageIndex(String coverageName) {
+		for (int i = 0; i < getLstCoverages().getModel().getSize(); i++){
+			if (coverageName.equals(((WCSLayerNode)getLstCoverages().getModel().getElementAt(i)).getName())) {
+				return i;
+			}
+		}
+		return -1;
+	}
+	
+	/**
+	 * Returns the selected coverage name at the server. This is the value to use
+	 * in a GetCoverage request
+	 *
+	 * @return String
+	 */
+	public String getSelectedInListCoverageName() {
+		if (getLstCoverages().getSelectedValue() == null) {
+			return null;
+		}
+		/*if(getTxtName().getText().compareTo("") == 0)
+			return null;
+		
+		for (int i = 0; i < getLstCoverages().getModel().getSize(); i++) {
+			RemoteWCSLayerNode node = (RemoteWCSLayerNode)getLstCoverages().getModel().getElementAt(i);
+			if(node.getTitle().compareTo(getTxtName().getText()) == 0)
+				return node.getName();
+		}
+		return null;
+		*/
+		return ((WCSLayerNode) getLstCoverages().getSelectedValue()).getName();
+	}
+	
+	/**
+	 * Returns the selected coverage name at the server. This is the value to use
+	 * in a GetCoverage request
+	 *
+	 * @return String
+	 */
+	public String getSelectedCoverageName() {
+		if(getTxtName().getText().compareTo("") == 0)
+			return null;
+		
+		for (int i = 0; i < getLstCoverages().getModel().getSize(); i++) {
+			WCSLayerNode node = (WCSLayerNode)getLstCoverages().getModel().getElementAt(i);
+			if(node.getTitle().compareTo(getTxtName().getText()) == 0)
+				return node.getName();
+		}
+		return null;
+	}
+	
+	public String getNameByTitle(String title) {
+		for (int i = 0; i < getLstCoverages().getModel().getSize(); i++) {
+			WCSLayerNode node = (WCSLayerNode)getLstCoverages().getModel().getElementAt(i);
+			if(node.getTitle().compareTo(title) == 0)
+				return node.getName();
+		}
+		return null;
+	}
+	
+	public String getTitleByName(String name) {
+		for (int i = 0; i < getLstCoverages().getModel().getSize(); i++) {
+			WCSLayerNode node = (WCSLayerNode)getLstCoverages().getModel().getElementAt(i);
+			if(node.getName().compareTo(name) == 0)
+				return node.getTitle();
+		}
+		return null;
+	}
+	
+}
+

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/LayerPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/LayerTree.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/LayerTree.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/LayerTree.java	(revision 6982)
@@ -0,0 +1,149 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+ 
+package org.gvsig.raster.wcs.app.wcsclient.gui.panel;
+
+import java.awt.Component;
+
+import javax.swing.JToolTip;
+import javax.swing.JTree;
+import javax.swing.ToolTipManager;
+import javax.swing.tree.DefaultTreeCellRenderer;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.gui.beans.controls.MultiLineToolTip;
+import org.gvsig.raster.wcs.io.WCSLayerNode;
+
+
+/**
+ * LayerTree extends the standard JTree class to allow use custom tooltips.
+ * It is just JTree containing RemoteLayerNode at its nodes.
+ * 
+ * @author jaume
+ *
+ */
+public class LayerTree extends JTree {
+	private static final long serialVersionUID = 1L;
+	public boolean showLayerNames = false;
+	
+	public LayerTree(){
+        super();
+        ToolTipManager.sharedInstance().registerComponent(this);
+        ToolTipManager.sharedInstance().setDismissDelay(60*1000);
+        setCellRenderer(new MyRenderer());
+    }
+
+    /**
+     * Layer tree specific renderer allowing to show multiple line
+     * tooltips 
+     * @author jaume
+     *
+     */
+	private class MyRenderer extends DefaultTreeCellRenderer {
+		private static final long serialVersionUID = 1L;
+
+		public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
+			super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
+			if (value instanceof WCSLayerNode){
+				WCSLayerNode layer = (WCSLayerNode) value;
+
+				String myLatLonTxt = layer.getLatLonBox();
+				if (myLatLonTxt == null)
+					myLatLonTxt = "-";
+
+				String myAbstract = layer.getAbstract();
+
+				if (myAbstract == null)
+					myAbstract = "-";
+				else 
+					myAbstract = format(myAbstract.trim(), 100);
+
+				String text =
+					PluginServices.getText(this, "abstract") + ":\n" + myAbstract +
+					"\n\n" +
+					PluginServices.getText(this, "covered_extension") + ":\n" + myLatLonTxt;
+
+				setToolTipText(text);
+
+				if (!showLayerNames) {
+					if (layer.getName() != null || layer.getName() == "") {
+						text = layer.toString();
+						text = text.substring(text.indexOf(']')+2, text.length());
+						setText(text);
+					}
+				}
+
+				//                Dimension sz  = getPreferredSize();
+				//                sz.setSize((sz.getWidth()+50) - (3*count), sz.getHeight());
+				//                setPreferredSize(sz);
+				//                count++;
+
+			} else {
+				setToolTipText(null);
+			}
+			return this;
+		}
+	}
+    
+    
+    /**
+     * Cuts the message text to force its lines to be shorter or equal to 
+     * lineLength.
+     * @param message, the message.
+     * @param lineLength, the max line length in number of characters.
+     * @return the formated message.
+     */
+    public static String format(String message, int lineLength){
+        if (message.length() <= lineLength) return message;
+        String[] lines = message.split("\n");
+        String theMessage = "";
+        for (int i = 0; i < lines.length; i++) {
+            String line = lines[i].trim();
+            if (line.length()<lineLength)
+                theMessage += line+"\n";
+            else {
+                String[] chunks = line.split(" ");
+                String newLine = "";
+                for (int j = 0; j < chunks.length; j++) {
+                    int currentLength = newLine.length();
+                    chunks[j] = chunks[j].trim();
+                    if (chunks[j].length()==0)
+                        continue;
+                    if ((currentLength + chunks[j].length() + " ".length()) <= lineLength)
+                        newLine += chunks[j] + " ";
+                    else {
+                        newLine += "\n"+chunks[j]+" ";
+                        theMessage += newLine;
+                        newLine = "";
+                    }
+                }
+            }
+        }
+        return theMessage;
+    }
+    
+    public JToolTip createToolTip() {
+    	MultiLineToolTip tip = new MultiLineToolTip();
+    	tip.setComponent(this);
+    	return tip;
+    }
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/panel/LayerTree.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/wizard/LayerTreeModel_old.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/wizard/LayerTreeModel_old.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/wizard/LayerTreeModel_old.java	(revision 6982)
@@ -0,0 +1,155 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+ 
+package org.gvsig.raster.wcs.app.wcsclient.gui.wizard;
+
+import java.util.ArrayList;
+import java.util.Vector;
+
+import javax.swing.event.TreeModelListener;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreePath;
+
+import org.gvsig.raster.wcs.io.WCSLayerNode;
+
+
+
+public class LayerTreeModel_old implements TreeModel {
+
+	WCSLayerNode root;
+
+	public LayerTreeModel_old(WCSLayerNode root){
+		this.root = root;
+	}
+
+	public Object getRoot() {
+		return root;
+	}
+
+	public int getChildCount(Object parent) {
+		return ((WCSLayerNode)parent).getChildren().size();
+	}
+
+    public boolean isLeaf(Object node) {
+		return ((WCSLayerNode)node).getChildren().size() == 0;
+	}
+
+	public void addTreeModelListener(TreeModelListener l) {
+	}
+
+	public void removeTreeModelListener(TreeModelListener l) {
+	}
+
+	public Object getChild(Object parent, int index) {
+		return (WCSLayerNode)((WCSLayerNode)parent).getChildren().get(index);
+	}
+
+	public int getIndexOfChild(Object parent, Object child) {
+		WCSLayerNode pare = (WCSLayerNode) parent;
+		for (int i = 0; i < pare.getChildren().size(); i++)
+			if (child == pare.getChildren().get(i)) return i;
+		return -1;
+	}
+
+	public void valueForPathChanged(TreePath path, Object newValue) {
+	}
+
+    /**
+     * @param node, the tree's desired node.
+     * @return Returns the name of the node.
+     */
+    public String getName(Object node) {
+        return ((WCSLayerNode) node).getName();
+    }
+    
+    /**
+     * @param node, the tree's desired node.
+     * @return Returns the namedStyles.
+     */
+   /* public ArrayList getStyles(Object node) {
+        return ((WCSLayerNode) node).getStyles();
+    }*/
+    /**
+     * @param node, the tree's desired node.
+     * @return Returns the queryable.
+     */
+    /*public boolean isQueryable(Object node) {
+        return ((WCSLayerNode) node).isQueryable();
+    }*/
+    
+    /**
+     * @param node, the tree's desired node.
+     * @return Returns the srs.
+     */
+    /*public Vector getSrs(Object node) {
+        return ((WCSLayerNode) node).getAllSrs();
+    }*/
+    /**
+     * @param node, the tree's desired node.
+     * @return Returns the title.
+     */
+    public String getTitle(Object node) {
+        return ((WCSLayerNode) node).getTitle();
+    }
+    /**
+     * @param node, the tree's desired node.
+     * @return Returns the transparency.
+     */
+    public boolean hasTransparency(Object node) {
+        return ((WCSLayerNode) node).isTransparent();
+    }
+    
+    public String toString(){
+        return getTitle(this);
+    }
+    
+    /**
+     * Searches in the tree for the first (and must be the unique) RemoteLayerNode with
+     * the name specified by name.
+     * @param name
+     * @return
+     */
+    public Object getNodeByName(String name) {
+    	return getNodeByName(root, name);
+    }
+    
+    /**
+     * Service method.
+     * @param node
+     * @param name
+     * @return
+     */
+    private Object getNodeByName(WCSLayerNode node, String name) {
+    	WCSLayerNode n = node;
+    	if (n.getName()!= null && n.getName().equals(name)) {
+    		return n;
+    	} else {
+    		for (int i = 0; i < getChildCount(n); i++) {
+    			WCSLayerNode n1 = (WCSLayerNode) n.getChildren().get(i);
+    			Object obj = getNodeByName(n1, name);
+    			if (obj!= null)
+    				return obj;
+			}
+    	}
+    	return null;
+    }
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/wizard/LayerTreeModel_old.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/wizard/WCSWizard.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/wizard/WCSWizard.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/wizard/WCSWizard.java	(revision 6982)
@@ -0,0 +1,874 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA  02110-1301, USA.
+*
+*/
+
+package org.gvsig.raster.wcs.app.wcsclient.gui.wizard;
+
+import java.awt.Component;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.geom.Rectangle2D;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Properties;
+import java.util.prefs.Preferences;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.apache.commons.io.IOUtils;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.PluginsLocator;
+import org.gvsig.andami.PluginsManager;
+import org.gvsig.andami.persistence.serverData.ServerDataPersistence;
+import org.gvsig.app.gui.WizardPanel;
+import org.gvsig.app.gui.wizards.WizardListener;
+import org.gvsig.app.gui.wizards.WizardListenerSupport;
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.coverage.exception.ConnectException;
+import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.mapcontext.exceptions.ProjectionLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.gui.beans.Messages;
+import org.gvsig.raster.cache.tile.TileCacheLibrary;
+import org.gvsig.raster.util.CancelTaskImpl;
+import org.gvsig.raster.wcs.app.wcsclient.WCSClientExtension;
+import org.gvsig.raster.wcs.app.wcsclient.gui.panel.WCSParamsPanel;
+import org.gvsig.raster.wcs.io.WCSProvider;
+import org.gvsig.raster.wcs.io.WCSServerExplorer;
+import org.gvsig.raster.wcs.io.WCSServerExplorerParameters;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.utils.swing.jcomboServer.JComboServer;
+import org.gvsig.utils.swing.jcomboServer.ServerData;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+
+/**
+ * The WCS properties container panel.
+ *
+ * @author Jaume Dominguez Faus
+ */
+public class WCSWizard extends WizardPanel implements ActionListener {
+	final static private Logger           logger = LoggerFactory.getLogger(WCSWizard.class);
+	private static final long             serialVersionUID   = 1L;
+	private String                        serversPropsFilename       = "servers.properties";
+
+
+	protected int                         page               = 0;
+	protected boolean                     connected          = false;
+	private JComboServer                  cmbHost            = null;
+	private JButton                       btnConnect         = null;
+	private JButton                       btnCancel          = null;
+	private JPanel                        jPanel             = null;
+	private JLabel                        jLabel1            = null;
+	private JLabel                        lblTitle           = null;
+	private JScrollPane                   jScrollPane        = null;
+	private JTextArea                     txtAbstract        = null;
+	private JPanel                        panelPage1         = null;
+	private JButton                       btnSiguiente       = null;
+	private JButton                       btnAnterior        = null;
+	private JPanel                        jPanel1            = null;
+	protected WizardListenerSupport       listenerSupport    = new WizardListenerSupport();
+	protected WCSParamsPanel              wcsParamsPanel     = null;
+	protected JLabel                      lblServerType      = null;
+	protected JLabel                      lblServerTypeValue = null;
+	private JCheckBox                     chkCaching         = null;
+	private static Preferences            fPrefs             = Preferences.userRoot().node( "gvsig.wcs-wizard" );
+	private boolean                       usingTileCache     = fPrefs.getBoolean("tile_cache", false);
+	private JCheckBox                     chkTileCache       = null;
+	private boolean                       refreshing         = fPrefs.getBoolean("refresh_capabilities", false);
+	protected int                         firstPage          = 0;
+	private JPanel                        pnlName            = null;
+	private ICancellable                  cancel             = null;
+	private WCSServerExplorer             explorer           = null;
+
+    private PluginServices plugin = null;
+
+	public WCSWizard (WCSParamsPanel params) {
+		super();
+		firstPage = 1;
+		page = firstPage;
+		this.wcsParamsPanel = params;
+		this.explorer = wcsParamsPanel.getExplorer();
+
+		setTabName("WCS");
+		lblServerType = new JLabel();
+		lblServerType.setBounds(20, 444, 100, 20);
+		lblServerType.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
+		lblServerType.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
+		lblServerType.setFont(new java.awt.Font("Arial", java.awt.Font.PLAIN, 11));
+		lblServerType.setText(PluginServices.getText(this, "server_type")+":");
+		lblServerTypeValue = new JLabel();
+		lblServerTypeValue.setBounds(128, 444, 148, 20);
+		lblServerTypeValue.setFont(new java.awt.Font("Arial", java.awt.Font.BOLD, 11));
+		lblServerTypeValue.setText("-");
+		this.setSize(510, 468);
+		this.setLayout(null);
+		this.setPreferredSize(new java.awt.Dimension(750, 420));
+		this.setVisible(true);
+
+		wcsParamsPanel.setListenerSupport(this.listenerSupport);
+		wcsParamsPanel.setBounds(0, 5, 510, 428);
+		wcsParamsPanel.getJTabbedPane().addMouseListener(
+				new java.awt.event.MouseAdapter() {
+					public void mouseClicked(java.awt.event.MouseEvent e) {
+						page = wcsParamsPanel.currentPage() + 1;
+						activarVisualizarBotones();
+					}
+				});
+		this.add(wcsParamsPanel, null);
+		this.add(lblServerType, null);
+		this.add(lblServerTypeValue, null);
+		getWCSParamsPanel().setVisible(true);
+
+		connected = true;
+	}
+
+	/**
+	 * This is the default constructor
+	 */
+	public WCSWizard() {
+		super();
+		firstPage = 0;
+		page = firstPage;
+		initialize();
+
+		/*IWindow[] windows = PluginServices.getMDIManager().getAllWindows();
+		for (int i = 0; i < windows.length; i++) {
+			if(windows[i] instanceof AbstractViewPanel)
+				proj = ((AbstractViewPanel)windows[i]).getProjection();
+		}*/
+		cancel = new CancelTaskImpl();
+	}
+	/**
+	 * This method initializes this
+	 */
+	private void initialize() {
+        PluginsManager pluginsManager = PluginsLocator.getManager();
+        this.plugin = pluginsManager.getPlugin(WCSClientExtension.class);
+
+		setTabName("WCS");
+
+		lblServerType = new JLabel();
+		lblServerType.setBounds(20, 444, 100, 20);
+		lblServerType.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
+		lblServerType.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
+		lblServerType.setFont(new java.awt.Font("Arial", java.awt.Font.PLAIN, 11));
+		lblServerType.setText(PluginServices.getText(this, "server_type")+":");
+		lblServerTypeValue = new JLabel();
+		lblServerTypeValue.setBounds(128, 444, 148, 20);
+		lblServerTypeValue.setFont(new java.awt.Font("Arial", java.awt.Font.BOLD, 11));
+		lblServerTypeValue.setText("-");
+		this.setSize(510, 468);
+		this.setLayout(null);
+		this.setPreferredSize(new java.awt.Dimension(750, 420));
+		this.setVisible(true);
+		this.add(getPanelPage1(), null);
+		this.add(getWCSParamsPanel(), null);
+		this.add(getBtnAnterior(), null);
+		this.add(getBtnSiguiente(), null);
+		this.add(lblServerType, null);
+		this.add(lblServerTypeValue, null);
+		activarVisualizarBotones();
+	}
+
+
+	protected JPanel getWCSParamsPanel(){
+		if (wcsParamsPanel == null){
+			wcsParamsPanel = new WCSParamsPanel();
+			wcsParamsPanel.setListenerSupport(this.listenerSupport);
+			wcsParamsPanel.setBounds(0, 5, 510, 428);
+			wcsParamsPanel.getJTabbedPane().addMouseListener(
+					new java.awt.event.MouseAdapter() {
+						public void mouseClicked(java.awt.event.MouseEvent e) {
+							page = wcsParamsPanel.currentPage() + 1;
+							activarVisualizarBotones();
+						}
+					});
+		}
+		return wcsParamsPanel;
+	}
+
+	/**
+	 * This method checks for the options selected within the configuration
+	 * dialog are correct.
+	 *
+	 * @return true if you're done, false if not.
+	 */
+	public boolean areSettingsValid() {
+		return wcsParamsPanel.isCorrectlyConfigured();
+	}
+
+	/**
+	 * Thread to connect to a WCS server
+	 * @author Nacho Brodin (nachobrodin@gmail.com)
+	 */
+	public class ConnectThread extends Thread {
+		private ICancellable             cancel      = null;
+		private WCSServerExplorer        explorer    = null;
+		private WCSWizard                wizard      = null;
+
+		public ConnectThread(ICancellable cancel, WCSServerExplorer explorer, WCSWizard wizard) {
+			this.cancel = cancel;
+			this.explorer = explorer;
+			this.wizard = wizard;
+		}
+
+	    public void run() {
+	    	if(!checkHostAndNetwork())
+	    		return;
+
+	    	try {
+	    		explorer.connect(cancel);
+	    		saveServerListFromComboBox();
+			} catch (ConnectException e) {
+				String msg = e.getMessage() + " : " + getIOExceptionMessage(e);
+				logger.info(msg, e);
+				JOptionPane.showMessageDialog(getWCSParamsPanel(), msg, Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
+				return;
+			} finally {
+				((CancelTaskImpl)cancel).setCanceled(false);
+			}
+
+			//storeParams = (WCSDataParameters)explorer.getStoreParameters();
+
+			wizard.rellenarControles();
+	    }
+
+	    /**
+		 * Gets the <code>IOException</code> message. The message
+		 * of this exception is returned by the server
+		 * @param e
+		 * @return
+		 */
+		private String getIOExceptionMessage(Exception e) {
+			Throwable ex = e;
+			final int MAX_DEEP = 10;
+			int deep = 0;
+			while(deep < MAX_DEEP) {
+				Throwable t = null;
+				if(ex instanceof IOException) {
+					return ex.getMessage();
+				} else if(ex instanceof RemoteServiceException) {
+					t = ex.getCause();
+				}
+				if(t == null)
+					return null;
+				else
+					ex = t;
+				deep++;
+			}
+			return null;
+		}
+	}
+
+	/**
+	 * Checks if the network and host are reachable
+	 * @return true if both are reachable and false if they are not
+	 */
+	private boolean checkHostAndNetwork() {
+		if(!explorer.isHostReachable()) {
+			JOptionPane.showMessageDialog(null, Messages.getText("host_unreachable"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
+			logger.info(Messages.getText("host_unreachable"));
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 */
+	private void rellenarControles() {
+		try {
+			//String host = cmbHost.getModel().getSelectedItem().toString();
+
+			lblTitle.setText(explorer.getTitle());
+			lblServerTypeValue.setText(explorer.getServerType());
+			txtAbstract.setText(explorer.getAbstract());
+
+			wcsParamsPanel.setWizardData(explorer);
+			connected = true;
+			activarVisualizarBotones();
+		} catch (Exception e) {
+			if (e.getMessage()==null) {
+				txtAbstract.setText(PluginServices.getText(this,"error"));
+			} else {
+				txtAbstract.setText(e.getMessage());
+			}
+			listenerSupport.callError(e);
+			getBtnSiguiente().setEnabled(false);
+			getBtnAnterior().setEnabled(true);
+		} finally {
+			getBtnCancel().setEnabled(false);
+		}
+	}
+
+	@SuppressWarnings("deprecation")
+	public void actionPerformed(ActionEvent e) {
+		if(e.getSource() == getBtnConnect()) {
+			getBtnCancel().setEnabled(true);
+			getTxtAbstract().setText("Trying to connect...");
+			String host = cmbHost.getModel().getSelectedItem().toString();
+			try {
+				DataManager datamanager = DALLocator.getDataManager();
+				WCSServerExplorerParameters explorerParams = (WCSServerExplorerParameters) datamanager.createServerExplorerParameters(WCSProvider.NAME);
+				explorerParams.setHost(host);
+
+				explorer = (WCSServerExplorer) datamanager.createServerExplorer(explorerParams);
+
+				((CancelTaskImpl)cancel).setCanceled(false);
+				new ConnectThread(cancel, explorer, this).start();
+
+			} catch (InitializeException e1) {
+				getTxtAbstract().setText("Error creating WCS layer");
+			} catch (ProviderNotRegisteredException e1) {
+				getTxtAbstract().setText("Provider not registered. I cannot connect.");
+			} catch (ValidateDataParametersException e1) {
+				getTxtAbstract().setText("Parameters not valid. I cannot connect.");
+			}
+		}
+
+		if(e.getSource() == getBtnCancel()) {
+			getTxtAbstract().setText("Cancelled...");
+			((CancelTaskImpl)cancel).setCanceled(true);
+			getBtnCancel().setEnabled(false);
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 */
+	protected void activarVisualizarBotones() {
+		if (page == firstPage) {
+			getBtnAnterior().setEnabled(false);
+			getBtnSiguiente().setVisible(true);
+
+			if (connected) {
+				getBtnSiguiente().setEnabled(true);
+			} else {
+				getBtnSiguiente().setEnabled(false);
+			}
+		} else if (page < wcsParamsPanel.getNumTabs()) {
+			getBtnSiguiente().setEnabled(true);
+			getBtnSiguiente().setVisible(true);
+			getBtnAnterior().setEnabled(true);
+			getBtnAnterior().setVisible(true);
+			if (wcsParamsPanel.nextEnabledPage()==-1){
+				getBtnSiguiente().setEnabled(false);
+			}
+			listenerSupport.callStateChanged(wcsParamsPanel.isCorrectlyConfigured());
+		} else if (page == wcsParamsPanel.getNumTabs()) {
+			getBtnSiguiente().setVisible(false);
+			getBtnSiguiente().setEnabled(false);
+			listenerSupport.callStateChanged(wcsParamsPanel.isCorrectlyConfigured());
+		}
+	}
+
+	/**
+	 * This method initializes txtHost
+	 *
+	 * @return javax.swing.JTextField
+	 */
+	private javax.swing.JComboBox getTxtHost() {
+		if (cmbHost == null) {
+			cmbHost = new JComboServer();
+			cmbHost.setModel(new DefaultComboBoxModel());
+			cmbHost.setPreferredSize(new java.awt.Dimension(350, 20));
+			cmbHost.setBounds(11, 26, 454, 20);
+			cmbHost.setEditable(true);
+			cmbHost.setServerList(getServerDataPersistence().getArrayOfServerData());
+		}
+
+		return cmbHost;
+	}
+
+	/**
+	 * Gets the list of servers that have been persisted or added in the properties file
+	 * @return
+	 */
+	private ServerDataPersistence getServerDataPersistence() {
+        DynObject pluginProperties = this.plugin.getPluginProperties();
+        ServerDataPersistence servers =  (ServerDataPersistence) pluginProperties.getDynValue("servers");
+
+        if( servers == null || servers.isEmpty() ) {
+            if( servers == null ) {
+                servers = new ServerDataPersistence(ServerData.SERVER_TYPE_WCS);
+                pluginProperties.setDynValue("servers", servers);
+            }
+            //Lee los servidores del properties y los mezcla con los que hay en la persistencia
+            Properties prop = new Properties();
+            File propFile = new File(this.plugin.getPluginDirectory(),serversPropsFilename);
+            FileInputStream fis = null;
+            try {
+                    fis = new FileInputStream(propFile);
+                    prop.load(fis);
+            } catch (FileNotFoundException e) {
+                    logger.info("Properties file '"+propFile.getAbsolutePath()+"' not found", e);
+            } catch (IOException e) {
+                    logger.info("Error reading properties file '"+propFile.getAbsolutePath()+"'.", e);
+            } finally {
+                IOUtils.closeQuietly(fis);
+            }
+
+            for (int i = 0; i < prop.size(); i++) {
+                Object value = prop.get("server[" + i + "]");
+                servers.addServerData(new ServerData(value.toString(), ServerData.SERVER_TYPE_WCS));
+            }
+
+        }
+        return servers;
+	}
+
+	/**
+	 * Saves the list of server reading from the <code>ComboBox</code>
+	 */
+	private void saveServerListFromComboBox() {
+        ServerDataPersistence persistence = getServerDataPersistence();
+		String urlSelected = getTxtHost().getModel().getSelectedItem().toString();
+
+		boolean isSelectedInModel = false;
+		for (int i = 0; i < getTxtHost().getItemCount(); i++) {
+			String url = getTxtHost().getItemAt(i).toString();
+			persistence.addServerData(new ServerData(url, ServerData.SERVER_TYPE_WCS));
+			if(url.equals(urlSelected)) {
+				isSelectedInModel = true;
+			}
+		}
+
+		if(!isSelectedInModel)
+			persistence.addServerData(new ServerData(urlSelected, ServerData.SERVER_TYPE_WCS));
+
+	}
+
+
+	/**
+	 * This method initializes btnDetalles
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBtnConnect() {
+		if (btnConnect == null) {
+			btnConnect = new JButton();
+			btnConnect.setPreferredSize(new java.awt.Dimension(100, 20));
+			btnConnect.setBounds(262, 50, 100, 20);
+			btnConnect.setText(PluginServices.getText(this, "conectar"));
+			btnConnect.addActionListener(this);
+		}
+
+		return btnConnect;
+	}
+
+	/**
+	 * This method initializes btnDetalles
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getBtnCancel() {
+		if (btnCancel == null) {
+			btnCancel = new JButton();
+			btnCancel.setEnabled(false);
+			btnCancel.setPreferredSize(new java.awt.Dimension(100, 20));
+			btnCancel.setBounds(366, 50, 100, 20);
+			btnCancel.setText(PluginServices.getText(this, "cancel"));
+			btnCancel.addActionListener(this);
+		}
+
+		return btnCancel;
+	}
+
+	/**
+	 * This method initializes jPanel
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private javax.swing.JPanel getJPanel() {
+		if (jPanel == null) {
+			jPanel = new javax.swing.JPanel();
+			jPanel.setLayout(null);
+			jPanel.setPreferredSize(new java.awt.Dimension(470, 130));
+			jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
+					null, PluginServices.getText(this, "description"),
+					javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+					javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+			jPanel.setBounds(2, 116, 477, 304);
+
+			jPanel.add(getJScrollPane(), null);
+			jPanel.add(getPnlName(), null);
+		}
+
+		return jPanel;
+	}
+
+	/**
+	 * This method initializes jLabel1
+	 *
+	 * @return javax.swing.JLabel
+	 */
+	private javax.swing.JLabel getJLabel1() {
+		if (jLabel1 == null) {
+			jLabel1 = new javax.swing.JLabel();
+			jLabel1.setText(PluginServices.getText(this, "name") + ":");
+		}
+
+		return jLabel1;
+	}
+
+	/**
+	 * This method initializes lblTitle
+	 *
+	 * @return javax.swing.JLabel
+	 */
+	private javax.swing.JLabel getLblTitle() {
+		if (lblTitle == null) {
+			lblTitle = new javax.swing.JLabel();
+			lblTitle.setText("-");
+		}
+
+		return lblTitle;
+	}
+
+	/**
+	 * This method initializes jScrollPane
+	 *
+	 * @return javax.swing.JScrollPane
+	 */
+	private javax.swing.JScrollPane getJScrollPane() {
+		if (jScrollPane == null) {
+			jScrollPane = new javax.swing.JScrollPane();
+			jScrollPane.setViewportView(getTxtAbstract());
+			jScrollPane.setPreferredSize(new java.awt.Dimension(450, 60));
+			jScrollPane.setBounds(10, 47, 457, 247);
+		}
+
+		return jScrollPane;
+	}
+
+	/**
+	 * This method initializes txtAbstract
+	 *
+	 * @return javax.swing.JTextArea
+	 */
+	private javax.swing.JTextArea getTxtAbstract() {
+		if (txtAbstract == null) {
+			txtAbstract = new javax.swing.JTextArea();
+			txtAbstract.setWrapStyleWord(true);
+			txtAbstract.setColumns(30);
+			txtAbstract.setLineWrap(true);
+		}
+
+		return txtAbstract;
+	}
+
+	private javax.swing.JPanel getPanelPage1() {
+		if (panelPage1 == null) {
+			panelPage1 = new JPanel();
+			panelPage1.setLayout(null);
+			panelPage1.setPreferredSize(new java.awt.Dimension(480, 220));
+			panelPage1.setVisible(true);
+			panelPage1.setBounds(15, 5, 480, 427);
+			panelPage1.add(getJPanel1(), null);
+			panelPage1.add(getJPanel(), null);
+		}
+
+		return panelPage1;
+	}
+
+
+	/**
+	 * This method initializes btnSiguiente
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private javax.swing.JButton getBtnSiguiente() {
+		if (btnSiguiente == null) {
+			btnSiguiente = new JButton();
+			btnSiguiente.setPreferredSize(new java.awt.Dimension(100, 30));
+			btnSiguiente.setBounds(395, 444, 100, 20);
+			btnSiguiente.setText(PluginServices.getText(this, "siguiente"));
+			btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					if(page == firstPage && getChkTileCache().isSelected()) {
+						messageBoxInfo("remote_service_tiled", TileCacheLibrary.ALTERNATIVE_TILESIZE + "", this);
+					}
+					if (page > firstPage) {
+						// si page es mayor que cero, vamos enfocando las
+						// sucesivas SOLAPAS del WCSParamsPanel
+						wcsParamsPanel.avanzaTab();
+						page = wcsParamsPanel.currentPage();
+					}
+					page++;
+					getPanelPage1().setVisible(false);
+					getWCSParamsPanel().setVisible(true);
+					activarVisualizarBotones();
+				}
+			});
+		}
+		return btnSiguiente;
+	}
+
+	/**
+	 * Shows an information dialog with a text and a accept button
+	 * @param msg Message to show in the dialog
+	 * @param parentWindow Parent window
+	 */
+	public static void messageBoxInfo(String msg, String fixedText, Object parentWindow){
+		String string = PluginServices.getText(parentWindow, "accept");
+		Object[] options = {string};
+		JOptionPane.showOptionDialog((Component)PluginServices.getMainFrame(),
+					"<html>" + PluginServices.getText(parentWindow, msg).replaceAll("\n", "<br>") + " " + fixedText + "</html>",
+					PluginServices.getText(parentWindow, "confirmacion"),
+					JOptionPane.OK_OPTION,
+					JOptionPane.INFORMATION_MESSAGE,
+					null,
+					options,
+					string);
+	}
+
+	/**
+	 * This method initializes btnAnterior
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private javax.swing.JButton getBtnAnterior() {
+		if (btnAnterior == null) {
+			btnAnterior = new JButton();
+			btnAnterior.setBounds(292, 444, 100, 20);
+			btnAnterior.setPreferredSize(new java.awt.Dimension(100, 30));
+			btnAnterior.setText(PluginServices.getText(this, "anterior"));
+			btnAnterior.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					page --;
+					if (page > firstPage) {
+						// Tenemos que retroceder en el wcsParamsPanel
+						wcsParamsPanel.retrocedeTab();
+						page = wcsParamsPanel.currentPage() + 1;
+						activarVisualizarBotones();
+					} else if (page==firstPage){
+						activarVisualizarBotones();
+						page = firstPage +1;
+						getLblTitle().setText("-");
+						getTxtAbstract().setText("");
+						wcsParamsPanel.retrocedeTab();
+						getPanelPage1().setVisible(true);
+						getWCSParamsPanel().setVisible(false);
+						getBtnSiguiente().setEnabled(false);
+						connected = false;
+					}
+					listenerSupport.callStateChanged(wcsParamsPanel.isCorrectlyConfigured());
+				}
+			});
+		}
+
+		return btnAnterior;
+	}
+
+	private javax.swing.JPanel getJPanel1() {
+		if (jPanel1 == null) {
+			jPanel1 = new javax.swing.JPanel();
+			jPanel1.setLayout(null);
+			jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
+					null, PluginServices.getText(this, "server"),
+					javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+					javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
+			jPanel1.setBounds(2, 5, 477, 105);
+			jPanel1.add(getTxtHost(), null);
+			jPanel1.add(getBtnConnect(), null);
+			jPanel1.add(getBtnCancel(), null);
+			jPanel1.add(getChkCaching(), null);
+			jPanel1.add(getChkTileCache(), null);
+		}
+
+		return jPanel1;
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param listener
+	 */
+	public void addWizardListener(WizardListener listener) {
+		listenerSupport.addWizardListener(listener);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @param listener
+	 */
+	public void removeWizardListener(WizardListener listener) {
+		listenerSupport.removeWizardListener(listener);
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return DOCUMENT ME!
+	 * @throws ProjectionLayerException
+	 */
+	public Rectangle2D getLayersRectangle() throws ProjectionLayerException {
+		//return wcsParamsPanel.getLayersRectangle();
+		return null;
+	}
+
+
+
+	/**
+	 * Devuelve el host que est� escrito en el cuadro de texto del host o null
+	 * en caso de que no haya nada escrito o est� mal escrito
+	 *
+	 * @return URL del host
+	 */
+	public URL getHost() {
+		try {
+			if ((cmbHost == null)|| (cmbHost.getModel().getSelectedItem() == null)) {
+				return new URL(explorer.getHost());
+			} else {
+				return new URL(cmbHost.getModel().getSelectedItem().toString());
+			}
+		} catch (MalformedURLException e) {
+			return null;
+		}
+	}
+
+	/**
+	 * DOCUMENT ME!
+	 *
+	 * @return Nombre de la capa que aparece en el TOC.
+	 */
+	public String getLayerName() {
+		return wcsParamsPanel.getLayerName();
+	}
+
+
+	public void initWizard() {
+	}
+
+	public void execute() {
+		try {
+			FLayer layer = wcsParamsPanel.getLayer(getChkTileCache().isSelected());
+			if(layer == null)
+				return;
+			this.getMapCtrl().getMapContext().getLayers().addLayer(layer);
+		} catch (InitializeException e) {
+			logger.info("The layer cannot be added", e);
+		}
+
+	}
+
+	/**
+	 * This method initializes chkCaching
+	 *
+	 * @return javax.swing.JCheckBox
+	 */
+	private JCheckBox getChkCaching() {
+		if (chkCaching == null) {
+			chkCaching = new JCheckBox();
+			chkCaching.setBounds(7, 51, 249, 20);
+			chkCaching.setText(PluginServices.getText(this, "refresh_capabilities"));
+			chkCaching.setToolTipText(PluginServices.getText(this, "refresh_capabilities_tooltip"));
+			chkCaching.setSelected(refreshing);
+			chkCaching.addItemListener(new java.awt.event.ItemListener() {
+				public void itemStateChanged(java.awt.event.ItemEvent e) {
+					refreshing = chkCaching.isSelected();
+				}
+			});
+			chkCaching.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					fPrefs.putBoolean("refresh_capabilities", chkCaching.isSelected());
+				}
+			});
+
+		}
+		return chkCaching;
+	}
+
+	/**
+	 * This method initializes chkCaching
+	 *
+	 * @return javax.swing.JCheckBox
+	 */
+	private JCheckBox getChkTileCache() {
+		if (chkTileCache == null) {
+			chkTileCache = new JCheckBox();
+			chkTileCache.setBounds(7, 72, 249, 20);
+			chkTileCache.setText(PluginServices.getText(this, "tile_cache"));
+			chkTileCache.setToolTipText(PluginServices.getText(this, "tile_cache_tooltip"));
+			chkTileCache.setSelected(usingTileCache);
+			chkTileCache.addItemListener(new java.awt.event.ItemListener() {
+				public void itemStateChanged(java.awt.event.ItemEvent e) {
+					usingTileCache = chkTileCache.isSelected();
+				}
+			});
+			chkTileCache.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					fPrefs.putBoolean("tile_cache", chkTileCache.isSelected());
+				}
+			});
+
+		}
+		return chkTileCache;
+	}
+
+	/**
+	 * This method initializes pnlName
+	 *
+	 * @return javax.swing.JPanel
+	 */
+	private JPanel getPnlName() {
+		if (pnlName == null) {
+			pnlName = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0));
+			pnlName.setBounds(new java.awt.Rectangle(9,19,452,24));
+			pnlName.add(getJLabel1(), null);
+			pnlName.add(getLblTitle(), null);
+		}
+		return pnlName;
+	}
+
+	@Override
+	public DataStoreParameters[] getParameters() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public void close() {
+		// Nothing to do
+	}
+}  //  @jve:decl-index=0:visual-constraint="10,10"

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/wizard/WCSWizard.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/wizard/SRSListModel.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/wizard/SRSListModel.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/wizard/SRSListModel.java	(revision 6982)
@@ -0,0 +1,155 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+ 
+package org.gvsig.raster.wcs.app.wcsclient.gui.wizard;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.TreeSet;
+
+import javax.swing.AbstractListModel;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author Fernando Gonz�lez Cort�s
+ */
+public class SRSListModel extends AbstractListModel {
+	ArrayList srs = new ArrayList();
+	
+	public int getSize() {
+		return srs.size();
+	}
+
+	public Object getElementAt(int index) {
+		return srs.get(index);
+	}
+	
+	public void setAll(Collection c) {
+		
+		srs.clear();
+		srs.addAll(c);
+	}
+	
+	public Collection intersect(Collection c) {
+		TreeSet resul = new TreeSet();
+    	for (int i = 0; i < srs.size(); i++) {
+			if (c.contains(srs.get(i)))
+				resul.add(srs.get(i));
+		}
+    	return resul;	
+	}
+	/*ArrayList comunes = new ArrayList();
+	
+    private HashSet srsSet = new HashSet();
+	private HashMap cuenta = new HashMap();
+	private ArrayList nombresSRS = new ArrayList();
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param srs DOCUMENT ME!
+     * /
+    public void add(String srs) {
+    	System.out.println("A�adiendo " + srs);
+        if (!srsSet.add(srs)) {
+            Integer i = (Integer) cuenta.get(srs);
+            cuenta.put(srs, new Integer(i.intValue() + 1));
+            System.out.println("Ya hab�a, llevamos " + i.intValue() + 1);
+        } else {
+			nombresSRS.add(srs);
+            cuenta.put(srs, new Integer(1));
+			fireContentsChanged(this, nombresSRS.size()-1,nombresSRS.size()-1);
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @param srs DOCUMENT ME!
+     * /
+    public void del(String srs) {
+    	System.out.println("Eliminando SRS: "+ srs);
+        Integer i = (Integer) cuenta.get(srs);
+
+        if (i == null) {
+        	System.out.println("Eliminando un elemento que no estaba");
+            return;
+        }
+
+        int nuevo = i.intValue() - 1;
+
+		System.out.println("quedan " + nuevo);
+		
+        if (nuevo == 0) {
+            cuenta.remove(srs);
+            srsSet.remove(srs);
+            nombresSRS.remove(srs);
+			fireContentsChanged(this, 0,nombresSRS.size()-1);
+        } else {
+            cuenta.put(srs, new Integer(nuevo));
+        }
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return
+     * /
+    public Iterator iterator() {
+        return srsSet.iterator();
+    }
+
+    /**
+     * DOCUMENT ME!
+     *
+     * @return
+     * /
+    public int size() {
+        return srsSet.size();
+    }
+
+	/**
+	 * @see javax.swing.ListModel#getSize()
+	 * /
+	public int getSize() {
+		return nombresSRS.size();
+	}
+
+	/**
+	 * @see javax.swing.ListModel#getElementAt(int)
+	 * /
+	public Object getElementAt(int index) {
+		return nombresSRS.get(index);
+	}
+	
+	public ArrayList intersect(Collection col) {
+    	ArrayList resul = new ArrayList();
+    	for (int i = 0; i < nombresSRS.size(); i++) {
+			if (col.contains(nombresSRS.get(i)))
+				resul.add(nombresSRS.get(i));
+		}
+    	return resul;
+    }
+    */
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/gui/wizard/SRSListModel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/WCSClientExtension.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/WCSClientExtension.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/WCSClientExtension.java	(revision 6982)
@@ -0,0 +1,86 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+package org.gvsig.raster.wcs.app.wcsclient;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.app.extension.AddLayer;
+import org.gvsig.raster.wcs.app.wcsclient.gui.toc.WCSPropsTocMenuEntry;
+import org.gvsig.raster.wcs.app.wcsclient.gui.toc.WCSZoomPixelCursorTocMenuEntry;
+import org.gvsig.raster.wcs.app.wcsclient.gui.wizard.WCSWizard;
+import org.gvsig.raster.wcs.app.wcsclient.layer.DynObjectSetWCSInfo;
+import org.gvsig.raster.wcs.app.wcsclient.layer.FLyrWCS;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+
+
+/**
+ * Extension for adding WCS support to gvSIG.
+ * @author jaume
+ */
+public class WCSClientExtension extends Extension {
+	/**
+	 * Initializes the toc menu
+	 */
+	public void initialize() {
+		// Adds a new tab to the "add layer" wizard for WCS layer creation
+		ExtensionPoint exPoint = ToolsLocator.getExtensionPointManager().add(
+				"View_TocActions");
+		
+		AddLayer.addWizard(WCSWizard.class);
+
+		exPoint.append("WCSProperties", "", new WCSPropsTocMenuEntry());
+    	exPoint.append("WCSZoomPixel", "", new WCSZoomPixelCursorTocMenuEntry());
+
+		ToolsLocator.getExtensionPointManager().add("CatalogLayers").append(
+				"OGC:WCS", "", FLyrWCS.class);
+    	initializeIcons();
+    	DynObjectSetWCSInfo.registerDynClass();
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.andami.plugins.Extension#postInitialize()
+	 */
+	public void postInitialize() {
+		FLyrWCS.registerPersistent();
+	}
+
+	public void execute(String actionCommand) {
+		// no commands, no code.
+	}
+
+	public boolean isEnabled() {
+		// may return whatever
+		return true;
+	}
+
+	public boolean isVisible() {
+		// may return whatever
+		return false;
+	}
+
+	void initializeIcons(){
+		IconThemeHelper.registerIcon(null, "view-previsualize-area", this);
+		IconThemeHelper.registerIcon(null, "ico-WCS-Layer", this);
+	}
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/WCSClientExtension.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/DynObjectIteratorWCSInfo.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/DynObjectIteratorWCSInfo.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/DynObjectIteratorWCSInfo.java	(revision 6982)
@@ -0,0 +1,92 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.raster.wcs.app.wcsclient.layer;
+
+import java.util.ArrayList;
+
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectSet;
+
+/**
+ * {@link DynObject} implementation to facade a iterator of a WCSInfo
+ * and allow to be used as a {@link DynObjectSet} iterator.
+ * 
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ * @version $Id$
+ * 
+ */
+public class DynObjectIteratorWCSInfo implements DisposableIterator {
+
+    private ArrayList<Object> infoList = new ArrayList<Object>();
+    private int               index    = -1;
+
+    /**
+     * Creates a new DynObjects iterator facade over a feature iterator.
+     * Each WMTSInfo will be returned through a new or reused
+     * {@link DynObjectWMTSInfo} which allows the {@link Feature} to be
+     * used like a DynObject.
+     * 
+     * @param featureIterator
+     *            to facade
+     * @param featureFacade
+     *            if not null this object will be reused as the facade for the
+     *            Feature objects of the feature iterator
+     */
+    public DynObjectIteratorWCSInfo(Object info) {
+        this.infoList.add(info);
+        index = 0;
+    }
+    
+    public void addObject(Object info) {
+    	this.infoList.add(info);
+    	if(index == -1)
+    		index = 0;
+    }
+
+    public synchronized void dispose() {
+    	this.infoList.clear();
+    	index = -1;
+    }
+
+    public synchronized boolean hasNext() {
+        return (infoList.size() == 0 || index >= infoList.size()) ? false : true;
+    }
+
+    public synchronized Object next() {
+        Object o = infoList.get(index);
+        index ++;
+        return o;
+    }
+
+    public synchronized void remove() {
+    	if(index < infoList.size() && index >= 0) {
+    		index --;
+    		infoList.remove(index);
+    	}
+    }
+    
+    public long getSize() {
+        return infoList.size();
+    }
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/DynObjectIteratorWCSInfo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/DynObjectSetWCSInfo.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/DynObjectSetWCSInfo.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/DynObjectSetWCSInfo.java	(revision 6982)
@@ -0,0 +1,120 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+package org.gvsig.raster.wcs.app.wcsclient.layer;
+
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dynobject.DynClass;
+import org.gvsig.tools.dynobject.DynObject;
+import org.gvsig.tools.dynobject.DynObjectManager;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.observer.Observable;
+import org.gvsig.tools.observer.Observer;
+import org.gvsig.tools.observer.impl.BaseWeakReferencingObservable;
+import org.gvsig.tools.visitor.Visitor;
+
+/**
+ * {@link DynObject} implementation to facade of a {@link FeatureSet} and allow
+ * to be used as a {@link DynObjectSet}.
+ * 
+ * @author Nacho Brodin (nachobrodin@gmail.com)
+ * @version $Id$
+ */
+public class DynObjectSetWCSInfo extends BaseWeakReferencingObservable
+    implements DynObjectSet, Observer {
+	public static final int             TYPE_TEXT = 0;
+	public static final int             TYPE_HTML = 1;
+	public static final int             TYPE_XML  = 2;
+	private DynObjectIteratorWCSInfo   ite = null;
+	
+	public static void registerDynClass() {
+		DynObjectManager manager = ToolsLocator.getDynObjectManager();
+    	DynClass dynClass = manager.add("WCSInfoByPoint", "WCS InfoByPoint");
+    	dynClass.setNamespace("InfoByPoint");
+    	dynClass.addDynFieldString("info");
+	}
+	
+    /**
+     * Creates a new facade over a given info, with fast dynobject
+     * iteration.
+     */
+    public DynObjectSetWCSInfo(String txt, int type) {
+    	DynObjectManager manager = ToolsLocator.getDynObjectManager();
+    	DynObject dynObject = manager.createDynObject("WCSInfoByPoint");
+    	dynObject.setDynValue("info", txt);
+    	ite = new DynObjectIteratorWCSInfo(dynObject);
+    }
+
+    public void dispose() {
+
+    }
+
+    public void accept(final Visitor visitor, long firstValueIndex) throws BaseException {
+    	while(ite.hasNext()) {
+    		visitor.visit(ite.next());
+    	}
+    }
+
+    public void accept(final Visitor visitor) throws BaseException {
+    	while(ite.hasNext()) {
+    		visitor.visit(ite.next());
+    	}
+    }
+
+    public long getSize() throws BaseException {
+       return ite.getSize();
+    }
+
+    public DisposableIterator iterator(long index) throws BaseException {
+        return iterator();
+    }
+
+    public DisposableIterator iterator() throws BaseException {
+    	return ite;
+    }
+
+    public boolean isEmpty() throws BaseException {
+    	return (getSize() == 0);
+    }
+
+    public boolean isDeleteEnabled() {
+    	return true;
+    }
+
+    public void delete(DynObject dynObject) throws BaseException {
+
+    }
+
+    public boolean isUpdateEnabled() {
+    	return true;
+    }
+
+    public void update(DynObject dynObject) throws BaseException {
+    	System.out.println();
+    }
+
+    public void update(Observable observable, Object notification) {
+    	System.out.println();
+    }
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/DynObjectSetWCSInfo.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/FLyrWCS.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/FLyrWCS.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/FLyrWCS.java	(revision 6982)
@@ -0,0 +1,856 @@
+/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ib��ez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.raster.wcs.app.wcsclient.layer;
+
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.print.attribute.PrintRequestAttributeSet;
+
+import org.cresques.cts.IProjection;
+
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.fmap.dal.DALLocator;
+import org.gvsig.fmap.dal.DataManager;
+import org.gvsig.fmap.dal.DataParameters;
+import org.gvsig.fmap.dal.DataStore;
+import org.gvsig.fmap.dal.DataStoreParameters;
+import org.gvsig.fmap.dal.coverage.RasterLocator;
+import org.gvsig.fmap.dal.coverage.RasterManager;
+import org.gvsig.fmap.dal.coverage.datastruct.Extent;
+import org.gvsig.fmap.dal.coverage.datastruct.ViewPortData;
+import org.gvsig.fmap.dal.coverage.exception.FilePaletteException;
+import org.gvsig.fmap.dal.coverage.exception.InfoByPointException;
+import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
+import org.gvsig.fmap.dal.coverage.exception.QueryException;
+import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
+import org.gvsig.fmap.dal.coverage.grid.RasterFilter;
+import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
+import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
+import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
+import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
+import org.gvsig.fmap.dal.coverage.store.props.Transparency;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.exception.InitializeException;
+import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
+import org.gvsig.fmap.dal.exception.ReadException;
+import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
+import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
+import org.gvsig.fmap.geom.Geometry.SUBTYPES;
+import org.gvsig.fmap.geom.GeometryLocator;
+import org.gvsig.fmap.geom.GeometryManager;
+import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
+import org.gvsig.fmap.geom.primitive.Envelope;
+import org.gvsig.fmap.mapcontext.ViewPort;
+import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.Tiling;
+import org.gvsig.raster.fmap.layers.DefaultFLyrRaster;
+import org.gvsig.raster.fmap.layers.IRasterLayerActions;
+import org.gvsig.raster.fmap.layers.NotAvailableStateException;
+import org.gvsig.raster.util.CancelTaskImpl;
+import org.gvsig.raster.wcs.io.WCSDataParameters;
+import org.gvsig.raster.wcs.io.WCSProvider;
+import org.gvsig.raster.wcs.io.WCSServerExplorer;
+import org.gvsig.raster.wcs.io.WCSServerExplorerParameters;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynObjectSet;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.task.Cancellable;
+import org.gvsig.tools.task.SimpleTaskStatus;
+import org.gvsig.tools.task.TaskStatusManager;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * Class for the WCS layer.
+ *
+ * Capa para el WCS.
+ *
+ * Las capas WCS son tileadas para descargarlas del servidor. Esto quiere decir que
+ * est�n formadas por multiples ficheros raster. Por esto la fuente de datos raster (IRasterDatasource)
+ * de la capa FLyrWCS es un objeto de tipo CompositeDataset. Este objeto est� compuesto por un array
+ * bidimensional de MultiRasterDataset. Cada uno de los MultiRasterDataset corresponde con un tile
+ * salvado en disco. Estos MultiRasterDataset se crean cada vez que se repinta ya que en WCS a cada
+ * zoom varian los ficheros fuente. La secuencia de creaci�n de un CompositeDataset ser�a la siguiente:
+ * <UL>
+ * <LI>Se hace una petici�n de dibujado por parte del usuario llamando al m�todo draw de FLyrWCS</LI>
+ * <LI>Se tilea la petici�n</LI>
+ * <LI>Cada tile se dibuja abriendo una FLyrRaster para ese tile</LI>
+ * <LI>Si es el primer dibujado se guarda una referencia en la capa WCS a las propiedades de renderizado, orden de bandas,
+ * transparencia, filtros aplicados, ...</LI>
+ * <LI>Si no es el primer dibujado se asignan las propiedades de renderizado cuya referencia se guarda en la capa WCS</LI>
+ * <LI>Se guarda el MultiRasterDataset de cada tile</LI>
+ * <LI>Al acabar todos los tiles creamos un CompositeDataset con los MultiRasterDataset de todos los tiles</LI>
+ * <LI>Asignamos a la capa la referencia de las propiedades de renderizado que tenemos almacenadas. De esta forma si hay
+ * alguna modificaci�n desde el cuadro de propiedades ser� efectiva sobre los tiles que se dibujan.</LI>
+ * </UL>
+ *
+ * @author jaume - jaume.dominguez@iver.es
+ */
+@SuppressWarnings("deprecation")
+public class FLyrWCS extends DefaultFLyrRaster {
+    private static final int             MAX_RETRY_TIMES           = 5;
+
+    private static final GeometryManager geomManager               = GeometryLocator.getGeometryManager();
+    private static final Logger          logger                    = LoggerFactory.getLogger(FLyrWCS.class);
+    private boolean 					 isPrinting                = false;
+
+    private boolean 					 mustTileDraw              = false;
+    private int 						 maxTileDrawWidth          = 1023;
+    private int							 maxTileDrawHeight         = 1023;
+    private final int 					 maxTilePrintWidth         = 1023;
+    private final int 					 maxTilePrintHeight        = 1023;
+
+    private boolean						 firstLoad                 = false;
+    private Envelope					 fullEnvelope              = null;
+    private int                          callCount;
+    private RasterManager                rManager                  = RasterLocator.getManager();
+    private boolean                      deleteCache               = false;
+
+    @SuppressWarnings("unused")
+    private class MyCancellable implements ICancellable {
+        private Cancellable original;
+
+        public MyCancellable(Cancellable cancelOriginal) {
+            this.original = cancelOriginal;
+        }
+
+        public boolean isCanceled() {
+            return original.isCanceled();
+        }
+
+        public Object getID() {
+            return this;
+        }
+    }
+
+    public FLyrWCS() {
+        super();
+        this.updateDrawVersion();
+        try {
+            enableAwake();
+        } catch (NotAvailableStateException e) {
+            logger.error("Fallo el estado de open. Closed=" + isClosed() + " Awake=" + isAwake(), this, e);
+        }
+    }
+
+    public FLyrWCS(DataStoreParameters dataStoreParameters) throws Exception {
+        this();
+        //Create the explorer and connect
+        DataManager dataManager = DALLocator.getDataManager();
+        WCSServerExplorerParameters explorerParams = (WCSServerExplorerParameters)
+        dataManager.createServerExplorerParameters(WCSProvider.NAME);
+        explorerParams.setHost((String)dataStoreParameters.getDynValue("uri"));
+        WCSServerExplorer wmsServerExplorer =
+            (WCSServerExplorer) dataManager.openServerExplorer(WCSProvider.NAME, explorerParams);
+        wmsServerExplorer.connect(null);
+        wmsServerExplorer.getCoverageList();
+
+        //Set the parameters
+        setParameters((WCSDataParameters)dataStoreParameters);
+        setExplorer(wmsServerExplorer);
+    }
+
+    public static DataStore createDataStore(String host, IProjection srs) throws InitializeException {
+        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
+        RasterDataParameters params = null;
+        try {
+            params = (RasterDataParameters)dataman.createServerExplorerParameters(WCSProvider.NAME);
+        } catch (InitializeException e) {
+            return null;
+        } catch (ProviderNotRegisteredException e) {
+            return null;
+        }
+        URI uriHost;
+        try {
+            uriHost = new URI(host);
+        } catch (URISyntaxException e1) {
+            throw new InitializeException(e1);
+        }
+        params.setURI(uriHost);
+        params.setSRS(srs);
+
+        try {
+            return dataman.openStore(params.getDataStoreName(), params);
+        } catch (ValidateDataParametersException e) {
+            throw new InitializeException(e);
+        } catch (ProviderNotRegisteredException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    public void setDataStore(DataStore dataStore) throws LoadLayerException {
+        this.dataStore = (RasterDataStore) dataStore;
+        try {
+            if(this.dataStore.isOpen())
+                enableOpen();
+        } catch (NotAvailableStateException e) {
+            logger.error("Fallo el estado de open. Closed=" + isClosed() + " Awake=" + isAwake(), this, e);
+        }
+        setProjection(this.dataStore.getProjection());
+    }
+
+    public void draw(BufferedImage image, Graphics2D g, ViewPort viewPort, Cancellable cancel, double scale) throws ReadException {
+        TaskStatusManager manager = ToolsLocator.getTaskStatusManager();
+		SimpleTaskStatus taskStatus = new RasterTaskStatus("Drawing " + getName() + "...", cancel);
+		manager.add(taskStatus);
+		taskStatus.setAutoremove(true);
+
+        if(!firstLoad) {
+            try {
+                initFilters();
+                try {
+					if(!isOpen())
+						enableOpen();
+				} catch (NotAvailableStateException e) {
+					throw new ReadException("Fallo el estado de open. Closed=" + isClosed() + " Awake=" + isAwake(), e);
+				}
+            } catch (FilePaletteException e) {
+                logger.error(e.getMessage(), this, e);
+            }
+            firstLoad = true;
+        }
+
+        callCount = 0;
+
+        enableStopped();
+
+        if(recalcLevel) {
+			double pixelSize = viewPort.getEnvelope().getLength(0) / (double)viewPort.getImageWidth();
+			zoomLevel = dataStore.getNearestLevel(pixelSize);
+		}
+		recalcLevel = true;
+
+        if (isWithinScale(scale)) {
+
+            if(mustTileDraw) {
+                Point2D p = viewPort.getOffset();
+                Rectangle r = new Rectangle((int) p.getX(), (int) p.getY(), viewPort.getImageWidth(), viewPort.getImageHeight());
+                Tiling tiles = new Tiling(maxTileDrawWidth, maxTileDrawHeight, r);
+                tiles.setAffineTransform((AffineTransform) viewPort.getAffineTransform().clone());
+
+                for (int tileNr = 0; tileNr < tiles.getNumTiles(); tileNr++) {
+                    // drawing part
+                    try {
+                        ViewPort vp = tiles.getTileViewPort(viewPort, tileNr);
+                        drawTile(g, vp, taskStatus, scale);
+                    } catch (LoadLayerException e) {
+                        throw new ReadException(e.getMessage(), e);
+                    } catch (NoninvertibleTransformException e) {
+                        throw new ReadException(e.getMessage(), e);
+                    }
+                }
+            } else {
+                try {
+                    drawTile(g, viewPort, taskStatus, scale);
+                } catch (LoadLayerException e) {
+                    throw new ReadException(e.getMessage(), e);
+                }
+            }
+        }
+        disableStopped();
+
+        /*Runtime r = Runtime.getRuntime();
+		System.err.println("********************WCS**********************");
+		System.err.println("Memoria Total: " + (r.totalMemory() / 1024) +"KB");
+		System.err.println("Memoria Usada: " + ((r.totalMemory() - r.freeMemory()) / 1024) +"KB");
+		System.err.println("Memoria Libre: " + (r.freeMemory() / 1024) +"KB");
+		System.err.println("Memoria MaxMemory: " + (r.maxMemory() / 1024) +"KB");
+		System.err.println("*********************************************");*/
+    }
+
+    /**
+     * This is the method used to draw a tile in a WCS mosaic layer.
+     * @throws LoadLayerException
+     * @throws ReadDriverException
+     * @return true when a tile has been painted
+     */
+    private void drawTile(Graphics2D g, ViewPort vp, SimpleTaskStatus taskStatus, double scale) throws LoadLayerException, ReadException {
+        callCount++;
+
+        // Compute the query geometry
+        // 1. Check if it is within borders
+        Envelope envelope = getFullEnvelope();
+        Envelope vpEnv = vp.getAdjustedExtent();
+        if (!vpEnv.intersects(envelope)) {
+            return;
+        }
+
+        // 2. Compute extent to be requested.
+        Rectangle2D bBox = new Rectangle2D.Double();
+        Rectangle2D.intersect(getRectable2DFromEnvelope(vpEnv),
+            getRectable2DFromEnvelope(envelope), bBox);
+
+        // 3. Compute size in pixels
+        double scalex = vp.getAffineTransform().getScaleX();
+        double scaley = vp.getAffineTransform().getScaleY();
+        int wImg = (int) Math.ceil(Math.abs(bBox.getWidth() * scalex) + 1);
+        int hImg = (int) Math.ceil(Math.abs(bBox.getHeight() * scaley) + 1);
+
+        Dimension sz = new Dimension(wImg, hImg);
+
+        if ((wImg <= 0) || (hImg <= 0)) {
+            return;
+        }
+
+        try {
+            //Rectangle2D extent = new Rectangle2D.Double();
+            //Rectangle2D.Double vpExtent = this.getRectable2DFromEnvelope(vpEnv);
+            //Rectangle2D.intersect(vpExtent, bBox, extent);
+
+            Envelope vpAdjustedEnvelope = vp.getAdjustedEnvelope();
+            Extent ex = rManager.getDataStructFactory().createExtent(
+                vpAdjustedEnvelope.getMinimum(0),
+                vpAdjustedEnvelope.getMaximum(1),
+                vpAdjustedEnvelope.getMaximum(0),
+                vpAdjustedEnvelope.getMinimum(1));
+            ViewPortData vpData = rManager.getDataStructFactory().createViewPortData(vp.getProjection(), ex, sz );
+            vpData.setMat(vp.getAffineTransform());
+            vpData.setDPI((int)vp.getDPI());
+
+            try {
+                getParameters().setExtent(bBox);
+                getParameters().setWidth(wImg);
+                getParameters().setHeight(hImg);
+                if(getDataStore().getParameters() instanceof WCSDataParameters) {
+					getRender().draw(g, vpData, taskStatus);
+                } else {
+                	Envelope adjustedExtent = vp.getAdjustedExtent();
+					Extent e = rManager.getDataStructFactory().createExtent(adjustedExtent.getLowerCorner().getX(),
+							adjustedExtent.getUpperCorner().getY(), adjustedExtent.getUpperCorner().getX(),
+							adjustedExtent.getLowerCorner().getY());
+					ViewPortData vp2 = rManager.getDataStructFactory().createViewPortData(vp.getProjection(), e, vp.getImageSize() );
+					vp2.setMat(vp.getAffineTransform());
+					vp2.setDPI((int)vp.getDPI());
+					getParameters().setExtent(ex.toRectangle2D());
+					getRender().drawTiledService(g, vp2, vp.getImageSize(), taskStatus);
+                }
+            /*} catch (RasterDriverException e) {
+            	setAvailable(false);
+				JOptionPane.showMessageDialog(null, "Problems drawing this layer:" + e.getMessage(), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
+				logger.info("Problems drawing this layer:" + e.getMessage(), e);*/
+            } catch (ProcessInterruptedException e) {
+            } catch (QueryException e) {
+            	throw new RemoteServiceException("Problems drawing this layer: " + e.getMessage(), e);
+			} finally {
+            	taskStatus.terminate();
+            }
+
+        } catch (RemoteServiceException e) {
+            if (!taskStatus.isCancellationRequested()) {
+                if (callCount < MAX_RETRY_TIMES) {
+                    logger.warn("\n[ FLyrWCS.drawFixedSize() ]  Failed in trying " + callCount + "/" + MAX_RETRY_TIMES + ")\n"); // mess code
+                    drawTile(g, vp, taskStatus, scale);
+                } else {
+                    if (!isPrinting) {
+                        this.setVisible(false);
+                    }
+                    throw new LoadLayerException(getName(), e);
+                }
+            }
+        }
+        callCount--;
+        return;
+    }
+
+    /**
+     * <p>
+     * Gets the max resolution allowed by the coverage. Requesting a higher resolution
+     * than this value does not cause any error, but the info responsed is just an
+     * interpolation. <br>
+     * </p>
+     *
+     * <p>
+     * In exchange for obtaining a greater file and without additional information,
+     * we can easily fit it into the View. <br>
+     * </p>
+     *
+     * <p>
+     * Obtiene la resoluci�n m�xima soportada por la cobertura. La petici�n
+     * de una resoluci�n superior a la soportada no provoca ning�n error, aunque
+     * la informaci�n obtenida s�lo es una mera interpolaci�n de informaci�n. <br>
+     * </p>
+     *
+     * <p>
+     * A cambio de obtener un archivo mayor y sin informaci�n adicional, podemos
+     * f�cilmente acoplarlo a la vista. <br>
+     * </p>
+     *
+     * @return double
+     */
+    public Point2D getMaxResolution() {
+        return getExplorer().getMaxResolution(getName());
+    }
+
+    private Rectangle2D.Double getRectable2DFromEnvelope(Envelope env) {
+        return new Rectangle2D.Double(env.getMinimum(0), env.getMinimum(1), env
+            .getLength(0), env.getLength(1));
+    }
+
+
+    /**
+     * Gets the explorer
+     * @return
+     */
+    public WCSServerExplorer getExplorer() {
+    	try {
+			return (WCSServerExplorer)getDataStore().getExplorer();
+		} catch (ValidateDataParametersException e) {
+			logger.debug("Error getting the explorer", e);
+		} catch (DataException e) {
+			logger.debug("Error getting the explorer", e);
+		}
+    	return null;
+    }
+
+    /**
+     * Calcula el contenido del fichero de georreferenciaci�n de una imagen.
+     * @param bBox Tama�o y posici�n de la imagen (en coordenadas de usuario)
+     * @param sz Tama�o de la imagen en pixeles.
+     * @return el 'WorldFile', como String.
+     * @throws IOException
+     */
+    public String getDataWorldFile(Rectangle2D bBox, Dimension sz) throws IOException {
+        StringBuffer data = new StringBuffer();
+        data.append((bBox.getMaxX() - bBox.getMinX()) / (sz.getWidth() - 1) + "\n");
+        data.append("0.0\n");
+        data.append("0.0\n");
+        data.append("-" + (bBox.getMaxY() - bBox.getMinY()) / (sz.getHeight() - 1) + "\n");
+        data.append("" + bBox.getMinX() + "\n");
+        data.append("" + bBox.getMaxY() + "\n");
+        return data.toString();
+    }
+
+    public FLayer cloneLayer() throws Exception {
+        RasterDataStore  ds = dataStore.cloneDataStore();
+        FLyrWCS layer = new FLyrWCS();
+        layer.setName(getParameters().getCoverageName());
+        layer.setOpenRasterStore(ds);
+        layer.fullEnvelope = fullEnvelope;
+        layer.setExplorer(getExplorer());
+
+        List<RasterFilter> filters = getRender().getFilterList().getStatusCloned();
+
+        //Hacemos una copia de las bandas a renderizar
+        ColorInterpretation ci = getRender().getRenderColorInterpretation();
+		if(ci != null) {
+			layer.getRender().setRenderColorInterpretation(ci.cloneColorInterpretation());
+		}
+
+        //Asignamos el entorno
+        if(layer.getRender().getFilterList() == null)
+            layer.getRender().setFilterList(RasterLocator.getManager().createEmptyFilterList(getRender().getFilterList().getInitDataType()));
+        layer.getRender().getFilterList().setEnv(getRender().getFilterList().getEnv());
+        layer.getRender().getFilterList().setStatus(filters);
+
+        // Asignamos los valores noData del original
+        layer.setNoDataValue(getNoDataValue());
+        if(dataStore.getNoDataValue().isDefined())
+        	layer.setNoDataTransparent(true);
+        layer.enableOpen();
+
+        return layer;
+    }
+
+    public Transparency getRenderTransparency() {
+        return getRender().getRenderingTransparency();
+    }
+
+    public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel, double scale, PrintRequestAttributeSet properties) throws ReadException {
+        if (isVisible() && isWithinScale(scale)){
+            draw(null, g, viewPort, cancel, scale);
+        }
+    }
+
+    /**
+     * Inserta la extensi�n total de la capa en la proyeccion original.
+     *
+     * @param fullExtent
+     *            Rect�ngulo.
+     */
+    public void setFullEnvelope(Envelope envelope) {
+        Envelope cur = this.getFullEnvelope();
+        if (cur == envelope) {
+            return;
+        }
+        if (cur != null && cur.equals(envelope)) {
+            return;
+        }
+
+        this.fullEnvelope = envelope;
+        this.updateDrawVersion();
+    }
+
+    /**
+     * Sets the layer's full extent.
+     *
+     * Establece la extensi�n m�xima de la capa.
+     *
+     * @param rect
+     */
+    public void setFullExtent(Rectangle2D fullExtent) {
+        this.setFullEnvelope(this.getEnvelopeFromRectable2D(fullExtent));
+    }
+
+    private Envelope getEnvelopeFromRectable2D(Rectangle2D rect) {
+        try {
+            return geomManager.createEnvelope(rect.getMinX(), rect.getMinY(),
+                rect.getMaxX(), rect.getMaxY(),
+                SUBTYPES.GEOM2D);
+        } catch (CreateEnvelopeException e) {
+            logger.error("Error creating the envelope", e);
+        }
+        return null;
+    }
+
+
+    public HashMap<String, Object> getProperties() {
+        HashMap<String, Object> info = new HashMap<String, Object>();
+        try {
+            info.put("name", getName());
+            info.put("selectedLayers", getParameters().getCoverageName());
+            info.put("host", getParameters().getURI());
+            info.put("crs", getParameters().getSRSCode());
+            info.put("format", getParameters().getFormat());
+            info.put("time", getParameters().getTime());
+            return info;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public int[] getTileSize() {
+        int[] size = {maxTileDrawWidth, maxTileDrawHeight};
+        return size;
+    }
+
+    public String getTocImageIcon() {
+        return "ico-WCS-Layer";
+    }
+
+    public boolean isTiled() {
+        return mustTileDraw;
+    }
+
+	public boolean isRemote() {
+		return true;
+	}
+
+    @Override
+    public DynObjectSet getInfo(Point p, double tolerance, Cancellable cancel,
+        boolean fast) throws LoadLayerException, DataException {
+
+        //try {
+        ViewPort viewPort = getMapContext().getViewPort();
+
+        Point tiledPoint = new Point((int) p.getX() % maxTilePrintWidth, (int) p.getY() % maxTilePrintHeight);
+        Rectangle rect = new Rectangle(0, 0, viewPort.getImageWidth() - 1, viewPort.getImageHeight() - 1);
+        Tiling tiles = new Tiling(maxTilePrintWidth, maxTilePrintHeight, rect);
+        tiles.setAffineTransform((AffineTransform) viewPort.getAffineTransform().clone());
+        int nCols = tiles.getNumCols();
+
+        int col = (int) p.getX() / maxTilePrintWidth;
+        int row = (int) p.getY() / maxTilePrintHeight;
+        int tileIndex = (row * nCols) + col;
+
+        ViewPort vp = null;
+        try {
+            vp = tiles.getTileViewPort(viewPort, tileIndex);
+        } catch (NoninvertibleTransformException e1) {
+            throw new LoadLayerException("", e1);
+        }
+
+        getParameters().setExtent(this.getRectable2DFromEnvelope(vp.getAdjustedExtent()));
+        getParameters().setWidth(vp.getImageWidth());
+        getParameters().setHeight(vp.getImageHeight());
+
+        CancelTaskImpl cancellable = new CancelTaskImpl(cancel);
+        getParameters().setCancellable(cancellable);
+
+        String fInfo;
+        try {
+            fInfo = getDataStore().getInfoByPoint(tiledPoint.getX(), tiledPoint.getY(), cancellable);
+        } catch (InfoByPointException e) {
+            throw new LoadLayerException("Error in getInfoByPoint", e);
+        }
+        return new DynObjectSetWCSInfo(fInfo, DynObjectSetWCSInfo.TYPE_TEXT);
+    }
+
+	@Override
+	public String getFileFormat() {
+		return "WCS";
+	}
+
+    public boolean isActionEnabled(int action) {
+        switch (action) {
+        case IRasterLayerActions.ZOOM_PIXEL_RESOLUTION:
+        case IRasterLayerActions.FLYRASTER_BAR_TOOLS:
+        case IRasterLayerActions.BANDS_FILE_LIST:
+        case IRasterLayerActions.GEOLOCATION:
+        case IRasterLayerActions.PANSHARPENING:
+        case IRasterLayerActions.SAVE_COLORINTERP:
+            return false;
+        case IRasterLayerActions.BANDS_RGB:
+        case IRasterLayerActions.REMOTE_ACTIONS:
+        case IRasterLayerActions.COLOR_TABLE:
+            return true;
+        }
+
+        return super.isActionEnabled(action);
+    }
+
+    public boolean overviewsSupport() {
+        return false;
+    }
+
+    public org.gvsig.fmap.dal.coverage.datastruct.Extent getFullRasterExtent() {
+        Envelope env = getFullEnvelope();
+        double minx = env.getMinimum(0);
+        double miny = env.getMinimum(1);
+        double maxx = env.getMaximum(0);
+        double maxy = env.getMaximum(1);
+        Point2D ul = new Point2D.Double(minx, maxy);
+        Point2D ur = new Point2D.Double(maxx, maxy);
+        Point2D ll = new Point2D.Double(minx, miny);
+        Point2D lr = new Point2D.Double(maxx, miny);
+        return rManager.getDataStructFactory().createExtent(ul, lr, ur, ll);
+    }
+
+    public WCSDataParameters getParameters() {
+        /*if(params == null) {
+            DataManager datamanager = DALLocator.getDataManager();
+            WCSServerExplorerParameters explorerParams = null;
+            try {
+                explorerParams = (WCSServerExplorerParameters) datamanager.createServerExplorerParameters(WCSServerExplorer.NAME);
+                explorerParams.setHost("");
+                explorer = (WCSServerExplorer) datamanager.createServerExplorer(explorerParams);
+                DataStoreParameters parameters = explorer.getStoreParameters();
+                if(parameters instanceof WCSDataParameters) {
+                    params = (WCSDataParameters) parameters;
+                }
+            } catch (InitializeException e) {
+            } catch (ProviderNotRegisteredException e) {
+            } catch (ValidateDataParametersException e) {
+            }
+        }*/
+        return getWCSParameters(getDataStore().getParameters());
+    }
+
+    /**
+     * Gets <code>WCSDataParameters</code>
+     * @param parameters
+     * @return
+     */
+    private WCSDataParameters getWCSParameters(DataStoreParameters parameters) {
+    	WCSDataParameters params = null;
+    	if(parameters instanceof WCSDataParameters) {
+			params = (WCSDataParameters) parameters;
+		}
+
+		if(parameters instanceof TileDataParameters) {
+			DataParameters p = ((TileDataParameters) parameters).getDataParameters();
+			if(p instanceof WCSDataParameters) {
+				params = (WCSDataParameters) p;
+			}
+		}
+		return params;
+    }
+
+    /**
+     * Sets the explorer
+     * @param explorer
+     */
+    public void setExplorer(WCSServerExplorer explorer) {
+    	if(getDataStore() != null)
+    		getDataStore().setExplorer(explorer);
+    }
+
+    /**
+	 * Assigns the flag to delete this layer from the cache
+	 * @param selected
+	 */
+	public void deleteCache(boolean deleteCache) {
+		this.deleteCache = deleteCache;
+	}
+
+    /**
+     * Sets the data store parameters
+     * @param params
+     * @throws InitializeException
+     */
+    public void setParameters(DataStoreParameters params) throws InitializeException {
+        if(params instanceof TileDataParameters) {
+			((TileDataParameters)params).deleteCache(deleteCache);
+		}
+
+        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
+        try {
+            DataStore dStore = dataman.openStore(params.getDataStoreName(), params);
+            this.setDataStore(dStore);
+
+			if(params instanceof WCSDataParameters) {
+				this.setName(((WCSDataParameters)params).getURI().getPath());
+			}
+
+			if(params instanceof TileDataParameters) {
+				DataParameters p = ((TileDataParameters) params).getDataParameters();
+				if(p instanceof WCSDataParameters) {
+					this.setName(((WCSDataParameters)p).getURI().getPath());
+				}
+			}
+        } catch (ValidateDataParametersException e) {
+            throw new InitializeException(e);
+        } catch (ProviderNotRegisteredException e) {
+            throw new InitializeException(e);
+        } catch (LoadLayerException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+	/*@Override
+	public void loadFromState(PersistentState state)
+	throws PersistenceException {
+		String host = state.getString("host");
+
+		getParameters();
+		((WCSServerExplorerParameters)explorer.getParameters()).setHost(host);
+
+		if(!explorer.isHostReachable()) {
+			loadDataStore = false;
+			super.loadFromState(state);
+			return;
+		}
+
+		try {
+			explorer.connect(new CancelTaskImpl());
+			explorer.getCoverageList();
+		} catch (Exception e) {
+			loadDataStore = false;
+			super.loadFromState(state);
+			return;
+		}
+
+		loadDataStore = true;
+
+		super.loadFromState(state);
+		params = getDataStore().getParameters();
+		this.fullEnvelope = (Envelope) state.get("fullEnvelope");
+		try {
+			if(this.dataStore.isOpen())
+				enableOpen();
+		} catch (NotAvailableStateException e) {
+			logger.error("Fallo el estado de open. Closed=" + isClosed() + " Awake=" + isAwake(), this, e);
+		}
+		//getParameters().setCoverageName((String)state.get("name"));
+	}*/
+
+    /*@Override
+	public void saveToState(PersistentState state) throws PersistenceException {
+		super.saveToState(state);
+		state.set("fullEnvelope", this.fullEnvelope);
+		state.set("host", getParameters().getURI());
+		state.set("name", getName());
+	}*/
+
+	/*public static void registerPersistent() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.getDefinition(PERSISTENT_NAME);
+		if( definition == null ) {
+			if (manager.getDefinition(FLyrDefault.class) == null) {
+				FLyrDefault.registerPersistent();
+			}
+
+			definition = manager.addDefinition(
+					FLyrWCS.class,
+					PERSISTENT_NAME,
+					PERSISTENT_DESCRIPTION,
+					null,
+					null
+			);
+
+			definition.extend(PersistenceManager.PERSISTENCE_NAMESPACE, "FLyrDefault");
+		}
+
+		DefaultFLyrRaster.registerPersistence(definition);
+		definition.addDynFieldObject("fullEnvelope").setClassOfValue(Envelope.class).setMandatory(false);
+		definition.addDynFieldString("host").setMandatory(false);
+		definition.addDynFieldString("name").setMandatory(false);
+	}*/
+
+	public static void registerPersistent() {
+		PersistenceManager manager = ToolsLocator.getPersistenceManager();
+		DynStruct definition = manager.getDefinition("FLyrWCS_Persistent");
+		if( definition == null ) {
+			if (manager.getDefinition(DefaultFLyrRaster.class) == null) {
+				DefaultFLyrRaster.registerPersistence();
+			}
+
+			definition = manager.addDefinition(
+					FLyrWCS.class,
+					"FLyrWCS_Persistent",
+					"FLyrWCS Persistent Definition",
+					null,
+					null
+			);
+
+			definition.extend(PersistenceManager.PERSISTENCE_NAMESPACE, DefaultFLyrRaster.PERSISTENT_NAME);
+		}
+
+		DefaultFLyrRaster.registerPersistence(definition);
+	}
+}

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/layer/FLyrWCS.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/exception/WCSDriverExceptionType.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/exception/WCSDriverExceptionType.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/exception/WCSDriverExceptionType.java	(revision 6982)
@@ -0,0 +1,55 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+*
+* Copyright (C) 2007-2008 Infrastructures and Transports Department
+* of the Valencian Government (CIT)
+* 
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+* MA  02110-1301, USA.
+* 
+*/
+package org.gvsig.raster.wcs.app.wcsclient.exception;
+
+import org.gvsig.remoteclient.wcs.WCSStatus;
+import org.gvsig.utils.ExceptionDescription;
+
+
+public class WCSDriverExceptionType extends ExceptionDescription {
+
+	WCSStatus status;
+	
+	public WCSDriverExceptionType(){
+		super(60, "Error al acceder a un servicio WCS");
+		
+	}
+	
+	public String getHtmlErrorMessage() {
+		String message = "<p><b>Error en una petici�n a servidor WCS</b></p>";
+		message += "Informaci�n adicional:<br>";
+		message += "Mensaje del error: " + status.getMessage();
+		message += "Direcci�n: " + status.getOnlineResource();
+		message += "<br> Par�metros: "+status.getParameters();
+		return message;
+	}
+
+	public WCSStatus getWcsStatus() {
+		return status;
+	}
+
+	public void setWcsStatus(WCSStatus wcsStatus) {
+		this.status = wcsStatus;
+	}
+
+}
+

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/java/org/gvsig/raster/wcs/app/wcsclient/exception/WCSDriverExceptionType.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_en.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_en.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_en.properties	(revision 6982)
@@ -0,0 +1,93 @@
+#Translations for language [en]
+#Tue Jan 20 17:39:04 CET 2009
+abstract=Abstract
+Aceptar=Accept
+Anadir=Add
+ancho_alto=Width x Height
+anterior=Previous
+Aplicar=Apply
+Apply=Apply
+bandas=Bands
+brillo=Brightness
+brillo_y_contraste=Brightness and Contrast
+Cancel=Cancel
+Cancelar=Cancel
+connect=Connect
+connect_error=Error connecting
+contraste=Contrast
+coor_geograficas=Geographic coordinates
+coverage=Coverage
+covered_extension=Covered extension
+descripcion=Description
+Eliminar=Delete
+eliminar_extremos=Remove edges
+extents_no_coincidentes=Extent of the selected image does not match with the origin image.
+Fichero=File
+fichero_existe=Selected file already exists as layer band
+fit_WCS_layer=Fit WCS layer
+format=Format
+formato=Format
+georeferenciado=Georeferenced
+info=Information
+Informacion=Information
+Layer=Layer
+layer_abstract=Abstract
+layer_title=Layer title
+lineal_directo=Direct linear
+m/pixel=metros/pixel
+metadatos=Metadatos
+name=Name
+nombre=Name
+nombre_cobertura=Coverage's name
+none_selected=None selected
+not_available=Not available
+num_bandas=Band count
+Ok=Ok
+opacidad=Opacity
+origen_de_datos=Data origin
+parameters=Parameters
+previsualizacion=Preview
+properties=Properties
+propiedades_raster=Raster properties
+Proyecciones=Projections
+realce=Enhance
+recorte_colas=Tail trimming
+refresh_capabilities=Refresh cache
+refresh_capabilities_tooltip=Mark this check to override local data
+seleccionar_coberturas=Select Coverages
+seleccionar_CRS=Select CRS
+seleccionar_formato=Select format
+seleccionar_parametros=Select parameters
+seleccionar_tiempo=Select time position
+selected_layers=Selected layers
+selected_parameters=Selected parameters
+server=Server
+server_abstract=Summary
+server_title=Title
+server_type=Server Type
+service_info=Service information
+show_layer_names=Show layer names
+si=yes
+siguiente=Next
+tamano=Size\:
+tamPixX=Pixel size X
+tamPixY=Pixel size Y
+time=Time
+tipo_dato=Data type
+transparencia=Transparency
+unknown_response_format=Unkown response format
+use_interpolation_method=Use interpolation method
+version_conflict=Version conflict
+wcs_cant_connect=Can\u0092t connect to WCS
+wcs_properties=WCS properties
+WCS_properties=WCS Properties
+wcs_server_error=WCS server error
+wcs_server_timeout=Server timeout
+xmax=Maximum X
+xmin=Minimum X
+ymax=Maximum Y
+ymin=Minimum Y
+Zoom_pixel=Zoom to raster resolution
+host_unreachable=The host is unreachable. Maybe the network is not connected or the host off.
+ip_unknown=IP address unknown 
+network_error=Error with the network connection

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_en.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_gl.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_gl.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_gl.properties	(revision 6982)
@@ -0,0 +1,88 @@
+#Translations for language [gl]
+#Mon Oct 30 09:38:21 CET 2006
+abstract=Resumo
+Aceptar=Aceptar
+Anadir=Engadir
+ancho_alto=Ancho alto
+anterior=Anterior
+Aplicar=Aplicar
+Apply=Aplicar
+bandas=Bandas
+brillo=Brillo
+brillo_y_contraste=Brillo e Contraste
+Cancel=Cancelar
+Cancelar=Cancelar
+connect=Conectar
+connect_error=Erro de conexi\u00f3n
+contraste=Contraste
+coor_geograficas=Coordenadas xeogr\u00e1ficas
+coverage=
+covered_extension=Cobertura da extensi\u00f3n
+descripcion=Descrici\u00f3n
+Eliminar=Eliminar
+eliminar_extremos=Eliminar extremos
+extents_no_coincidentes=Extensi\u00f3ns non coincidentes
+Fichero=Arquivo
+fichero_existe=Arquivo existe
+fit_WCS_layer=Axustar capa WCS
+format=Formato
+formato=Formato
+georeferenciado=
+info=Informaci\u00f3n
+Informacion=Informaci\u00f3n
+Layer=Capa
+layer_abstract=Resumo da capa
+layer_title=T\u00edtulo da capa
+lineal_directo=Lineal directo
+m/pixel=metros/pixel
+metadatos=Metadatos
+name=Nome
+nombre=Nome
+nombre_cobertura=Nome cobertura
+none_selected=Ning\u00fan seleccionado
+not_available=Non dispo\u00f1ible
+num_bandas=N\u00famero de bandas
+Ok=Aceptar
+opacidad=Opacidade
+origen_de_datos=Origen de dades
+parameters=Par\u00e1metros
+previsualizacion=Previsualizaci\u00f3n
+properties=Propiedades
+propiedades_raster=Propiedades do raster
+Proyecciones=
+realce=Realce
+recorte_colas=Recorte colas
+seleccionar_coberturas=Seleccionar coberturas
+seleccionar_CRS=Seleccionar CRS
+seleccionar_formato=Seleccionar formato
+seleccionar_parametros=Seleccionar par\u00e1metros
+seleccionar_tiempo=Seleccionar tempo
+selected_layers=Capas seleccionadas
+selected_parameters=Par\u00e1metros seleccionados
+server=Servidor
+server_abstract=Resumo do servidor
+server_title=T\u00edtulo do servidor
+server_type=Tipo de servidor
+service_info=Informaci\u00f3n do servicio
+show_layer_names=Amosar nomes de capas
+si=
+siguiente=Seguinte
+tamano=Tama\u00f1o\:
+tamPixX=
+tamPixY=
+time=Tempo
+tipo_dato=Tipo dato
+transparencia=Transparencia
+unknown_response_format=Formato de resposta desco\u00f1ecido
+use_interpolation_method=
+version_conflict=Conflicto de versi\u00f3n
+wcs_cant_connect=
+wcs_properties=Propiedades de WCS
+WCS_properties=Propiedades do WCS
+wcs_server_error=Erro no servidor WCS
+wcs_server_timeout=
+xmax=xmax
+xmin=xmin
+ymax=ymax
+ymin=ymin
+Zoom_pixel=Zoom pixel

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_gl.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/config.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/config.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/config.xml	(revision 6982)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugin-config>
+	<depends plugin-name="org.gvsig.raster.mainplugin"/>
+	<depends plugin-name="org.gvsig.raster.tilecache.app" optional="true" />
+	<libraries library-dir="lib"/>
+	<resourceBundle name="text"/>
+	<extensions>
+		<extension class-name="org.gvsig.raster.wcs.app.wcsclient.WCSClientExtension"
+			description="M�dulo de WCSClient." 
+			active="true" 
+			priority="1">
+			<menu text="Layer/WCS_properties" 
+				name="raster-wcs-properties"/>
+				
+			<action 
+        		name="raster-wcs-properties"
+       			label="WCS_properties"
+        		action-command="properties" 
+        		position="8"
+        	/>
+		
+		</extension>
+	</extensions>
+	
+					
+</plugin-config>

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/config.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_cs.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_cs.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_cs.properties	(revision 6982)
@@ -0,0 +1,88 @@
+#Translations for language [cs]
+#Mon Nov 06 09:04:31 CET 2006
+abstract=Abstrakt
+Aceptar=Budi\u017e
+Anadir=P\u0159idat
+ancho_alto=\u0160\u00ed\u0159ka X v\u00fd\u0161ka
+anterior=P\u0159edchoz\u00ed
+Aplicar=Pou\u017e\u00edt
+Apply=Pou\u017e\u00edt
+bandas=Okraje
+brillo=Jas
+brillo_y_contraste=Jas a kontrats
+Cancel=Zru\u0161it
+Cancelar=Zru\u0161it
+connect=Spoj
+connect_error=Chyba spojen\u00ed
+contraste=Contrast
+coor_geograficas=Geografick\u00e9 sou\u0159adnice
+coverage=Pokryt\u00ed
+covered_extension=Roz\u0161\u00ed\u0159en\u00ed
+descripcion=Popis
+Eliminar=Smazat
+eliminar_extremos=Odstranit hrany
+extents_no_coincidentes=Zvolen\u00e1 hranice nesouhlas\u00ed s p\u016fvodn\u00edm obr\u00e1zkem.
+Fichero=Soubor
+fichero_existe=Zvolen\u00fd soubor ji\u017e existuje jako vrstva
+fit_WCS_layer=P\u0159izp\u016fsobit WCS vrstvu
+format=Form\u00e1t
+formato=Form\u00e1t
+georeferenciado=Georeferencovan\u00fd
+info=Informace
+Informacion=Informace
+Layer=Vrstva
+layer_abstract=Abstrakt
+layer_title=N\u00e1zev vrstvy
+lineal_directo=P\u0159\u00edmo line\u00e1rn\u00ed
+m/pixel=metros/pixel
+metadatos=Metadatos
+name=Jm\u00e9no
+nombre=Jm\u00e9no
+nombre_cobertura=N\u00e1zev pokryt\u00ed
+none_selected=Nic nezvoleno
+not_available=Nen\u00ed k dispozici
+num_bandas=Okrajov\u00e9 hodnoty
+Ok=Budi\u017e
+opacidad=Stupe\u0148 pr\u016fsvitnosti
+origen_de_datos=P\u016fvod dat
+parameters=Parametry
+previsualizacion=Preview
+properties=Vlastnosti
+propiedades_raster=Vlastnosti rastru
+Proyecciones=Projekce
+realce=vylep\u0161en\u00ed
+recorte_colas=O\u0159ez fronty
+seleccionar_coberturas=Vybrat p\u0159ekryvy
+seleccionar_CRS=Vybrat CRS
+seleccionar_formato=Vybrat form\u00e1t
+seleccionar_parametros=Vybrat parametry
+seleccionar_tiempo=Nastavit \u010das
+selected_layers=Zvolen\u00e9 vrstvy
+selected_parameters=Vybran\u00e9 parametry
+server=Server
+server_abstract=Shrnut\u00ed
+server_title=N\u00e1zev
+server_type=Typ serveru
+service_info=Informace o serveru
+show_layer_names=Zobraz jm\u00e9na
+si=ano
+siguiente=Dal\u0161\u00ed
+tamano=Velikost\:
+tamPixX=Velikost pixlu X
+tamPixY=Velikost pixlu Y  
+time=\u010cas
+tipo_dato=Datov\u00fd typ
+transparencia=Pr\u016fhlednost
+unknown_response_format=Nezn\u00e1m\u00fd form\u00e1t odpov\u011bdi
+use_interpolation_method=Pou\u017e\u00edj interpola\u010dn\u00ed met\u00f3du
+version_conflict=Konflikt verz\u00ed
+wcs_cant_connect=Nelze se p\u0159ipojit k WCS
+wcs_properties=WCS vlastnosti
+WCS_properties=WCS vlastnosti
+wcs_server_error=Chyba WCS serveru
+wcs_server_timeout=Timeout serveru
+xmax=maximum X
+xmin=minimum X
+ymax=maximum Y
+ymin=minimum Y
+Zoom_pixel=Zoom na rozli\u0161en\u00ed rastru

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_cs.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/images/ico-WCS-Layer.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/images/ico-WCS-Layer.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/images/view-previsualize-area.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/images/view-previsualize-area.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_fr.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_fr.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_fr.properties	(revision 6982)
@@ -0,0 +1,88 @@
+#Translations for language [fr]
+#Mon Oct 30 09:38:21 CET 2006
+abstract=R\u00e9sum\u00e9
+Aceptar=Accepter
+Anadir=Ajouter
+ancho_alto=Largeur X hauteur
+anterior=Pr\u00e9c\u00e9dent
+Aplicar=Appliquer
+Apply=Appliquer
+bandas=Bandes
+brillo=Luminosit\u00e9
+brillo_y_contraste=Luminosit\u00e9 et contrate
+Cancel=Annuler
+Cancelar=Annuler
+connect=
+connect_error=
+contraste=Contraste
+coor_geograficas=Coordonn\u00e9es g\u00e9ographiques
+coverage=
+covered_extension=
+descripcion=Description
+Eliminar=Supprimer
+eliminar_extremos=Eliminer les extr\u00eames
+extents_no_coincidentes=Les dimmensions de l'image selectionn\u00e9e ne co\u00efncident pas avec celles de l'image d'origine.
+Fichero=Fichier
+fichero_existe=Le fichier selectionn\u00e9 existe d\u00e9j\u00e0
+fit_WCS_layer=
+format=Format
+formato=Format
+georeferenciado=
+info=Information
+Informacion=
+Layer=Couche
+layer_abstract=R\u00e9sum\u00e9
+layer_title=Titre de la couche
+lineal_directo=Lin\u00e9aire direct
+m/pixel=metros/pixel
+metadatos=Metadatos
+name=Nom
+nombre=Nom
+nombre_cobertura=Nom de la couverture
+none_selected=Aucune selection
+not_available=No disponible
+num_bandas=Nombre de bandes
+Ok=Accepter
+opacidad=Opacit\u00e9
+origen_de_datos=Origine des donn\u00e9es
+parameters=Param\u00e8tres
+previsualizacion=Pr\u00e9visualisation.
+properties=Propri\u00e9t\u00e9s
+propiedades_raster=Propri\u00e9t\u00e9s du raster
+Proyecciones=
+realce=R\u00e9heussement
+recorte_colas=Couper les r\u00e9sidus
+seleccionar_coberturas=Selectionner couvertures
+seleccionar_CRS=Selectionner CRS
+seleccionar_formato=S\u00e9lectionner un format
+seleccionar_parametros=Selectionner les param\u00e8tres
+seleccionar_tiempo=Selectionner la position pour le temps
+selected_layers=Couches s\u00e9lectionn\u00e9es
+selected_parameters=
+server=Serveur
+server_abstract=R\u00e9sum\u00e9
+server_title=Titre
+server_type=Type de server
+service_info=Information sur le service
+show_layer_names=
+si=
+siguiente=Suivant
+tamano=Taille\:
+tamPixX=
+tamPixY=
+time=Temps
+tipo_dato=Type de donn\u00e9e
+transparencia=Transparence
+unknown_response_format=
+use_interpolation_method=
+version_conflict=Conflicte de versi\u00f3
+wcs_cant_connect=
+wcs_properties=Propri\u00e9t\u00e9s WCS
+WCS_properties=Propietats del WCS
+wcs_server_error=
+wcs_server_timeout=
+xmax=X minimum
+xmin=X minimum
+ymax=Y minimum
+ymin=Y minimum
+Zoom_pixel=Zoom a la r\u00e9solution du raster

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/plugin.dtd
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/plugin.dtd	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/plugin.dtd	(revision 6982)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="ISO_8859-1"?>
+<!ELEMENT class EMPTY >
+<!ATTLIST class name NMTOKEN #REQUIRED >
+
+<!ELEMENT extension ( class | menu | toolBar | toolBoxItem | popupMenu)* >
+<!ATTLIST extension enabled NMTOKEN #IMPLIED >
+<!ATTLIST extension position NMTOKEN #IMPLIED >
+
+<!ELEMENT fileExtension ( class ) >
+<!ATTLIST fileExtension description CDATA #REQUIRED >
+<!ATTLIST fileExtension enabled NMTOKEN #IMPLIED >
+<!ATTLIST fileExtension endsWith CDATA #REQUIRED >
+<!ATTLIST fileExtension dialog CDATA #REQUIRED >
+
+<!ELEMENT import EMPTY >
+<!ATTLIST import plugin NMTOKEN #REQUIRED >
+
+<!ELEMENT libraries ( library+ ) >
+
+<!ELEMENT library EMPTY >
+<!ATTLIST library file NMTOKEN #REQUIRED >
+
+<!ELEMENT menu EMPTY >
+<!ATTLIST menu actionCommand NMTOKEN #IMPLIED >
+<!ATTLIST menu enableText CDATA #IMPLIED >
+<!ATTLIST menu key NMTOKEN #IMPLIED >
+<!ATTLIST menu mnemonic NMTOKEN #IMPLIED >
+<!ATTLIST menu icon CDATA #IMPLIED >
+<!ATTLIST menu text CDATA #REQUIRED >
+<!ATTLIST menu tooltip CDATA #IMPLIED >
+
+<!ELEMENT plugin ( import*, libraries, resourceBundle, labelSet*, extension*, fileExtension*, icon*) >
+
+<!ELEMENT icon EMPTY >
+<!ATTLIST icon src CDATA #REQUIRED >
+<!ATTLIST icon text CDATA #REQUIRED >
+
+<!ELEMENT resourceBundle EMPTY >
+<!ATTLIST resourceBundle name NMTOKEN #REQUIRED >
+
+<!ELEMENT tool EMPTY >
+<!ATTLIST tool actionCommand NMTOKEN #IMPLIED >
+<!ATTLIST tool enableText CDATA #IMPLIED >
+<!ATTLIST tool icon CDATA #IMPLIED >
+<!ATTLIST tool text NMTOKEN #IMPLIED >
+<!ATTLIST tool tooltip CDATA #IMPLIED >
+
+<!ELEMENT toolBar ( tool+ ) >
+<!ATTLIST toolBar name NMTOKEN #IMPLIED >
+
+<!ELEMENT entry EMPTY >
+<!ATTLIST entry text CDATA #IMPLIED >
+<!ATTLIST entry enableText CDATA #IMPLIED >
+<!ATTLIST entry tooltip CDATA #IMPLIED >
+<!ATTLIST entry actionCommand NMTOKEN #IMPLIED >
+
+<!ELEMENT popupMenu ( entry+ ) >
+<!ATTLIST popupMenu name NMTOKEN #IMPLIED >
+
+<!ELEMENT labelSet ( label+ ) >
+<!ATTLIST labelSet class NMTOKEN #REQUIRED >
+
+<!ELEMENT label EMPTY >
+<!ATTLIST label text NMTOKEN #REQUIRED >
+<!ATTLIST label size NMTOKEN #IMPLIED>
+
+<!ELEMENT toolBoxItem EMPTY >
+<!ATTLIST toolBoxItem default NMTOKEN #IMPLIED >
+<!ATTLIST toolBoxItem actionCommand NMTOKEN #IMPLIED >
+<!ATTLIST toolBoxItem icon CDATA #IMPLIED >
+<!ATTLIST toolBoxItem text CDATA #IMPLIED >
+<!ATTLIST toolBoxItem tooltip CDATA #IMPLIED >
\ No newline at end of file

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/plugin.dtd
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_eu.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_eu.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_eu.properties	(revision 6982)
@@ -0,0 +1,88 @@
+#Translations for language [eu]
+#Mon Oct 30 09:38:21 CET 2006
+abstract=Laburpena
+Aceptar=Ados
+Anadir=Gehitu
+ancho_alto=Zabalera altuera
+anterior=Aurrekoa
+Aplicar=Aplikatu
+Apply=Aplikatu
+bandas=Bandak
+brillo=Distira
+brillo_y_contraste=Distira eta kontrastea
+Cancel=Utzi
+Cancelar=Utzi
+connect=Konektatu
+connect_error=Konexio-errorea
+contraste=Kontrastea
+coor_geograficas=Koordenatu geografikoak
+coverage=Estaldura
+covered_extension=Hedaduraren estaldura
+descripcion=Deskripzioa
+Eliminar=Ezabatu
+eliminar_extremos=Ezabatu muturrak
+extents_no_coincidentes=Hedadurak ez datoz bat
+Fichero=Fitxategia
+fichero_existe=Fitxategia badago
+fit_WCS_layer=Doitu WCS geruza
+format=Formatua
+formato=Formatua
+georeferenciado=
+info=Informazioa
+Informacion=Informazioa
+Layer=Geruze
+layer_abstract=Laburpena
+layer_title=Geruzaren izenburua
+lineal_directo=Zuzeneko lineala
+m/pixel=metros/pixel
+metadatos=Metadatos
+name=Izena
+nombre=Izena
+nombre_cobertura=Estalduraren izena
+none_selected=Ez da bat ere ez hautatu
+not_available=Ez dago erabilgarri
+num_bandas=Banda kopurua
+Ok=Ados
+opacidad=Opakotasuna
+origen_de_datos=Datu-iturburua
+parameters=Parametroak
+previsualizacion=Aurrebista
+properties=Ezaugarriak
+propiedades_raster=Raster-aren ezaugarriak
+Proyecciones=
+realce=Irtengunea
+recorte_colas=Ilarak ebaki
+seleccionar_coberturas=Hautatu estaldura
+seleccionar_CRS=Hautatu CRS
+seleccionar_formato=Hautatu formatua
+seleccionar_parametros=Hautatu parametroak
+seleccionar_tiempo=Hautatu denbora
+selected_layers=Hautatutako geruzak
+selected_parameters=Hautatutako parametroak
+server=Zerbitzaria
+server_abstract=Aurkibidea
+server_title=Zerbitzariaren izenburua
+server_type=Zerbitzari mota
+service_info=Zerbitzuari buruzko argibideak
+show_layer_names=Erakutsi geruzen izenak
+si=
+siguiente=Hurrengoa
+tamano=Tamaina\:
+tamPixX=
+tamPixY=
+time=Denbora
+tipo_dato=Datu mota
+transparencia=Gardentasuna
+unknown_response_format=Erantzunaren formatua ezezaguna da
+use_interpolation_method=Erabili interpolazio metodoa
+version_conflict=Bertsio-gatazka
+wcs_cant_connect=
+wcs_properties=WCS-aren ezaugarriak
+WCS_properties=WCS-aren ezaugarriak
+wcs_server_error=Errorea WCS zerbitzarian.
+wcs_server_timeout=
+xmax=xmax
+xmin=xmin
+ymax=ymax
+ymin=ymin
+Zoom_pixel=Pixelaren zooma

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_eu.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_it.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_it.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_it.properties	(revision 6982)
@@ -0,0 +1,88 @@
+#Translations for language [it]
+#Tue Nov 07 12:30:01 CET 2006
+abstract=Riassunto
+Aceptar=Accetta
+Anadir=Aggiungi
+ancho_alto=Larghezza X Altezza
+anterior=Precedente
+Aplicar=Applica
+Apply=Applica
+bandas=Bande
+brillo=Luminosit\u00e1
+brillo_y_contraste=Luminosit\u00e0 e Contrasto
+Cancel=Cancella
+Cancelar=Cancella
+connect=Conettere
+connect_error=Errore di connessione
+contraste=Contrasto
+coor_geograficas=Coordinate geografiche
+coverage=Copertura
+covered_extension=Copertura dell'estenzione
+descripcion=Descrizione
+Eliminar=Elimina
+eliminar_extremos=Elimina gli estremi
+extents_no_coincidentes=L'estensione della immagine selezionata non coincide con la immagine di origine.
+Fichero=File
+fichero_existe=Il file selezionato esiste gi\u00e1 come banda del layer
+fit_WCS_layer=Adatta layer WCS
+format=Formato
+formato=Formato
+georeferenciado=Georeferenziando
+info=Informazione
+Informacion=Informazione
+Layer=Livello
+layer_abstract=Riassunto del Layer
+layer_title=Titolo del layer
+lineal_directo=Lineare diretto
+m/pixel=metri/pixel
+metadatos=Metadati
+name=Nome
+nombre=Nome
+nombre_cobertura=Nome della copertura
+none_selected=Nessuna selezione
+not_available=Non disponible
+num_bandas=Numero delle bande
+Ok=Accetta
+opacidad=Opacit\u00e1
+origen_de_datos=Origine dei dati
+parameters=Parametri
+previsualizacion=Anteprima
+properties=Propriet\u00e1
+propiedades_raster=Propriet\u00e1 del raster
+Proyecciones=Proiezioni
+realce=Ottimizzazione
+recorte_colas=Ritaglio degli estremi
+seleccionar_coberturas=Seleziona coperture
+seleccionar_CRS=Seleziona CRS
+seleccionar_formato=Seleziona formato
+seleccionar_parametros=Seleziona i parametri
+seleccionar_tiempo=Seleziona il tempo
+selected_layers=Layers selezionati
+selected_parameters=Parametri selezionati
+server=Server
+server_abstract=Sommario del Server
+server_title=Nome del Server
+server_type=Tipo di Server
+service_info=Informazione del servizio
+show_layer_names=Mostra i nomi dei layers
+si=si
+siguiente=Successivo
+tamano=Dimensione\:
+tamPixX=Dimensione pixel X
+tamPixY=Dimensione pixel Y
+time=Tempo
+tipo_dato=Tipo di Dato
+transparencia=Transparenza
+unknown_response_format=Formato di risposta sconosciuto
+use_interpolation_method=Usa metodo di interpolazione
+version_conflict=Conflitto di versione
+wcs_cant_connect=Impossibile connettersi al WCS
+wcs_properties=Propriet\u00e1 WCS
+WCS_properties=Propriet\u00e1 WCS
+wcs_server_error=Errore nel server WCS
+wcs_server_timeout=WCS Server timeout
+xmax=X massima
+xmin=X minima
+ymax=Y massima
+ymin=Y minima
+Zoom_pixel=Zoom a la risoluzione del raster

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_it.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/plugin-persistence.def
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/plugin-persistence.def	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/plugin-persistence.def	(revision 6982)
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!--
+Definitions of plugin persistence org.gvsig.editing.
+ -->
+<definitions>
+  <version>1.0.0</version>
+  <classes>
+    <class name="org.gvsig.raster.wcs.app.wcsclient">
+      <description>Persistence definition for the WCS client plugin</description>
+      <fields>
+        <field name="servers" type="object" classOfValue="org.gvsig.andami.persistence.serverData.ServerDataPersistence" mandatory="false">
+          <description>List of WCS servers</description>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</definitions>
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text.properties	(revision 6982)
@@ -0,0 +1,93 @@
+#Translations for language [es]
+#Tue Jan 20 17:39:04 CET 2009
+abstract=Resumen
+Aceptar=Aceptar
+Anadir=A\u00f1adir
+ancho_alto=Ancho x Alto
+anterior=Anterior
+Aplicar=Aplicar
+Apply=Aplicar
+bandas=Bandas
+brillo=Brillo
+brillo_y_contraste=Brillo y Contraste
+Cancel=Cancelar
+Cancelar=Cancelar
+connect=Conectar
+connect_error=Error de conexi\u00f3n
+contraste=Contraste
+coor_geograficas=Coordenadas geogr\u00e1ficas
+coverage=Cobertura
+covered_extension=Cobertura de la extensi\u00f3n
+descripcion=Descripci\u00f3n
+Eliminar=Eliminar
+eliminar_extremos=Eliminar extremos
+extents_no_coincidentes=Extensiones no coincidentes
+Fichero=Archivo
+fichero_existe=Fichero existe
+fit_WCS_layer=Ajustar capa WCS
+format=Formato
+formato=Formato
+georeferenciado=Georeferenciado
+info=Informaci\u00f3n
+Informacion=Informaci\u00f3n
+Layer=Capa
+layer_abstract=Resumen de la capa
+layer_title=T\u00edtulo de la capa
+lineal_directo=Lineal directo
+m/pixel=metros/pixel
+metadatos=Metadatos
+name=Nombre
+nombre=Nombre
+nombre_cobertura=Nombre cobertura
+none_selected=Ninguno seleccionado
+not_available=No disponible
+num_bandas=N\u00famero de bandas
+Ok=Aceptar
+opacidad=Opacidad
+origen_de_datos=Origen de datos
+parameters=Par\u00e1metros
+previsualizacion=Previsualizaci\u00f3n
+properties=Propiedades
+propiedades_raster=Propiedades del r\u00e1ster
+Proyecciones=Proyecciones
+realce=Realce
+recorte_colas=Recorte de colas
+refresh_capabilities=Refrescar cach\u00e9
+refresh_capabilities_tooltip=Marque esta casilla para sobreescribir los datos anteriores.
+seleccionar_coberturas=Seleccionar coberturas
+seleccionar_CRS=Seleccionar CRS
+seleccionar_formato=Seleccionar formato
+seleccionar_parametros=Seleccionar par\u00e1metros
+seleccionar_tiempo=Seleccionar tiempo
+selected_layers=Capas seleccionadas
+selected_parameters=Par\u00e1metros seleccionados
+server=Servidor
+server_abstract=Resumen del servidor
+server_title=T\u00edtulo del servidor
+server_type=Tipo de servidor
+service_info=Informaci\u00f3n del servicio
+show_layer_names=Mostrar nombres de capas
+si=s\u00ed
+siguiente=Siguiente
+tamano=Tama\u00f1o\:
+tamPixX=Tama\u00f1o pixel X
+tamPixY=Tama\u00f1o pixel Y
+time=Tiempo
+tipo_dato=Tipo dato
+transparencia=Transparencia
+unknown_response_format=Formato de respuesta desconocido
+use_interpolation_method=Usar metodo de interpolaci\u00f3n
+version_conflict=Conflicto de versi\u00f3n
+wcs_cant_connect=No se puede realizar la conexi\u00f3n al WCS
+wcs_properties=Propiedades de WCS
+WCS_properties=Propiedades del WCS
+wcs_server_error=Error en el servidor WCS
+wcs_server_timeout=Tiempo de espera agotado
+xmax=xmax
+xmin=xmin
+ymax=ymax
+ymin=ymin
+Zoom_pixel=Zoom a la resoluci\u00f3n del r\u00e1ster
+host_unreachable=No se puede conectar con el servidor. Tal vez la red est� desconectada o el servidor apagado.
+ip_unknown=Direcci�n IP desconocida
+network_error=Error en la conexi�n a red

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_zh.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_zh.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_zh.properties	(revision 6982)
@@ -0,0 +1,88 @@
+#Translations for language [en]
+#Fri Nov 03 13:14:56 CET 2006
+abstract=\u7b80\u4ecb
+Aceptar=\u786e\u5b9a
+Anadir=\u6dfb\u52a0
+ancho_alto=\u5bbd x \u9ad8
+anterior=\u540e\u9000
+Aplicar=\u5e94\u7528
+Apply=\u5e94\u7528
+bandas=\u6ce2\u6bb5
+brillo=\u4eae\u5ea6
+brillo_y_contraste=\u4eae\u5ea6\u548c\u5bf9\u6bd4\u5ea6
+Cancel=\u53d6\u6d88
+Cancelar=\u53d6\u6d88
+connect=\u8fde\u63a5
+connect_error=\u8fde\u63a5\u65f6\u51fa\u9519
+contraste=\u5bf9\u6bd4\u5ea6
+coor_geograficas=\u5730\u7406\u5750\u6807
+coverage=\u4fdd\u9669
+covered_extension=\u6269\u5c55\u4fdd\u9669
+descripcion=\u63cf\u8ff0
+Eliminar=\u5220\u9664
+eliminar_extremos=\u6e05\u9664\u8fb9\u7f18
+extents_no_coincidentes=\u6269\u5c55\u540d\u4e0d\u4e00\u81f4
+Fichero=\u6587\u4ef6
+fichero_existe=\u6587\u4ef6\u5df2\u5b58\u5728
+fit_WCS_layer=WCS \u56fe\u5c42\u9009\u9879
+format=\u683c\u5f0f
+formato=\u683c\u5f0f
+georeferenciado=\u7a7a\u95f4\u53c2\u8003
+info=\u4fe1\u606f
+Informacion=\u4fe1\u606f
+Layer=\u56fe\u5c42
+layer_abstract=\u56fe\u5c42\u7b80\u4ecb
+layer_title=\u56fe\u5c42\u6807\u9898
+lineal_directo=\u76f4\u63a5\u7ebf\u65b9\u6cd5
+m/pixel=\u7c73/\u50cf\u7d20
+metadatos=\u5143\u6570\u636e
+name=\u540d\u79f0
+nombre=\u540d\u79f0
+nombre_cobertura=\u4fdd\u9669\u540d
+none_selected=\u672a\u9009\u5b9a
+not_available=\u65e0\u6cd5\u5229\u7528
+num_bandas=\u6ce2\u6bb5\u6570
+Ok=\u786e\u5b9a
+opacidad=\u4e0d\u900f\u660e\u5ea6
+origen_de_datos=\u6570\u636e\u6765\u6e90
+parameters=\u53c2\u6570
+previsualizacion=\u9884\u89c8
+properties=\u5c5e\u6027
+propiedades_raster=Raster \u5c5e\u6027
+Proyecciones=\u6295\u5f71
+realce=\u589e\u5f3a
+recorte_colas=\u526a\u5207\u5c3e\u90e8
+seleccionar_coberturas=\u9009\u62e9\u4fdd\u9669
+seleccionar_CRS=\u9009\u62e9 CRS
+seleccionar_formato=\u9009\u62e9\u683c\u5f0f
+seleccionar_parametros=\u9009\u62e9\u53c2\u6570
+seleccionar_tiempo=\u9009\u62e9\u65f6\u95f4
+selected_layers=\u5df2\u9009\u5b9a\u56fe\u5c42
+selected_parameters=\u5df2\u9009\u5b9a\u53c2\u6570
+server=\u670d\u52a1\u5668
+server_abstract=\u670d\u52a1\u5668\u7b80\u4ecb
+server_title=\u670d\u52a1\u5668\u6807\u9898
+server_type=\u670d\u52a1\u5668\u7c7b\u578b
+service_info=\u670d\u52a1\u4fe1\u606f
+show_layer_names=\u663e\u793a\u56fe\u5c42\u540d\u79f0
+si=\u662f
+siguiente=\u7ee7\u7eed
+tamano=\u5927\u5c0f\:
+tamPixX=X\u8f74\u50cf\u7d20\u5927\u5c0f
+tamPixY=Y\u8f74\u50cf\u7d20\u5927\u5c0f
+time=\u65f6\u95f4
+tipo_dato=\u6570\u636e\u7c7b\u578b
+transparencia=\u900f\u660e\u5ea6
+unknown_response_format=\u672a\u77e5\u54cd\u5e94\u683c\u5f0f
+use_interpolation_method=\u4f7f\u7528\u63d2\u8865\u6cd5
+version_conflict=\u7248\u672c\u51b2\u7a81
+wcs_cant_connect=\u65e0\u6cd5\u4e0e WCS \u8fde\u63a5
+wcs_properties=WCS \u5c5e\u6027
+WCS_properties=WCS \u5c5e\u6027
+wcs_server_error=WCS \u670d\u52a1\u5668\u51fa\u9519
+wcs_server_timeout=\u670d\u52a1\u5668\u8d85\u65f6
+xmax=X\u8f74\u6700\u5927\u503c
+xmin=X\u8f74\u6700\u5c0f\u503c
+ymax=Y\u8f74\u6700\u5927\u503c
+ymin=Y\u8f74\u6700\u5c0f\u503c
+Zoom_pixel=\u7f29\u653e\u5230 Raster \u6700\u4f73\u5206\u8fa8\u7387

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_zh.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_ca.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_ca.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_ca.properties	(revision 6982)
@@ -0,0 +1,88 @@
+#Translations for language [ca]
+#Mon Oct 30 09:38:21 CET 2006
+abstract=Resum
+Aceptar=Acceptar
+Anadir=Afegir
+ancho_alto=Amplada al\u00e7ada
+anterior=Anterior
+Aplicar=Aplicar
+Apply=Aplicar
+bandas=Bandes
+brillo=Brillantor
+brillo_y_contraste=Brillantor i contrast
+Cancel=Cancel\u00b7lar
+Cancelar=Cancel\u00b7lar
+connect=Connectar
+connect_error=Error de connexi\u00f3
+contraste=Contrast
+coor_geograficas=Coordenades geogr\u00e0fiques
+coverage=Cobertura
+covered_extension=Cobertura de l'extensi\u00f3
+descripcion=Descripci\u00f3
+Eliminar=Eliminar
+eliminar_extremos=Eliminar extrems
+extents_no_coincidentes=Extensions no coincidents
+Fichero=Fitxer
+fichero_existe=Hi ha fitxer
+fit_WCS_layer=Ajustar capa WCS
+format=Format
+formato=Format
+georeferenciado=
+info=Informaci\u00f3
+Informacion=Informaci\u00f3
+Layer=Capa
+layer_abstract=Resum de la capa
+layer_title=T\u00edtol de la capa
+lineal_directo=Lineal directe
+m/pixel=metros/pixel
+metadatos=Metadatos
+name=Nom
+nombre=Nom
+nombre_cobertura=Nom cobertura
+none_selected=Cap seleccionat
+not_available=No disponible
+num_bandas=Nombre de bandes
+Ok=D'acord
+opacidad=Opacitat
+origen_de_datos=Origen de dades
+parameters=Par\u00e0metres
+previsualizacion=Previsualitzaci\u00f3
+properties=Propietats
+propiedades_raster=Propietats del raster
+Proyecciones=
+realce=Relleu
+recorte_colas=Retall de cues
+seleccionar_coberturas=Seleccioneu les cobertures
+seleccionar_CRS=Seleccioneu CRS
+seleccionar_formato=Seleccionar format
+seleccionar_parametros=Seleccionar parametres
+seleccionar_tiempo=Seleccionar temps
+selected_layers=Capes seleccionades
+selected_parameters=Par\u00e0metres seleccionats
+server=Servidor
+server_abstract=Resum del servidor
+server_title=T\u00edtol del servidor
+server_type=Tipus de servidor
+service_info=Informaci\u00f3 del servici
+show_layer_names=Mostrar noms de capes
+si=
+siguiente=Seg\u00fcent
+tamano=Dimensi\u00f3\:
+tamPixX=
+tamPixY=
+time=Temps
+tipo_dato=Tipus de dada
+transparencia=Transpar\u00e8ncia
+unknown_response_format=Format de resposta desconeguda
+use_interpolation_method=Usar m\u00e8tode d'interpolaci\u00f3
+version_conflict=Conflicte de versi\u00f3
+wcs_cant_connect=No es pot realitzar la connexi\u00f3 WCS
+wcs_properties=Propietats de WCS
+WCS_properties=Propietats del WCS
+wcs_server_error=Error en el servidor WCS
+wcs_server_timeout=Temps d\u0092espera esgotat
+xmax=X m\u00e0xima
+xmin=X m\u00ednima
+ymax=Y m\u00e0xima
+ymin=Y m\u00ednima
+Zoom_pixel=Zoom a la resoluci\u00f3 del raster

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_ca.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_pt.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_pt.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_pt.properties	(revision 6982)
@@ -0,0 +1,88 @@
+#Translations for language [pt]
+#Mon Oct 30 09:38:21 CET 2006
+abstract=Resumo
+Aceptar=Aceitar
+Anadir=Adicionar
+ancho_alto=Largura X altura
+anterior=Anterior
+Aplicar=Aplicar
+Apply=Aplicar
+bandas=Bandas
+brillo=Brightness
+brillo_y_contraste=
+Cancel=Cancelar
+Cancelar=Cancelar
+connect=Conectar
+connect_error=Erro ao conectar
+contraste=Contrast
+coor_geograficas=Coordenadas geogr\u00e1ficas
+coverage=
+covered_extension=Extens\u00e3o
+descripcion=Descri\u00e7\u00e3o
+Eliminar=Remover
+eliminar_extremos=Remover extremos
+extents_no_coincidentes=A extens\u00e3o da imagem seleccionada n\u00e3o coincide com a imagem de origem.
+Fichero=Ficheiro
+fichero_existe=O ficheiro seleccionado j\u00e1 existe como banda da capa
+fit_WCS_layer=
+format=Formato
+formato=Formato
+georeferenciado=
+info=Informa\u00e7\u00e3o
+Informacion=Informa\u00e7\u00e3o
+Layer=Capa
+layer_abstract=Resumo
+layer_title=Titulo da capa
+lineal_directo=Lineal direito
+m/pixel=metros/pixel
+metadatos=Metadatos
+name=Nome
+nombre=Nome
+nombre_cobertura=Nome da cobertura
+none_selected=Nenhum seleccionado
+not_available=N\u00e3o dispon\u00edvel
+num_bandas=N\u00famero de bandas
+Ok=Aceitar
+opacidad=Opacidade
+origen_de_datos=Origem de dados
+parameters=Par\u00e2metros
+previsualizacion=
+properties=Propriedades
+propiedades_raster=Propiedades da cobertura
+Proyecciones=
+realce=Realce
+recorte_colas=Recorte de filas
+seleccionar_coberturas=Seleccionar coberturas
+seleccionar_CRS=Seleccionar CRS
+seleccionar_formato=Seleccionar formato
+seleccionar_parametros=Seleccionar os par\u00e2metros
+seleccionar_tiempo=Seleccionar a posi\u00e7\u00e3o para o tempo
+selected_layers=Capas seleccionadas
+selected_parameters=
+server=Servidor
+server_abstract=Sumario
+server_title=Titulo
+server_type=Tipo de servidor
+service_info=Informa\u00e7\u00e3o do servi\u00e7o
+show_layer_names=Mostrar nomes
+si=
+siguiente=Seguinte
+tamano=Tamanho\:
+tamPixX=
+tamPixY=
+time=
+tipo_dato=Tipo de dado
+transparencia=Transpar\u00eancia
+unknown_response_format=
+use_interpolation_method=
+version_conflict=Conflito de vers\u00f5es
+wcs_cant_connect=
+wcs_properties=Propriedades WCS
+WCS_properties=Propietats del WCS
+wcs_server_error=
+wcs_server_timeout=
+xmax=X m\u00e1xima
+xmin=X m\u00ednima
+ymax=Y m\u00e1xima
+ymin=Y m\u00ednima
+Zoom_pixel=Zoom \u00e0 resolu\u00e7\u00e3o do raster

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_pt.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/servers.properties
===================================================================

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/servers.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_de.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_de.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_de.properties	(revision 6982)
@@ -0,0 +1,90 @@
+#Translations for language [de]
+#Wed Oct 08 17:54:43 CEST 2008
+abstract=Zusammenfassung
+Aceptar=OK
+Anadir=Hinzuf\u00fcgen
+ancho_alto=Breite x H\u00f6he
+anterior=Zur\u00fcck
+Aplicar=Anwenden
+Apply=Anwenden
+bandas=Farbstreifen
+brillo=Helligkeit
+brillo_y_contraste=Helligkeit und Kontrast
+Cancel=Abbrechen
+Cancelar=Abbrechen
+connect=Verbinden
+connect_error=Verbindungsfehler
+contraste=Kontrast
+coor_geograficas=Geografische Koordinaten
+coverage=Coverage
+covered_extension=Bedeckter Bereich
+descripcion=Beschreibung
+Eliminar=L\u00f6schen
+eliminar_extremos=Eckpunkte l\u00f6schen
+extents_no_coincidentes=Ausma\u00dfe des ausgew\u00e4hlten Bildes stimmen nicht mit dem Originalbild \u00fcberein.
+Fichero=Datei
+fichero_existe=Die ausgew\u00e4hlte Datei besteht bereits als Layer
+fit_WCS_layer=WCS Layer anpassen
+format=Format
+formato=Format
+georeferenciado=Georeferenziert
+info=Information
+Informacion=Information
+Layer=Ebene
+layer_abstract=Kurzfassung
+layer_title=Layer-Titel
+lineal_directo=Direkt- Lineal
+m/pixel=Meter/Pixel
+metadatos=Metadaten
+name=Name
+nombre=Name
+nombre_cobertura=Name der Coverage
+none_selected=Nichts ausgew\u00e4hlt
+not_available=Nicht verf\u00fcgbar
+num_bandas=Kanalzahl
+Ok=OK
+opacidad=Undurchsichtigkeit
+origen_de_datos=Datenquelle
+parameters=Parameter
+previsualizacion=Vorschau
+properties=Eigenschaften
+propiedades_raster=Eigenschaften des Rasterbildes
+Proyecciones=Projektionen
+realce=Optimierung\n
+recorte_colas=Zuschnitt der Randbereiche
+refresh_capabilities=Cache auffrischen
+refresh_capabilities_tooltip=H\u00e4kchen setzen um lokale Daten zu \u00fcberschreiben
+seleccionar_coberturas=Coverages ausw\u00e4hlen
+seleccionar_CRS=CRS ausw\u00e4hlen
+seleccionar_formato=Format ausw\u00e4hlen
+seleccionar_parametros=Parameter ausw\u00e4hlen
+seleccionar_tiempo=Zeitposition ausw\u00e4hlen
+selected_layers=Ausgew\u00e4hlte Layer
+selected_parameters=Ausgew\u00e4hlte Parameter
+server=Server
+server_abstract=Zusammenfassung
+server_title=Titel
+server_type=Server-Typ
+service_info=Service- Info
+show_layer_names=Layernamen anzeigen
+si=ja
+siguiente=Weiter
+tamano=Gr\u00f6\u00dfe\:
+tamPixX=Pixel Gr\u00f6\u00dfe X
+tamPixY=Pixel Gr\u00f6\u00dfe Y
+time=Zeit
+tipo_dato=Datentyp
+transparencia=Transparenz
+unknown_response_format=Unbekanntes Antwortformat
+use_interpolation_method=Benutze Interpolationsmethode
+version_conflict=Versionskonflikt
+wcs_cant_connect=Verbindung zum WCS kann nicht hergestellt werden
+wcs_properties=WCS-Eigenschaften
+WCS_properties=WCS Eigenschaften
+wcs_server_error=WCS Server Error
+wcs_server_timeout=Der Server antwortet nicht
+xmax=Maximaler X-Wert
+xmin=Minimaler X-Wert
+ymax=Maximaler Y-Wert
+ymin=Minimaler Y-Wert
+Zoom_pixel=Zoom zur Rasteraufl\u00f6sung

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/src/main/resources-plugin/text_de.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/pom.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/pom.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/pom.xml	(revision 6982)
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.raster.wcs.app.wcsclient</artifactId>
+    <packaging>jar</packaging>
+    <name>Formats: WCS support</name>
+    <description>Web Coverage Service support</description>
+	
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.raster.wcs</artifactId>
+        <version>2.2.48</version>
+    </parent>
+	
+    <dependencies>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.andami</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.swing.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.wcs.io</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.remoteclient</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.wcs.remoteclient</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.app.mainplugin</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.fmap</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.control</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.utils</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.ui</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <!--<dependency> <groupId>org.gvsig</groupId> <artifactId>org.gvsig.symbology.lib.api</artifactId> 
+        <scope>compile</scope> </dependency> -->
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.symbology.lib.impl</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.raster.cache.lib.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>easymock</groupId>
+            <artifactId>easymock</artifactId>
+        </dependency>
+		
+		
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.mapcontext.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.mapcontext.operation</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.projection.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.projection.cresques.impl</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.compat.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.compat.se</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.impl</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal.spi</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.api</artifactId>
+            <scope>compile</scope>
+        </dependency>
+    <!--
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.generalpath</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry.operation</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+    -->
+    </dependencies>
+
+    <properties>
+        <gvsig.package.info.state>final</gvsig.package.info.state>
+        <gvsig.package.info.dependencies>required: org.gvsig.raster.tilecache.app -ge 2, required: org.gvsig.raster.mainplugin -ge 2</gvsig.package.info.dependencies>
+        <gvsig.package.info.poolURL>https://devel.gvsig.org/download/projects/Raster/pool</gvsig.package.info.poolURL>
+        <gvsig.package.info.categories>OGC,Remote Services,Raster</gvsig.package.info.categories>
+        <gvsig.package.info.official>true</gvsig.package.info.official>
+    </properties>
+</project>

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/buildNumber.properties
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/buildNumber.properties	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/buildNumber.properties	(revision 6982)
@@ -0,0 +1,2 @@
+#Sat May 27 00:56:35 CEST 2017
+buildNumber=100

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient/buildNumber.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.app.wcsclient
___________________________________________________________________
Added: svn:ignore
   + target

.project

.classpath

.settings


Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-hypnosGetCapabilities.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-hypnosGetCapabilities.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-hypnosGetCapabilities.xml	(revision 6982)
@@ -0,0 +1,118 @@
+<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<WCS_Capabilities
+   version="1.0.0" 
+   updateSequence="0" 
+   xmlns="http://www.opengis.net/wcs" 
+   xmlns:xlink="http://www.w3.org/1999/xlink" 
+   xmlns:gml="http://www.opengis.net/gml" 
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengeospatial.net/wcs/1.0.0/wcsCapabilities.xsd">
+<Service>
+  <name>MapServer WCS</name>
+  <label>UMN Test WCS Server</label>
+  <keywords>
+    <keyword>WCS</keyword>
+    <keyword>MODIS</keyword>
+    <keyword>NDVI</keyword>
+  </keywords>
+  <fees>NONE</fees>
+  <accessConstraints>
+    NONE
+  </accessConstraints>
+</Service>
+<Capability>
+  <Request>
+    <GetCapabilities>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://hypnos.cbs.umn.edu/cgi-bin/mapserv43d?map=/data/wcs/demo.map&amp;service=WCS&amp;version=1.0.0&amp;" /></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://hypnos.cbs.umn.edu/cgi-bin/mapserv43d?map=/data/wcs/demo.map&amp;service=WCS&amp;version=1.0.0&amp;" /></Post>
+        </HTTP>
+      </DCPType>
+    </GetCapabilities>
+    <DescribeCoverage>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://hypnos.cbs.umn.edu/cgi-bin/mapserv43d?map=/data/wcs/demo.map&amp;service=WCS&amp;version=1.0.0&amp;" /></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://hypnos.cbs.umn.edu/cgi-bin/mapserv43d?map=/data/wcs/demo.map&amp;service=WCS&amp;version=1.0.0&amp;" /></Post>
+        </HTTP>
+      </DCPType>
+    </DescribeCoverage>
+    <GetCoverage>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://hypnos.cbs.umn.edu/cgi-bin/mapserv43d?map=/data/wcs/demo.map&amp;service=WCS&amp;version=1.0.0&amp;" /></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://hypnos.cbs.umn.edu/cgi-bin/mapserv43d?map=/data/wcs/demo.map&amp;service=WCS&amp;version=1.0.0&amp;" /></Post>
+        </HTTP>
+      </DCPType>
+    </GetCoverage>
+  </Request>
+  <Exception>
+    <Format>application/vnd.ogc.se_xml</Format>
+  </Exception>
+  <VendorSpecificCapabilities />
+</Capability>
+<ContentMetadata>
+  <CoverageOfferingBrief>
+  <name>ndvi</name>
+  <label>North Central US MODIS-based NDVI Images for 2002</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+      <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>fpar</name>
+  <label>North Central US MODIS-based FPAR Images for 2002</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+      <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>modis</name>
+  <label>North Central US MODIS Images for 2002</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+      <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+</ContentMetadata>
+</WCS_Capabilities>
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-ionicGetCapabilities.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-ionicGetCapabilities.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-ionicGetCapabilities.xml	(revision 6982)
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<WCS_Capabilities version="1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengis.net/wcs/1.0.0/wcsCapabilities.xsd" xmlns="http://www.opengis.net/wcs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml">
+    <Service>
+      <description>
+      AST_L1B Data
+      </description>
+      <name>AST_L1B</name>
+      <label>AST_L1B Coverage Server</label>
+      <keywords>
+        <keyword>Nasa</keyword>
+        <keyword>Terra</keyword>
+        <keyword>ASTER</keyword>
+        <keyword>AST_L1B</keyword>
+        <keyword>Coverage</keyword>
+      </keywords>
+      <responsibleParty>
+        <individualName>Luc Donea</individualName>
+        <organisationName>Ionic Software s.a.</organisationName>
+        <contactInfo>
+          <phone>
+            <voice>+32 4 364 0 364</voice>
+          </phone>
+          <address>
+            <deliveryPoint>Rue de Wallonie, 18</deliveryPoint>
+            <city>Grace-Hollogne</city>
+            <administrativeArea>Liege</administrativeArea>
+            <postalCode>4460</postalCode>
+            <country>Belgium</country>
+            <electronicMailAddress>ld@ionicsoft.com</electronicMailAddress>
+          </address>
+          <onlineResource xlink:href="http://www.ionicsoft.com" xlink:type="simple"/>
+        </contactInfo>
+      </responsibleParty>
+      <fees>none</fees>
+      <accessConstraints>none</accessConstraints>
+    </Service>
+    <Capability>
+      <Request>
+        <GetCapabilities>
+          <DCPType>
+            <HTTP>
+              <Get>
+                <OnlineResource xlink:href="http://www.ionicsoft.com:8080/wcs/coverage/ASTER?" xlink:type="simple"/>
+              </Get>
+              <Post>
+                <OnlineResource xlink:href="http://www.ionicsoft.com:8080/wcs/coverage/ASTER?" xlink:type="simple"/>
+              </Post>
+            </HTTP>
+          </DCPType>
+        </GetCapabilities>
+        <DescribeCoverage>
+          <DCPType>
+            <HTTP>
+              <Get>
+                <OnlineResource xlink:href="http://www.ionicsoft.com:8080/wcs/coverage/ASTER?" xlink:type="simple"/>
+              </Get>
+              <Post>
+                <OnlineResource xlink:href="http://www.ionicsoft.com:8080/wcs/coverage/ASTER?" xlink:type="simple"/>
+              </Post>
+            </HTTP>
+          </DCPType>
+        </DescribeCoverage>
+        <GetCoverage>
+          <DCPType>
+            <HTTP>
+              <Get>
+                <OnlineResource xlink:href="http://www.ionicsoft.com:8080/wcs/coverage/ASTER?" xlink:type="simple"/>
+              </Get>
+              <Post>
+                <OnlineResource xlink:href="http://www.ionicsoft.com:8080/wcs/coverage/ASTER?" xlink:type="simple"/>
+              </Post>
+            </HTTP>
+          </DCPType>
+        </GetCoverage>
+      </Request>
+      <Exception>
+        <Format>application/vnd.ogc.se_xml</Format>
+      </Exception>
+      <VendorSpecificCapabilities>
+        <supportDataSrs/>
+      </VendorSpecificCapabilities>
+    </Capability>
+    <ContentMetadata>
+      <CoverageOfferingBrief>
+        <description>
+        Coverage Data
+        </description>
+        <name>VNIR_Swath</name>
+        <label>0 / VNIR_Swath</label>
+        <lonLatEnvelope srsName="WGS84(DD)">
+          <gml:pos>-87.052103 34.541414</gml:pos>
+          <gml:pos>-86.310148 35.082561</gml:pos>
+        </lonLatEnvelope>
+      </CoverageOfferingBrief>
+      <CoverageOfferingBrief>
+        <description>
+        Coverage Data
+        </description>
+        <name>SWIR_Swath</name>
+        <label>1 / SWIR_Swath</label>
+        <lonLatEnvelope srsName="WGS84(DD)">
+          <gml:pos>-87.052048 34.541351</gml:pos>
+          <gml:pos>-86.310093 35.082498</gml:pos>
+        </lonLatEnvelope>
+      </CoverageOfferingBrief>
+      <CoverageOfferingBrief>
+        <description>
+        Coverage Data
+        </description>
+        <name>TIR_Swath</name>
+        <label>2 / TIR_Swath</label>
+        <lonLatEnvelope srsName="WGS84(DD)">
+          <gml:pos>-87.051827 34.541099</gml:pos>
+          <gml:pos>-86.309874 35.082247</gml:pos>
+        </lonLatEnvelope>
+      </CoverageOfferingBrief>
+    </ContentMetadata>
+  </WCS_Capabilities>
\ No newline at end of file
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-simonCITCostasGetCapabilities.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-simonCITCostasGetCapabilities.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-simonCITCostasGetCapabilities.xml	(revision 6982)
@@ -0,0 +1,406 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<WCS_Capabilities version="1.0.0" updateSequence="0" xmlns="http://www.opengis.net/wcs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengeospatial.net/wcs/1.0.0/wcsCapabilities.xsd">
+<Service>
+  <name>MapServer WCS</name>
+  <label>Servidor wcs simon</label>
+  <keywords>
+    <keyword>WCS</keyword>
+  </keywords>
+  <fees>NONE</fees>
+  <accessConstraints>
+    NONE
+  </accessConstraints>
+</Service>
+<Capability>
+  <Request>
+    <GetCapabilities>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/interno/costas.map&amp;"/></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/interno/costas.map&amp;"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetCapabilities>
+    <DescribeCoverage>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/interno/costas.map&amp;"/></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/interno/costas.map&amp;"/></Post>
+        </HTTP>
+      </DCPType>
+    </DescribeCoverage>
+    <GetCoverage>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/interno/costas.map&amp;"/></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/interno/costas.map&amp;"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetCoverage>
+  </Request>
+  <Exception>
+    <Format>application/vnd.ogc.se_xml</Format>
+  </Exception>
+  <VendorSpecificCapabilities/>
+</Capability>
+<ContentMetadata>
+  <CoverageOfferingBrief>
+  <description>Quickbird costas 2004</description>
+  <name>Costas</name>
+  <label>Costas</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.769215668705582 37.8184338945691</gml:pos>
+      <gml:pos>0.506868538627119 40.525456338613</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop01_311104</name>
+  <label>orthop01_311104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.411953859600099 40.3952692250145</gml:pos>
+      <gml:pos>0.506868538627582 40.498144970273</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop02_041004</name>
+  <label>orthop02_041004</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.161142185520058 40.1342857176869</gml:pos>
+      <gml:pos>0.292548896326785 40.2560681974345</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop03n_311004</name>
+  <label>orthop03n_311004</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.147236128086632 40.111252474887</gml:pos>
+      <gml:pos>0.209262927539442 40.1866363257871</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop03s_311004_01</name>
+  <label>orthop03s_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.0872101105503621 40.0818258206747</gml:pos>
+      <gml:pos>0.22114471507211 40.1932962005782</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop03s_311004_02</name>
+  <label>orthop03s_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.030134915894617 40.0087916305901</gml:pos>
+      <gml:pos>0.16383554256875 40.1202004185233</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop04_311004_01</name>
+  <label>orthop04_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.064429002189167 39.8686021111024</gml:pos>
+      <gml:pos>0.0391632263460172 39.9701456674512</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop04_311004_02</name>
+  <label>orthop04_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.0059801589732133 39.9589210820855</gml:pos>
+      <gml:pos>0.0861765725681437 40.0602012338313</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop05_311004_01</name>
+  <label>orthop05_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.184109898221608 39.7358685309031</gml:pos>
+      <gml:pos>-0.0750466714741807 39.8374622821562</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop05_311004_02</name>
+  <label>orthop05_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.117821241552359 39.8165947273632</gml:pos>
+      <gml:pos>-0.00269513638604592 39.9183962094939</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop06_311004_01</name>
+  <label>orthop06_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.275219416965276 39.5950920024498</gml:pos>
+      <gml:pos>-0.184155536472809 39.6871833112806</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop06_311004_02</name>
+  <label>orthop06_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.215882735212665 39.6816925812939</gml:pos>
+      <gml:pos>-0.153792859579015 39.7776035452773</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop07_311004_01</name>
+  <label>orthop07_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.314134220213874 39.5389645252734</gml:pos>
+      <gml:pos>-0.208807505395484 39.6457600608977</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop07_311004_02</name>
+  <label>orthop07_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.342128552498647 39.4528266976444</gml:pos>
+      <gml:pos>-0.274745188591142 39.5443190026711</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop08_081104</name>
+  <label>orthop08_081104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.12173136235497 38.7060005480509</gml:pos>
+      <gml:pos>0.244722293013489 38.8396720246421</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop09_081104_01</name>
+  <label>orthop09_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.088804767492067 38.6613849297483</gml:pos>
+      <gml:pos>0.207196405070599 38.7454726610249</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop09_081104_02</name>
+  <label>orthop09_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.00632349885466636 38.6164934605806</gml:pos>
+      <gml:pos>0.106715050330735 38.6865464583593</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop10_081104_01</name>
+  <label>orthop10_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.136980485807463 38.5170546860605</gml:pos>
+      <gml:pos>-0.0371101117727906 38.5806924900864</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop10_081104_02</name>
+  <label>orthop10_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.076735106882625 38.5664797341347</gml:pos>
+      <gml:pos>0.0816807635068847 38.6559597659495</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop11_081104</name>
+  <label>orthop11_081104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.311501790904784 38.4707367989647</gml:pos>
+      <gml:pos>-0.0783292130480387 38.5509769105466</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop12_081104_01</name>
+  <label>orthop12_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.434119927724276 38.3464080099809</gml:pos>
+      <gml:pos>-0.361629767927456 38.4559730050029</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop12_081104_02</name>
+  <label>orthop12_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.378614997044234 38.4352112413258</gml:pos>
+      <gml:pos>-0.255874384616388 38.5054927088623</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop13_131104</name>
+  <label>orthop13_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.348041797937859 39.3383153088596</gml:pos>
+      <gml:pos>-0.281041463417471 39.5461928127946</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop14_131104</name>
+  <label>orthop14_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.339955238250429 39.2232477387865</gml:pos>
+      <gml:pos>-0.232429279860554 39.4011207166876</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop15_131104</name>
+  <label>orthop15_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.289235759595255 39.0872233017579</gml:pos>
+      <gml:pos>-0.198718862025195 39.2746110942999</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop16_131104_01</name>
+  <label>orthop16_131104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.247058054572741 39.0510556962122</gml:pos>
+      <gml:pos>-0.174196293066241 39.1427258689371</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop16_131104_02</name>
+  <label>orthop16_131104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.210822301766025 38.9726237490186</gml:pos>
+      <gml:pos>-0.126828888562913 39.0555974632164</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop17_131104_01</name>
+  <label>orthop17_131104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.181657602795786 38.9357185021325</gml:pos>
+      <gml:pos>-0.0746335106867938 39.0192845975789</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop17_131104_02</name>
+  <label>orthop17_131104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.117943002348703 38.868294412074</gml:pos>
+      <gml:pos>-0.00576191400621702 38.9385565931551</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop18_131104</name>
+  <label>orthop18_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.0746928352616706 38.849326950655</gml:pos>
+      <gml:pos>0.0832043718423081 38.9118300407968</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop19_081104_01</name>
+  <label>orthop19_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.528755271098844 38.2508371352818</gml:pos>
+      <gml:pos>-0.430862375100228 38.3735051096161</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop19_081104_02</name>
+  <label>orthop19_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.434119991295443 38.3464062094665</gml:pos>
+      <gml:pos>-0.362213489804466 38.4388675293538</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop20_181104_01</name>
+  <label>orthop20_181104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.649715059513851 38.1131199164285</gml:pos>
+      <gml:pos>-0.505465344489574 38.2015894747853</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop20_181104_02</name>
+  <label>orthop20_181104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.542876572296919 38.1796186626201</gml:pos>
+      <gml:pos>-0.490783803978381 38.3021933075773</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop21_181104</name>
+  <label>orthop21_181104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.70999963728032 37.9537566817542</gml:pos>
+      <gml:pos>-0.618069622814675 38.1598790871345</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop22_1811004</name>
+  <label>orthop22_1811004</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.769215668705582 37.8434482545183</gml:pos>
+      <gml:pos>-0.647530102352871 37.9934296541121</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop23_261104</name>
+  <label>orthop23_261104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.37345887604184 40.3368089707198</gml:pos>
+      <gml:pos>0.448414395595265 40.4485879556897</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop24_261104_01</name>
+  <label>orthop24_261104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.234463105473658 40.1856768191399</gml:pos>
+      <gml:pos>0.356188772135398 40.278972533725</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop24_261104_02</name>
+  <label>orthop24_261104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.296938622582628 40.2681463248799</gml:pos>
+      <gml:pos>0.419350322091118 40.3705009241081</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>orthop25_191204</name>
+  <label>orthop25_191204</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.0631186665735442 38.8067199905354</gml:pos>
+      <gml:pos>0.197563116913112 38.863410634572</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+</ContentMetadata>
+</WCS_Capabilities>
\ No newline at end of file
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-hypnosDescribeCoverage.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-hypnosDescribeCoverage.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-hypnosDescribeCoverage.xml	(revision 6982)
@@ -0,0 +1,237 @@
+<?xml version='1.0' encoding="ISO-8859-1" ?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<CoverageDescription
+   version="1.0.0" 
+   updateSequence="0" 
+   xmlns="http://www.opengis.net/wcs" 
+   xmlns:xlink="http://www.w3.org/1999/xlink" 
+   xmlns:gml="http://www.opengis.net/gml" 
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengeospatial.net/wcs/1.0.0/describeCoverage.xsd">
+  <CoverageOffering>
+  <name>ndvi</name>
+  <label>North Central US MODIS-based NDVI Images for 2002</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+      <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+          <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:26915">
+          <gml:pos>159707 4597895</gml:pos>
+          <gml:pos>1400207 5501395</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>2480 1806</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>159707 5501395</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>500 0</gml:offsetVector>
+          <gml:offsetVector>0 -500</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+      <temporalDomain>
+        <gml:timePosition>2002-001</gml:timePosition>
+        <gml:timePosition>2002-033</gml:timePosition>
+        <gml:timePosition>2002-049</gml:timePosition>
+        <gml:timePosition>2002-065</gml:timePosition>
+        <gml:timePosition>2002-081</gml:timePosition>
+        <gml:timePosition>2002-097</gml:timePosition>
+        <gml:timePosition>2002-113</gml:timePosition>
+        <gml:timePosition>2002-129</gml:timePosition>
+        <gml:timePosition>2002-145</gml:timePosition>
+        <gml:timePosition>2002-161</gml:timePosition>
+        <gml:timePosition>2002-177</gml:timePosition>
+        <gml:timePosition>2002-193</gml:timePosition>
+      </temporalDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+<!-- WARNING: Mandatory metadata '..._rangeset_name' was missing in this context. -->
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:26915 EPSG:2163 EPSG:4269 EPSG:4326</requestResponseCRSs>
+      <nativeCRSs>EPSG:26915</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="raw binary">
+      <formats>GEOTIFF_INT16 HFA_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>fpar</name>
+  <label>North Central US MODIS-based FPAR Images for 2002</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+      <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+          <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:26915">
+          <gml:pos>159707 4597895</gml:pos>
+          <gml:pos>1400207 5501395</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>1240 903</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>159707 5501395</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>1000 0</gml:offsetVector>
+          <gml:offsetVector>0 -1000</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+      <temporalDomain>
+        <gml:timePosition>2002-001</gml:timePosition>
+        <gml:timePosition>2002-033</gml:timePosition>
+        <gml:timePosition>2002-057</gml:timePosition>
+        <gml:timePosition>2002-073</gml:timePosition>
+        <gml:timePosition>2002-089</gml:timePosition>
+        <gml:timePosition>2002-097</gml:timePosition>
+        <gml:timePosition>2002-105</gml:timePosition>
+        <gml:timePosition>2002-121</gml:timePosition>
+        <gml:timePosition>2002-137</gml:timePosition>
+        <gml:timePosition>2002-153</gml:timePosition>
+        <gml:timePosition>2002-169</gml:timePosition>
+        <gml:timePosition>2002-185</gml:timePosition>
+        <gml:timePosition>2002-201</gml:timePosition>
+      </temporalDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>rangeset name</name>
+        <label>rangeset label</label>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:26915 EPSG:2163 EPSG:4269 EPSG:4326</requestResponseCRSs>
+      <nativeCRSs>EPSG:26915</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="raw binary">
+      <formats>GEOTIFF_INT16 HFA_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>modis</name>
+  <label>North Central US MODIS Images for 2002</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+      <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-97.7071758865421 41.0324719184183</gml:pos>
+          <gml:pos>-80.6778361148771 49.6650665681236</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:26915">
+          <gml:pos>159707 4597895</gml:pos>
+          <gml:pos>1400207 5501395</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>2480 1806</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>159707 5501395</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>500 0</gml:offsetVector>
+          <gml:offsetVector>0 -500</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+      <temporalDomain>
+        <gml:timePosition>2002-001</gml:timePosition>
+        <gml:timePosition>2002-033</gml:timePosition>
+        <gml:timePosition>2002-057</gml:timePosition>
+        <gml:timePosition>2002-073</gml:timePosition>
+        <gml:timePosition>2002-089</gml:timePosition>
+        <gml:timePosition>2002-097</gml:timePosition>
+        <gml:timePosition>2002-105</gml:timePosition>
+        <gml:timePosition>2002-121</gml:timePosition>
+        <gml:timePosition>2002-153</gml:timePosition>
+        <gml:timePosition>2002-169</gml:timePosition>
+        <gml:timePosition>2002-185</gml:timePosition>
+        <gml:timePosition>2002-201</gml:timePosition>
+      </temporalDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>rangeset name</name>
+        <label>rangeset label</label>
+        <axisDescription>
+          <AxisDescription semantic="http://terrasip.gis.umn.edu/" refSys="UTM Zone 15N, NAD83">
+            <name>bands</name>
+            <label>MODIS Bands</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+              <singleValue>5</singleValue>
+              <singleValue>6</singleValue>
+              <singleValue>7</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:26915 EPSG:2163 EPSG:4269 EPSG:4326</requestResponseCRSs>
+      <nativeCRSs>EPSG:26915</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="raw binary">
+      <formats>GEOTIFF_RGB HFA_RGB GEOTIFF_16BIT HFA_16BIT</formats>
+    </supportedFormats>
+  </CoverageOffering>
+</CoverageDescription>
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-ionicDescribeCoverage.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-ionicDescribeCoverage.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-ionicDescribeCoverage.xml	(revision 6982)
@@ -0,0 +1,286 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<CoverageDescription version="1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengis.net/wcs/1.0.0/describeCoverage.xsd" xmlns="http://www.opengis.net/wcs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml">
+    <CoverageOffering>
+      <description>
+      Coverage Data
+      </description>
+      <name>VNIR_Swath</name>
+      <label>0 / VNIR_Swath</label>
+      <lonLatEnvelope srsName="WGS84(DD)">
+        <gml:pos>-87.052103 34.541414</gml:pos>
+        <gml:pos>-86.310148 35.082561</gml:pos>
+      </lonLatEnvelope>
+      <domainSet>
+        <spatialDomain>
+          <gml:Envelope srsName="EPSG:4326">
+            <gml:pos>-87.052103 34.541414</gml:pos>
+            <gml:pos>-86.310148 35.082561</gml:pos>
+          </gml:Envelope>
+          <gml:RectifiedGrid dimension="2" srsName="EPSG:4326">
+            <gml:limits>
+              <gml:GridEnvelope>
+                <gml:low>0 0</gml:low>
+                <gml:high>4980 4200</gml:high>
+              </gml:GridEnvelope>
+            </gml:limits>
+            <gml:axisName>X</gml:axisName>
+            <gml:axisName>Y</gml:axisName>
+            <gml:origin srsName="EPSG:4326">
+              <gml:pos>-87.052103 35.082561</gml:pos>
+            </gml:origin>
+            <gml:offsetVector>1.5E-4 0</gml:offsetVector>
+            <gml:offsetVector>0 -1.3E-4</gml:offsetVector>
+          </gml:RectifiedGrid>
+        </spatialDomain>
+        <temporalDomain>
+          <gml:timePosition>2003-06-08T16:36:15Z</gml:timePosition>
+        </temporalDomain>
+      </domainSet>
+      <rangeSet>
+        <RangeSet>
+          <name>Range Set</name>
+          <label>Range Set Description</label>
+          <axisDescription>
+            <AxisDescription>
+              <name>Fields</name>
+              <label>Field Sequence</label>
+              <values>
+                <singleValue>ImageData1</singleValue>
+                <singleValue>ImageData2</singleValue>
+                <singleValue>ImageData3N</singleValue>
+                <singleValue>ImageData3B</singleValue>
+              </values>
+            </AxisDescription>
+          </axisDescription>
+          <axisDescription>
+            <AxisDescription>
+              <description>
+              percent of area that is covered with clouds
+              </description>
+              <name>Cloud</name>
+              <label>Percent of Cloud Cover</label>
+              <values>
+                <singleValue>3.0</singleValue>
+              </values>
+            </AxisDescription>
+          </axisDescription>
+          <nullValues>
+            <singleValue>0</singleValue>
+          </nullValues>
+        </RangeSet>
+      </rangeSet>
+      <supportedCRSs>
+        <requestResponseCRSs>EPSG:4326
+        </requestResponseCRSs>
+        <requestResponseCRSs>Image</requestResponseCRSs>
+        <nativeCRSs>EPSG:4326</nativeCRSs>
+      </supportedCRSs>
+      <supportedFormats>
+        <formats>GeoTIFF</formats>
+        <formats>HDF-EOS</formats>
+      </supportedFormats>
+      <supportedInterpolations>
+        <interpolationMethod>nearest neighbor</interpolationMethod>
+        <interpolationMethod>bilinear</interpolationMethod>
+        <interpolationMethod>bicubic</interpolationMethod>
+      </supportedInterpolations>
+    </CoverageOffering>
+    <CoverageOffering>
+      <description>
+      Coverage Data
+      </description>
+      <name>SWIR_Swath</name>
+      <label>1 / SWIR_Swath</label>
+      <lonLatEnvelope srsName="WGS84(DD)">
+        <gml:pos>-87.052048 34.541351</gml:pos>
+        <gml:pos>-86.310093 35.082498</gml:pos>
+      </lonLatEnvelope>
+      <domainSet>
+        <spatialDomain>
+          <gml:Envelope srsName="EPSG:4326">
+            <gml:pos>-87.052048 34.541351</gml:pos>
+            <gml:pos>-86.310093 35.082498</gml:pos>
+          </gml:Envelope>
+          <gml:RectifiedGrid dimension="2" srsName="EPSG:4326">
+            <gml:limits>
+              <gml:GridEnvelope>
+                <gml:low>0 0</gml:low>
+                <gml:high>2490 2100</gml:high>
+              </gml:GridEnvelope>
+            </gml:limits>
+            <gml:axisName>X</gml:axisName>
+            <gml:axisName>Y</gml:axisName>
+            <gml:origin srsName="EPSG:4326">
+              <gml:pos>-87.052048 35.082498</gml:pos>
+            </gml:origin>
+            <gml:offsetVector>3.0E-4 0</gml:offsetVector>
+            <gml:offsetVector>0 -2.6E-4</gml:offsetVector>
+          </gml:RectifiedGrid>
+        </spatialDomain>
+        <temporalDomain>
+          <gml:timePosition>2003-06-08T16:36:15Z</gml:timePosition>
+        </temporalDomain>
+      </domainSet>
+      <rangeSet>
+        <RangeSet>
+          <name>Range Set</name>
+          <label>Range Set Description</label>
+          <axisDescription>
+            <AxisDescription>
+              <name>Fields</name>
+              <label>Field Sequence</label>
+              <values>
+                <singleValue>ImageData4</singleValue>
+                <singleValue>ImageData5</singleValue>
+                <singleValue>ImageData6</singleValue>
+                <singleValue>ImageData7</singleValue>
+                <singleValue>ImageData8</singleValue>
+                <singleValue>ImageData9</singleValue>
+              </values>
+            </AxisDescription>
+          </axisDescription>
+          <axisDescription>
+            <AxisDescription>
+              <description>
+              percent of area that is covered with clouds
+              </description>
+              <name>Cloud</name>
+              <label>Percent of Cloud Cover</label>
+              <values>
+                <singleValue>3.0</singleValue>
+              </values>
+            </AxisDescription>
+          </axisDescription>
+          <nullValues>
+            <singleValue>0</singleValue>
+          </nullValues>
+        </RangeSet>
+      </rangeSet>
+      <supportedCRSs>
+        <requestResponseCRSs>EPSG:4326
+        </requestResponseCRSs>
+        <requestResponseCRSs>Image</requestResponseCRSs>
+        <nativeCRSs>EPSG:4326</nativeCRSs>
+      </supportedCRSs>
+      <supportedFormats>
+        <formats>GeoTIFF</formats>
+        <formats>HDF-EOS</formats>
+      </supportedFormats>
+      <supportedInterpolations>
+        <interpolationMethod>nearest neighbor</interpolationMethod>
+        <interpolationMethod>bilinear</interpolationMethod>
+        <interpolationMethod>bicubic</interpolationMethod>
+      </supportedInterpolations>
+    </CoverageOffering>
+    <CoverageOffering>
+      <description>
+      Coverage Data
+      </description>
+      <name>TIR_Swath</name>
+      <label>2 / TIR_Swath</label>
+      <lonLatEnvelope srsName="WGS84(DD)">
+        <gml:pos>-87.051827 34.541099</gml:pos>
+        <gml:pos>-86.309874 35.082247</gml:pos>
+      </lonLatEnvelope>
+      <domainSet>
+        <spatialDomain>
+          <gml:Envelope srsName="EPSG:4326">
+            <gml:pos>-87.051827 34.541099</gml:pos>
+            <gml:pos>-86.309874 35.082247</gml:pos>
+          </gml:Envelope>
+          <gml:RectifiedGrid dimension="2" srsName="EPSG:4326">
+            <gml:limits>
+              <gml:GridEnvelope>
+                <gml:low>0 0</gml:low>
+                <gml:high>830 700</gml:high>
+              </gml:GridEnvelope>
+            </gml:limits>
+            <gml:axisName>X</gml:axisName>
+            <gml:axisName>Y</gml:axisName>
+            <gml:origin srsName="EPSG:4326">
+              <gml:pos>-87.051827 35.082247</gml:pos>
+            </gml:origin>
+            <gml:offsetVector>8.9E-4 0</gml:offsetVector>
+            <gml:offsetVector>0 -7.7E-4</gml:offsetVector>
+          </gml:RectifiedGrid>
+        </spatialDomain>
+        <temporalDomain>
+          <gml:timePosition>2003-06-08T16:36:15Z</gml:timePosition>
+        </temporalDomain>
+      </domainSet>
+      <rangeSet>
+        <RangeSet>
+          <name>Range Set</name>
+          <label>Range Set Description</label>
+          <axisDescription>
+            <AxisDescription>
+              <name>Fields</name>
+              <label>Field Sequence</label>
+              <values>
+                <singleValue>ImageData10</singleValue>
+                <singleValue>ImageData11</singleValue>
+                <singleValue>ImageData12</singleValue>
+                <singleValue>ImageData13</singleValue>
+                <singleValue>ImageData14</singleValue>
+              </values>
+            </AxisDescription>
+          </axisDescription>
+          <axisDescription>
+            <AxisDescription>
+              <description>
+              percent of area that is covered with clouds
+              </description>
+              <name>Cloud</name>
+              <label>Percent of Cloud Cover</label>
+              <values>
+                <singleValue>3.0</singleValue>
+              </values>
+            </AxisDescription>
+          </axisDescription>
+          <nullValues>
+            <singleValue>0</singleValue>
+          </nullValues>
+        </RangeSet>
+      </rangeSet>
+      <supportedCRSs>
+        <requestResponseCRSs>EPSG:4326
+        </requestResponseCRSs>
+        <requestResponseCRSs>Image</requestResponseCRSs>
+        <nativeCRSs>EPSG:4326</nativeCRSs>
+      </supportedCRSs>
+      <supportedFormats>
+        <formats>GeoTIFF</formats>
+        <formats>HDF-EOS</formats>
+      </supportedFormats>
+      <supportedInterpolations>
+        <interpolationMethod>nearest neighbor</interpolationMethod>
+        <interpolationMethod>bilinear</interpolationMethod>
+        <interpolationMethod>bicubic</interpolationMethod>
+      </supportedInterpolations>
+    </CoverageOffering>
+  </CoverageDescription>
\ No newline at end of file
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-simonCITCostasDescribeCoverage.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-simonCITCostasDescribeCoverage.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-simonCITCostasDescribeCoverage.xml	(revision 6982)
@@ -0,0 +1,2389 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<CoverageDescription version="1.0.0" updateSequence="0" xmlns="http://www.opengis.net/wcs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengeospatial.net/wcs/1.0.0/describeCoverage.xsd">
+  <CoverageOffering>
+  <description>Quickbird costas 2004</description>
+  <name>Costas</name>
+  <label>Costas</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.769215668705582 37.8184338945691</gml:pos>
+      <gml:pos>0.506868538627119 40.525456338613</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.769215668705582 37.8184338945691</gml:pos>
+          <gml:pos>0.506868538627119 40.525456338613</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>696287.65 4191112.35</gml:pos>
+          <gml:pos>797213.426521 4488737.845669</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>144179 425177</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>696287.65 4488737.845669</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats>
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop01_311104</name>
+  <label>orthop01_311104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.411953859600099 40.3952692250145</gml:pos>
+      <gml:pos>0.506868538627582 40.498144970273</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.411953859600099 40.3952692250145</gml:pos>
+          <gml:pos>0.506868538627582 40.498144970273</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>789586.421644 4477596.64567</gml:pos>
+          <gml:pos>797213.426521 4488737.84567</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10887 15914</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>789586.421644 4488737.84567</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.700496406856 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop02_041004</name>
+  <label>orthop02_041004</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.161142185520058 40.1342857176869</gml:pos>
+      <gml:pos>0.292548896326785 40.2560681974345</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.161142185520058 40.1342857176869</gml:pos>
+          <gml:pos>0.292548896326785 40.2560681974345</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>769326.530394 4447918.95274</gml:pos>
+          <gml:pos>780051.230394 4461067.75274</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15320 18782</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>769326.530394 4461067.75274</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop03n_311004</name>
+  <label>orthop03n_311004</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.147236128086632 40.111252474887</gml:pos>
+      <gml:pos>0.209262927539442 40.1866363257871</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.147236128086632 40.111252474887</gml:pos>
+          <gml:pos>0.209262927539442 40.1866363257871</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>768239.61427 4445109.29255</gml:pos>
+          <gml:pos>773240.41427 4453310.49255</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>7143 11714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>768239.61427 4453310.49255</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop03s_311004_01</name>
+  <label>orthop03s_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.0872101105503621 40.0818258206747</gml:pos>
+      <gml:pos>0.22114471507211 40.1932962005782</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.0872101105503621 40.0818258206747</gml:pos>
+          <gml:pos>0.22114471507211 40.1932962005782</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>763228.894619 4441873.68658</gml:pos>
+          <gml:pos>774230.094619 4453874.48658</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15715 17142</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>763228.894619 4453874.48658</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop03s_311004_02</name>
+  <label>orthop03s_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.030134915894617 40.0087916305901</gml:pos>
+      <gml:pos>0.16383554256875 40.1202004185233</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.030134915894617 40.0087916305901</gml:pos>
+          <gml:pos>0.16383554256875 40.1202004185233</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>758638.064359 4433590.23199</gml:pos>
+          <gml:pos>769639.264359 4445591.03199</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15715 17142</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>758638.064359 4445591.03199</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop04_311004_01</name>
+  <label>orthop04_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.064429002189167 39.8686021111024</gml:pos>
+      <gml:pos>0.0391632263460172 39.9701456674512</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.064429002189167 39.8686021111024</gml:pos>
+          <gml:pos>0.0391632263460172 39.9701456674512</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>751080.89797 4417658.15575</gml:pos>
+          <gml:pos>759581.69797 4428659.35575</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12143 15714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>751080.89797 4428659.35575</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop04_311004_02</name>
+  <label>orthop04_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.0059801589732133 39.9589210820855</gml:pos>
+      <gml:pos>0.0861765725681437 40.0602012338313</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.0059801589732133 39.9589210820855</gml:pos>
+          <gml:pos>0.0861765725681437 40.0602012338313</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>755745.300367 4427822.77831</gml:pos>
+          <gml:pos>763246.500367 4438823.97831</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10715 15714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>755745.300367 4438823.97831</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop05_311004_01</name>
+  <label>orthop05_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.184109898221608 39.7358685309031</gml:pos>
+      <gml:pos>-0.0750466714741807 39.8374622821562</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.184109898221608 39.7358685309031</gml:pos>
+          <gml:pos>-0.0750466714741807 39.8374622821562</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>741306.868269 4402597.33799</gml:pos>
+          <gml:pos>750308.168269 4413598.53799</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12858 15714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>741306.868269 4413598.53799</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop05_311004_02</name>
+  <label>orthop05_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.117821241552359 39.8165947273632</gml:pos>
+      <gml:pos>-0.00269513638604592 39.9183962094939</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.117821241552359 39.8165947273632</gml:pos>
+          <gml:pos>-0.00269513638604592 39.9183962094939</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>746698.87415 4411763.74799</gml:pos>
+          <gml:pos>756199.97415 4422764.94799</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>13572 15714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>746698.87415 4422764.94799</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop06_311004_01</name>
+  <label>orthop06_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.275219416965276 39.5950920024498</gml:pos>
+      <gml:pos>-0.184155536472809 39.6871833112806</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.275219416965276 39.5950920024498</gml:pos>
+          <gml:pos>-0.184155536472809 39.6871833112806</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>733974.65 4386671.49606</gml:pos>
+          <gml:pos>741489.15 4396672.39606</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10734 14285</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>733974.65 4396672.39606</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop06_311004_02</name>
+  <label>orthop06_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.215882735212665 39.6816925812939</gml:pos>
+      <gml:pos>-0.153792859579015 39.7776035452773</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.215882735212665 39.6816925812939</gml:pos>
+          <gml:pos>-0.153792859579015 39.7776035452773</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>738774.65 4396366.75502</gml:pos>
+          <gml:pos>743775.45 4406867.45502</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>7143 14999</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>738774.65 4406867.45502</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop07_311004_01</name>
+  <label>orthop07_311004_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.314134220213874 39.5389645252734</gml:pos>
+      <gml:pos>-0.208807505395484 39.6457600608977</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.314134220213874 39.5389645252734</gml:pos>
+          <gml:pos>-0.208807505395484 39.6457600608977</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>730817.802996 4380373.34965</gml:pos>
+          <gml:pos>739518.802996 4391974.44965</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12429 16571</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>730817.802996 4391974.44965</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop07_311004_02</name>
+  <label>orthop07_311004_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.342128552498647 39.4528266976444</gml:pos>
+      <gml:pos>-0.274745188591142 39.5443190026711</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.342128552498647 39.4528266976444</gml:pos>
+          <gml:pos>-0.274745188591142 39.5443190026711</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>728696.99189 4370639.57047</gml:pos>
+          <gml:pos>734198.29189 4380640.47047</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>7858 14285</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>728696.99189 4380640.47047</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop08_081104</name>
+  <label>orthop08_081104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.12173136235497 38.7060005480509</gml:pos>
+      <gml:pos>0.244722293013489 38.8396720246421</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.12173136235497 38.7060005480509</gml:pos>
+          <gml:pos>0.244722293013489 38.8396720246421</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>771460.955047 4289205.04396</gml:pos>
+          <gml:pos>781662.055047 4303706.24396</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14572 20714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>771460.955047 4303706.24396</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop09_081104_01</name>
+  <label>orthop09_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.088804767492067 38.6613849297483</gml:pos>
+      <gml:pos>0.207196405070599 38.7454726610249</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.088804767492067 38.6613849297483</gml:pos>
+          <gml:pos>0.207196405070599 38.7454726610249</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>768764.515211 4284144.38515</gml:pos>
+          <gml:pos>778765.415211 4293145.68515</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14286 12857</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>768764.515211 4293145.68515</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop09_081104_02</name>
+  <label>orthop09_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.00632349885466636 38.6164934605806</gml:pos>
+      <gml:pos>0.106715050330735 38.6865464583593</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.00632349885466636 38.6164934605806</gml:pos>
+          <gml:pos>0.106715050330735 38.6865464583593</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>761751.532381 4278862.44211</gml:pos>
+          <gml:pos>770252.332381 4286363.64211</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12143 10714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>761751.532381 4286363.64211</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop10_081104_01</name>
+  <label>orthop10_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.136980485807463 38.5170546860605</gml:pos>
+      <gml:pos>-0.0371101117727906 38.5806924900864</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.136980485807463 38.5170546860605</gml:pos>
+          <gml:pos>-0.0371101117727906 38.5806924900864</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>749616.691491 4267411.89295</gml:pos>
+          <gml:pos>758117.491491 4274213.09295</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12143 9714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>749616.691491 4274213.09295</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop10_081104_02</name>
+  <label>orthop10_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.076735106882625 38.5664797341347</gml:pos>
+      <gml:pos>0.0816807635068847 38.6559597659495</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.076735106882625 38.5664797341347</gml:pos>
+          <gml:pos>0.0816807635068847 38.6559597659495</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>754690.263295 4273235.06968</gml:pos>
+          <gml:pos>768191.163295 4282736.16968</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>19286 13571</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>754690.263295 4282736.16968</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop11_081104</name>
+  <label>orthop11_081104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.311501790904784 38.4707367989647</gml:pos>
+      <gml:pos>-0.0783292130480387 38.5509769105466</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.311501790904784 38.4707367989647</gml:pos>
+          <gml:pos>-0.0783292130480387 38.5509769105466</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>734538.428657 4262154.30552</gml:pos>
+          <gml:pos>754639.628657 4270455.60552</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>28715 11857</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>734538.428657 4270455.60552</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop12_081104_01</name>
+  <label>orthop12_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.434119927724276 38.3464080099809</gml:pos>
+      <gml:pos>-0.361629767927456 38.4559730050029</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.434119927724276 38.3464080099809</gml:pos>
+          <gml:pos>-0.361629767927456 38.4559730050029</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>724236.374588 4247606.91505</gml:pos>
+          <gml:pos>730237.474588 4259607.71505</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>8572 17142</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>724236.374588 4259607.71505</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop12_081104_02</name>
+  <label>orthop12_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.378614997044234 38.4352112413258</gml:pos>
+      <gml:pos>-0.255874384616388 38.5054927088623</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.378614997044234 38.4352112413258</gml:pos>
+          <gml:pos>-0.255874384616388 38.5054927088623</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>728803.681867 4257735.98862</gml:pos>
+          <gml:pos>739304.381867 4265237.18862</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15000 10714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>728803.681867 4265237.18862</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop13_131104</name>
+  <label>orthop13_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.348041797937859 39.3383153088596</gml:pos>
+      <gml:pos>-0.281041463417471 39.5461928127946</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.348041797937859 39.3383153088596</gml:pos>
+          <gml:pos>-0.281041463417471 39.5461928127946</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>728562.190304 4357900.07124</gml:pos>
+          <gml:pos>733650.466178 4380844.67124</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>7266 32776</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>728562.190304 4380844.67124</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.700189331784 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop14_131104</name>
+  <label>orthop14_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.339955238250429 39.2232477387865</gml:pos>
+      <gml:pos>-0.232429279860554 39.4011207166876</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.339955238250429 39.2232477387865</gml:pos>
+          <gml:pos>-0.232429279860554 39.4011207166876</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>729631.752439 4345256.97718</gml:pos>
+          <gml:pos>738332.752439 4364758.27718</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12429 27857</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>729631.752439 4364758.27718</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop15_131104</name>
+  <label>orthop15_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.289235759595255 39.0872233017579</gml:pos>
+      <gml:pos>-0.198718862025195 39.2746110942999</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.289235759595255 39.0872233017579</gml:pos>
+          <gml:pos>-0.198718862025195 39.2746110942999</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>734463.516741 4330245.63376</gml:pos>
+          <gml:pos>741664.416741 4350846.63376</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10286 29428</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>734463.516741 4350846.63376</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop16_131104_01</name>
+  <label>orthop16_131104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.247058054572741 39.0510556962122</gml:pos>
+      <gml:pos>-0.174196293066241 39.1427258689371</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.247058054572741 39.0510556962122</gml:pos>
+          <gml:pos>-0.174196293066241 39.1427258689371</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>738234.899481 4326306.57698</gml:pos>
+          <gml:pos>744235.999481 4336307.47698</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>8572 14285</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>738234.899481 4336307.47698</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop16_131104_02</name>
+  <label>orthop16_131104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.210822301766025 38.9726237490186</gml:pos>
+      <gml:pos>-0.126828888562913 39.0555974632164</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.210822301766025 38.9726237490186</gml:pos>
+          <gml:pos>-0.126828888562913 39.0555974632164</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>741637.171116 4317729.61723</gml:pos>
+          <gml:pos>748637.871116 4326730.91723</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10000 12857</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>741637.171116 4326730.91723</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop17_131104_01</name>
+  <label>orthop17_131104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.181657602795786 38.9357185021325</gml:pos>
+      <gml:pos>-0.0746335106867938 39.0192845975789</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.181657602795786 38.9357185021325</gml:pos>
+          <gml:pos>-0.0746335106867938 39.0192845975789</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>744289.003556 4313776.8392</gml:pos>
+          <gml:pos>753290.303556 4322778.1392</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12858 12857</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>744289.003556 4322778.1392</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop17_131104_02</name>
+  <label>orthop17_131104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.117943002348703 38.868294412074</gml:pos>
+      <gml:pos>-0.00576191400621702 38.9385565931551</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.117943002348703 38.868294412074</gml:pos>
+          <gml:pos>-0.00576191400621702 38.9385565931551</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>750048.579806 4306487.66742</gml:pos>
+          <gml:pos>759549.679806 4313988.86742</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>13572 10714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>750048.579806 4313988.86742</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop18_131104</name>
+  <label>orthop18_131104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.0746928352616706 38.849326950655</gml:pos>
+      <gml:pos>0.0832043718423081 38.9118300407968</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.0746928352616706 38.849326950655</gml:pos>
+          <gml:pos>0.0832043718423081 38.9118300407968</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>753864.751737 4304639.94641</gml:pos>
+          <gml:pos>767365.651737 4311140.84641</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>19286 9285</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>753864.751737 4311140.84641</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop19_081104_01</name>
+  <label>orthop19_081104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.528755271098844 38.2508371352818</gml:pos>
+      <gml:pos>-0.430862375100228 38.3735051096161</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.528755271098844 38.2508371352818</gml:pos>
+          <gml:pos>-0.430862375100228 38.3735051096161</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>716247.100187 4236828.43859</gml:pos>
+          <gml:pos>724448.300187 4250229.23859</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>11715 19142</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>716247.100187 4250229.23859</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop19_081104_02</name>
+  <label>orthop19_081104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.434119991295443 38.3464062094665</gml:pos>
+      <gml:pos>-0.362213489804466 38.4388675293538</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.434119991295443 38.3464062094665</gml:pos>
+          <gml:pos>-0.362213489804466 38.4388675293538</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>724236.374588 4247606.71505</gml:pos>
+          <gml:pos>730237.474588 4257707.71505</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>8572 14428</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>724236.374588 4257707.71505</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop20_181104_01</name>
+  <label>orthop20_181104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.649715059513851 38.1131199164285</gml:pos>
+      <gml:pos>-0.505465344489574 38.2015894747853</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.649715059513851 38.1131199164285</gml:pos>
+          <gml:pos>-0.505465344489574 38.2015894747853</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>706046.2921 4221368.81784</gml:pos>
+          <gml:pos>718447.4921 4230869.91784</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>17715 13571</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>706046.2921 4230869.91784</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop20_181104_02</name>
+  <label>orthop20_181104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.542876572296919 38.1796186626201</gml:pos>
+      <gml:pos>-0.490783803978381 38.3021933075773</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.542876572296919 38.1796186626201</gml:pos>
+          <gml:pos>-0.490783803978381 38.3021933075773</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>715223.996887 4228780.75028</gml:pos>
+          <gml:pos>719424.696887 4242281.65028</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>6000 19285</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>715223.996887 4242281.65028</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop21_181104</name>
+  <label>orthop21_181104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.70999963728032 37.9537566817542</gml:pos>
+      <gml:pos>-0.618069622814675 38.1598790871345</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.70999963728032 37.9537566817542</gml:pos>
+          <gml:pos>-0.618069622814675 38.1598790871345</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>701199.65 4203415.35</gml:pos>
+          <gml:pos>708700.85 4226116.35</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10715 32428</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>701199.65 4226116.35</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop22_1811004</name>
+  <label>orthop22_1811004</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.769215668705582 37.8434482545183</gml:pos>
+      <gml:pos>-0.647530102352871 37.9934296541121</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.769215668705582 37.8434482545183</gml:pos>
+          <gml:pos>-0.647530102352871 37.9934296541121</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>696287.65 4191112.35</gml:pos>
+          <gml:pos>706588.85 4207513.35</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14715 23428</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>696287.65 4207513.35</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop23_261104</name>
+  <label>orthop23_261104</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.37345887604184 40.3368089707198</gml:pos>
+      <gml:pos>0.448414395595265 40.4485879556897</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.37345887604184 40.3368089707198</gml:pos>
+          <gml:pos>0.448414395595265 40.4485879556897</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>786569.11427 4470909.19255</gml:pos>
+          <gml:pos>792470.81427 4483110.89255</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>8430 17429</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>786569.11427 4483110.89255</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop24_261104_01</name>
+  <label>orthop24_261104_01</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.234463105473658 40.1856768191399</gml:pos>
+      <gml:pos>0.356188772135398 40.278972533725</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.234463105473658 40.1856768191399</gml:pos>
+          <gml:pos>0.356188772135398 40.278972533725</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>775367.216691 4453831.6651</gml:pos>
+          <gml:pos>785368.116691 4463832.5651</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14286 14285</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>775367.216691 4463832.5651</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop24_261104_02</name>
+  <label>orthop24_261104_02</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.296938622582628 40.2681463248799</gml:pos>
+      <gml:pos>0.419350322091118 40.3705009241081</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.296938622582628 40.2681463248799</gml:pos>
+          <gml:pos>0.419350322091118 40.3705009241081</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>780346.11427 4463191.69255</gml:pos>
+          <gml:pos>790347.01427 4474192.89255</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14286 15714</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>780346.11427 4474192.89255</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>orthop25_191204</name>
+  <label>orthop25_191204</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.0631186665735442 38.8067199905354</gml:pos>
+      <gml:pos>0.197563116913112 38.863410634572</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.0631186665735442 38.8067199905354</gml:pos>
+          <gml:pos>0.197563116913112 38.863410634572</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>765987.140492 4300252.05875</gml:pos>
+          <gml:pos>777471.340492 4306158.65875</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>16405 8436</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>765987.140492 4306158.65875</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="ecw">
+      <formats>GEOTIFF_INT16</formats>
+    </supportedFormats>
+  </CoverageOffering>
+</CoverageDescription>
\ No newline at end of file
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-simonCITSpotGetCapabilities.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-simonCITSpotGetCapabilities.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-simonCITSpotGetCapabilities.xml	(revision 6982)
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<WCS_Capabilities version="1.0.0" updateSequence="0" xmlns="http://www.opengis.net/wcs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengeospatial.net/wcs/1.0.0/wcsCapabilities.xsd">
+<Service>
+  <name>MapServer WCS</name>
+  <label>Servidor wcs simon</label>
+  <keywords>
+    <keyword>WCS</keyword>
+  </keywords>
+  <fees>NONE</fees>
+  <accessConstraints>
+    NONE
+  </accessConstraints>
+</Service>
+<Capability>
+  <Request>
+    <GetCapabilities>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/inestable/spot.map&amp;"/></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/inestable/spot.map&amp;"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetCapabilities>
+    <DescribeCoverage>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/inestable/spot.map&amp;"/></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/inestable/spot.map&amp;"/></Post>
+        </HTTP>
+      </DCPType>
+    </DescribeCoverage>
+    <GetCoverage>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/inestable/spot.map&amp;"/></Get>
+        </HTTP>
+      </DCPType>
+      <DCPType>
+        <HTTP>
+          <Post><OnlineResource xlink:type="simple" xlink:href="http://simon:2000/cgi-bin/mapserv?map=/etc/mapserver/inestable/spot.map&amp;"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetCoverage>
+  </Request>
+  <Exception>
+    <Format>application/vnd.ogc.se_xml</Format>
+  </Exception>
+  <VendorSpecificCapabilities/>
+</Capability>
+<ContentMetadata>
+  <CoverageOfferingBrief>
+  <description>Spot 5</description>
+  <name>Spot</name>
+  <label>Spot</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.86475368381057 37.7142167257884</gml:pos>
+      <gml:pos>0.677809422798979 40.9142896237773</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./039_269/043_269_mer_orto.img</name>
+  <label>039_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.00322152239155749 40.0508119236423</gml:pos>
+      <gml:pos>0.546336923922881 40.6327661615988</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./039_270/039_270_mer_orto.img</name>
+  <label>039_270</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.54676197706921 39.4606972490718</gml:pos>
+      <gml:pos>-0.868435651917331 40.1294628581342</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./039_271/orto_merge_039_271.img</name>
+  <label>039_271</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.55664772339341 38.9844120265197</gml:pos>
+      <gml:pos>-1.00604599751678 39.6311355126439</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./040_268/orto_040_268_merge.img</name>
+  <label>040_268</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.882933131536222 40.4206286697068</gml:pos>
+      <gml:pos>0.042917112220084 40.8557286661707</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./040_269/040_269_mer_orto.img</name>
+  <label>040_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.06017669544974 39.9335886073308</gml:pos>
+      <gml:pos>-0.134746821581555 40.6209906108597</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./040_270/ortho40_270_merged.img</name>
+  <label>040_270</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.23314927175127 39.4500113294251</gml:pos>
+      <gml:pos>-0.316543057947295 40.1334195871412</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./040_271/040_271_mer_orto.img</name>
+  <label>040_271</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.40711287394984 38.9630942019202</gml:pos>
+      <gml:pos>-0.498591247901213 39.6452000314982</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./040_272/ortho040_272_pc.img</name>
+  <label>040_272</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.50661519738613 38.4858384680425</gml:pos>
+      <gml:pos>-0.660854303698855 39.1453819916464</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./040_273/ortho040_273.img</name>
+  <label>040_273</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.78560250629897 37.9946383011098</gml:pos>
+      <gml:pos>-0.890457811165821 38.6569004835813</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./041_268/ortho041_268.img</name>
+  <label>041_268</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.356449851947824 40.3956240488913</gml:pos>
+      <gml:pos>0.615718364079852 41.1332339337031</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./041_269/ortho041_269_pc.img</name>
+  <label>041_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.479653469782083 39.9492494682236</gml:pos>
+      <gml:pos>0.445247142510061 40.6096049622214</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./041_270/ortho041_270.img</name>
+  <label>041_270</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.662681099922943 39.4610007000431</gml:pos>
+      <gml:pos>0.202247054039875 40.1227571570735</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./041_272/orto_041_272_merge.img</name>
+  <label>041_272</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.93884828048088 38.4867392539068</gml:pos>
+      <gml:pos>-0.0710677786125404 39.1455128669135</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./041_273/ortho041_273_merged.img</name>
+  <label>041_273</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.13731938812606 37.9970045311446</gml:pos>
+      <gml:pos>-0.183220235614133 38.6589793948757</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./041_274/041_274_mer_orto.img</name>
+  <label>041_274</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.25887586160928 37.6979338310255</gml:pos>
+      <gml:pos>-0.622777299800351 38.1698074145459</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./042_271/orto_merge_042_271.img</name>
+  <label>042_271</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.804013057066019 38.9718975937575</gml:pos>
+      <gml:pos>0.218694462599702 39.6378615837972</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./043_268/043_268_ortho_merged.img</name>
+  <label>043_268</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.242968471591328 40.4967322631042</gml:pos>
+      <gml:pos>1.00471450204767 41.1066346476233</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./043_269/043_269_mer_orto.img</name>
+  <label>043_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.00322152239155749 40.0508119236423</gml:pos>
+      <gml:pos>0.546336923922881 40.6327661615988</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./043_272/merge_3_043_272.img</name>
+  <label>043_272</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.448386272181648 38.4482532754791</gml:pos>
+      <gml:pos>0.472227389196073 39.1897082589744</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+  <CoverageOfferingBrief>
+  <name>./043_273/ortho_043_273_merged.img</name>
+  <label>043_273</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.414198033729193 38.3348922719083</gml:pos>
+      <gml:pos>-0.0239423986897304 38.6577076893867</gml:pos>
+    </lonLatEnvelope>
+  </CoverageOfferingBrief>
+</ContentMetadata>
+</WCS_Capabilities>
\ No newline at end of file
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-simonCITSpotDescribeCoverage.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-simonCITSpotDescribeCoverage.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/resources/wcs/WCS-simonCITSpotDescribeCoverage.xml	(revision 6982)
@@ -0,0 +1,1277 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    gvSIG. Desktop Geographic Information System.
+
+    Copyright (C) 2007-2013 gvSIG Association.
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 3
+    of the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+    MA  02110-1301, USA.
+
+    For any additional information, do not hesitate to contact us
+    at info AT gvsig.com, or visit our website www.gvsig.com.
+
+-->
+<CoverageDescription version="1.0.0" updateSequence="0" xmlns="http://www.opengis.net/wcs" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wcs http://schemas.opengeospatial.net/wcs/1.0.0/describeCoverage.xsd">
+  <CoverageOffering>
+  <description>Spot 5</description>
+  <name>Spot</name>
+  <label>Spot</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.86475368381057 37.7142167257884</gml:pos>
+      <gml:pos>0.677809422798979 40.9142896237773</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.86475368381057 37.7142167257884</gml:pos>
+          <gml:pos>0.677809422798979 40.9142896237773</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>600000 4180000</gml:pos>
+          <gml:pos>810000 4530000</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>299999 499998</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>600000 4530000</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>0.7 0</gml:offsetVector>
+          <gml:offsetVector>0 -0.7</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+<!-- WARNING: Mandatory metadata '..._rangeset_name' was missing in this context. -->
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats>
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./039_269/043_269_mer_orto.img</name>
+  <label>039_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.00322152239155749 40.0508119236423</gml:pos>
+      <gml:pos>0.546336923922881 40.6327661615988</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.00322152239155749 40.0508119236423</gml:pos>
+          <gml:pos>0.546336923922881 40.6327661615988</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>755591.5 4439401.5</gml:pos>
+          <gml:pos>800011.5 4502461.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>8883 12610</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>755591.5 4502461.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./039_270/039_270_mer_orto.img</name>
+  <label>039_270</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.54676197706921 39.4606972490718</gml:pos>
+      <gml:pos>-0.868435651917331 40.1294628581342</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.54676197706921 39.4606972490718</gml:pos>
+          <gml:pos>-0.868435651917331 40.1294628581342</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>625008.5 4370104.5</gml:pos>
+          <gml:pos>681648.5 4443234.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>11327 14624</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>625008.5 4443234.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./039_271/orto_merge_039_271.img</name>
+  <label>039_271</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.55664772339341 38.9844120265197</gml:pos>
+      <gml:pos>-1.00604599751678 39.6311355126439</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.55664772339341 38.9844120265197</gml:pos>
+          <gml:pos>-1.00604599751678 39.6311355126439</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>625004.5 4316976.5</gml:pos>
+          <gml:pos>671149.5 4387906.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>9228 14184</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>625004.5 4387906.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./040_268/orto_040_268_merge.img</name>
+  <label>040_268</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.882933131536222 40.4206286697068</gml:pos>
+      <gml:pos>0.042917112220084 40.8557286661707</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.882933131536222 40.4206286697068</gml:pos>
+          <gml:pos>0.042917112220084 40.8557286661707</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>679559.5 4478914.5</gml:pos>
+          <gml:pos>756579.5 4525004.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15403 9216</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>679559.5 4525004.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./040_269/040_269_mer_orto.img</name>
+  <label>040_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.06017669544974 39.9335886073308</gml:pos>
+      <gml:pos>-0.134746821581555 40.6209906108597</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.06017669544974 39.9335886073308</gml:pos>
+          <gml:pos>-0.134746821581555 40.6209906108597</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>665711.5 4424317.5</gml:pos>
+          <gml:pos>742466.5 4498607.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15350 14856</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>665711.5 4498607.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./040_270/ortho40_270_merged.img</name>
+  <label>040_270</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.23314927175127 39.4500113294251</gml:pos>
+      <gml:pos>-0.316543057947295 40.1334195871412</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.23314927175127 39.4500113294251</gml:pos>
+          <gml:pos>-0.316543057947295 40.1334195871412</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>651995.5 4370162.5</gml:pos>
+          <gml:pos>728695.5 4444167.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15339 14799</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>651995.5 4444167.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./040_271/040_271_mer_orto.img</name>
+  <label>040_271</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.40711287394984 38.9630942019202</gml:pos>
+      <gml:pos>-0.498591247901213 39.6452000314982</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.40711287394984 38.9630942019202</gml:pos>
+          <gml:pos>-0.498591247901213 39.6452000314982</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>637982.5 4315674.5</gml:pos>
+          <gml:pos>714712.5 4389689.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15345 14801</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>637982.5 4389689.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./040_272/ortho040_272_pc.img</name>
+  <label>040_272</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.50661519738613 38.4858384680425</gml:pos>
+      <gml:pos>-0.660854303698855 39.1453819916464</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.50661519738613 38.4858384680425</gml:pos>
+          <gml:pos>-0.660854303698855 39.1453819916464</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>630230.5 4262339.5</gml:pos>
+          <gml:pos>702195.5 4334064.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14392 14343</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>630230.5 4334064.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./040_273/ortho040_273.img</name>
+  <label>040_273</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.78560250629897 37.9946383011098</gml:pos>
+      <gml:pos>-0.890457811165821 38.6569004835813</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.78560250629897 37.9946383011098</gml:pos>
+          <gml:pos>-0.890457811165821 38.6569004835813</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>606617.5 4207352.5</gml:pos>
+          <gml:pos>683597.5 4279487.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15395 14425</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>606617.5 4279487.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./041_268/ortho041_268.img</name>
+  <label>041_268</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.356449851947824 40.3956240488913</gml:pos>
+      <gml:pos>0.615718364079852 41.1332339337031</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.356449851947824 40.3956240488913</gml:pos>
+          <gml:pos>0.615718364079852 41.1332339337031</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>724284.5 4477893.5</gml:pos>
+          <gml:pos>803634.5 4557068.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15869 15833</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>724284.5 4557068.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./041_269/ortho041_269_pc.img</name>
+  <label>041_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.479653469782083 39.9492494682236</gml:pos>
+      <gml:pos>0.445247142510061 40.6096049622214</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.479653469782083 39.9492494682236</gml:pos>
+          <gml:pos>0.445247142510061 40.6096049622214</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>715245.5 4427780.5</gml:pos>
+          <gml:pos>791595.5 4498610.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15269 14164</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>715245.5 4498610.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./041_270/ortho041_270.img</name>
+  <label>041_270</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.662681099922943 39.4610007000431</gml:pos>
+      <gml:pos>0.202247054039875 40.1227571570735</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.662681099922943 39.4610007000431</gml:pos>
+          <gml:pos>0.202247054039875 40.1227571570735</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>701035.5 4372816.5</gml:pos>
+          <gml:pos>772970.5 4444126.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14386 14260</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>701035.5 4444126.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./041_272/orto_041_272_merge.img</name>
+  <label>041_272</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.93884828048088 38.4867392539068</gml:pos>
+      <gml:pos>-0.0710677786125404 39.1455128669135</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.93884828048088 38.4867392539068</gml:pos>
+          <gml:pos>-0.0710677786125404 39.1455128669135</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>679733.5 4263887.5</gml:pos>
+          <gml:pos>753223.5 4335057.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>14697 14232</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>679733.5 4335057.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./041_273/ortho041_273_merged.img</name>
+  <label>041_273</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.13731938812606 37.9970045311446</gml:pos>
+      <gml:pos>-0.183220235614133 38.6589793948757</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.13731938812606 37.9970045311446</gml:pos>
+          <gml:pos>-0.183220235614133 38.6589793948757</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>663518.5 4209231.5</gml:pos>
+          <gml:pos>745173.5 4280681.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>16330 14288</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>663518.5 4280681.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./041_274/041_274_mer_orto.img</name>
+  <label>041_274</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-1.25887586160928 37.6979338310255</gml:pos>
+      <gml:pos>-0.622777299800351 38.1698074145459</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-1.25887586160928 37.6979338310255</gml:pos>
+          <gml:pos>-0.622777299800351 38.1698074145459</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>653481.5 4174996.5</gml:pos>
+          <gml:pos>708286.5 4226176.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>10960 10234</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>653481.5 4226176.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./042_271/orto_merge_042_271.img</name>
+  <label>042_271</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.804013057066019 38.9718975937575</gml:pos>
+      <gml:pos>0.218694462599702 39.6378615837972</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.804013057066019 38.9718975937575</gml:pos>
+          <gml:pos>0.218694462599702 39.6378615837972</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>690186.5 4318571.5</gml:pos>
+          <gml:pos>776351.5 4389986.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>17232 14281</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>690186.5 4389986.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./043_268/043_268_ortho_merged.img</name>
+  <label>043_268</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>0.242968471591328 40.4967322631042</gml:pos>
+      <gml:pos>1.00471450204767 41.1066346476233</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>0.242968471591328 40.4967322631042</gml:pos>
+          <gml:pos>1.00471450204767 41.1066346476233</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>774745.475904 4490544.41566</gml:pos>
+          <gml:pos>836430.475904 4555834.41566</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>12336 13056</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>774745.475904 4555834.41566</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./043_269/043_269_mer_orto.img</name>
+  <label>043_269</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.00322152239155749 40.0508119236423</gml:pos>
+      <gml:pos>0.546336923922881 40.6327661615988</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.00322152239155749 40.0508119236423</gml:pos>
+          <gml:pos>0.546336923922881 40.6327661615988</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>755591.5 4439401.5</gml:pos>
+          <gml:pos>800011.5 4502461.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>8883 12610</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>755591.5 4502461.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./043_272/merge_3_043_272.img</name>
+  <label>043_272</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.448386272181648 38.4482532754791</gml:pos>
+      <gml:pos>0.472227389196073 39.1897082589744</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.448386272181648 38.4482532754791</gml:pos>
+          <gml:pos>0.472227389196073 39.1897082589744</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>722611.5 4261222.5</gml:pos>
+          <gml:pos>800011.5 4341067.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>15479 15967</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>722611.5 4341067.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+  <CoverageOffering>
+  <name>./043_273/ortho_043_273_merged.img</name>
+  <label>043_273</label>
+    <lonLatEnvelope srsName="WGS84(DD)">
+      <gml:pos>-0.414198033729193 38.3348922719083</gml:pos>
+      <gml:pos>-0.0239423986897304 38.6577076893867</gml:pos>
+    </lonLatEnvelope>
+    <domainSet>
+      <spatialDomain>
+        <gml:Envelope srsName="WGS84(DD)">
+          <gml:pos>-0.414198033729193 38.3348922719083</gml:pos>
+          <gml:pos>-0.0239423986897304 38.6577076893867</gml:pos>
+        </gml:Envelope>
+        <gml:Envelope srsName="EPSG:23030">
+          <gml:pos>725990.403226 4247200.5</gml:pos>
+          <gml:pos>759020.403226 4282065.5</gml:pos>
+        </gml:Envelope>
+        <gml:RectifiedGrid dimension="2">
+          <gml:limits>
+            <gml:GridEnvelope>
+              <gml:low>0 0</gml:low>
+              <gml:high>6605 6971</gml:high>
+            </gml:GridEnvelope>
+          </gml:limits>
+          <gml:axisName>x</gml:axisName>
+          <gml:axisName>y</gml:axisName>
+          <gml:origin>
+            <gml:pos>725990.403226 4282065.5</gml:pos>
+          </gml:origin>
+          <gml:offsetVector>5 0</gml:offsetVector>
+          <gml:offsetVector>0 -5</gml:offsetVector>
+        </gml:RectifiedGrid>
+      </spatialDomain>
+    </domainSet>
+    <rangeSet>
+      <RangeSet>
+        <name>bands</name>
+<!-- WARNING: Mandatory metadata '..._rangeset_label' was missing in this context. -->
+        <axisDescription>
+          <AxisDescription>
+            <name>bands</name>
+            <label>Bands/Channels/Samples</label>
+            <values>
+              <singleValue>1</singleValue>
+              <singleValue>2</singleValue>
+              <singleValue>3</singleValue>
+              <singleValue>4</singleValue>
+            </values>
+          </AxisDescription>
+        </axisDescription>
+      </RangeSet>
+    </rangeSet>
+    <supportedCRSs>
+      <requestResponseCRSs>EPSG:23030</requestResponseCRSs>
+      <nativeCRSs>EPSG:23030</nativeCRSs>
+    </supportedCRSs>
+    <supportedFormats nativeFormat="IMG">
+      <formats>IMG</formats>
+    </supportedFormats>
+  </CoverageOffering>
+</CoverageDescription>
\ No newline at end of file
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/java/org/gvsig/remoteclient/AllTests.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/java/org/gvsig/remoteclient/AllTests.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/java/org/gvsig/remoteclient/AllTests.java	(revision 6982)
@@ -0,0 +1,46 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.gvsig.remoteclient.wcs.wcs_1_0_0.WCSProtocolHandler_1_0_0Test;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for org.gvsig.remoteClient");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(Test.class);
+		
+		//commented until there is a way to simulate the needed servers.
+		//suite.addTestSuite(URLRetrieveTest.class);
+		suite.addTestSuite(WCSProtocolHandler_1_0_0Test.class);
+		
+		//$JUnit-END$
+		return suite;
+	}
+
+}
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler_1_0_0Test.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler_1_0_0Test.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/test/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler_1_0_0Test.java	(revision 6982)
@@ -0,0 +1,60 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.wcs_1_0_0;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+/**
+ * 
+ * @author jaume
+ *
+ */
+public class WCSProtocolHandler_1_0_0Test extends TestCase {
+	WCSProtocolHandler1_0_0 handler1, handler2, handler3, handler4;
+	
+	public void setUp() {
+		System.out.println("Setting up test..");
+		handler1 = new WCSProtocolHandler1_0_0();
+		handler2 = new WCSProtocolHandler1_0_0();
+		handler3 = new WCSProtocolHandler1_0_0();
+		handler4 = new WCSProtocolHandler1_0_0();
+	}
+	
+	
+	
+	public void testParsing() {
+		long t1 = System.currentTimeMillis();
+		assertTrue(handler1.parseCapabilities(new File("testdata/wcs/WCS-hypnosGetCapabilities.xml")));
+		assertTrue(handler1.parseDescribeCoverage(new File("testdata/wcs/WCS-hypnosDescribeCoverage.xml")));
+		assertTrue(handler2.parseCapabilities(new File("testdata/wcs/WCS-simonCITCostasGetCapabilities.xml")));
+		assertTrue(handler2.parseDescribeCoverage(new File("testdata/wcs/WCS-simonCITCostasDescribeCoverage.xml")));
+		assertTrue(handler3.parseCapabilities(new File("testdata/wcs/WCS-simonCITSpotGetCapabilities.xml")));
+		assertTrue(handler3.parseDescribeCoverage(new File("testdata/wcs/WCS-simonCITSpotDescribeCoverage.xml")));
+		assertTrue(handler4.parseCapabilities(new File("testdata/wcs/WCS-ionicGetCapabilities.xml")));
+		assertTrue(handler4.parseDescribeCoverage(new File("testdata/wcs/WCS-ionicDescribeCoverage.xml")));
+		long t2 = System.currentTimeMillis();
+		System.out.println("Test parsing done with apparently no errors in "+ (t2-(float)t1)/1000+" seconds");
+	}
+}
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSClient.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSClient.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSClient.java	(revision 6982)
@@ -0,0 +1,267 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.awt.geom.Rectangle2D;
+import java.io.File;
+import java.io.IOException;
+import java.net.ConnectException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.remoteclient.exceptions.ServerErrorException;
+import org.gvsig.remoteclient.exceptions.WCSException;
+//import org.gvsig.remoteclient.exceptions.WMSException;
+import org.gvsig.remoteclient.utils.BoundaryBox;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * WCSClient managing the low-level comunication to the server. It is used
+ * as a bridge between a standard WCS server and other high-level clients.
+ * @author jaume dominguez faus - jaume.dominguez@iver.es
+ *
+ */
+public class WCSClient extends org.gvsig.remoteclient.RasterClient{
+
+    private WCSProtocolHandler handler   = null;
+    private Hashtable          layerPool = null;
+    private Logger             log       = LoggerFactory.getLogger(WCSClient.class);
+
+    /**
+     * Constructor.
+     * the parameter host, indicates the WCS host to connect.
+     * @throws IOException
+     *
+     */
+    public WCSClient(String host) throws ConnectException, IOException {
+        setHost(host);
+        try {
+        	handler = WCSProtocolHandlerFactory.negotiate(hostName);
+        	handler.setHost(hostName);
+        } catch(ConnectException conE) {
+        	throw conE;
+        } catch(IOException ioE) {
+        	throw ioE;
+        } catch(Exception e) {
+        	log.info("Error getting handler for " + hostName, e);
+        }
+    }
+
+    /**
+     * <p>Checks the connection to de remote WMS and requests its capabilities.</p>
+     * @param override
+     *
+     */
+    public boolean connect(boolean override, ICancellable cancel)
+    {
+        try {
+            if (handler == null) {
+                if (getHost().trim().length() > 0) {
+                	handler = WCSProtocolHandlerFactory.negotiate(getHost());
+                    handler.setHost(getHost());
+                } else {
+                    // must to specify host first!!!!
+                    return false;
+                }
+            }
+            getCapabilities(null, override, cancel);
+
+            describeCoverage(null, override, cancel); //TODO falta posar el onlineresource del describe coverage
+            return true;
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * Sends a GetCapabilities request using the properties contained by
+     * the status. If status is null, then it uses the default configuration.
+     * @param override
+     * @param WCSStatus, containing the status properties
+     */
+    private void getCapabilities(WCSStatus status, boolean override, ICancellable cancel) {
+        handler.getCapabilities(status, override, cancel);
+    }
+
+    /**
+     * Sends a DescribeCoverage request using the properties contained by
+     * the status.
+     * @param override, if true the cache is ignored
+     * @param WCSStatus, containing the status properties
+     */
+    private void describeCoverage(WCSStatus status, boolean override, ICancellable cancel) {
+        handler.describeCoverage(status, override, cancel);
+        // check it was response or if we need to perform a specific DescribeCoverage for each coverage
+        Hashtable layers = handler.getLayers();
+        Iterator it = layers.keySet().iterator();
+        while (it.hasNext()) {
+        	Object obj = layers.get(it.next());
+        	if (obj instanceof CoverageOfferingBrief) {
+        		if (status == null)
+        			status = new WCSStatus();
+        		status.setCoveraName( ((CoverageOfferingBrief) obj).getName());
+        		handler.describeCoverage(status, override, cancel);
+        	}
+        }
+
+        layerPool = handler.getLayers();
+    }
+    
+    private Hashtable getLayerPool() {
+    	if(layerPool == null || layerPool.isEmpty()) {
+    		layerPool = getHandLer().getLayers();
+    		if(layerPool.isEmpty()) {
+    			describeCoverage(null, true, null);
+    			layerPool = getHandLer().getLayers();
+    		}
+    	}
+    	return layerPool;
+    }
+    
+    private WCSProtocolHandler getHandLer() {
+    	if(handler == null) {
+    		try {
+            	handler = WCSProtocolHandlerFactory.negotiate(hostName);
+            	handler.setHost(hostName);
+            } catch(ConnectException conE) {
+            	log.debug("Error getting handler for " + hostName, conE);
+            } catch(IOException ioE) {
+            	log.debug("Error getting handler for " + hostName, ioE);
+            } catch(Exception e) {
+            	log.debug("Error getting handler for " + hostName, e);
+            }
+    	}
+    	return handler;
+    }
+    
+    public void close() {
+    }
+
+    /**
+     * Returns the title of the service. The title is a human-readable string format
+     * used to label the service connection.
+     * @return String
+     */
+	public String getServiceTitle() {
+		return getHandLer().serviceInfo.title;
+	}
+
+	/**
+	 * Returns the service version (1.0.0, 1.1.0, ...).
+	 * @return String
+	 */
+	public String getVersion() {
+		return getHandLer().getVersion();
+	}
+
+	/**
+	 * Returns a brief description of the service, it is a human-readable string.
+	 * @return String
+	 */
+	public String getDescription() {
+		return getHandLer().serviceInfo.abstr;
+	}
+
+	/**
+	 *
+	 * @return
+	 */
+	public ArrayList getFormats() {
+		return getHandLer().getFormats();
+	}
+
+	/**
+	 * Returns a hash table containing the WCSCoverage's produced at parse time using
+	 * the coverage names as the Hashtable's keys
+	 * @return Hashtable.
+	 */
+	public Hashtable getCoverageList() {
+		return getLayerPool();
+	}
+
+	/**
+	 * Given a coverage name, it returns the coverage's title.
+	 * @param coverageName
+	 * @return String
+	 */
+	public String getLabel(String coverageName) {
+		return ((WCSCoverage) getLayerPool().get(coverageName)).getTitle();
+	}
+
+	/**
+	 * Given a coverage name and the CRS name, it returns the extent defined by the
+	 * server in the DescribeCoverage document.
+	 *
+	 * @param coverageName
+	 * @param crs
+	 * @return Rectangle2D
+	 */
+	public Rectangle2D getExtent(String coverageName, String crs) {
+		BoundaryBox bbox = (BoundaryBox) ((WCSCoverage) getLayerPool().get(coverageName)).getBbox(crs);
+        if (bbox == null) return null;
+        double xmin = bbox.getXmin();
+        double xmax = bbox.getXmax();
+        double ymin = bbox.getYmin();
+        double ymax = bbox.getYmax();
+		return new Rectangle2D.Double(xmin, ymin, xmax-xmin, ymax-ymin);
+	}
+
+	/**
+	 * Sends the GetCoverage request according to the settings passed in the status
+	 * argument.
+	 * @param status
+	 * @return File
+	 * @throws ServerErrorException
+	 * @throws WCSException
+	 */
+	public File getCoverage(WCSStatus status, ICancellable cancel) throws ServerErrorException, WCSException {
+		return getHandLer().getCoverage(status, cancel);
+	}
+	
+	/**
+     * <p>Gets the GetMap URL. The final client should download the file</p> 
+     * @throws ServerErrorException 
+     */
+//    public URL getCoverageURL(WCSStatus status, ICancellable cancel) throws WMSException, ServerErrorException{   
+    public URL getCoverageURL(WCSStatus status, ICancellable cancel) throws ServerErrorException{   
+       return getHandLer().getCoverageURL(status, cancel);
+    } 
+    
+    /**
+     * Returns the exception message if the file is a XML instead of a image.
+     * @param file
+     * @return
+     * @throws IOException 
+     */
+    public String getExceptionMessage(File file) throws IOException {
+    	return getHandLer().getExceptionMessage(file);
+    }
+}
+
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandler.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandler.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandler.java	(revision 6982)
@@ -0,0 +1,374 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.lang.StringUtils;
+import org.gvsig.compat.net.ICancellable;
+import org.gvsig.remoteclient.exceptions.ServerErrorException;
+import org.gvsig.remoteclient.exceptions.WCSException;
+//import org.gvsig.remoteclient.exceptions.WMSException;
+import org.gvsig.remoteclient.ogc.OGCProtocolHandler;
+import org.gvsig.remoteclient.ogc.OGCServiceInformation;
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+import org.gvsig.remoteclient.utils.ExceptionTags;
+import org.gvsig.remoteclient.utils.Utilities;
+import org.gvsig.remoteclient.wcs.request.WCSDescribeCoverageRequest;
+import org.gvsig.remoteclient.wcs.request.WCSGetCoverageRequest;
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+/**
+ *
+ * @author jaume
+ *
+ */
+public abstract class WCSProtocolHandler extends OGCProtocolHandler {
+	/**
+	 * Encoding used to parse different xml documents.
+	 */
+	protected String encoding = "UTF-8";
+	protected Hashtable layerPool = new Hashtable();
+
+	/**
+     * WCS metadata
+     */
+    protected WCSServiceInformation serviceInfo = new WCSServiceInformation();
+    
+    private static final StringUtils stringUtils = CompatLocator.getStringUtils();
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.OGCProtocolHandler#setHost(java.lang.String)
+	 */
+	public void setHost(String host) {
+		try {
+			// Validates the URL if doesn't produces an exception
+			new URL(host);
+
+			int index = host.indexOf("?");
+			
+			if (index == -1)
+				super.setHost(host);
+			else
+				super.setHost(host.substring(0, index));
+		}
+		catch (MalformedURLException m) {
+			// Bad URL -> hold it
+			super.setHost(host);
+		}
+	}
+
+	/**
+     * <p>
+     * Builds a GetCapabilities request that is sent to the WCS
+     * the response will be parse to extract the data needed by the
+     * WCS client.
+     * </p>
+     * @param override, if true the cache is ignored
+     */
+    public void getCapabilities(WCSStatus status, boolean override, ICancellable cancel) {
+           URL request = null;
+            try {
+                request = new URL(buildCapabilitiesRequest(status));
+            }
+            catch(Exception e) {
+                e.printStackTrace();
+            }
+            try {
+            	if (override)
+            	    downloader.removeURL(request);
+            	File f =  downloader.downloadFile(request,"wcs_capabilities.xml", cancel);
+            	if (f!=null)
+            		parseCapabilities(f);
+            } catch(Exception e) {
+            	e.printStackTrace();
+            }
+    }
+
+    /**
+     * Builds a complete URL-string that can be used to send a GetCapabilities request.
+     * @return String
+     */
+    private String buildCapabilitiesRequest(WCSStatus status) {
+    	StringBuffer req = new StringBuffer();
+		String symbol = null;
+
+		String onlineResource;
+		if (status == null || status.getOnlineResource() == null)
+			onlineResource = getHost();
+		else
+			onlineResource = status.getOnlineResource();
+		symbol = getSymbol(onlineResource);
+
+		req.append(onlineResource).append(symbol).append("REQUEST=GetCapabilities&SERVICE=WCS&");
+		req.append("VERSION=").append(getVersion()).append("&EXCEPTIONS=XML");
+		return req.toString();
+    }
+
+
+
+    /**
+     * parses the data retrieved by the DescribeCoverage XML document
+     */
+    public abstract boolean parseDescribeCoverage(File f);
+
+    /**
+     * Send a DescribeCoverage request using the settings passed in the status argument.
+     * If status is null, then default settings are used.
+     * @param override
+     * @return String
+     */
+    public void describeCoverage(WCSStatus status, boolean override, ICancellable cancel) {
+       try {
+    	   WCSDescribeCoverageRequest request = createDescribeCoverageRequest(status);
+           File f = request.sendRequest(cancel);
+        	if (f!=null)
+        		parseDescribeCoverage(f);
+        } catch(Exception e) {
+        	e.printStackTrace();
+        }
+    }
+
+    /**
+     * Send a GetCoverage request using the settings passed in the status.
+     * @return String
+     */
+    public File getCoverage(WCSStatus status, ICancellable cancel) throws ServerErrorException, WCSException {
+    	try
+		{
+			//TODO:
+			//pass this buildXXXRequest to the WCSProtocolHandlerXXX: The request can depend on the WCS version.
+			WCSGetCoverageRequest request = createGetCoverageRequest(status);
+            File f = request.sendRequest(cancel);
+
+            if (f!=null && Utilities.isTextFile(f)) {
+                byte[] data = fileToBytes(f);
+
+	    		WCSException wcsEx = null;
+
+            	String exceptionMessage = parseException(data);
+                if (exceptionMessage==null)
+                {
+                 	String error = new String(data);
+                	int pos = error.indexOf("<?xml");
+                	if (pos!= -1)
+                	{
+                		String xml = error.substring(pos,error.length());
+                		exceptionMessage = parseException(xml.getBytes());
+                	}
+                    if (exceptionMessage == null)
+                    	exceptionMessage = new String(data);
+
+                }
+             	wcsEx = new WCSException(exceptionMessage);
+            	wcsEx.setWCSMessage(new String(data));
+
+            	// Since it is an error file, It must be deleted from the cache
+            	downloader.removeURL(request);
+                throw wcsEx;
+            }
+			return f;
+		}
+		catch(IOException e)
+		{
+			e.printStackTrace();
+            throw new ServerErrorException();
+		}
+    }
+    
+//    public URL getCoverageURL(WCSStatus status, ICancellable cancel) throws ServerErrorException, WMSException {
+    public URL getCoverageURL(WCSStatus status, ICancellable cancel) throws ServerErrorException {
+    	try {
+			WCSGetCoverageRequest request = createGetCoverageRequest(status);
+			return request.getURL();
+		} catch(IOException e) {
+			e.printStackTrace();
+            throw new ServerErrorException();
+		}
+    }
+    
+    /**
+     * Returns the exception message if the file is a XML instead of a image.
+     * @param file3
+     * @return
+     * @throws IOException 
+     */
+    public String getExceptionMessage(File f) throws IOException {
+    	if (f == null)
+    		return null;
+    	
+        if (Utilities.isTextFile(f)) {
+            byte[] data = fileToBytes(f);
+
+        	String exceptionMessage = parseException(data);
+            if (exceptionMessage == null) {
+             	String error = new String(data);
+            	int pos = error.indexOf("<?xml");
+            	if (pos!= -1) {
+            		String xml = error.substring(pos,error.length());
+            		exceptionMessage = parseException(xml.getBytes());
+            	}
+                if (exceptionMessage == null)
+                	exceptionMessage = new String(data);
+            }
+         	return exceptionMessage;
+        }
+        return null;
+    }
+
+    /**
+     * Parses the WCS Exception document.
+     * @param bytes, byte[]
+     * @return
+     */
+    private String parseException(byte[] data) {
+    	// TODO: a�� est� fusilat del WMS, comprovar que funciona.
+    	ArrayList errors = new ArrayList();
+        KXmlParser kxmlParser = new KXmlParser();
+        boolean end = false;
+        try
+        {
+            kxmlParser.setInput(new ByteArrayInputStream(data), encoding);
+            kxmlParser.nextTag();
+            int tag;
+            if ( kxmlParser.getEventType() != KXmlParser.END_DOCUMENT )
+            {
+                kxmlParser.require(KXmlParser.START_TAG, null, ExceptionTags.EXCEPTION_ROOT);
+                tag = kxmlParser.nextTag();
+                 while(!end)
+                 {
+                     switch(tag)
+                     {
+                        case KXmlParser.START_TAG:
+                            if (kxmlParser.getName().compareTo(ExceptionTags.SERVICE_EXCEPTION)==0){
+                                String errorCode = kxmlParser.getAttributeValue("", ExceptionTags.CODE);
+                                errorCode = (errorCode != null) ? "["+errorCode+"] " : "";
+                                String errorMessage = kxmlParser.nextText();
+                                errors.add(errorCode+errorMessage);
+                            }
+                            break;
+                        case KXmlParser.END_TAG:
+                        	 if (kxmlParser.getName().compareTo(ExceptionTags.SERVICE_EXCEPTION) == 0 ||
+                        			 kxmlParser.getName().compareTo(ExceptionTags.EXCEPTION_ROOT) == 0)
+                                 end = true;
+                            break;
+
+                     }
+                     if (!end)
+                    	 tag = kxmlParser.nextTag();
+                 }
+                 //kxmlParser.require(KXmlParser.END_DOCUMENT, null, null);
+            }
+        }
+        catch(XmlPullParserException parser_ex){
+            parser_ex.printStackTrace();
+        }
+        catch (IOException ioe) {
+            ioe.printStackTrace();
+        }
+        String message = errors.size()>0? "" : null;
+        for (int i = 0; i < errors.size(); i++) {
+            message += (String) errors.get(i)+"\n";
+        }
+        return message;
+	}	
+
+    /**
+     * Builds the GetCapabilitiesRequest according to the OGC WCS Specifications
+     * without a VERSION, to get the highest version than a WCS supports.
+     */
+    public static String buildCapabilitiesSuitableVersionRequest(String _host, String _version) {
+		int index = _host.indexOf('?');
+		
+		if (index > -1) {
+			String host = _host.substring(0, index + 1);
+			String query = _host.substring(index + 1, _host.length());
+			
+			StringTokenizer tokens = new StringTokenizer(query, "&");
+			String newQuery = "", token;
+
+			// If there is a field or a value with spaces, (and then it's on different tokens) -> unify them
+			while (tokens.hasMoreTokens()) {
+				token = tokens.nextToken().trim();
+
+				if (token.toUpperCase().compareTo("REQUEST=GETCAPABILITIES") == 0)
+					continue;
+
+				if (token.toUpperCase().compareTo("SERVICE=WCS") == 0)
+					continue;
+
+				if ((_version != null) && (_version.length() > 0)) {
+    				if (token.toUpperCase().compareTo("VERSION=" + _version) == 0)
+    					continue;
+				}
+
+				if (token.toUpperCase().compareTo("EXCEPTIONS=XML") == 0)
+					continue;
+
+				newQuery += token + "&";
+			}
+
+        	_host = host + newQuery;
+		}
+		else {
+			_host += "?";
+		}
+
+    	if ((_version != null) && (_version.compareTo("") != 0))
+    		_host += "REQUEST=GetCapabilities&SERVICE=WCS&VERSION=" + _version + "&EXCEPTIONS=XML";
+    	else
+    		_host += "REQUEST=GetCapabilities&SERVICE=WCS&EXCEPTIONS=XML";
+
+    	return stringUtils.replaceAll(_host, " ", "%20");
+    }
+
+	public ArrayList getFormats() {
+		return new ArrayList(serviceInfo.formats);
+	}       
+
+	public Hashtable getLayers() {
+		return layerPool;
+	}
+	
+	public abstract WCSDescribeCoverageRequest createDescribeCoverageRequest(WCSStatus status);
+	
+	public abstract WCSGetCoverageRequest createGetCoverageRequest(WCSStatus status);
+
+	/* (non-Javadoc)
+	 * @see org.gvsig.remoteclient.ogc.OGCProtocolHandler#getServiceInformation()
+	 */	
+	public OGCServiceInformation getServiceInformation() {
+		return serviceInfo;
+	}	
+	
+}
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSOperation.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSOperation.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSOperation.java	(revision 6982)
@@ -0,0 +1,59 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.util.Hashtable;
+
+import org.gvsig.remoteclient.ogc.OGCClientOperation;
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class WCSOperation extends OGCClientOperation{ 
+	protected static Hashtable operations = new Hashtable();
+
+	static{
+		operations.put(CapabilitiesTags.GETCAPABILITIES, new WCSOperation(CapabilitiesTags.GETCAPABILITIES));
+		operations.put(CapabilitiesTags.DESCRIBECOVERAGE, new WCSOperation(CapabilitiesTags.DESCRIBECOVERAGE));
+		operations.put(CapabilitiesTags.GETCOVERAGE, new WCSOperation(CapabilitiesTags.GETCOVERAGE));
+	}
+	
+	public WCSOperation(String operationName) {
+		super(operationName);		
+	}
+
+	public WCSOperation(String operationName, String onlineResource) {
+		super(operationName, onlineResource);		
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.OGCClientOperation#getOperations()
+	 */
+	public Hashtable getOperations() {
+		return operations;
+	}
+}
+
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSStatus.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSStatus.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSStatus.java	(revision 6982)
@@ -0,0 +1,162 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.awt.geom.Rectangle2D;
+
+import org.gvsig.remoteclient.RemoteClientStatus;
+/**
+ * Describes the status of a WCSclient, so it adds to the Remote client status
+ * a list of layers, a list of layer styles, the extent of the map.
+ * Provides the functionality to modify these lists.
+ * 
+ * @author jaume dom�nguez faus - jaume.dominguez@iver.es
+ */
+public class WCSStatus extends RemoteClientStatus {
+	//private String		resolution		= null; TODO do I need it?
+	private Rectangle2D	bBox			= null;
+	private String		coverageName	= null;
+	private String		onlineResource	= null;
+	private String		depth			= null;
+	private String		times			= null;
+	private String		parameters		= null;
+	private String		message			= null;
+	
+	/**
+	 * Sets the Bounding Box that is going to be requested to the server.
+	 * @param bBox, Rectangle2D containing the edges of the bounding box
+	 */
+	public void setExtent(Rectangle2D bBox) {
+		this.bBox = bBox;
+	}
+	
+	/**
+	 * Sets the name of the coverage requested to the server.
+	 * @param coverageName, String containing the name of the requesting coverage
+	 */
+	public void setCoveraName(String coverageName) {
+		this.coverageName = coverageName;
+	}
+
+	/**
+	 * Sets the parameter string. The parameter string is the part of the request 
+	 * containing the value for the axis as described in the DescribeCoverage
+	 * document.
+	 * @param parameters
+	 */
+	public void setParameters(String parameters) {
+		this.parameters = parameters;
+	}
+
+	/**
+	 * Will set the address of the host that serves the following request
+	 * @param onlineResources
+	 */
+	public void setOnlineResource(String onlineResources) {
+		this.onlineResource = onlineResources;
+	}
+	
+	/**
+	 * Sets the depth. The depth is the third dimension for the size. 
+	 * @param depth, String
+	 */
+	public void setDepth(String depth) {
+		this.depth = depth;
+	}
+
+	/**
+	 * Returns the address host that will serve the request 
+	 * @return String
+	 */
+	public String getOnlineResource() {
+		return onlineResource;
+	}
+
+	/**
+	 * Return the name of the coverage requested to the server.
+	 * @return String containing the name of the requesting coverage
+	 */
+	public String getCoverageName() {
+		return this.coverageName;
+	}
+	
+	/**
+	 * Returns the Bounding Box that is going to be requested to the server.
+	 * @return Rectangle2D containing the edges of the bounding box
+	 */
+	public Rectangle2D getExtent() {
+		return this.bBox;
+	}
+
+	/**
+	 * Returns the depth of the next request.
+	 * @return String
+	 */
+	public String getDepth() {
+		return depth;
+	}
+
+	/**
+	 * Returns the value for the time parameter that will be used in the next request
+	 * @return String
+	 */
+	public String getTime() {
+		return times;
+	}
+	
+	/**
+	 * Returns the parameter string.
+	 * The parameter string is the part of the request containing the value for the
+	 * axis as described in the DescribeCoverage.
+	 * @return String
+	 */
+	public String getParameters() {
+		return parameters;
+	}
+
+	/**
+	 * Sets the value(s) for the time that will be used in the next request. 
+	 * @param times
+	 */
+	public void setTime(String times) {
+		this.times = times;
+	}
+
+	/**
+	 * Returns the message string
+	 * @return String
+	 */
+	public String getMessage() {
+		return message;
+	}
+	
+	/**
+	 * Sets the message string 
+	 * @param message
+	 */
+	public void setMessage(String message) {
+		this.message = message;
+	}
+	
+}
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/CoverageOfferingBrief.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/CoverageOfferingBrief.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/CoverageOfferingBrief.java	(revision 6982)
@@ -0,0 +1,107 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.io.IOException;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.lang.StringUtils;
+import org.gvsig.remoteclient.utils.BoundaryBox;
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+import org.gvsig.remoteclient.utils.DescribeCoverageTags;
+
+public class CoverageOfferingBrief {
+	private String name;
+	private String label;
+	private BoundaryBox		lonLatBbox;
+    private static final StringUtils stringUtils = CompatLocator.getStringUtils();
+    
+	public String getLabel() {
+		return label;
+	}
+	public void setLabel(String label) {
+		this.label = label;
+	}
+	public BoundaryBox getLonLatBbox() {
+		return lonLatBbox;
+	}
+	public void setLonLatBbox(BoundaryBox lonLatBbox) {
+		this.lonLatBbox = lonLatBbox;
+	}
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void parse(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+		boolean end = false;
+
+		parser.require(KXmlParser.START_TAG, null, "wcs:"+CapabilitiesTags.WCS_COVERAGEOFFERINGBRIEF);
+		currentTag = parser.next();
+
+		while (!end)
+		{
+			switch(currentTag)
+			{
+			case KXmlParser.START_TAG:
+
+				if (parser.getName().toLowerCase().compareTo(CapabilitiesTags.NAME.toLowerCase())==0) {
+					this.name = parser.nextText();
+				} else if (parser.getName().compareTo(CapabilitiesTags.WCS_LABEL)==0) {
+					this.label = parser.nextText();
+				} else if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE)==0) {
+					parser.nextTag();
+					this.lonLatBbox = new BoundaryBox();
+					this.lonLatBbox.setSrs(DescribeCoverageTags.WGS84);
+					parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
+					String[][] coord = new String[2][2];
+					coord[0] = stringUtils.split(parser.nextText(), WCSCoverage.SEPARATOR);
+					parser.nextTag();
+					parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
+					coord[1] = stringUtils.split(parser.nextText(), WCSCoverage.SEPARATOR);
+					this.lonLatBbox.setXmin(Double.parseDouble(coord[0][0]));
+					this.lonLatBbox.setYmin(Double.parseDouble(coord[0][1]));
+					this.lonLatBbox.setXmax(Double.parseDouble(coord[1][0]));
+					this.lonLatBbox.setYmax(Double.parseDouble(coord[1][1]));
+				}
+
+			case KXmlParser.END_TAG:
+				if (parser.getName().compareTo("wcs:"+CapabilitiesTags.WCS_COVERAGEOFFERINGBRIEF) == 0)
+					end = true;
+				break;
+			case KXmlParser.TEXT:
+				break;
+			}
+			currentTag = parser.next();
+		}
+
+	}
+}
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSServiceInformation.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSServiceInformation.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSServiceInformation.java	(revision 6982)
@@ -0,0 +1,95 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.util.HashMap;
+import java.util.Vector;
+
+import org.gvsig.remoteclient.ogc.OGCClientOperation;
+import org.gvsig.remoteclient.ogc.OGCServiceInformation;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class WCSServiceInformation extends OGCServiceInformation {
+	 public String online_resource = null;
+     public String version;
+     public String name;
+     public String scope;
+     public String title;
+     public String abstr;
+     public String keywords;
+     public String fees;
+     public String operationsInfo;
+     public String personname;
+     public String organization;
+     public String function;
+     public String addresstype;
+     public String address;
+     public String place;
+     public String province;
+     public String postcode;
+     public String country;
+     public String phone;
+     public String fax;
+     public String email;
+     public Vector formats;
+     public HashMap operations; // operations that WCS supports
+
+     public WCSServiceInformation()
+     {
+         version = new String();
+         name = new String();
+         scope = new String();
+         title = new String();
+         abstr = new String();
+         keywords = new String();
+         fees = new String();
+         operationsInfo = new String();
+         personname = new String();
+         organization = new String();
+         function = new String();
+         addresstype = new String();
+         address = new String();
+         place = new String();
+         province = new String();
+         postcode = new String();
+         country = new String();
+         phone = new String();
+         fax = new String();
+         email = new String();
+         operations = new HashMap();
+     }
+
+	public OGCClientOperation createOperation(String name) {
+		return new WCSOperation(name); 
+	}
+
+	public OGCClientOperation createOperation(String name, String onlineResource) {
+		return new WCSOperation(name, onlineResource);
+	}
+
+  
+}
+
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandlerFactory.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandlerFactory.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSProtocolHandlerFactory.java	(revision 6982)
@@ -0,0 +1,263 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.ConnectException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author jaume dominguez faus
+ *
+ */
+public class WCSProtocolHandlerFactory {
+        private static final Logger logger = LoggerFactory.getLogger(WCSProtocolHandlerFactory.class);
+
+	public org.gvsig.remoteclient.wcs.WCSProtocolHandler wCSProtocolHandler;
+
+	private static ArrayList supportedVersions = new ArrayList();
+
+	static {
+		supportedVersions.add("1.0.0");
+	}
+
+	/**
+	 * M�todo que dada una respuesta de getCapabilities y un iterador sobre una
+	 * coleccion de WCSClient's ordenada descendentemente devuelve el cliente
+	 * cuya version es igual o inmediatamente inferior
+	 *
+	 * @param caps Capabilities con la respuesta del servidor
+	 * @param clients Iterador de conjunto ordenado descendientemente
+	 *
+	 * @return cliente cuya version es igual o inmediatamente inferior
+	 * @throws IllegalAccessException
+	 * @throws InstantiationException
+	 *
+	 */
+	private static String getDriverVersion(String version, Iterator clients) throws InstantiationException, IllegalAccessException {
+		while (clients.hasNext()) {
+			String clientVersion = (String)clients.next();
+			int ret = version.compareTo(clientVersion);
+
+			if (ret >= 0) {
+				return clientVersion;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Establece la versi�n con la que se comunicar� con el servidor y devuelve
+	 * el objeto Capabilities obtenido con dicha versi�n
+	 *
+	 * @param host maquina con la que se negocia
+	 *
+	 * @return instancia de un cliente capaz de negociar con el host que se
+	 *         pasa como par�metro
+	 */
+	public static WCSProtocolHandler negotiate(String host) throws ConnectException, IOException {
+
+		if (supportedVersions.size() == 0)
+		{
+			return null;
+		}
+
+		try
+		{
+			String highestVersionSupportedByServer  = getSuitableWCSVersion(host,"");
+			if (supportedVersions.contains(highestVersionSupportedByServer))
+			{
+				// we support the highest version supported by the server
+				// this is the best case
+				return createVersionDriver(highestVersionSupportedByServer);
+			}
+			else
+			{
+				// in case we dont support the highest version from the server
+				// we start the negotiation process in which we have to get the higest version
+				// the WCS supports and we are able to read.
+				Iterator iVersion = supportedVersions.iterator();
+				String wcsVersion;
+				String gvSIGVersion;
+
+				while (iVersion.hasNext()) {
+					gvSIGVersion = (String)iVersion.next();
+					wcsVersion = getSuitableWCSVersion(host,gvSIGVersion);
+					//TODO:
+					//compare with the version returned by the WMS!!!!!
+					// send GetCapabilities and read the version to compare.
+					int res = wcsVersion.compareTo(gvSIGVersion);
+
+					if (res == 0) { //Si es la misma que nuestra version
+						return createVersionDriver(gvSIGVersion);
+					} else if (res > 0) { //Si es mayor que nuestra version
+						throw new Exception("Server Version too high: " + wcsVersion);
+					} else { //Si es menor que nuestra version
+						//Obtenemos la primera version menor o igual que tengamos
+						String lowerVersion = WCSProtocolHandlerFactory.getDriverVersion(wcsVersion, iVersion);
+
+						if (lowerVersion == null) { //Si no hay ninguna
+							throw new Exception("Lowest server version is " + wcsVersion);
+						} else {
+							if (lowerVersion.equals(wcsVersion)) {
+								return createVersionDriver(lowerVersion);
+							} else { //Si hay una version menor que la que retorno el servidor
+								//iV = lower;
+							}
+						}
+					}
+				}
+			}//case we had to start the negotiation process.
+			return null; // if it did not find any suitable version.
+		}
+		catch(ConnectException conEx)
+		{
+			throw conEx;
+		}
+		catch(IOException ioEx)
+		{
+			throw ioEx;
+		}
+		catch(Exception e)
+		{
+//			e.printStackTrace();
+			return null;
+		}
+	}
+
+	/**
+	 * Sends a GetCapabilities to the WCS server to get the version
+	 * if the version parameter is null, the WCS will return the highest version supported
+	 * if not it will return the lower highest version than the one requested.
+	 * @param host
+	 * @param version
+	 * @return suitable version supported by the server
+	 */
+     private static String getSuitableWCSVersion(String host, String _version) throws ConnectException, IOException
+     {
+         int sizes[] = new int[] { 1024, 1024*10, 1024*50, 1024*100 };
+         XmlPullParserException  xmlEx = null;
+         for( int i=0; i<sizes.length; i++ ) {
+             String version;
+             try {
+                 version = getSuitableWCSVersion(host, _version, sizes[i]);
+                 return version;
+             } catch (XmlPullParserException ex) {
+                 xmlEx = ex;
+                 // Try with other size
+             }
+         }
+         logger.warn("Can't determine server version",xmlEx);
+         return "";
+     }
+             
+	private static String getSuitableWCSVersion(String host, String _version, int size) throws ConnectException, IOException, XmlPullParserException {
+		String request = WCSProtocolHandler.buildCapabilitiesSuitableVersionRequest(host, _version);
+		String version = new String();
+		StringReader reader = null;
+		//InputStreamReader reader;
+		//InputStream is = null;
+		DataInputStream dis = null;
+		try {
+			URL url = new URL(request);
+			byte[] buffer = new byte[size];//new byte[1024*256];
+//			is = url.openStream();
+//			reader = new InputStreamReader(is);
+			//int numberOfBytes = is.read(buffer);
+			//String readed = new String(buffer);
+			dis = new DataInputStream(url.openStream());
+			dis.readFully(buffer);
+
+			reader = new StringReader(new String(buffer));
+			KXmlParser kxmlParser = null;
+			kxmlParser = new KXmlParser();
+			kxmlParser.setInput(reader);
+			kxmlParser.nextTag();
+			if ( kxmlParser.getEventType() != KXmlParser.END_DOCUMENT ) {
+				if ((kxmlParser.getName().compareTo(CapabilitiesTags.WCS_CAPABILITIES_ROOT1_0_0)==0)) {
+					version = kxmlParser.getAttributeValue("", CapabilitiesTags.VERSION);
+				}
+			}
+			// do not forget to close the Stream.
+			reader.close();
+			dis.close();
+			return version;
+		} catch(ConnectException conEx) {
+			throw new ConnectException(conEx.getMessage());
+		} catch(IOException ioEx) {
+			throw new IOException(ioEx.getMessage());
+		} catch(XmlPullParserException xmlEx) {
+                        throw  xmlEx;
+//			xmlEx.printStackTrace();
+//			return "";
+		} finally {
+			if (reader != null) {
+				try {
+					reader.close();
+				} catch(Exception ex) {
+					ex.printStackTrace();
+				}
+			} if (dis != null) {
+				try {
+					dis.close();
+				} catch(Exception ex){
+					ex.printStackTrace();
+				}
+			}
+		}
+	}
+
+	/**
+	 * It creates an instance of a WCSDriver class.
+	 *
+	 * @param String, with the version of the driver to be created
+	 * @return WCSDriver.
+	 */
+	private static WCSProtocolHandler createVersionDriver(String version) {
+		try {
+			Class driver;
+			version = version.replace('.', '_');
+			driver = Class.forName("org.gvsig.remoteclient.wcs.wcs_"+version+".WCSProtocolHandler" + version);
+			return (WCSProtocolHandler)driver.newInstance();
+		} catch (Exception e) {
+			e.printStackTrace();
+			//throw new Exception("WCSDriverFactory. Unknown driver version " + e);
+			return null;
+		}
+	}
+
+
+}
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSCoverage.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSCoverage.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/WCSCoverage.java	(revision 6982)
@@ -0,0 +1,393 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.remoteclient.ILayer;
+import org.gvsig.remoteclient.utils.BoundaryBox;
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+
+/**
+ * Describes a coverage in a WCS server.
+ *
+ * @author jaume dominguez faus - jaume.domingue@iver.es
+ *
+ */
+public abstract class WCSCoverage implements ILayer{
+	public static final String SEPARATOR = " +"; // separator used to split list of values, usually is just a space
+    private	String			name;
+    private String			title;
+    private String			_abstract;
+    private Hashtable		bBoxes = new Hashtable();
+	private BoundaryBox		lonLatBbox;
+	public  RectifiedGrid	rg;
+	private ArrayList 		timePositions = new ArrayList();
+	public  String 			timePeriod;
+	private String 			rangeSetName;
+	private String 			rangeSetLabel;
+	public  Hashtable 		axisPool = new Hashtable();
+	private String 			nativeSRS;
+	private ArrayList 		supportedSRSs = new ArrayList();
+	private ArrayList		interpolationMethods;
+	private String 			nativeFormat;
+	private ArrayList 		formats = new ArrayList();
+
+	public ArrayList getTimePositions() {
+		return timePositions;
+	}
+
+	public void addTimePosition(String timeExpr) {
+		if (timePositions == null)
+			timePositions = new ArrayList();
+		timePositions.add(timeExpr);
+	}
+
+	public ArrayList getFormats() {
+		return formats;
+	}
+
+	public void addFormat(String format) {
+		formats.add(format);
+	}
+
+    public void setNativeFormat(String nativeFormat) {
+    	this.nativeFormat = nativeFormat;
+    }
+
+    public String getNativeFormat() {
+    	return nativeFormat;
+    }
+
+	public String getNativeSRS() {
+		return nativeSRS;
+	}
+
+	public void setNativeSRS(String nativeSRS) {
+		this.nativeSRS = nativeSRS;
+	}
+
+	public ArrayList getSRSs() {
+		return supportedSRSs;
+	}
+
+	public void addSRSs(String srs) {
+		supportedSRSs.add(srs);
+	}
+
+	public String getRangeSetLabel() {
+		return rangeSetLabel;
+	}
+
+	public void setRangeSetLabel(String rangeSetLabel) {
+		this.rangeSetLabel = rangeSetLabel;
+	}
+
+	public String getRangeSetName() {
+		return rangeSetName;
+	}
+
+	public void setRangeSetName(String rangeSetName) {
+		this.rangeSetName = rangeSetName;
+	}
+
+	/* (non-Javadoc)
+     * @see org.gvsig.remoteClient.ILayer#getName()
+     */
+    public String getName() {
+        return name;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.ILayer#setName(java.lang.String)
+     */
+    public void setName(String _name) {
+        name = _name;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.ILayer#setTitle(java.lang.String)
+     */
+    public void setTitle(String _title) {
+        title = _title;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.ILayer#getTitle()
+     */
+    public String getTitle() {
+        return title;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.ILayer#getAbstract()
+     */
+    public String getAbstract() {
+        return _abstract;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.ILayer#setAbstract(java.lang.String)
+     */
+    public void setAbstract(String _abstract) {
+     this._abstract = _abstract;
+    }
+
+    public void addBBox(BoundaryBox bBox) {
+    	bBoxes.put(bBox.getSrs(), bBox);
+    }
+
+    public ArrayList getAllSrs() {
+    	ArrayList mySrs = new ArrayList();
+    	mySrs.addAll(supportedSRSs);
+    	if (!mySrs.contains(nativeSRS))
+    		mySrs.add(nativeSRS);
+    	return mySrs;
+    }
+    /**
+     * <p>returns the bbox with that id in the Bboxes vector</p>
+     * @param id
+     */
+    public BoundaryBox getBbox(String id) {
+    	if ((id.compareToIgnoreCase( CapabilitiesTags.EPSG_4326 )==0)
+    		||(id.compareToIgnoreCase( CapabilitiesTags.CRS_84)==0))
+    	{
+    		if (lonLatBbox != null)
+    		return lonLatBbox;
+    	}
+
+        return (BoundaryBox)bBoxes.get(id);
+    }
+
+    public BoundaryBox getLatLonBox() {
+        return lonLatBbox;
+    }
+
+    public void setLonLatBox(BoundaryBox box) {
+        lonLatBbox = box;
+    }
+
+    public void addInterpolationMethod(String method) {
+    	if (interpolationMethods==null) interpolationMethods = new ArrayList();
+    	interpolationMethods.add(method);
+    }
+
+    public ArrayList getInterpolationMethods() {
+    	return interpolationMethods;
+    }
+    /**
+     * Parses the fragment of the XML document that describes this layer (or coverage)
+     * @param parser
+     * @throws IOException
+     * @throws XmlPullParserException
+     */
+    public abstract void parse(KXmlParser parser) throws XmlPullParserException, IOException;
+
+    /**
+     * Gets the RectifiedGrid structure
+     * @return
+     */
+    public RectifiedGrid getRectifiedGrid() {
+    	return rg;
+    }
+    
+    /**
+     * Inner class describing the Rectified Grid of this coverage.
+     *
+     * @author jaume dominguez faus - jaume.dominguez@iver.es
+     */
+    public class RectifiedGrid {
+    	private int	       dimensions;
+    	private String[]   axisNames;
+    	private int[][]    lowGridEnvelopLimits;
+    	private int[][]    highGridEnvelopLimits;
+    	private double[]   origins;
+    	private double[][] offsetVector;
+
+		public RectifiedGrid(int dimensions) {
+			this.dimensions = dimensions;
+		}
+
+		public void addAxisName(String axisName) {
+			if (axisNames == null) {
+				axisNames = new String[1];
+				axisNames[0] = axisName;
+			} else {
+				String[] aux = axisNames;
+				axisNames = new String[axisNames.length+1];
+				for (int i = 0; i < aux.length; i++) {
+					axisNames[i] = aux[i];
+				}
+				axisNames[axisNames.length-1] = axisName;
+			}
+		}
+
+		public String[] getAxisNames() {
+			return axisNames;
+		}
+
+		public void addLowGridEnvelopLimit(int[] lowLimit) {
+			if (lowGridEnvelopLimits == null) {
+				lowGridEnvelopLimits = new int[1][1];
+				lowGridEnvelopLimits[0] = lowLimit;
+			} else {
+				int[][] aux = lowGridEnvelopLimits;
+				lowGridEnvelopLimits = new int[lowGridEnvelopLimits.length+1][1];
+				for (int i = 0; i < aux.length; i++) {
+					lowGridEnvelopLimits[i] = aux[i];
+				}
+				lowGridEnvelopLimits[lowGridEnvelopLimits.length-1] = lowLimit;
+			}
+		}
+
+		public int[][] getLowGridEnvelopLimits() {
+			return lowGridEnvelopLimits;
+		}
+
+		public void addHighGridEnvelopLimit(int[] highLimit) {
+			if (highGridEnvelopLimits == null) {
+				highGridEnvelopLimits = new int[1][1];
+				highGridEnvelopLimits[0] = highLimit;
+			} else {
+				int[][] aux = highGridEnvelopLimits;
+				highGridEnvelopLimits = new int[highGridEnvelopLimits.length+1][1];
+				for (int i = 0; i < aux.length; i++) {
+					highGridEnvelopLimits[i] = aux[i];
+				}
+				highGridEnvelopLimits[highGridEnvelopLimits.length-1] = highLimit;
+			}
+		}
+
+		public int[][] getHighGridEnvelopLimits() {
+			return highGridEnvelopLimits;
+		}
+
+		public void setOrigin(double[] _origins) {
+			origins = _origins;
+		}
+
+		public double[] getOrigins() {
+			return origins;
+		}
+
+		public void addToOffsetVector(double[] _offsetVector) {
+			if (offsetVector == null) {
+				offsetVector = new double[1][1];
+				offsetVector[0] = _offsetVector;
+			} else {
+				double[][] aux = offsetVector;
+				offsetVector = new double[offsetVector.length+1][1];
+				for (int i = 0; i < aux.length; i++) {
+					offsetVector[i] = aux[i];
+				}
+				offsetVector[offsetVector.length-1] = _offsetVector;
+			}
+		}
+
+		public double[][] getOffsetVector(){
+			return offsetVector;
+		}
+
+		public int getDimensionCount() {
+			return dimensions;
+		}
+    }
+
+    /**
+     * Inner class describing the Axis Description of this coverage.
+     *
+     * @author jaume dominguez faus - jaume.dominguez@iver.es
+     */
+    public class AxisDescription {
+    	private String _name;
+    	private String label;
+    	private ArrayList singleValues = new ArrayList();
+    	private String interval;
+    	private String defaultValue;
+
+		public String getDefaultValue() {
+			return defaultValue;
+		}
+
+		public void setDefaultValue(String defaultValue) {
+			this.defaultValue = defaultValue;
+		}
+
+		public String getInterval() {
+			return interval;
+		}
+
+		public void setInterval(String interval) {
+			this.interval = interval;
+		}
+
+		public String getLabel() {
+			return label;
+		}
+		public void setLabel(String label) {
+			this.label = label;
+		}
+
+		public String getName() {
+			return _name;
+		}
+
+		public void setName(String name) {
+			this._name = name;
+		}
+
+		public ArrayList getSingleValues() {
+			return singleValues;
+		}
+
+		public void addSingleValues(String singleValue) {
+			this.singleValues.add(singleValue);
+		}
+    }
+
+	public double getResX() {
+		if (rg == null || rg.offsetVector== null)
+			return -1;
+		return Math.abs(rg.offsetVector[0][0]);
+	}
+
+	public double getResY() {
+		if (rg == null || rg.offsetVector== null)
+			return -1;
+
+		return Math.abs(rg.offsetVector[1][1]);
+	}
+
+	public Hashtable getBBoxes() {
+		if (bBoxes == null) return new Hashtable();
+		else return bBoxes;
+	}
+
+}
+
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSGetCoverageRequest.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSGetCoverageRequest.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSGetCoverageRequest.java	(revision 6982)
@@ -0,0 +1,74 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.request;
+
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+import org.gvsig.remoteclient.utils.Utilities;
+import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public abstract class WCSGetCoverageRequest extends WCSRequest{
+
+	public WCSGetCoverageRequest(WCSStatus status,
+			WCSProtocolHandler protocolHandler) {
+		super(status, protocolHandler);		
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getHttpPostRequest(java.lang.String)
+	 */
+	protected String getHttpPostRequest(String onlineResource) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getOperationCode()
+	 */
+	protected String getOperationName() {
+		return CapabilitiesTags.GETCOVERAGE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getSchemaLocation()
+	 */
+	protected String getSchemaLocation() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getTempFilePrefix()
+	 */
+	protected String getTempFilePrefix() {
+		return "wcsGetCoverage" + System.currentTimeMillis();
+		//return "wcs_getCoverage.xml";
+	}
+}
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSDescribeCoverageRequest.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSDescribeCoverageRequest.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSDescribeCoverageRequest.java	(revision 6982)
@@ -0,0 +1,72 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.request;
+
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public abstract class WCSDescribeCoverageRequest extends WCSRequest{
+
+	public WCSDescribeCoverageRequest(WCSStatus status,
+			WCSProtocolHandler protocolHandler) {
+		super(status, protocolHandler);		
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getHttpPostRequest(java.lang.String)
+	 */
+	protected String getHttpPostRequest(String onlineResource) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getOperationCode()
+	 */
+	protected String getOperationName() {
+		return CapabilitiesTags.DESCRIBECOVERAGE;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getSchemaLocation()
+	 */
+	protected String getSchemaLocation() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wfs.requests.WFSRequest#getTempFilePrefix()
+	 */
+	protected String getTempFilePrefix() {
+		return "wcs_describeCoverage.xml";
+	}
+}
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSRequest.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSRequest.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/request/WCSRequest.java	(revision 6982)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.request;
+
+import org.gvsig.remoteclient.ogc.request.OGCRequest;
+import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public abstract class WCSRequest extends OGCRequest{
+	protected WCSStatus status = null;
+
+	public WCSRequest(WCSStatus status, WCSProtocolHandler protocolHandler) {
+		super(status, protocolHandler);	
+		this.status = status;
+	}
+
+	protected String getPartialQuery(WCSStatus status)
+	{
+		StringBuffer req = new StringBuffer();
+		req.append( (status.getTime() != null) ? "&TIME=" + status.getTime() : "" )
+		.append( "&COVERAGE=" + status.getCoverageName())
+		.append( "&CRS=" + status.getSrs())
+		.append( "&FORMAT=" + status.getFormat() )
+		.append( "&HEIGHT=" + status.getHeight())
+		.append( "&WIDTH=" + status.getWidth())
+		.append( (status.getDepth() != null) ? "&DEPTH=" + status.getDepth() : "" )
+		.append( "&BBOX=" + status.getExtent().getMinX() + "," )
+		.append( status.getExtent().getMinY() + ",")
+		.append( status.getExtent().getMaxX() + ",")
+		.append( status.getExtent().getMaxY())
+		.append( (status.getParameters() != null) ? "&" + status.getParameters() : "");
+
+		return req.toString();
+	}
+}
+
+
+
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSCoverage1_0_0.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSCoverage1_0_0.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSCoverage1_0_0.java	(revision 6982)
@@ -0,0 +1,723 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.wcs_1_0_0;
+
+
+import java.io.IOException;
+
+import org.apache.commons.lang3.StringUtils;
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.remoteclient.utils.BoundaryBox;
+import org.gvsig.remoteclient.utils.DescribeCoverageTags;
+import org.gvsig.remoteclient.wcs.WCSCoverage;
+
+/**
+ * @author jaume
+ *
+ */
+public class WCSCoverage1_0_0 extends WCSCoverage{
+	String axisDescriptionName;
+
+	/* (non-Javadoc)
+     * @see org.gvsig.remoteClient.wcs.WCSLayer#parse(org.kxml2.io.KXmlParser)
+     */
+    public void parse(KXmlParser parser) throws XmlPullParserException, IOException {
+        int currentTag;
+        String value;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.COVERAGE_OFFERING);
+        currentTag = parser.next();
+
+        while (!end && (currentTag != 1))
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.NAME)==0)
+                    {
+                        value = parser.nextText();
+                        if (value != null) setName(value);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.LABEL)==0){
+                        value = parser.nextText();
+                        if (value != null) setTitle(value);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE)==0){
+                    	BoundaryBox bBox = parseLonLatGMLEnvelope(parser);
+                        bBox.setSrs(DescribeCoverageTags.WGS84);
+                        addBBox(bBox);
+                        setLonLatBox(bBox);
+                        //setNativeSRS(DescribeCoverageTags.WGS84);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.DOMAINSET) == 0) {
+                    	parseDomainSet(parser);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.RANGESET) == 0) {
+                    	parseRangeSet(parser);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_CRSS) == 0) {
+                    	parseSupportedCRSS(parser);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_FORMATS) == 0) {
+                    	setNativeFormat(parser.getAttributeValue("", DescribeCoverageTags.NATIVE_FORMAT));
+                    	parser.nextTag();
+                    	parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.FORMATS);
+                    	while (parser.getName().compareTo(DescribeCoverageTags.FORMATS) == 0) {
+                    		String[] formats = StringUtils.split(parser.nextText(), SEPARATOR);
+                    		for (int i = 0; i < formats.length; i++) {
+                    			addFormat(formats[i]);
+                    		}
+                    		parser.nextTag();
+                    	}
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_INTERPOLATIONS) == 0) {
+                    	boolean bInterpolationsEnd = false;
+                    	int interpolationsTag = parser.next();
+                    	while (!bInterpolationsEnd) {
+                    		switch(interpolationsTag) {
+	                    		case KXmlParser.START_TAG:
+	                    			if (parser.getName().compareTo(DescribeCoverageTags.INTERPOLATION_METHOD)==0) {
+	                    				addInterpolationMethod(parser.nextText());
+	                    			}
+	                    			break;
+	                    		case KXmlParser.END_TAG:
+	                    			if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_INTERPOLATIONS) == 0)
+	                    				bInterpolationsEnd = true;
+	                    			break;
+	                    		case KXmlParser.TEXT:
+	                    			if (parser.getName()!=null)
+	                    				System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+	                    			break;
+                    		}
+                    		interpolationsTag = parser.next();
+                    	}
+                    } else {
+                    	if (!parser.getName().equals("rangeSet")) // just a patch to avoid too much messages
+                    		System.out.println("Skiped "+parser.getName());
+                    }
+
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.COVERAGE_OFFERING) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+    }
+
+    private void parseSupportedCRSS(KXmlParser parser) throws XmlPullParserException, IOException {
+    	int currentTag;
+    	boolean end = false;
+
+    	parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SUPPORTED_CRSS);
+    	currentTag = parser.next();
+
+    	while (!end)
+    	{
+    		switch(currentTag)
+    		{
+	    		case KXmlParser.START_TAG:
+	    			if (parser.getName().compareTo(DescribeCoverageTags.REQUEST_RESPONSE_CRSS)==0) {
+	    				String[] values = StringUtils.split(parser.nextText(), SEPARATOR);
+	    				for (int i = 0; i < values.length; i++) {
+							addSRSs(values[i]);
+						}
+	    			}
+	    			else if (parser.getName().compareTo(DescribeCoverageTags.NATIVE_CRS) == 0) {
+	    				setNativeSRS(parser.nextText());
+	    			} else if (parser.getName().compareTo(DescribeCoverageTags.REQUEST_CRSS) == 0) {
+	    				// TODO
+                    	System.out.println("Skiped "+parser.getName());
+	    			} else if (parser.getName().compareTo(DescribeCoverageTags.RESPONSE_CRSS) == 0) {
+	    				// TODO
+                    	System.out.println("Skiped "+parser.getName());
+                    } else {
+                    	System.out.println("Unrecognized "+parser.getName());
+	    			}
+
+	    			break;
+	    		case KXmlParser.END_TAG:
+	    			if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_CRSS) == 0)
+	    				return;//end = true;
+	    			break;
+	    		case KXmlParser.TEXT:
+	    			if (parser.getName()!=null)
+	    				System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+	    			break;
+    		}
+    		currentTag = parser.next();
+    	}
+    }
+
+	private void parseRangeSet(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.RANGESET);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (StringUtils.equals(parser.getName(),DescribeCoverageTags.NAME))
+                    	setRangeSetName(parser.nextText());
+                    else if (StringUtils.equals(parser.getName(),DescribeCoverageTags.LABEL))
+                    	setRangeSetLabel(parser.nextText());
+                    else if (StringUtils.equalsIgnoreCase(parser.getName(),DescribeCoverageTags.AXISDESCRIPTION)) {
+                    	// Reading all axe description
+                    	int axisTag = parser.nextTag();
+                    	boolean endAxe = false;
+                    	boolean endRangeSet = false;
+                    	while (!endAxe) { //When axisTag == 1 it's all over. It prevents an infinite loop
+                            switch(axisTag)
+                            {
+                               case KXmlParser.START_TAG:
+                            	   if (StringUtils.equals(DescribeCoverageTags.AXISDESCRIPTION,parser.getName())) {
+                            		   AxisDescription as = parseAxisDescription(parser);
+                            		   axisPool.put(as.getName(), as);
+                            		   axisDescriptionName = as.getName();
+                            		   endRangeSet = true;
+                            	   }
+                            	   break;
+                               case KXmlParser.END_TAG:
+                                   if (StringUtils.equalsIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION,parser.getName()))
+                                	   endAxe = true;
+                                   break;
+                               case KXmlParser.TEXT:
+                            	   if (parser.getName()!=null)
+                            		   System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                            	   break;
+                            }
+                            axisTag = parser.next();
+                            if(endRangeSet && StringUtils.equalsIgnoreCase(DescribeCoverageTags.RANGESET,parser.getName())){
+                            	endAxe = true;
+                            	end = true;
+                            }
+                    	}
+                    } else {
+                    	System.out.println("Unrecognized "+parser.getName());
+                    }
+                    break;
+                case KXmlParser.END_TAG:
+                    if (DescribeCoverageTags.RANGESET.equals(parser.getName()))
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             if(!end){
+            	 currentTag = parser.next();
+             }
+        }
+	}
+
+	private AxisDescription parseAxisDescription(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.AXISDESCRIPTION);
+        AxisDescription as = new AxisDescription();
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                	if (parser.getName().compareTo(DescribeCoverageTags.NAME) == 0) {
+                		as.setName(parser.nextText());
+                	} else if (parser.getName().compareTo(DescribeCoverageTags.LABEL) == 0) {
+                		as.setLabel(parser.nextText());
+                	} else if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0) {
+                		int valuesTag = parser.nextTag();
+                		boolean valuesEnd = false;
+                		while (!valuesEnd) {
+                			switch(valuesTag)	{
+	                			case KXmlParser.START_TAG:
+	                				if (parser.getName().compareTo(DescribeCoverageTags.SINGLEVALUE) == 0) {
+	                					as.addSingleValues(parser.nextText());
+	                				} else if (parser.getName().compareTo(DescribeCoverageTags.INTERVAL) == 0) {
+	                					as.setInterval(parser.nextText());
+	                				} else if (parser.getName().compareTo(DescribeCoverageTags.DEFAULT) == 0) {
+	                					as.setDefaultValue(parser.nextText());
+	                				}
+	                				break;
+	                			case KXmlParser.END_TAG:
+	                				if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0)
+	                					valuesEnd = true;
+	                				break;
+	                			case KXmlParser.TEXT:
+	                				if (parser.getName()!=null)
+	                					System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+	                				break;
+	                			}
+                			valuesTag = parser.next();
+                		}
+                	} else if (parser.getName().compareTo(DescribeCoverageTags.NULLVALUES)==0) {
+                		// TODO
+                		System.err.println("Missing NULL VALUE PARSING on WCS 1.0.0 Client");
+                    } else {
+                    	System.out.println("Unrecognized "+parser.getName());
+                	}
+
+                	break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+        return as;
+	}
+
+	private void parseDomainSet(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.DOMAINSET);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.SPATIALDOMAIN)==0)
+                    {
+                    	parseSpatialDomain(parser);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN)==0) {
+                    	parseTemporalDomain(parser);
+                    }
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.DOMAINSET) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+	}
+
+	private void parseTemporalDomain(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.TEMPORALDOMAIN);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                	if (parser.getName().compareTo(DescribeCoverageTags.GML_TIMEPOSITION) == 0) {
+                		addTimePosition(parser.nextText());
+                	} else if (parser.getName().compareTo(DescribeCoverageTags.TIMEPERIOD) == 0) {
+                		boolean timePeriodEnd = false;
+                		int timePeriodTag = parser.next();
+                		String[] myTimePeriod = new String[3];
+                		while (!timePeriodEnd) {
+                			switch (timePeriodTag) {
+                			case KXmlParser.START_TAG:
+                				if (parser.getName().compareTo(DescribeCoverageTags.BEGINPOSITION) == 0) {
+                					myTimePeriod[0] = parser.nextText();
+                				} else if (parser.getName().compareTo(DescribeCoverageTags.ENDPOSITION) == 0) {
+                					myTimePeriod[1] = parser.nextText();
+                				} else if (parser.getName().compareTo(DescribeCoverageTags.TIMERESOLUTION) == 0) {
+                					myTimePeriod[2] = parser.nextText();
+                                } else {
+                                	System.out.println("Unrecognized "+parser.getName());
+                				}
+                				break;
+                			case KXmlParser.END_TAG:
+                				if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN) == 0)
+                					end = true;
+                				break;
+                			case KXmlParser.TEXT:
+                				if (parser.getName()!=null)
+                					System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                				break;
+                			}
+                			timePeriodTag = parser.next();
+                		}
+                		super.timePeriod = "";
+                		for (int i = 0; i < myTimePeriod.length-1; i++) {
+                			if (myTimePeriod[i]!=null) {
+                				super.timePeriod += myTimePeriod[i];
+                			}
+                			if (myTimePeriod[i+1]!=null) {
+                				super.timePeriod += "/";
+                			}
+						}
+                    } else {
+                    	System.out.println("Unrecognized "+parser.getName());
+                	}
+                	break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+	}
+
+	private void parseSpatialDomain(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SPATIALDOMAIN);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.GML_ENVELOPE)==0) {
+                    	BoundaryBox bBox = parseGMLEnvelope(parser);
+                    	addBBox(bBox);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.GRID)==0) {
+                    	parseGrid(parser);
+                    } else if (parser.getName().compareTo(DescribeCoverageTags.RECTIFIEDGRID)==0) {
+                    	parseRectifiedGrid(parser);
+                    } else {
+                    	System.out.println("Unrecognized "+parser.getName());
+                    }
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.SPATIALDOMAIN) == 0)
+                        return;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+ 	}
+
+	private void parseGrid(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+		String value;
+		boolean end = false;
+		parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GRID);
+		rg = new RectifiedGrid(Integer.parseInt(parser.getAttributeValue("", DescribeCoverageTags.DIMENSION)));
+
+		currentTag = parser.next();
+
+		while (!end)
+		{
+			switch(currentTag)	{
+			case KXmlParser.START_TAG:
+				if (parser.getName().compareTo(DescribeCoverageTags.GML_LIMITS) == 0) {
+					parser.nextTag();
+					if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE)==0) {
+						boolean gridEnd = false;
+						int gridCurrentTag = parser.next();
+						while (!gridEnd){
+							switch (gridCurrentTag) {
+							case KXmlParser.START_TAG:
+
+								if (parser.getName().compareTo(DescribeCoverageTags.GML_LOW) == 0) {
+									value = parser.nextText();
+									String[] ss = StringUtils.split(value, SEPARATOR);
+									int[] limits = new int[ss.length];
+									for (int i = 0; i < limits.length; i++) {
+										limits[i] = Integer.parseInt(ss[i]);
+									}
+									rg.addLowGridEnvelopLimit(limits);
+								} else if (parser.getName().compareTo(DescribeCoverageTags.GML_HIGH) == 0) {
+									value = parser.nextText();
+									String[] ss = StringUtils.split(value, SEPARATOR);
+									int[] limits = new int[ss.length];
+									for (int i = 0; i < limits.length; i++) {
+										limits[i] = Integer.parseInt(ss[i]);
+									}
+									rg.addHighGridEnvelopLimit(limits);
+								} else {
+									System.out.println("Unrecognized "+parser.getName());
+								}
+								break;
+							case KXmlParser.END_TAG:
+								if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE) == 0)
+									gridEnd = true;
+								break;
+							case KXmlParser.TEXT:
+								if (parser.getName()!=null)
+									System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+								break;
+							}
+							gridCurrentTag = parser.next();
+						}
+					}
+				} else if (parser.getName().compareTo(DescribeCoverageTags.GML_AXISNAME)==0) {
+					rg.addAxisName(parser.nextText());
+				} else {
+					System.out.println("Unrecognized "+parser.getName());
+				}
+				break;
+			case KXmlParser.END_TAG:
+				if (parser.getName().compareTo(DescribeCoverageTags.GRID) == 0)
+					return;//end = true;
+				break;
+			case KXmlParser.TEXT:
+				if (parser.getName()!=null)
+					System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+				break;
+			}
+			currentTag = parser.next();
+		}
+	}
+
+	private void parseRectifiedGrid(KXmlParser parser) throws XmlPullParserException, IOException {
+		int currentTag;
+		String value;
+		boolean end = false;
+		parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.RECTIFIEDGRID);
+		rg = new RectifiedGrid(Integer.parseInt(parser.getAttributeValue("", DescribeCoverageTags.DIMENSION)));
+
+		// TODO maybe this is wrong
+		rg.addToOffsetVector(new double[] { -1, -1});
+		rg.addToOffsetVector(new double[] { -1, -1});
+
+		currentTag = parser.next();
+
+		while (!end)
+		{
+			switch(currentTag)
+			{
+			case KXmlParser.START_TAG:
+				if (parser.getName().compareTo(DescribeCoverageTags.GML_LIMITS) == 0) {
+					parser.nextTag();
+					if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE)==0) {
+						boolean gridEnd = false;
+						int gridCurrentTag = parser.next();
+						while (!gridEnd)
+						{
+							switch (gridCurrentTag) {
+							case KXmlParser.START_TAG:
+
+								if (parser.getName().compareTo(DescribeCoverageTags.GML_LOW) == 0) {
+									value = parser.nextText();
+									String[] ss = StringUtils.split(value, SEPARATOR);
+									int[] limits = new int[ss.length];
+									for (int i = 0; i < limits.length; i++) {
+										limits[i] = Integer.parseInt(ss[i]);
+									}
+									rg.addLowGridEnvelopLimit(limits);
+								} else if (parser.getName().compareTo(DescribeCoverageTags.GML_HIGH) == 0) {
+									value = parser.nextText();
+									String[] ss = StringUtils.split(value, SEPARATOR);
+									int[] limits = new int[ss.length];
+									for (int i = 0; i < limits.length; i++) {
+										limits[i] = Integer.parseInt(ss[i]);
+									}
+									rg.addHighGridEnvelopLimit(limits);
+								} else {
+									System.out.println("Unrecognized "+parser.getName());
+								}
+								break;
+							case KXmlParser.END_TAG:
+								if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE) == 0)
+									gridEnd = true;
+								break;
+							case KXmlParser.TEXT:
+								if (parser.getName()!=null)
+									System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+								break;
+							}
+							gridCurrentTag = parser.next();
+						}
+					}
+				} else if (parser.getName().compareTo(DescribeCoverageTags.GML_AXISNAME)==0) {
+					rg.addAxisName(parser.nextText());
+				} else if (parser.getName().compareTo(DescribeCoverageTags.GML_ORIGIN)==0) {
+					parser.nextTag();
+					if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
+						value = parser.nextText();
+						String[] ss = StringUtils.split(value, SEPARATOR);
+						double[] ori = new double[ss.length];
+						for (int i = 0; i < ori.length; i++) {
+							ori[i] = Double.parseDouble(ss[i]);
+						}
+						rg.setOrigin(ori);
+					}
+				} else if (parser.getName().compareTo(DescribeCoverageTags.OFFSETVECTOR) == 0) {
+					value = parser.nextText();
+					String[] ss = StringUtils.split(value, SEPARATOR);
+					double[] offset = new double[ss.length];
+					for (int i = 0; i < offset.length; i++) {
+						offset[i] = Double.parseDouble(ss[i]);
+					}
+					rg.addToOffsetVector(offset);
+				} else {
+					System.out.println("Unrecognized "+parser.getName());
+				}
+				break;
+			case KXmlParser.END_TAG:
+				if (parser.getName().compareTo(DescribeCoverageTags.RECTIFIEDGRID) == 0)
+					end = true;
+				break;
+			case KXmlParser.TEXT:
+				if (parser.getName()!=null)
+					System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+				break;
+			}
+			if(!end){
+				currentTag = parser.next();
+			}
+		}
+	}
+
+
+	private BoundaryBox parseLonLatGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException {
+		BoundaryBox bBox = new BoundaryBox();
+		int currentTag;
+        String value;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.LONLAT_ENVELOPE);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
+                    	bBox.setSrs(DescribeCoverageTags.WGS84);
+                    	String[] coordinates;
+                    	double minx, miny, maxx, maxy;
+                    	value = parser.nextText();
+                    	coordinates = StringUtils.split(value, SEPARATOR);
+                    	minx = Double.parseDouble(coordinates[0]);
+                    	miny = Double.parseDouble(coordinates[1]);
+
+                    	parser.nextTag();
+
+                    	parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
+                    	value = parser.nextText();
+                    	coordinates = StringUtils.split(value, SEPARATOR);
+                    	maxx = Double.parseDouble(coordinates[0]);
+                    	maxy = Double.parseDouble(coordinates[1]);
+
+                    	bBox.setXmin(minx);
+                    	bBox.setYmin(miny);
+                    	bBox.setXmax(maxx);
+                    	bBox.setYmax(maxy);
+                    }
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             currentTag = parser.next();
+        }
+        return bBox;
+	}
+
+	private BoundaryBox parseGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException {
+		BoundaryBox bBox = new BoundaryBox();
+		int currentTag;
+        String value;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_ENVELOPE);
+        bBox.setSrs(parser.getAttributeValue("", DescribeCoverageTags.SRSNAME));
+        currentTag = parser.next();
+        boolean skipThisTag = false;
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                	if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
+
+                    	String[] coordinates;
+                    	double minx, miny, maxx, maxy;
+                    	value = parser.nextText();
+                    	coordinates = StringUtils.split(value, SEPARATOR);
+                    	minx = Double.parseDouble(coordinates[0]);
+                    	miny = Double.parseDouble(coordinates[1]);
+
+                    	parser.nextTag();
+                    	//parser.nextTag();
+                    	parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
+                    	value = parser.nextText();
+                    	coordinates = StringUtils.split(value, SEPARATOR);
+                    	maxx = Double.parseDouble(coordinates[0]);
+                    	maxy = Double.parseDouble(coordinates[1]);
+
+                    	bBox.setXmin(minx);
+                    	bBox.setYmin(miny);
+                    	bBox.setXmax(maxx);
+                    	bBox.setYmax(maxy);
+                    }else{
+                    	skipThisTag = true;
+                    }
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(DescribeCoverageTags.GML_ENVELOPE) == 0){
+                        end = true;
+                    	skipThisTag = true;
+                    }
+                    break;
+                case KXmlParser.TEXT:
+                	if (parser.getName()!=null)
+                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
+                	break;
+             }
+             if(!skipThisTag)
+            	 currentTag = parser.next();
+        }
+
+        return bBox;
+	}
+}
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSGetCoverageRequest1_0_0.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSGetCoverageRequest1_0_0.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSGetCoverageRequest1_0_0.java	(revision 6982)
@@ -0,0 +1,62 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.wcs_1_0_0.request;
+
+import org.gvsig.compat.CompatLocator;
+import org.gvsig.compat.lang.StringUtils;
+import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+import org.gvsig.remoteclient.wcs.request.WCSGetCoverageRequest;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class WCSGetCoverageRequest1_0_0 extends WCSGetCoverageRequest{
+   
+    private static final StringUtils stringUtils = CompatLocator.getStringUtils();
+    
+	public WCSGetCoverageRequest1_0_0(WCSStatus status,
+			WCSProtocolHandler protocolHandler) {
+		super(status, protocolHandler);		
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.ogc.request.OGCRequest#getHttpGetRequest(java.lang.String)
+	 */
+	protected String getHttpGetRequest(String onlineResource) {
+		StringBuffer req = new StringBuffer();
+		req.append(onlineResource);
+		req.append("service=WCS&version=").append(protocolHandler.getVersion()).append("&request=GetCoverage");
+		req.append(getPartialQuery(status));
+		if (status.getExceptionFormat() != null) {
+			req.append("&EXCEPTIONS=" + status.getExceptionFormat());
+		} else {
+			req.append("&EXCEPTIONS=XML");
+		}
+		return req.toString();
+	}
+
+}
+
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSDescribeCoverageRequest1_0_0.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSDescribeCoverageRequest1_0_0.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/request/WCSDescribeCoverageRequest1_0_0.java	(revision 6982)
@@ -0,0 +1,54 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.wcs_1_0_0.request;
+
+import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+import org.gvsig.remoteclient.wcs.request.WCSDescribeCoverageRequest;
+
+/**
+ * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
+ */
+public class WCSDescribeCoverageRequest1_0_0 extends WCSDescribeCoverageRequest{
+
+	public WCSDescribeCoverageRequest1_0_0(WCSStatus status,
+			WCSProtocolHandler protocolHandler) {
+		super(status, protocolHandler);	
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.ogc.request.OGCRequest#getHttpGetRequest(java.lang.String)
+	 */
+	protected String getHttpGetRequest(String onlineResource) {
+		StringBuffer req = new StringBuffer();
+		req.append(onlineResource).append("REQUEST=DescribeCoverage&SERVICE=WCS&");
+		if (status != null && status.getCoverageName()!= null)
+			req.append("COVERAGE="+status.getCoverageName()+"&");
+		req.append("VERSION=").append(protocolHandler.getVersion()).append("&EXCEPTIONS=XML");
+		return req.toString();
+	}
+
+}
+
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler1_0_0.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler1_0_0.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler1_0_0.java	(revision 6982)
@@ -0,0 +1,409 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.wcs.wcs_1_0_0;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.kxml2.io.KXmlParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import org.gvsig.remoteclient.utils.CapabilitiesTags;
+import org.gvsig.remoteclient.utils.DescribeCoverageTags;
+import org.gvsig.remoteclient.utils.EncodingXMLParser;
+import org.gvsig.remoteclient.wcs.CoverageOfferingBrief;
+import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
+import org.gvsig.remoteclient.wcs.WCSStatus;
+import org.gvsig.remoteclient.wcs.request.WCSDescribeCoverageRequest;
+import org.gvsig.remoteclient.wcs.request.WCSGetCoverageRequest;
+import org.gvsig.remoteclient.wcs.wcs_1_0_0.request.WCSDescribeCoverageRequest1_0_0;
+import org.gvsig.remoteclient.wcs.wcs_1_0_0.request.WCSGetCoverageRequest1_0_0;
+
+/**
+ * @author jaume
+ *
+ */
+public class WCSProtocolHandler1_0_0 extends WCSProtocolHandler{
+
+	public WCSProtocolHandler1_0_0() {
+		super();
+		this.version = "1.0.0";
+		this.name = "WCS1.0.0";
+	}
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.OGCProtocolHandler#parseCapabilities(java.io.File)
+     */
+    /**
+     * <p>Parse the xml data retrieved from the WCS, it will parse the WCS Capabilities</p>
+     *
+     */
+    public boolean parseCapabilities(File f)
+    {
+    	int tag;
+    	EncodingXMLParser parser = null;
+      	parser = new EncodingXMLParser();
+    	try
+    	{
+    		parser.setInput(f);
+    		parser.nextTag();
+
+            if ( parser.getEventType() != KXmlParser.END_DOCUMENT )
+            {
+                parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.WCS_CAPABILITIES_ROOT1_0_0);
+                tag = parser.nextTag();
+                while(tag != KXmlParser.END_DOCUMENT)
+                {
+                    switch(tag)
+                    {
+                        case KXmlParser.START_TAG:
+                            if (parser.getName().compareTo(CapabilitiesTags.SERVICE)==0)
+                            {
+                                parseServiceTag(parser);
+                            }
+                            else if (parser.getName().compareTo(CapabilitiesTags.CAPABILITY)==0)
+                            {
+                                parseCapabilityTag(parser);
+                            }
+                            else if (parser.getName().compareTo(CapabilitiesTags.WCS_CONTENTMETADATA)==0)
+                            {
+                            	parseContentMetadataTag(parser);
+                            }
+                            break;
+                        case KXmlParser.END_TAG:
+                            break;
+                        case KXmlParser.TEXT:
+                        	if (parser.getName()!=null)
+                        		System.out.println("[TEXT]["+parser.getText().trim()+"]");
+                            break;
+                    }
+                    tag = parser.next();
+                }
+                parser.require(KXmlParser.END_DOCUMENT, null, null);
+            }
+        }
+        catch(XmlPullParserException parser_ex){
+            System.out.println(parser_ex.getMessage());
+            parser_ex.printStackTrace();
+            return false;
+        }
+        catch (IOException ioe) {
+            ioe.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see org.gvsig.remoteClient.wcs.WCSProtocolHandler#parseDescribeCoverage(java.io.File)
+     */
+    public boolean parseDescribeCoverage(File f) {
+    	int tag;
+    	EncodingXMLParser parser = null;
+      	parser = new EncodingXMLParser();
+    	try
+    	{
+    		parser.setInput(f);
+    		parser.nextTag();
+            if (parser.getEventType() != KXmlParser.END_DOCUMENT){
+                parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.COVERAGE_DESCRIPTION);
+                tag = parser.nextTag();
+                while (tag != KXmlParser.END_DOCUMENT){
+                    switch (tag){
+                        case KXmlParser.START_TAG:
+                            if (parser.getName().compareTo(DescribeCoverageTags.COVERAGE_OFFERING)==0){
+                                WCSCoverage1_0_0 lyr = new WCSCoverage1_0_0();
+                                lyr.parse(parser);
+                                if (lyr!=null){
+                                    layerPool.put(lyr.getName(), lyr);
+                                }
+                            }
+                            break;
+                    }
+                    tag = parser.next();
+                }
+                parser.require(KXmlParser.END_DOCUMENT, null, null);
+            }
+        } catch (XmlPullParserException e) {
+            System.out.println(e.getMessage());
+            e.printStackTrace();
+            return false;
+        }
+        catch (IOException ioe) {
+            ioe.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+
+
+    /**
+     * <p>Parses the Capability Tag </p>
+     */
+    private void parseCapabilityTag(KXmlParser parser) throws IOException, XmlPullParserException
+    {
+        int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.CAPABILITY);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (parser.getName().compareTo(CapabilitiesTags.REQUEST)==0)
+                    {
+                        parseRequestTag(parser);
+                    }
+                    else if (parser.getName().compareTo(CapabilitiesTags.EXCEPTION)==0)
+                    {
+                        //TODO Parse exception tags...
+                    	parser.skipSubTree();
+                    }
+                    else if ((parser.getName().compareTo(CapabilitiesTags.VENDORSPECIFICCAPABILITIES)==0) ||
+                            (parser.getName().compareTo(CapabilitiesTags.USERDEFINEDSYMBOLIZATION )==0))
+                    {
+                        parser.skipSubTree();
+                    }
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(CapabilitiesTags.CAPABILITY) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                break;
+             }
+             currentTag = parser.next();
+        }
+    }
+
+
+    /**
+     * <p>Parses the Service Information </p>
+     */
+    private void parseServiceTag(KXmlParser parser) throws IOException, XmlPullParserException
+    {
+        int currentTag;
+        boolean end = false;
+
+        parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.SERVICE);
+        currentTag = parser.next();
+
+        while (!end)
+        {
+             switch(currentTag)
+             {
+                case KXmlParser.START_TAG:
+                    if (parser.getName().compareToIgnoreCase(CapabilitiesTags.NAME)==0)
+                    {
+                        serviceInfo.name = parser.nextText();
+                    }
+                    else if (parser.getName().compareTo(CapabilitiesTags.WCS_LABEL)==0)
+                    {
+                        serviceInfo.title = parser.nextText();
+                    }
+                    else if (parser.getName().compareTo(CapabilitiesTags.WCS_DESCRIPTION)==0)
+                    {
+                        serviceInfo.abstr = parser.nextText();
+                    }
+                    else if (parser.getName().compareTo(CapabilitiesTags.WCS_KEYWORDS)==0)
+                    {
+                        parser.skipSubTree();
+                    }
+                    else if (parser.getName().compareTo(CapabilitiesTags.ACCESSCONSTRAINTS)==0)
+                    {
+                        parser.skipSubTree();
+                    }
+                    else if (parser.getName().compareTo(CapabilitiesTags.FEES)==0)
+                    {
+                        parser.skipSubTree();
+                    }
+
+                    break;
+                case KXmlParser.END_TAG:
+                    if (parser.getName().compareTo(CapabilitiesTags.SERVICE) == 0)
+                        end = true;
+                    break;
+                case KXmlParser.TEXT:
+                break;
+             }
+             currentTag = parser.next();
+        }
+//      parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.SERVICE);
+    }
+
+    /**
+     * <p>Parses the Request tag </p>
+     */
+    private void parseRequestTag(KXmlParser parser) throws IOException, XmlPullParserException
+    {
+    	int currentTag;
+    	boolean end = false;
+
+    	parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.REQUEST);
+    	currentTag = parser.next();
+
+    	while (!end)
+    	{
+    		switch(currentTag)
+    		{
+    		case KXmlParser.START_TAG:
+    			if (parser.getName().compareTo(CapabilitiesTags.GETCAPABILITIES)==0)
+    			{
+    				currentTag = parser.nextTag();
+    				parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.DCPTYPE);
+    				{
+						currentTag = parser.nextTag();
+						if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
+						{
+							currentTag = parser.nextTag();
+							if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
+							{
+								currentTag = parser.nextTag();
+								if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
+								{
+									String value = new String();
+									value = parser.getAttributeValue("", CapabilitiesTags.XLINK_HREF);
+									if (value != null){
+										serviceInfo.operations.put(value, null);
+									}
+								}
+							}
+						}
+					}
+
+    			}
+    			else if (parser.getName().compareTo(CapabilitiesTags.DESCRIBECOVERAGE)==0)
+    			{
+    				currentTag = parser.nextTag();
+    				parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.DCPTYPE);
+    				{
+						currentTag = parser.nextTag();
+						if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
+						{
+							currentTag = parser.nextTag();
+							if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
+							{
+								currentTag = parser.nextTag();
+								if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
+								{
+									String value = new String();
+									value = parser.getAttributeValue("", CapabilitiesTags.XLINK_HREF);
+									if (value != null){
+										serviceInfo.operations.put(value, null);
+									}
+								}
+							}
+						}
+					}
+    			}
+    			else if (parser.getName().compareTo(CapabilitiesTags.GETCOVERAGE)==0)
+    			{
+    				currentTag = parser.nextTag();
+    				parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.DCPTYPE);
+    				{
+						currentTag = parser.nextTag();
+						if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
+						{
+							currentTag = parser.nextTag();
+							if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
+							{
+								currentTag = parser.nextTag();
+								if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
+								{
+									String value = new String();
+									value = parser.getAttributeValue("", CapabilitiesTags.XLINK_HREF);
+									if (value != null){
+										serviceInfo.operations.put(value, null);
+									}
+								}
+							}
+						}
+					}
+    			}
+    			break;
+    		case KXmlParser.END_TAG:
+    			if (parser.getName().compareTo(CapabilitiesTags.REQUEST) == 0)
+    				end = true;
+    			break;
+    		case KXmlParser.TEXT:
+    			break;
+    		}
+    		currentTag = parser.next();
+    	}
+    	// TODO: does not get such a tag when arrives here!!!!!!
+    	//parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.REQUEST);
+    }
+
+    private void parseContentMetadataTag(KXmlParser parser) throws XmlPullParserException, IOException {
+    	int currentTag;
+    	boolean end = false;
+
+    	parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.WCS_CONTENTMETADATA);
+    	currentTag = parser.next();
+
+    	while (!end)
+    	{
+    		switch(currentTag)
+    		{
+    		case KXmlParser.START_TAG:
+    			if (parser.getName().compareTo("wcs:"+CapabilitiesTags.WCS_COVERAGEOFFERINGBRIEF)==0) {
+    				CoverageOfferingBrief cob = new CoverageOfferingBrief();
+    				cob.parse(parser);
+    				layerPool.put(cob.getName(), cob);
+    			}
+    			break;
+    		case KXmlParser.END_TAG:
+    			if (parser.getName().compareTo(CapabilitiesTags.WCS_CONTENTMETADATA) == 0)
+    				end = true;
+    			break;
+    		case KXmlParser.TEXT:
+    			break;
+    		}
+    		currentTag = parser.next();
+    	}
+    	// TODO: does not get such a tag when arrives here!!!!!!
+    	//parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.REQUEST);
+    }
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wcs.WCSProtocolHandler#createDescribeCoverageRequest(org.gvsig.remoteClient.wcs.WCSStatus)
+	 */
+	public WCSDescribeCoverageRequest createDescribeCoverageRequest(
+			WCSStatus status) {
+		return new WCSDescribeCoverageRequest1_0_0(status, this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.gvsig.remoteClient.wcs.WCSProtocolHandler#createGetCoverageRequest(org.gvsig.remoteClient.wcs.WCSStatus)
+	 */
+	public WCSGetCoverageRequest createGetCoverageRequest(WCSStatus status) {
+		return new WCSGetCoverageRequest1_0_0(status, this);
+	}
+}
+
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/WCSException.java
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/WCSException.java	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/src/main/java/org/gvsig/remoteclient/exceptions/WCSException.java	(revision 6982)
@@ -0,0 +1,84 @@
+/**
+ * gvSIG. Desktop Geographic Information System.
+ *
+ * Copyright (C) 2007-2013 gvSIG Association.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * For any additional information, do not hesitate to contact us
+ * at info AT gvsig.com, or visit our website www.gvsig.com.
+ */
+package org.gvsig.remoteclient.exceptions;
+
+/**
+ * Excepci�n provocada por el WCS.
+ *
+ * @author Jaume Dominguez Faus - jaume.dominguez@iver.es
+ */
+public class WCSException extends Exception 
+{	
+	private String wcs_message = null;
+	
+	/**
+	 *
+	 */
+	public WCSException() {
+		super();
+	}
+
+	/**
+	 * Creates a new WCS Exception
+	 *
+	 * @param message
+	 */
+	public WCSException(String message) {
+		super(message);
+	}
+
+	/**
+	 * Creates a new WCS Exception
+	 *
+	 * @param message
+	 * @param cause
+	 */
+	public WCSException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	/**
+	 * Creates a new WCSException
+	 *
+	 * @param cause
+	 */
+	public WCSException(Throwable cause) {
+		super(cause);
+	}
+	
+	public String getWCSMessage()
+	{
+		if (wcs_message == null)
+			return "";
+		else
+			return wcs_message;
+	}
+	
+	public void setWCSMessage(String mes)
+	{
+		wcs_message = mes;
+	}
+}
+
+
Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/pom.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/pom.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient/pom.xml	(revision 6982)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>org.gvsig.raster.wcs.remoteclient</artifactId>
+	<packaging>jar</packaging>
+        <name>${artifactId}</name>
+	<parent>
+		<groupId>org.gvsig</groupId>
+		<artifactId>org.gvsig.raster.wcs</artifactId>
+		<version>2.2.48</version>
+	</parent>
+	<dependencies>
+            <dependency>
+                <groupId>org.gvsig</groupId>
+                <artifactId>org.gvsig.remoteclient</artifactId>
+                <scope>compile</scope>                    
+            </dependency>
+	</dependencies>
+</project>

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/org.gvsig.raster.wcs.remoteclient
___________________________________________________________________
Added: svn:ignore
   + target

.settings

.project

.classpath


Index: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/pom.xml
===================================================================
--- org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/pom.xml	(revision 0)
+++ org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/pom.xml	(revision 6982)
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.gvsig.raster.wcs</artifactId>
+    <packaging>pom</packaging>
+    <version>2.2.48</version>
+    <name>${project.artifactId}</name>
+    <description>WCS client</description>
+    <inceptionYear>2011</inceptionYear>
+
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop</artifactId>
+        <version>2.0.182</version>
+    </parent>
+
+        <properties>
+            <!-- El plugin versions:use-latest-versions falla con scope import -->
+            <!-- asi que toca usar el versions:update-properties que si que funciona -->
+            <org.gvsig.raster.version>2.2.61</org.gvsig.raster.version>
+        </properties>
+
+    <repositories>
+        <repository>
+            <id>gvsig-public-http-repository</id>
+            <name>gvSIG maven public HTTP repository</name>
+            <url>http://devel.gvsig.org/m2repo/j2se</url>
+            <releases>
+                <enabled>true</enabled>
+                <updatePolicy>daily</updatePolicy>
+                <checksumPolicy>warn</checksumPolicy>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+                <updatePolicy>daily</updatePolicy>
+                <checksumPolicy>warn</checksumPolicy>
+            </snapshots>
+        </repository>
+    </repositories>
+
+
+    <scm>
+        <connection>scm:svn:https://devel.gvsig.org/svn/gvsig-raster/org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48</connection>
+        <developerConnection>scm:svn:https://devel.gvsig.org/svn/gvsig-raster/org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48</developerConnection>
+        <url>https://devel.gvsig.org/redmine/projects/gvsig-raster/repository/show/org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48</url>
+    </scm>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-release-plugin</artifactId>
+                <configuration>
+                    <tagBase>https://devel.gvsig.org/svn/gvsig-raster/org.gvsig.raster.wcs/tags/</tagBase>
+                    <goals>deploy</goals>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencyManagement>
+        <dependencies>
+                        <dependency>
+                                <groupId>org.gvsig</groupId>
+                                <artifactId>org.gvsig.raster</artifactId>
+                                <version>${org.gvsig.raster.version}</version>
+                                <type>pom</type>
+                                <scope>import</scope>
+                        </dependency>
+
+            <dependency>
+                <groupId>org.gvsig</groupId>
+                <artifactId>org.gvsig.raster.wcs.io</artifactId>
+                <version>2.2.48</version>
+            </dependency>
+            <dependency>
+                <groupId>org.gvsig</groupId>
+                <artifactId>org.gvsig.raster.wcs.remoteclient</artifactId>
+                <version>2.2.48</version>
+            </dependency>
+            <dependency>
+                <groupId>org.gvsig</groupId>
+                <artifactId>org.gvsig.raster.wcs.app.wcsclient</artifactId>
+                <version>2.2.48</version>
+            </dependency>
+
+        </dependencies>
+    </dependencyManagement>
+
+    <modules>
+        <module>org.gvsig.raster.wcs.remoteclient</module>
+        <module>org.gvsig.raster.wcs.io</module>
+        <module>org.gvsig.raster.wcs.app.wcsclient</module>
+    </modules>
+
+</project>

Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48/pom.xml
___________________________________________________________________
Added: svn:mime-type
   + text/plain


Property changes on: org.gvsig.raster.wcs/tags/org.gvsig.raster.wcs-2.2.48
___________________________________________________________________
Added: svn:ignore
   + .project
.settings
.pom.xml.swp


