gvsig-catalog / org.gvsig.catalog / trunk / org.gvsig.catalog / org.gvsig.catalog.lib / src / main / java / org / gvsig / catalog / impl / DefaultCatalogManager.java @ 144
History | View | Annotate | Download (6.39 KB)
1 | 55 | jbadia | /* 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 | 144 | dmartinezizquierdo | *
|
6 | 55 | jbadia | * 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 | 144 | dmartinezizquierdo | *
|
11 | 55 | jbadia | * 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 | 144 | dmartinezizquierdo | *
|
16 | 55 | jbadia | * 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 | 144 | dmartinezizquierdo | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
19 | 55 | jbadia | * MA 02110-1301, USA.
|
20 | 144 | dmartinezizquierdo | *
|
21 | 55 | jbadia | */
|
22 | |||
23 | /*
|
||
24 | * AUTHORS (In addition to CIT):
|
||
25 | * 2009 {Iver T.I.} {Task}
|
||
26 | */
|
||
27 | 144 | dmartinezizquierdo | |
28 | 55 | jbadia | package org.gvsig.catalog.impl; |
29 | |||
30 | import java.lang.reflect.InvocationTargetException; |
||
31 | import java.net.URI; |
||
32 | import java.util.ArrayList; |
||
33 | import java.util.Iterator; |
||
34 | 144 | dmartinezizquierdo | import java.util.Map; |
35 | 55 | jbadia | import java.util.TreeMap; |
36 | |||
37 | import org.gvsig.catalog.CatalogManager; |
||
38 | import org.gvsig.catalog.drivers.ICatalogServiceDriver; |
||
39 | import org.gvsig.catalog.loaders.LayerLoader; |
||
40 | import org.gvsig.catalog.metadataxml.XMLNode; |
||
41 | import org.gvsig.catalog.schemas.Record; |
||
42 | import org.gvsig.catalog.schemas.Resource; |
||
43 | import org.gvsig.catalog.schemas.UnknownRecord; |
||
44 | import org.gvsig.tools.ToolsLocator; |
||
45 | import org.gvsig.tools.extensionpoint.ExtensionPoint; |
||
46 | import org.gvsig.tools.extensionpoint.ExtensionPointManager; |
||
47 | 144 | dmartinezizquierdo | import org.gvsig.utils.swing.jcomboServer.ServerData; |
48 | 55 | jbadia | import org.slf4j.Logger; |
49 | import org.slf4j.LoggerFactory; |
||
50 | |||
51 | /**
|
||
52 | * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
|
||
53 | */
|
||
54 | public class DefaultCatalogManager implements CatalogManager { |
||
55 | private static final Logger logger = LoggerFactory.getLogger(DefaultCatalogManager.class); |
||
56 | private static final String DRIVER_REGISTER_NAME = "CatalogDrivers"; |
||
57 | 144 | dmartinezizquierdo | private ArrayList records = null; |
58 | 55 | jbadia | private static TreeMap loadersPool = null; |
59 | 144 | dmartinezizquierdo | private Map<String,ServerData> serversPersistence =null; |
60 | |||
61 | 55 | jbadia | public DefaultCatalogManager() {
|
62 | super();
|
||
63 | records = new ArrayList(); |
||
64 | loadersPool = new TreeMap(); |
||
65 | } |
||
66 | |||
67 | /* (non-Javadoc)
|
||
68 | * @see org.gvsig.catalog.CatalogManager#getDriver(java.lang.String)
|
||
69 | */
|
||
70 | public ICatalogServiceDriver getDriver(String protocol) { |
||
71 | ExtensionPointManager extensionPointManager = ToolsLocator |
||
72 | .getExtensionPointManager(); |
||
73 | ExtensionPoint extensionPoint = extensionPointManager.add(DRIVER_REGISTER_NAME); |
||
74 | 144 | dmartinezizquierdo | |
75 | 55 | jbadia | Iterator extensions = extensionPoint.iterator();
|
76 | while (extensions.hasNext()){
|
||
77 | ExtensionPoint.Extension extension = (ExtensionPoint.Extension)extensions.next(); |
||
78 | ICatalogServiceDriver driver; |
||
79 | try {
|
||
80 | driver = (ICatalogServiceDriver)extension.create(); |
||
81 | if (driver.getServiceName().toLowerCase().compareTo(protocol.toLowerCase()) == 0){ |
||
82 | return driver;
|
||
83 | } |
||
84 | } catch (InstantiationException e) { |
||
85 | logger.error("Impossible to create a catalog driver", e);
|
||
86 | } catch (IllegalAccessException e) { |
||
87 | logger.error("Impossible to create a catalog driver", e);
|
||
88 | 144 | dmartinezizquierdo | } |
89 | 55 | jbadia | } |
90 | return null; |
||
91 | } |
||
92 | |||
93 | /* (non-Javadoc)
|
||
94 | * @see org.gvsig.catalog.CatalogManager#getDrivers()
|
||
95 | */
|
||
96 | public ICatalogServiceDriver[] getDrivers() { |
||
97 | ICatalogServiceDriver[] drivers = null; |
||
98 | ExtensionPointManager extensionPointManager = ToolsLocator |
||
99 | .getExtensionPointManager(); |
||
100 | ExtensionPoint extensionPoint = extensionPointManager.add(DRIVER_REGISTER_NAME); |
||
101 | drivers = new ICatalogServiceDriver[extensionPoint.getCount()];
|
||
102 | 144 | dmartinezizquierdo | Iterator extensions = extensionPoint.iterator();
|
103 | int i = 0; |
||
104 | 55 | jbadia | while (extensions.hasNext()){
|
105 | ExtensionPoint.Extension extension = (ExtensionPoint.Extension)extensions.next(); |
||
106 | ICatalogServiceDriver driver; |
||
107 | try {
|
||
108 | driver = (ICatalogServiceDriver)extension.create(); |
||
109 | 144 | dmartinezizquierdo | drivers[i] = driver; |
110 | 55 | jbadia | } catch (InstantiationException e) { |
111 | logger.error("Impossible to create a catalog driver", e);
|
||
112 | } catch (IllegalAccessException e) { |
||
113 | logger.error("Impossible to create a catalog driver", e);
|
||
114 | 144 | dmartinezizquierdo | } |
115 | |||
116 | 55 | jbadia | i++; |
117 | } |
||
118 | return drivers;
|
||
119 | } |
||
120 | |||
121 | /* (non-Javadoc)
|
||
122 | * @see org.gvsig.catalog.CatalogManager#register(java.lang.String, java.lang.Class)
|
||
123 | */
|
||
124 | public void register(String name, Class driver) { |
||
125 | ExtensionPointManager extensionPointManager = ToolsLocator |
||
126 | .getExtensionPointManager(); |
||
127 | ExtensionPoint extensionPoint = extensionPointManager.add(DRIVER_REGISTER_NAME); |
||
128 | extensionPoint.append(name.toLowerCase(), "", driver);
|
||
129 | } |
||
130 | |||
131 | /* (non-Javadoc)
|
||
132 | * @see org.gvsig.catalog.CatalogManager#addRecord(org.gvsig.catalog.schemas.Record)
|
||
133 | */
|
||
134 | public void addRecord(Record record) { |
||
135 | 144 | dmartinezizquierdo | records.add(record); |
136 | 55 | jbadia | } |
137 | |||
138 | /* (non-Javadoc)
|
||
139 | * @see org.gvsig.catalog.CatalogManager#createRecord(java.net.URI, org.gvsig.catalog.metadataxml.XMLNode)
|
||
140 | */
|
||
141 | public Record createRecord(URI uri, XMLNode node) { |
||
142 | for (int i=0 ; i<records.size() ; i++){ |
||
143 | Record record = (Record)records.get(i); |
||
144 | if (node != null){ |
||
145 | if (record.accept(uri, node)){
|
||
146 | Object[] values = {uri, node}; |
||
147 | 144 | dmartinezizquierdo | Class[] types = {URI.class, XMLNode.class}; |
148 | 55 | jbadia | try {
|
149 | return (Record)record.getClass().getConstructor(types).newInstance(values);
|
||
150 | } catch (Exception e) { |
||
151 | 144 | dmartinezizquierdo | //It the instance can be created the
|
152 | 55 | jbadia | //default record has to be returned
|
153 | 144 | dmartinezizquierdo | } |
154 | } |
||
155 | 55 | jbadia | } |
156 | } |
||
157 | 144 | dmartinezizquierdo | return new UnknownRecord(uri,node); |
158 | 55 | jbadia | } |
159 | |||
160 | /* (non-Javadoc)
|
||
161 | * @see org.gvsig.catalog.CatalogManager#addLayerLoader(java.lang.String, java.lang.Class)
|
||
162 | */
|
||
163 | public void addLayerLoader(String key, Class loader) { |
||
164 | 144 | dmartinezizquierdo | loadersPool.put(key, loader); |
165 | 55 | jbadia | } |
166 | |||
167 | /* (non-Javadoc)
|
||
168 | * @see org.gvsig.catalog.CatalogManager#getLayerLoader(org.gvsig.catalog.schemas.Resource)
|
||
169 | */
|
||
170 | public LayerLoader getLayerLoader(Resource resource)
|
||
171 | throws IllegalArgumentException, SecurityException, |
||
172 | InstantiationException, IllegalAccessException, |
||
173 | InvocationTargetException, NoSuchMethodException { |
||
174 | if (loadersPool.containsKey(resource.getType())) {
|
||
175 | Class llClass = (Class) loadersPool.get(resource.getType()); |
||
176 | Class [] args = {Resource.class}; |
||
177 | Object [] params = {resource}; |
||
178 | return (LayerLoader) llClass.getConstructor(args).newInstance(params);
|
||
179 | } |
||
180 | return null; |
||
181 | } |
||
182 | |||
183 | 144 | dmartinezizquierdo | @Override
|
184 | public Map<String,ServerData> getServersPersistence() { |
||
185 | return serversPersistence;
|
||
186 | } |
||
187 | |||
188 | @Override
|
||
189 | public void setServersPersistence(Map<String,ServerData> serversPersistence) { |
||
190 | this.serversPersistence=serversPersistence;
|
||
191 | } |
||
192 | |||
193 | 55 | jbadia | } |