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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
151
        }
152

    
153
    }
154

    
155
}