|
From: <jum...@li...> - 2015-06-05 10:25:48
|
Revision: 4476
http://sourceforge.net/p/jump-pilot/code/4476
Author: edso
Date: 2015-06-05 10:25:46 +0000 (Fri, 05 Jun 2015)
Log Message:
-----------
make WMSLegendPlugIn reuse the existing WMSRequest classes to support basic auth out of the box
Modified Paths:
--------------
core/trunk/src/com/vividsolutions/wms/MapRequest.java
core/trunk/src/org/openjump/core/ui/plugin/wms/WMSLegendPlugIn.java
Added Paths:
-----------
core/trunk/src/com/vividsolutions/wms/AbstractBasicRequest.java
Added: core/trunk/src/com/vividsolutions/wms/AbstractBasicRequest.java
===================================================================
--- core/trunk/src/com/vividsolutions/wms/AbstractBasicRequest.java (rev 0)
+++ core/trunk/src/com/vividsolutions/wms/AbstractBasicRequest.java 2015-06-05 10:25:46 UTC (rev 4476)
@@ -0,0 +1,92 @@
+package com.vividsolutions.wms;
+
+import java.awt.Image;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.List;
+import java.util.Map.Entry;
+
+import javax.imageio.ImageIO;
+
+import net.iharder.Base64;
+
+import org.openjump.util.UriUtil;
+
+abstract public class AbstractBasicRequest {
+
+ protected WMService service;
+ protected String version = WMService.WMS_1_1_1;
+
+ protected AbstractBasicRequest(WMService service) {
+ this.service = service;
+ }
+
+ /**
+ * Gets the WMService that this object will make requests from.
+ * @return the WMService that this object will make requests from
+ */
+ public WMService getService() {
+ return service;
+ }
+
+ /**
+ * must be implemented according to the specific needs
+ * @return URL
+ * @throws MalformedURLException
+ */
+ abstract public URL getURL() throws MalformedURLException;
+
+ /**
+ * Connect to the service and get an Image of the map.
+ * @return the retrieved map Image
+ */
+ public Image getImage() throws IOException {
+ URL requestUrl = getURL();
+ URLConnection con = requestUrl.openConnection();
+ if(requestUrl.getUserInfo() != null)
+ con.setRequestProperty("Authorization", "Basic " +
+ Base64.encodeBytes(UriUtil.urlDecode(requestUrl.getUserInfo()).getBytes()));
+
+ boolean isImage = false;
+ //System.out.println(requestUrl);
+ for (Entry<String, List<String>> entry : con.getHeaderFields().entrySet()) {
+
+ String key = entry.getKey() != null ? entry.getKey() : "";
+ String value = null;
+ try {
+ value = entry.getValue().get(0).toString();
+ } catch (Exception e) {
+ }
+
+// System.out.println(key + "/" + value);
+
+ if (key.matches("^(?i)Content-Type$") && value.matches("^(?i)image/.*"))
+ isImage = true;
+ }
+
+ if (isImage)
+ return ImageIO.read(con.getInputStream());
+
+ readConnection(con);
+ return null;
+ }
+
+ private void readConnection(URLConnection con) throws IOException {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
+ StringBuilder result = new StringBuilder();
+ String line;
+ while((line = reader.readLine()) != null) {
+ result.append(line);
+ }
+ System.out.println(result.toString());
+ }
+
+ //UT
+ public void setVersion( String ver ){
+ this.version = ver;
+ }
+}
Property changes on: core/trunk/src/com/vividsolutions/wms/AbstractBasicRequest.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Modified: core/trunk/src/com/vividsolutions/wms/MapRequest.java
===================================================================
--- core/trunk/src/com/vividsolutions/wms/MapRequest.java 2015-06-05 08:28:53 UTC (rev 4475)
+++ core/trunk/src/com/vividsolutions/wms/MapRequest.java 2015-06-05 10:25:46 UTC (rev 4476)
@@ -59,25 +59,23 @@
* Represents all of the parameters of a getMap request from a WMS server.
* @author Chris Hodgson cho...@re...
*/
-public class MapRequest {
+public class MapRequest extends AbstractBasicRequest{
private static Logger LOG = Logger.getLogger(MapRequest.class);
- private WMService service;
private int imgWidth;
private int imgHeight;
private List<String> layerNames;
private BoundingBox bbox;
private boolean transparent;
private String format;
- private String version = WMService.WMS_1_1_1;
/**
* Creates a new MapRequest.
* @param service the WMService which this MapRequest will use
*/
public MapRequest(WMService service) {
- this.service = service;
+ super(service);
imgWidth = 100;
imgHeight = 100;
layerNames = new ArrayList<String>();
@@ -86,14 +84,8 @@
format = null;
}
- /**
- * Gets the WMService that this object will make requests from.
- * @return the WMService that this object will make requests from
- */
- public WMService getService() {
- return service;
- }
+
/**
* Returns the format of this request.
* This may be a string such as GIF, JPEG, or PNG for a WMS 1.0 server, or
@@ -300,53 +292,7 @@
}
- /**
- * Connect to the service and get an Image of the map.
- * @return the retrieved map Image
- */
- public Image getImage() throws IOException {
- URL requestUrl = getURL();
- URLConnection con = requestUrl.openConnection();
- if(requestUrl.getUserInfo() != null)
- con.setRequestProperty("Authorization", "Basic " +
- Base64.encodeBytes(UriUtil.urlDecode(requestUrl.getUserInfo()).getBytes()));
- boolean isImage = false;
- System.out.println(requestUrl);
- for (Entry<String, List<String>> entry : con.getHeaderFields().entrySet()) {
-
- String key = entry.getKey() != null ? entry.getKey() : "";
- String value = null;
- try {
- value = entry.getValue().get(0).toString();
- } catch (Exception e) {
- }
-
- System.out.println(key + "/" + value);
-
- if (key.matches("^(?i)Content-Type$") && value.matches("^(?i)image/.*"))
- isImage = true;
- }
-
- if (isImage)
- return ImageIO.read(con.getInputStream());
-
- readConnection(con);
- return null;
- }
- private void readConnection(URLConnection con) throws IOException {
- BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
- StringBuilder result = new StringBuilder();
- String line;
- while((line = reader.readLine()) != null) {
- result.append(line);
- }
- System.out.println(result.toString());
- }
-
- //UT
- public void setVersion( String ver ){
- this.version = ver;
- }
+
}
Modified: core/trunk/src/org/openjump/core/ui/plugin/wms/WMSLegendPlugIn.java
===================================================================
--- core/trunk/src/org/openjump/core/ui/plugin/wms/WMSLegendPlugIn.java 2015-06-05 08:28:53 UTC (rev 4475)
+++ core/trunk/src/org/openjump/core/ui/plugin/wms/WMSLegendPlugIn.java 2015-06-05 10:25:46 UTC (rev 4476)
@@ -4,13 +4,13 @@
import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagLayout;
-import java.awt.image.BufferedImage;
+import java.awt.Image;
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.JDialog;
@@ -28,7 +28,9 @@
import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
import com.vividsolutions.jump.workbench.plugin.PlugInContext;
+import com.vividsolutions.wms.AbstractBasicRequest;
import com.vividsolutions.wms.MapLayer;
+import com.vividsolutions.wms.WMService;
/**
* Giuseppe Aruta 2015_6_4 Plugin that allows to show the legends of WMS layer
@@ -67,53 +69,53 @@
return true;
}
- // Get the WMS legend URL by name of layer
- private String getLegendUrl(PlugInContext context, String names)
- throws IOException {
- WMSLayer layer = (WMSLayer) LayerTools.getSelectedLayerable(context,
- WMSLayer.class);
- String serverURL = layer.getService().getServerUrl();
+// // Get the WMS legend URL by name of layer
+// private String getLegendUrl(PlugInContext context, String names)
+// throws IOException {
+// WMSLayer layer = (WMSLayer) LayerTools.getSelectedLayerable(context,
+// WMSLayer.class);
+// String serverURL = layer.getService().getServerUrl();
+//
+// String version = layer.getWmsVersion();
+// if ("1.0.0".equals(version)) {
+// serverURL = serverURL
+// + "REQUEST=GetLegendGraphic&feature_info&WMTVER=1.0.0";
+// } else if (("1.1.0".equals(version)) || ("1.1.1".equals(version))
+// || ("1.3.0".equals(version))) {
+// serverURL = serverURL
+// + "&SERVICE=WMS&REQUEST=GetLegendGraphic&VERSION="
+// + version;
+// }
+// serverURL = serverURL + "&FORMAT=image/png&WIDTH=16&HEIGHT=16";
+// serverURL = serverURL
+// + "&legend_options=bgColor:0xFFFFEE;dpi:100;fontAntiAliasing:true;forceLabels:on";
+//
+// serverURL = serverURL + "&LAYER=" + names;
+// return serverURL;
+//
+// }
- String version = layer.getWmsVersion();
- if ("1.0.0".equals(version)) {
- serverURL = serverURL
- + "REQUEST=GetLegendGraphic&feature_info&WMTVER=1.0.0";
- } else if (("1.1.0".equals(version)) || ("1.1.1".equals(version))
- || ("1.3.0".equals(version))) {
- serverURL = serverURL
- + "&SERVICE=WMS&REQUEST=GetLegendGraphic&VERSION="
- + version;
- }
- serverURL = serverURL + "&FORMAT=image/png&WIDTH=16&HEIGHT=16";
- serverURL = serverURL
- + "&legend_options=bgColor:0xFFFFEE;dpi:100;fontAntiAliasing:true;forceLabels:on";
+// // Get the WMS style URL by name of layer
+// private String getStyles(PlugInContext context, String names)
+// throws IOException {
+// WMSLayer layer = (WMSLayer) LayerTools.getSelectedLayerable(context,
+// WMSLayer.class);
+// String serverURL = layer.getService().getServerUrl();
+//
+// String version = layer.getWmsVersion();
+// if ("1.0.0".equals(version)) {
+// serverURL = serverURL
+// + "REQUEST=GetLegendGraphic&feature_info&WMTVER=1.0.0";
+// } else if (("1.1.0".equals(version)) || ("1.1.1".equals(version))
+// || ("1.3.0".equals(version))) {
+// serverURL = serverURL + "&SERVICE=WMS&REQUEST=GetStyles&VERSION="
+// + version;
+// }
+// serverURL = serverURL + "&LAYER=" + names;
+// return serverURL;
+//
+// }
- serverURL = serverURL + "&LAYER=" + names;
- return serverURL;
-
- }
-
- // Get the WMS style URL by name of layer
- private String getStyles(PlugInContext context, String names)
- throws IOException {
- WMSLayer layer = (WMSLayer) LayerTools.getSelectedLayerable(context,
- WMSLayer.class);
- String serverURL = layer.getService().getServerUrl();
-
- String version = layer.getWmsVersion();
- if ("1.0.0".equals(version)) {
- serverURL = serverURL
- + "REQUEST=GetLegendGraphic&feature_info&WMTVER=1.0.0";
- } else if (("1.1.0".equals(version)) || ("1.1.1".equals(version))
- || ("1.3.0".equals(version))) {
- serverURL = serverURL + "&SERVICE=WMS&REQUEST=GetStyles&VERSION="
- + version;
- }
- serverURL = serverURL + "&LAYER=" + names;
- return serverURL;
-
- }
-
// 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
@@ -143,14 +145,16 @@
nameLabel.setFont(new Font("Verdana", Font.BOLD, 16));
mainPanel.add(nameLabel, BorderLayout.NORTH);
- String legendUrl = getLegendUrl(context, layerName);
- BufferedImage image;
- URL selectedUrl = null;
- selectedUrl = new URL(legendUrl);
- image = ImageIO.read(selectedUrl);
+// String legendUrl = getLegendUrl(context, layerName);
+// Image image;
+// 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);
- if (getStyles(context, layerName) != null && legendIcon != null) {
+ if (/*getStyles(context, layerName) != null &&*/ legendIcon != null) {
JLabel labelIcon = new JLabel(legendIcon, JLabel.CENTER);
mainPanel.add(labelIcon, BorderLayout.SOUTH);
} else {
@@ -182,4 +186,34 @@
.get("org.openjump.core.ui.plugin.wms.WMSLegendPlugIn.panel");
private String MESSAGE = I18N
.get("org.openjump.core.ui.plugin.wms.WMSLegendPlugIn.message");
+}
+
+class LegendRequest extends AbstractBasicRequest {
+ private String layerName;
+
+ public LegendRequest(WMService service, String name) {
+ super(service);
+ layerName = name;
+ }
+
+ public URL getURL() throws MalformedURLException {
+ String serverURL = service.getServerUrl();
+
+ String version = service.getVersion();
+ if (WMService.WMS_1_0_0.equals(version)) {
+ serverURL = serverURL
+ + "REQUEST=GetLegendGraphic&feature_info&WMTVER=1.0.0";
+ } else {
+ serverURL = serverURL + "&SERVICE=WMS&REQUEST=GetLegendGraphic&VERSION="
+ + version;
+ }
+ serverURL = serverURL + "&FORMAT=image/png&WIDTH=16&HEIGHT=16";
+ serverURL = serverURL
+ + "&legend_options=bgColor:0xFFFFEE;dpi:100;fontAntiAliasing:true;forceLabels:on";
+
+ serverURL = serverURL + "&LAYER=" + layerName;
+
+ return new URL(serverURL);
+ }
+
}
\ No newline at end of file
|