// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.trustosm.data;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.bouncycastle.openpgp.PGPSignature;
import org.openstreetmap.josm.data.osm.Node;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.data.osm.Relation;
import org.openstreetmap.josm.data.osm.Way;
public abstract class TrustOsmPrimitive {
public static String createUniqueObjectIdentifier(OsmPrimitive osm) {
String id = "";
if (osm instanceof Node) {
id = "n";
} else if (osm instanceof Way) {
id = "w";
} else if (osm instanceof Relation) {
id = "r";
}
id += osm.getUniqueId();
return id;
}
public static OsmPrimitive createOsmPrimitiveFromUniqueObjectIdentifier(String oid) {
char type = oid.charAt(0);
long id = Long.parseLong(oid.substring(1));
switch (type) {
case 'n': return new Node(id);
case 'w': return new Way(id);
case 'r': return new Relation(id);
}
return null;
}
public static TrustOsmPrimitive createTrustOsmPrimitive(OsmPrimitive osm) {
if (osm instanceof Node) {
return new TrustNode((Node) osm);
} else if (osm instanceof Way) {
return new TrustWay(osm);
} else if (osm instanceof Relation) {
return new TrustRelation(osm);
}
return null;
}
protected OsmPrimitive osm;
private final Map<String, TrustSignatures> keySig = new HashMap<>();
public TrustOsmPrimitive(OsmPrimitive osmItem) {
setOsmPrimitive(osmItem);
}
public OsmPrimitive getOsmPrimitive() {
return osm;
}
public abstract void setOsmPrimitive(OsmPrimitive osmItem);
public static String[] generateTagsFromSigtext(String sigtext) {
String[] keyValue = sigtext.substring(sigtext.indexOf('\n')+1).split("=");
return keyValue;
}
public static String generateTagSigtext(OsmPrimitive osm, String key) {
String sigtext = "ID=" + osm.getUniqueId() + "\n";
sigtext += key + "=" + osm.get(key);
return sigtext;
}
public void storeTagSig(String key, PGPSignature sig) {
if (keySig.containsKey(key)) {
keySig.get(key).addSignature(sig, TrustOsmPrimitive.generateTagSigtext(osm, key));
return;
} else if (osm.keySet().contains(key)) {
keySig.put(key, new TrustSignatures(sig, TrustOsmPrimitive.generateTagSigtext(osm, key), TrustSignatures.SIG_VALID));
}
}
public void setTagRatings(String key, TrustSignatures tsigs) {
keySig.put(key, tsigs);
}
/*
public Map<Node, TrustSignatures> getGeomSigs() {
return geomSig;
}
public TrustSignatures getSigsOnNode(Node node) {
return geomSig.get(node);
}*/
public Set<String> getSignedKeys() {
return keySig.keySet();
}
public Map<String, TrustSignatures> getTagSigs() {
return keySig;
}
public TrustSignatures getSigsOnKey(String key) {
return keySig.get(key);
}
public void updateTagSigStatus(String key, byte status) {
if (keySig.containsKey(key)) {
keySig.get(key).setStatus(status);
} else if (osm.keySet().contains(key)) {
TrustSignatures tsigs = new TrustSignatures();
tsigs.setStatus(status);
keySig.put(key, tsigs);
}
}
/*
public void updateNodeSigStatus(Node node, byte status) {
if (geomSig.containsKey(node)) {
geomSig.get(node).setStatus(status);
} else {
TrustSignatures tsigs = new TrustSignatures();
tsigs.setStatus(status);
geomSig.put(node, tsigs);
}
}*/
}