Revision: 5922
          http://sourceforge.net/p/jump-pilot/code/5922
Author:   ma15569
Date:     2018-08-22 17:00:47 +0000 (Wed, 22 Aug 2018)
Log Message:
-----------
Added capability to export WMS legend to PNG image file

Modified Paths:
--------------
    core/trunk/src/org/openjump/core/ui/plugin/wms/WMSLegendPlugIn.java

Modified: core/trunk/src/org/openjump/core/ui/plugin/wms/WMSLegendPlugIn.java
===================================================================
--- core/trunk/src/org/openjump/core/ui/plugin/wms/WMSLegendPlugIn.java 
2018-08-22 15:28:45 UTC (rev 5921)
+++ core/trunk/src/org/openjump/core/ui/plugin/wms/WMSLegendPlugIn.java 
2018-08-22 17:00:47 UTC (rev 5922)
@@ -2,27 +2,38 @@
 
 import java.awt.BorderLayout;
 import java.awt.Color;
+import java.awt.Dimension;
 import java.awt.Font;
+import java.awt.Graphics2D;
 import java.awt.GridBagLayout;
 import java.awt.Image;
+import java.awt.event.ActionEvent;
+import java.awt.image.BufferedImage;
+import java.io.File;
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.Iterator;
 import java.util.List;
 
+import javax.imageio.ImageIO;
 import javax.swing.BoxLayout;
 import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
 import javax.swing.JLabel;
 import javax.swing.JLayeredPane;
+import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.log4j.Logger;
 import org.openjump.core.apitools.LayerTools;
+import org.openjump.core.ui.io.file.FileNameExtensionFilter;
 import org.openjump.core.ui.swing.DetachableInternalFrame;
 
 import com.vividsolutions.jump.I18N;
+import com.vividsolutions.jump.workbench.JUMPWorkbench;
 import com.vividsolutions.jump.workbench.WorkbenchContext;
 import com.vividsolutions.jump.workbench.model.WMSLayer;
 import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn;
@@ -29,6 +40,7 @@
 import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
 import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
 import com.vividsolutions.jump.workbench.plugin.PlugInContext;
+import com.vividsolutions.jump.workbench.ui.GUIUtil;
 import com.vividsolutions.jump.workbench.ui.images.IconLoader;
 import com.vividsolutions.wms.AbstractWMSRequest;
 import com.vividsolutions.wms.MapLayer;
@@ -47,11 +59,12 @@
     private static ImageIcon ICON = IconLoader.icon("globe3_13.png");
     private JScrollPane scrollPane = new JScrollPane();
 
+    @Override
     public boolean execute(final PlugInContext context) throws Exception {
         final WMSLayer layer = (WMSLayer) LayerTools.getSelectedLayerable(
                 context, WMSLayer.class);
 
-        DetachableInternalFrame frame = new DetachableInternalFrame();
+        final DetachableInternalFrame frame = new DetachableInternalFrame();
         frame.setTitle(PANEL + " (" + layer.getName() + ")");
         frame.setResizable(true);
         frame.setClosable(true);
@@ -60,13 +73,64 @@
         frame.setFrameIcon(ICON);
         frame.setSize(200, 500);
         frame.setLayer(JLayeredPane.PALETTE_LAYER);
-        scrollPane = new JScrollPane(getLegendPanel(context));
-        frame.add(scrollPane, BorderLayout.CENTER);
+        scrollPane = new JScrollPane(getLegendPanel(context),
+                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+        final JPanel panel = new JPanel();
+        panel.setLayout(new BorderLayout());
+        panel.add(scrollPane, BorderLayout.CENTER);
+        panel.setPreferredSize(scrollPane.getPreferredSize());
+        frame.add(panel, BorderLayout.NORTH);
+        final JPanel okPanel = new JPanel();
+        final JButton saveButton = new JButton(SAVE) {
 
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public Dimension getPreferredSize() {
+                return new Dimension(100, 25);
+            }
+        };
+
+        final JButton closeButton = new JButton(CLOSE) {
+            private static final long serialVersionUID = 2L;
+
+            @Override
+            public Dimension getPreferredSize() {
+                return new Dimension(100, 25);
+            }
+        };
+
+        saveButton.addActionListener(new java.awt.event.ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                save(scrollPane);
+                // frame.dispose();
+                return;
+            }
+        });
+
+        closeButton.addActionListener(new java.awt.event.ActionListener() {
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+
+                frame.dispose();
+
+                return;
+            }
+        });
+
+        okPanel.add(saveButton, BorderLayout.WEST);
+        okPanel.add(closeButton, BorderLayout.EAST);
+
+        frame.add(okPanel, BorderLayout.SOUTH);
+        frame.pack();
         context.getWorkbenchFrame().addInternalFrame(frame, true, true);
