Revision: 5919
          http://sourceforge.net/p/jump-pilot/code/5919
Author:   michaudm
Date:     2018-08-22 06:49:20 +0000 (Wed, 22 Aug 2018)
Log Message:
-----------
Fix LayerView to make it compatible with project persistence

Modified Paths:
--------------
    core/trunk/ChangeLog
    core/trunk/src/com/vividsolutions/jump/workbench/model/LayerView.java
    core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerNameRenderer.java
    
core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/AddNewLayerViewPlugIn.java
    core/trunk/src/org/openjump/core/ui/plugin/file/open/OpenProjectWizard.java

Added Paths:
-----------
    core/trunk/src/com/vividsolutions/jump/workbench/model/LayerView.java2xml

Modified: core/trunk/ChangeLog
===================================================================
--- core/trunk/ChangeLog        2018-08-21 20:33:57 UTC (rev 5918)
+++ core/trunk/ChangeLog        2018-08-22 06:49:20 UTC (rev 5919)
@@ -3,6 +3,9 @@
 # 2. make sure that lines break at 80 chars for constricted display situations
 #<-------------------------------- 80 chars 
---------------------------------->#
 
+2018-08-22 mmichaud <m.michael.mich...@orange.fr>
+  * Fix LayerView to make it compatible with project persistence
+
 2018-08-19 mmichaud <m.michael.mich...@orange.fr>
   * Add two plugins :
     - GenerateUniqueRandomIdPlugIn (menu tools/edit attributes)

Modified: core/trunk/src/com/vividsolutions/jump/workbench/model/LayerView.java
===================================================================
--- core/trunk/src/com/vividsolutions/jump/workbench/model/LayerView.java       
2018-08-21 20:33:57 UTC (rev 5918)
+++ core/trunk/src/com/vividsolutions/jump/workbench/model/LayerView.java       
2018-08-22 06:49:20 UTC (rev 5919)
@@ -1,7 +1,8 @@
 package com.vividsolutions.jump.workbench.model;
 
-import com.vividsolutions.jump.feature.FeatureCollection;
+import com.vividsolutions.jump.feature.*;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
 public class LayerView extends Layer {
@@ -8,16 +9,44 @@
 
   private Layer layer;
 
-  public LayerView(Layer layer) {
-    super(layer.getName(), layer.getBasicStyle().getFillColor(), 
layer.getFeatureCollectionWrapper(), layer.getLayerManager());
+  /**
+   * Called by Java2XML
+   */
+  public LayerView() {
+  }
+
+  // 2018-08-22 : add layerName attribute (original name of the underlying 
layer)
+  // to increase compatibility with java2xml and to make it possible to build 
the
+  // LayerView from the xml project file before the underlying Layer is 
completely
+  // initialized
+  String layerName;
+  public String getLayerName() {
+    return layerName;
+  }
+  public void setLayerName(String layerName) {
+    this.layerName = layerName;
+  }
+
+  @Override
+  public void setLayerManager(LayerManager layerManager) {
+    super.setLayerManager(layerManager);
+    this.layer = layerManager.getLayer(getLayerName());
+  }
+
+  public LayerView(final String layerName, LayerManager layerManager) {
+    super(layerName,
+            layerManager.generateLayerFillColor(),
+            layerManager.getLayer(layerName).getFeatureCollectionWrapper(),
+            layerManager);
+    this.layerName = layerName;
+    this.layer = layerManager.getLayer(layerName);
     boolean firingEvents = getLayerManager().isFiringEvents();
     getLayerManager().setFiringEvents(false);
     try {
-      setName(getName().replaceAll(layer.getName(),"").trim());
+      setName(getName().replaceAll(this.layer.getName(),"").trim());
     } finally {
       getLayerManager().setFiringEvents(firingEvents);
     }
-    this.layer = layer;
   }
 
 
@@ -43,6 +72,28 @@
     super.setFeatureCollectionWrapper(observableFeatureCollection);
   }
 
+
+  @Override
+  public FeatureCollectionWrapper getFeatureCollectionWrapper() {
+    // When the LayerView is build from the project xml file, it may be built
+    // before underlying Layer is defined...
+    if (layer != null) {
+      return layer.getFeatureCollectionWrapper();
+    } else {
+      // ... in this case, try again to load data from the underlying Layer
+      // next time the application need to display the data.
+      this.layer = getLayerManager().getLayer(layerName);
+      if (this.layer != null) {
+        return layer.getFeatureCollectionWrapper();
+      } else {
+        return new ObservableFeatureCollection(
+                FeatureDatasetFactory.createFromGeometry(new 
ArrayList<Feature>())
+        );
+      }
+    }
+  }
+
+
   public Layer getLayer() {
     return layer;
   }

Added: core/trunk/src/com/vividsolutions/jump/workbench/model/LayerView.java2xml
===================================================================
--- core/trunk/src/com/vividsolutions/jump/workbench/model/LayerView.java2xml   
                        (rev 0)
