// License: GPL. For details, see LICENSE file.
package org.openstreetmap.beboj.shared.data.osm;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.openstreetmap.josm.data.osm.DataSet;
import org.openstreetmap.josm.data.osm.Node;
import org.openstreetmap.josm.data.osm.NodeData;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.data.osm.PrimitiveData;
import org.openstreetmap.josm.data.osm.Relation;
import org.openstreetmap.josm.data.osm.RelationData;
import org.openstreetmap.josm.data.osm.Way;
import org.openstreetmap.josm.data.osm.WayData;
import com.google.gwt.user.client.rpc.IsSerializable;
/**
* Just the plain data from a DataSet; for RPC transfer.
*/
public class SimpleDataSet implements IsSerializable {
public ArrayList<NodeData> nodes;
public ArrayList<WayData> ways;
public ArrayList<RelationData> relations;
public String version;
// /**
// * All data sources of this DataSet.
// */
// public Collection<DataSource> dataSources = new LinkedList<DataSource>();
public SimpleDataSet() {
this("0.6");
}
public SimpleDataSet(String version) {
this.version = version;
nodes = new ArrayList<NodeData>();
ways = new ArrayList<WayData>();
relations = new ArrayList<RelationData>();
}
public static SimpleDataSet fromDataSet(DataSet ds) {
SimpleDataSet s = new SimpleDataSet();
for (Node n : ds.getNodes()) {
NodeData nd = n.save();
s.nodes.add(nd);
}
for (Way w : ds.getWays()) {
WayData wd = w.save();
s.ways.add(wd);
}
for (Relation r : ds.getRelations()) {
RelationData rd = r.save();
s.relations.add(rd);
}
s.version = ds.getVersion();
return s;
}
public Collection<PrimitiveData> allPrimitives() {
List<PrimitiveData> all = new ArrayList<PrimitiveData>();
all.addAll(nodes);
all.addAll(ways);
all.addAll(relations);
return all;
}
public DataSet toDataSet() {
DataSet ds = new DataSet();
for (NodeData nd : nodes) {
Node n = new Node(nd.getUniqueId(), true);
n.load(nd);
ds.addPrimitive(n);
}
for (WayData wd : ways) {
Way w = new Way(wd.getUniqueId(), true);
ds.addPrimitive(w);
w.load(wd);
}
for (RelationData rd : relations) {
Relation r = new Relation(rd.getUniqueId(), true);
ds.addPrimitive(r);
r.load(rd);
}
return ds;
}
public void add(PrimitiveData osm) {
if (osm instanceof NodeData) {
nodes.add((NodeData) osm);
} else if (osm instanceof WayData) {
ways.add((WayData) osm);
} else if (osm instanceof RelationData) {
relations.add((RelationData) osm);
} else
throw new AssertionError();
}
public void addForUpload(DataSet ds) {
for (OsmPrimitive osm : ds.allPrimitives()) {
if ((osm.isDeleted() && !osm.isNew() && osm.isModified() && osm.isVisible())
|| (!osm.isDeleted() && osm.isModified())) {
add(osm.save());
}
}
}
public void addAll(Iterable<OsmPrimitive> primitives) {
for (OsmPrimitive osm : primitives) {
add(osm.save());
}
}
@Override
public String toString() {
return version+nodes.size()+"|";
}
}