source: josm/trunk/src/org/openstreetmap/josm/data/osm/DatasetCollection.java@ 3153

Last change on this file since 3153 was 3147, checked in by jttt, 14 years ago

Use virtual collections for Dataset.all... methods

  • Property svn:mime-type set to text/plain
File size: 3.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.osm;
3
4import java.util.AbstractCollection;
5import java.util.Collection;
6import java.util.Iterator;
7
8abstract class DatasetCollection extends AbstractCollection<OsmPrimitive> {
9
10 private class FilterIterator implements Iterator<OsmPrimitive> {
11
12 private final Iterator<OsmPrimitive> iterator;
13 private OsmPrimitive current;
14
15 public FilterIterator(Iterator<OsmPrimitive> iterator) {
16 this.iterator = iterator;
17 }
18
19 private void findNext() {
20 if (current == null) {
21 while (iterator.hasNext()) {
22 current = iterator.next();
23 if (filter(current))
24 return;
25 }
26 current = null;
27 }
28 }
29
30 public boolean hasNext() {
31 findNext();
32 return current != null;
33 }
34
35 public OsmPrimitive next() {
36 findNext();
37 OsmPrimitive old = current;
38 current = null;
39 return old;
40 }
41
42 public void remove() {
43 throw new UnsupportedOperationException();
44 }
45 }
46
47 private final Collection<OsmPrimitive> primitives;
48
49 public DatasetCollection(Collection<OsmPrimitive> primitives) {
50 this.primitives = primitives;
51 }
52
53 protected abstract boolean filter(OsmPrimitive primitive);
54
55 @Override
56 public Iterator<OsmPrimitive> iterator() {
57 return new FilterIterator(primitives.iterator());
58 }
59
60 @Override
61 public int size() {
62 int size = 0;
63 Iterator<OsmPrimitive> it = iterator();
64 while (it.hasNext()) {
65 size++;
66 it.next();
67 }
68 return size;
69 }
70
71 @Override
72 public boolean isEmpty() {
73 return !iterator().hasNext();
74 }
75
76 public static class AllNonDeleted extends DatasetCollection {
77
78 public AllNonDeleted(Collection<OsmPrimitive> primitives) {
79 super(primitives);
80 }
81
82 @Override
83 protected boolean filter(OsmPrimitive primitive) {
84 return primitive.isVisible() && !primitive.isDeleted();
85 }
86
87 }
88
89 public static class AllNonDeletedComplete extends DatasetCollection {
90
91 public AllNonDeletedComplete(Collection<OsmPrimitive> primitives) {
92 super(primitives);
93 }
94
95 @Override
96 protected boolean filter(OsmPrimitive primitive) {
97 return primitive.isVisible() && !primitive.isDeleted() && !primitive.isIncomplete();
98 }
99
100 }
101
102 public static class AllNonDeletedPhysical extends DatasetCollection {
103
104 public AllNonDeletedPhysical(Collection<OsmPrimitive> primitives) {
105 super(primitives);
106 }
107
108 @Override
109 protected boolean filter(OsmPrimitive primitive) {
110 return primitive.isVisible() && !primitive.isDeleted() && !primitive.isIncomplete() && !(primitive instanceof Relation);
111 }
112
113 }
114
115 public static class AllModified extends DatasetCollection {
116
117 public AllModified(Collection<OsmPrimitive> primitives) {
118 super(primitives);
119 }
120
121 @Override
122 protected boolean filter(OsmPrimitive primitive) {
123 return primitive.isVisible() && primitive.isModified();
124 }
125
126 }
127
128}
Note: See TracBrowser for help on using the repository browser.