Ticket #8491: 8491_workaround.patch

File 8491_workaround.patch, 4.4 KB (added by simon04, 12 years ago)
  • plugins/wikipedia/src/org/wikipedia/WikipediaApp.java

    diff --git a/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java b/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java
    index 77bc39b..ea8149a 100644
    a b  
    22package org.wikipedia;
    33
    44import java.io.IOException;
     5import java.io.InputStream;
    56import java.io.OutputStreamWriter;
    67import java.io.UnsupportedEncodingException;
    78import java.net.URL;
    public final class WikipediaApp {  
    4546            final String url = "http://toolserver.org/~kolossos/geoworld/marks.php?"
    4647                    + "bbox=" + bbox + "&LANG=" + wikipediaLang;
    4748            System.out.println("Wikipedia: GET " + url);
     49            return getEntriesFromCoordinates(new URL(url).openStream());
     50        } catch (Exception ex) {
     51            throw new RuntimeException(ex);
     52        }
     53    }
     54
     55    static List<WikipediaEntry> getEntriesFromCoordinates(InputStream in) {
     56        try {
    4857            // parse XML document
    4958            final XPathExpression xpathPlacemark = XPathFactory.newInstance().newXPath().compile("//Placemark");
    5059            final XPathExpression xpathName = XPathFactory.newInstance().newXPath().compile("name/text()");
    5160            final XPathExpression xpathCoord = XPathFactory.newInstance().newXPath().compile("Point/coordinates/text()");
    5261            final XPathExpression xpathDescr = XPathFactory.newInstance().newXPath().compile("description");
    53             Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new URL(url).openStream());
     62            Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in);
    5463            NodeList nodes = (NodeList) xpathPlacemark.evaluate(doc, XPathConstants.NODESET);
    5564            // construct WikipediaEntry for each XML element
    5665            List<WikipediaEntry> entries = new ArrayList<WikipediaEntry>(nodes.getLength());
    public final class WikipediaApp {  
    6069                    continue;
    6170                }
    6271                final String name = xpathName.evaluate(nodes.item(i));
    63                 final String descr = xpathDescr.evaluate(nodes.item(i));
     72                final String descr = xpathDescr.evaluate(nodes.item(i)).replace("%26amp%3B", "&");
    6473                entries.add(new WikipediaEntry(name, descr,
    6574                        new LatLon(Double.parseDouble(coord[1]), Double.parseDouble(coord[0]))));
    6675            }
  • plugins/wikipedia/test/org/wikipedia/WikipediaAppTest.java

    diff --git a/plugins/wikipedia/test/org/wikipedia/WikipediaAppTest.java b/plugins/wikipedia/test/org/wikipedia/WikipediaAppTest.java
    index 1b049e5..da3b479 100644
    a b import org.openstreetmap.josm.tools.Utils;  
    77import org.wikipedia.WikipediaApp.WikipediaEntry;
    88import org.wikipedia.WikipediaApp.WikipediaLangArticle;
    99
     10import java.io.ByteArrayInputStream;
     11import java.io.StringBufferInputStream;
     12import java.io.StringReader;
    1013import java.util.Arrays;
    1114import java.util.Collection;
    1215import java.util.List;
    public class WikipediaAppTest {  
    125128            }
    126129        }));
    127130    }
     131
     132    @Test
     133    public void testTicket8491() throws Exception {
     134        final String kml = "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n" +
     135                "<Document>\n" +
     136                "<Placemark><name>Sternheim &amp; Emanuel</name> <visibility>1</visibility>  <description><![CDATA[ <a target=\"_blank\" href=\"//de.wikipedia.org/wiki/Sternheim%20%26amp%3B%20Emanuel\">de.Wikipedia</a><br><div style=\" padding-top: 0.5em; padding-left: 0.5em; width:190px;height:250px; border:10px;\" > <img alt=\"1886_Stammhaus_Sternheim_&amp;_Emanuel_Große_Packhofstraße_44_Hannover.jpg\"  src=\"//upload.wikimedia.org/wikipedia/commons/thumb/9/95/1886_Stammhaus_Sternheim_&amp;_Emanuel_Große_Packhofstraße_44_Hannover.jpg/180px-1886_Stammhaus_Sternheim_&amp;_Emanuel_Große_Packhofstraße_44_Hannover.jpg\"></a></div><br><small>Source: de<br> style: landmark </small>]]></description>     <styleUrl>#landmark</styleUrl>    <Point><coordinates>9.736904,52.373235,0</coordinates></Point></Placemark>\n" +
     137                "</Document>\n" +
     138                "</kml>\n";
     139        final List<WikipediaEntry> entries = WikipediaApp.getEntriesFromCoordinates(new ByteArrayInputStream(kml.getBytes(Utils.UTF_8)));
     140        assertThat(entries.get(0).wikipediaArticle, is("Sternheim & Emanuel"));
     141    }
    128142}