Revision 2202

View differences:

org.gvsig.raster.multifile/tags/tagdate_11102013_11_26/org.gvsig.raster.multifile/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3
	<modelVersion>4.0.0</modelVersion>
4
	<artifactId>org.gvsig.raster.multifile</artifactId>
5
	<packaging>pom</packaging>
6
	<version>2.1.0-SNAPSHOT</version>
7
	<name>Raster multifile support for gvSIG</name>
8
	<description>Raster multifile support for gvSIG</description>
9
	<inceptionYear>2013</inceptionYear>
10
	<parent>
11
        <groupId>org.gvsig</groupId>
12
        <artifactId>org.gvsig.desktop</artifactId>
13
        <version>2.0.16-SNAPSHOT</version>
14
    </parent>
15
    <scm>
16
        <connection>scm:svn:https://devel.gvsig.org/svn/gvsig-raster/org.gvsig.raster.multifile/trunk/org.gvsig.raster.multifile</connection>
17
        <developerConnection>scm:svn:https://devel.gvsig.org/svn/gvsig-raster/org.gvsig.raster.multifile/trunk/org.gvsig.raster.multifile</developerConnection>
18
        <url>https://devel.gvsig.org/redmine/projects/gvsig-raster/repository/show/org.gvsig.raster.multifile/trunk/org.gvsig.raster.multifile</url>
19
    </scm>
20
	<developers>
21
		<developer>
22
			<id>nbrodin</id>
23
			<name>Nacho Brodin</name>
24
			<email>nachobrodin@gmail.com</email>
25
			<roles>
26
				<role>Architect</role>
27
				<role>Developer</role>
28
			</roles>
29
		</developer>
30
	</developers>
31
	<dependencyManagement>
32
    	<dependencies>
33
    		<dependency>
34
            	<groupId>org.gvsig</groupId>
35
            	<artifactId>org.gvsig.raster.mainplugin</artifactId>
36
            	<version>2.1.0-SNAPSHOT</version>
37
        	</dependency>
38
        	<dependency>
39
            	<groupId>org.gvsig</groupId>
40
            	<artifactId>org.gvsig.raster.algorithm</artifactId>
41
            	<version>2.1.0-SNAPSHOT</version>
42
        	</dependency>
43
	        <dependency>
44
	            <groupId>org.gvsig</groupId>
45
	            <artifactId>org.gvsig.raster.multifile.io</artifactId>
46
	            <version>2.1.0-SNAPSHOT</version>
47
	        </dependency>
48
	        <dependency>
49
				<groupId>org.gvsig</groupId>
50
				<artifactId>org.gvsig.raster.lib.api</artifactId>
51
				<version>2.1.0-SNAPSHOT</version>
52
			</dependency>
53
	        <dependency>
54
	            <groupId>org.gvsig</groupId>
55
	            <artifactId>org.gvsig.raster.lib.impl</artifactId>
56
	            <version>2.1.0-SNAPSHOT</version>
57
	        </dependency>
58
	        <dependency>
59
				<groupId>org.gvsig</groupId>
60
				<artifactId>org.gvsig.raster.swing.api</artifactId>
61
				<version>2.1.0-SNAPSHOT</version>
62
			</dependency>
63
	        <dependency>
64
	            <groupId>org.gvsig</groupId>
65
	            <artifactId>org.gvsig.raster.swing.impl</artifactId>
66
	            <version>2.1.0-SNAPSHOT</version>
67
	        </dependency>
68
	        <dependency>
69
                <groupId>org.gvsig</groupId>
70
                <artifactId>org.gvsig.raster.cache.lib.api</artifactId>
71
                <version>2.1.0-SNAPSHOT</version>
72
        	</dependency>
73
             <dependency>
74
                <groupId>org.gvsig</groupId>
75
                <artifactId>org.gvsig.raster.cache.lib.impl</artifactId>
76
                <version>2.1.0-SNAPSHOT</version>
77
        	</dependency>
78
        	<dependency>
79
				<groupId>org.gvsig</groupId>
80
				<artifactId>org.gvsig.raster.fmap</artifactId>
81
				<version>2.1.0-SNAPSHOT</version>
82
			</dependency>
83
    	</dependencies>
84
    </dependencyManagement>
85
	<build>
86
        <plugins>
87
            <plugin>
88
                <groupId>org.apache.maven.plugins</groupId>
89
                <artifactId>maven-release-plugin</artifactId>
90
                <configuration>
