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 @ 44882

History | View | Annotate | Download (6.17 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.gvsig.tools.util.URLUtils;
21
import org.slf4j.Logger;
22
import org.slf4j.LoggerFactory;
23

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
183
        }
184

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

    
195
}