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

Reply via email to