Revision 1887

View differences:

org.gvsig.raster.tools/trunk/org.gvsig.raster.tools/org.gvsig.raster.tools.multifile.io_deprecated/src/main/java/org/gvsig/raster/tools/multifile/io/MultiFileServerExplorer.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

  
23
/*
24
* AUTHORS (In addition to CIT):
25
* 2009 IVER T.I   {{Task}}
26
*/
27

  
28
package org.gvsig.raster.tools.multifile.io;
29

  
30
import java.io.File;
31
import java.util.List;
32

  
33
import org.gvsig.fmap.dal.DALLocator;
34
import org.gvsig.fmap.dal.DataManager;
35
import org.gvsig.fmap.dal.DataServerExplorer;
36
import org.gvsig.fmap.dal.DataServerExplorerParameters;
37
import org.gvsig.fmap.dal.DataStoreParameters;
38
import org.gvsig.fmap.dal.NewDataStoreParameters;
39
import org.gvsig.fmap.dal.coverage.RasterLocator;
40
import org.gvsig.fmap.dal.exception.CreateException;
41
import org.gvsig.fmap.dal.exception.DataException;
42
import org.gvsig.fmap.dal.exception.InitializeException;
43
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
44
import org.gvsig.fmap.dal.exception.RemoveException;
45
import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProvider;
46
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices;
47
import org.gvsig.fmap.dal.spi.DataServerExplorerProvider;
48
import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
49
import org.gvsig.raster.impl.store.AbstractRasterFileDataParameters;
50

  
51
/**
52
 * Explorer for a Multifile 
53
 * @author Nacho Brodin (nachobrodin@gmail.com)
54
 */
55
public class MultiFileServerExplorer extends AbstractFilesystemServerExplorerProvider implements DataServerExplorerProvider  {
56
	
57
	public MultiFileServerExplorer() {
58
		
59
	}
60
	
61
	public MultiFileServerExplorer(
62
			MultiFileServerExplorerParameters parameters,
63
			DataServerExplorerProviderServices services)
64
			throws InitializeException {
65
		System.out.println();
66
	}
67
	
68
	/*
69
	 * (non-Javadoc)
70
	 * @see org.gvsig.fmap.dal.coverage.store.remote.RemoteServerExplorerProvider#getDataStoreProviderName()
71
	 */
72
	public String getDataStoreProviderName() {
73
		return MultiFileProvider.NAME;
74
	}
75
	
76
	/*
77
	 * (non-Javadoc)
78
	 * @see org.gvsig.fmap.dal.coverage.store.remote.RemoteServerExplorerProvider#getDescription()
79
	 */
80
	public String getDescription() {
81
		return MultiFileProvider.DESCRIPTION;
82
	}
83
	
84
	/*
85
	 * (non-Javadoc)
86
	 * @see org.gvsig.fmap.dal.coverage.explorer.WMTSServerExplorer#getStoreParameters()
87
	 */
88
	public DataStoreParameters getStoreParameters() {
89
		DataManager manager = DALLocator.getDataManager();
90
		try {
91
			return  manager.createStoreParameters(this.getDataStoreProviderName());
92
		} catch (InitializeException e) {
93
			e.printStackTrace();
94
		} catch (ProviderNotRegisteredException e) {
95
			e.printStackTrace();
96
		}
97
		return null;
98
	}
99

  
100
	@SuppressWarnings("unchecked")
101
	public List getDataStoreProviderNames() {
102
		return null;
103
	}
104

  
105
	public String getProviderName() {
106
		return MultiFileProvider.NAME;
107
	}
108

  
109
	/*
110
	 * (non-Javadoc)
111
	 * @see org.gvsig.fmap.dal.spi.DataServerExplorerProvider#getServerExplorerProviderServices()
112
	 */
113
	public DataServerExplorerProviderServices getServerExplorerProviderServices() {
114
		return null;
115
	}
116

  
117
	/*
118
	 * (non-Javadoc)
119
	 * @see org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider#canCreate()
120
	 */
121
	public boolean canCreate() {
122
		return false;
123
	}
124

  
125
	/*
126
	 * (non-Javadoc)
127
	 * @see org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider#canCreate(org.gvsig.fmap.dal.NewDataStoreParameters)
128
	 */
129
	public boolean canCreate(NewDataStoreParameters parameters) {
130
		return false;
131
	}
132

  
133
	/*
134
	 * (non-Javadoc)
135
	 * @see org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider#create(org.gvsig.fmap.dal.NewDataStoreParameters, boolean)
136
	 */
137
	public void create(NewDataStoreParameters parameters, boolean overwrite)
138
			throws CreateException {
139
		throw new UnsupportedOperationException();
140
	}
141

  
142
	/*
143
	 * (non-Javadoc)
144
	 * @see org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider#getCreateParameters()
145
	 */
146
	public NewDataStoreParameters getCreateParameters() throws DataException {
147
		return null;
148
	}
149

  
150
	/*
151
	 * (non-Javadoc)
152
	 * @see org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider#initialize(org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderServices)
153
	 */
154
	public void initialize(
155
			FilesystemServerExplorerProviderServices serverExplorer) {
156
	}
157

  
158
	/*
159
	 * (non-Javadoc)
160
	 * @see java.io.FileFilter#accept(java.io.File)
161
	 */
162
	public boolean accept(File pathname) {
163
		return RasterLocator.getManager().getProviderServices().isExtensionSupported(
164
				pathname.getAbsolutePath(), 
165
				MultiFileProvider.class);
166
	}
167

  
168
	/*
169
	 * (non-Javadoc)
170
	 * @see org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider#remove(org.gvsig.fmap.dal.DataStoreParameters)
171
	 */
172
	public void remove(DataStoreParameters parameters) throws RemoveException {
173
		throw new UnsupportedOperationException();
174
	}
175

  
176
	public boolean add(String provider, NewDataStoreParameters parameters,
177
			boolean overwrite) throws DataException {
178
		return false;
179
	}
180

  
181
	public boolean canAdd() {
182
		return false;
183
	}
184

  
185
	public boolean canAdd(String storeName) throws DataException {
186
		return false;
187
	}
188

  
189
	public NewDataStoreParameters getAddParameters(String storeName)
190
			throws DataException {
191
		return null;
192
	}
193
	
194
	public DataStoreParameters getParameters(File file) throws DataException {
195
		DataManager manager = DALLocator.getDataManager();
196
		AbstractRasterFileDataParameters params = (AbstractRasterFileDataParameters) manager
197
				.createStoreParameters(this.getDataStoreProviderName());
198
		params.setFile(file);
199
		return params;
200
	}
201

  
202
	public DataServerExplorerParameters getParameters() {
203
		return null;
204
	}
205

  
206
	@SuppressWarnings("unchecked")
207
	public List list() throws DataException {
208
		return null;
209
	}
210

  
211
	@SuppressWarnings("unchecked")
212
	public List list(int mode) throws DataException {
213
		return null;
214
	}
215

  
216
	public void dispose() {
217
	}
218
	
219
	public int getMode() {
220
		return DataServerExplorer.MODE_RASTER;
221
	}
222

  
223
}
0 224

  
org.gvsig.raster.tools/trunk/org.gvsig.raster.tools/org.gvsig.raster.tools.multifile.io_deprecated/src/main/java/org/gvsig/raster/tools/multifile/io/MultiFileFormat.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.tools.multifile.io;
23

  
24
import java.io.File;
25
import java.io.IOException;
26
import java.util.ArrayList;
27

  
28
/**
29
 * MultiFileFormat information
30
 * 
31
 * @author Nacho Brodin (nachobrodin@gmail.com)
32
 */