91
                    <tagBase>https://devel.gvsig.org/svn/gvsig-raster/org.gvsig.raster.multifile/tags/</tagBase>
92
                    <goals>deploy</goals>
93
                </configuration>
94
            </plugin>
95
        </plugins>
96
    </build>
97
	<modules>
98
		<module>org.gvsig.raster.multifile.io</module>
99
		<module>org.gvsig.raster.multifile.app.multifileclient</module>
100
	</modules>
101
</project>
0 102

  
org.gvsig.raster.multifile/tags/tagdate_11102013_11_26/org.gvsig.raster.multifile/org.gvsig.raster.multifile.io/src/main/resources/multifileformat.dtd
1
<!DOCTYPE TimeSeriesFormat [
2
<!ELEMENT TimeSeriesFormat (Name,URIs)>
3
<!ELEMENT Name (#PCDATA)>
4
<!ELEMENT URIs (URI)+>
5

  
6
<!ELEMENT URI (#PCDATA)>
7
]>
org.gvsig.raster.multifile/tags/tagdate_11102013_11_26/org.gvsig.raster.multifile/org.gvsig.raster.multifile.io/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.raster.multifile.io.DefaultMultiFileIOLibrary
org.gvsig.raster.multifile/tags/tagdate_11102013_11_26/org.gvsig.raster.multifile/org.gvsig.raster.multifile.io/src/main/java/org/gvsig/raster/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.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
	public String getDataStoreProviderName() {
69
		return MultiFileProvider.NAME;
70
	}
71
	
72
	public String getDescription() {
73
		return MultiFileProvider.DESCRIPTION;
74
	}
75
	
76
	public DataStoreParameters getStoreParameters() {
77
		DataManager manager = DALLocator.getDataManager();
78
		try {
79
			return  manager.createStoreParameters(this.getDataStoreProviderName());
80
		} catch (InitializeException e) {
81
			e.printStackTrace();
82
		} catch (ProviderNotRegisteredException e) {
83
			e.printStackTrace();
84
		}
85
		return null;
86
	}
87

  
88
	@SuppressWarnings("unchecked")
89
	public List getDataStoreProviderNames() {
90
		return null;
91
	}
92

  
93
	public String getProviderName() {
94
		return MultiFileProvider.NAME;
95
	}
96

  
97
	public DataServerExplorerProviderServices getServerExplorerProviderServices() {
98
		return null;
99
	}
100

  
101
	public boolean canCreate() {
102
		return false;
103
	}
104

  
105
	public boolean canCreate(NewDataStoreParameters parameters) {
106
		return false;
107
	}
108

  
109
	public void create(NewDataStoreParameters parameters, boolean overwrite)
110
			throws CreateException {
111
		throw new UnsupportedOperationException();
112
	}
113

  
114
	public NewDataStoreParameters getCreateParameters() throws DataException {
115
		return null;
116
	}
117

  
118
	public void initialize(
119
			FilesystemServerExplorerProviderServices serverExplorer) {
120
	}
121

  
122
	public boolean accept(File pathname) {
123
		return RasterLocator.getManager().getProviderServices().isExtensionSupported(
124
				pathname.getAbsolutePath(), 
125
				MultiFileProvider.class);
126
	}
127

  
128
	public void remove(DataStoreParameters parameters) throws RemoveException {
129
		throw new UnsupportedOperationException();
130
	}
131

  
132
	public boolean add(String provider, NewDataStoreParameters parameters,
133
			boolean overwrite) throws DataException {
134
		return false;
135
	}
136

  
137
	public boolean canAdd() {
138
		return false;
139
	}
140

  
141
	public boolean canAdd(String storeName) throws DataException {
142
		return false;
143
	}
144

  
145
	public NewDataStoreParameters getAddParameters(String storeName)
146
			throws DataException {
147
		return null;
148
	}
149
	
150
	public DataStoreParameters getParameters(File file) throws DataException {
151
		DataManager manager = DALLocator.getDataManager();
152
		AbstractRasterFileDataParameters params = (AbstractRasterFileDataParameters) manager
153
				.createStoreParameters(this.getDataStoreProviderName());
154
		params.setFile(file);
155
		return params;
156
	}
157

  
158
	public DataServerExplorerParameters getParameters() {
159
		return null;
160
	}
161

  
162
	@SuppressWarnings("unchecked")
163
	public List list() throws DataException {
164
		return null;
165
	}
166

  
167
	@SuppressWarnings("unchecked")
168
	public List list(int mode) throws DataException {
169
		return null;
170
	}
171

  
172
	public void dispose() {
173
	}
174
	
175
	public int getMode() {
176
		return DataServerExplorer.MODE_RASTER;
177
	}
178

  
179
}
0 180

  
org.gvsig.raster.multifile/tags/tagdate_11102013_11_26/org.gvsig.raster.multifile/org.gvsig.raster.multifile.io/src/main/java/org/gvsig/raster/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.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
	public static String saveMultiFileFormat(String fileName, String path, ArrayList<File> uriList) throws IOException {
87
		path = path + File.separator + fileName + ".mff";
88
		
89
		MultiFileFormat format = new MultiFileFormat();
90
		for (int i = 0; i < uriList.size(); i++) {
91
			format.addFile(uriList.get(i));
92
		}
93
		format.setName(fileName);
94
		
95
		format.write(path);
96
		return path;
97
	}
98
	
99
	/**
100
	 * Writes a MultiFileFormat to disk
101
	 * @param file
102
	 * @throws IOException
103
	 */
104
	public void write(String fileName) throws IOException {
105
		MultiFileFormatSerializer.write(this, fileName);
106
	}
107
}
0 108

  
org.gvsig.raster.multifile/tags/tagdate_11102013_11_26/org.gvsig.raster.multifile/org.gvsig.raster.multifile.io/src/main/java/org/gvsig/raster/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.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.List;
30

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

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

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

  
194
		open = true;
