source: josm/trunk/src/org/openstreetmap/josm/data/osm/Relation.java@ 755

Last change on this file since 755 was 755, checked in by stoecker, 16 years ago

better sorting of selected elements and relation list, reenabled relation search, translation cleanups

  • Property svn:eol-style set to native
File size: 2.5 KB
Line 
1package org.openstreetmap.josm.data.osm;
2
3import static org.openstreetmap.josm.tools.I18n.tr;
4import static org.openstreetmap.josm.tools.I18n.trn;
5
6import java.util.ArrayList;
7import java.util.Arrays;
8import java.util.List;
9
10import org.openstreetmap.josm.data.osm.visitor.Visitor;
11
12/**
13 * An relation, having a set of tags and any number (0...n) of members.
14 *
15 * @author Frederik Ramm <frederik@remote.org>
16 */
17public final class Relation extends OsmPrimitive {
18
19 /**
20 * All members of this relation. Note that after changing this,
21 * makeBackReferences and/or removeBackReferences should be called.
22 */
23 public final List<RelationMember> members = new ArrayList<RelationMember>();
24
25 @Override public void visit(Visitor visitor) {
26 visitor.visit(this);
27 }
28
29 /**
30 * Create an identical clone of the argument (including the id)
31 */
32 public Relation(Relation clone) {
33 cloneFrom(clone);
34 }
35
36 /**
37 * Create an incomplete Relation.
38 */
39 public Relation(long id) {
40 this.id = id;
41 incomplete = true;
42 }
43
44 /**
45 * Create an empty Relation. Use this only if you set meaningful values
46 * afterwards.
47 */
48 public Relation() {
49 }
50
51 @Override public void cloneFrom(OsmPrimitive osm) {
52 super.cloneFrom(osm);
53 members.clear();
54 // we must not add the members themselves, but instead
55 // add clones of the members
56 for (RelationMember em : ((Relation)osm).members) {
57 members.add(new RelationMember(em));
58 }
59 }
60
61 @Override public String toString() {
62 return "{Relation id="+id+" version="+version+" members="+Arrays.toString(members.toArray())+"}";
63 }
64
65 @Override public boolean realEqual(OsmPrimitive osm, boolean semanticOnly) {
66 return osm instanceof Relation ? super.realEqual(osm, semanticOnly) && members.equals(((Relation)osm).members) : false;
67 }
68
69 public int compareTo(OsmPrimitive o) {
70 return o instanceof Relation ? Long.valueOf(id).compareTo(o.id) : -1;
71 }
72
73 public String getName() {
74 String name;
75 if (incomplete) {
76 name = tr("incomplete");
77 } else {
78 name = get("type");
79 // FIXME add names of members
80 if (name == null)
81 name = tr("relation");
82
83 name += " (";
84 String nameTag = get("name");
85 if (nameTag == null) nameTag = get("ref");
86 if (nameTag != null) name += "\"" + nameTag + "\", ";
87 int mbno = members.size();
88 name += trn("{0} member", "{0} members", mbno, mbno) + ")";
89 }
90 return name;
91 }
92
93 public boolean isIncomplete() {
94 for (RelationMember m : members)
95 if (m.member == null)
96 return true;
97 return false;
98 }
99}
Note: See TracBrowser for help on using the repository browser.