X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Ffunction%2FGetWikipediaFunction.java;h=be33a95b7ba3266944726b498d5bddf2e84ef8d8;hb=0a2480df5845e2d7190dfdec9b2653b1609e853d;hp=dc2da5b3cf37419704e8f08078208bf96210b26f;hpb=649c5da6ee1bbc590699e11a92316ece2ea8512d;p=GpsPrune.git diff --git a/tim/prune/function/GetWikipediaFunction.java b/tim/prune/function/GetWikipediaFunction.java index dc2da5b..be33a95 100644 --- a/tim/prune/function/GetWikipediaFunction.java +++ b/tim/prune/function/GetWikipediaFunction.java @@ -13,8 +13,8 @@ import tim.prune.data.DataPoint; import tim.prune.data.Field; import tim.prune.data.Latitude; import tim.prune.data.Longitude; -import tim.prune.function.gpsies.GenericDownloaderFunction; -import tim.prune.function.gpsies.GpsiesTrack; +import tim.prune.function.search.GenericDownloaderFunction; +import tim.prune.function.search.SearchResult; /** * Function to load nearby point information from Wikipedia @@ -71,21 +71,48 @@ public class GetWikipediaFunction extends GenericDownloaderFunction lat = (coords[0] + coords[2]) / 2.0; lon = (coords[1] + coords[3]) / 2.0; } - else { + else + { lat = point.getLatitude().getDouble(); lon = point.getLongitude().getDouble(); } - String descMessage = ""; - InputStream inStream = null; + // Firstly try the local language + String lang = I18nManager.getText("wikipedia.lang"); + submitSearch(lat, lon, lang); + // If we didn't get anything, try a secondary language + if (_trackListModel.isEmpty() && _errorMessage == null && lang.equals("als")) { + submitSearch(lat, lon, "de"); + } + // If still nothing then try english + if (_trackListModel.isEmpty() && _errorMessage == null && !lang.equals("en")) { + submitSearch(lat, lon, "en"); + } + // Set status label according to error or "none found", leave blank if ok + if (_errorMessage == null && _trackListModel.isEmpty()) { + _errorMessage = I18nManager.getText("dialog.wikipedia.nonefound"); + } + _statusLabel.setText(_errorMessage == null ? "" : _errorMessage); + } + + /** + * Submit the search for the given parameters + * @param inLat latitude + * @param inLon longitude + * @param inLang language code to use, such as en or de + */ + private void submitSearch(double inLat, double inLon, String inLang) + { // Example http://api.geonames.org/findNearbyWikipedia?lat=47&lng=9 String urlString = "http://api.geonames.org/findNearbyWikipedia?lat=" + - lat + "&lng=" + lon + "&maxRows=" + MAX_RESULTS - + "&radius=" + MAX_DISTANCE + "&lang=" + I18nManager.getText("wikipedia.lang") + inLat + "&lng=" + inLon + "&maxRows=" + MAX_RESULTS + + "&radius=" + MAX_DISTANCE + "&lang=" + inLang + "&username=" + GEONAMES_USERNAME; // Parse the returned XML with a special handler GetWikipediaXmlHandler xmlHandler = new GetWikipediaXmlHandler(); + InputStream inStream = null; + try { URL url = new URL(urlString); @@ -94,47 +121,50 @@ public class GetWikipediaFunction extends GenericDownloaderFunction saxParser.parse(inStream, xmlHandler); } catch (Exception e) { - descMessage = e.getClass().getName() + " - " + e.getMessage(); + _errorMessage = e.getClass().getName() + " - " + e.getMessage(); } // Close stream and ignore errors try { inStream.close(); } catch (Exception e) {} // Add track list to model - ArrayList trackList = xmlHandler.getTrackList(); + ArrayList trackList = xmlHandler.getTrackList(); _trackListModel.addTracks(trackList); - // Set status label according to error or "none found", leave blank if ok - if (descMessage.equals("") && (trackList == null || trackList.size() == 0)) { - descMessage = I18nManager.getText("dialog.gpsies.nonefound"); - } - _statusLabel.setText(descMessage); // Show error message if any - if (trackList == null || trackList.size() == 0) { + if (_trackListModel.isEmpty()) + { String error = xmlHandler.getErrorMessage(); - if (error != null && !error.equals("")) { + if (error != null && !error.equals("")) + { _app.showErrorMessageNoLookup(getNameKey(), error); + _errorMessage = error; } } } - /** - * Load the selected track or point + * Load the selected point(s) */ protected void loadSelected() { - // Find the row selected in the table and get the corresponding track - int rowNum = _trackTable.getSelectedRow(); - if (rowNum >= 0 && rowNum < _trackListModel.getRowCount()) + // Find the rows selected in the table and get the corresponding coords + int numSelected = _trackTable.getSelectedRowCount(); + if (numSelected < 1) return; + int[] rowNums = _trackTable.getSelectedRows(); + for (int i=0; i= 0 && rowNum < _trackListModel.getRowCount()) { - DataPoint point = new DataPoint(new Latitude(latlon[0]), new Longitude(latlon[1]), null); - point.setFieldValue(Field.WAYPT_NAME, _trackListModel.getTrack(rowNum).getTrackName(), false); - _app.createPoint(point); + String lat = _trackListModel.getTrack(rowNum).getLatitude(); + String lon = _trackListModel.getTrack(rowNum).getLongitude(); + if (lat != null && lon != null) + { + DataPoint point = new DataPoint(new Latitude(lat), new Longitude(lon), null); + point.setFieldValue(Field.WAYPT_NAME, _trackListModel.getTrack(rowNum).getTrackName(), false); + _app.createPoint(point); + } } } // Close the dialog