195
	}
196
	
197
	/**
198
	 * Open from a .mff file. 
199
	 * This method loads all providers and adds these to the parameters
200
	 * @throws OpenException
201
	 */
202
	private void openFromMff() throws OpenException {
203
		if(getParameters().getURI() != null && new File(getParameters().getURI()).exists()) {
204
			boolean loadedProviders = true;
205
			if(getParameters().getProviders() != null) {
206
				//solo se considera que est�n todos los providers cargados si existen y est�n open,
207
				//sino se leeran de disco
208
				for (int i = 0; i < getParameters().getProviders().size(); i++) {
209
					if(!getParameters().getProviders().get(i).isOpen()) 
210
						loadedProviders = false;
211
				}
212
			} else
213
				loadedProviders = false;
214
			
215
			if(loadedProviders)
216
				return;
217
			
218
			try {
219
				if(getParameters().getProviders() != null)
220
					getParameters().getProviders().clear();
221
				MultiFileFormat multiFileFormat = new MultiFileFormat();
222
				multiFileFormat = MultiFileFormatSerializer.read(multiFileFormat, getParameters().getURI());
223
				for (int i = 0; i < multiFileFormat.getNumberOfFiles(); i++) {
224
					try {
225
						File file = new File(multiFileFormat.getPathToFile(i));
226
						if(file.exists()) {
227
							RasterProvider prov = loadProvider(multiFileFormat.getPathToFile(i), storeServices);
228
							getParameters().addProvider(prov);
229
						}
230
					} catch (ProviderNotRegisteredException e) {
231
						throw new OpenException("A provider can't be loaded", e);
232
					} catch (InitializeException e) {
233
						throw new OpenException("A provider can't be initialized", e);
234
					}
235
				}
236
			} catch (IOException e1) {
237
				throw new OpenException("File .mff can't be read", e1);
238
			} catch (ParsingException e1) {
239
				throw new OpenException("File .mff can't be parsed", e1);
240
			}
241
		} 
242
	}
243
	
244
	/**
245
	 * Loads the specific provider
246
	 * @param file
247
	 * @return
248
	 * @throws NotSupportedExtensionException
249
	 * @throws FileNotSupportedException 
250
	 */
251
	@SuppressWarnings("unchecked")
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
			List<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
	public RasterProvider load() {
334
		return this;
335
	}
336
	
337
	public int getBandCount() {
338
		providerList = getParameters().getProviders();
339
		int bandCount = 0;
340
		for (int i = 0; i < providerList.size(); i++) {
341
			bandCount += providerList.get(i).getBandCount();
342
		}
343
		return bandCount;
344
	}
345
	
346
	public int[] getDataType() {
347
		providerList = getParameters().getProviders();
348
		int[] datatypes = new int[getBandCount()];
349
		int k = 0;
350
		for (int i = 0; i < providerList.size(); i++) {
351
			int[] dtByProv = providerList.get(i).getDataType();
352
			for (int j = 0; j < dtByProv.length; j++) {
353
				datatypes[k] = dtByProv[j];
354
				k++;
355
			}
356
		}
357
		return datatypes;
358
	}