+++ core/trunk/src/com/vividsolutions/jump/workbench/model/LayerView.java2xml   
2018-08-22 06:49:20 UTC (rev 5919)
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<root>
+  <attribute xml-name="layerName" java-name="layerName"/>
+  <attribute xml-name="name" java-name="name"/>
+  <attribute xml-name="visible" java-name="visible"/>
+  <attribute xml-name="editable" java-name="editable"/>
+  <attribute xml-name="selectable" java-name="selectable"/>
+  <attribute xml-name="read-only" java-name="readonly"/>
+  <element xml-name="scaleDependentRendering">
+    <attribute xml-name="enabled" java-name="scaleDependentRenderingEnabled"/>
+    <element xml-name="minScale" java-name="minScale"/>
+    <element xml-name="maxScale" java-name="maxScale"/>
+  </element>
+  <element xml-name="description" java-name="description"/>
+  <!--element xml-name="data-source-query" java-name="dataSourceQuery"/-->
+  <attribute xml-name="drawnLast" java-name="drawingLast"/>
+  <attribute xml-name="synchronizedLineColor" 
java-name="synchronizingLineColor"/>
+  <element xml-name="styles">
+    <element xml-name="style" java-name="style"/>
+  </element>
+  <!--element xml-name="feature-schema-operation" 
java-name="featureSchemaOperation"/-->
+</root>
\ No newline at end of file

Modified: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerNameRenderer.java
===================================================================
--- core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerNameRenderer.java  
2018-08-21 20:33:57 UTC (rev 5918)
+++ core/trunk/src/com/vividsolutions/jump/workbench/ui/LayerNameRenderer.java  
2018-08-22 06:49:20 UTC (rev 5919)
@@ -276,8 +276,8 @@
         Layerable layerable = (Layerable) value;
         if (layerable instanceof LayerView) {
           LayerView view = (LayerView)layerable;
-          label.setText("-> " + view.getLayer().getName() + " - " +
-                  view.getName().replaceAll(view.getLayer().getName(), ""));
+          label.setText("-> " + view.getLayerName() + " - " +
+                  view.getName().replaceAll(view.getLayerName(), ""));
         } else {
           label.setText(layerable.getName());
         }

Modified: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/AddNewLayerViewPlugIn.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/AddNewLayerViewPlugIn.java
       2018-08-21 20:33:57 UTC (rev 5918)
+++ 
core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/AddNewLayerViewPlugIn.java
       2018-08-22 06:49:20 UTC (rev 5919)
@@ -16,7 +16,7 @@
     Layer[] layers = context.getLayerNamePanel().getSelectedLayers();
     if (layers.length != 1) return false;
     Layer layer = layers[0];
-    LayerView layerView = new LayerView(layer);
+    LayerView layerView = new LayerView(layer.getName(), 
layer.getLayerManager());
     int index = context.getLayerManager().getCategory(layer).indexOf(layer);
     context.getLayerManager().getCategory(layer).add(++index, layerView);
     layerView.setEditable(false);

Modified: 
core/trunk/src/org/openjump/core/ui/plugin/file/open/OpenProjectWizard.java
===================================================================
--- core/trunk/src/org/openjump/core/ui/plugin/file/open/OpenProjectWizard.java 
2018-08-21 20:33:57 UTC (rev 5918)
+++ core/trunk/src/org/openjump/core/ui/plugin/file/open/OpenProjectWizard.java 
2018-08-22 06:49:20 UTC (rev 5919)
@@ -18,6 +18,7 @@
 import javax.xml.namespace.QName;
 
 import com.vividsolutions.jump.workbench.Logger;
+import com.vividsolutions.jump.workbench.model.*;
 import org.openjump.core.ccordsys.utils.ProjUtils;
 import org.openjump.core.model.TaskEvent;
 import org.openjump.core.model.TaskListener;
@@ -45,11 +46,6 @@
 import com.vividsolutions.jump.util.java2xml.XML2Java;
 import com.vividsolutions.jump.workbench.JUMPWorkbench;
 import com.vividsolutions.jump.workbench.WorkbenchContext;
-import com.vividsolutions.jump.workbench.model.Category;
-import com.vividsolutions.jump.workbench.model.Layer;
-import com.vividsolutions.jump.workbench.model.LayerManager;
-import com.vividsolutions.jump.workbench.model.Layerable;
-import com.vividsolutions.jump.workbench.model.Task;
 import com.vividsolutions.jump.workbench.plugin.PlugInManager;
 import com.vividsolutions.jump.workbench.ui.GUIUtil;
 import com.vividsolutions.jump.workbench.ui.TaskFrame;
@@ -200,6 +196,9 @@
         List<Layer> layers = layerManager.getLayers();
         List<Layer> layersToBeRemoved = new ArrayList<>();
         for (Layer layer : layers) {
+            if (layer instanceof LayerView) {
+                continue; // no datasource for LayerView
+            }
             DataSourceQuery dataSourceQuery = layer.getDataSourceQuery();
             DataSource dataSource = dataSourceQuery.getDataSource();
             if (dataSource == null) {
@@ -299,7 +298,10 @@
                     }
                     layerable.setLayerManager(newLayerManager);
 
-                    if (layerable instanceof Layer) {
+                    if (layerable instanceof LayerView) {
+                        layerable.setLayerManager(newLayerManager);
+                    }
+                    else if (layerable instanceof Layer) {
                         Layer layer = (Layer) layerable;
                         File layerFile = getLayerFileProperty(layer);
                         if (!updateOnlyMissingResources || 
!layerFile.exists()) {


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to