// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.trustosm.data; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; 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.Way; import org.openstreetmap.josm.data.osm.WaySegment; public class TrustWay extends TrustOsmPrimitive { /* public static List<WaySegment> generateSegmentListFromWay(Way w) { List<WaySegment> segList = new ArrayList<WaySegment>(); for (int i = 0; i < w.getNodesCount()-1; i++) { segList.add(new WaySegment(w,i)); } return segList; } */ public static List<Node> generateSegmentFromSigtext(String sigtext) { String[] lines = sigtext.split("\n"); List<Node> nodes = new ArrayList<>(); for (int i = 1; i < lines.length; i++) { nodes.add(TrustNode.generateNodeFromSigtext(lines[i])); } return nodes; } public static String generateSegmentSigtext(TrustWay trust, List<Node> nodes) { String sigtext = "WayID=" + trust.getOsmPrimitive().getUniqueId(); for (Node n : nodes) { sigtext += "\n" + TrustNode.generateNodeSigtext(n); } return sigtext; } private final Map<List<Node>, TrustSignatures> segmentSig = new HashMap<>(); public TrustWay(OsmPrimitive osmItem) { super(osmItem); } @Override public void setOsmPrimitive(OsmPrimitive osmItem) { if (osmItem instanceof Way) { osm = osmItem; } else { System.err.println("Error while creating TrustWay: OsmPrimitive "+osmItem.getUniqueId()+" is not a Way!"); } } public void storeSegmentSig(List<Node> nodes, PGPSignature sig) { if (segmentSig.containsKey(nodes)) { segmentSig.get(nodes).addSignature(sig, TrustWay.generateSegmentSigtext(this, nodes)); } else { segmentSig.put(nodes, new TrustSignatures(sig, TrustWay.generateSegmentSigtext(this, nodes), TrustSignatures.SIG_VALID)); } } public void setSegmentRatings(List<Node> nodes, TrustSignatures tsigs) { segmentSig.put(nodes, tsigs); } public Map<List<Node>, TrustSignatures> getSegmentSigs() { return segmentSig; } public TrustSignatures getSigsOnSegment(WaySegment seg) { List<Node> nodes = new ArrayList<>(); nodes.add(seg.getFirstNode()); nodes.add(seg.getSecondNode()); return getSigsOnSegment(nodes); } public TrustSignatures getSigsOnSegment(List<Node> nodes) { return segmentSig.get(nodes); } }