Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libGPE / src / org / gvsig / gpe / impl / DefaultGPEManager.java @ 28113

History | View | Annotate | Download (12.3 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
 * 2009 {Iver T.I.}   {Task}
26
 */
27

    
28
package org.gvsig.gpe.impl;
29

    
30
import java.io.File;
31
import java.io.FileInputStream;
32
import java.io.FileNotFoundException;
33
import java.io.IOException;
34
import java.net.URI;
35
import java.util.ArrayList;
36
import java.util.Enumeration;
37
import java.util.Hashtable;
38
import java.util.Iterator;
39
import java.util.Properties;
40

    
41
import org.gvsig.gpe.GPEManager;
42
import org.gvsig.gpe.exceptions.ParserCreationException;
43
import org.gvsig.gpe.exceptions.ParserFileNotSupportedException;
44
import org.gvsig.gpe.exceptions.ParserMimetypeNotSupportedException;
45
import org.gvsig.gpe.exceptions.ParserNotRegisteredException;
46
import org.gvsig.gpe.exceptions.WriterHandlerCreationException;
47
import org.gvsig.gpe.exceptions.WriterHandlerMimeTypeNotSupportedException;
48
import org.gvsig.gpe.exceptions.WriterHandlerNotRegisteredException;
49
import org.gvsig.gpe.parser.GPEParser;
50
import org.gvsig.gpe.writer.GPEWriterHandler;
51
import org.gvsig.gpe.writer.GPEWriterHandlerImplementor;
52
import org.gvsig.gpe.writer.IGPEWriterHandlerImplementor;
53

    
54
/**
55
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
56
 */
57
public class DefaultGPEManager implements GPEManager {
58
        private Hashtable parsers = new Hashtable();
59
        private Hashtable writers = new Hashtable();
60
        private Properties properties = new Properties();
61

    
62
        /*
63
         * (non-Javadoc)
64
         * @see org.gvsig.gpe.GPEManager#addGpeParser(java.lang.String, java.lang.String, java.lang.Class)
65
         */
66
        public void addGpeParser(String name, String description,Class clazz) throws ParserNotRegisteredException { 
67
                try{
68
                        if (clazz != null){
69
                                GPEParser parser = (GPEParser)clazz.getConstructor(null).newInstance(null);
70
                                parsers.put(name, parser);
71
                        }        
72
                }catch (Exception e){
73
                        throw new ParserNotRegisteredException(clazz.getName());
74
                }
75
        }
76

    
77
        /*
78
         * (non-Javadoc)
79
         * @see org.gvsig.gpe.GPEManager#addGpeParser(java.lang.Class)
80
         */        
81
        public void addGpeParser(Class clazz) throws ParserNotRegisteredException { 
82
                try{
83
                        if (clazz != null){
84
                                GPEParser parser = (GPEParser)clazz.getConstructor(null).newInstance(null);
85
                                parsers.put(parser.getName(), parser);
86
                        }        
87
                }catch (Exception e){
88
                        throw new ParserNotRegisteredException(clazz.getName());
89
                }
90
        }
91

    
92
        /*
93
         * (non-Javadoc)
94
         * @see org.gvsig.gpe.GPEManager#addParsersFile(java.io.File)
95
         */
96
        public void addParsersFile(File file) throws FileNotFoundException, IOException{
97
                if (!file.exists()){
98
                        return;
99
                }
100
                Properties properties = new Properties();
101
                properties.load(new FileInputStream(file));
102
                for (Enumeration e = properties.keys(); e.hasMoreElements() ; ) {
103
                        String key = e.nextElement().toString();
104
                        Class clazz;
105
                        try {
106
                                clazz = Class.forName(properties.getProperty(key).toString());
107
                                addGpeParser(clazz);
108
                        } catch (ClassNotFoundException ex) {
109
                                //Next class
110
                        } catch (ParserNotRegisteredException ex) {
111
                                //Next class
112
                        }             
113
                }
114
        }        
115

    
116
        /*
117
         * (non-Javadoc)
118
         * @see org.gvsig.gpe.GPEManager#addWritersFile(java.io.File)
119
         */
120
        public void addWritersFile(File file) throws FileNotFoundException, IOException{
121
                if (!file.exists()){
122
                        return;
123
                }
124
                Properties properties = new Properties();
125
                properties.load(new FileInputStream(file));
126
                for (Enumeration e = properties.keys(); e.hasMoreElements() ; ) {
127
                        String key = e.nextElement().toString();
128
                        Class clazz;
129
                        try {
130
                                clazz = Class.forName(properties.getProperty(key).toString());
131
                                addGpeWriterHandler(clazz);
132
                        } catch (ClassNotFoundException ex){
133
                                //Next class
134
                        } catch (WriterHandlerNotRegisteredException ex){
135
                                //Next class
136
                        }                    
137
                }
138
        }
139

    
140
        /*
141
         * (non-Javadoc)
142
         * @see org.gvsig.gpe.GPEManager#getAllParsers()
143
         */
144
        public GPEParser[] getAllParsers(){
145
                GPEParser[] auxParsers = new GPEParser[parsers.size()];
146
                Iterator it = parsers.keySet().iterator();
147
                int i=0;
148
                while (it.hasNext()){
149
                        String key = (String)it.next();
150
                        auxParsers[i] = (GPEParser)parsers.get(key);
151
                        i++;
152
                }
153
                return auxParsers;
154
        }
155

    
156
        /*
157
         * (non-Javadoc)
158
         * @see org.gvsig.gpe.GPEManager#addGpeWriterHandler(java.lang.String, java.lang.String, java.lang.Class)
159
         */
160
        public void addGpeWriterHandler(String name, String description,Class clazz) throws WriterHandlerNotRegisteredException {
161
                try{
162
                        if (clazz != null){
163
                                GPEWriterHandlerImplementor writerImplementor = (GPEWriterHandlerImplementor)clazz.getConstructor(null).newInstance(null);
164
                                writers.put(name, writerImplementor);
165
                        }
166
                }catch (Exception e){
167
                        throw new WriterHandlerNotRegisteredException(clazz.getName());
168
                }
169
        }
170

    
171
        /*
172
         * (non-Javadoc)
173
         * @see org.gvsig.gpe.GPEManager#addGpeWriterHandler(java.lang.Class)
174
         */
175
        public void addGpeWriterHandler(Class clazz) throws WriterHandlerNotRegisteredException {
176
                try{
177
                        if (clazz != null){
178
                                GPEWriterHandlerImplementor writerImplementor = (GPEWriterHandlerImplementor)clazz.getConstructor(null).newInstance(null);
179
                                writers.put(writerImplementor.getName(), writerImplementor);
180
                        }
181
                }catch (Exception e){
182
                        throw new WriterHandlerNotRegisteredException(clazz.getName());
183
                }
184
        }
185

    
186
        /*
187
         * (non-Javadoc)
188
         * @see org.gvsig.gpe.GPEManager#createParser(java.lang.String)
189
         */
190
        public GPEParser createParser(String name) throws ParserCreationException  {
191
                Object parser =  parsers.get(name);
192
                if (parser != null){
193
                        return createNewParser((GPEParser)parser);
194
                }else{
195
                        Exception e = new ParserNotRegisteredException(name);
196
                        throw new ParserCreationException(e);
197
                }
198
        }
199

    
200
        private GPEParser createNewParser(GPEParser parser) throws ParserCreationException{
201
                try{
202
                        return (GPEParser)parser.getClass().getConstructor(null).newInstance(null);
203
                }catch (Exception e) {
204
                        throw new ParserCreationException(e);
205
                }                
206
        }
207

    
208
        /* (non-Javadoc)
209
         * @see org.gvsig.gpe.GPEManager#createParserByClass(java.lang.String)
210
         */
211
        public GPEParser createParserByClass(String prefferredImplClassName)
212
        throws ParserCreationException {
213
                Iterator it = parsers.keySet().iterator();
214
                int i=0;
215
                while (it.hasNext()){
216
                        String key = (String)it.next();
217
                        GPEParser parser = (GPEParser)parsers.get(key);
218
                        if (parser.getClass().getName().equals(prefferredImplClassName)){
219
                                return createNewParser(parser);
220
                        }
221
                }
222
                throw new ParserNotRegisteredException(prefferredImplClassName) ;
223
        }
224

    
225
        /*
226
         * (non-Javadoc)
227
         * @see org.gvsig.gpe.GPEManager#createParser(java.net.URI)
228
         */
229
        public GPEParser createParser(URI uri) throws ParserCreationException {
230
                Iterator keys = parsers.keySet().iterator();
231
                while (keys.hasNext()){
232
                        String key = (String)keys.next();
233
                        GPEParser parser = (GPEParser)parsers.get(key);
234
                        if (parser.accept(uri)){
235
                                return createNewParser(parser);
236
                        }
237
                }
238
                throw new ParserFileNotSupportedException(uri);
239
        }        
240

    
241
        /* (non-Javadoc)
242
         * @see org.gvsig.gpe.GPEManager#createParserByMimeType(java.lang.String)
243
         */
244
        public GPEParser createParserByMimeType(String mimeType)
245
        throws ParserCreationException {
246
                Iterator it = parsers.keySet().iterator();
247
                int i=0;
248
                while (it.hasNext()){
249
                        String key = (String)it.next();
250
                        GPEParser parser = (GPEParser)parsers.get(key);
251
                        if (parser.getFormat().equals(mimeType)){
252
                                return createNewParser(parser);
253
                        }
254
                }
255
                throw new ParserMimetypeNotSupportedException(mimeType);
256
        }
257

    
258
        /*
259
         * (non-Javadoc)
260
         * @see org.gvsig.gpe.GPEManager#createWriter(java.lang.String)
261
         */
262
        public GPEWriterHandler createWriter(String name) throws WriterHandlerCreationException{
263
                Object writer =  writers.get(name);
264
                if (writer != null){
265
                        return createNewWriterHandler((IGPEWriterHandlerImplementor)writer);
266
                }else{
267
                        Exception e = new WriterHandlerNotRegisteredException(name);
268
                        throw new WriterHandlerCreationException(e);
269
                }
270
        }
271

    
272
        /* (non-Javadoc)
273
         * @see org.gvsig.gpe.GPEManager#createWriterByClass(java.lang.String)
274
         */
275
        public GPEWriterHandler createWriterByClass(String prefferredImplClassName)
276
        throws WriterHandlerCreationException {
277
                Iterator it = writers.keySet().iterator();
278
                ArrayList possibleWriters = new ArrayList();
279
                while (it.hasNext()){
280
                        String key = (String)it.next();
281
                        IGPEWriterHandlerImplementor implementor = (IGPEWriterHandlerImplementor)writers.get(key);
282
                        if (implementor.getClass().getName().equals(prefferredImplClassName)){
283
                                return createNewWriterHandler(implementor);
284
                        }
285
                }
286
                throw new WriterHandlerNotRegisteredException(prefferredImplClassName);
287
        }
288

    
289
        /* (non-Javadoc)
290
         * @see org.gvsig.gpe.GPEManager#createWriterByMimeType(java.lang.String)
291
         */
292
        public GPEWriterHandler createWriterByMimeType(String mimeType)
293
        throws WriterHandlerCreationException {
294
                Iterator it = writers.keySet().iterator();
295
                ArrayList possibleWriters = new ArrayList();
296
                while (it.hasNext()){
297
                        String key = (String)it.next();
298
                        IGPEWriterHandlerImplementor implementor = (IGPEWriterHandlerImplementor)writers.get(key);
299
                        if (implementor.getFormat().equals(mimeType)){
300
                                return createNewWriterHandler(implementor);
301
                        }
302
                }
303
                throw new WriterHandlerMimeTypeNotSupportedException(mimeType);
304
        }
305

    
306
        private GPEWriterHandler createNewWriterHandler(IGPEWriterHandlerImplementor gpeWriterHandlerImplementor) throws WriterHandlerCreationException{
307
                try{
308
                        GPEWriterHandlerImplementor writerImplementor = (GPEWriterHandlerImplementor)gpeWriterHandlerImplementor.getClass().getConstructor(null).newInstance(null);
309
                        return new GPEWriterHandler(writerImplementor);                        
310
                }catch (Exception e) {
311
                        throw new WriterHandlerCreationException(e);
312
                }
313
        }
314

    
315
        /*
316
         * (non-Javadoc)
317
         * @see org.gvsig.gpe.GPEManager#getWriterHandlerByFormat(java.lang.String)
318
         */
319
        public ArrayList getWriterHandlerByFormat(String format){
320
                Iterator it = writers.keySet().iterator();
321
                ArrayList possibleWriters = new ArrayList();
322
                while (it.hasNext()){
323
                        String key = (String)it.next();
324
                        IGPEWriterHandlerImplementor implementor = (IGPEWriterHandlerImplementor)writers.get(key);
325
                        if (format.toLowerCase().compareTo(format.toLowerCase()) == 0){
326
                                possibleWriters.add(new GPEWriterHandler(implementor));
327
                        }
328
                }
329
                return possibleWriters;
330
        }
331

    
332
        /*
333
         * (non-Javadoc)
334
         * @see org.gvsig.gpe.GPEManager#accept(java.net.URI)
335
         */
336
        public boolean accept(URI uri){
337
                Iterator keys = parsers.keySet().iterator();
338
                while (keys.hasNext()){
339
                        GPEParser parser = (GPEParser)parsers.get(keys.next());
340
                        if (parser.accept(uri)){
341
                                return true;
342
                        }
343
                }
344
                return false;
345
        }
346

    
347
        /*
348
         * (non-Javadoc)
349
         * @see org.gvsig.gpe.GPEManager#getKeys()
350
         */
351
        public Iterator getKeys(){
352
                return properties.keySet().iterator();
353
        }
354

    
355
        /*
356
         * (non-Javadoc)
357
         * @see org.gvsig.gpe.GPEManager#getStringProperty(java.lang.String)
358
         */
359
        public String getStringProperty(String key){
360
                Object obj = getProperty(key);
361
                if (obj == null){
362
                        return null;
363
                }
364
                return (String)obj;
365
        }
366

    
367
        /*
368
         * (non-Javadoc)
369
         * @see org.gvsig.gpe.GPEManager#getIntPropertyProperty(java.lang.String)
370
         */
371
        public int getIntPropertyProperty(String key){
372
                Object obj = getProperty(key);
373
                if (obj == null){
374
                        return -1;
375
                }
376
                if (obj instanceof Integer){
377
                        return ((Integer)obj).intValue();
378
                }return -1;
379
        }
380

    
381
        /*
382
         * (non-Javadoc)
383
         * @see org.gvsig.gpe.GPEManager#getBooleanProperty(java.lang.String)
384
         */
385
        public boolean getBooleanProperty(String key){
386
                Object obj = getProperty(key);
387
                if (obj == null){
388
                        return false;
389
                }
390
                if (obj instanceof Boolean){
391
                        return ((Boolean)obj).booleanValue();
392
                }return false;
393
        }
394

    
395
        /*
396
         * (non-Javadoc)
397
         * @see org.gvsig.gpe.GPEManager#getProperty(java.lang.String)
398
         */
399
        public Object getProperty(String key){
400
                return properties.get(key);
401
        }
402

    
403
        /*
404
         * (non-Javadoc)
405
         * @see org.gvsig.gpe.GPEManager#setProperty(java.lang.String, java.lang.Object)
406
         */
407
        public void setProperty(String key, Object value){
408
                properties.put(key, value);
409
        }        
410
}
411