-        //Detachable internal frame now opens on left/middle part of the 
project view
-        frame.setBounds(context.getLayerViewPanel().getWidth() - 10, 100,
-                frame.getWidth(), frame.getHeight());
+        // Detachable internal frame now opens on left/middle part of the
+        // project view
+        // frame.setBounds(context.getLayerViewPanel().getWidth() - 10, 100,
+        // frame.getWidth(), frame.getHeight());
 
         return true;
     }
@@ -122,23 +186,83 @@
     // Modified From Kosmo SAIG. Build the legend panel. For each layer it
     // displays the layer name at the top and the legend at the bottom
 
+    public void save(JScrollPane pane) {
+        FileNameExtensionFilter filter;
+        final JPanel panel = (JPanel) pane.getViewport().getView();
+        final int w = panel.getWidth();
+        final int h = panel.getHeight();
+        final BufferedImage bi = new BufferedImage(w, h,
+                BufferedImage.TYPE_INT_RGB);
+        final Graphics2D g = bi.createGraphics();
+        panel.paint(g);
+
+        filter = new FileNameExtensionFilter("Portable Network Graphics (png)",
+                "png");
+        final JFileChooser fc = new GUIUtil.FileChooserWithOverwritePrompting(
+                "png");
+        fc.setFileFilter(filter);
+        fc.addChoosableFileFilter(filter);
+        final int returnVal = fc.showSaveDialog(JUMPWorkbench.getInstance()
+                .getFrame());
+        fc.getWidth();
+        fc.getHeight();
+        if (returnVal == JFileChooser.APPROVE_OPTION) {
+            try {
+                final File file = new File(fc.getSelectedFile() + ".png");
+                ImageIO.write(bi, "png", file);
+                saved(file);
+            } catch (final Exception e) {
+                notsaved();
+                Logger(this.getClass(), e);
+            }
+        }
+    }
+
+    public static void Logger(Class<?> plugin, Exception e) {
+        final Logger LOG = Logger.getLogger(plugin);
+        JUMPWorkbench
+                .getInstance()
+                .getFrame()
+                .warnUser(
+                        plugin.getSimpleName() + " Exception: " + 
e.toString());
+        LOG.error(plugin.getName() + " Exception: ", e);
+    }
+
+    protected void saved(File file) {
+        JUMPWorkbench.getInstance().getFrame()
+                .setStatusMessage(sSaved + " :" + file.getAbsolutePath());
+    }
+
+    protected void notsaved() {
+        JOptionPane.showMessageDialog(null, SCouldNotSave, I18N.get(getName()),
+                JOptionPane.WARNING_MESSAGE);
+    }
+
+    private final String sSaved = I18N
+            
.get("org.openjump.core.ui.plugin.raster.RasterImageLayerPropertiesPlugIn.file.saved");
+    private final String SCouldNotSave = I18N
+            
.get("org.openjump.sextante.gui.additionalResults.AdditionalResultsPlugIn.Could-not-save-selected-result");
+    private final String SAVE = I18N
+            .get("deejump.plugin.SaveLegendPlugIn.Save");
+    private final String CLOSE = I18N
+            .get("ui.plugin.imagery.ImageLayerManagerDialog.Close");
+
     public JPanel getLegendPanel(PlugInContext context) throws IOException {
 
-        JPanel mainPanel = new JPanel(new GridBagLayout());
-        WMSLayer layer = (WMSLayer) LayerTools.getSelectedLayerable(context,
-                WMSLayer.class);
-        List<String> names = layer.getLayerNames();
+        final JPanel mainPanel = new JPanel(new GridBagLayout());
+        final WMSLayer layer = (WMSLayer) LayerTools.getSelectedLayerable(
+                context, WMSLayer.class);
+        final List<String> names = layer.getLayerNames();
         mainPanel.setBackground(Color.WHITE);
         mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
 
-        for (Iterator<String> iter = names.iterator(); iter.hasNext();) {
-            String layerName = iter.next();
-            MapLayer mapLayer = layer.getService().getCapabilities()
+        for (final String layerName : names) {
+            final MapLayer mapLayer = layer.getService().getCapabilities()
                     .getMapLayerByName(layerName);
 
-            String layerTitle = StringUtils.isNotEmpty(mapLayer.getTitle()) ? 
mapLayer
-                    .getTitle() : layerName;
-            JLabel nameLabel = new JLabel(
+            final String layerTitle = StringUtils.isNotEmpty(mapLayer
+                    .getTitle()) ? mapLayer.getTitle() : layerName;
+            final JLabel nameLabel = new JLabel(
                     I18N.getMessage(
                             
"org.openjump.core.ui.plugin.queries.SimpleQuery.layer" + ": {0}", //$NON-NLS-1$
                             new Object[] { layerTitle }));
@@ -152,15 +276,16 @@
             // URL selectedUrl = null;
             // selectedUrl = new URL(legendUrl);
             // image = ImageIO.read(selectedUrl);
-            LegendRequest req = new LegendRequest(layer.getService(), 
layerName);
-            Image image = req.getImage();
-            ImageIcon legendIcon = new ImageIcon(image);
+            final LegendRequest req = new LegendRequest(layer.getService(),
+                    layerName);
+            final Image image = req.getImage();
+            final ImageIcon legendIcon = new ImageIcon(image);
 
             if (/* getStyles(context, layerName) != null && */legendIcon != 
null) {
-                JLabel labelIcon = new JLabel(legendIcon, JLabel.CENTER);
+                final JLabel labelIcon = new JLabel(legendIcon, JLabel.CENTER);
                 mainPanel.add(labelIcon, BorderLayout.SOUTH);
             } else {
-                JLabel textLabel = new JLabel(MESSAGE);
+                final JLabel textLabel = new JLabel(MESSAGE);
                 mainPanel.add(textLabel, BorderLayout.SOUTH);
             }
         }
@@ -169,7 +294,7 @@
     }
 
     public MultiEnableCheck createEnableCheck(WorkbenchContext 
workbenchContext) {
-        EnableCheckFactory checkFactory = new EnableCheckFactory(
+        final EnableCheckFactory checkFactory = new EnableCheckFactory(
                 workbenchContext);
 
         return new MultiEnableCheck().add(
@@ -178,20 +303,21 @@
                         1, WMSLayer.class));
     }
 
+    @Override
     public String getName() {
         return PLUGIN;
     }
 
-    private String PLUGIN = I18N
+    private final String PLUGIN = I18N
             .get("org.openjump.core.ui.plugin.wms.WMSLegendPlugIn");
-    private String PANEL = I18N
+    private final String PANEL = I18N
             .get("org.openjump.core.ui.plugin.wms.WMSLegendPlugIn.panel");
-    private String MESSAGE = I18N
+    private final String MESSAGE = I18N
             .get("org.openjump.core.ui.plugin.wms.WMSLegendPlugIn.message");
 }
 
 class LegendRequest extends AbstractWMSRequest {
-    private String layerName;
+    private final String layerName;
 
     public LegendRequest(WMService service, String name) {
         super(service);
@@ -198,10 +324,11 @@
         layerName = name;
     }
 
+    @Override
     public URL getURL() throws MalformedURLException {
         String serverURL = service.getServerUrl();
 
-        String version = service.getVersion();
+        final String version = service.getVersion();
         if (WMService.WMS_1_0_0.equals(version)) {
             serverURL = serverURL
                     + "REQUEST=GetLegendGraphic&feature_info&WMTVER=1.0.0";


------------------------------------------------------------------------------
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