Revision 134

View differences:

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

  
24
import java.lang.reflect.Constructor;
25
import java.lang.reflect.InvocationTargetException;
26
import java.util.ArrayList;
27
import java.util.Iterator;
28
import java.util.Map;
29
import java.util.Set;
30
import java.util.TreeMap;
31

  
32
import org.gvsig.fmap.dal.coverage.RasterLocator;
33
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
34
import org.gvsig.fmap.dal.coverage.util.ProviderInfo;
35
import org.gvsig.raster.impl.store.WriteFileFormatFeatures;
36
import org.gvsig.raster.impl.store.writer.DefaultRasterWriter;
37
import org.gvsig.tools.ToolsLocator;
38
import org.gvsig.tools.extensionpoint.ExtensionPoint;
39
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
40

  
41
import es.gva.cit.jgdal.GdalWarp;
42

  
43
/**
44
 * 
45
 * 31/10/2007
46
 * @author Nacho Brodin nachobrodin@gmail.com
47
 */
48
public class DefaultProviderInfo implements ProviderInfo {
49
	public TreeMap<String, WriteFileFormatFeatures>
50
                                  fileFeature    = new TreeMap<String, WriteFileFormatFeatures>();
51

  
52
	public TreeMap<String, WriteFileFormatFeatures> getFileFeature() {
53
		return fileFeature;
54
	}
55
	
56
	/**
57
	 * Tipo de fichero soportado.
58
	 * Devuelve true si el tipo de fichero (extension) est? soportado, si no
59
	 * devuelve false.
60
	 *
61
	 * @param fName Fichero raster
62
	 * @return  true si est? soportado, si no false.
63
		*/
64
	public boolean fileIsSupported(String fName) {
65
		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
66
		ExtensionPoint point = extensionPoints.get("RasterReader");
67
		return point.has(RasterLocator.getManager().getFileUtils().getExtensionFromFileName(fName));
68
	}
69

  
70
	/**
71
	 * Obtiene la lista de extensiones de ficheros soportadas
72
	 * @return Lista de extensiones registradas
73
	 */
74
	@SuppressWarnings("unchecked")
75
	public String[] getExtensionsSupported() {
76
		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
77
		ExtensionPoint point = extensionPoints.get("RasterReader");
78
		return (String[])point.getNames().toArray(new String[0]);
79
	}
80
	
81
	/**
82
	 * Obtiene la lista de extensiones registradas
83
	 * @return Lista de extensiones registradas o null si no hay ninguna
84
	 */
85
	@SuppressWarnings("unchecked")
86
	public String[] getDriversExtensions() {
87
		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
88
		ExtensionPoint point = extensionPoints.get("RasterWriter");
89
		return (String[])point.getNames().toArray(new String[0]);
90
	}
91

  
92
	/**
93
	 * Obtiene la lista de extensiones de ficheros sobre los que se puede salvar
94
	 * en un determinado tipo de datos. Como par?metro de la funci?n se especifica
95
	 * el tipo de datos sobre el que se desea consultar. Este m?todo consulta para
96
	 * cada driver registrado que extensiones soportan un tipo.
97
	 *
98
	 * @param dataType Tipo de datos
99
	 * @param bands Numero de bandas
100
	 * @param reprojectable Especifica si devuelve solo los formatos reproyectables
101
	 * @return Lista de extensiones registradas que soportan el tipo de datos
102
	 *         pasado por par?metro.
103
	 * @throws RasterDriverException
104
	 */
105
	@SuppressWarnings("unchecked")
106
	public ArrayList getExtensionsSupported(int dataType, int bands, boolean reprojectable) throws RasterDriverException {
107
		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
108
		ExtensionPoint point = extensionPoints.get("RasterWriter");
109
		Iterator iterator = point.iterator();
110
		ArrayList result = new ArrayList();
111
		while (iterator.hasNext()) {
112
			ExtensionPoint.Extension extension = (ExtensionPoint.Extension) iterator
113
					.next();
114
			String ext = extension.getName();
115
			Class writerClass = extension.getExtension();
116
			Class[] args = { String.class };
117
			try {
118
				Constructor hazNuevo = writerClass.getConstructor(args);
119
				Object[] args2 = { ext };
120
				DefaultRasterWriter grw = (DefaultRasterWriter) hazNuevo.newInstance(args2);
121
				if (isSupportedThisFileToWrite(ext, dataType, bands))
122
					if (reprojectable) {
123
						if (GdalWarp.getDrivers().contains(grw.getDriverName()))
124
							result.add(ext);
125
					} else
126
						result.add(ext);
127
			} catch (SecurityException e) {
128
				throw new RasterDriverException("Error SecurityException in open");
129
			} catch (NoSuchMethodException e) {
130
				throw new RasterDriverException("Error NoSuchMethodException in open");
131
			} catch (IllegalArgumentException e) {
132
				throw new RasterDriverException("Error IllegalArgumentException in open");
133
			} catch (InstantiationException e) {
134
				throw new RasterDriverException("Error InstantiationException in open");
135
			} catch (IllegalAccessException e) {
136
				throw new RasterDriverException("Error IllegalAccessException in open");
137
			} catch (InvocationTargetException e) {
138
				throw new RasterDriverException("Error in open");
139
			}
140
		}
141
		return result;
142
	}
143

  
144
	/**
145
	 * Obtiene la lista de tipos de driver
146
	 * @return Lista de tipos de driver registradas o null si no hay ninguno
147
	 */
148
	@SuppressWarnings("unchecked")
149
	public String[] getWriteDriversType() {
150
		if (fileFeature.size() == 0)
151
			return null;
152
		String[] list = new String[fileFeature.size()];
153
		Set values = fileFeature.entrySet();
154
		int i = 0;
155
		for (Iterator it = values.iterator(); it.hasNext();) {
156
			list[i] = ((WriteFileFormatFeatures) ((Map.Entry) it.next()).getValue()).getDriverName();
157
			i++;
158
		}
159

  
160
		return list;
161
	}
162

  
163
	/**
164
	 * Obtiene el tipo de driver a partir de la extensi?n
165
	 * @param ext Extensi?n
166
	 * @return Tipo
167
	 */
168
	public String getWriteDriverType(String ext) {
169
		return ((WriteFileFormatFeatures) fileFeature.get(ext)).getDriverName();
170
	}
171

  
172
	/**
173
	 * Devuelve el n?mero de drivers soportados
174
	 * @return N?mero de drivers soportados
175
	 */
176
	public int getWriteNDrivers() {
177
		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
178
		ExtensionPoint point = extensionPoints.get("RasterWriter");
179
		return point.getCount();
180
	}
181

  
182
	/**
183
	 * Devuelve el n?mero de tipos de driver registrados
184
	 * @return N?mero de tipos de driver soportados
185
	 */
186
	public int getWriteNTypes() {
187
		return fileFeature.size();
188
	}
189
	
190

  
191
	/**
192
	 * M?todo que pregunta si la extensi?n pasada por par?metro est? soportada con
193
	 * el tipo y n?mero de bandas indicadas.
194
	 *
195
	 * @param dataType Tipo de dato
196
	 * @param bands N?mero de bandas
197
	 * @param extensi?n
198
	 * @return true si est? soportada y false si no lo est?
199
	 */
200
	public boolean isSupportedThisFileToWrite(String ext, int dataType, int bands) {
201
		WriteFileFormatFeatures features = (WriteFileFormatFeatures) fileFeature.get(ext);
202
		if (features == null)
203
			return false;
204
		int[] bandsSupported = features.getNBandsSupported();
205
		if (bandsSupported[0] != -1 || bandsSupported[0] < bands)
206
			return false;
207
		int[] dt = features.getDataTypesSupported();
208
		for (int i = 0; i < dt.length; i++)
209
			if (dataType == dt[i])
210
				return true;
211
		return false;
212
	}
213
}
0 214

  
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/DefaultRasterManager.java
63 63
import org.gvsig.fmap.dal.coverage.util.FileUtils;
64 64
import org.gvsig.fmap.dal.coverage.util.Historical;
65 65
import org.gvsig.fmap.dal.coverage.util.MathUtils;
66
import org.gvsig.fmap.dal.coverage.util.ProviderInfo;
66 67
import org.gvsig.fmap.dal.coverage.util.RasterUtils;
67 68
import org.gvsig.raster.impl.buffer.DefaultRasterQuery;
68 69
import org.gvsig.raster.impl.buffer.RasterBuffer;
......
96 97
import org.gvsig.raster.util.DefaultFileUtils;
97 98
import org.gvsig.raster.util.DefaultHistorical;
98 99
import org.gvsig.raster.util.DefaultMathUtils;
100
import org.gvsig.raster.util.DefaultProviderInfo;
99 101
import org.gvsig.raster.util.DefaultRasterUtils;
100 102
import org.gvsig.tools.ToolsLocator;
101 103
import org.gvsig.tools.extensionpoint.ExtensionPoint;
......
115 117
	private FileUtils                   file              = null;
