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 / AbstractSimpleReaderFactory.java @ 44232

History | View | Annotate | Download (5.01 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.feature.FeatureStoreProviderFactory;
11
import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
12
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProviderFactory;
13
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
14
import org.gvsig.metadata.MetadataLocator;
15
import org.gvsig.metadata.MetadataManager;
16
import org.gvsig.tools.ToolsLocator;
17
import org.gvsig.tools.dynobject.DynStruct;
18
import org.gvsig.tools.persistence.PersistenceManager;
19
import org.slf4j.Logger;
20
import org.slf4j.LoggerFactory;
21

    
22
/**
23
 *
24
 * @author jjdelcerro
25
 */
26
public abstract class AbstractSimpleReaderFactory implements SimpleReaderFactory {
27

    
28
    protected Logger LOGGER = LoggerFactory.getLogger(AbstractSimpleReaderFactory.class);
29

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

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

    
44
    @Override
45
    public String getName() {
46
        return name;
47
    }
48

    
49
    @Override
50
    public String getDescription() {
51
        return description;
52
    }
53

    
54
    @Override
55
    public String[] getExtensions() {
56
        return extensions;
57
    }
58

    
59
    @Override
60
    public boolean accept(File pathname) {
61
        return FilenameUtils.isExtension(pathname.getName(), this.getExtensions());
62
    }
63

    
64
    @Override
65
    public FeatureStoreProviderFactory createStoreProviderFactory() {
66
        return new BaseSimpleStoreProviderFactory(this);
67
    }
68

    
69
    @Override
70
    public FilesystemServerExplorerProviderFactory createFilesystemServerProviderFactory() {
71
        return new BaseSimpleFilesystemServerProviderFactory(this);
72
    }
73

    
74
    private InputStream openStream(URL url) {
75
        try {
76
            return url.openStream();
77
        } catch (IOException ex) {
78
            return null;
79
        }
80
    }
81

    
82
    @Override
83
    public void selfRegister(Class loader) {
84
        this.selfRegister(
85
                loader.getResource(this.getName() + "Parameters.xml"),
86
                loader.getResource(this.getName() + "Metadata.xml")
87
        );    
88
    }
89
    
90
    @SuppressWarnings("UseSpecificCatch")
91
    @Override
92
    public void selfRegister(URL parameters_xml, URL metadata_xml) {
93
        DynStruct definition;
94
        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
95

    
96
        definition = persistenceManager.getDefinition(this.getName());
97
        if (definition == null) {
98
            InputStream stream = this.openStream(parameters_xml);
99
            if (stream == null) {
100
                throw new RuntimeException("Can't access parameters definition in resource '" + parameters_xml.toString() + "'.");
101
            }
102
            persistenceManager.updateDefinition(
103
                    BaseSimpleStoreParameters.class,
104
                    this.getName(),
105
                    stream,
106
                    BaseSimpleStoreParameters.class.getClassLoader(),
107
                    null,
108
                    null
109
            );
110
        }
111

    
112
        if( metadata_xml!=null ) {
113
            MetadataManager metadataManager = MetadataLocator.getMetadataManager();
114
            try {
115
                definition = metadataManager.getDefinition(this.getName());
116
                if (definition == null) {
117
                    InputStream stream = this.openStream(metadata_xml);
118
                    metadataManager.addDefinition(
119
                            this.getName(),
120
                            stream,
121
                            BaseSimpleStoreParameters.class.getClassLoader()
122
                    );
123
                }
124
            } catch (Exception e) {
125
                LOGGER.warn(
126
                        "Can't access metadata definition in resource '" + metadata_xml.toString() + "'.",
127
                        e
128
                );
129
            }
130
        }
131

    
132
        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
133
                .getDataManager();
134

    
135
        if (!dataman.getStoreProviders().contains(this.getName())) {
136
            dataman.registerStoreProviderFactory(
137
                    new BaseSimpleStoreProviderFactory(this)
138
            );
139
        }
140

    
141
        try {
142
            DALFileLocator.getFilesystemServerExplorerManager()
143
                    .registerProviderFactory(
144
                            new BaseSimpleFilesystemServerProviderFactory(this)
145
                    );
146
        } catch (Exception e) {
147
            LOGGER.warn(
148
                "Can't register filesystem server provider factory ("+this.getName()+").",
149
                e
150
            );
151

    
152
        }
153

    
154
    }
155

    
156
    @Override
157
    public abstract SimpleReader createReader(OpenFeatureStoreParameters params);
158

    
159
}