Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libMetadata / src / org / gvsig / metadata / simple / SimpleMetadataManager.java @ 33334

History | View | Annotate | Download (4.54 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
* 
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
* 
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
* 
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
* MA  02110-1301, USA.
20
* 
21
*/
22

    
23
/*
24
* AUTHORS (In addition to CIT):
25
* 2008 Geographic Information research group: http://www.geoinfo.uji.es
26
* Departamento de Lenguajes y Sistemas Inform?ticos (LSI)
27
* Universitat Jaume I   
28
* {{Task}}
29
*/
30

    
31
package org.gvsig.metadata.simple;
32

    
33
import java.io.IOException;
34
import java.io.InputStream;
35
import java.util.ArrayList;
36
import java.util.List;
37
import java.util.Map;
38

    
39
import org.gvsig.metadata.MetadataContainer;
40
import org.gvsig.metadata.MetadataManager;
41
import org.gvsig.metadata.exceptions.AddMetadataDefinitionException;
42
import org.gvsig.metadata.exceptions.DuplicateMetadataDefinitionException;
43
import org.gvsig.metadata.exceptions.InvalidMetadataNamespaceException;
44
import org.gvsig.metadata.exceptions.MetadataException;
45
import org.gvsig.tools.ToolsLocator;
46
import org.gvsig.tools.dynobject.DynClass;
47
import org.gvsig.tools.dynobject.DynObjectManager;
48
import org.gvsig.tools.dynobject.DynStruct;
49
import org.gvsig.tools.dynobject.impl.DynClassName;
50
import org.slf4j.Logger;
51
import org.slf4j.LoggerFactory;
52
import org.xmlpull.v1.XmlPullParserException;
53

    
54
public class SimpleMetadataManager implements MetadataManager {
55

    
56
        private final Logger LOG = LoggerFactory.getLogger(SimpleMetadataManager.class);
57
        
58
        public DynStruct addDefinition(String name, String description)
59
                        throws MetadataException {
60
                DynObjectManager dynman = ToolsLocator.getDynObjectManager();
61

    
62
                DynClass definition = dynman.createDynClass(METADATA_NAMESPACE, name, description);
63
                if( dynman.get(definition.getNamespace(),definition.getName())!=null ) {
64
                        throw new DuplicateMetadataDefinitionException(definition.getName());
65
                }
66
                dynman.add(definition);
67
                LOG.trace("Registered metadata definition {}.", definition.getFullName());
68
                return definition;
69
        }
70

    
71
        public DynStruct getDefinition(String name) {
72
                DynObjectManager dynman = ToolsLocator.getDynObjectManager();
73

    
74
                return dynman.get(METADATA_NAMESPACE,name);
75
        }
76

    
77
        public DynStruct addDefinition(String metadataDefinitionName,
78
                        InputStream stream, ClassLoader loader) throws MetadataException {
79
                DynObjectManager dynman = ToolsLocator.getDynObjectManager();
80
                Map x;
81
                try {
82
                        x = dynman.importDynClassDefinitions(stream, loader, METADATA_NAMESPACE);
83
                } catch (XmlPullParserException e) {
84
                        throw new AddMetadataDefinitionException(e, metadataDefinitionName);
85
                } catch (IOException e) {
86
                        throw new AddMetadataDefinitionException(e, metadataDefinitionName);
87
                }
88
                DynClass definition = (DynClass) x.get(metadataDefinitionName);
89
                if( definition== null ) {
90
                        throw new CantFindDefinitionInStreamException(metadataDefinitionName, getKeys(x));
91
                }
92
                return addDefinition(definition);
93
        }        
94

    
95
        private String getKeys(Map theMap) {
96
                List l = new ArrayList(theMap.keySet());
97
                return l.toString();
98
        }
99
        
100
        
101
        protected  DynStruct addDefinition(DynClass definition) throws MetadataException{
102
                        DynObjectManager dynman = ToolsLocator.getDynObjectManager();
103
                        
104
                        if(! METADATA_NAMESPACE.equalsIgnoreCase(definition.getNamespace()) ) {
105
                                throw new InvalidMetadataNamespaceException(definition.getName(), definition.getNamespace());
106
                        }
107
                        if( dynman.get(definition.getNamespace(),definition.getName())!=null ) {
108
                                throw new DuplicateMetadataDefinitionException(definition.getName());
109
                        }
110
                        dynman.add(definition);
111
                        LOG.trace("Registered metadata definition {}.", definition.getFullName());
112
                        return definition;
113
                }
114

    
115
        public MetadataContainer createMetadataContainer(String name) {
116
                DynObjectManager dynman = ToolsLocator.getDynObjectManager();
117

    
118
                DynClass dynClass = dynman.get(METADATA_NAMESPACE, name);
119
                if (dynClass == null) {
120
                        throw new IllegalArgumentException("Can't locate class '"+ new DynClassName(METADATA_NAMESPACE,name).getFullName()+"'.");
121
                }
122
                return new SimpleMetadataContainer(dynClass);
123
        }
124
}