Revision 43780 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/impl/DefaultMapContextManager.java

View differences:

DefaultMapContextManager.java
35 35
import java.util.Collections;
36 36
import java.util.HashMap;
37 37
import java.util.Iterator;
38
import java.util.LinkedHashMap;
38 39
import java.util.List;
39 40
import java.util.Map;
40 41
import org.apache.commons.lang3.StringUtils;
......
96 97

  
97 98
    private Class drawerClazz = DefaultMapContextDrawer.class;
98 99

  
99
    private Map legends = Collections.synchronizedMap(new HashMap());
100
    private final Map legends = new HashMap();
100 101

  
101
    private Map legendReaders = Collections.synchronizedMap(new HashMap());
102
    private final Map<String, Class<ILegendReader>> legendReaders = new LinkedHashMap<>();
102 103

  
103
    private Map legendWriters = Collections.synchronizedMap(new HashMap());
104
    private final Map<String, Map<Class<ILegend>,Class<ILegendWriter>>> legendWriters = new LinkedHashMap<>();
104 105

  
105 106
    private String defaultVectorLegend;
106 107

  
......
325 326

  
326 327
    // =============================================================
327 328
    // Legend reading/writing
329

  
330
    private Map<Class<ILegend>,Class<ILegendWriter>> getLegendWritersForFormat(String format) {
331
        synchronized(legendWriters) {
332
            return legendWriters.get(format);
333
        }
334
    }
335

  
336
    private Class<ILegendReader> getLegendReaderForFormat(String format) {
337
        synchronized(legendReaders) {
338
            return legendReaders.get(format);
339
        }
340
    }
341

  
342
    @Override
343
    public List<String> getLegendReadingFormats() {
344
        synchronized(legendReaders) {
345
            List<String> resp = new ArrayList();
346
            resp.addAll(legendReaders.keySet());
347
            return resp;
348
        }
349
    }
350

  
351
    @Override
352
    public List<String> getLegendWritingFormats() {
353
        synchronized(legendWriters) {
354
            List<String> resp = new ArrayList();
355
            resp.addAll(legendWriters.keySet());
356
            return resp;
357
        }
358
    }
359
    
360
    @Override
328 361
    public void registerLegendReader(String format, Class readerClass)
329 362
            throws MapContextRuntimeException {
330 363
        if (readerClass == null
......
332 365
            throw new InvalidRegisteredClassException(ILegendReader.class,
333 366
                    readerClass, format);
334 367
        }
335

  
336
        legendReaders.put(format, readerClass);
368
        synchronized (legendReaders) {
369
            legendReaders.put(format, readerClass);
370
        }
337 371
        notifyObservers(REGISTER_LEGEND_READER, format, readerClass);
338 372
    }
339 373

  
340
    public ILegendReader createLegendReader(String format)
341
            throws MapContextRuntimeException {
342
        Class legendReaderClazz = (Class) legendReaders.get(format);
343

  
344
        if (legendReaderClazz != null) {
345
            try {
346
                ILegendReader reader = (ILegendReader) legendReaderClazz.newInstance();
347
                return (ILegendReader) notifyObservers(CREATE_LEGEND_READER, reader).getValue();
348
            } catch (InstantiationException e) {
349
                throw new RegisteredClassInstantiationException(
350
                        ILegendReader.class, legendReaderClazz, format, e);
351
            } catch (IllegalAccessException e) {
352
                throw new RegisteredClassInstantiationException(
353
                        ILegendReader.class, legendReaderClazz, format, e);
354
            }
355
        }
356
        return null;
357
    }
358

  
374
    @Override
359 375
    public void registerLegendWriter(Class legendClass, String format,
360 376
            Class writerClass) throws MapContextRuntimeException {
361
        if (writerClass == null
377
        if (writerClass == null || legendClass == null
362 378
                || !ILegendWriter.class.isAssignableFrom(writerClass)
363
                || legendClass == null
364 379
                || !ILegend.class.isAssignableFrom(legendClass)) {
365 380

  
366 381
            throw new InvalidRegisteredClassException(ILegendWriter.class,
......
368 383
                            legendClass == null ? "Null" : legendClass.getName()));
369 384
        }
370 385

  
371
        Map legendFormatWriters = (Map) legendWriters.get(format);
372

  
373 386
        synchronized (legendWriters) {
374
            if (legendFormatWriters == null) {
375
                legendFormatWriters = Collections.synchronizedMap(new HashMap());
376
                legendWriters.put(format, legendFormatWriters);
387
            Map<Class<ILegend>, Class<ILegendWriter>> legendWriterOfFormat = legendWriters.get(format);
388
            if (legendWriterOfFormat == null) {
389
                legendWriterOfFormat = new LinkedHashMap();
390
                legendWriters.put(format, legendWriterOfFormat);
377 391
            }
392
            legendWriterOfFormat.put(legendClass, writerClass);
378 393
        }
379
        legendFormatWriters.put(legendClass, writerClass);
380 394
        notifyObservers(REGISTER_LEGEND_WRITER, format, writerClass);
381 395
    }
382 396

  
397
    @Override
398
    public ILegendReader createLegendReader(String format)
399
            throws MapContextRuntimeException {
400
        Class<ILegendReader> legendReaderClazz = getLegendReaderForFormat(format);
401

  
402
        if (legendReaderClazz != null) {
403
            try {
404
                ILegendReader reader = (ILegendReader) legendReaderClazz.newInstance();
405
                return (ILegendReader) notifyObservers(CREATE_LEGEND_READER, reader).getValue();
406
            } catch (InstantiationException|IllegalAccessException e) {
407
                throw new RegisteredClassInstantiationException(
408
                        ILegendReader.class, legendReaderClazz, format, e);
409
            }
410
        }
411
        return null;
412
    }
413

  
414
    @Override
383 415
    public ILegendWriter createLegendWriter(Class legendClass, String format)
384 416
            throws MapContextRuntimeException {
385 417

  
......
387 419
            return null;
388 420
        }
389 421

  
390
        Map legendFormatWriters = getLegendWritersForFormat(format);
422
        Map<Class<ILegend>, Class<ILegendWriter>> legendFormatWriters = getLegendWritersForFormat(format);
391 423

  
392 424
        if (legendFormatWriters != null) {
393
            Class legendWriterClazz = (Class) legendFormatWriters
394
                    .get(legendClass);
395

  
425
            Class<ILegendWriter> legendWriterClazz = legendFormatWriters.get(legendClass);
396 426
            if (legendWriterClazz != null) {
397 427
                /*
398 428
                 * Found exact match
......
400 430
                try {
401 431
                    ILegendWriter writer = (ILegendWriter) legendWriterClazz.newInstance();
402 432
                    return (ILegendWriter) notifyObservers(CREATE_LEGEND_READER, writer).getValue();
403
                } catch (InstantiationException e) {
433
                } catch (InstantiationException|IllegalAccessException e) {
404 434
                    throw new RegisteredClassInstantiationException(
405
                            ILegendWriter.class, legendWriterClazz, format
406
                            .concat("-").concat(
407
                                    legendClass == null ? "Null" : legendClass.getName()), e);
408
                } catch (IllegalAccessException e) {
409
                    throw new RegisteredClassInstantiationException(
410
                            ILegendWriter.class, legendWriterClazz, format
411
                            .concat("-").concat(
412
                                    legendClass == null ? "Null" : legendClass.getName()), e);
435
                            ILegendWriter.class, 
436
                            legendWriterClazz,
437
                            format.concat("-").concat(legendClass.getName()), 
438
                            e
439
                    );
413 440
                }
414 441
            } else {
415 442
                /*
......
425 452
        return null;
426 453
    }
427 454

  
428
    private ILegendWriter getSuperClassLegendWriter(Map clsToWtr, Class legclass)
455
    private ILegendWriter getSuperClassLegendWriter(Map<Class<ILegend>, Class<ILegendWriter>> clsToWtr, Class<ILegend> legclass)
429 456
            throws Exception {
430 457

  
431
        if (!ILegend.class.isAssignableFrom(legclass)) {
432
            // Class is not a legend
433
            return null;
434
        }
435

  
436 458
        Iterator kiter = clsToWtr.keySet().iterator();
437 459
        Object oitem = null;
438 460
        Class citem = null;
......
455 477
        return null;
456 478
    }
457 479

  
458
    private Map getLegendWritersForFormat(String format) {
459
        return (Map) legendWriters.get(format);
460
    }
461

  
462
    public List getLegendReadingFormats() {
463
        List resp = new ArrayList();
464
        Iterator iter = legendReaders.keySet().iterator();
465
        while (iter.hasNext()) {
466
            resp.add(iter.next());
467
        }
468
        return resp;
469
    }
470

  
471
    public List getLegendWritingFormats() {
472
        List resp = new ArrayList();
473
        Iterator iter = legendWriters.keySet().iterator();
474
        while (iter.hasNext()) {
475
            resp.add(iter.next());
476
        }
477
        return resp;
478
    }
479 480
    // =============================================================
480 481

  
481 482
    public IMultiLayerSymbol createMultiLayerSymbol(int shapeType)

Also available in: Unified diff