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