Revision: 5573
          http://sourceforge.net/p/jump-pilot/code/5573
Author:   michaudm
Date:     2017-11-19 00:36:10 +0000 (Sun, 19 Nov 2017)
Log Message:
-----------
Tried to make the code a bit less verbose and more accurate

Modified Paths:
--------------
    
core/trunk/src/org/openjump/core/ui/plugin/layer/ExportLayerableEnvelopeAsGeometryPlugIn.java

Modified: 
core/trunk/src/org/openjump/core/ui/plugin/layer/ExportLayerableEnvelopeAsGeometryPlugIn.java
===================================================================
--- 
core/trunk/src/org/openjump/core/ui/plugin/layer/ExportLayerableEnvelopeAsGeometryPlugIn.java
       2017-11-18 11:57:24 UTC (rev 5572)
+++ 
core/trunk/src/org/openjump/core/ui/plugin/layer/ExportLayerableEnvelopeAsGeometryPlugIn.java
       2017-11-19 00:36:10 UTC (rev 5573)
@@ -7,6 +7,13 @@
 
 import javax.swing.Icon;
 
+import com.vividsolutions.jump.io.datasource.Connection;
+import com.vividsolutions.jump.parameter.ParameterList;
+import com.vividsolutions.jump.workbench.datastore.ConnectionDescriptor;
+import com.vividsolutions.jump.workbench.datastore.ConnectionManager;
+import 
com.vividsolutions.jump.workbench.ui.plugin.datastore.ConnectionDescriptorPanel;
+import 
com.vividsolutions.jump.workbench.ui.plugin.datastore.ConnectionManagerToolboxPlugIn;
+import com.vividsolutions.jump.workbench.ui.plugin.datastore.ConnectionPanel;
 import org.openjump.core.apitools.LayerTools;
 import org.openjump.core.apitools.objecttyperoles.FeatureCollectionRole;
 import org.openjump.core.apitools.objecttyperoles.RoleOutline;
@@ -77,17 +84,6 @@
         return IconLoader.icon("envelope.png");
     }
 
-    /*
-     * public void initialize(PlugInContext context) throws Exception {
-     * 
-     * context.getFeatureInstaller().addMainMenuPlugin( this, new String[] {
-     * MenuNames.PLUGINS }, // new String[] {MenuNames.PLUGINS, //
-     * I18NPlug.getI18N("RasterInfo_Extension")}, getName(), false,
-     * IconLoader.icon("envelope.png"),
-     * createEnableCheck(context.getWorkbenchContext()));
-     * 
-     * }
-     */
     public MultiEnableCheck createEnableCheck(WorkbenchContext 
workbenchContext) {
         EnableCheckFactory checkFactory = new EnableCheckFactory(
                 workbenchContext);
@@ -98,34 +94,9 @@
                         1, Layerable.class));
     }
 
-    protected static FeatureSchema defaultSchema = null;
 
-    public ExportLayerableEnvelopeAsGeometryPlugIn() {
-        // super(new PersonalLogger(DebugUserIds.OLE));
+    public ExportLayerableEnvelopeAsGeometryPlugIn() { }
 
-        if (ExportLayerableEnvelopeAsGeometryPlugIn.defaultSchema == null) {
-            ExportLayerableEnvelopeAsGeometryPlugIn.defaultSchema = new 
FeatureSchema();
-
-            ExportLayerableEnvelopeAsGeometryPlugIn.defaultSchema.addAttribute(
-                    "GEOMETRY", AttributeType.GEOMETRY);
-            ExportLayerableEnvelopeAsGeometryPlugIn.defaultSchema.addAttribute(
-                    LAYER, AttributeType.STRING);
-            ExportLayerableEnvelopeAsGeometryPlugIn.defaultSchema.addAttribute(
-                    SOURCE_PATH, AttributeType.STRING);
-            ExportLayerableEnvelopeAsGeometryPlugIn.defaultSchema.addAttribute(
-                    SRID, AttributeType.STRING);
-            ExportLayerableEnvelopeAsGeometryPlugIn.defaultSchema.addAttribute(
-                    minX, AttributeType.DOUBLE);
-            ExportLayerableEnvelopeAsGeometryPlugIn.defaultSchema.addAttribute(
-                    maxX, AttributeType.DOUBLE);
-            ExportLayerableEnvelopeAsGeometryPlugIn.defaultSchema.addAttribute(
-                    minY, AttributeType.DOUBLE);
-            ExportLayerableEnvelopeAsGeometryPlugIn.defaultSchema.addAttribute(
-                    maxY, AttributeType.DOUBLE);
-
-        }
-    }
-
     /**
      * @inheritDoc
      */
@@ -154,11 +125,9 @@
                 Layerable.class);
         final WorkbenchContext wbcontext = context.getWorkbenchContext();
         Envelope envelope = new Envelope();
-        int size = -1;// Layer size
-        size = context.getSelectedLayerables().size();// Get number
-        for (Iterator i = wbcontext.getLayerNamePanel()
-                .selectedNodes(Layerable.class).iterator(); i.hasNext();) {
-            Layerable slayer = (Layerable) i.next();
+
+        for (Object layerable : 
wbcontext.getLayerableNamePanel().selectedNodes(Layerable.class)) {
+            Layerable slayer = (Layerable)layerable;
             if (slayer instanceof WMSLayer) {
                 envelope.expandToInclude(((WMSLayer) slayer).getEnvelope());
             } else if (slayer instanceof WFSLayer) {
@@ -183,75 +152,56 @@
 
         }
 
-        String name = null;
-        String sourceClass = "";
-        String sourcePath = NOTSAVED;
+        Geometry geom;
+        GeometryFactory gf = new GeometryFactory();
+        Envelope envCopy = new Envelope(envelope);
+        if (envCopy.isNull()) {
+            geom = gf.createPolygon(gf.createLinearRing(new Coordinate[0]));
+        } else {
+            if (envCopy.getArea() == 0) {
+                envCopy.expandBy(1E-6);
 
-        Geometry geom = new GeometryFactory()
-                .createPolygon(new GeometryFactory()
-                        .createLinearRing(new Coordinate[] {
-                                new Coordinate(envelope.getMinX(), envelope
-                                        .getMinY()),
-                                new Coordinate(envelope.getMinX(), envelope
-                                        .getMaxY()),
-                                new Coordinate(envelope.getMaxX(), envelope
-                                        .getMaxY()),
-                                new Coordinate(envelope.getMaxX(), envelope
-                                        .getMinY()),
-                                new Coordinate(envelope.getMinX(), envelope
-                                        .getMinY()) }), null);
+            }
+            geom = gf.toGeometry(envCopy);
+        }
 
-        FeatureCollection newFeaturecollection = new FeatureDataset(
-                ExportLayerableEnvelopeAsGeometryPlugIn.defaultSchema.clone());
+        FeatureSchema schema = getFeatureSchema();
+        FeatureCollection newFeaturecollection = new FeatureDataset(schema);
+        BasicFeature feature = new BasicFeature(schema);
 
-        BasicFeature feature = new BasicFeature(
-                ExportLayerableEnvelopeAsGeometryPlugIn.defaultSchema.clone());
+        feature.setGeometry(geom);
 
-        feature.setAttribute("GEOMETRY", geom);
-
-        if (size == 1) {
+        int size = context.getSelectedLayerables().size(); // Get number
+        String name;
+        String path = NOTSAVED;
+        String srid = null;
+        if (size == 1 && layer != null) {
             name = layer.getName();
-            feature.setAttribute(LAYER, name);
             if (layer instanceof WMSLayer) {
-                feature.setAttribute(SOURCE_PATH,
-                        ((WMSLayer) layer).getServerURL());
-
-                feature.setAttribute(SRID, ((WMSLayer) layer).getSRS());
+                path = ((WMSLayer)layer).getServerURL();
+                srid = ((WMSLayer) layer).getSRS();
             } else if (layer instanceof WFSLayer) {
-                feature.setAttribute(SOURCE_PATH,
-                        ((WFSLayer) layer).getServerURL());
-                feature.setAttribute(SRID, ((WFSLayer) layer).getCrs());
+                path = ((WFSLayer)layer).getServerURL();
+                srid = ((WFSLayer)layer).getCrs();
             } else if (layer instanceof RasterImageLayer) {
-                sourcePath = ((RasterImageLayer) layer).getImageFileName();
-                setInfoProjection((RasterImageLayer) layer);
-                feature.setAttribute(SOURCE_PATH, sourcePath);
-                feature.setAttribute(SRID, srsCode);
-
+                path = ((RasterImageLayer)layer).getImageFileName();
+                srid = getInfoProjection((RasterImageLayer)layer).getCode();
             } else if (layer instanceof Layer
                     && ((Layer) layer).getStyle(ReferencedImageStyle.class) == 
null) {
-
-                DataSourceQuery dsq = ((Layer) layer).getDataSourceQuery();
-                if (dsq != null) {
-                    String dsqSourceClass = dsq.getDataSource().getClass()
-                            .getName();
-                    if (sourceClass.equals(""))
-                        sourceClass = dsqSourceClass;
-                    Object fnameObj = dsq.getDataSource().getProperties()
-                            .get("File");
+                DataSourceQuery dsq = ((Layer)layer).getDataSourceQuery();
+                if (dsq != null && dsq.getDataSource() != null) {
+                    Object fnameObj = 
dsq.getDataSource().getProperties().get("File");
                     if (fnameObj == null) {
                         fnameObj = dsq
                                 .getDataSource()
                                 .getProperties()
                                 
.get(DataStoreDataSource.CONNECTION_DESCRIPTOR_KEY);
+                        path = 
((ConnectionDescriptor)fnameObj).getParametersString();
+                    } else {
+                        path = fnameObj.toString().replace("%20", " ");
                     }
-                    if (fnameObj != null) {
-                        sourcePath = fnameObj.toString().replace("%20", " ");
-                    }
                 }
-                setInfoProjection((Layer) layer);
-                feature.setAttribute(SOURCE_PATH, sourcePath);
-                feature.setAttribute(SRID, srsCode);
-
+                srid = getInfoProjection((Layer)layer).getCode();
             } else if (layer instanceof Layer
                     && ((Layer) layer).getStyle(ReferencedImageStyle.class) != 
null) {
 
@@ -259,28 +209,27 @@
                         .getFeatureCollectionWrapper();
                 for (Iterator i = featureCollection.iterator(); i.hasNext();) {
                     Feature feat = (Feature) i.next();
-                    sourcePath = feat.getString("IMG_URI");
-                    if (sourcePath != null) {
-                        sourcePath = sourcePath.substring(5)
+                    path = feat.getString("IMG_URI");
+                    if (path != null) {
+                        path = path.substring(5)
                                 .replace("%20", " ");
                     }
 
                 }
-                setInfoProjection((Layer) layer);
-                feature.setAttribute(SOURCE_PATH, sourcePath);
-                feature.setAttribute(SRID, srsCode);
+                srid = getInfoProjection((Layer)layer).getCode();
             }
         } else {
             name = MULTIPLESOURCE;
-            feature.setAttribute(LAYER, name);
-            feature.setAttribute(SOURCE_PATH, MULTIPLESOURCE);
-            feature.setAttribute(SRID, null);
+            path = MULTIPLESOURCE;
         }
+        feature.setAttribute(LAYER, name);
+        feature.setAttribute(SOURCE_PATH, path);
+        feature.setAttribute(SRID, srid);
 
-        feature.setAttribute(minX, roundOff(envelope.getMinX()));
-        feature.setAttribute(maxX, roundOff(envelope.getMaxX()));
-        feature.setAttribute(minY, roundOff(envelope.getMinY()));
-        feature.setAttribute(maxY, roundOff(envelope.getMaxX()));
+        feature.setAttribute(minX, envelope.isNull() ? null : 
roundOff(envelope.getMinX()));
+        feature.setAttribute(maxX, envelope.isNull() ? null : 
roundOff(envelope.getMaxX()));
+        feature.setAttribute(minY, envelope.isNull() ? null : 
roundOff(envelope.getMinY()));
+        feature.setAttribute(maxY, envelope.isNull() ? null : 
roundOff(envelope.getMaxY()));
         newFeaturecollection.add(feature);
 
         addLayer(ENVELOPE + "_" + name, newFeaturecollection, context,
@@ -296,20 +245,29 @@
                 context, role);
     }
 
+    private FeatureSchema getFeatureSchema() {
+        FeatureSchema defaultSchema = new FeatureSchema();
+        defaultSchema.addAttribute("GEOMETRY", AttributeType.GEOMETRY);
+        defaultSchema.addAttribute(LAYER, AttributeType.STRING);
+        defaultSchema.addAttribute(SOURCE_PATH, AttributeType.STRING);
+        defaultSchema.addAttribute(SRID, AttributeType.STRING);
+        defaultSchema.addAttribute(minX, AttributeType.DOUBLE);
+        defaultSchema.addAttribute(maxX, AttributeType.DOUBLE);
+        defaultSchema.addAttribute(minY, AttributeType.DOUBLE);
+        defaultSchema.addAttribute(maxY, AttributeType.DOUBLE);
+        return defaultSchema;
+    }
+
     // Use BigDecimal to round off decimals
     public static double roundOff(double number) {
         BigDecimal bigDecimal = new BigDecimal(number);
-        BigDecimal roundedWithScale = bigDecimal.setScale(3,
+        BigDecimal roundedWithScale = bigDecimal.setScale(6,
                 BigDecimal.ROUND_HALF_EVEN);
         double rounded = roundedWithScale.doubleValue();
         return rounded;
     }
 
-    WorkbenchContext workbenchContext;
-
-    String srsCode = "0";
-
-    private void setInfoProjection(Layer layer) throws Exception {
+    private SRSInfo getInfoProjection(Layer layer) throws Exception {
         SRSInfo srsInfo;
         try {
             srsInfo = ProjUtils.getSRSInfoFromLayerStyleOrSource(layer);
@@ -316,10 +274,11 @@
         } catch (Exception e) {
             srsInfo = ProjUtils.getSRSInfoFromLayerSource(layer);
         }
-        srsCode = srsInfo.getCode();
+        if (srsInfo == null) srsInfo = new SRSInfo();
+        return srsInfo;
     }
 
-    private void setInfoProjection(RasterImageLayer layer) throws Exception {
+    private SRSInfo getInfoProjection(RasterImageLayer layer) throws Exception 
{
         String fileSourcePath = layer.getImageFileName();
         String extension = FileUtil.getExtension(fileSourcePath).toLowerCase();
         SRSInfo srsInfo;
@@ -338,7 +297,8 @@
             srsInfo = ProjUtils.getSRSInfoFromAuxiliaryFile(fileSourcePath);
 
         }
-        srsCode = srsInfo.getCode();
+        if (srsInfo == null) srsInfo = new SRSInfo();
+        return srsInfo;
     }
 
 }


------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to