359
	
360
	public String[] getURIByProvider() {
361
		providerList = getParameters().getProviders();
362
		String[] uris = new String[providerList.size()];
363
		for (int i = 0; i < uris.length; i++) {
364
			uris[i] = providerList.get(i).getURIOfFirstProvider();
365
		}
366
		return uris;
367
	}
368
	
369
	public int getBandPositionByProvider(int band) {
370
		return getSubBandByBandNumber(band)[1];
371
	}
372
	
373
	public String getURIOfFirstProvider() {
374
		providerList = getParameters().getProviders();
375
		return providerList.get(0).getURIOfFirstProvider();
376
	}
377
	
378
	
379
	public Extent getExtent() {
380
		providerList = getParameters().getProviders();
381
		if(providerList != null && providerList.size() > 0)
382
			return providerList.get(0).getExtent();
383
		return null;
384
	}
385
	
386
	public AffineTransform getAffineTransform() {
387
		providerList = getParameters().getProviders();
388
		return providerList.get(0).getAffineTransform();
389
	}
390
	
391
	public void setAffineTransform(AffineTransform t) {
392
		providerList = getParameters().getProviders();
393
		for (int i = 0; i < providerList.size(); i++) {
394
			providerList.get(i).setAffineTransform(t);
395
		}
396
	}
397
	
398
	public int getInternalProviderCount() {
399
		return providerList.size();
400
	}
401
	
402
	public RasterProvider getInternalProvider(int i) {
403
		return providerList.get(i);
404
	}
405
	
406
	public int[] getBandCountByProvider() {
407
		providerList = getParameters().getProviders();
408
		int[] bc = new int[providerList.size()];
409
		for (int i = 0; i < bc.length; i++) {
410
			bc[i] = providerList.get(i).getBandCount();
411
		}
412
		return bc;
413
	}
414
	
415
	public long[] getFileSizeByProvider() {
416
		providerList = getParameters().getProviders();
417
		long[] fs = new long[providerList.size()];
418
		for (int i = 0; i < fs.length; i++) {
419
			fs[i] = ((DefaultRasterProvider)providerList.get(i)).getFileSize();
420
		}
421
		return fs;
422
	}
423
	
424
	public Point2D rasterToWorld(Point2D pt) {
425
		providerList = getParameters().getProviders();
426
		return providerList.get(0).rasterToWorld(pt);
427
	}
428

  
429
	public Point2D worldToRaster(Point2D pt) {
430
		providerList = getParameters().getProviders();
431
		return providerList.get(0).worldToRaster(pt);
432
	}
433
	
434
	public boolean isInside(Point2D p){
435
		providerList = getParameters().getProviders();
436
		return providerList.get(0).isInside(p);
437
	}
438
	
439
	public double getCellSize() {
440
		providerList = getParameters().getProviders();
441
		return providerList.get(0).getCellSize();
442
	}
443
	
444
	public Statistics getStatistics() {
445
		if(stats == null || (stats instanceof MultiProviderStatistics && 
446
				((MultiProviderStatistics)stats).getNumberOfProviders() != providerList.size())) {
447
			providerList = getParameters().getProviders();
448
			stats = new MultiProviderStatistics(providerList);
449
		}
450
		
451
		return stats;
452
	}
453
	
454
	public HistogramComputer getHistogramComputer() {
455
		if(histogram == null || 
456
			(histogram instanceof MultiProviderHistogramComputer && 
457
			((MultiProviderHistogramComputer)histogram).getNumberOfProviders() != providerList.size())) {
458
			histogram = new MultiProviderHistogramComputer(this);
459
		}
460
		
461
		return histogram;
462
	}
463
	
464
	/**
465
	 * A multiband provider doesn't have a color table because this will have
466
	 * more than one band.
467
	 */
468
	public ColorTable getColorTable() {
469
		return null;
470
	}
471
	
472
	/*
473
	 * (non-Javadoc)
474
	 * @see org.gvsig.raster.impl.provider.RasterProvider#isOpen()
475
	 */
476
	public boolean isOpen() {
477
		return open;
478
	}
479

  
480
	/*
481
	 * (non-Javadoc)
482
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#close()
483
	 */
484
	public void close() {
485
	}
486

  
487
	/*
488
	 * (non-Javadoc)
489
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#translateFileName(java.lang.String)
490
	 */
491
	public String translateFileName(String fileName) {
492
		return fileName;
493
	}
