Ticket #18434: 18434.patch

File 18434.patch, 12.5 KB (added by taylor.smock, 4 years ago)

Initial patch (starting implementation of OsmData<?, ?, ?, ?>). DOES NOT WORK.

  • src/org/openstreetmap/josm/data/gpx/GpxData.java

     
    2222import java.util.stream.Stream;
    2323
    2424import org.openstreetmap.josm.data.Bounds;
    25 import org.openstreetmap.josm.data.Data;
    2625import org.openstreetmap.josm.data.DataSource;
    2726import org.openstreetmap.josm.data.coor.EastNorth;
    2827import org.openstreetmap.josm.data.gpx.IGpxTrack.GpxTrackChangeListener;
     28import org.openstreetmap.josm.data.osm.OsmData;
    2929import org.openstreetmap.josm.data.projection.ProjectionRegistry;
    3030import org.openstreetmap.josm.gui.MainApplication;
    3131import org.openstreetmap.josm.gui.layer.GpxLayer;
     
    3939 *
    4040 * @author Raphael Mack &lt;ramack@raphael-mack.de&gt;
    4141 */
    42 public class GpxData extends WithAttributes implements Data {
     42public class GpxData extends WithAttributes implements OsmData<GeoImagePrimitive, GpxImageEntry, GpxImageTrack, GpxImageRelation> {
    4343
    4444    /**
    4545     * Constructs a new GpxData.
  • src/org/openstreetmap/josm/data/gpx/GpxImageEntry.java

     
    99import java.util.function.Consumer;
    1010
    1111import org.openstreetmap.josm.data.coor.CachedLatLon;
     12import org.openstreetmap.josm.data.coor.EastNorth;
    1213import org.openstreetmap.josm.data.coor.LatLon;
     14import org.openstreetmap.josm.data.osm.BBox;
     15import org.openstreetmap.josm.data.osm.INode;
     16import org.openstreetmap.josm.data.osm.IPrimitive;
     17import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     18import org.openstreetmap.josm.data.osm.UniqueIdGenerator;
     19import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
     20import org.openstreetmap.josm.data.projection.ProjectionRegistry;
    1321import org.openstreetmap.josm.tools.ExifReader;
    1422import org.openstreetmap.josm.tools.JosmRuntimeException;
    1523import org.openstreetmap.josm.tools.Logging;
     
    2836 * Stores info about each image
    2937 * @since 14205 (extracted from gui.layer.geoimage.ImageEntry)
    3038 */
    31 public class GpxImageEntry implements Comparable<GpxImageEntry> {
     39public class GpxImageEntry extends GeoImagePrimitive implements INode {
     40    private static final UniqueIdGenerator idGenerator = new UniqueIdGenerator();
    3241    private File file;
    3342    private Integer exifOrientation;
    3443    private LatLon exifCoor;
     
    414423    }
    415424
    416425    @Override
    417     public int compareTo(GpxImageEntry image) {
    418         if (exifTime != null && image.exifTime != null)
    419             return exifTime.compareTo(image.exifTime);
    420         else if (exifTime == null && image.exifTime == null)
    421             return 0;
    422         else if (exifTime == null)
    423             return -1;
    424         else
    425             return 1;
     426    public int compareTo(IPrimitive iPrimitive) {
     427        if (iPrimitive instanceof GpxImageEntry) {
     428            GpxImageEntry image = (GpxImageEntry) iPrimitive;
     429            if (exifTime != null && image.exifTime != null)
     430                return exifTime.compareTo(image.exifTime);
     431            else if (exifTime == null && image.exifTime == null)
     432                return 0;
     433            else if (exifTime == null)
     434                return -1;
     435            else
     436                return 1;
     437        }
     438        return hashCode() - iPrimitive.hashCode();
    426439    }
    427440
    428441    @Override
     
    513526     * If it has been tagged i.e. matched to a gpx track or retrieved lat/lon from exif
    514527     * @return {@code true} if it has been tagged
    515528     */
     529    @Override
    516530    public boolean isTagged() {
    517531        return pos != null;
    518532    }
     
    654668            setter.accept(value);
    655669        }
    656670    }
     671
     672    @Override
     673    public void accept(PrimitiveVisitor visitor) {
     674        visitor.visit(this);
     675    }
     676
     677    @Override
     678    public void visitReferrers(PrimitiveVisitor visitor) {
     679        this.getReferrers().forEach(i -> i.accept(visitor));
     680    }
     681
     682    @Override
     683    public BBox getBBox() {
     684        return new BBox(getCoor());
     685    }
     686
     687    @Override
     688    public List<? extends IPrimitive> getReferrers(boolean allowWithoutDataset) {
     689        // TODO Auto-generated method stub
     690        return null;
     691    }
     692
     693    @Override
     694    public OsmPrimitiveType getType() {
     695        return OsmPrimitiveType.NODE;
     696    }
     697
     698    @Override
     699    public double lon() {
     700        return getCoor().lon();
     701    }
     702
     703    @Override
     704    public double lat() {
     705        return getCoor().lat();
     706    }
     707
     708    @Override
     709    public LatLon getCoor() {
     710        return pos;
     711    }
     712
     713    @Override
     714    public void setCoor(LatLon coor) {
     715        pos = new CachedLatLon(coor);
     716    }
     717
     718    @Override
     719    public void setEastNorth(EastNorth eastNorth) {
     720        pos = new CachedLatLon(ProjectionRegistry.getProjection().eastNorth2latlon(eastNorth));
     721    }
     722
     723    @Override
     724    public boolean isReferredByWays(int n) {
     725        // TODO Auto-generated method stub
     726        return false;
     727    }
     728
     729    @Override
     730    public UniqueIdGenerator getIdGenerator() {
     731        return idGenerator;
     732    }
    657733}
  • src/org/openstreetmap/josm/data/gpx/GpxImageRelation.java

     
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.data.gpx;
     3
     4import java.util.ArrayList;
     5import java.util.List;
     6import java.util.Map;
     7
     8import org.openstreetmap.josm.data.osm.BBox;
     9import org.openstreetmap.josm.data.osm.IPrimitive;
     10import org.openstreetmap.josm.data.osm.IRelation;
     11import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     12import org.openstreetmap.josm.data.osm.RelationMember;
     13import org.openstreetmap.josm.data.osm.UniqueIdGenerator;
     14import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
     15
     16public class GpxImageRelation extends GeoImagePrimitive implements IRelation<RelationMember> {
     17    List<RelationMember> members = new ArrayList<>();
     18    private static final UniqueIdGenerator idGenerator = new UniqueIdGenerator();
     19    @Override
     20    public void accept(PrimitiveVisitor visitor) {
     21        visitor.visit(this);
     22    }
     23
     24    @Override
     25    public BBox getBBox() {
     26        BBox returnBBox = new BBox();
     27        getReferrers().forEach(p -> returnBBox.add(p.getBBox()));
     28        return null;
     29    }
     30
     31    @Override
     32    public List<? extends IPrimitive> getReferrers(boolean allowWithoutDataset) {
     33        // TODO Auto-generated method stub
     34        return null;
     35    }
     36
     37    @Override
     38    public OsmPrimitiveType getType() {
     39        return OsmPrimitiveType.RELATION;
     40    }
     41
     42    @Override
     43    public int compareTo(IPrimitive o) {
     44        // TODO Auto-generated method stub
     45        return 0;
     46    }
     47
     48    @Override
     49    public UniqueIdGenerator getIdGenerator() {
     50        return idGenerator;
     51    }
     52
     53    @Override
     54    protected void keysChangedImpl(Map<String, String> originalKeys) {
     55        // TODO Auto-generated method stub
     56
     57    }
     58
     59    @Override
     60    public int getMembersCount() {
     61        return members.size();
     62    }
     63
     64    @Override
     65    public RelationMember getMember(int index) {
     66        return members.get(index);
     67    }
     68
     69    @Override
     70    public List<RelationMember> getMembers() {
     71        return new ArrayList<>(members);
     72    }
     73
     74    @Override
     75    public void setMembers(List<RelationMember> members) {
     76        this.members.clear();
     77        this.members.addAll(members);
     78    }
     79
     80    @Override
     81    public long getMemberId(int idx) {
     82        return members.get(idx).getUniqueId();
     83    }
     84
     85    @Override
     86    public String getRole(int idx) {
     87        return members.get(idx).getRole();
     88    }
     89
     90    @Override
     91    public OsmPrimitiveType getMemberType(int idx) {
     92        return members.get(idx).getType();
     93    }
     94
     95}
  • src/org/openstreetmap/josm/data/gpx/GpxImageTrack.java

     
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.data.gpx;
     3
     4import java.util.ArrayList;
     5import java.util.Collection;
     6import java.util.List;
     7import java.util.Map;
     8import java.util.stream.Collectors;
     9
     10import org.openstreetmap.josm.data.Bounds;
     11import org.openstreetmap.josm.data.osm.BBox;
     12import org.openstreetmap.josm.data.osm.INode;
     13import org.openstreetmap.josm.data.osm.IPrimitive;
     14import org.openstreetmap.josm.data.osm.IWay;
     15import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     16import org.openstreetmap.josm.data.osm.UniqueIdGenerator;
     17import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
     18
     19/**
     20 * @author Taylor Smock
     21 * @since xxx
     22 */
     23public class GpxImageTrack extends GeoImagePrimitive implements IWay<GpxImageEntry>, IGpxTrack {
     24    List<GpxImageEntry> images = new ArrayList<>();
     25    private static final UniqueIdGenerator idGenerator = new UniqueIdGenerator();
     26    @Override
     27    public void accept(PrimitiveVisitor visitor) {
     28        visitor.visit(this);
     29    }
     30
     31    @Override
     32    public void visitReferrers(PrimitiveVisitor visitor) {
     33        this.getReferrers().forEach(p -> p.accept(visitor));
     34    }
     35
     36    @Override
     37    public BBox getBBox() {
     38        BBox returnBBox = new BBox();
     39        getNodes().forEach(n -> returnBBox.add(n.getBBox()));
     40        return returnBBox;
     41    }
     42
     43    @Override
     44    public List<? extends IPrimitive> getReferrers(boolean allowWithoutDataset) {
     45        // TODO Auto-generated method stub
     46        return null;
     47    }
     48
     49    @Override
     50    public OsmPrimitiveType getType() {
     51        return isClosed() ? OsmPrimitiveType.CLOSEDWAY : OsmPrimitiveType.WAY;
     52    }
     53
     54    @Override
     55    public String getString(String key) {
     56        // TODO Auto-generated method stub
     57        return null;
     58    }
     59
     60    @Override
     61    public <T> Collection<T> getCollection(String key) {
     62        // TODO Auto-generated method stub
     63        return null;
     64    }
     65
     66    @Override
     67    public void put(String key, Object value) {
     68        // TODO Auto-generated method stub
     69
     70    }
     71
     72    @Override
     73    public Map<String, Object> getAttributes() {
     74        // TODO Auto-generated method stub
     75        return null;
     76    }
     77
     78    @Override
     79    public GpxExtensionCollection getExtensions() {
     80        // TODO Auto-generated method stub
     81        return null;
     82    }
     83
     84    @Override
     85    public Collection<IGpxTrackSegment> getSegments() {
     86        // TODO Auto-generated method stub
     87        return null;
     88    }
     89
     90    @Override
     91    public Bounds getBounds() {
     92        Bounds bounds = new Bounds(firstNode().getCoor(), lastNode().getCoor());
     93        images.forEach(i -> bounds.extend(i.getCoor()));
     94        return bounds;
     95    }
     96
     97    @Override
     98    public double length() {
     99        // TODO Auto-generated method stub
     100        return 0;
     101    }
     102
     103    @Override
     104    public int getNodesCount() {
     105        return images.size();
     106    }
     107
     108    @Override
     109    public GpxImageEntry getNode(int index) {
     110        return images.get(index);
     111    }
     112
     113    @Override
     114    public List<GpxImageEntry> getNodes() {
     115        return new ArrayList<>(images);
     116    }
     117
     118    @Override
     119    public List<Long> getNodeIds() {
     120        return images.stream().map(IPrimitive::getUniqueId).collect(Collectors.toList());
     121    }
     122
     123    @Override
     124    public long getNodeId(int idx) {
     125        return images.get(idx).getUniqueId();
     126    }
     127
     128    @Override
     129    public void setNodes(List<GpxImageEntry> nodes) {
     130        images.clear();
     131        images.addAll(nodes);
     132    }
     133
     134    @Override
     135    public boolean isClosed() {
     136        return firstNode().equals(lastNode());
     137    }
     138
     139    @Override
     140    public GpxImageEntry firstNode() {
     141        return images.get(0);
     142    }
     143
     144    @Override
     145    public GpxImageEntry lastNode() {
     146        return images.get(images.size() - 1);
     147    }
     148
     149    @Override
     150    public boolean isFirstLastNode(INode n) {
     151        return firstNode().equals(n) || lastNode().equals(n);
     152    }
     153
     154    @Override
     155    public boolean isInnerNode(INode n) {
     156        return !isFirstLastNode(n);
     157    }
     158
     159    @Override
     160    public UniqueIdGenerator getIdGenerator() {
     161        return idGenerator;
     162    }
     163
     164    @Override
     165    protected void keysChangedImpl(Map<String, String> originalKeys) {
     166        // TODO Auto-generated method stub
     167
     168    }
     169}