116 118
	private MathUtils                   math              = null;
117 119
	private RasterUtils                 util              = null;
120
	private ProviderInfo                pInfo             = null;
118 121
	   
119 122
	/**
120 123
	 * Gets an instance of this object for internal use.
......
125 128
	}
126 129
	
127 130
	/*
131
	 * 
132
	 */
133
	public ProviderInfo getProviderInfo() {
134
		if(pInfo == null)
135
			pInfo = new DefaultProviderInfo();
136
		return pInfo;
137
	}
138
	
139
	/*
128 140
	 * (non-Javadoc)
129 141
	 * @see org.gvsig.fmap.dal.coverage.RasterManager#getCRSUtils()
130 142
	 */
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/provider/DefaultRasterProvider.java
208 208
	}
209 209
	
210 210
	/**
211
	 * Tipo de fichero soportado.
212
	 * Devuelve true si el tipo de fichero (extension) est? soportado, si no
213
	 * devuelve false.
214
	 *
215
	 * @param fName Fichero raster
216
	 * @return  true si est? soportado, si no false.
217
		*/
218
	public static boolean fileIsSupported(String fName) {
219
		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
220
		ExtensionPoint point = extensionPoints.get("RasterReader");
221
//		ExtensionPoint extensionPoint = ExtensionPoint.getExtensionPoint("RasterReader");
222
		return point.has(RasterLocator.getManager().getFileUtils().getExtensionFromFileName(fName));
223
	}
224

  
225
	/**
226
	 * Obtiene la lista de extensiones de ficheros soportadas
227
	 * @return Lista de extensiones registradas
228
	 */
229
	@SuppressWarnings("unchecked")
230
	public static String[] getExtensionsSupported() {
231
		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
232
		ExtensionPoint point = extensionPoints.get("RasterReader");
233
		return (String[])point.getNames().toArray(new String[0]);
234
	}
235

  
236
	/**
237 211
	 * Constructor
238 212
	 * @param proj	Proyecci?n
239 213
	 * @param name	Nombre del fichero de imagen.
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/RasterFilesystemServerProvider.java
34 34
import org.gvsig.fmap.dal.DataManager;
35 35
import org.gvsig.fmap.dal.DataStoreParameters;
36 36
import org.gvsig.fmap.dal.NewDataStoreParameters;
37
import org.gvsig.fmap.dal.coverage.RasterLocator;
37 38
import org.gvsig.fmap.dal.exception.CreateException;
38 39
import org.gvsig.fmap.dal.exception.DataException;
39 40
import org.gvsig.fmap.dal.exception.RemoveException;
40 41
import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProvider;
41 42
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
42 43
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
43
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
44 44
import org.gvsig.raster.impl.provider.RasterProvider;
45 45

  
46 46
public class RasterFilesystemServerProvider extends AbstractFilesystemServerExplorerProvider 
......
142 142
				}
143 143
			}
144 144
		}
145
		return DefaultRasterProvider.fileIsSupported(pathname.getName());
145
		return RasterLocator.getManager().getProviderInfo().fileIsSupported(pathname.getName());
146 146
	}
147 147

  
148 148
	/*
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/writer/DefaultRasterWriter.java
23 23

  
24 24
import java.awt.geom.AffineTransform;
25 25
import java.io.IOException;
26
import java.lang.reflect.Constructor;
27
import java.lang.reflect.InvocationTargetException;
28
import java.util.ArrayList;
29
import java.util.Iterator;
30
import java.util.Map;
31
import java.util.Set;
32
import java.util.TreeMap;
33 26

  
34 27
import org.cresques.cts.IProjection;
35 28
import org.gvsig.fmap.dal.coverage.RasterLocator;
36 29
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
37 30
import org.gvsig.fmap.dal.coverage.datastruct.Params;
38 31
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
39
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
40 32
import org.gvsig.fmap.dal.coverage.exception.RmfSerializerException;
41 33
import org.gvsig.fmap.dal.coverage.store.DataServerWriter;
42 34
import org.gvsig.fmap.dal.coverage.store.ExternalCancellable;
......
44 36
import org.gvsig.fmap.dal.coverage.util.FileUtils;
45 37
import org.gvsig.fmap.dal.coverage.util.RasterUtils;
46 38
import org.gvsig.raster.impl.store.ParamsImpl;
47
import org.gvsig.raster.impl.store.WriteFileFormatFeatures;
48 39
import org.gvsig.raster.impl.store.properties.DatasetColorInterpretation;
49
import org.gvsig.tools.ToolsLocator;
50
import org.gvsig.tools.extensionpoint.ExtensionPoint;
51
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
40
import org.gvsig.raster.util.DefaultProviderInfo;
52 41

  
53 42
import es.gva.cit.jgdal.GdalException;
54
import es.gva.cit.jgdal.GdalWarp;
55 43

  
56 44
/**
57 45
 * Clase abstracta de la que heredan los drivers de escritura. Tiene los m?todos
......
64 52
	public static final int              MODE_FILEWRITE = 1;
65 53
	public static final int              MODE_DATAWRITE = 2;
66 54

  
67
	public static TreeMap<String, WriteFileFormatFeatures>
68
                                         fileFeature    = new TreeMap<String, WriteFileFormatFeatures>();
69 55
	protected String                     outFileName    = null;
70 56
	protected String                     inFileName     = null;
71 57
	protected int                        sizeWindowX    = 0;
......
85 71
	protected ExternalCancellable        extCancellable = null;
86 72
	protected FileUtils                  fileUtil       = RasterLocator.getManager().getFileUtils();
87 73
	protected RasterUtils                rasterUtil     = RasterLocator.getManager().getRasterUtils();
74
	protected DefaultProviderInfo        pInfo          = (DefaultProviderInfo)RasterLocator.getManager().getProviderInfo();
88 75
	
89
	/**
90
	 * Obtiene la lista de extensiones registradas
91
	 * @return Lista de extensiones registradas o null si no hay ninguna
92
	 */