494

  
495
	/**
496
	 * Asigna el extent de la vista actual. existe un fichero .rmf debemos hacer una transformaci�n
497
	 * de la vista asignada ya que la petici�n viene en coordenadas del fichero .rmf y la vista (v)
498
	 * ha de estar en coordenadas del fichero.
499
	 */
500
	public void setView(Extent e) {
501
		viewRequest = new ExtentImpl(e);
502
	}
503

  
504
	/*
505
	 * (non-Javadoc)
506
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getView()
507
	 */
508
	public Extent getView() {
509
		return viewRequest;
510
	}
511

  
512
	/*
513
	 * (non-Javadoc)
514
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getWidth()
515
	 */
516
	public double getWidth() {
517
		providerList = getParameters().getProviders();
518
		if(providerList != null && providerList.size() > 0) {
519
			return providerList.get(0).getWidth();
520
		}
521
		return 0;
522
	}
523

  
524
	/*
525
	 * (non-Javadoc)
526
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getHeight()
527
	 */
528
	public double getHeight() {
529
		providerList = getParameters().getProviders();
530
		if(providerList != null && providerList.size() > 0) {
531
			return providerList.get(0).getHeight();
532
		}
533
		return 0;
534

  
535
	}
536

  
537
	/*
538
	 *  (non-Javadoc)
539
	 * @see org.gvsig.raster.dataset.RasterDataset#readBlock(int, int, double)
540
	 */
541
	public Object readBlock(int pos, int blockHeight, double scale)
542
		throws InvalidSetViewException, FileNotOpenException, RasterDriverException, ProcessInterruptedException {
543
		providerList = getParameters().getProviders();
544
		return null;
545
	}
546

  
547
	/**
548
	 * Gets a number of provider and the band of this provider 
549
	 * @param band
550
	 * @return
551
	 */
552
	private int[] getSubBandByBandNumber(int band) {
553
		providerList = getParameters().getProviders();
554
		int[] res = new int[2];
555
		int acum = 0;
556
		for (int i = 0; i < providerList.size(); i++) {
557
			acum += providerList.get(i).getBandCount();
558
			if(acum > band) {
559
				res[0] = i;
560
				int aux = (acum - providerList.get(i).getBandCount());
561
				res[1] = band - aux;
562
				return res;
563
			}
564
		}
565
		return res;
566
	}
567
	
568
	/* 
569
	 * (non-Javadoc)
570
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getData(int, int, int)
571
	 */
572
	public Object getData(int x, int y, int band)throws InvalidSetViewException, FileNotOpenException, RasterDriverException {
573
		int[] sub = getSubBandByBandNumber(band);
574
		RasterProvider prov = providerList.get(sub[0]);
575
		return prov.getData(x, y, sub[1]);
576
	}
577

  
578
	/*
579
	 * (non-Javadoc)
580
	 * @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)
581
	 */
582
	public void getWindow(Extent ex, int bufWidth, int bufHeight, 
583
			BandList bandList, TileListener listener, TaskStatus status) throws ProcessInterruptedException, RasterDriverException {
584
	}
585

  
586
	/*
587
	 * (non-Javadoc)
588
	 * @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)
589
	 */
590
	public Buffer getWindow(Extent extent, BandList bandList, Buffer rasterBuf, TaskStatus status) 
591
		throws ProcessInterruptedException, RasterDriverException {
592
		providerList = getParameters().getProviders();
593
		
594
		DefaultRasterQuery q = (DefaultRasterQuery)RasterLocator.getManager().createQuery();
595
		q.setAreaOfInterest(extent);
596
		q.setBandList(bandList);
597
		q.setBuffer(rasterBuf);
598
		
599
		for (int i = 0; i < providerList.size(); i++) {
600
			rasterBuf = ((DefaultRasterProvider)providerList.get(i)).getDataSet(q);
601
		}
602
		return rasterBuf;
603
	}
604
	
605
	
606

  
607
	/*
608
	 * (non-Javadoc)
609
	 * @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)
610
	 */
611
	public Buffer getWindow(double ulx, double uly, double w, double h, 
612
			BandList bandList, Buffer rasterBuf, boolean adjustToExtent, TaskStatus status) throws ProcessInterruptedException, RasterDriverException {
613
		providerList = getParameters().getProviders();
614
		
615
		DefaultRasterQuery q = (DefaultRasterQuery)RasterLocator.getManager().createQuery();
616
		q.setAreaOfInterest(ulx, uly, w, h);
617
		q.setBandList(bandList);
618
		q.setBuffer(rasterBuf);
619
		q.setAdjustToExtent(adjustToExtent);
620
		
621
		for (int i = 0; i < providerList.size(); i++) {
622
			rasterBuf = ((DefaultRasterProvider)providerList.get(i)).getDataSet(q);
623
		}
624
		return rasterBuf;
625
	}
626

  
627
	/*
628
	 * (non-Javadoc)
629
	 * @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)
630
	 */
631
	public Buffer getWindow(Extent extent, int bufWidth, int bufHeight, 
632
			BandList bandList, Buffer rasterBuf, boolean adjustToExtent, TaskStatus status) throws ProcessInterruptedException, RasterDriverException {
633
		providerList = getParameters().getProviders();
634
		
635
		DefaultRasterQuery q = (DefaultRasterQuery)RasterLocator.getManager().createQuery();
636
		q.setAreaOfInterest(extent, bufWidth, bufHeight);
637
		q.setBuffer(rasterBuf);
638
		q.setAdjustToExtent(adjustToExtent);
639
		
640
		for (int i = 0; i < providerList.size(); i++) {
641
			BandList bandListByFile = createBandListByProvider(bandList, providerList.get(i));
642
			if(bandListByFile != null) {
643
				q.setBandList(bandListByFile);
644
				rasterBuf = ((DefaultRasterProvider)providerList.get(i)).getDataSet(q);
645
			}
646
		}
647
		return rasterBuf;
648
	}
649
	
650
	/**
651
	 * Creates a <code>BandList</code> for each provider of this <code>MultiFileProvider</code>.
652
	 * When a request is made, the <code>BandList</code> is global for all files. A specific 
653
	 * <code>BandList</code> has to be built for each provider. 
654
	 * @param globalBandList
655
	 * @param provider
656
	 * @return
657
	 */
658
	private BandList createBandListByProvider(BandList globalBandList, RasterProvider provider) {
659
		if(provider.isTiled()) { 
660
			//Si los proveedores que hay por debajo son tileados estos crear�n su propio buffer para escribir
661
			//cada tile. Por ello no usar� el buffer que viene del store. Esto quiere decir que el BandList ha
662
			//de ser distinto para que escriba bien en su buffer
663
			
664
			//TODO: De momento no se permiten MultiFiles con proveedores tileados. Esto es porque
665
			//los tiles crean su propio buffer y no escriben en el buffer creado en el Store
666

  
667
		} else {
668
			BandList bandListByFile = new BandListImpl();
669
			for (int i = 0; i < provider.getBandCount(); i++) {
670
				try {
671
					bandListByFile.addBand(new DatasetBandImpl(provider.getURI(), i, provider.getDataType()[0], provider.getBandCount()));
672
				} catch (BandNotFoundInListException e1) {
673
				}
674
			}
675

  
676
			boolean areThereBandsToDraw = false;
677
			for (int i = 0; i < provider.getBandCount(); i++) {
678
				int[] bandsToDrawByProviderBand = globalBandList.getBufferBandToDraw(provider.getURI(), i);
679
				if(bandsToDrawByProviderBand != null) {
680
					areThereBandsToDraw = true;
681
					for (int j = 0; j < bandsToDrawByProviderBand.length; j++) {
682
						bandListByFile.getBand(i).addPositionToDrawInBuffer(bandsToDrawByProviderBand[j]);				
683
					}
684
				}
685
			}
686

  
687
			if(areThereBandsToDraw)
688
				return bandListByFile;
689
		}
690
		return null;
691
	}
692

  
693
	/*
694
	 * (non-Javadoc)
695
	 * @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)
696
	 */
697
	public Buffer getWindow(int x, int y, int w, int h, 
698
			BandList bandList, Buffer rasterBuf, TaskStatus status) throws ProcessInterruptedException, RasterDriverException {
699
		providerList = getParameters().getProviders();
700
		DefaultRasterQuery q = (DefaultRasterQuery)RasterLocator.getManager().createQuery();
701
		q.setAreaOfInterest(x, y, w, h);
702
		q.setBandList(bandList);
703
		q.setBuffer(rasterBuf);
704
		for (int i = 0; i < providerList.size(); i++) {
705
			rasterBuf = ((DefaultRasterProvider)providerList.get(i)).getDataSet(q);
706
		}
707
		return rasterBuf;
708
	}
709

  
710
	/*
711
	 * (non-Javadoc)
712
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getBlockSize()
713
	 */
714
	public int getBlockSize() {
715
		return 0;
716
	}
717

  
718
	/*
719
	 * (non-Javadoc)
720
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getColorInterpretation()
721
	 */
722
	public ColorInterpretation getColorInterpretation() {
723
		if(super.getColorInterpretation() == null) {
724
			String[] cis = new String[getBandCount()];
725
			for (int i = 0; i < cis.length; i++) {
726
				if(i == 0)
727
					cis[i] = ColorInterpretation.GRAY_BAND;
728
				else
729
					cis[i] = ColorInterpretation.UNDEF_BAND;
730
			}
731
			setColorInterpretation(new DataStoreColorInterpretation(cis));
732
		}
733
		return super.getColorInterpretation();
734
	}
735

  
736
	/*
737
	 * (non-Javadoc)
738
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getTransparency()
739
	 */
740
	public DataStoreTransparency getTransparency() {
741
		if(fileTransparency == null)
742
			fileTransparency = new DataStoreTransparency();
743
		return fileTransparency;
744
	}
745

  
746
	/**
747
	 * Informa de si el driver ha supersampleado en el �ltimo dibujado. Es el driver el que colocar�
748
	 * el valor de esta variable cada vez que dibuja.
749
	 * @return true si se ha supersampleado y false si no se ha hecho.
750
	 */
751
	public boolean isSupersampling() {
752
		return false;
753
	}
754

  
755
	/*
756
	 * (non-Javadoc)
757
	 * @see org.gvsig.raster.impl.provider.RasterProvider#getOverviewCount(int)
758
	 */
759
	public int getOverviewCount(int band) throws BandAccessException, RasterDriverException {
760
		if(band >= getBandCount())
761
			throw new BandAccessException("Wrong band");
762
		return 0;
763
	}
764

  
765
	/*
766
	 * (non-Javadoc)
767
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getOverviewWidth(int, int)
768
	 */
769
	public int getOverviewWidth(int band, int overview) throws BandAccessException, RasterDriverException {
770
		if (band >= getBandCount())
771
			throw new BandAccessException("Wrong band");
772
		return 0;
773
	}
774

  
775
	/*
776
	 * (non-Javadoc)
777
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getOverviewHeight(int, int)
778
	 */
779
	public int getOverviewHeight(int band, int overview) throws BandAccessException, RasterDriverException {
780
		if (band >= getBandCount())
781
			throw new BandAccessException("Wrong band");
782
		return 0;
783
	}
784
	
785
	/*
786
	 * (non-Javadoc)
787
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#isMultiFile()
788
	 */
789
	public boolean isMultiFile() {
790
		return true;
791
	}
792

  
793
	/*
794
	 * (non-Javadoc)
795
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#isOverviewsSupported()
796
	 */
797
	public boolean isOverviewsSupported() {
798
		return true;
799
	}
800

  
801
	/*
802
	 * (non-Javadoc)
803
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#isReproyectable()
804
	 */
805
	public boolean isReproyectable() {
806
		return true;
807
	}
808

  
809
	/*
810
	 * (non-Javadoc)
811
	 * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getName()
812
	 */
813
	public String getName() {
814
		return NAME;
815
	}
816
	
817
	/*
818
	 * (non-Javadoc)
819
	 * @see org.gvsig.raster.impl.provider.RasterProvider#setStatus(org.gvsig.raster.impl.provider.RasterProvider)
820
	 */
821
	public void setStatus(RasterProvider provider) {
822
		if(provider instanceof MultiFileProvider) {
823
			//Not implemented yet
824
		}
825
	}
826
	
827
	/*
828
	 * (non-Javadoc)
829
	 * @see org.gvsig.raster.impl.provider.RasterProvider#isTimeSupported()
830
	 */
831
	public boolean isTimeSupported() {
832
		return true;
833
	}
834
	
835
	/*
836
	 * (non-Javadoc)
837
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#getURIByBand(int)
838
	 */
839
	public String getURIByBand(int band) {
840
		int[] sub = getSubBandByBandNumber(band);
841
		RasterProvider prov = providerList.get(sub[0]);
842
		return prov.getURIOfFirstProvider();
843
	}
844
	
845
	/*
846
	 * (non-Javadoc)
847
	 * @see org.gvsig.raster.impl.provider.RasterProvider#addFile(java.lang.String)
848
	 */
