// License: GPL. For details, see LICENSE file.
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 */
Iterable<N> getNodes();
/** returns all ways */
Iterable<W> getWays();
/** returns all relations */
Iterable<R> getRelations();
/** returns a node's latitude */
double getLat(N node);
/** returns a node's longitude */
double getLon(N node);
/** returns a way's nodes */
Iterable<N> getNodes(W way);
/** returns a relation's members */
Iterable<M> getMembers(R relation);
/** returns a node's tags */
TagGroup getTagsN(N node);
/** returns a way's tags */
TagGroup getTagsW(W way);
/** returns a relation's tags */
TagGroup getTagsR(R relation);
/** returns a relation member's role */
String getRole(M member);
/** returns a relation member's member object */
Object getMember(M member);
/** returns whether a relation member is a node */
boolean isNMember(M member);
/** returns whether a relation member is a way */
boolean isWMember(M member);
/** returns whether a relation member is a relation */
boolean isRMember(M member);
/**
* adds an observer.
* Does nothing if the parameter is already an observer of this DataSource.
*
* @param observer observer object, != null
*/
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
*/
void deleteObserver(DataSourceObserver observer);
}