Statistics
| Revision:

gvsig-gdal / trunk / org.gvsig.gdal2 / org.gvsig.gdal2.prov / org.gvsig.gdal2.prov.raster / src / main / java / org / gvsig / raster / gdal / provider / RasterGdalFileSystemServerProviderFactory.java @ 370

History | View | Annotate | Download (5.71 KB)

1
package org.gvsig.raster.gdal.provider;
2

    
3
import java.io.File;
4
import java.util.Arrays;
5
import java.util.HashSet;
6
import java.util.Set;
7

    
8
import org.apache.commons.io.FilenameUtils;
9
import org.gdal.gdal.Driver;
10
import org.gdal.gdal.gdal;
11
import org.gdal.gdalconst.gdalconstConstants;
12
import org.gvsig.fmap.dal.serverexplorer.filesystem.impl.AbstractFilesystemServerExplorerProviderFactory;
13
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider;
14
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
15

    
16
/**
17
 * Factory for GDAL filesystem providers
18
 *
19
 */
20
public class RasterGdalFileSystemServerProviderFactory
21
        extends AbstractFilesystemServerExplorerProviderFactory
22
        implements FilesystemServerExplorerProviderFactory 
23
    {
24

    
25
    private final RasterGdalStoreProviderFactory providerFactory;
26
    private final String newParams;
27
    private Set<String> validExtensions;
28

    
29
    /**
30
     * Constructor
31
     * @param providerFactory
32
     * @param newParams Definition name of the params used to create a new store
33
     */
34
    public RasterGdalFileSystemServerProviderFactory(RasterGdalStoreProviderFactory providerFactory, String newParams){
35
        super(providerFactory.getName(), providerFactory.getDescription());
36
        this.providerFactory=providerFactory;
37
        this.newParams=newParams;
38
        init();
39
    }
40

    
41
    private void init(){
42
        this.validExtensions=new HashSet<>();
43
        String driverExtension=(String)getDriver().GetMetadata_Dict().get(gdalconstConstants.GDAL_DMD_EXTENSION);
44
        //At least the driver given extension is always accepted (more can be defined in its parameters)
45
//      GDAL_DMD_EXTENSION only returns an extension. GDAL_DMD_EXTENSIONS should be used instead in GDAL 2.0.
46
//      GDAL_DMD_EXTENSIONS returns a list of accepted extensions separated by a blank
47
//      Meanwhile, most common extensions are added defined in the xml parameters
48
        if (driverExtension!=null){
49
            validExtensions.add(driverExtension);
50
        }
51
    }
52

    
53
    /**
54
     * Adds valid extensions to be accepted by the driver ({"jpg","jpeg","jp2",...})
55
     * @param extensions
56
     */
57
    public void addAcceptedExtensions(String[] extensions){
58
        if (extensions!=null){
59
            for (String extension:extensions){
60
                validExtensions.add(extension.trim());
61
            }
62
        }
63
    }
64

    
65
    @Override
66
    public FilesystemServerExplorerProvider create() {
67
         return new RasterGdalFileSystemServerProvider(this);
68
    }
69

    
70
    @Override
71
    public boolean accept(File file) {
72
        //If the driver is in the list to be avoided, it will not be opened
73
        String drvName=providerFactory.getDriver().getShortName();
74
        if ( Arrays.asList(RasterGdalLibrary.EXCLUDED_OPEN_DRIVERS).contains(drvName) ){
75
            return false;
76
        }
77

    
78
        if (isAcceptedExtension(file)){
79
            if (!file.exists()) {
80
                return true;
81
            }
82
            return isAcceptedByDriver(file);
83
            
84
            
85
        }
86

    
87
        return false;
88
    }
89

    
90
    private Driver getDriver(){
91
        return providerFactory.getDriver();
92
    }
93

    
94
    /**
95
     * Return true if the File extension is accepted by the FileSystemServerProvider
96
     * @param file
97
     * @return
98
     */
99
    private boolean isAcceptedExtension(File file) {
100
        if (file!=null){
101
            String extension=FilenameUtils.getExtension(file.getName());
102
            if (validExtensions != null && !validExtensions.isEmpty()) {
103
                for (String validExtension : validExtensions) {
104
                    if (validExtension.equalsIgnoreCase(extension)) {
105
                        return true;
106
                    }
107
                }
108
            } else {
109
                return true;
110
            }
111

    
112
        }
113
        return false;
114
    }
115

    
116
    /**
117
     * Returns true if the driver can open the file
118
     * @param file
119
     * @return
120
     */
121
    private boolean isAcceptedByDriver(File file) {
122
        String drvName=getDriver().getShortName();
123

    
124
        Driver openingDriver=null;
125
        openingDriver = gdal.IdentifyDriver(file.getAbsolutePath());
126

    
127
        if (openingDriver==null){
128
            return false;
129
        }
130
        String openingDrvName=openingDriver.getShortName();
131
        return drvName.equalsIgnoreCase(openingDrvName);
132
    }
133

    
134
    @Override
135
    public int allowCreate() {
136
        //If the driver is in the list to be avoided, it will not be created
137
        String drvName=getDriver().getShortName();
138
        if ( Arrays.asList(RasterGdalLibrary.EXCLUDED_STORE_DRIVERS).contains(drvName) ){
139
            return NO;
140
        }
141
        String allowCreate=(String)getDriver().GetMetadata_Dict().get(gdalconstConstants.GDAL_DCAP_CREATE);
142
        String allowCreateCopy=(String)getDriver().GetMetadata_Dict().get(gdalconstConstants.GDAL_DCAP_CREATECOPY);
143

    
144
        if  ( (allowCreate!=null && allowCreate.equalsIgnoreCase("YES")) ||
145
              (allowCreateCopy!=null && allowCreateCopy.equalsIgnoreCase("YES")) ){
146
            return YES;
147
        }else{
148
            return NO;
149
        }
150
    }
151

    
152
    @Override
153
    public String getName() {
154
        return providerFactory.getName();
155
    }
156

    
157
    @Override
158
    public String getDescription() {
159
        return providerFactory.getDescription();
160
    }
161

    
162
//    @Override
163
//    public int getMode() {
164
//        return DataServerExplorer.MODE_RASTER;
165
//    }
166
//
167
//    @Override
168
//    public boolean isMode(int mode) {
169
//        return getMode()==mode;
170
//    }
171

    
172
    String getNewParamsDefinitionName(){
173
        return newParams;
174
    }
175

    
176
    /**
177
     * Store Provider factory to be used to create a new store
178
     * @return RasterGdalStoreProviderFactory
179
     */
180
    public RasterGdalStoreProviderFactory getProviderFactory(){
181
        return this.providerFactory;
182
    }
183
}