849
	public void addFile(String file) throws InvalidSourceException {
850
		ProviderServices provServ = RasterLocator.getManager().getProviderServices();
851
		DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
852
			
853
//		if(providerList.size() > 0 && providerList.get(0).isTiled()) {
854
//			//Comentado hasta que se puedan incorporar fuentes tileadas a aun MultiFile
855
//			//en su lugar se sustituye el primer proveedor tileado por uno sin tilear
856
//			
857
//			RasterDataParameters storeParameters = provServ.createParametersForTiledFiled(file);
858
//			
859
//			try {
860
//				RasterProvider newFileProv = (RasterProvider)dataManager.createProvider(storeServices, storeParameters);
861
//				if(checkNewProvider(newFileProv)) {
862
//					getParameters().addProvider(newFileProv);
863
//				}
864
//			} catch (InitializeException e) {
865
//				throw new InvalidSourceException("", e);
866
//			} catch (ProviderNotRegisteredException e) {
867
//				throw new InvalidSourceException("", e);
868
//			}
869
//		} 
870
		
871
		setFirstProviderToNotTiled();
872
		
873
		List<RasterDataParameters> storeParametersList = provServ.createParametersList(file);	
874

  
875
		for (int j = 0; j < storeParametersList.size(); j++) {
876
			RasterProvider newFileProv;
877
			try {
878
				newFileProv = (RasterProvider)dataManager.createProvider(storeServices, storeParametersList.get(j));
879
				if(!newFileProv.isTiled() && checkNewProvider(newFileProv)) {
880
					getParameters().addProvider(newFileProv);
881
				}
882
			} catch (InitializeException e) {
883
				throw new InvalidSourceException("", e);
884
			} catch (ProviderNotRegisteredException e) {
885
				throw new InvalidSourceException("", e);
886
			}
887
		}
888
	}
889
	
890
	private void setFirstProviderToNotTiled() throws InvalidSourceException {
891
		if(providerList == null || providerList.size() <= 0 || !providerList.get(0).isTiled()) 
892
			return;
893
		
894
		//Si el primer proveedor es tileado se cambia a no tileado
895
		DataManagerProviderServices dataManager = (DataManagerProviderServices)DALLocator.getDataManager();
896
		ProviderServices provServ = RasterLocator.getManager().getProviderServices();
897
		
898
		RasterDataParameters firstDataParameters = providerList.get(0).getDataParameters();
899
		String uri = firstDataParameters.getURI();
900
		
901
		List<RasterDataParameters> storeParametersList = provServ.createParametersList(uri);	
902

  
903
		for (int j = 0; j < storeParametersList.size(); j++) {
904
			RasterProvider newFileProv;
905
			try {
906
				newFileProv = (RasterProvider)dataManager.createProvider(storeServices, storeParametersList.get(j));
907
				if(!newFileProv.isTiled() && checkNewProvider(newFileProv)) {
908
					getParameters().setFirstProvider(newFileProv);
909
				}
910
			} catch (InitializeException e) {
911
				throw new InvalidSourceException("Error replacing the first provider", e);
912
			} catch (ProviderNotRegisteredException e) {
913
				throw new InvalidSourceException("Error replacing the first provider", e);
914
			}
915
		}
916
	}
917
	
918
	/*
919
	 * (non-Javadoc)
920
	 * @see org.gvsig.raster.impl.provider.RasterProvider#removeFile(java.lang.String)
921
	 */
922
	public void removeFile(String file) {
923
		getParameters().removeProvider(file);
924
	}
925
	
926
	/*
927
	 * (non-Javadoc)
928
	 * @see org.gvsig.raster.impl.provider.RasterProvider#getTileServer()
929
	 */
930
	public TileServer getTileServer() {
931
		if(tileServer == null)
932
			tileServer = new FileTileServer(this);
933
		return tileServer;
934
	}
935
}
0 936

  
org.gvsig.raster.multifile/tags/tagdate_11102013_11_26/org.gvsig.raster.multifile/org.gvsig.raster.multifile.io/src/main/java/org/gvsig/raster/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.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
	public String getDataStoreName() {
78
		return MultiFileProvider.NAME;
79
	}
80
	
81
	public String getDescription() {
82
		return MultiFileProvider.DESCRIPTION;
83
	}
84
	
85
	public String getExplorerName() {
86
		return MultiFileProvider.NAME;
87
	}
88
}
0 89

  
org.gvsig.raster.multifile/tags/tagdate_11102013_11_26/org.gvsig.raster.multifile/org.gvsig.raster.multifile.io/src/main/java/org/gvsig/raster/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,
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff