Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.raster / org.gvsig.raster.gdal / org.gvsig.raster.gdal.provider / src / main / java / org / gvsig / raster / gdal / provider / RasterGdalStoreProviderFactory.java @ 6335

History | View | Annotate | Download (5.89 KB)

1
/* gvSIG. Desktop Geographic Information System.
2
 *
3
 * Copyright ? 2007-2016 gvSIG Association
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18
 * MA  02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us
21
 * at info AT gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.raster.gdal.provider;
24

    
25
import org.gdal.gdal.Driver;
26
import org.gdal.gdalconst.gdalconstConstants;
27
import org.gvsig.fmap.dal.DataParameters;
28
import org.gvsig.fmap.dal.DataStoreProvider;
29
import org.gvsig.fmap.dal.exception.InitializeException;
30
import org.gvsig.fmap.dal.raster.spi.AbstractRasterStoreProviderFactory;
31
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
32
import org.gvsig.tools.ToolsLocator;
33
import org.gvsig.tools.dynobject.DynObject;
34
import org.gvsig.tools.dynobject.DynStruct_v2;
35
import org.gvsig.tools.persistence.PersistenceManager;
36
import org.slf4j.Logger;
37
import org.slf4j.LoggerFactory;
38

    
39
/**
40
 * Factory for Raster GDAL provider
41
 * @author dmartinezizquierdo
42
 *
43
 */
44
public class RasterGdalStoreProviderFactory extends AbstractRasterStoreProviderFactory {
45

    
46
    private static final Logger logger = LoggerFactory.getLogger(RasterGdalStoreProviderFactory.class);
47
    private Driver gdalDriver;
48
    private String openingParams;
49

    
50
    protected RasterGdalStoreProviderFactory(String name, String description,Driver gdalDriver, String openingParams) {
51
        super(name, description);
52
        this.gdalDriver=gdalDriver;
53
        this.openingParams=openingParams;
54
    }
55

    
56
    @Override
57
    public DataStoreProvider createProvider(DataParameters parameters,
58
        DataStoreProviderServices providerServices) throws InitializeException {
59
        //FIXME: This drivers are not loaded and maybe will be deployed in their own plugin
60
//        //POSTGIS uses its own driver
61
//        if (gdalDriver.getShortName().equalsIgnoreCase("PostGISRaster")){
62
//            return new RasterGdalPostgisStoreProvider((RasterGdalStoreParameters)parameters,providerServices);
63
//        }
64
//        //WCS uses its own driver
65
//        if (gdalDriver.getShortName().equalsIgnoreCase("WCS")){
66
//            return new RasterGdalWCSStoreProvider((RasterGdalStoreParameters)parameters,providerServices);
67
//        }
68
//        //WMS uses its own driver
69
//        if (gdalDriver.getShortName().equalsIgnoreCase("WMS")){
70
//            return new RasterGdalWMSStoreProvider((RasterGdalStoreParameters)parameters,providerServices);
71
//        }
72

    
73
        String allowCreate=(String)gdalDriver.GetMetadata_Dict().get(gdalconstConstants.GDAL_DCAP_CREATE);
74
        String allowCreateCopy=(String)gdalDriver.GetMetadata_Dict().get(gdalconstConstants.GDAL_DCAP_CREATECOPY);
75
        if ( allowCreate!=null && allowCreate.equalsIgnoreCase("YES") ){
76
            return new RasterGdalStoreProviderCreate((RasterGdalFileStoreParameters)parameters,providerServices);
77
        }
78
        else if ( allowCreateCopy!=null && allowCreateCopy.equalsIgnoreCase("YES") ){
79
            return new RasterGdalStoreProviderCreateCopy((RasterGdalFileStoreParameters)parameters,providerServices);
80
        }
81
        return new DefaultRasterGdalStoreProvider((RasterGdalFileStoreParameters)parameters,providerServices);
82
    }
83

    
84
    /**
85
     * Creates provider to create a new store
86
     * @param parameters
87
     * @return DataStoreProvider
88
     * @throws InitializeException
89
     */
90
    public DataStoreProvider createProvider(DataParameters parameters) throws InitializeException {
91
        //TODO: If a specific provider must be used, it must be defined here.
92
//        if (parameters.getDynClass().getName().equals("NewRasterGdalStoreParameters_GTiff") ){
93
//
94
//            return new RasterGdalGTiffStoreProvider((NewRasterGdalStoreParameters)parameters,this.gdalDriver);
95
//
96
//        }
97
        String allowCreate=(String)gdalDriver.GetMetadata_Dict().get(gdalconstConstants.GDAL_DCAP_CREATE);
98
        String allowCreateCopy=(String)gdalDriver.GetMetadata_Dict().get(gdalconstConstants.GDAL_DCAP_CREATECOPY);
99
        if ( allowCreate!=null && allowCreate.equalsIgnoreCase("YES") ){
100
            return new RasterGdalStoreProviderCreate((NewRasterGdalStoreParameters)parameters, this.gdalDriver);
101
        }
102
        if ( allowCreateCopy!=null && allowCreateCopy.equalsIgnoreCase("YES") ){
103
            return new RasterGdalStoreProviderCreateCopy((NewRasterGdalStoreParameters)parameters, this.gdalDriver);
104
        }
105
        return new DefaultRasterGdalStoreProvider((NewRasterGdalStoreParameters)parameters, this.gdalDriver);
106
    }
107

    
108
    @Override
109
    public DynObject createParameters() {
110
        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
111
        DynStruct_v2 openingStruct = (DynStruct_v2)persistenceManager.getDefinition(this.openingParams);
112
        DynStruct_v2 rasterGdalFileStoreParametersStruct = (DynStruct_v2)persistenceManager.getDefinition(RasterGdalFileStoreParameters.PARAMETERS_DEFINITION_NAME);
113

    
114
        if ( openingStruct.isInstance(rasterGdalFileStoreParametersStruct.newInstance()) ){
115
            return new RasterGdalFileStoreParameters(this.openingParams, getName());
116
        }else{
117
            return new  RasterGdalStoreParameters(this.openingParams, getName());
118
        }
119
    }
120

    
121
    /**
122
     * Returns the gdal driver from the provider store factory
123
     * @return gdalDriver
124
     */
125
    public Driver getDriver(){
126
        return gdalDriver;
127
    }
128
}