33
public class MultiFileFormat {
34
	public ArrayList<File>   fileList                       = new ArrayList<File>();
35
	private String           name                           = null;
36

  
37
	/**
38
	 * Gets the name of this serial
39
	 * @return
40
	 */
41
	public String getName() {
42
		return name;
43
	}
44
	
45
	/**
46
	 * Sets the name of this serie
47
	 * @param name
48
	 */
49
	public void setName(String name) {
50
		this.name = name;
51
	}
52

  
53
	/**
54
	 * Gets the number of files of this serial
55
	 * @return
56
	 */
57
	public int getNumberOfFiles() {
58
		return fileList.size();
59
	}
60
	
61
	/**
62
	 * Gets the path of the file in the selected position
63
	 * @param file
64
	 * @return
65
	 */
66
	public String getPathToFile(int file) {
67
		return fileList.get(file).getAbsolutePath();
68
	}
69
	
70
	/**
71
	 * Adds a file to the list
72
	 * @param file
73
	 */
74
	public void addFile(File file) {
75
		fileList.add(file);
76
	}
77
	
78
	/**
79
	 * Cleans the list of files 
80
	 */
81
	public void clean() {
82
		fileList.clear();
83
		name = null;
84
	}
85
	
86
	/**
87
	 * Writes a MultiFileFormat to disk
88
	 * @param file
89
	 * @throws IOException
90
	 */
91
	public void write(String fileName) throws IOException {
92
		MultiFileFormatSerializer.write(this, fileName);
93
	}
94
}
0 95

  
org.gvsig.raster.tools/trunk/org.gvsig.raster.tools/org.gvsig.raster.tools.multifile.io_deprecated/src/main/java/org/gvsig/raster/tools/multifile/io/MultiFileProvider.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.tools.multifile.io;
23

  
24
import java.awt.geom.AffineTransform;
25
import java.awt.geom.Point2D;
26
import java.awt.geom.Rectangle2D;
27
import java.io.File;
28
import java.io.IOException;
29
import java.util.ArrayList;
30
import java.util.List;
31

  
32
import org.gvsig.fmap.dal.DALFileLocator;
33
import org.gvsig.fmap.dal.DALLocator;
34
import org.gvsig.fmap.dal.DataStore;
35
import org.gvsig.fmap.dal.DataStoreParameters;
36
import org.gvsig.fmap.dal.coverage.RasterLocator;
37
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
38
import org.gvsig.fmap.dal.coverage.datastruct.BandList;
39
import org.gvsig.fmap.dal.coverage.datastruct.Extent;
40
import org.gvsig.fmap.dal.coverage.exception.BandAccessException;
41
import org.gvsig.fmap.dal.coverage.exception.BandNotFoundInListException;
42
import org.gvsig.fmap.dal.coverage.exception.FileNotOpenException;
43
import org.gvsig.fmap.dal.coverage.exception.FileNotSupportedException;
44
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException;
45
import org.gvsig.fmap.dal.coverage.exception.InvalidSourceException;
46
import org.gvsig.fmap.dal.coverage.exception.NotSupportedExtensionException;
47
import org.gvsig.fmap.dal.coverage.exception.ParsingException;
48
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException;
49
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
50
import org.gvsig.fmap.dal.coverage.store.parameter.RasterDataParameters;
51
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation;
52
import org.gvsig.fmap.dal.coverage.store.props.ColorTable;
53
import org.gvsig.fmap.dal.coverage.store.props.HistogramComputer;
54
import org.gvsig.fmap.dal.coverage.store.props.Statistics;
55
import org.gvsig.fmap.dal.coverage.util.ProviderServices;
56
import org.gvsig.fmap.dal.exception.CloseException;
57
import org.gvsig.fmap.dal.exception.InitializeException;
58
import org.gvsig.fmap.dal.exception.OpenException;
59
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
60
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
61
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
62
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
63
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
64
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
65
import org.gvsig.fmap.dal.spi.DataStoreProvider;
66
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
67
import org.gvsig.metadata.MetadataLocator;
68
import org.gvsig.raster.cache.tile.provider.TileListener;
69
import org.gvsig.raster.cache.tile.provider.TileServer;
70
import org.gvsig.raster.impl.buffer.DefaultRasterQuery;
71
import org.gvsig.raster.impl.datastruct.BandListImpl;
72
import org.gvsig.raster.impl.datastruct.DatasetBandImpl;
73
import org.gvsig.raster.impl.datastruct.ExtentImpl;
74
import org.gvsig.raster.impl.provider.DefaultRasterProvider;
75
import org.gvsig.raster.impl.provider.RasterProvider;
76
import org.gvsig.raster.impl.provider.tile.FileTileServer;
77
import org.gvsig.raster.impl.store.DefaultStoreFactory;
78
import org.gvsig.raster.impl.store.properties.DataStoreColorInterpretation;
79
import org.gvsig.raster.impl.store.properties.DataStoreTransparency;
80
import org.gvsig.raster.impl.store.properties.MultiProviderHistogramComputer;
81
import org.gvsig.raster.impl.store.properties.MultiProviderStatistics;
82
import org.gvsig.tools.ToolsLocator;
83
import org.gvsig.tools.locator.LocatorException;
84
import org.gvsig.tools.task.TaskStatus;
85
import org.slf4j.Logger;
86
import org.slf4j.LoggerFactory;
87
/**
88
 * A data provider for a multiband image readed from different files
89
 *
90
 * @author Nacho Brodin (nachobrodin@gmail.com)
91
 */
