Changeset 16123 in josm
- Timestamp:
- 2020-03-14T17:03:02+01:00 (5 years ago)
- Location:
- trunk/src/org/openstreetmap/josm
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/HistoryInfoAction.java
r14397 r16123 7 7 import java.awt.event.ActionEvent; 8 8 import java.awt.event.KeyEvent; 9 import java.util.HashSet; 10 import java.util.Set; 11 12 import javax.swing.JTable; 9 13 10 14 import org.openstreetmap.josm.data.osm.OsmData; 15 import org.openstreetmap.josm.data.osm.PrimitiveId; 11 16 import org.openstreetmap.josm.gui.MainApplication; 12 17 import org.openstreetmap.josm.gui.dialogs.OsmIdSelectionDialog; … … 38 43 @Override 39 44 public void actionPerformed(ActionEvent ae) { 45 // Generic handling of tables displaying OSM primitives 46 if (ae.getSource() instanceof JTable) { 47 JTable table = (JTable) ae.getSource(); 48 Set<PrimitiveId> sel = new HashSet<>(); 49 for (int row : table.getSelectedRows()) { 50 for (int col = 0; col < table.getModel().getColumnCount(); col++) { 51 Object value = table.getModel().getValueAt(row, col); 52 if (value instanceof PrimitiveId) { 53 sel.add((PrimitiveId) value); 54 break; 55 } 56 } 57 } 58 if (!sel.isEmpty()) { 59 HistoryBrowserDialogManager.getInstance().showHistory(sel); 60 return; 61 } 62 } 63 // Otherwise show history for currently selected objects 40 64 OsmData<?, ?, ?, ?> set = getLayerManager().getActiveData(); 41 65 if (set != null && !set.selectionEmpty()) { -
trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java
r15789 r16123 144 144 this.toLoad = toLoad; 145 145 this.setChangesetDataNeeded(false); 146 add(toLoad.keySet()); 146 addOsmPrimitives(toLoad.keySet()); 147 147 // Updating process is done after all history requests have been made 148 148 HistoryDataSet.getInstance().addHistoryDataSetListener(this); -
trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
r12865 r16123 9 9 import java.util.List; 10 10 import java.util.Map; 11 import java.util.Objects; 11 12 import java.util.Set; 12 13 import java.util.concurrent.CopyOnWriteArrayList; … … 165 166 * @return the history for a primitive with id <code>id</code>. null, if no 166 167 * such history exists 167 * @throws IllegalArgumentException if pid is null168 * @throws NullPointerException if pid is null 168 169 */ 169 170 public History getHistory(PrimitiveId pid) { 170 CheckParameterUtil.ensureParameterNotNull(pid, "pid"); 171 List<HistoryOsmPrimitive> versions = data.get(pid); 172 if (versions == null && pid instanceof IPrimitive) { 173 versions = data.get(((IPrimitive) pid).getPrimitiveId()); 174 } 171 PrimitiveId key = pid instanceof IPrimitive ? ((IPrimitive) pid).getPrimitiveId() 172 : pid instanceof HistoryOsmPrimitive ? ((HistoryOsmPrimitive) pid).getPrimitiveId() 173 : pid; 174 List<HistoryOsmPrimitive> versions = data.get(Objects.requireNonNull(key, "key")); 175 175 if (versions == null) 176 176 return null; -
trunk/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java
r13625 r16123 16 16 import org.openstreetmap.josm.data.osm.Node; 17 17 import org.openstreetmap.josm.data.osm.OsmPrimitive; 18 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;19 18 import org.openstreetmap.josm.data.osm.PrimitiveData; 20 19 import org.openstreetmap.josm.data.osm.PrimitiveId; … … 32 31 * @since 1670 33 32 */ 34 public abstract class HistoryOsmPrimitive implements Tagged, Comparable<HistoryOsmPrimitive> { 33 public abstract class HistoryOsmPrimitive implements Tagged, Comparable<HistoryOsmPrimitive>, PrimitiveId { 35 34 36 35 private long id; … … 204 203 } 205 204 206 /** 207 * Returns the primitive type. 208 * @return the primitive type 209 */ 210 public abstract OsmPrimitiveType getType(); 205 @Override 206 public final long getUniqueId() { 207 return getId(); 208 } 209 210 @Override 211 public final boolean isNew() { 212 return false; 213 } 211 214 212 215 @Override -
trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
r16122 r16123 24 24 import javax.swing.DefaultListSelectionModel; 25 25 import javax.swing.JButton; 26 import javax.swing.JComponent; 26 27 import javax.swing.JOptionPane; 27 28 import javax.swing.JPanel; … … 36 37 37 38 import org.openstreetmap.josm.actions.AutoScaleAction; 39 import org.openstreetmap.josm.actions.HistoryInfoAction; 38 40 import org.openstreetmap.josm.actions.downloadtasks.ChangesetContentDownloadTask; 39 41 import org.openstreetmap.josm.data.osm.Changeset; … … 127 129 tblContent.setAutoCreateRowSorter(true); 128 130 tblContent.addMouseListener(new PopupMenuLauncher(new ChangesetContentTablePopupMenu())); 131 HistoryInfoAction historyAction = MainApplication.getMenu().historyinfo; 132 tblContent.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(historyAction.getShortcut().getKeyStroke(), "historyAction"); 133 tblContent.getActionMap().put("historyAction", historyAction); 129 134 pnl.add(new JScrollPane(tblContent), BorderLayout.CENTER); 130 135 return pnl; -
trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
r14463 r16123 4 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 5 6 import java.awt.Component; 6 7 import java.awt.Dimension; 7 8 import java.awt.Point; … … 29 30 import org.openstreetmap.josm.gui.util.WindowGeometry; 30 31 import org.openstreetmap.josm.tools.JosmRuntimeException; 32 import org.openstreetmap.josm.tools.Logging; 31 33 import org.openstreetmap.josm.tools.SubclassFilteredCollection; 32 34 import org.openstreetmap.josm.tools.bugreport.BugReportExceptionHandler; … … 57 59 private static HistoryBrowserDialogManager instance; 58 60 59 private final Map<Long, HistoryBrowserDialog> dialogs; 61 private final Map<Long, HistoryBrowserDialog> dialogs = new HashMap<>(); 60 62 61 63 private final Predicate<PrimitiveId> unloadedHistoryPredicate = new UnloadedHistoryPredicate(); … … 66 68 67 69 protected HistoryBrowserDialogManager() { 68 dialogs = new HashMap<>();69 70 MainApplication.getLayerManager().addLayerChangeListener(this); 70 71 } … … 147 148 /** 148 149 * Hides and destroys all currently visible history browser dialogs 149 * 150 * @since 2448 150 151 */ 151 152 public void hideAll() { 152 List<HistoryBrowserDialog> dialogs = new ArrayList<>(); 153 dialogs.addAll(this.dialogs.values()); 154 for (HistoryBrowserDialog dialog: dialogs) { 155 hide(dialog); 156 } 153 dialogs.values().forEach(this::hide); 157 154 } 158 155 … … 160 157 * Show history dialog for the given history. 161 158 * @param h History to show 159 * @since 2448 162 160 */ 163 161 public void show(History h) { … … 167 165 show(h.getId()); 168 166 } else { 169 HistoryBrowserDialog dialog = new HistoryBrowserDialog(h); 170 show(h.getId(), dialog); 167 show(h.getId(), new HistoryBrowserDialog(h)); 171 168 } 172 169 } … … 218 215 */ 219 216 public void showHistory(final Collection<? extends PrimitiveId> primitives) { 217 showHistory(MainApplication.getMainFrame(), primitives); 218 } 219 220 /** 221 * Show history dialog(s) for the given primitive(s). 222 * @param parent Parent component for displayed dialog boxes 223 * @param primitives The primitive(s) for which history will be displayed 224 * @since 16123 225 */ 226 public void showHistory(Component parent, final Collection<? extends PrimitiveId> primitives) { 220 227 final List<PrimitiveId> realPrimitives = new ArrayList<>(primitives); 221 228 hooks.forEach(h -> h.modifyRequestedIds(realPrimitives)); … … 223 230 if (notNewPrimitives.isEmpty()) { 224 231 JOptionPane.showMessageDialog( 225 MainApplication.getMainFrame(),232 parent, 226 233 tr("Please select at least one already uploaded node, way, or relation."), 227 234 tr("Warning"), … … 230 237 } 231 238 232 Collection<? extends PrimitiveId> toLoad = SubclassFilteredCollection.filter( realPrimitives, unloadedHistoryPredicate);239 Collection<? extends PrimitiveId> toLoad = SubclassFilteredCollection.filter(notNewPrimitives, unloadedHistoryPredicate); 233 240 if (!toLoad.isEmpty()) { 234 HistoryLoadTask task = new HistoryLoadTask(); 235 for (PrimitiveId p : notNewPrimitives) { 236 task.add(p); 237 } 238 MainApplication.worker.submit(task); 241 MainApplication.worker.submit(new HistoryLoadTask(parent).addPrimitiveIds(toLoad)); 239 242 } 240 243 … … 244 247 final History h = HistoryDataSet.getInstance().getHistory(p); 245 248 if (h == null) { 249 Logging.warn("{0} not found in HistoryDataSet", p); 246 250 continue; 247 251 } -
trunk/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java
r16056 r16123 11 11 import java.util.HashSet; 12 12 import java.util.List; 13 import java.util.Objects; 13 14 import java.util.Set; 14 15 … … 68 69 * parent for {@link org.openstreetmap.josm.gui.PleaseWaitDialog}. 69 70 * Must not be <code>null</code>. 70 * @throws IllegalArgumentException if parent is <code>null</code>71 * @throws NullPointerException if parent is <code>null</code> 71 72 */ 72 73 public HistoryLoadTask(Component parent) { 73 super(parent, tr("Load history"), true); 74 CheckParameterUtil.ensureParameterNotNull(parent, "parent"); 74 super(Objects.requireNonNull(parent, "parent"), tr("Load history"), true); 75 75 } 76 76 … … 92 92 * @param primitive the history item 93 93 * @return this task 94 * @throws IllegalArgumentException if primitive is null94 * @throws NullPointerException if primitive is null 95 95 */ 96 96 public HistoryLoadTask add(HistoryOsmPrimitive primitive) { 97 CheckParameterUtil.ensureParameterNotNull(primitive, "primitive");98 97 return add(primitive.getPrimitiveId()); 99 98 } … … 104 103 * @param history the history. Must not be null. 105 104 * @return this task 106 * @throws IllegalArgumentException if history is null105 * @throws NullPointerException if history is null 107 106 */ 108 107 public HistoryLoadTask add(History history) { 109 CheckParameterUtil.ensureParameterNotNull(history, "history");110 108 return add(history.getPrimitiveId()); 111 109 } … … 116 114 * @param primitive the OSM primitive. Must not be null. primitive.getOsmId() > 0 required. 117 115 * @return this task 118 * @throws IllegalArgumentException if the primitive is null116 * @throws NullPointerException if the primitive is null 119 117 * @throws IllegalArgumentException if primitive.getOsmId() <= 0 120 118 */ … … 130 128 * <code>primitive.getId() > 0</code> required. 131 129 * @return this task 132 * @throws IllegalArgumentException if primitives is<code>null</code>130 * @throws NullPointerException if primitives is null 133 131 * @throws IllegalArgumentException if one of the ids in the collection <= 0 134 */ 135 public HistoryLoadTask add(Collection<? extends OsmPrimitive> primitives) { 136 CheckParameterUtil.ensureParameterNotNull(primitives, "primitives"); 137 for (OsmPrimitive primitive: primitives) { 138 if (primitive != null) { 139 add(primitive); 140 } 141 } 132 * @since 16123 133 */ 134 public HistoryLoadTask addPrimitiveIds(Collection<? extends PrimitiveId> primitives) { 135 primitives.forEach(this::add); 136 return this; 137 } 138 139 /** 140 * Adds a collection of objects to loaded, specified by a collection of OSM primitives. 141 * 142 * @param primitives the OSM primitives. Must not be <code>null</code>. 143 * <code>primitive.getId() > 0</code> required. 144 * @return this task 145 * @throws NullPointerException if primitives is null 146 * @throws IllegalArgumentException if one of the ids in the collection <= 0 147 * @since 16123 148 */ 149 public HistoryLoadTask addOsmPrimitives(Collection<? extends OsmPrimitive> primitives) { 150 primitives.forEach(this::add); 142 151 return this; 143 152 }
Note:
See TracChangeset
for help on using the changeset viewer.