Revision 527 2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.impl/src/main/java/org/gvsig/view3d/swing/impl/DefaultSynchronizer.java

View differences:

DefaultSynchronizer.java
63 63
    private DefaultMapControl3D mapControl3D;
64 64
    private MapContext mapContext;
65 65
    private WorldWindow wwd;
66
    
67
    private Object synchronizingLayerLock = new Object();
66 68

  
67 69
    protected DefaultSynchronizer(DefaultMapControl3D theMapControl3D,
68 70
        MapContext theMapContext, WorldWindow wwd) {
......
272 274

  
273 275
        View3DManager manager = View3DLocator.getManager();
274 276
        LayerProperties3D layerProperties = manager.getLayerProperties(layer);
277
        synchronized (synchronizingLayerLock) {
278
            if (layerProperties.getElevation() == true) {
275 279

  
276
        if (layerProperties.getElevation() == true) {
280
                if (tiledlayerRegister.containsKey(layer)) {
281
                    tiledlayerRegister.remove(layer);
282
                }
277 283

  
278
            if (tiledlayerRegister.containsKey(layer)) {
279
                tiledlayerRegister.remove(layer);
280
            }
281
            
282
            if(elevationModelLayerRegister.containsKey(layer) || status == LAYER_SYNCHRONIZE_STATUS.ADD){
283
                elevationModelLayerRegister.put(layer, status);
284
            }
285
        } else {
284
                if (elevationModelLayerRegister.containsKey(layer)
285
                    || status == LAYER_SYNCHRONIZE_STATUS.ADD) {
286
                    elevationModelLayerRegister.put(layer, status);
287
                }
288
            } else {
286 289

  
287
            if (elevationModelLayerRegister.containsKey(layer)) {
288
                elevationModelLayerRegister.remove(layer);
290
                if (elevationModelLayerRegister.containsKey(layer)) {
291
                    elevationModelLayerRegister.remove(layer);
292
                }
293
                if (tiledlayerRegister.containsKey(layer)
294
                    || status == LAYER_SYNCHRONIZE_STATUS.ADD) {
295
                    tiledlayerRegister.put(layer, status);
296
                }
289 297
            }
290
            if(tiledlayerRegister.containsKey(layer) || status == LAYER_SYNCHRONIZE_STATUS.ADD){
291
                tiledlayerRegister.put(layer, status);
292
            }
293 298
        }
294 299
    }
295 300

  
......
297 302

  
298 303
        List<FLayer> removedLayers = new ArrayList<FLayer>();
299 304

  
300
        synchronized (tiledlayerRegister) {
301

  
305
        synchronized (synchronizingLayerLock) {
302 306
            // Synchronize tiledImageLayers
303 307
            for (Entry<FLayer, LAYER_SYNCHRONIZE_STATUS> entry : tiledlayerRegister
304 308
                .entrySet()) {
......
324 328
                    break;
325 329
                }
326 330
            }
327
        }
328 331

  
329
        synchronized (elevationModelLayerRegister) {
330 332
            // Synchronize elevationModelLayerRegister
331 333
            for (Entry<FLayer, LAYER_SYNCHRONIZE_STATUS> entry : elevationModelLayerRegister
332 334
                .entrySet()) {
......
352 354
                    break;
353 355
                }
354 356
            }
355
        }
356 357

  
357
        for (FLayer fLayer : removedLayers) {
358
            if (tiledlayerRegister.containsKey(fLayer)) {
359
                tiledlayerRegister.remove(fLayer);
360
                break;
361
            } else if (elevationModelLayerRegister.containsKey(fLayer)) {
362
                elevationModelLayerRegister.remove(fLayer);
363
                break;
358
            for (FLayer fLayer : removedLayers) {
359
                if (tiledlayerRegister.containsKey(fLayer)) {
360
                    tiledlayerRegister.remove(fLayer);
361
                    break;
362
                } else if (elevationModelLayerRegister.containsKey(fLayer)) {
363
                    elevationModelLayerRegister.remove(fLayer);
364
                    break;
365
                }
364 366
            }
365 367
        }
366 368
    }

Also available in: Unified diff