92
public class MultiFileProvider extends DefaultRasterProvider {
93
	public static String                     NAME                     = "Multifile Raster";
94
	public static String                     DESCRIPTION              = "Multifile Raster Support";
95
	public final String                      METADATA_DEFINITION_NAME = NAME;
96
	private Extent                           viewRequest              = null;
97
	private TileServer                       tileServer               = null;
98
	private boolean                          open                     = false;
99

  
100
    private DataStoreTransparency            fileTransparency         = null;
101
    private static final Logger              logger                   = LoggerFactory.getLogger(MultiFileProvider.class);
102
    protected static String[]                formatList               = null;
103
    private ArrayList<RasterProvider>        providerList             = null;
104
    
105
	public static void register() {
106
		DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator.getDataManager();
107
		registerFormats();
108
		
109
		if (dataman != null && !dataman.getStoreProviders().contains(NAME)) {
110
			dataman.registerStoreProvider(NAME,
111
					MultiFileProvider.class, MultiFileDataParametersImpl.class);
112
		}		
113
		
114
		if(DALFileLocator.getFilesystemServerExplorerManager() != null)
115
			DALFileLocator.getFilesystemServerExplorerManager().registerProvider(
116
					NAME, DESCRIPTION,
117
					MultiFileServerExplorer.class);
118
		
119
		if (!dataman.getExplorerProviders().contains(NAME)) {
120
			dataman.registerExplorerProvider(NAME, MultiFileServerExplorer.class, MultiFileServerExplorerParameters.class);
121
		}
122
		
123
		dataman.registerStoreFactory(NAME, DefaultStoreFactory.class);
124
	}
125
	
126
	private static void registerFormats() {
127
		formatList      = new String[] {
128
				"mff"};
129
		for (int i = 0; i < formatList.length; i++) 
130
			RasterLocator.getManager().getProviderServices().addFormat(
131
					formatList[i], 
132
					MultiFileProvider.class);
133
	}
134
	
135
	public MultiFileProvider() {
136
	}
137
	
138
	/**
139
	 * Opens the dataset.
140
	 * @param proj Projection
141
	 * @param fName File name
142
	 * @throws NotSupportedExtensionException
143
	 */
144
	public MultiFileProvider(String params) throws NotSupportedExtensionException, OpenException {
145
		super(params);
146
		if(params instanceof String) {
147
			MultiFileDataParameters p = new MultiFileDataParametersImpl();
148
			p.setURI((String)params);
149
			super.init(p, null, ToolsLocator.getDynObjectManager()
150
					.createDynObject(
151
							MetadataLocator.getMetadataManager().getDefinition(
152
									DataStore.METADATA_DEFINITION_NAME)));
153
			init(p, null);
154
		}
155
	}
156
	
157
	public MultiFileProvider(MultiFileDataParametersImpl params,
158
			DataStoreProviderServices storeServices) throws NotSupportedExtensionException, OpenException {
159
		super(params, storeServices, ToolsLocator.getDynObjectManager()
160
				.createDynObject(
161
						MetadataLocator.getMetadataManager().getDefinition(
162
								DataStore.METADATA_DEFINITION_NAME)));
163
		init(params, storeServices);
164
	}
165

  
166
	/**
167
	 * Build file references
168
	 * @param proj Projection
169
	 * @param param Load parameters
170
	 * @throws NotSupportedExtensionException
171
	 */
172
	public void init(MultiFileDataParameters params,
173
			DataStoreProviderServices storeServices) throws NotSupportedExtensionException, OpenException {
174
		
175
		openFromMff();
176
		
177
		uri = getParameters().getURI();
178
		providerList = getParameters().getProviders();
179
		setParam(storeServices, params);
180
		
181
		try {
182
			setFirstProviderToNotTiled();
183
		} catch (InvalidSourceException e1) {
184
			throw new OpenException(e1.getMessage(), e1);
185
		}
186
		
187
		super.init();
188
		
189
		try {
190
			loadFromRmf(getRmfBlocksManager());
191
		} catch (ParsingException e) {
192
			logger.debug("Problems reading from RMF", e);
193
		}
194

  
195
		open = true;
196
	}
197
	
198
	/**
199
	 * Open from a .mff file. 
200
	 * This method loads all providers and adds these to the parameters
201
	 * @throws OpenException
202
	 */
203
	private void openFromMff() throws OpenException {
204
		if(getParameters().getURI() != null && new File(getParameters().getURI()).exists()) {
205
			boolean loadedProviders = true;
206
			if(getParameters().getProviders() != null) {
207
				//solo se considera que est?n todos los providers cargados si existen y est?n open,
208
				//sino se leeran de disco
209
				for (int i = 0; i < getParameters().getProviders().size(); i++) {
210
					if(!getParameters().getProviders().get(i).isOpen()) 
211
						loadedProviders = false;
212
				}
213
			} else
214
				loadedProviders = false;
215
			
216
			if(loadedProviders)
217
				return;
218
			
219
			try {
220
				if(getParameters().getProviders() != null)
221
					getParameters().getProviders().clear();
222
				MultiFileFormat multiFileFormat = new MultiFileFormat();
223
				multiFileFormat = MultiFileFormatSerializer.read(multiFileFormat, getParameters().getURI());
224
				for (int i = 0; i < multiFileFormat.getNumberOfFiles(); i++) {
225
					try {
226
						File file = new File(multiFileFormat.getPathToFile(i));
227
						if(file.exists()) {
228
							RasterProvider prov = loadProvider(multiFileFormat.getPathToFile(i), storeServices);
229
							getParameters().addProvider(prov);
230
						}
231
					} catch (ProviderNotRegisteredException e) {
232
						throw new OpenException("A provider can't be loaded", e);
233
					} catch (InitializeException e) {
234
						throw new OpenException("A provider can't be initialized", e);
235
					}
236
				}
237
			} catch (IOException e1) {
238
				throw new OpenException("File .mff can't be read", e1);
239
			} catch (ParsingException e1) {
240
				throw new OpenException("File .mff can't be parsed", e1);
241
			}
242
		} 
243
	}
244
	
245
	/**
246
	 * Loads the specific provider
247
	 * @param file
248
	 * @return
249
	 * @throws NotSupportedExtensionException
250
	 * @throws FileNotSupportedException 
251
	 */
252
	private RasterProvider loadProvider(String file, DataStoreProviderServices storeServices) throws ProviderNotRegisteredException, InitializeException {
253
		DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
254
		DataStoreProvider prov = null;
255

  
256
		if(file != null) {
257
			//We have to locate a provider's name which manages the selected file
258
			//A FilesystemServerExplorer will give a getProviderNames service
259
			FilesystemServerExplorerParameters paramsExplorer = (FilesystemServerExplorerParameters)dataManager.createServerExplorerParameters(FilesystemServerExplorer.NAME);
260
			FilesystemServerExplorer serverExplorer = null;
261
			try {
262
				paramsExplorer.setRoot(File.separator);
263
				serverExplorer = (FilesystemServerExplorer)dataManager.openServerExplorer(FilesystemServerExplorer.NAME, paramsExplorer);
264
			} catch (ValidateDataParametersException e) {
265
				throw new InitializeException(e);
266
			}
267
			File f = new File(file);
268
			//Gets the list of provider's name to manage the file
269
			ArrayList<String> provName = serverExplorer.getProviderNameList(f);
270
			if(provName.size() > 0) {
271
				for (int i = 0; i < provName.size(); i++) {
272
					//Gets the first provider what is not a TileProvider
273
					if(provName.get(i).compareTo("Tile Store") != 0) {
274
						DataStoreParameters newparams = dataManager.createStoreParameters(provName.get(i));
275
						((FilesystemStoreParameters)newparams).setFile(f); 
276
						prov = dataManager.createProvider(storeServices, newparams);
277
					}
278
				}
279
			}
280
		}
281

  
282
		if(prov != null && prov instanceof RasterProvider) {
283
			if(((RasterProvider)prov).isRotated())
284
				throw new InitializeException("Rotation not supported tiling files", new Throwable());
285

  
286
			return (RasterProvider)prov;
287
		}
288
		
289
		return null;
290
	}
291
	
292
	/**
293
	 * Checks if the new file is compatible with the old one
294
	 * @param file
295
	 * @return
296
	 * @throws LocatorException
297
	 * @throws NotSupportedExtensionException
298
	 * @throws RasterDriverException
299
	 * @throws CloseException
300
	 */
301
	private boolean checkNewProvider(RasterProvider p) {
302
		Rectangle2D extentOrigin = getExtent().toRectangle2D();
303
		
304
		Extent extentNewFile = p.getExtent();
305

  
306
		// Comprobamos que el extent y tama?o del fichero a?adido sea igual al
307
		// fichero original. Si no es as? no abrimos la capa y mostramos un aviso
308

  
309
		double widthNewFile = (extentNewFile.getMax().getX() - extentNewFile.getMin().getX());
310
		double heightNewFile = (extentNewFile.getMax().getY() - extentNewFile.getMin().getY());
311

  
312
		if ((widthNewFile - extentOrigin.getWidth()) > 1.0 || (widthNewFile - extentOrigin.getWidth()) < -1.0 || (heightNewFile - extentOrigin.getHeight()) > 1.0
313
				|| (heightNewFile - extentOrigin.getHeight()) < -1.0) {
314
			return false;
315
		}
316

  
317
		if ((extentNewFile.getMax().getX() - extentNewFile.getMin().getX()) != extentOrigin.getWidth()
318
				|| (extentNewFile.getMax().getY() - extentNewFile.getMin().getY()) != extentOrigin.getHeight()) {
319
			return false;
320
		}
321

  
322
		return true;
323
	}
324
	
325
	public MultiFileDataParameters getParameters() {
326
		try {
327
			return (MultiFileDataParameters)parameters;
328
		} catch (ClassCastException e) {
329
			return null;
330
		}
331
	}
332
	
333
	/*
334
	 * (non-Javadoc)
335
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#load()
336
	 */
337
	public RasterProvider load() {
338
		return this;
339
	}
340
	
341
	/*
342
	 * (non-Javadoc)
343
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getBandCount()
344
	 */
345
	public int getBandCount() {
346
		providerList = getParameters().getProviders();
347
		int bandCount = 0;
348
		for (int i = 0; i < providerList.size(); i++) {
349
			bandCount += providerList.get(i).getBandCount();
350
		}
351
		return bandCount;
352
	}
353
	
354
	/*
355
	 * (non-Javadoc)
356
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getDataType()
357
	 */
358
	public int[] getDataType() {
359
		providerList = getParameters().getProviders();
360
		int[] datatypes = new int[getBandCount()];
361
		int k = 0;
362
		for (int i = 0; i < providerList.size(); i++) {
363
			int[] dtByProv = providerList.get(i).getDataType();
364
			for (int j = 0; j < dtByProv.length; j++) {
365
				datatypes[k] = dtByProv[j];
366
				k++;
367
			}
368
		}
369
		return datatypes;
370
	}
371
	
372
	/*
373
	 * (non-Javadoc)
374
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getURIByProvider()
375
	 */
376
	public String[] getURIByProvider() {
377
		providerList = getParameters().getProviders();
378
		String[] uris = new String[providerList.size()];
379
		for (int i = 0; i < uris.length; i++) {
380
			uris[i] = providerList.get(i).getURIOfFirstProvider();
381
		}
382
		return uris;
383
	}
384
	
385
	/*
386
	 * (non-Javadoc)
387
	 * @see org.gvsig.raster.impl.provider.RasterProvider#getBandPositionByProvider(int)
388
	 */
389
	public int getBandPositionByProvider(int band) {
390
		return getSubBandByBandNumber(band)[1];
391
	}
392
	
393
	/*
394
	 * (non-Javadoc)
395
	 * @see org.gvsig.raster.impl.provider.RasterProvider#getURIOfFirstProvider()
396
	 */
397
	public String getURIOfFirstProvider() {
398
		providerList = getParameters().getProviders();
399
		return providerList.get(0).getURIOfFirstProvider();
400
	}
401
	
402
	
403
	/*
404
	 * (non-Javadoc)
405
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getExtent()
406
	 */
407
	public Extent getExtent() {
408
		providerList = getParameters().getProviders();
409
		if(providerList != null && providerList.size() > 0)
410
			return providerList.get(0).getExtent();
411
		return null;
412
	}
413
	
414
	/*
415
	 * (non-Javadoc)
416
	 * @see org.gvsig.fmap.dal.coverage.dataset.RasterDataSet#getAffineTransform()
417
	 */
418
	public AffineTransform getAffineTransform() {
419
		providerList = getParameters().getProviders();
420
		return providerList.get(0).getAffineTransform();
421
	}
422
	
423
	/*
424
	 * (non-Javadoc)
425
	 * @see org.gvsig.fmap.dal.coverage.dataset.RasterDataSet#setAffineTransform(java.awt.geom.AffineTransform)
426
	 */
427
	public void setAffineTransform(AffineTransform t) {
428
		providerList = getParameters().getProviders();
429
		for (int i = 0; i < providerList.size(); i++) {
430
			providerList.get(i).setAffineTransform(t);
431
		}
432
	}
433
	
434
	/*
435
	 * (non-Javadoc)
436
	 * @see org.gvsig.raster.impl.provider.RasterProvider#getInternalProviderCount()
437
	 */
438
	public int getInternalProviderCount() {
439
		return providerList.size();
440
	}
441
	
442
	/*
443
	 * (non-Javadoc)
444
	 * @see org.gvsig.raster.impl.provider.RasterProvider#getInternalProvider(int)
445
	 */
446
	public RasterProvider getInternalProvider(int i) {
447
		return providerList.get(i);
448
	}
449
	
450
	/*
451
	 * (non-Javadoc)
452
	 * @see org.gvsig.raster.impl.provider.RasterProvider#getBandCountByProvider()
453
	 */
454
	public int[] getBandCountByProvider() {
455
		providerList = getParameters().getProviders();
456
		int[] bc = new int[providerList.size()];
457
		for (int i = 0; i < bc.length; i++) {
458
			bc[i] = providerList.get(i).getBandCount();
459
		}
460
		return bc;
461
	}
462
	
463
	/*
464
	 * (non-Javadoc)
465
	 * @see org.gvsig.raster.impl.provider.RasterProvider#getFileSizeByProvider()
466
	 */
467
	public long[] getFileSizeByProvider() {
468
		providerList = getParameters().getProviders();
469
		long[] fs = new long[providerList.size()];
470
		for (int i = 0; i < fs.length; i++) {
471
			fs[i] = ((DefaultRasterProvider)providerList.get(i)).getFileSize();
472
		}
473
		return fs;
474
	}
475
	
476
	/*
477
	 * (non-Javadoc)
478
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#rasterToWorld(java.awt.geom.Point2D)
479
	 */
480
	public Point2D rasterToWorld(Point2D pt) {
481
		providerList = getParameters().getProviders();
482
		return providerList.get(0).rasterToWorld(pt);
483
	}
484

  
485
	/*
486
	 * (non-Javadoc)
487
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#worldToRaster(java.awt.geom.Point2D)
488
	 */
489
	public Point2D worldToRaster(Point2D pt) {
490
		providerList = getParameters().getProviders();
491
		return providerList.get(0).worldToRaster(pt);
492
	}
493
	
494
	/*
495
	 * (non-Javadoc)
496
	 * @see org.gvsig.raster.impl.provider.RasterProvider#isInside(java.awt.geom.Point2D)
497
	 */
498
	public boolean isInside(Point2D p){
499
		providerList = getParameters().getProviders();
500
		return providerList.get(0).isInside(p);
501
	}
502
	
503
	/*
504
	 * (non-Javadoc)
505
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getCellSize()
506
	 */
507
	public double getCellSize() {
508
		providerList = getParameters().getProviders();
509
		return providerList.get(0).getCellSize();
510
	}
511
	
512
	/*
513
	 * (non-Javadoc)
514
	 * @see org.gvsig.raster.impl.dataset.RasterProvider#getStatistics()
515
	 */
516
	public Statistics getStatistics() {
517
		if(stats == null || (stats instanceof MultiProviderStatistics && 
518
				((MultiProviderStatistics)stats).getNumberOfProviders() != providerList.size())) {
519
			providerList = getParameters().getProviders();
520
			stats = new MultiProviderStatistics(providerList);
521
		}
522
		
523
		return stats;
524
	}
525
	
526
	/*
527
	 * (non-Javadoc)
528
	 * @see org.gvsig.fmap.dal.coverage.store.props.Histogramable#getHistogramComputer()
529
	 */
530
	public HistogramComputer getHistogramComputer() {
531
		if(histogram == null || 
532
			(histogram instanceof MultiProviderHistogramComputer && 
533
			((MultiProviderHistogramComputer)histogram).getNumberOfProviders() != providerList.size())) {
534
			histogram = new MultiProviderHistogramComputer(this);
535
		}
536
		
537
		return histogram;
538
	}
539
	
540
	/**
541
	 * A multiband provider doesn't have a color table because this will have
542
	 * more than one band.
543
	 */
544
	public ColorTable getColorTable() {
545
		return null;
546
	}
547
	
548
	/*
549
	 * (non-Javadoc)
550
	 * @see org.gvsig.raster.impl.provider.RasterProvider#isOpen()
551
	 */
552
	public boolean isOpen() {
553
		return open;
554
	}
555

  
556
	/*
557
	 * (non-Javadoc)
558
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#close()
559
	 */
560
	public void close() {
561
	}
562

  
563
	/*
564
	 * (non-Javadoc)
565
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#translateFileName(java.lang.String)
566
	 */
567
	public String translateFileName(String fileName) {
568
		return fileName;
569
	}
570

  
571
	/**
572
	 * Asigna el extent de la vista actual. existe un fichero .rmf debemos hacer una transformaci�n
573
	 * de la vista asignada ya que la petici�n viene en coordenadas del fichero .rmf y la vista (v)
574
	 * ha de estar en coordenadas del fichero.
575
	 */
576
	public void setView(Extent e) {
577
		viewRequest = new ExtentImpl(e);
578
	}
579

  
580
	/*
581
	 * (non-Javadoc)
582
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getView()
583
	 */
584
	public Extent getView() {
585
		return viewRequest;
586
	}
587

  
588
	/*
589
	 * (non-Javadoc)
590
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWidth()
591
	 */
592
	public double getWidth() {
593
		providerList = getParameters().getProviders();
594
		if(providerList != null && providerList.size() > 0) {
595
			return providerList.get(0).getWidth();
596
		}
597
		return 0;
598
	}
599

  
600
	/*
601
	 * (non-Javadoc)
602
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getHeight()
603
	 */
604
	public double getHeight() {
605
		providerList = getParameters().getProviders();
606
		if(providerList != null && providerList.size() > 0) {
607
			return providerList.get(0).getHeight();
608
		}
609
		return 0;
610

  
611
	}
612

  
613
	/*
614
	 *  (non-Javadoc)
615
	 * @see org.gvsig.raster.dataset.RasterDataset#readBlock(int, int, double)
616
	 */
617
	public Object readBlock(int pos, int blockHeight, double scale)
618
		throws InvalidSetViewException, FileNotOpenException, RasterDriverException, ProcessInterruptedException {
619
		providerList = getParameters().getProviders();
620
		return null;
621
	}
622

  
623
	/**
624
	 * Gets a number of provider and the band of this provider 
625
	 * @param band
626
	 * @return
627
	 */
628
	private int[] getSubBandByBandNumber(int band) {
629
		providerList = getParameters().getProviders();
630
		int[] res = new int[2];
631
		int acum = 0;
632
		for (int i = 0; i < providerList.size(); i++) {
633
			acum += providerList.get(i).getBandCount();
634
			if(acum > band) {
635
				res[0] = i;
636
				int aux = (acum - providerList.get(i).getBandCount());
637
				res[1] = band - aux;
638
				return res;
639
			}
640
		}
641
		return res;
642
	}
643
	
644
	/* 
645
	 * (non-Javadoc)
646
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getData(int, int, int)
647
	 */
648
	public Object getData(int x, int y, int band)throws InvalidSetViewException, FileNotOpenException, RasterDriverException {
649
		int[] sub = getSubBandByBandNumber(band);
650
		RasterProvider prov = providerList.get(sub[0]);
651
		return prov.getData(x, y, sub[1]);
652
	}
653

  
654
	/*
655
	 * (non-Javadoc)
656
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.raster.cache.tile.provider.TileListener)
657
	 */
658
	public void getWindow(Extent ex, int bufWidth, int bufHeight, 
659
			BandList bandList, TileListener listener, TaskStatus status) throws ProcessInterruptedException, RasterDriverException {
660
	}
661

  
662
	/*
663
	 * (non-Javadoc)
664
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(org.gvsig.fmap.dal.coverage.datastruct.Extent, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer)
665
	 */
666
	public Buffer getWindow(Extent extent, BandList bandList, Buffer rasterBuf, TaskStatus status) 
667
		throws ProcessInterruptedException, RasterDriverException {
668
		providerList = getParameters().getProviders();
669
		
670
		DefaultRasterQuery q = (DefaultRasterQuery)RasterLocator.getManager().createQuery();
671
		q.setAreaOfInterest(extent);
672
		q.setBandList(bandList);
673
		q.setBuffer(rasterBuf);
674
		
675
		for (int i = 0; i < providerList.size(); i++) {
676
			rasterBuf = ((DefaultRasterProvider)providerList.get(i)).getDataSet(q);
677
		}
678
		return rasterBuf;
679
	}
680
	
681
	
682

  
683
	/*
684
	 * (non-Javadoc)
685
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(double, double, double, double, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer, boolean)
686
	 */
687
	public Buffer getWindow(double ulx, double uly, double w, double h, 
688
			BandList bandList, Buffer rasterBuf, boolean adjustToExtent, TaskStatus status) throws ProcessInterruptedException, RasterDriverException {
689
		providerList = getParameters().getProviders();
690
		
691
		DefaultRasterQuery q = (DefaultRasterQuery)RasterLocator.getManager().createQuery();
692
		q.setAreaOfInterest(ulx, uly, w, h);
693
		q.setBandList(bandList);
694
		q.setBuffer(rasterBuf);
695
		q.setAdjustToExtent(adjustToExtent);
696
		
697
		for (int i = 0; i < providerList.size(); i++) {
698
			rasterBuf = ((DefaultRasterProvider)providerList.get(i)).getDataSet(q);
699
		}
700
		return rasterBuf;
701
	}
702

  
703
	/*
704
	 * (non-Javadoc)
705
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(double, double, double, double, int, int, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer, boolean)
706
	 */
707
	public Buffer getWindow(Extent extent, int bufWidth, int bufHeight, 
708
			BandList bandList, Buffer rasterBuf, boolean adjustToExtent, TaskStatus status) throws ProcessInterruptedException, RasterDriverException {
709
		providerList = getParameters().getProviders();
710
		
711
		DefaultRasterQuery q = (DefaultRasterQuery)RasterLocator.getManager().createQuery();
712
		q.setAreaOfInterest(extent, bufWidth, bufHeight);
713
		q.setBuffer(rasterBuf);
714
		q.setAdjustToExtent(adjustToExtent);
715
		
716
		for (int i = 0; i < providerList.size(); i++) {
717
			BandList bandListByFile = createBandListByProvider(bandList, providerList.get(i));
718
			if(bandListByFile != null) {
719
				q.setBandList(bandListByFile);
720
				rasterBuf = ((DefaultRasterProvider)providerList.get(i)).getDataSet(q);
721
			}
722
		}
723
		return rasterBuf;
724
	}
725
	
726
	/**
727
	 * Creates a <code>BandList</code> for each provider of this <code>MultiFileProvider</code>.
728
	 * When a request is made, the <code>BandList</code> is global for all files. A specific 
729
	 * <code>BandList</code> has to be built for each provider. 
730
	 * @param globalBandList
731
	 * @param provider
732
	 * @return
733
	 */
734
	private BandList createBandListByProvider(BandList globalBandList, RasterProvider provider) {
735
		if(provider.isTiled()) { 
736
			//Si los proveedores que hay por debajo son tileados estos crear?n su propio buffer para escribir
737
			//cada tile. Por ello no usar? el buffer que viene del store. Esto quiere decir que el BandList ha
738
			//de ser distinto para que escriba bien en su buffer
739
			
740
			//TODO: De momento no se permiten MultiFiles con proveedores tileados. Esto es porque
741
			//los tiles crean su propio buffer y no escriben en el buffer creado en el Store
742

  
743
		} else {
744
			BandList bandListByFile = new BandListImpl();
745
			for (int i = 0; i < provider.getBandCount(); i++) {
746
				try {
747
					bandListByFile.addBand(new DatasetBandImpl(provider.getURI(), i, provider.getDataType()[0], provider.getBandCount()));
748
				} catch (BandNotFoundInListException e1) {
749
				}
750
			}
751

  
752
			boolean areThereBandsToDraw = false;
753
			for (int i = 0; i < provider.getBandCount(); i++) {
754
				int[] bandsToDrawByProviderBand = globalBandList.getBufferBandToDraw(provider.getURI(), i);
755
				if(bandsToDrawByProviderBand != null) {
756
					areThereBandsToDraw = true;
757
					for (int j = 0; j < bandsToDrawByProviderBand.length; j++) {
758
						bandListByFile.getBand(i).addPositionToDrawInBuffer(bandsToDrawByProviderBand[j]);				
759
					}
760
				}
761
			}
762

  
763
			if(areThereBandsToDraw)
764
				return bandListByFile;
765
		}
766
		return null;
767
	}
768

  
769
	/*
770
	 * (non-Javadoc)
771
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWindowRaster(int, int, int, int, int, int, org.gvsig.fmap.dal.coverage.datastruct.BandList, org.gvsig.fmap.dal.coverage.dataset.Buffer)
772
	 */
773
	public Buffer getWindow(int x, int y, int w, int h, 
774
			BandList bandList, Buffer rasterBuf, TaskStatus status) throws ProcessInterruptedException, RasterDriverException {
775
		providerList = getParameters().getProviders();
776
		DefaultRasterQuery q = (DefaultRasterQuery)RasterLocator.getManager().createQuery();
777
		q.setAreaOfInterest(x, y, w, h);
778
		q.setBandList(bandList);
779
		q.setBuffer(rasterBuf);
780
		for (int i = 0; i < providerList.size(); i++) {
781
			rasterBuf = ((DefaultRasterProvider)providerList.get(i)).getDataSet(q);
782
		}
783
		return rasterBuf;
784
	}
785

  
786
	/*
787
	 * (non-Javadoc)
788
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getBlockSize()
789
	 */
790
	public int getBlockSize() {
791
		return 0;
792
	}
793

  
794
	/*
795
	 * (non-Javadoc)
796
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getColorInterpretation()
797
	 */
798
	public ColorInterpretation getColorInterpretation() {
799
		if(super.getColorInterpretation() == null) {
800
			String[] cis = new String[getBandCount()];
801
			for (int i = 0; i < cis.length; i++) {
802
				if(i == 0)
803
					cis[i] = ColorInterpretation.GRAY_BAND;
804
				else
805
					cis[i] = ColorInterpretation.UNDEF_BAND;
806
			}
807
			setColorInterpretation(new DataStoreColorInterpretation(cis));
808
		}
809
		return super.getColorInterpretation();
810
	}
811

  
812
	/*
813
	 * (non-Javadoc)
814
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getTransparency()
815
	 */
816
	public DataStoreTransparency getTransparency() {
817
		if(fileTransparency == null)
818
			fileTransparency = new DataStoreTransparency();
819
		return fileTransparency;
820
	}
821

  
822
	/**
823
	 * Informa de si el driver ha supersampleado en el �ltimo dibujado. Es el driver el que colocar�
824
	 * el valor de esta variable cada vez que dibuja.
825
	 * @return true si se ha supersampleado y false si no se ha hecho.
826
	 */
827
	public boolean isSupersampling() {
828
		return false;
829
	}
830

  
831
	/*
832
	 * (non-Javadoc)
833
	 * @see org.gvsig.raster.impl.provider.RasterProvider#getOverviewCount(int)
834
	 */
835
	public int getOverviewCount(int band) throws BandAccessException, RasterDriverException {
836
		if(band >= getBandCount())
837
			throw new BandAccessException("Wrong band");
838
		return 0;
839
	}
840

  
841
	/*
842
	 * (non-Javadoc)
843
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getOverviewWidth(int, int)
844
	 */
845
	public int getOverviewWidth(int band, int overview) throws BandAccessException, RasterDriverException {
846
		if (band >= getBandCount())
847
			throw new BandAccessException("Wrong band");
848
		return 0;
849
	}
850

  
851
	/*
852
	 * (non-Javadoc)
853
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getOverviewHeight(int, int)
854
	 */
855
	public int getOverviewHeight(int band, int overview) throws BandAccessException, RasterDriverException {
856
		if (band >= getBandCount())
857
			throw new BandAccessException("Wrong band");
858
		return 0;
859
	}
860
	
861
	/*
862
	 * (non-Javadoc)
863
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#isMultiFile()
864
	 */
865
	public boolean isMultiFile() {
866
		return true;
867
	}
868

  
869
	/*
870
	 * (non-Javadoc)
871
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#isOverviewsSupported()
872
	 */
873
	public boolean isOverviewsSupported() {
874
		return true;
875
	}
876

  
877
	/*
878
	 * (non-Javadoc)
879
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#isReproyectable()
880
	 */
881
	public boolean isReproyectable() {
882
		return true;
883
	}
884

  
885
	/*
886
	 * (non-Javadoc)
887
	 * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getName()
888
	 */
889
	public String getName() {
890
		return NAME;
891
	}
892
	
893
	/*
894
	 * (non-Javadoc)
895
	 * @see org.gvsig.raster.impl.provider.RasterProvider#setStatus(org.gvsig.raster.impl.provider.RasterProvider)
896
	 */
897
	public void setStatus(RasterProvider provider) {
898
		if(provider instanceof MultiFileProvider) {
899
			//Not implemented yet
900
		}
901
	}
902
	
903
	/*
904
	 * (non-Javadoc)
905
	 * @see org.gvsig.raster.impl.provider.RasterProvider#isTimeSupported()
906
	 */
907
	public boolean isTimeSupported() {
908
		return true;
909
	}
910
	
911
	/*
912
	 * (non-Javadoc)
913
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getURIByBand(int)
914
	 */
915
	public String getURIByBand(int band) {
916
		int[] sub = getSubBandByBandNumber(band);
917
		RasterProvider prov = providerList.get(sub[0]);
918
		return prov.getURIOfFirstProvider();
919
	}
920
	
921
	/*
922
	 * (non-Javadoc)
923
	 * @see org.gvsig.raster.impl.provider.RasterProvider#addFile(java.lang.String)
924
	 */
925
	public void addFile(String file) throws InvalidSourceException {
926
		ProviderServices provServ = RasterLocator.getManager().getProviderServices();
927
		DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
928
			
929
//		if(providerList.size() > 0 && providerList.get(0).isTiled()) {
930
//			//Comentado hasta que se puedan incorporar fuentes tileadas a aun MultiFile
931
//			//en su lugar se sustituye el primer proveedor tileado por uno sin tilear
932
//			
933
//			RasterDataParameters storeParameters = provServ.createParametersForTiledFiled(file);
934
//			
935
//			try {
936
//				RasterProvider newFileProv = (RasterProvider)dataManager.createProvider(storeServices, storeParameters);
937
//				if(checkNewProvider(newFileProv)) {
938
//					getParameters().addProvider(newFileProv);
939
//				}
940
//			} catch (InitializeException e) {
941
//				throw new InvalidSourceException("", e);
942
//			} catch (ProviderNotRegisteredException e) {
943
//				throw new InvalidSourceException("", e);
944
//			}
945
//		} 
946
		
947
		setFirstProviderToNotTiled();
948
		
949
		List<RasterDataParameters> storeParametersList = provServ.createParametersList(file);	
950

  
951
		for (int j = 0; j < storeParametersList.size(); j++) {
952
			RasterProvider newFileProv;
953
			try {
954
				newFileProv = (RasterProvider)dataManager.createProvider(storeServices, storeParametersList.get(j));
955
				if(!newFileProv.isTiled() && checkNewProvider(newFileProv)) {
956
					getParameters().addProvider(newFileProv);
957
				}
958
			} catch (InitializeException e) {
959
				throw new InvalidSourceException("", e);
960
			} catch (ProviderNotRegisteredException e) {
961
				throw new InvalidSourceException("", e);
962
			}
963
		}
964
	}
965
	
966
	private void setFirstProviderToNotTiled() throws InvalidSourceException {
967
		if(providerList == null || providerList.size() <= 0 || !providerList.get(0).isTiled()) 
968
			return;
969
		
970
		//Si el primer proveedor es tileado se cambia a no tileado
971
		DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
972
		ProviderServices provServ = RasterLocator.getManager().getProviderServices();
973
		
974
		RasterDataParameters firstDataParameters = providerList.get(0).getDataParameters();
975
		String uri = firstDataParameters.getURI();
976
		
977
		List<RasterDataParameters> storeParametersList = provServ.createParametersList(uri);	
978

  
979
		for (int j = 0; j < storeParametersList.size(); j++) {
980
			RasterProvider newFileProv;
981
			try {
982
				newFileProv = (RasterProvider)dataManager.createProvider(storeServices, storeParametersList.get(j));
983
				if(!newFileProv.isTiled() && checkNewProvider(newFileProv)) {
984
					getParameters().setFirstProvider(newFileProv);
985
				}
986
			} catch (InitializeException e) {
987
				throw new InvalidSourceException("Error replacing the first provider", e);
988
			} catch (ProviderNotRegisteredException e) {
989
				throw new InvalidSourceException("Error replacing the first provider", e);
990
			}
991
		}
992
	}
993
	
994
	/*
995
	 * (non-Javadoc)
996
	 * @see org.gvsig.raster.impl.provider.RasterProvider#removeFile(java.lang.String)
997
	 */
998
	public void removeFile(String file) {
999
		getParameters().removeProvider(file);
1000
	}
1001
	
1002
	/*
1003
	 * (non-Javadoc)
1004
	 * @see org.gvsig.raster.impl.provider.RasterProvider#getTileServer()
1005
	 */
1006
	public TileServer getTileServer() {
1007
		if(tileServer == null)
1008
			tileServer = new FileTileServer(this);
1009
		return tileServer;
1010
	}
1011
}
0 1012

  
org.gvsig.raster.tools/trunk/org.gvsig.raster.tools/org.gvsig.raster.tools.multifile.io_deprecated/src/main/java/org/gvsig/raster/tools/multifile/io/MultiFileServerExplorerParameters.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

  
23
/*
24
* AUTHORS (In addition to CIT):
25
* 2009 IVER T.I   {{Task}}
26
*/
27

  
28
package org.gvsig.raster.tools.multifile.io;
29

  
30
import org.gvsig.fmap.dal.DataServerExplorerParameters;
31
import org.gvsig.fmap.dal.spi.AbstractDataParameters;
32
import org.gvsig.tools.ToolsLocator;
33
import org.gvsig.tools.dynobject.DelegatedDynObject;
34
import org.gvsig.tools.dynobject.DynClass;
35
import org.gvsig.tools.dynobject.DynObjectManager;
36

  
37
/**
38
 * Parameters for the Multifile explorer provider
39
 * @author Nacho Brodin (nachobrodin@gmail.com)
40
 */