93
	@SuppressWarnings("unchecked")
94
	public static String[] getDriversExtensions() {
95
		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
96
		ExtensionPoint point = extensionPoints.get("RasterWriter");
97
		return (String[])point.getNames().toArray(new String[0]);
98
	}
99 76

  
100 77
	/**
101
	 * Obtiene la lista de extensiones de ficheros sobre los que se puede salvar
102
	 * en un determinado tipo de datos. Como par?metro de la funci?n se especifica
103
	 * el tipo de datos sobre el que se desea consultar. Este m?todo consulta para
104
	 * cada driver registrado que extensiones soportan un tipo.
105
	 *
106
	 * @param dataType Tipo de datos
107
	 * @param bands Numero de bandas
108
	 * @param reprojectable Especifica si devuelve solo los formatos reproyectables
109
	 * @return Lista de extensiones registradas que soportan el tipo de datos
110
	 *         pasado por par?metro.
111
	 * @throws RasterDriverException
112
	 */
113
	@SuppressWarnings("unchecked")
114
	public static ArrayList getExtensionsSupported(int dataType, int bands, boolean reprojectable) throws RasterDriverException {
115
		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
116
		ExtensionPoint point = extensionPoints.get("RasterWriter");
117
		Iterator iterator = point.iterator();
118
		ArrayList result = new ArrayList();
119
		while (iterator.hasNext()) {
120
			ExtensionPoint.Extension extension = (ExtensionPoint.Extension) iterator
121
					.next();
122
			String ext = extension.getName();
123
			Class writerClass = extension.getExtension();
124
			Class[] args = { String.class };
125
			try {
126
				Constructor hazNuevo = writerClass.getConstructor(args);
127
				Object[] args2 = { ext };
128
				DefaultRasterWriter grw = (DefaultRasterWriter) hazNuevo.newInstance(args2);
129
				if (grw.isSupportedThisExtension(ext, dataType, bands))
130
					if (reprojectable) {
131
						if (GdalWarp.getDrivers().contains(grw.getDriverName()))
132
							result.add(ext);
133
					} else
134
						result.add(ext);
135
			} catch (SecurityException e) {
136
				throw new RasterDriverException("Error SecurityException in open");
137
			} catch (NoSuchMethodException e) {
138
				throw new RasterDriverException("Error NoSuchMethodException in open");
139
			} catch (IllegalArgumentException e) {
140
				throw new RasterDriverException("Error IllegalArgumentException in open");
141
			} catch (InstantiationException e) {
142
				throw new RasterDriverException("Error InstantiationException in open");
143
			} catch (IllegalAccessException e) {
144
				throw new RasterDriverException("Error IllegalAccessException in open");
145
			} catch (InvocationTargetException e) {
146
				throw new RasterDriverException("Error in open");
147
			}
148
		}
149
		return result;
150
	}
151

  
152
	/**
153
	 * Obtiene la lista de tipos de driver
154
	 * @return Lista de tipos de driver registradas o null si no hay ninguno
155
	 */
156
	@SuppressWarnings("unchecked")
157
	public static String[] getDriversType() {
158
		if (fileFeature.size() == 0)
159
			return null;
160
		String[] list = new String[fileFeature.size()];
161
		Set values = fileFeature.entrySet();
162
		int i = 0;
163
		for (Iterator it = values.iterator(); it.hasNext();) {
164
			list[i] = ((WriteFileFormatFeatures) ((Map.Entry) it.next()).getValue()).getDriverName();
165
			i++;
166
		}
167

  
168
		return list;
169
	}
170

  
171
	/**
172
	 * Obtiene el tipo de driver a partir de la extensi?n
173
	 * @param ext Extensi?n
174
	 * @return Tipo
175
	 */
176
	public static String getDriverType(String ext) {
177
		return ((WriteFileFormatFeatures) fileFeature.get(ext)).getDriverName();
178
	}
179

  
180
	/**
181
	 * Devuelve el n?mero de drivers soportados
182
	 * @return N?mero de drivers soportados
183
	 */
184
	public static int getNDrivers() {
185
		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
186
		ExtensionPoint point = extensionPoints.get("RasterWriter");
187
		return point.getCount();
188
	}
189

  
190
	/**
191
	 * Devuelve el n?mero de tipos de driver registrados
192
	 * @return N?mero de tipos de driver soportados
193
	 */
194
	public static int getNTypes() {
195
		return fileFeature.size();
196
	}
197

  
198
	/**
199 78
	 * Devuelve el identificador del driver
200 79
	 * @return Identificador del driver
201 80
	 */
......
235 114
		return percent;
236 115
	}
237 116

  
238

  
239

  
240 117
	/**
241 118
	 * Obtiene los par?metros del driver.
242 119
	 * @return WriterParams
......
299 176
	}
300 177

  
301 178
	/**
302
	 * M?todo que pregunta si la extensi?n pasada por par?metro est? soportada con
303
	 * el tipo y n?mero de bandas indicadas.
304
	 *
305
	 * @param dataType Tipo de dato
306
	 * @param bands N?mero de bandas
307
	 * @param extensi?n
308
	 * @return true si est? soportada y false si no lo est?
309
	 */
310
	public boolean isSupportedThisExtension(String ext, int dataType, int bands) {
311
		WriteFileFormatFeatures features = (WriteFileFormatFeatures) fileFeature.get(ext);
312
		if (features == null)
313
			return false;
314
		int[] bandsSupported = features.getNBandsSupported();
315
		if (bandsSupported[0] != -1 || bandsSupported[0] < bands)
316
			return false;
317
		int[] dt = features.getDataTypesSupported();
318
		for (int i = 0; i < dt.length; i++)
319
			if (dataType == dt[i])
320
				return true;
321
		return false;
322
	}
323

  
324
	/**
325 179
	 * Assigns the object to be cancelled
326 180
	 *
327 181
	 * @param cancellable
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/RasterManager.java
56 56
import org.gvsig.fmap.dal.coverage.util.FileUtils;
57 57
import org.gvsig.fmap.dal.coverage.util.Historical;
58 58
import org.gvsig.fmap.dal.coverage.util.MathUtils;
59
import org.gvsig.fmap.dal.coverage.util.ProviderInfo;
59 60
import org.gvsig.fmap.dal.coverage.util.RasterUtils;
60 61
import org.gvsig.tools.service.ServiceException;
61 62

  
......
69 70
 * @version $Id$
70 71
 */
