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

History | View | Annotate | Download (5.37 KB)

1 44057 jjdelcerro
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 44242 jjdelcerro
import org.gvsig.fmap.dal.DataParameters;
11 44057 jjdelcerro
import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
12 44232 jjdelcerro
import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
13 44057 jjdelcerro
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 44242 jjdelcerro
public abstract class AbstractSimpleSequentialReaderFactory implements SimpleSequentialReaderFactory {
28 44057 jjdelcerro
29 44242 jjdelcerro
    protected Logger LOGGER = LoggerFactory.getLogger(AbstractSimpleSequentialReaderFactory.class);
30 44057 jjdelcerro
31
    private final String name;
32
    private final String description;
33
    private final String[] extensions;
34
35 44242 jjdelcerro
    protected AbstractSimpleSequentialReaderFactory(
36 44057 jjdelcerro
            String name,
37
            String description,
38
            String[] extensions
39
    ) {
40
        this.name = name;
41
        this.description = description;
42
        this.extensions = extensions;
43
    }
44
45 44242 jjdelcerro
    protected Logger logger() {
46
        return LOGGER;
47
    }
48
49 44057 jjdelcerro
    @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
    @Override
65
    public boolean accept(File pathname) {
66
        return FilenameUtils.isExtension(pathname.getName(), this.getExtensions());
67
    }
68
69
    @Override
70
    public FeatureStoreProviderFactory createStoreProviderFactory() {
71 44242 jjdelcerro
        return new SimpleSequentialReaderStoreProviderFactory(this);
72 44057 jjdelcerro
    }
73
74
    @Override
75
    public FilesystemServerExplorerProviderFactory createFilesystemServerProviderFactory() {
76 44242 jjdelcerro
        return new SimpleSequentialReaderFilesystemServerProviderFactory(this);
77 44057 jjdelcerro
    }
78
79
    private InputStream openStream(URL url) {
80
        try {
81
            return url.openStream();
82
        } catch (IOException ex) {
83
            return null;
84
        }
85
    }
86
87
    @Override
88
    public void selfRegister(Class loader) {
89
        this.selfRegister(
90
                loader.getResource(this.getName() + "Parameters.xml"),
91
                loader.getResource(this.getName() + "Metadata.xml")
92
        );
93
    }
94
95
    @SuppressWarnings("UseSpecificCatch")
96
    @Override
97
    public void selfRegister(URL parameters_xml, URL metadata_xml) {
98
        DynStruct definition;
99
        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
100
101
        definition = persistenceManager.getDefinition(this.getName());
102
        if (definition == null) {
103
            InputStream stream = this.openStream(parameters_xml);
104
            if (stream == null) {
105
                throw new RuntimeException("Can't access parameters definition in resource '" + parameters_xml.toString() + "'.");
106
            }
107 44232 jjdelcerro
            persistenceManager.updateDefinition(
108 44242 jjdelcerro
                    SimpleSequentialReaderStoreParameters.class,
109 44057 jjdelcerro
                    this.getName(),
110
                    stream,
111 44242 jjdelcerro
                    SimpleSequentialReaderStoreParameters.class.getClassLoader(),
112 44057 jjdelcerro
                    null,
113
                    null
114
            );
115
        }
116
117
        if( metadata_xml!=null ) {
118
            MetadataManager metadataManager = MetadataLocator.getMetadataManager();
119
            try {
120
                definition = metadataManager.getDefinition(this.getName());
121
                if (definition == null) {
122
                    InputStream stream = this.openStream(metadata_xml);
123
                    metadataManager.addDefinition(
124
                            this.getName(),
125
                            stream,
126 44242 jjdelcerro
                            SimpleSequentialReaderStoreParameters.class.getClassLoader()
127 44057 jjdelcerro
                    );
128
                }
129
            } catch (Exception e) {
130
                LOGGER.warn(
131
                        "Can't access metadata definition in resource '" + metadata_xml.toString() + "'.",
132
                        e
133
                );
134
            }
135
        }
136
137
        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
138
                .getDataManager();
139
140
        if (!dataman.getStoreProviders().contains(this.getName())) {
141
            dataman.registerStoreProviderFactory(
142 44242 jjdelcerro
                    new SimpleSequentialReaderStoreProviderFactory(this)
143 44057 jjdelcerro
            );
144
        }
145
146
        try {
147
            DALFileLocator.getFilesystemServerExplorerManager()
148
                    .registerProviderFactory(
149 44242 jjdelcerro
                            new SimpleSequentialReaderFilesystemServerProviderFactory(this)
150 44057 jjdelcerro
                    );
151
        } catch (Exception e) {
152
            LOGGER.warn(
153
                "Can't register filesystem server provider factory ("+this.getName()+").",
154
                e
155
            );
156
157
        }
158
159
    }
160 44242 jjdelcerro
161 44232 jjdelcerro
    @Override
162 44242 jjdelcerro
    public void fetchDefaultParameters(DataParameters parameters) {
163
        // Default do nothing
164
    }
165
166
    @Override
167
    public abstract SimpleSequentialReader createReader(OpenFeatureStoreParameters params);
168 44232 jjdelcerro
169 44057 jjdelcerro
}