source: josm/trunk/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java@ 8247

Last change on this file since 8247 was 8196, checked in by simon04, 9 years ago

Search Notes: consider numeric value as note id to load

File size: 3.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.GridBagConstraints;
7import java.awt.GridBagLayout;
8import java.awt.event.ActionEvent;
9import java.io.UnsupportedEncodingException;
10import java.net.URLEncoder;
11import java.util.Collections;
12import java.util.LinkedList;
13import java.util.List;
14
15import javax.swing.JLabel;
16import javax.swing.JOptionPane;
17import javax.swing.JPanel;
18
19import org.openstreetmap.josm.Main;
20import org.openstreetmap.josm.actions.downloadtasks.DownloadNotesTask;
21import org.openstreetmap.josm.gui.ExtendedDialog;
22import org.openstreetmap.josm.gui.Notification;
23import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
24import org.openstreetmap.josm.io.OsmApi;
25
26/**
27 * Action to use the Notes search API to download all notes matching a given search term.
28 * @since 8071
29 */
30public class SearchNotesDownloadAction extends JosmAction {
31
32 private static final String HISTORY_KEY = "osm.notes.searchHistory";
33
34 /** Constructs a new note search action */
35 public SearchNotesDownloadAction() {
36 super(tr("Search Notes..."), "note_search", tr("Download notes from the note search API"), null, false);
37 }
38
39 @Override
40 public void actionPerformed(ActionEvent e) {
41 HistoryComboBox searchTermBox = new HistoryComboBox();
42 List<String> searchHistory = new LinkedList<>(Main.pref.getCollection(HISTORY_KEY, new LinkedList<String>()));
43 Collections.reverse(searchHistory);
44 searchTermBox.setPossibleItems(searchHistory);
45
46 JPanel contentPanel = new JPanel(new GridBagLayout());
47 GridBagConstraints gc = new GridBagConstraints();
48 gc.fill = GridBagConstraints.HORIZONTAL;
49 gc.weightx = 1.0;
50 gc.anchor = GridBagConstraints.FIRST_LINE_START;
51 contentPanel.add(new JLabel(tr("Search the OSM API for notes containing words:")), gc);
52 gc.gridy = 1;
53 contentPanel.add(searchTermBox, gc);
54
55 ExtendedDialog ed = new ExtendedDialog(Main.parent, tr("Search for notes"),
56 new String[] {tr("Search for notes"), tr("Cancel")});
57 ed.setContent(contentPanel);
58 ed.setButtonIcons(new String[] {"note_search", "cancel"});
59 ed.showDialog();
60 if (ed.getValue() != 1) {
61 return;
62 }
63
64 String searchTerm = searchTermBox.getText();
65 if (searchTerm == null || searchTerm.trim().isEmpty()) {
66 Notification notification = new Notification(tr("You must enter a search term"));
67 notification.setIcon(JOptionPane.WARNING_MESSAGE);
68 notification.show();
69 return;
70 }
71
72 searchTermBox.addCurrentItemToHistory();
73 Main.pref.putCollection(HISTORY_KEY, searchTermBox.getHistory());
74
75 performSearch(searchTerm);
76
77 }
78
79 public void performSearch(String searchTerm) {
80
81 searchTerm = searchTerm.trim();
82
83 try {
84 final long id = Long.parseLong(searchTerm);
85 new DownloadNotesTask().download(false, id, null);
86 return;
87 } catch (NumberFormatException ignore) {
88 }
89
90 int noteLimit = Main.pref.getInteger("osm.notes.downloadLimit", 1000);
91 int closedLimit = Main.pref.getInteger("osm.notes.daysCloased", 7);
92
93 StringBuilder sb = new StringBuilder();
94 sb.append(OsmApi.getOsmApi().getBaseUrl());
95 sb.append("notes/search?limit=");
96 sb.append(noteLimit);
97 sb.append("&closed=");
98 sb.append(closedLimit);
99 sb.append("&q=");
100 try {
101 sb.append(URLEncoder.encode(searchTerm, "UTF-8"));
102 } catch (UnsupportedEncodingException ex) {
103 Main.error(ex, true); // thrown if UTF-8 isn't supported which seems unlikely.
104 return;
105 }
106
107 new DownloadNotesTask().loadUrl(false, sb.toString(), null);
108 }
109}
Note: See TracBrowser for help on using the repository browser.