71 72
public interface RasterManager {
73
	
72 74
	/**
75
	 * Gets the Provider information object
76
	 * @return
77
	 */
78
	public ProviderInfo getProviderInfo();
79
	
80
	/**
73 81
	 * Gets the CRS utilities
74 82
	 * @return
75 83
	 */
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/util/ProviderInfo.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 * 
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 * 
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 * 
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
 * MA  02110-1301, USA.
20
 * 
21
 */
22
package org.gvsig.fmap.dal.coverage.util;
23

  
24
import java.util.ArrayList;
25

  
26
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
27

  
28

  
29
/**
30
 * Providers information
31
 * @author Nacho Brodin nachobrodin@gmail.com
32
 */
33
public interface ProviderInfo {
34
	/**
35
	 * Tipo de fichero soportado.
36
	 * Devuelve true si el tipo de fichero (extension) est? soportado, si no
37
	 * devuelve false.
38
	 *
39
	 * @param fName Fichero raster
40
	 * @return  true si est? soportado, si no false.
41
		*/
42
	public boolean fileIsSupported(String fName);
43

  
44
	/**
45
	 * Obtiene la lista de extensiones de ficheros soportadas
46
	 * @return Lista de extensiones registradas
47
	 */
48
	public String[] getExtensionsSupported();
49
	
50
	/**
51
	 * Obtiene la lista de extensiones registradas
52
	 * @return Lista de extensiones registradas o null si no hay ninguna
53
	 */
54
	public String[] getDriversExtensions();
55

  
56
	/**
57
	 * Obtiene la lista de extensiones de ficheros sobre los que se puede salvar
58
	 * en un determinado tipo de datos. Como par?metro de la funci?n se especifica
59
	 * el tipo de datos sobre el que se desea consultar. Este m?todo consulta para
60
	 * cada driver registrado que extensiones soportan un tipo.
61
	 *
62
	 * @param dataType Tipo de datos
63
	 * @param bands Numero de bandas
64
	 * @param reprojectable Especifica si devuelve solo los formatos reproyectables
65
	 * @return Lista de extensiones registradas que soportan el tipo de datos
66
	 *         pasado por par?metro.
67
	 * @throws RasterDriverException
68
	 */
69
	@SuppressWarnings("unchecked")
70
	public ArrayList getExtensionsSupported(int dataType, int bands, boolean reprojectable) throws RasterDriverException;
71

  
72
	/**
73
	 * Obtiene la lista de tipos de driver
74
	 * @return Lista de tipos de driver registradas o null si no hay ninguno
75
	 */
76
	public String[] getWriteDriversType();
77

  
78
	/**
79
	 * Obtiene el tipo de driver a partir de la extensi?n
80
	 * @param ext Extensi?n
81
	 * @return Tipo
82
	 */
83
	public String getWriteDriverType(String ext);
84

  
85
	/**
86
	 * Devuelve el n?mero de drivers soportados
87
	 * @return N?mero de drivers soportados
88
	 */
89
	public int getWriteNDrivers();
90

  
91
	/**
92
	 * Devuelve el n?mero de tipos de driver registrados
93
	 * @return N?mero de tipos de driver soportados
94
	 */
95
	public int getWriteNTypes();
96
	
97

  
98
	/**
99
	 * M?todo que pregunta si la extensi?n pasada por par?metro est? soportada con
100
	 * el tipo y n?mero de bandas indicadas.
101
	 *
102
	 * @param dataType Tipo de dato
103
	 * @param bands N?mero de bandas
104
	 * @param extensi?n
105
	 * @return true si est? soportada y false si no lo est?
106
	 */
107
	public boolean isSupportedThisFileToWrite(String ext, int dataType, int bands);
108
}
0 109

  
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.io/org.gvsig.raster.io.base/src/main/java/org/gvsig/fmap/dal/coverage/dataset/io/PngWriter.java
26 26
import java.io.IOException;
27 27

  
28 28
import org.cresques.cts.IProjection;
29
import org.gvsig.fmap.dal.coverage.RasterLocator;
29 30
import org.gvsig.fmap.dal.coverage.dataset.io.features.PngFeatures;
30 31
import org.gvsig.fmap.dal.coverage.datastruct.Params;
31 32
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
32 33
import org.gvsig.fmap.dal.coverage.store.DataServerWriter;
33 34
import org.gvsig.raster.impl.store.WriteFileFormatFeatures;
34 35
import org.gvsig.raster.impl.store.writer.DefaultRasterWriter;
36
import org.gvsig.raster.util.DefaultProviderInfo;
35 37
import org.gvsig.tools.ToolsLocator;
36 38
import org.gvsig.tools.extensionpoint.ExtensionPoint;
37 39
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
......
55 57

  
56 58
	// Datos de registro de drivers
57 59
	public static void register() {
60
		DefaultProviderInfo pInfo = (DefaultProviderInfo)RasterLocator.getManager().getProviderInfo();
58 61
		ExtensionPointManager extensionPoints =ToolsLocator.getExtensionPointManager();
59 62
		ExtensionPoint point=extensionPoints.get("RasterWriter");
60 63
		point.append("png", "", PngWriter.class);
61
		fileFeature.put("png", new PngFeatures());
64
		pInfo.getFileFeature().put("png", new PngFeatures());
62 65
	}
63 66

  
64 67
	private GdalWriter gdalWriter = null;
......
69 72
	 * Carga los par?metros de este driver.
70 73
	 */
71 74
	public void loadParams(String ident) {
72
		WriteFileFormatFeatures wfff = (WriteFileFormatFeatures) fileFeature.get(ident);
75
		WriteFileFormatFeatures wfff = (WriteFileFormatFeatures) pInfo.getFileFeature().get(ident);
73 76
		wfff.loadParams();
74 77
		driverParams = wfff.getParams();
75 78
	}
......
80 83
	 */
81 84
	public PngWriter(String fileName) {
82 85
		ident = fileUtil.getExtensionFromFileName(fileName);
83
		driver = ((WriteFileFormatFeatures) fileFeature.get(ident)).getDriverName();
86
		driver = ((WriteFileFormatFeatures) pInfo.getFileFeature().get(ident)).getDriverName();
84 87
		gdalWriter = new GdalWriter(fileName);
85 88

  
86 89
		loadParams(ident);
......
112 115
							IProjection proj,
113 116
							Boolean geo)throws GdalException, IOException  {
114 117
		ident = fileUtil.getExtensionFromFileName(outFileName);
115
		driver = ((WriteFileFormatFeatures) fileFeature.get(ident)).getDriverName();
118
		driver = ((WriteFileFormatFeatures) pInfo.getFileFeature().get(ident)).getDriverName();
116 119
		outPng = outFileName;
117 120
		outTif = outFileName.substring(0, outFileName.lastIndexOf("."));
118 121
		outTif += ".tif";
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.io/org.gvsig.raster.io.base/src/main/java/org/gvsig/fmap/dal/coverage/dataset/io/JpegWriter.java
26 26
import java.io.IOException;
27 27

  
28 28
import org.cresques.cts.IProjection;
29
import org.gvsig.fmap.dal.coverage.RasterLocator;
29 30
import org.gvsig.fmap.dal.coverage.dataset.io.features.JpegFeatures;
30 31
import org.gvsig.fmap.dal.coverage.datastruct.Params;
31 32
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
32 33
import org.gvsig.fmap.dal.coverage.store.DataServerWriter;
33 34
import org.gvsig.raster.impl.store.WriteFileFormatFeatures;
34 35
import org.gvsig.raster.impl.store.writer.DefaultRasterWriter;
36
import org.gvsig.raster.util.DefaultProviderInfo;
35 37
import org.gvsig.tools.ToolsLocator;
36 38
import org.gvsig.tools.extensionpoint.ExtensionPoint;
37 39
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
......
54 56

  
55 57
	// Datos de registro de drivers
56 58
	public static void register() {
59
		DefaultProviderInfo pInfo = (DefaultProviderInfo)RasterLocator.getManager().getProviderInfo();
57 60
		ExtensionPointManager extensionPoints =ToolsLocator.getExtensionPointManager();
58 61
		ExtensionPoint point=extensionPoints.get("RasterWriter");
59 62
		point.append("jpg", "", JpegWriter.class);
60
		fileFeature.put("jpg", new JpegFeatures());
63
		pInfo.getFileFeature().put("jpg", new JpegFeatures());
61 64
	}
62 65

  
63 66
	private GdalWriter gdalWriter = null;
......
68 71
	 * Carga los par?metros de este driver.
69 72
	 */
70 73
	public void loadParams(String ident) {
71
		WriteFileFormatFeatures wfff = (WriteFileFormatFeatures) fileFeature.get(ident);
74
		WriteFileFormatFeatures wfff = (WriteFileFormatFeatures) pInfo.getFileFeature().get(ident);
72 75
		wfff.loadParams();
73 76
		driverParams = wfff.getParams();
74 77
	}
......
79 82
	 */
80 83
	public JpegWriter(String fileName) {
81 84
		ident = fileUtil.getExtensionFromFileName(fileName);
82
		driver = ((WriteFileFormatFeatures) fileFeature.get(ident)).getDriverName();
85
		driver = ((WriteFileFormatFeatures) pInfo.getFileFeature().get(ident)).getDriverName();
83 86
		gdalWriter = new GdalWriter(fileName);
84 87

  
85 88
		loadParams(ident);
......
111 114
							IProjection proj,
112 115
							Boolean geo)throws GdalException, IOException  {
113 116
		ident = fileUtil.getExtensionFromFileName(outFileName);
114
		driver = ((WriteFileFormatFeatures) fileFeature.get(ident)).getDriverName();
117
		driver = ((WriteFileFormatFeatures) pInfo.getFileFeature().get(ident)).getDriverName();
115 118
		outJpg = outFileName;
116 119
		outTif = outFileName.substring(0, outFileName.lastIndexOf("."));
117 120
		outTif += ".tif";
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.io/org.gvsig.raster.io.base/src/main/java/org/gvsig/fmap/dal/coverage/dataset/io/GdalWriter.java
50 50
import org.gvsig.raster.impl.store.ParamsImpl.ParamImpl;
51 51
import org.gvsig.raster.impl.store.properties.DatasetColorInterpretation;
52 52
import org.gvsig.raster.impl.store.writer.DefaultRasterWriter;
53
import org.gvsig.raster.util.DefaultProviderInfo;
53 54
import org.gvsig.tools.ToolsLocator;
54 55
import org.gvsig.tools.extensionpoint.ExtensionPoint;
55 56
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
......
80 81
public class GdalWriter extends DefaultRasterWriter {
81 82

  
82 83
	public static void register() {
84
		DefaultProviderInfo pInfo = (DefaultProviderInfo)RasterLocator.getManager().getProviderInfo();
83 85
		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
84 86
		ExtensionPoint point = extensionPoints.get("RasterWriter");
85 87

  
86 88
		point.append("tif", "", GdalWriter.class);
87
		fileFeature.put("tif", new GTiffFeatures());
89
		pInfo.getFileFeature().put("tif", new GTiffFeatures());
88 90

  
89 91
		point.append("img", "", GdalWriter.class);
90
		fileFeature.put("img", new HFAFeatures());
92
		pInfo.getFileFeature().put("img", new HFAFeatures());
91 93

  
92 94
		point.append("bmp", "", GdalWriter.class);
93
		fileFeature.put("bmp", new BMPFeatures());
95
		pInfo.getFileFeature().put("bmp", new BMPFeatures());
94 96

  
95 97
		point.append("pgm", "", GdalWriter.class);
96
		fileFeature.put("pgm", new PNM_PgmFeatures());
98
		pInfo.getFileFeature().put("pgm", new PNM_PgmFeatures());
97 99

  
98 100
		point.append("ppm", "", GdalWriter.class);
99
		fileFeature.put("ppm", new PNM_PpmFeatures());
101
		pInfo.getFileFeature().put("ppm", new PNM_PpmFeatures());
100 102

  
101 103
		point.append("mpl", "", GdalWriter.class);
102
		fileFeature.put("mpl", new ILWIS_MprFeatures());
104
		pInfo.getFileFeature().put("mpl", new ILWIS_MprFeatures());
103 105

  
104 106
		point.append("rst", "", GdalWriter.class);
105
		fileFeature.put("rst", new IDRISIFeatures());
107
		pInfo.getFileFeature().put("rst", new IDRISIFeatures());
106 108

  
107 109
		//La exportaci?n no es correcta del todo
108 110
		//point.register("rmf", GdalWriter.class);
......
128 130
	 * Carga los par?metros de este driver.
129 131
	 */
130 132
	public void loadParams(String ident) {
131
		WriteFileFormatFeatures wfff = (WriteFileFormatFeatures)fileFeature.get(ident);
133
		WriteFileFormatFeatures wfff = (WriteFileFormatFeatures)pInfo.getFileFeature().get(ident);
132 134
		wfff.loadParams();
133 135
		driverParams = (ParamsImpl)wfff.getParams();
134 136
	}
......
139 141
	 */
140 142
	public GdalWriter(String fileName) {
141 143
		ident = fileUtil.getExtensionFromFileName(fileName);
142
		driver = ((WriteFileFormatFeatures)fileFeature.get(ident)).getDriverName();
144
		driver = ((WriteFileFormatFeatures)pInfo.getFileFeature().get(ident)).getDriverName();
143 145

  
144 146
		loadParams(ident);
145 147
	}
......
196 198

  
197 199
		this.proj = proj;
198 200
		ident = outFileName.toLowerCase().substring(outFileName.lastIndexOf(".") + 1);
199
		driver = ((WriteFileFormatFeatures)fileFeature.get(ident)).getDriverName();
201
		driver = ((WriteFileFormatFeatures)pInfo.getFileFeature().get(ident)).getDriverName();
200 202
		this.dataType = dataType.intValue();
201 203
		this.at = at;
202 204
		percent = 0;
......
269 271

  
270 272
		boolean okdrvtype = false;
271 273

  
272
		String[] types = DefaultRasterWriter.getDriversType();
273
		for (int i = 0; i < DefaultRasterWriter.getNTypes(); i++)
274
		String[] types = pInfo.getWriteDriversType();
275
		for (int i = 0; i < pInfo.getWriteNTypes(); i++)
274 276
			if (driver.equals(types[i]))
275 277
				okdrvtype = true;
276 278

  
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.io/org.gvsig.raster.io.base/src/main/java/org/gvsig/fmap/dal/coverage/dataset/io/ErmapperWriter.java
39 39
import org.gvsig.raster.impl.store.WriteFileFormatFeatures;
40 40
import org.gvsig.raster.impl.store.ParamsImpl.ParamImpl;
41 41
import org.gvsig.raster.impl.store.writer.DefaultRasterWriter;
42
import org.gvsig.raster.util.DefaultProviderInfo;
42 43
import org.gvsig.tools.ToolsLocator;
43 44
import org.gvsig.tools.extensionpoint.ExtensionPoint;
44 45
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
......
64 65
public class ErmapperWriter extends DefaultRasterWriter {
65 66

  
66 67
	public static void register() {
67
		ExtensionPointManager extensionPoints =ToolsLocator.getExtensionPointManager();
68
		ExtensionPoint point=extensionPoints.get("RasterWriter");
68
		DefaultProviderInfo pInfo = (DefaultProviderInfo)RasterLocator.getManager().getProviderInfo();
69
		ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
70
		ExtensionPoint point = extensionPoints.get("RasterWriter");
69 71
		WriteFileFormatFeatures features = null;
70 72

  
71 73
		String os = System.getProperties().getProperty("os.version");
72 74
		if (os.startsWith("2.4")){
73 75
			point.append("ecw", "", ErmapperWriter.class);
74 76
			features = new WriteFileFormatFeatures("Ecw", "ecw", new int[]{3}, null, ErmapperWriter.class);
75
			fileFeature.put("ecw", features);
77
			pInfo.getFileFeature().put("ecw", features);
76 78
		}
77 79
		point.append("jp2", "", ErmapperWriter.class);
78 80
		features = new WriteFileFormatFeatures("Jpeg2000", "jp2", new int[]{3}, null, ErmapperWriter.class);
79
		fileFeature.put("jp2", features);
81
		pInfo.getFileFeature().put("jp2", features);
80 82
	}
81 83

  
82 84
	public final int 				windowSizeX = 386;
......
115 117
	 * Constructor para la obtenci?n de par?metros del driver.
116 118
	 */
117 119
	public ErmapperWriter(String fileName) {
120
		DefaultProviderInfo pInfo = (DefaultProviderInfo)RasterLocator.getManager().getProviderInfo();
118 121
		ident = fileUtil.getExtensionFromFileName(fileName);
119
		driver = ((WriteFileFormatFeatures)fileFeature.get(ident)).getDriverName();
122
		driver = ((WriteFileFormatFeatures)pInfo.getFileFeature().get(ident)).getDriverName();
120 123

  
121 124
		loadParams();
122 125

  
......
149 152
			Params params,
150 153
			IProjection proj,
151 154
			Boolean geo) throws EcwException, IOException {
152

  
155
		DefaultProviderInfo pInfo = (DefaultProviderInfo)RasterLocator.getManager().getProviderInfo();
153 156
		//La libreria de ECW no se traga caracteres raros al escribir. Los cambiamos por X de momento y ya se apa?a el usuario
154 157

  
155 158
		String ext = fileUtil.getExtensionFromFileName(outFileName);
......
158 161

  
159 162
		this.proj = proj;
160 163
		ident = fileUtil.getExtensionFromFileName(outFileName);
161
		driver = ((WriteFileFormatFeatures)fileFeature.get(ident)).getDriverName();
164
		driver = ((WriteFileFormatFeatures)pInfo.getFileFeature().get(ident)).getDriverName();
162 165
		this.dataType = dataType.intValue();
163 166

  
164 167
		if (nBands.intValue() <= 0)

Also available in: Unified diff