// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.trustosm.data;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.bouncycastle.openpgp.PGPSignature;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.data.osm.Relation;
import org.openstreetmap.josm.data.osm.RelationMember;
public class TrustRelation extends TrustOsmPrimitive {
public static RelationMember generateRelationMemberFromSigtext(String sigtext) {
Pattern p = Pattern.compile("^RelID=(\\w*)\n(\\d*),(.*)");
Matcher m = p.matcher(sigtext);
if (m.matches()) {
OsmPrimitive osm = createOsmPrimitiveFromUniqueObjectIdentifier(m.group(2));
return new RelationMember(m.group(3), osm);
}
return null;
}
public static String generateRelationMemberSigtext(TrustRelation trust, String memID) {
Relation r = (Relation) trust.getOsmPrimitive();
List<RelationMember> members = r.getMembers();
RelationMember member = null;
for (RelationMember m : members) {
if (TrustOsmPrimitive.createUniqueObjectIdentifier(m.getMember()).equals(memID)) {
member = m;
break;
}
}
if (member == null) return "";
String sigtext = "RelID=" + r.getUniqueId() + "\n";
sigtext += TrustOsmPrimitive.createUniqueObjectIdentifier(member.getMember())+","+member.getRole();
return sigtext;
}
private final Map<String, TrustSignatures> memberSig = new HashMap<>();
public TrustRelation(OsmPrimitive osmItem) {
super(osmItem);
}
@Override
public void setOsmPrimitive(OsmPrimitive osmItem) {
if (osmItem instanceof Relation) {
osm = osmItem;
} else {
System.err.println("Error while creating TrustRelation: OsmPrimitive "+osmItem.getUniqueId()+" is not a Relation!");
}
}
public void storeMemberSig(String memID, PGPSignature sig) {
if (memberSig.containsKey(memID)) {
memberSig.get(memID).addSignature(sig, TrustRelation.generateRelationMemberSigtext(this, memID));
return;
} else {
memberSig.put(memID, new TrustSignatures(sig, TrustRelation.generateRelationMemberSigtext(this, memID), TrustSignatures.SIG_VALID));
}
}
public void setMemberRating(String memID, TrustSignatures tsigs) {
memberSig.put(memID, tsigs);
}
public Map<String, TrustSignatures> getMemberSigs() {
return memberSig;
}
}