public boolean add(K value) { put(value, 1); return true; }
public void putAll(Map<? extends K, ? extends Integer> t) { for (Entry<? extends K, ? extends Integer> entry : t.entrySet()) { put(entry.getKey(), entry.getValue()); } }
@Override public FieldValue applyTo(FieldValue val) { if (val instanceof WeightedSet) { WeightedSet wset = (WeightedSet) val; wset.put(value, weight); } else if (val instanceof CollectionFieldValue) { CollectionFieldValue fval = (CollectionFieldValue) val; fval.add(value); } else { throw new IllegalStateException("Cannot add "+value+" to field of type " + val.getClass().getName()); } return val; }
public <T extends FieldValue> void read(FieldBase field, WeightedSet<T> value) { try { while (reader.hasNext()) { int type = reader.next(); if (type == XMLStreamReader.START_ELEMENT) { if ("item".equals(reader.getName().toString())) { FieldValue fv = value.getDataType().getNestedType().createFieldValue(); int weight = 1; for (int i = 0; i < reader.getAttributeCount(); i++) { if ("weight".equals(reader.getAttributeName(i).toString())) { weight = Integer.parseInt(reader.getAttributeValue(i)); } } deserializeFieldValue(field, fv); // noinspection unchecked value.put((T)fv, weight); 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); } }
@SuppressWarnings({ "rawtypes", "unchecked" }) private static void iterateThroughWeightedSet(TokenBuffer buffer, int initNesting, DataType valueType, WeightedSet weightedSet) { while (buffer.nesting() >= initNesting) { // XXX the keys are defined in the spec to always be represented as strings FieldValue v = valueType.createFieldValue(buffer.currentName()); weightedSet.put(v, Integer.valueOf(buffer.currentText())); buffer.next(); } } }
@SuppressWarnings({ "unchecked", "rawtypes" }) private FieldValue convertWset(WeightedSet val) { Map<FieldValue, Integer> next = new LinkedHashMap<FieldValue, Integer>(); DataType nextType = null; for (Iterator<FieldValue> it = val.fieldValueIterator(); it.hasNext();) { FieldValue prevKey = it.next(); Integer prevVal = val.get(prevKey); FieldValue nextKey = convert(prevKey); if (nextKey == null) { continue; } if (nextType == null) { nextType = nextKey.getDataType(); } else if (!nextType.isValueCompatible(nextKey)) { throw new IllegalArgumentException("Expected " + nextType.getName() + ", got " + nextKey.getDataType().getName() + "."); } next.put(nextKey, prevVal); } if (nextType == null) { return null; } WeightedSet ret = DataType.getWeightedSet(nextType, val.getDataType().createIfNonExistent(), val.getDataType().removeIfZero()).createFieldValue(); for (Map.Entry<FieldValue, Integer> entry : next.entrySet()) { ret.put(entry.getKey(), entry.getValue()); } return ret; }
((Array)val).add(upd.getValue()); } else if (val instanceof WeightedSet) { ((WeightedSet)val).put(upd.getValue(), ((AddValueUpdate)upd).getWeight()); ((Array)val).add(upd.getValue()); } else if (val instanceof WeightedSet) { ((WeightedSet)val).put(upd.getValue(), 1); throw new IllegalArgumentException("Expected integer, got " + weight.getClass().getName() + "."); ((WeightedSet)val).put(upd.getValue(), ((IntegerFieldValue)weight).getInteger()); return val; } else {
@Override public FieldValue applyTo(FieldValue fval) { if (fval instanceof Array) { Array array = (Array) fval; FieldValue element = array.getFieldValue(((IntegerFieldValue) value).getInteger()); element = update.applyTo(element); array.set(((IntegerFieldValue) value).getInteger(), element); } else if (fval instanceof WeightedSet) { WeightedSet wset = (WeightedSet) fval; WeightedSetDataType wtype = wset.getDataType(); Integer weight = wset.get(value); if (weight == null) { if (wtype.createIfNonExistent() && update instanceof ArithmeticValueUpdate) { weight = 0; } else { return fval; } } weight = (Integer) update.applyTo(new IntegerFieldValue(weight)).getWrappedValue(); wset.put(value, weight); if (wtype.removeIfZero() && update instanceof ArithmeticValueUpdate && weight == 0) { wset.remove(value); } } return fval; }