41
public class MultiFileServerExplorerParameters extends AbstractDataParameters implements DataServerExplorerParameters {
42
	public static final String     DYNCLASS_NAME       = "MultifileServerExplorerParameters";
43
	protected static DynClass      DYNCLASS            = null;
44
	private DelegatedDynObject     delegatedDynObject  = null;
45
	
46
	
47
	public MultiFileServerExplorerParameters() {
48
		super();
49
		initialize();
50
	}
51

  
52
	protected void initialize() {
53
		this.delegatedDynObject = (DelegatedDynObject) ToolsLocator
54
				.getDynObjectManager().createDynObject(
55
						DYNCLASS);
56
	}
57
	
58
	public static void registerDynClass() {
59
		DynObjectManager dynman = ToolsLocator.getDynObjectManager();
60
		DynClass dynClass;
61
		
62
		if(dynman == null)
63
			return;
64
		
65
		if (DYNCLASS == null) {
66
			dynClass = dynman.add(DYNCLASS_NAME);
67

  
68
			DYNCLASS = dynClass;
69
		}
70

  
71
	}
72
	
73
	protected DelegatedDynObject getDelegatedDynObject() {
74
		return delegatedDynObject;
75
	}
76

  
77
	/*
78
	 * (non-Javadoc)
79
	 * @see org.gvsig.fmap.dal.DataStoreParameters#getDataStoreName()
80
	 */
81
	public String getDataStoreName() {
82
		return MultiFileProvider.NAME;
83
	}
84
	
85
	/*
86
	 * (non-Javadoc)
87
	 * @see org.gvsig.fmap.dal.DataStoreParameters#getDescription()
88
	 */
89
	public String getDescription() {
90
		return MultiFileProvider.DESCRIPTION;
91
	}
92
	
93
	/*
94
	 * (non-Javadoc)
95
	 * @see org.gvsig.fmap.dal.DataServerExplorerParameters#getExplorerName()
96
	 */
97
	public String getExplorerName() {
98
		return MultiFileProvider.NAME;
99
	}
100
}
0 101

  
org.gvsig.raster.tools/trunk/org.gvsig.raster.tools/org.gvsig.raster.tools.multifile.io_deprecated/src/main/java/org/gvsig/raster/tools/multifile/io/MultiFileDataParameters.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

  
23
/*
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff