Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.file / org.gvsig.fmap.dal.file.lib / src / main / java / org / gvsig / fmap / dal / feature / spi / simpleprovider / AbstractSimpleSequentialReaderFactory.java @ 44831

History | View | Annotate | Download (6.12 KB)

1
package org.gvsig.fmap.dal.feature.spi.simpleprovider;
2

    
3
import java.io.File;
4
import java.io.IOException;
5
import java.io.InputStream;
6
import java.net.URL;
7
import org.apache.commons.io.FilenameUtils;
8
import org.gvsig.fmap.dal.DALFileLocator;
9
import org.gvsig.fmap.dal.DALLocator;
10
import org.gvsig.fmap.dal.DataParameters;
11
import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
12
import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
13
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
14
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
15
import org.gvsig.metadata.MetadataLocator;
16
import org.gvsig.metadata.MetadataManager;
17
import org.gvsig.tools.ToolsLocator;
18
import org.gvsig.tools.dynobject.DynStruct;
19
import org.gvsig.tools.persistence.PersistenceManager;
20
import org.slf4j.Logger;
21
import org.slf4j.LoggerFactory;
22

    
23
/**
24
 *
25
 * @author jjdelcerro
26
 */
27
public abstract class AbstractSimpleSequentialReaderFactory implements SimpleSequentialReaderFactory {
28

    
29
    protected Logger LOGGER = LoggerFactory.getLogger(AbstractSimpleSequentialReaderFactory.class);
30

    
31
    private final String name;
32
    private final String description;
33
    private final String[] extensions;
34

    
35
    protected AbstractSimpleSequentialReaderFactory(
36
            String name,
37
            String description,
38
            String[] extensions
39
    ) {
40
        this.name = name;
41
        this.description = description;
42
        this.extensions = extensions;
43
    }
44

    
45
    protected Logger logger() {
46
        return LOGGER;
47
    }
48
    
49
    @Override
50
    public String getName() {
51
        return name;
52
    }
53

    
54
    @Override
55
    public String getDescription() {
56
        return description;
57
    }
58

    
59
    @Override
60
    public String[] getExtensions() {
61
        return extensions;
62
    }
63

    
64
    public final boolean isValidExtension(File f) {
65
      if( f == null ) {
66
        return false;
67
      }
68
      String[] theExtensions = this.getExtensions();
69
      if( theExtensions==null ) {
70
        // Si no hay especificadas extensiones decimos que vale.
71
        return true; 
72
      }
73
      String extension = FilenameUtils.getExtension(f.getName()).trim();
74
      if( extension.isEmpty() ) {
75
        // Si el fichero no tiene extension decimos que vale.
76
        return true; 
77
      }
78
      for (String currentExtension : theExtensions) {
79
        if (currentExtension != null ) {
80
          currentExtension = currentExtension.trim();
81
          if( !currentExtension.isEmpty() && extension.equalsIgnoreCase(currentExtension) ) {
82
            return true;
83
          }
84
        }
85
      }
86
      return false;
87
    }
88
    
89
    @Override
90
    public boolean accept(File f) {
91
        return isValidExtension(f);
92
    }
93

    
94
    @Override
95
    public FeatureStoreProviderFactory createStoreProviderFactory() {
96
        return new SimpleSequentialReaderStoreProviderFactory(this);
97
    }
98

    
99
    @Override
100
    public FilesystemServerExplorerProviderFactory createFilesystemServerProviderFactory() {
101
        return new SimpleSequentialReaderFilesystemServerProviderFactory(this);
102
    }
103

    
104
    private InputStream openStream(URL url) {
105
        try {
106
            return url.openStream();
107
        } catch (IOException ex) {
108
            return null;
109
        }
110
    }
111

    
112
    @Override
113
    public void selfRegister(Class loader) {
114
        this.selfRegister(
115
                loader.getResource(this.getName() + "Parameters.xml"),
116
                loader.getResource(this.getName() + "Metadata.xml")
117
        );    
118
    }
119
    
120
    @SuppressWarnings("UseSpecificCatch")
121
    @Override
122
    public void selfRegister(URL parameters_xml, URL metadata_xml) {
123
        DynStruct definition;
124
        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
125

    
126
        definition = persistenceManager.getDefinition(this.getName());
127
        if (definition == null) {
128
            InputStream stream = this.openStream(parameters_xml);
129
            if (stream == null) {
130
                throw new RuntimeException("Can't access parameters definition in resource '" + parameters_xml.toString() + "'.");
131
            }
132
            persistenceManager.updateDefinition(
133
                    SimpleSequentialReaderStoreParameters.class,
134
                    this.getName(),
135
                    stream,
136
                    SimpleSequentialReaderStoreParameters.class.getClassLoader(),
137
                    null,
138
                    null
139
            );
140
        }
141

    
142
        if( metadata_xml!=null ) {
143
            MetadataManager metadataManager = MetadataLocator.getMetadataManager();
144
            try {
145
                definition = metadataManager.getDefinition(this.getName());
146
                if (definition == null) {
147
                    InputStream stream = this.openStream(metadata_xml);
148
                    metadataManager.addDefinition(
149
                            this.getName(),
150
                            stream,
151
                            SimpleSequentialReaderStoreParameters.class.getClassLoader()
152
                    );
153
                }
154
            } catch (Exception e) {
155
                LOGGER.warn(
156
                        "Can't access metadata definition in resource '" + metadata_xml.toString() + "'.",
157
                        e
158
                );
159
            }
160
        }
161

    
162
        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
163
                .getDataManager();
164

    
165
        if (!dataman.getStoreProviders().contains(this.getName())) {
166
            dataman.registerStoreProviderFactory(
167
                    new SimpleSequentialReaderStoreProviderFactory(this)
168
            );
169
        }
170

    
171
        try {
172
            DALFileLocator.getFilesystemServerExplorerManager()
173
                    .registerProviderFactory(
174
                            new SimpleSequentialReaderFilesystemServerProviderFactory(this)
175
                    );
176
        } catch (Exception e) {
177
            LOGGER.warn(
178
                "Can't register filesystem server provider factory ("+this.getName()+").",
179
                e
180
            );
181

    
182
        }
183

    
184
    }
185
    
186
    @Override
187
    public void fetchDefaultParameters(DataParameters parameters) {
188
        // Default do nothing
189
    }
190
    
191
    @Override
192
    public abstract SimpleSequentialReader createReader(OpenFeatureStoreParameters params);
193

    
194
}