public void putAll(java.util.Map<? extends K, ? extends V> m) { for (K key : m.keySet()) { validateCompatibleTypes(getDataType().getKeyType(), key); } for (V value : m.values()) { validateCompatibleTypes(getDataType().getValueType(), value); } values.putAll(m); }
public V put(K key, V value) { validateCompatibleTypes(getDataType().getKeyType(), key); validateCompatibleTypes(getDataType().getValueType(), value); return values.put(key, value); }
public <K extends FieldValue, V extends FieldValue> void read(FieldBase field, MapFieldValue<K, V> map) { try { MapDataType dt = map.getDataType(); while (reader.hasNext()) { int type = reader.next(); if (type == XMLStreamReader.START_ELEMENT) { if ("item".equals(reader.getName().toString())) { KeyAndValue kv = new KeyAndValue(); readKeyAndValue(field, kv, dt); if (kv.key == null || kv.value == null) { throw newDeserializeException(field, "Map items must specify both key and value"); } // noinspection unchecked map.put((K)kv.key, (V)kv.value); skipToEnd("item"); } else { throw newDeserializeException(field, "Illegal tag " + reader.getName() + " expected 'item'"); } } else if (type == XMLStreamReader.END_ELEMENT) { return; } } } catch (XMLStreamException e) { throw newException(field, e); } }
@Override public void assign(Object o) { if (!checkAssign(o)) { return; } if (o instanceof WeightedSet) { WeightedSet wset = (WeightedSet) o; if (getDataType().equals(wset.getDataType())) { map.assign(wset.map); } else { throw new IllegalArgumentException("Cannot assign a weighted set of type " + wset.getDataType() + " to a weighted set of type " + getDataType()); } } else if (o instanceof Map) { map = new WeightedSetWrapper((Map)o, map.getDataType()); } else { throw new IllegalArgumentException("Class " + o.getClass() + " not applicable to an " + this.getClass() + " instance."); } }
public <K extends FieldValue, V extends FieldValue> void read(FieldBase field, MapFieldValue<K, V> map) { int numElements = getNumCollectionElems(); Map<K,V> hash = new HashMap<>(); MapDataType type = map.getDataType(); for (int i = 0; i < numElements; i++) { if (version < 7) { getInt(null); // We don't need size for anything } K key = (K) type.getKeyType().createFieldValue(); V val = (V) type.getValueType().createFieldValue(); key.deserialize(null, this); val.deserialize(null, this); hash.put(key, val); } map.clear(); map.putAll(hash); }
@SuppressWarnings({ "rawtypes", "cast", "unchecked" }) public static void fillMapFromObject(TokenBuffer buffer, MapFieldValue parent) { JsonToken token = buffer.currentToken(); int initNesting = buffer.nesting(); expectObjectStart(token); token = buffer.next(); DataType keyType = parent.getDataType().getKeyType(); DataType valueType = parent.getDataType().getValueType(); while (buffer.nesting() >= initNesting) { FieldValue key = readAtomic(buffer.currentName(), keyType); FieldValue value = readSingleValue(buffer, valueType); Preconditions.checkState(key != null && value != null, "Missing key or value for map entry."); parent.put(key, value); token = buffer.next(); } expectObjectEnd(token); }
public <K extends FieldValue, V extends FieldValue> void read(FieldBase field, MapFieldValue<K, V> map) { int numElements = getNumCollectionElems(); Map<K,V> hash = new HashMap<>(); MapDataType type = map.getDataType(); for (int i = 0; i < numElements; i++) { if (version < 7) { getInt(null); // We don't need size for anything } K key = (K) type.getKeyType().createFieldValue(); V val = (V) type.getValueType().createFieldValue(); key.deserialize(null, this); val.deserialize(null, this); hash.put(key, val); } map.clear(); map.putAll(hash); }
@SuppressWarnings({ "rawtypes", "cast", "unchecked" }) public static void fillMapFromArray(TokenBuffer buffer, MapFieldValue parent) { JsonToken token = buffer.currentToken(); int initNesting = buffer.nesting(); expectArrayStart(token); token = buffer.next(); DataType keyType = parent.getDataType().getKeyType(); DataType valueType = parent.getDataType().getValueType(); while (buffer.nesting() >= initNesting) { FieldValue key = null; FieldValue value = null; expectObjectStart(token); token = buffer.next(); for (int i = 0; i < 2; ++i) { if (MAP_KEY.equals(buffer.currentName())) { key = readSingleValue(buffer, keyType); } else if (MAP_VALUE.equals(buffer.currentName())) { value = readSingleValue(buffer, valueType); } token = buffer.next(); } Preconditions.checkState(key != null && value != null, "Missing key or value for map entry."); parent.put(key, value); expectObjectEnd(token); token = buffer.next(); // array end or next entry } }
wasModified = checkAndRemove(fieldPath.get(pos).getLookupKey(), val.iterateNested(fieldPath, pos + 1, handler), wasModified, keysToRemove); } else if (handler.createMissingPath()) { val = getDataType().getValueType().createFieldValue(); FieldPathIteratorHandler.ModificationStatus status = val.iterateNested(fieldPath, pos + 1, handler); if (status == FieldPathIteratorHandler.ModificationStatus.MODIFIED) {