diff --git a/ipaacalib/java/src/ipaaca/Payload.java b/ipaacalib/java/src/ipaaca/Payload.java index 5d1ed1d61a36cfd11e687b5904706e629adcf253..aee8d7b5e07e4832801e410aa18ebde4132b3db7 100644 --- a/ipaacalib/java/src/ipaaca/Payload.java +++ b/ipaacalib/java/src/ipaaca/Payload.java @@ -36,7 +36,10 @@ import ipaaca.protobuf.Ipaaca.PayloadItem; import org.apache.commons.lang.StringEscapeUtils; +import com.google.common.collect.ImmutableSet; + import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -49,7 +52,7 @@ import java.util.Set; */ public class Payload implements Map<String, String> { - private Map<String, String> map = new HashMap<String, String>(); + private Map<String, String> map = Collections.synchronizedMap(new HashMap<String, String>()); private final AbstractIU iu; public Payload(AbstractIU iu) @@ -82,17 +85,23 @@ public class Payload implements Map<String, String> public void set(Map<String, String> newPayload, String writerName) { iu.setPayload(newPayload, writerName); - map.clear(); - map.putAll(newPayload); + synchronized(map) + { + map.clear(); + map.putAll(newPayload); + } } public void set(List<PayloadItem> newPayload, String writerName) { iu.handlePayloadSetting(newPayload, writerName); - map.clear(); - for (PayloadItem item : newPayload) + synchronized(map) { - map.put(item.getKey(), pseudoConvertFromJSON(item.getValue(), item.getType())); + map.clear(); + for (PayloadItem item : newPayload) + { + map.put(item.getKey(), pseudoConvertFromJSON(item.getValue(), item.getType())); + } } } @@ -136,9 +145,12 @@ public class Payload implements Map<String, String> return map.containsValue(value); } - public Set<java.util.Map.Entry<String, String>> entrySet() + /** + * Provides an immutable copy of the entryset of the Payload + */ + public ImmutableSet<java.util.Map.Entry<String, String>> entrySet() { - return map.entrySet(); + return ImmutableSet.copyOf(map.entrySet()); } public boolean equals(Object o)