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

History | View | Annotate | Download (5.37 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
    @Override
65
    public boolean accept(File pathname) {
66
        return FilenameUtils.isExtension(pathname.getName(), this.getExtensions());
67
    }
68

    
69
    @Override
70
    public FeatureStoreProviderFactory createStoreProviderFactory() {
71
        return new SimpleSequentialReaderStoreProviderFactory(this);
72
    }
73

    
74
    @Override
75
    public FilesystemServerExplorerProviderFactory createFilesystemServerProviderFactory() {
76
        return new SimpleSequentialReaderFilesystemServerProviderFactory(this);
77
    }
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
            persistenceManager.updateDefinition(
108
                    SimpleSequentialReaderStoreParameters.class,
109
                    this.getName(),
110
                    stream,
111
                    SimpleSequentialReaderStoreParameters.class.getClassLoader(),
112
                    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
                            SimpleSequentialReaderStoreParameters.class.getClassLoader()
127
                    );
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
                    new SimpleSequentialReaderStoreProviderFactory(this)
143
            );
144
        }
145

    
146
        try {
147
            DALFileLocator.getFilesystemServerExplorerManager()
148
                    .registerProviderFactory(
149
                            new SimpleSequentialReaderFilesystemServerProviderFactory(this)
150
                    );
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
    
161
    @Override
162
    public void fetchDefaultParameters(DataParameters parameters) {
163
        // Default do nothing
164
    }
165
    
166
    @Override
167
    public abstract SimpleSequentialReader createReader(OpenFeatureStoreParameters params);
168

    
169
}