@Override public FieldValue getFieldValue(Field field) { FieldValue fv = header.getFieldValue(field); if (fv == null) { fv = body.getFieldValue(field); } return fv; }
public static Struct valueOf(Integer x, Integer y) { Struct ret = new Struct(INSTANCE); ret.setFieldValue(FIELD_X, x != null ? new IntegerFieldValue(x) : null); ret.setFieldValue(FIELD_Y, y != null ? new IntegerFieldValue(y) : null); return ret; }
@Override public FieldValue createFieldValue(Object o) { Struct struct; if (o.getClass().equals(Struct.class)) { struct = new Struct(this); } else { // This indicates for example that o is a generated struct subtype, try the empty constructor try { struct = (Struct) o.getClass().getConstructor().newInstance(); } catch (Exception e) { // Fallback, let assign handle the error if o is completely bogus struct = new Struct(this); } } struct.assign(o); return struct; }
@Override public void assign(Object o) { if ((o instanceof Struct) && ((Struct) o).getDataType().equals(getDataType())) { clear(); Iterator<Map.Entry<Field,FieldValue>> otherValues = ((Struct) o).iterator(); while (otherValues.hasNext()) { Map.Entry<Field, FieldValue> otherEntry = otherValues.next(); setFieldValue(otherEntry.getKey(), otherEntry.getValue()); } } else { throw new IllegalArgumentException("Type " + o.getClass() + " can not specify a " + getClass() + " instance"); } }
List<java.lang.Integer> fieldLengths = new LinkedList<>(); for (Map.Entry<Field, FieldValue> value : s.getFields()) { fieldIds.add(value.getKey().getId(s.getVersion())); s.getDataType().getCompressor().compress(buffer.getByteBuffer().array(), buffer.remaining()); buf.putInt1_4Bytes(s.getFieldCount()); for (int i = 0; i < s.getFieldCount(); ++i) { putInt1_4Bytes(null, fieldIds.get(i)); putInt2_4_8Bytes(null, fieldLengths.get(i));
public void read(FieldBase fieldDef, Struct s) { s.setVersion(version); int startPos = position(); s.clear(); StructDataType type = s.getDataType(); for (int i=0; i<numberOfFields; ++i) { Field structField = type.getField(fieldIdsAndLengths.get(i).first, version); FieldValue value = structField.getDataType().createFieldValue(); value.deserialize(structField, this); s.setFieldValue(structField, value);
private void readHeaderBody(Struct primary, Struct alternate) { primary.setVersion(version); int startPos = position(); StructDataType priType = primary.getDataType(); StructDataType altType = alternate.getDataType(); for (int i=0; i<numberOfFields; ++i) { int posBefore = position(); FieldValue value = structField.getDataType().createFieldValue(); value.deserialize(structField, this); s.setFieldValue(structField, value);
@Override public int compareTo(FieldValue obj) { int cmp = super.compareTo(obj); if (cmp != 0) { return cmp; } Struct rhs = (Struct)obj; cmp = values.size() - rhs.values.size(); if (cmp != 0) { return cmp; } StructDataType type = getDataType(); for (Field field : type.getFields()) { FieldValue lhsField = getFieldValue(field); FieldValue rhsField = rhs.getFieldValue(field); if (lhsField != null && rhsField != null) { cmp = lhsField.compareTo(rhsField); if (cmp != 0) { return cmp; } } else if (lhsField != null || rhsField != null) { return (lhsField != null ? -1 : 1); } } return 0; }
public com.yahoo.compress.CompressionType getCompressionType() { if (getDataType().getCompressionConfig() == null) { return com.yahoo.compress.CompressionType.NONE; } return getDataType().getCompressionConfig().type; }
boolean hasHead = (head.getFieldCount() != 0); boolean hasBody = (body.getFieldCount() != 0); head.serialize(null, this); body.serialize(null, this);
/** * Clears this and assigns from the given {@link StructuredFieldValue} */ public void assignFrom(StructuredFieldValue sfv) { clear(); Iterator<Map.Entry<Field,FieldValue>> otherValues = sfv.iterator(); while (otherValues.hasNext()) { Map.Entry<Field, FieldValue> otherEntry = otherValues.next(); setFieldValue(otherEntry.getKey(), otherEntry.getValue()); } }
@Override public String toString() { StringBuilder retVal = new StringBuilder(); retVal.append("Struct (").append(getDataType()).append("): "); int [] increasing = getInOrder(); for (int i = 0; i < increasing.length; i++) { int id = increasing[i]; retVal.append(getDataType().getField(id)).append("=").append(values.get(id)).append(", "); } return retVal.toString(); }
private void assignPositionFieldFromStringIfNonEmpty(Struct value, String elementText, boolean base64) { String str = base64 ? Utf8.toString(new Base64().decode(elementText)) : elementText; str = str.trim(); if (str.isEmpty()) { return; } DataType valueType = value.getDataType(); if (valueType.equals(PositionDataType.INSTANCE)) { value.assign(PositionDataType.fromString(str)); } }
int type = reader.next(); if (type == XMLStreamReader.START_ELEMENT) { Field structField = value.getField(reader.getName().toString()); if (structField == null) { throw newDeserializeException(field, "Field " + reader.getName() + " not found."); value.setFieldValue(structField, fieldValue); skipToEnd(structField.getName()); foundField = true;
@Override protected void doSetFieldValue(Field field, FieldValue value) { if (field == null) { throw new IllegalArgumentException("Invalid null field pointer"); } Field myField = getDataType().getField(field.getId()); if (myField==null) { throw new IllegalArgumentException("No such field in "+getDataType()+" : "+field.getName()); } if (!myField .getDataType().isValueCompatible(value)) { throw new IllegalArgumentException( "Incompatible data types. Got " + value.getDataType() + ", expected " + myField.getDataType()); } if (myField.getId() != field.getId()) { throw new IllegalArgumentException( "Inconsistent field: " + field); } int index = values.getIndexOfKey(field.getId()); if (index == -1) { values.put(field.getId(), value); invalidateOrder(); } else { values.setValue(index, value); } }
@Override public Struct createFieldValue() { return new Struct(this); }
@Override public int getFieldCount() { return header.getFieldCount() + body.getFieldCount(); }
/** Returns true if the argument is a document which has the same set of values */ @Override public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof Document)) return false; Document other = (Document) o; return (super.equals(o) && docId.equals(other.docId) && header.equals(other.header) && body.equals(other.body)); }