source: josm/src/org/openstreetmap/josm/data/osm/DataSet.java@ 247

Last change on this file since 247 was 247, checked in by framm, 17 years ago

Display a yellow rectangle around the original download bounding box(es). Fixes (well, almost) #149.
Still todo: merge rectangles into nice polygon; possibly shade outlying area and optionally forbid changes to items in that area.

File size: 4.1 KB
Line 
1package org.openstreetmap.josm.data.osm;
2
3import java.util.Arrays;
4import java.util.Collection;
5import java.util.Collections;
6import java.util.HashSet;
7import java.util.LinkedList;
8import java.util.List;
9
10import org.openstreetmap.josm.data.SelectionChangedListener;
11
12/**
13 * DataSet is the data behind the application. It can consists of only a few
14 * points up to the whole osm database. DataSet's can be merged together,
15 * saved, (up/down/disk)loaded etc.
16 *
17 * Note, that DataSet is not an osm-primitive and so has no key association
18 * but a few members to store some information.
19 *
20 * @author imi
21 */
22public class DataSet {
23
24 /**
25 * All nodes goes here, even when included in other data (ways etc).
26 * This enables the instant conversion of the whole DataSet by iterating over
27 * this data structure.
28 */
29 public Collection<Node> nodes = new LinkedList<Node>();
30
31 /**
32 * All segments goes here, even when they are in a way.
33 */
34 public Collection<Segment> segments = new LinkedList<Segment>();
35
36 /**
37 * All ways (Streets etc.) in the DataSet.
38 *
39 * The nodes of the way segments of this way must be objects from
40 * the nodes list, however the way segments are stored only in the
41 * way list.
42 */
43 public Collection<Way> ways = new LinkedList<Way>();
44
45 /**
46 * All data sources of this DataSet.
47 */
48 public Collection<DataSource> dataSources = new LinkedList<DataSource>();
49
50 /**
51 * A list of listeners to selection changed events.
52 */
53 transient public Collection<SelectionChangedListener> listeners = new LinkedList<SelectionChangedListener>();
54
55 /**
56 * @return A collection containing all primitives of the dataset. The
57 * data is ordered after: first comes nodes, then segments, then ways.
58 * Ordering in between the categories is not guaranteed.
59 */
60 public List<OsmPrimitive> allPrimitives() {
61 List<OsmPrimitive> o = new LinkedList<OsmPrimitive>();
62 o.addAll(nodes);
63 o.addAll(segments);
64 o.addAll(ways);
65 return o;
66 }
67
68 /**
69 * @return A collection containing all not-deleted primitives (except keys).
70 */
71 public Collection<OsmPrimitive> allNonDeletedPrimitives() {
72 Collection<OsmPrimitive> o = new LinkedList<OsmPrimitive>();
73 for (OsmPrimitive osm : allPrimitives())
74 if (!osm.deleted)
75 o.add(osm);
76 return o;
77 }
78
79 /**
80 * Remove the selection of the whole dataset.
81 */
82 public void clearSelection() {
83 clearSelection(nodes);
84 clearSelection(segments);
85 clearSelection(ways);
86 Collection<OsmPrimitive> sel = Collections.emptyList();
87 fireSelectionChanged(sel);
88 }
89
90 /**
91 * Return a list of all selected objects. Even keys are returned.
92 * @return List of all selected objects.
93 */
94 public Collection<OsmPrimitive> getSelected() {
95 Collection<OsmPrimitive> sel = getSelected(nodes);
96 sel.addAll(getSelected(segments));
97 sel.addAll(getSelected(ways));
98 return sel;
99 }
100
101 public void setSelected(Collection<? extends OsmPrimitive> selection) {
102 clearSelection();
103 for (OsmPrimitive osm : selection)
104 osm.selected = true;
105 fireSelectionChanged(selection);
106 }
107
108 public void setSelected(OsmPrimitive osm) {
109 clearSelection();
110 if (osm == null)
111 return;
112 osm.selected = true;
113 fireSelectionChanged(Arrays.asList(new OsmPrimitive[]{osm}));
114 }
115
116 /**
117 * Remove the selection from every value in the collection.
118 * @param list The collection to remove the selection from.
119 */
120 private void clearSelection(Collection<? extends OsmPrimitive> list) {
121 if (list == null)
122 return;
123 for (OsmPrimitive osm : list)
124 osm.selected = false;
125 }
126
127 /**
128 * Return all selected items in the collection.
129 * @param list The collection from which the selected items are returned.
130 */
131 private Collection<OsmPrimitive> getSelected(Collection<? extends OsmPrimitive> list) {
132 Collection<OsmPrimitive> sel = new HashSet<OsmPrimitive>();
133 if (list == null)
134 return sel;
135 for (OsmPrimitive osm : list)
136 if (osm.selected && !osm.deleted)
137 sel.add(osm);
138 return sel;
139 }
140
141 /**
142 * Remember to fire an selection changed event. A call to this will not fire
143 * the event immediately. For more, @see SelectionChangedListener
144 */
145 public void fireSelectionChanged(Collection<? extends OsmPrimitive> sel) {
146 for (SelectionChangedListener l : listeners)
147 l.selectionChanged(sel);
148 }
149}
Note: See TracBrowser for help on using the repository browser.