package org.openstreetmap.josm.plugins.graphview.core.data;
/**
* source of OSM data that can be used to build graphs from
*
* @param <N> node type
* @param <W> way type
* @param <R> relation type
*/
public interface DataSource<N, W, R, M> {
/** returns all nodes */
public Iterable<N> getNodes();
/** returns all ways */
public Iterable<W> getWays();
/** returns all relations */
public Iterable<R> getRelations();
/** returns a node's latitude */
public double getLat(N node);
/** returns a node's longitude */
public double getLon(N node);
/** returns a way's nodes */
public Iterable<N> getNodes(W way);
/** returns a relation's members */
public Iterable<M> getMembers(R relation);
/** returns a node's tags */
public TagGroup getTagsN(N node);
/** returns a way's tags */
public TagGroup getTagsW(W way);
/** returns a relation's tags */
public TagGroup getTagsR(R relation);
/** returns a relation member's role */
public String getRole(M member);
/** returns a relation member's member object */
public Object getMember(M member);
/** returns whether a relation member is a node */
public boolean isNMember(M member);
/** returns whether a relation member is a way */
public boolean isWMember(M member);
/** returns whether a relation member is a relation */
public boolean isRMember(M member);
/**
* adds an observer.
* Does nothing if the parameter is already an observer of this DataSource.
*
* @param observer observer object, != null
*/
public void addObserver(DataSourceObserver observer);
/**
* deletes an observer that has been added using {@link #addObserver(DataSourceObserver)}.
* Does nothing if the parameter isn't currently an observer of this DataSource.
*
* @param observer observer object, != null
*/
public void deleteObserver(DataSourceObserver observer);
}