[2711] | 1 | // License: GPL. For details, see LICENSE file.
|
---|
| 2 | package org.openstreetmap.josm.gui.io;
|
---|
| 3 |
|
---|
| 4 | import java.util.ArrayList;
|
---|
| 5 | import java.util.List;
|
---|
| 6 |
|
---|
| 7 | import javax.swing.DefaultComboBoxModel;
|
---|
| 8 |
|
---|
| 9 | import org.openstreetmap.josm.data.osm.Changeset;
|
---|
| 10 | import org.openstreetmap.josm.data.osm.ChangesetCache;
|
---|
| 11 | import org.openstreetmap.josm.data.osm.ChangesetCacheEvent;
|
---|
| 12 | import org.openstreetmap.josm.data.osm.ChangesetCacheListener;
|
---|
| 13 |
|
---|
| 14 | /**
|
---|
[2781] | 15 | * A combobox model for the list of open changesets. The model is populated with the list
|
---|
[5266] | 16 | * of open changesets kept in the {@link ChangesetCache}.
|
---|
[2801] | 17 | *
|
---|
[2711] | 18 | */
|
---|
[7017] | 19 | public class OpenChangesetComboBoxModel extends DefaultComboBoxModel<Changeset> implements ChangesetCacheListener {
|
---|
[9078] | 20 | private final transient List<Changeset> changesets;
|
---|
[8840] | 21 | private transient Changeset selectedChangeset;
|
---|
[2711] | 22 |
|
---|
| 23 | protected Changeset getChangesetById(long id) {
|
---|
| 24 | for (Changeset cs : changesets) {
|
---|
| 25 | if (cs.getId() == id) return cs;
|
---|
| 26 | }
|
---|
| 27 | return null;
|
---|
| 28 | }
|
---|
| 29 |
|
---|
[7017] | 30 | /**
|
---|
| 31 | * Constructs a new {@code OpenChangesetComboBoxModel}.
|
---|
| 32 | */
|
---|
[2711] | 33 | public OpenChangesetComboBoxModel() {
|
---|
[7005] | 34 | this.changesets = new ArrayList<>();
|
---|
[2711] | 35 | }
|
---|
| 36 |
|
---|
[2781] | 37 | /**
|
---|
| 38 | * Refreshes the content of the combobox model with the current list of open
|
---|
[5266] | 39 | * changesets from the {@link ChangesetCache}.
|
---|
[2781] | 40 | */
|
---|
[2711] | 41 | public void refresh() {
|
---|
| 42 | changesets.clear();
|
---|
[9519] | 43 | changesets.addAll(ChangesetCache.getInstance().getOpenChangesetsForCurrentUser());
|
---|
[2711] | 44 | fireContentsChanged(this, 0, getSize());
|
---|
| 45 | int idx = changesets.indexOf(selectedChangeset);
|
---|
| 46 | if (idx < 0) {
|
---|
[2781] | 47 | selectFirstChangeset();
|
---|
[2711] | 48 | } else {
|
---|
| 49 | setSelectedItem(changesets.get(idx));
|
---|
| 50 | }
|
---|
| 51 | }
|
---|
| 52 |
|
---|
[2781] | 53 | /**
|
---|
| 54 | * Selects the first changeset in the current list of open changesets
|
---|
| 55 | */
|
---|
[2711] | 56 | public void selectFirstChangeset() {
|
---|
| 57 | if (changesets == null || changesets.isEmpty()) {
|
---|
| 58 | setSelectedItem(null);
|
---|
| 59 | } else {
|
---|
| 60 | setSelectedItem(changesets.get(0));
|
---|
| 61 | }
|
---|
| 62 | }
|
---|
| 63 |
|
---|
| 64 | /* ------------------------------------------------------------------------------------ */
|
---|
| 65 | /* ChangesetCacheListener */
|
---|
| 66 | /* ------------------------------------------------------------------------------------ */
|
---|
[6084] | 67 | @Override
|
---|
[2711] | 68 | public void changesetCacheUpdated(ChangesetCacheEvent event) {
|
---|
| 69 | refresh();
|
---|
| 70 | }
|
---|
| 71 |
|
---|
| 72 | /* ------------------------------------------------------------------------------------ */
|
---|
| 73 | /* ComboBoxModel */
|
---|
| 74 | /* ------------------------------------------------------------------------------------ */
|
---|
| 75 | @Override
|
---|
[7017] | 76 | public Changeset getElementAt(int index) {
|
---|
[2711] | 77 | return changesets.get(index);
|
---|
| 78 | }
|
---|
| 79 |
|
---|
| 80 | @Override
|
---|
| 81 | public int getIndexOf(Object anObject) {
|
---|
| 82 | return changesets.indexOf(anObject);
|
---|
| 83 | }
|
---|
| 84 |
|
---|
| 85 | @Override
|
---|
| 86 | public int getSize() {
|
---|
| 87 | return changesets.size();
|
---|
| 88 | }
|
---|
| 89 |
|
---|
| 90 | @Override
|
---|
| 91 | public Object getSelectedItem() {
|
---|
| 92 | return selectedChangeset;
|
---|
| 93 | }
|
---|
| 94 |
|
---|
| 95 | @Override
|
---|
| 96 | public void setSelectedItem(Object anObject) {
|
---|
| 97 | if (anObject == null) {
|
---|
| 98 | this.selectedChangeset = null;
|
---|
| 99 | super.setSelectedItem(null);
|
---|
| 100 | return;
|
---|
| 101 | }
|
---|
[8444] | 102 | if (!(anObject instanceof Changeset)) return;
|
---|
[8510] | 103 | Changeset cs = (Changeset) anObject;
|
---|
[8444] | 104 | if (cs.getId() == 0 || !cs.isOpen()) return;
|
---|
[2711] | 105 | Changeset candidate = getChangesetById(cs.getId());
|
---|
| 106 | if (candidate == null) return;
|
---|
| 107 | this.selectedChangeset = candidate;
|
---|
| 108 | super.setSelectedItem(selectedChangeset);
|
---|
| 109 | }
|
---|
| 110 | }
|
---|