Alberto, your commit seems incomplete.. ede
On 23.12.2015 18:28, Rahkonen Jukka (MML) wrote: > Hi, > > r4663 did not build > http://sourceforge.net/projects/jump-pilot/files/OpenJUMP_snapshots/OpenJUMP-20151223-r4663.log/download > > -Jukka Rahkonen- > > > -----Alkuperäinen viesti----- > Lähettäjä: jump-pilot-...@lists.sourceforge.net > [mailto:jump-pilot-...@lists.sourceforge.net] > Lähetetty: 23. joulukuuta 2015 18:27 > Vastaanottaja: jump-pilot-devel@lists.sourceforge.net > Aihe: [JPP-Devel] SVN: [4663] core/trunk > > Revision: 4663 > http://sourceforge.net/p/jump-pilot/code/4663 > Author: bertazza > Date: 2015-12-23 16:26:41 +0000 (Wed, 23 Dec 2015) > Log Message: > ----------- > Info feature tool: added a pane to show WMS info. > > Modified Paths: > -------------- > core/trunk/ChangeLog > core/trunk/src/com/vividsolutions/jump/workbench/ui/InfoFrame.java > core/trunk/src/com/vividsolutions/jump/workbench/ui/PrimaryInfoFrame.java > core/trunk/src/com/vividsolutions/jump/workbench/ui/TaskFrame.java > > core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/FeatureInfoTool.java > core/trunk/src/com/vividsolutions/wms/AbstractParser.java > core/trunk/src/com/vividsolutions/wms/Capabilities.java > core/trunk/src/com/vividsolutions/wms/MapLayer.java > core/trunk/src/com/vividsolutions/wms/ParserWMS1_0.java > core/trunk/src/com/vividsolutions/wms/ParserWMS1_1.java > core/trunk/src/com/vividsolutions/wms/ParserWMS1_3.java > core/trunk/src/com/vividsolutions/wms/WMService.java > core/trunk/src/org/openjump/core/ui/plugin/queries/QueryDialog.java > > Added Paths: > ----------- > core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/clean.xsl > core/trunk/src/com/vividsolutions/wms/MapStyle.java > > Modified: core/trunk/ChangeLog > =================================================================== > --- core/trunk/ChangeLog 2015-12-23 15:39:50 UTC (rev 4662) > +++ core/trunk/ChangeLog 2015-12-23 16:26:41 UTC (rev 4663) > @@ -3,6 +3,8 @@ > # 2. make sure that lines break at 80 chars for constricted display > situations > #<-------------------------------- 80 chars > ----------------------------------># > > +2015-12-23 bertazza > + * Info feature tool: added a pane to show WMS info. > > <----------------------------------------------- Changes.txt updated 'til > here > 2015-12-21 bertazza > > Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/InfoFrame.java > =================================================================== > --- core/trunk/src/com/vividsolutions/jump/workbench/ui/InfoFrame.java > 2015-12-23 15:39:50 UTC (rev 4662) > +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/InfoFrame.java > 2015-12-23 16:26:41 UTC (rev 4663) > @@ -61,6 +61,8 @@ > import com.vividsolutions.jump.workbench.ui.images.IconLoader; > import > com.vividsolutions.jump.workbench.ui.plugin.PersistentBlackboardPlugIn; > import com.vividsolutions.jump.workbench.ui.plugin.ViewAttributesPlugIn; > +import java.io.IOException; > +import javax.swing.JEditorPane; > import javax.swing.JScrollPane; > import javax.swing.JTable; > import javax.swing.table.DefaultTableModel; > @@ -99,16 +101,18 @@ > private GeometryInfoTab geometryInfoTab; > private JTabbedPane tabbedPane = new JTabbedPane(); > private RasterInfoTab rasterInfoTab; > + private WMSInfoTab wmsInfoTab; > private WorkbenchFrame workbenchFrame; > private static ImageIcon ICON = IconLoader.icon("information_16x16.png"); > > public InfoFrame( > WorkbenchContext workbenchContext, > LayerManagerProxy layerManagerProxy, > - final TaskFrame taskFrame) { > + final TaskFrame taskFrame) throws IOException { > blackboard = PersistentBlackboardPlugIn.get(workbenchContext); > geometryInfoTab = new GeometryInfoTab(model, workbenchContext); > rasterInfoTab = new RasterInfoTab(null, null); > + wmsInfoTab = new WMSInfoTab(); > //Keep my own copy of LayerManager, because it will be nulled in > TaskFrame > //when TaskFrame closes (it may in fact already be closed, which is > why > //a LayerManagerProxy must be passed in too). But I have to @@ > -150,6 +154,7 @@ > tabbedPane.addTab("", IconLoader.icon("Table.gif"), attributeTab, > TABLE_VIEW); > tabbedPane.addTab("", IconLoader.icon("Paper.gif"), geometryInfoTab, > HTML_VIEW); > tabbedPane.addTab("R", null, rasterInfoTab, "Raster"); > + tabbedPane.addTab("WMS", null, wmsInfoTab, "WMS"); > updateTitle(taskFrame.getTask().getName()); > taskFrame.getTask().add(new Task.NameListener() { > public void taskNameChanged(String name) { @@ -274,6 +279,10 @@ > rasterInfoTab.setRasterValues(layerNames, cellValues); > } > > + public void setWmsInfo(String string) { > + wmsInfoTab.setWmsInfoText(string); > + } > + > @Override > public JFrame getFrame() { > // our frame has to be all proxies InfoFrame is @@ -361,5 +370,32 @@ > } > > } > + > + protected class WMSInfoTab extends JPanel { > + > + private final JEditorPane jEditorPane; > + > + public WMSInfoTab() throws IOException { > + > + setLayout(new BorderLayout()); > + > + jEditorPane = new JEditorPane(); > + jEditorPane.setEditable(false); > + JScrollPane jScrollPane = new JScrollPane( > + jEditorPane, > + JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, > + JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); > + > + this.add(jScrollPane); > + > + } > + > + public void setWmsInfoText(String wmsInfo) { > + > + jEditorPane.setText(wmsInfo); > + > + } > + > + } > > } > > Modified: > core/trunk/src/com/vividsolutions/jump/workbench/ui/PrimaryInfoFrame.java > =================================================================== > --- core/trunk/src/com/vividsolutions/jump/workbench/ui/PrimaryInfoFrame.java > 2015-12-23 15:39:50 UTC (rev 4662) > +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/PrimaryInfoFrame.java > 2015-12-23 16:26:41 UTC (rev 4663) > @@ -34,6 +34,7 @@ > > import com.vividsolutions.jump.workbench.WorkbenchContext; > import com.vividsolutions.jump.workbench.model.LayerManagerProxy; > +import java.io.IOException; > > > /** > @@ -44,7 +45,7 @@ > * positions InfoFrames differently depending on whether or not they are > primary. > */ > public class PrimaryInfoFrame extends InfoFrame { > - public PrimaryInfoFrame(WorkbenchContext workbenchContext, > LayerManagerProxy layerManagerProxy, TaskFrame taskFrame) { > + public PrimaryInfoFrame(WorkbenchContext workbenchContext, > + LayerManagerProxy layerManagerProxy, TaskFrame taskFrame) throws > + IOException { > super(workbenchContext, layerManagerProxy, taskFrame); > } > } > > Modified: core/trunk/src/com/vividsolutions/jump/workbench/ui/TaskFrame.java > =================================================================== > --- core/trunk/src/com/vividsolutions/jump/workbench/ui/TaskFrame.java > 2015-12-23 15:39:50 UTC (rev 4662) > +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/TaskFrame.java > 2015-12-23 16:26:41 UTC (rev 4663) > @@ -53,6 +53,7 @@ > import com.vividsolutions.jump.workbench.ui.renderer.Renderer; > > import com.vividsolutions.jump.workbench.ui.zoom.ZoomBar; > +import java.io.IOException; > > public class TaskFrame extends JInternalFrame implements TaskFrameProxy, > CloneableInternalFrame, LayerViewPanelProxy, LayerNamePanelProxy, @@ > -223,7 +224,7 @@ > return task.getLayerManager(); > } > > - public InfoFrame getInfoFrame() { > + public InfoFrame getInfoFrame() throws IOException { > if (infoFrame == null || infoFrame.isClosed()) { > infoFrame = new PrimaryInfoFrame(workbenchContext, this, this); > } > > Modified: > core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/FeatureInfoTool.java > =================================================================== > --- > core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/FeatureInfoTool.java > 2015-12-23 15:39:50 UTC (rev 4662) > +++ > core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/FeatureInfoTool.java > 2015-12-23 16:26:41 UTC (rev 4663) > @@ -34,6 +34,7 @@ > package com.vividsolutions.jump.workbench.ui.cursortool; > > import com.vividsolutions.jts.geom.Coordinate; > +import com.vividsolutions.jts.geom.Envelope; > import java.awt.Color; > import java.awt.Cursor; > import java.awt.Image; > @@ -49,9 +50,27 @@ > import com.vividsolutions.jump.workbench.model.FenceLayerFinder; > import com.vividsolutions.jump.workbench.model.Layer; > import com.vividsolutions.jump.workbench.model.Layerable; > +import com.vividsolutions.jump.workbench.model.WMSLayer; > import com.vividsolutions.jump.workbench.ui.InfoFrame; > import com.vividsolutions.jump.workbench.ui.images.IconLoader; > +import com.vividsolutions.wms.WMService; import java.awt.geom.Point2D; > +import java.io.File; import java.io.FileOutputStream; import > +java.io.FileReader; import java.io.IOException; import > +java.net.HttpURLConnection; import java.net.URL; import > +java.net.URLEncoder; > import java.util.List; > +import javax.swing.JDialog; > +import javax.swing.JEditorPane; > +import javax.swing.JScrollPane; > +import javax.xml.transform.Transformer; import > +javax.xml.transform.TransformerFactory; > +import javax.xml.transform.stream.StreamResult; > +import javax.xml.transform.stream.StreamSource; > +import org.apache.commons.io.IOUtils; > import org.openjump.core.rasterimage.RasterImageLayer; > import > org.openjump.core.rasterimage.RasterImageLayer.RasterDataNotFoundException; > > @@ -90,8 +109,79 @@ > infoFrame.getModel().add(layer, features); > } > > + Coordinate coord = > + getPanel().getViewport().toModelCoordinate(getViewSource()); > + > + // WMS > + List<Layerable> wmsLay_l = > getWorkbench().getContext().getLayerManager().getLayerables(WMSLayer.class); > + String response = ""; > + for(Layerable lay : wmsLay_l) { > + WMSLayer wmsLayer = (WMSLayer) lay; > + > + String featInfoUrl = > wmsLayer.getService().getCapabilities().getFeatureInfoURL(); > + String names = getWmsLayeNames(wmsLayer); > + > + Point2D point = getPanel().getViewport().toViewPoint(coord); > + Envelope bbox = > + getPanel().getViewport().getEnvelopeInModelCoordinates(); > + > + if (featInfoUrl.contains("?")) { > + featInfoUrl += "&"; > + } else { > + featInfoUrl += "?"; > + } > + String version = wmsLayer.getWmsVersion(); > + if (WMService.WMS_1_0_0.equals(version)) { > + featInfoUrl += "REQUEST=feature_info&WMTVER=1.0.0"; > + } else if (WMService.WMS_1_1_0.equals(version) || > + WMService.WMS_1_1_1.equals(version) || > + WMService.WMS_1_3_0.equals(version)) { > + featInfoUrl += "REQUEST=GetFeatureInfo&SERVICE=WMS&VERSION=" > + version; > + } > + > + featInfoUrl += "&QUERY_LAYERS=" + names + "&LAYERS=" + names; > + if (WMService.WMS_1_3_0.equals(version)) { > + featInfoUrl += "&CRS=" + wmsLayer.getSRS() + > + "&I=" + (int) point.getX() + > + "&J=" + (int) point.getY(); > + } else { > + featInfoUrl += "&SRS=" + wmsLayer.getSRS() + > + "&X=" + (int) point.getX() + > + "&Y=" + (int) point.getY(); > + } > + > + featInfoUrl += "&WIDTH=" + getPanel().getWidth() + > + "&HEIGHT=" + getPanel().getHeight() + > + "&BBOX=" + bbox.getMinX() + "," + bbox.getMinY() + "," + > bbox.getMaxX() + "," + bbox.getMaxY() + > + "&STYLES=" + > + "&FORMAT=" + wmsLayer.getFormat(); > + > + if (!WMService.WMS_1_0_0.equals(version)) { > + try { > + featInfoUrl += "&INFO_FORMAT=" + > wmsLayer.getService().getCapabilities().getInfoFormat(); > + } catch (IOException e) { > + featInfoUrl += "&INFO_FORMAT=text/plain"; > + } > + } > + > + URL url = stripXhtmlTags(featInfoUrl); > + > + String newLine = System.getProperty("line.separator"); > + response = response.concat("+ > + ").concat(wmsLayer.getName()).concat(newLine); > + > + String wmsResponse; > + try { > + wmsResponse = IOUtils.toString(url.openStream()); > + wmsResponse = cleanWmsResponse(wmsResponse); > + } catch(Exception ex) { > + wmsResponse = ex.toString(); > + wmsResponse = wmsResponse.concat(newLine); > + } > + response = response.concat(wmsResponse); > + response = response.concat(newLine); > + > + }; > + infoFrame.setWmsInfo(response); > + > // Raster data > - Coordinate coord = > getPanel().getViewport().toModelCoordinate(getViewSource()); > List<Layerable> layerables_l = > getWorkbench().getContext().getLayerManager().getLayerables(RasterImageLayer.class); > > String[] layerNames = new String[layerables_l.size()]; @@ -122,15 > +212,78 @@ > } catch(RasterDataNotFoundException ex) { > cellValues[l] = "???"; > } > - > - > - > } > } > } > > - infoFrame.setRasterValues(layerNames, cellValues); > - > + infoFrame.setRasterValues(layerNames, cellValues); > infoFrame.surface(); > } > + > + private String getWmsLayeNames(WMSLayer selLayer) { > + int i; > + String names = ""; > + List<String> layerNames = selLayer.getLayerNames(); > + for (i=0; i< layerNames.size(); ++i) { > + String name = (String) layerNames.get(i); > + try { > + name = URLEncoder.encode(name, "UTF-8"); > + } catch (Exception ignored) { > + } > + names += name; > + if (i < layerNames.size() - 1) { > + names += ","; > + } > + } > + > + return names; > + } > + > + private URL stripXhtmlTags(String serverURL) throws Exception { > + > + File tmpFile = File.createTempFile("wms", "q"); > + FileOutputStream cleanHtml = new FileOutputStream(tmpFile); > + boolean resOk = true; > + //String xsl = > (String)getClass().getResource("clean.xsl").getContent(); > + //System.out.println("Ecco l'xsl: "+xsl); > + Transformer pulizia = > TransformerFactory.newInstance().newTransformer( > + new > StreamSource(getClass().getResourceAsStream("clean.xsl"))); > + try { > + pulizia.transform(new StreamSource(serverURL), > + new StreamResult(cleanHtml)); > + } catch (Exception te) { > + //System.out.println("XSLT Error: "+te.getMessage()); > + resOk = false; > + } finally { > + cleanHtml.close(); > + } > + // [DR] gestione file vuoti > + if (!resOk || !(new FileReader(tmpFile).ready())) { > + /* > + FileWriter noResponse = new FileWriter(tmpFile); > + noResponse.write("<html><body><h2>Risultati interrogazione</h2>"+ > + "Il server non ha restituito alcun risultato.</body></html>"); > + noResponse.close(); > + */ > + //gestione risposte non html (testuali) > + return new URL(serverURL); > + } > + return tmpFile.toURI().toURL(); > + } > + > + private String cleanWmsResponse(String inputWms) { > + > + String pattern = "GetFeatureInfo results:"; > + int index = inputWms.indexOf(pattern); > + if(index != -1) { > + int endIndex = index + pattern.length(); > + inputWms = inputWms.substring(endIndex); > + if(inputWms.startsWith("\n\n")) { > + inputWms = inputWms.replaceFirst("\n\n", ""); > + } > + } > + > + return inputWms; > + } > + > } > > Added: > core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/clean.xsl > =================================================================== > --- core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/clean.xsl > (rev 0) > +++ core/trunk/src/com/vividsolutions/jump/workbench/ui/cursortool/clean.xsl > 2015-12-23 16:26:41 UTC (rev 4663) > @@ -0,0 +1,39 @@ > +<?xml version="1.0" encoding="UTF-8"?> > +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > + xmlns:xhtml="http://www.w3.org/1999/xhtml" > + version="1.0"> > + > + <xsl:output method="html" version="3.2" /> > + > + <xsl:strip-space elements="*" /> > + > + <xsl:template match="/"> > + <xsl:if test="not(html)"> > + <html> > + <head> > + </head> > + <body> > + <xsl:apply-templates /> > + </body> > + </html> > + </xsl:if> > + </xsl:template> > + > + <xsl:template match="*"> > + <xsl:choose> > + <xsl:when test="local-name()='img'" /> > + <xsl:otherwise> > + <xsl:element name="{local-name()}"> > + <xsl:apply-templates select="@*|node()"/> > + </xsl:element> > + </xsl:otherwise> > + </xsl:choose> > + </xsl:template> > + > + <xsl:template match="@*"> > + <xsl:attribute name="{local-name()}"> > + <xsl:value-of select="."/> > + </xsl:attribute> > + </xsl:template> > + > +</xsl:stylesheet> > \ No newline at end of file > > Modified: core/trunk/src/com/vividsolutions/wms/AbstractParser.java > =================================================================== > --- core/trunk/src/com/vividsolutions/wms/AbstractParser.java 2015-12-23 > 15:39:50 UTC (rev 4662) > +++ core/trunk/src/com/vividsolutions/wms/AbstractParser.java 2015-12-23 > 16:26:41 UTC (rev 4663) > @@ -39,7 +39,6 @@ > > import java.io.IOException; > import java.io.InputStream; > -import java.io.InputStreamReader; > import java.util.ArrayList; > import java.util.LinkedList; > import java.util.List; > @@ -48,7 +47,6 @@ > import org.apache.xerces.parsers.DOMParser; > import org.w3c.dom.CharacterData; > import org.w3c.dom.Document; > -import org.w3c.dom.Element; > import org.w3c.dom.NamedNodeMap; > import org.w3c.dom.Node; > import org.w3c.dom.NodeList; > @@ -155,9 +153,31 @@ > } > } > } > + > return formatList; > } > > + protected LinkedList<String> getInfoFormats(Document doc) { > + > + // get the supported infoFormats > + final Node formatNode = XMLTools.simpleXPath(doc, getRootPath() + > "/Capability/Request/GetMap"); > + NodeList nl = formatNode.getChildNodes(); > + > + final Node infoFormatNode = XMLTools.simpleXPath(doc, > "WMT_MS_Capabilities/Capability/Request/GetFeatureInfo"); > + LinkedList<String> infoFormatList = new LinkedList<String>(); > + if (infoFormatNode != null) { > + nl = infoFormatNode.getChildNodes(); > + for (int i = 0; i < nl.getLength(); i++) { > + Node n = nl.item(i); > + if (n.getNodeType() == Node.ELEMENT_NODE && > "Format".equals(n.getNodeName())) { > + infoFormatList.add(n.getFirstChild().getNodeValue()); > + } > + } > + } > + > + return infoFormatList; > + > + } > > /** > * Traverses the DOM tree underneath the specified Node and generates @@ > -174,6 +194,7 @@ > LinkedList<MapLayer> subLayers = new LinkedList<MapLayer>(); > BoundingBox geographicBBox = null; > ArrayList<BoundingBox> boundingBoxList = new ArrayList<BoundingBox> > ( ); > + List<MapStyle> styles = new ArrayList<MapStyle>(); > > NodeList nl = layerNode.getChildNodes(); > > @@ -199,6 +220,44 @@ > boundingBoxList.add ( new BoundingBox("Geographics", > geographicBBox.getEnvelope()) ); > } else if( n.getNodeName().equals( "Layer" ) ) { > subLayers.add( wmsLayerFromNode( n ) ); > + } else if (n.getNodeName().equals("Style")) { > //$NON-NLS-1$ > + String styleName = ""; //$NON-NLS-1$ > + String titleName = ""; //$NON-NLS-1$ > + String legendFormat = ""; //$NON-NLS-1$ > + String url = ""; //$NON-NLS-1$ > + int h=0,w=0; > + NodeList nodeStyle = n.getChildNodes(); > + for( int k = 0; k < nodeStyle.getLength(); k++ ) { > + Node n1 = nodeStyle.item(k); > + if (n1.getNodeName().equals("Name")) { > //$NON-NLS-1$ > + styleName = ((CharacterData) > n1.getFirstChild()).getData(); > + } else if (n1.getNodeName().equals("Title") & > n1.hasChildNodes()) { //$NON-NLS-1$ > + titleName = ((CharacterData) > n1.getFirstChild()).getData(); > + } else if (n1.getNodeName().equals("LegendURL")) > { //$NON-NLS-1$ > + try { > + > h=Integer.parseInt(n1.getAttributes().getNamedItem("height").getNodeValue()); > + > w=Integer.parseInt(n1.getAttributes().getNamedItem("width").getNodeValue()); > + } > + catch (Exception e) { > + e.printStackTrace(); > + throw new Exception(e.toString()); > + } > + NodeList nodelegend = n1.getChildNodes(); > + for( int k1 = 0; k1 < > nodelegend.getLength(); k1++ ) { > + Node n2 = nodelegend.item(k1); > + if (n2.getNodeName().equals("Format")) { > //$NON-NLS-1$ > + legendFormat = > + ((CharacterData) > n2.getFirstChild()).getData(); > + } else if > (n2.getNodeName().equals("OnlineResource")) { //$NON-NLS-1$ > + url = > + n2.getAttributes() > + > .getNamedItem("xlink:href").getNodeValue(); //$NON-NLS-1$ > + } > + } > + > + } > + } > + styles.add(new MapStyle(styleName, titleName, > + url, legendFormat,w,h)); > } > } > } catch( Exception e ) { > @@ -208,7 +267,7 @@ > } > > // call the new constructor with boundingBoxList in MapLayer [uwe > dalluege] > - return new MapLayer(name, title, srsList, subLayers, geographicBBox, > boundingBoxList); > + return new MapLayer(name, title, srsList, subLayers, > + geographicBBox, boundingBoxList, styles); > } > > protected void addSRSNode(Node n, List<String> srsList) throws Exception > { > > Modified: core/trunk/src/com/vividsolutions/wms/Capabilities.java > =================================================================== > --- core/trunk/src/com/vividsolutions/wms/Capabilities.java 2015-12-23 > 15:39:50 UTC (rev 4662) > +++ core/trunk/src/com/vividsolutions/wms/Capabilities.java 2015-12-23 > 16:26:41 UTC (rev 4663) > @@ -51,8 +51,9 @@ > private String title; > private ArrayList mapFormats; > private WMService service; > - private String getMapURL, getFeatureInfoURL; > - > + private String getMapURL, featureInfoURL; private ArrayList > + infoFormats; > + > /** > * Creates a new WMS Capabilities object. Should generally only be used by > the Parser. > * @param service the WMService to which these Capabilites belong @@ > -60,19 +61,22 @@ > * @param topLayer the top MapLayer of the entire layer tree > * @param mapFormats the Collection of supported formats > */ > - public Capabilities(WMService service, String title, MapLayer topLayer, > Collection mapFormats) { > + public Capabilities(WMService service, String title, MapLayer topLayer, > + Collection mapFormats, Collection infoFormats) { > this.service = service; > this.title = title; > this.topLayer = topLayer; > this.mapFormats = new ArrayList( mapFormats ); > + this.infoFormats = new ArrayList(infoFormats); > this.getMapURL = service.getServerUrl(); > - this.getFeatureInfoURL = service.getServerUrl(); > + this.featureInfoURL = service.getServerUrl(); > } > > - public Capabilities(WMService service, String title, MapLayer topLayer, > Collection mapFormats, String getMapURL, String getFeatureInfoURL) { > - this(service, title, topLayer, mapFormats); > + public Capabilities(WMService service, String title, MapLayer topLayer, > + Collection mapFormats, Collection infoFormats, String getMapURL, > String featureInfoURL) { > + this(service, title, topLayer, mapFormats, infoFormats); > this.getMapURL = getMapURL; > - this.getFeatureInfoURL = getFeatureInfoURL; > + this.featureInfoURL = featureInfoURL; > } > > /** > @@ -121,8 +125,8 @@ > return getMapURL; > } > > - public String getGetFeatureInfoURL() { > - return getFeatureInfoURL; > + public String getFeatureInfoURL() { > + return featureInfoURL; > } > > public void setGetMapURL(String url) { @@ -142,5 +146,16 @@ > } > return formats; > } > + > + public String getInfoFormat() { > + String format = "text/plain"; > + if (!infoFormats.contains(format)) { > + Iterator it = infoFormats.iterator(); > + if (it.hasNext()) { > + format = (String) it.next(); > + } > + } > + return format; > + } > > } > > Modified: core/trunk/src/com/vividsolutions/wms/MapLayer.java > =================================================================== > --- core/trunk/src/com/vividsolutions/wms/MapLayer.java 2015-12-23 > 15:39:50 UTC (rev 4662) > +++ core/trunk/src/com/vividsolutions/wms/MapLayer.java 2015-12-23 > 16:26:41 UTC (rev 4663) > @@ -63,10 +63,13 @@ > // user modifiable members > private boolean enabled = false; > > + private List<MapStyle> styles; > + > /** > * Creates a new instance of MapLayer > */ > - public MapLayer(String name, String title, Collection srsList, > Collection subLayers, BoundingBox bbox) { > + public MapLayer(String name, String title, Collection srsList, > + Collection subLayers, BoundingBox bbox, List<MapStyle> > + styles) { > this.parent = null; > this.name = name; > this.title = title; > @@ -77,15 +80,17 @@ > (it.next()).parent = this; > } > this.bbox = bbox; > + setStyles(styles); > } > > /** > * Creates a new instance of MapLayer with boundingBoxList [uwe dalluege] > */ > - public MapLayer ( String name, String title, Collection srsList, > Collection subLayers, > - BoundingBox bbox, ArrayList<BoundingBox> boundingBoxList ) { > - this ( name, title, srsList, subLayers, bbox ); > - this.boundingBoxList = boundingBoxList; > + public MapLayer > + ( String name, String title, Collection srsList, Collection subLayers, > + BoundingBox bbox, ArrayList boundingBoxList,List<MapStyle> > styles ) { > + this ( name, title, srsList, subLayers, bbox,styles ); > + this.boundingBoxList = boundingBoxList; > } > > > @@ -297,8 +302,62 @@ > if (parent != null) fullSRSList.addAll(parent.getFullSRSList()); > return fullSRSList; > } > + > + /** > + * Sets the selected WMS layer style > + * > + * @param selectedStyle > + */ > + public void setSelectedStyle( MapStyle selectedStyle ) { > + for( Iterator<MapStyle> iter = styles.iterator(); iter.hasNext(); ) { > + MapStyle element = iter.next(); > + element.setSelected(false, false); > + } > + selectedStyle.setSelected(true, false); > + } > + > + /** > + * Gets the WMS layer style by name > + * > + * @param styleName > + * @return > + */ > + public MapStyle getStyle( String styleName ) { > + for( Iterator<MapStyle> iter = styles.iterator(); iter.hasNext(); ) { > + MapStyle element = iter.next(); > + if (element.getName().equals(styleName)) > + return element; > + } > + return null; > + } > + > + public List<MapStyle> getStyles() { > + return styles; > + } > > + /** > + * @param sublayer > + */ > + public void setSublayer(ArrayList sublayer) { > + this.subLayers = sublayer; > + } > + > /** > + * @param newStyles > + */ > + public void setStyles( List<MapStyle> newStyles ) { > + this.styles = newStyles; > + for( Iterator<MapStyle> iter = styles.iterator(); iter.hasNext(); ) { > + MapStyle element = iter.next(); > + element.setLayer(this); > + } > + > + if (!styles.isEmpty()) { > + styles.get(0).setSelected(true, true); > + } > + } > + > + /** > * Returns a somewhat nicely-formatted string representing all of the > details of > * this layer and its sub-layers (recursively). > * @return a somewhat nicely-formatted string representing all of the > details of > > Added: core/trunk/src/com/vividsolutions/wms/MapStyle.java > =================================================================== > --- core/trunk/src/com/vividsolutions/wms/MapStyle.java > (rev 0) > +++ core/trunk/src/com/vividsolutions/wms/MapStyle.java 2015-12-23 > 16:26:41 UTC (rev 4663) > @@ -0,0 +1,239 @@ > +package com.vividsolutions.wms; > + > +import java.awt.image.BufferedImage; > +import java.io.IOException; > +import java.net.MalformedURLException; > +import java.net.URL; > +import java.util.Iterator; > + > +import javax.imageio.ImageIO; > +import javax.swing.Icon; > +import javax.swing.ImageIcon; > + > +import org.apache.log4j.Logger; > + > +/* > + * Estilo asociado a una capa. Se caracteriza por tener asociado un > + * nombre, un estilo y una leyenda > + * @author Marco Antonio Fuentelsaz P?rez > + * > + */ > +public class MapStyle { > + > + /** Log */ > + private final static Logger LOGGER = > + Logger.getLogger(MapStyle.class); > + > + /** Nombre asociado al estilo */ > + private String name; > + > + /** Titulo asociado al estilo */ > + private String title; > + > + /** URL asociado a la leyenda */ > + private String urlLegend; > + > + /** Formato asociado a la leyenda */ > + private String formatLegend; > + > + /** */ > + private boolean selected; > + > + /** Legend icon */ > + private Icon legendIcon; > + > + /** */ > + private MapLayer layer; > + > + /** Flag to indicate if the legend icon have been loaded or not */ > + private boolean loadedIcon; > + > + private int width; > + private int height; > + > + /** > + * @param name > + * @param title > + * @param urlLegend > + * @param formatLegend > + */ > + public MapStyle( String name, String title, String urlLegend, String > formatLegend ) { > + this.name = name; > + this.title = title; > + setUrlLegend(urlLegend); > + this.formatLegend = formatLegend; > + this.selected = false; > + } > + > + public MapStyle( String name, String title, String urlLegend, String > formatLegend, int w, int h ) { > + this.name = name; > + this.title = title; > + setUrlLegend(urlLegend); > + this.formatLegend = formatLegend; > + this.selected = false; > + this.width = w; > + this.height = h; > + } > + > + /** > + * @return > + */ > + public int getWidth() { > + return width; > + } > + /** > + * @return > + */ > + public int getHeight() { > + return height; > + } > + > + /** > + * @return > + */ > + public String getName() { > + return name; > + } > + > + /** > + * @param name > + */ > + public void setName( String name ) { > + this.name = name; > + } > + > + /** > + * @return > + */ > + public String getTitle() { > + return title; > + } > + > + /** > + * @param title > + */ > + public void setTitle( String title ) { > + this.title = title; > + } > + > + /** > + * @return > + */ > + public String getUrlLegend() { > + return urlLegend; > + } > + > + /** > + * @param newURLLegend > + */ > + public void setUrlLegend( String newURLLegend ) { > + this.urlLegend = newURLLegend; > + } > + > + /** > + * @return > + */ > + public String getFormatLegend() { > + return formatLegend; > + } > + > + /** > + * @param formatLegend > + */ > + public void setFormatLegend( String formatLegend ) { > + this.formatLegend = formatLegend; > + } > + > + @Override > + public String toString() { > + return name; > + } > + > + /** > + * Load the legend icon at first request, not before > + * > + * @return > + */ > + public Icon getLegendIcon() { > + if (!loadedIcon) { > + loadIconFromLegendURL(); > + } > + return legendIcon; > + } > + > + /** > + * Loads the WMS style legend icon on request > + */ > + private void loadIconFromLegendURL() { > + URL selectedUrl = null; > + try { > + selectedUrl = new URL(urlLegend); > + } catch (MalformedURLException e) { > + LOGGER.error(e.getMessage()); > + } > + > + if (selectedUrl != null) { > + BufferedImage image; > + try { > + image = ImageIO.read(selectedUrl); > + legendIcon = new ImageIcon(image); > + loadedIcon = true; > + } catch (IOException e) { > + LOGGER.error(e.getMessage()); > + } > + > + } else { > + loadedIcon = false; > + } > + } > + > + /** > + * @return > + */ > + public boolean isSelected() { > + return selected; > + } > + > + /** > + * @param selected > + * @param check > + */ > + public void setSelected( boolean selected, boolean check ) { > + if (check) { > + if (this.selected && !selected && layer.getStyles().size() == 1) > + return; > + if (this.selected && !selected) { > + for( Iterator<MapStyle> iter = layer.getStyles().iterator(); > iter.hasNext(); ) { > + MapStyle element = iter.next(); > + if (!element.equals(this)) > + element.setSelected(true, false); > + > + } > + } > + } > + > + this.selected = selected; > + } > + > + /** > + * > + */ > + public void fireStyleChanged() { > + layer.setSelectedStyle(this); > + } > + > + @Override > + public boolean equals( Object other ) { > + if (other == this) > + return true; > + if (!(other instanceof MapStyle)) > + return false; > + return getName().equals(((MapStyle) other).getName()); > + } > + > + /** > + * @param layer > + */ > + public void setLayer( MapLayer layer ) { > + this.layer = layer; > + } > +} > > Modified: core/trunk/src/com/vividsolutions/wms/ParserWMS1_0.java > =================================================================== > --- core/trunk/src/com/vividsolutions/wms/ParserWMS1_0.java 2015-12-23 > 15:39:50 UTC (rev 4662) > +++ core/trunk/src/com/vividsolutions/wms/ParserWMS1_0.java 2015-12-23 > 16:26:41 UTC (rev 4663) > @@ -78,11 +78,13 @@ > } > > > + @Override > protected Capabilities parseCapabilities(WMService service, Document > doc) throws IOException { > String title = getTitle(doc); > MapLayer topLayer = wmsLayerFromNode(XMLTools.simpleXPath(doc, > "WMT_MS_Capabilities/Capability/Layer")); > LinkedList<String> formatList = getFormatList(doc); > - return new Capabilities(service, title, topLayer, formatList); > + > + return new Capabilities(service, title, topLayer, formatList, > + getInfoFormats(doc)); > } > > > @@ -90,4 +92,5 @@ > return "SRS"; > } > > + > } > > Modified: core/trunk/src/com/vividsolutions/wms/ParserWMS1_1.java > =================================================================== > --- core/trunk/src/com/vividsolutions/wms/ParserWMS1_1.java 2015-12-23 > 15:39:50 UTC (rev 4662) > +++ core/trunk/src/com/vividsolutions/wms/ParserWMS1_1.java 2015-12-23 > 16:26:41 UTC (rev 4663) > @@ -84,8 +84,8 @@ > MapLayer topLayer = wmsLayerFromNode(XMLTools.simpleXPath(doc, > "WMT_MS_Capabilities/Capability/Layer")); > LinkedList<String> formatList = getFormatList(doc); > String getMapURL = getMapURL(doc); > - String getFeatureInfoURL = getFeatureInfoURL(doc); > - return new Capabilities(service, title, topLayer, formatList, > getMapURL, getFeatureInfoURL ); > + String featureInfoURL = getFeatureInfoURL(doc); > + return new Capabilities(service, title, topLayer, formatList, > + getInfoFormats(doc), getMapURL, featureInfoURL ); > } > > > > Modified: core/trunk/src/com/vividsolutions/wms/ParserWMS1_3.java > =================================================================== > --- core/trunk/src/com/vividsolutions/wms/ParserWMS1_3.java 2015-12-23 > 15:39:50 UTC (rev 4662) > +++ core/trunk/src/com/vividsolutions/wms/ParserWMS1_3.java 2015-12-23 > 16:26:41 UTC (rev 4663) > @@ -85,7 +85,7 @@ > LinkedList<String> formatList = getFormatList(doc); > String getMapURL = getMapURL(doc); > String getFeatureInfoURL = getFeatureInfoURL(doc); > - return new Capabilities(service, title, topLayer, formatList, > getMapURL, getFeatureInfoURL ); > + return new Capabilities(service, title, topLayer, formatList, > + getInfoFormats(doc), getMapURL, getFeatureInfoURL ); > } > > > > Modified: core/trunk/src/com/vividsolutions/wms/WMService.java > =================================================================== > --- core/trunk/src/com/vividsolutions/wms/WMService.java 2015-12-23 > 15:39:50 UTC (rev 4662) > +++ core/trunk/src/com/vividsolutions/wms/WMService.java 2015-12-23 > 16:26:41 UTC (rev 4663) > @@ -215,16 +215,16 @@ > * @return a MapRequest object which can be used to retrieve a map image > * from this service > */ > - public MapRequest createMapRequest() { > - // [UT] 04.02.2005 changed > - MapRequest mr = new MapRequest( this ); > - mr.setVersion( this.wmsVersion ); > - return mr; > - } > - > - public String getVersion(){ > - return wmsVersion; > - } > + public MapRequest createMapRequest() { > + // [UT] 04.02.2005 changed > + MapRequest mr = new MapRequest( this ); > + mr.setVersion( this.wmsVersion ); > + return mr; > + } > + > + public String getVersion(){ > + return wmsVersion; > + } > > // > // The WMService appends other parameters to the end of the URL @@ > -232,7 +232,7 @@ > public static String legalize(String url) { > String fixedURL = url.trim(); > > - if (fixedURL.indexOf("?") == -1) { > + if (!fixedURL.contains("?")) { > fixedURL = fixedURL + "?"; > } else { > if (fixedURL.endsWith("?")) { > > Modified: core/trunk/src/org/openjump/core/ui/plugin/queries/QueryDialog.java > =================================================================== > --- core/trunk/src/org/openjump/core/ui/plugin/queries/QueryDialog.java > 2015-12-23 15:39:50 UTC (rev 4662) > +++ core/trunk/src/org/openjump/core/ui/plugin/queries/QueryDialog.java > 2015-12-23 16:26:41 UTC (rev 4663) > @@ -22,6 +22,8 @@ > import java.text.SimpleDateFormat; > import java.util.*; > import java.util.List; > +import java.util.logging.Level; > +import java.util.logging.Logger; > import java.util.regex.Matcher; > import java.util.regex.Pattern; > > @@ -901,9 +903,13 @@ > // initialization for infoframe > InfoFrame info = null; > if(display.getState()) { > - info = new InfoFrame(context.getWorkbenchContext(), > - (LayerManagerProxy)context, > - > (TaskFrame)context.getWorkbenchFrame().getActiveInternalFrame()); > + try { > + info = new InfoFrame(context.getWorkbenchContext(), > + (LayerManagerProxy)context, > + > (TaskFrame)context.getWorkbenchFrame().getActiveInternalFrame()); > + } catch (IOException ex) { > + ex.printStackTrace(); > + } > } > > // Loop on the requested layers > > > ------------------------------------------------------------------------------ > _______________________________________________ > Jump-pilot-devel mailing list > Jump-pilot-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > > ------------------------------------------------------------------------------ > _______________________________________________ > Jump-pilot-devel mailing list > Jump-pilot-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > ------------------------------------------------------------------------------ _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel