Changeset 3801 in josm


Ignore:
Timestamp:
2011-01-22T14:36:36+01:00 (13 years ago)
Author:
bastiK
Message:

generalize DatasetCollection.java (make OsmPrimitive a generic type parameter)

Location:
trunk/src/org/openstreetmap/josm
Files:
4 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/DataSet.java

    r3782 r3801  
    3434import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
    3535import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
     36import org.openstreetmap.josm.tools.FilteredCollection;
    3637import org.openstreetmap.josm.tools.Predicate;
     38import org.openstreetmap.josm.tools.SubclassFilteredCollection;
    3739
    3840/**
     
    174176
    175177    private <T extends OsmPrimitive> Collection<T> getPrimitives(Predicate<OsmPrimitive> predicate) {
    176         return new DatasetCollection<T>(allPrimitives, predicate);
     178        return new SubclassFilteredCollection<OsmPrimitive, T>(allPrimitives, predicate);
    177179    }
    178180
     
    386388
    387389    public Collection<OsmPrimitive> getSelectedNodesAndWays() {
    388         return new DatasetCollection<OsmPrimitive>(getSelected(), new Predicate<OsmPrimitive>() {
     390        return new FilteredCollection<OsmPrimitive>(getSelected(), new Predicate<OsmPrimitive>() {
    389391            @Override
    390392            public boolean evaluate(OsmPrimitive primitive) {
     
    415417     */
    416418    public Collection<Node> getSelectedNodes() {
    417         return new DatasetCollection<Node>(getSelected(), OsmPrimitive.nodePredicate);
     419        return new SubclassFilteredCollection<OsmPrimitive, Node>(getSelected(), OsmPrimitive.nodePredicate);
    418420    }
    419421
     
    422424     */
    423425    public Collection<Way> getSelectedWays() {
    424         return new DatasetCollection<Way>(getSelected(), OsmPrimitive.wayPredicate);
     426        return new SubclassFilteredCollection<OsmPrimitive, Way>(getSelected(), OsmPrimitive.wayPredicate);
    425427    }
    426428
     
    429431     */
    430432    public Collection<Relation> getSelectedRelations() {
    431         return new DatasetCollection<Relation>(getSelected(), OsmPrimitive.relationPredicate);
     433        return new SubclassFilteredCollection<OsmPrimitive, Relation>(getSelected(), OsmPrimitive.relationPredicate);
    432434    }
    433435
  • trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java

    r3443 r3801  
    3838import org.openstreetmap.josm.command.Command;
    3939import org.openstreetmap.josm.command.PseudoCommand;
    40 import org.openstreetmap.josm.data.osm.DatasetCollection;
    4140import org.openstreetmap.josm.data.osm.OsmPrimitive;
    4241import org.openstreetmap.josm.gui.MapFrame;
     
    4544import org.openstreetmap.josm.gui.layer.OsmDataLayer.CommandQueueListener;
    4645import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
     46import org.openstreetmap.josm.tools.FilteredCollection;
    4747import org.openstreetmap.josm.tools.GBC;
    4848import org.openstreetmap.josm.tools.ImageProvider;
     
    331331            final OsmDataLayer currentLayer = Main.map.mapView.getEditLayer();
    332332
    333             DatasetCollection<OsmPrimitive> prims = new DatasetCollection<OsmPrimitive>(
     333            FilteredCollection<OsmPrimitive> prims = new FilteredCollection<OsmPrimitive>(
    334334                    c.getParticipatingPrimitives(),
    335335                    new Predicate<OsmPrimitive>(){
  • trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java

    r3750 r3801  
    1717import org.openstreetmap.josm.gui.ExtendedDialog;
    1818import org.openstreetmap.josm.data.osm.DataSet;
    19 import org.openstreetmap.josm.data.osm.DatasetCollection;
     19import org.openstreetmap.josm.tools.SubclassFilteredCollection;
    2020import org.openstreetmap.josm.data.osm.Node;
    2121import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    6565    protected String buildText() {
    6666        StringBuilder s = new StringBuilder();
    67         for (Node n : new DatasetCollection<Node>(primitives, OsmPrimitive.nodePredicate)) {
     67        for (Node n : new SubclassFilteredCollection<OsmPrimitive, Node>(primitives, OsmPrimitive.nodePredicate)) {
    6868            s.append("Node id="+n.getUniqueId());
    6969            if (!checkDataSet(n)) {
     
    8787        }
    8888
    89         for (Way w : new DatasetCollection<Way>(primitives, OsmPrimitive.wayPredicate)) {
     89        for (Way w : new SubclassFilteredCollection<OsmPrimitive, Way>(primitives, OsmPrimitive.wayPredicate)) {
    9090            s.append("Way id="+ w.getUniqueId());
    9191            if (!checkDataSet(w)) {
     
    110110        }
    111111
    112         for (Relation r : new DatasetCollection<Relation>(primitives, OsmPrimitive.relationPredicate)) {
     112        for (Relation r : new SubclassFilteredCollection<OsmPrimitive, Relation>(primitives, OsmPrimitive.relationPredicate)) {
    113113            s.append("Relation id="+r.getUniqueId());
    114114            if (!checkDataSet(r)) {
     
    181181        // add way referrer
    182182        List<OsmPrimitive> refs = n.getReferrers();
    183         DatasetCollection<Way> wayRefs = new DatasetCollection<Way>(refs, OsmPrimitive.wayPredicate);
     183        Collection<Way> wayRefs = new SubclassFilteredCollection<OsmPrimitive, Way>(refs, OsmPrimitive.wayPredicate);
    184184        if (wayRefs.size() > 0) {
    185185            s.append("  way referrer:\n");
     
    192192    protected void addRelationReferrer(StringBuilder s, OsmPrimitive o) {
    193193        List<OsmPrimitive> refs = o.getReferrers();
    194         DatasetCollection<Relation> relRefs = new DatasetCollection<Relation>(refs, OsmPrimitive.relationPredicate);
     194        Collection<Relation> relRefs = new SubclassFilteredCollection<OsmPrimitive, Relation>(refs, OsmPrimitive.relationPredicate);
    195195        if (relRefs.size() > 0) {
    196196            s.append("  relation referrer:\n");
  • trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r3669 r3801  
    5050import org.openstreetmap.josm.data.osm.DataSetMerger;
    5151import org.openstreetmap.josm.data.osm.DataSource;
    52 import org.openstreetmap.josm.data.osm.DatasetCollection;
    5352import org.openstreetmap.josm.data.osm.DatasetConsistencyTest;
    5453import org.openstreetmap.josm.data.osm.Node;
     
    7170import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
    7271import org.openstreetmap.josm.tools.DateUtils;
     72import org.openstreetmap.josm.tools.FilteredCollection;
    7373import org.openstreetmap.josm.tools.GBC;
    7474import org.openstreetmap.josm.tools.ImageProvider;
     
    271271
    272272    @Override public String getToolTipText() {
    273         int nodes = new DatasetCollection<OsmPrimitive>(data.getNodes(), OsmPrimitive.nonDeletedPredicate).size();
    274         int ways = new DatasetCollection<OsmPrimitive>(data.getWays(), OsmPrimitive.nonDeletedPredicate).size();
     273        int nodes = new FilteredCollection<Node>(data.getNodes(), OsmPrimitive.nonDeletedPredicate).size();
     274        int ways = new FilteredCollection<Way>(data.getWays(), OsmPrimitive.nonDeletedPredicate).size();
    275275
    276276        String tool = trn("{0} node", "{0} nodes", nodes, nodes)+", ";
  • trunk/src/org/openstreetmap/josm/tools/SubclassFilteredCollection.java

    r3800 r3801  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.data.osm;
     2package org.openstreetmap.josm.tools;
    33
    44import java.util.AbstractCollection;
     
    66import java.util.Iterator;
    77
    8 import org.openstreetmap.josm.tools.Predicate;
     8/**
     9 * Filtered view of a collection.
     10 * (read-only collection, but elements can be changed, of course)
     11 * Lets you iterate through those elements of a given collection that satisfy a
     12 * certain condition (imposed by a predicate).
     13 * @param <S> element type of the underlying collection
     14 * @param <T> element type of filtered collection (and subclass of S). The predicate
     15 *      must except only objects of type T.
     16 */
     17public class SubclassFilteredCollection<S, T extends S> extends AbstractCollection<T> {
    918
    10 public class DatasetCollection<T extends OsmPrimitive> extends AbstractCollection<T> {
     19    private final Collection<? extends S> collection;
     20    private final Predicate<? super S> predicate;
     21    int size = -1;
    1122
    1223    private class FilterIterator implements Iterator<T> {
    1324
    14         private final Iterator<? extends OsmPrimitive> iterator;
    15         private OsmPrimitive current;
     25        private final Iterator<? extends S> iterator;
     26        private S current;
    1627
    17         public FilterIterator(Iterator<? extends OsmPrimitive> iterator) {
     28        public FilterIterator(Iterator<? extends S> iterator) {
    1829            this.iterator = iterator;
    1930        }
     
    3546        }
    3647
    37         @SuppressWarnings("unchecked")
    3848        public T next() {
    3949            findNext();
    40             OsmPrimitive old = current;
     50            S old = current;
    4151            current = null;
    42             return (T)old;
     52            return (T) old;
    4353        }
    4454
     
    4858    }
    4959
    50     private final Collection<? extends OsmPrimitive> primitives;
    51     private final Predicate<OsmPrimitive> predicate;
    52     int size = -1;
    53 
    54     public DatasetCollection(Collection<? extends OsmPrimitive> primitives, Predicate<OsmPrimitive> predicate) {
    55         this.primitives = primitives;
     60    public SubclassFilteredCollection(Collection<? extends S> collection, Predicate<? super S> predicate) {
     61        this.collection = collection;
    5662        this.predicate = predicate;
    5763    }
     
    5965    @Override
    6066    public Iterator<T> iterator() {
    61         return new FilterIterator(primitives.iterator());
     67        return new FilterIterator(collection.iterator());
    6268    }
    6369
Note: See TracChangeset for help on using the changeset viewer.