source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java @ 12657

Last change on this file since 12657 was 12657, checked in by michael2402, 11 months ago

See #14794: Add javadoc for gui/dialogs/relation package.

  • Property svn:eol-style set to native
File size: 2.7 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.relation;
3
4import java.util.ArrayList;
5import java.util.List;
6
7import javax.swing.AbstractListModel;
8
9import org.openstreetmap.josm.data.osm.DataSet;
10import org.openstreetmap.josm.data.osm.Relation;
11import org.openstreetmap.josm.data.osm.RelationMember;
12
13/**
14 * This is the model for the {@link ReferringRelationsBrowser}.
15 * <p>
16 * It holds all referrers to a given relation
17 */
18public class ReferringRelationsBrowserModel extends AbstractListModel<Relation> {
19
20    /** the relation */
21    private transient Relation relation;
22    private final transient List<Relation> referrers = new ArrayList<>();
23
24    /**
25     * Constructs a new {@code ReferringRelationsBrowserModel}.
26     * @param relation relation
27     */
28    public ReferringRelationsBrowserModel(Relation relation) {
29        this.relation = relation;
30    }
31
32    protected void fireModelUpdate() {
33        int upper = Math.max(0, referrers.size() -1);
34        fireContentsChanged(this, 0, upper);
35    }
36
37    public void setRelation(Relation relation) {
38        this.relation = relation;
39        referrers.clear();
40        fireModelUpdate();
41    }
42
43    @Override
44    public Relation getElementAt(int index) {
45        return referrers.get(index);
46    }
47
48    @Override
49    public int getSize() {
50        return referrers.size();
51    }
52
53    protected boolean isReferringRelation(Relation parent) {
54        if (parent == null) return false;
55        for (RelationMember m: parent.getMembers()) {
56            if (m.isRelation()) {
57                Relation child = m.getRelation();
58                if (child.equals(relation)) return true;
59            }
60        }
61        return false;
62    }
63
64    public void populate(List<Relation> parents) {
65        referrers.clear();
66        if (parents != null) {
67            for (Relation relation: parents) {
68                if (isReferringRelation(relation)) {
69                    referrers.add(relation);
70                }
71            }
72        }
73        fireModelUpdate();
74    }
75
76    /**
77     * Populates the browser with the list of referring relations in the {@link DataSet} ds.
78     *
79     * @param ds the data set
80     */
81    public void populate(DataSet ds) {
82        referrers.clear();
83        if (ds == null) {
84            fireModelUpdate();
85            return;
86        }
87        for (Relation parent : ds.getRelations()) {
88            if (isReferringRelation(parent)) {
89                referrers.add(parent);
90            }
91        }
92        fireModelUpdate();
93    }
94
95    public boolean canReload() {
96        return relation != null && !relation.isNew();
97    }
98
99    public Relation getRelation() {
100        return relation;
101    }
102}
Note: See TracBrowser for help on using the repository browser.