public AbstractComposite(boolean dynamic, List<?> l) { this.dynamic = dynamic; this.addAll(l); }
@Override public <T> CompositeBuilder add(T value, Serializer<T> serializer) { composite.addComponent(value, serializer, equality); return this; }
public <T> AbstractComposite addComponent(T value, Serializer<T> s) { addComponent(value, s, comparatorForSerializer(s)); return this; }
protected static ByteBuffer getWithShortLength(ByteBuffer bb) { int length = getShortLength(bb); return getBytes(bb, length); }
public <T> AbstractComposite setComponent(int index, T value, Serializer<T> s) { setComponent(index, value, s, comparatorForSerializer(s)); return this; }
@SuppressWarnings("unchecked") @Override public void add(int index, Object element) { serialized = null; if (element instanceof Component) { components.add(index, (Component<?>) element); return; } element = mapIfNumber(element); Serializer s = serializerForPosition(index); if (s == null) { s = SerializerTypeInferer.getSerializer(element); } String c = comparatorForPosition(index); if (c == null) { c = comparatorForSerializer(s); } components.add(index, new Component(element, null, s, c, ComponentEquality.EQUAL)); }
@SuppressWarnings("unchecked") public void deserialize(ByteBuffer b) { serialized = b.duplicate(); components = new ArrayList<Component<?>>(); String comparator = null; int i = 0; while ((comparator = getComparator(i, b)) != null) { ByteBuffer data = getWithShortLength(b); if (data != null) { Serializer<?> s = getSerializer(i, comparator); ComponentEquality equality = ComponentEquality.fromByte(b.get()); components.add(new Component(null, data.slice(), s, comparator, equality)); } else { throw new RuntimeException("Missing component data in composite type"); } i++; } }
private String getComparator(int i, ByteBuffer bb) { String name = comparatorForPosition(i); if (name != null) { return name; int header = getShortLength(bb); if ((header & 0x8000) == 0) { name = ByteBufferUtil.string(getBytes(bb, header));
@SuppressWarnings({ "unchecked" }) private static Collection<?> flatten(Collection<?> c) { if (c instanceof AbstractComposite) { return ((AbstractComposite) c).getComponents(); } boolean hasCollection = false; for (Object o : c) { if (o instanceof Collection) { hasCollection = true; break; } } if (!hasCollection) { return c; } List newList = new ArrayList(); for (Object o : c) { if (o instanceof Collection) { newList.addAll(flatten((Collection) o)); } else { newList.add(o); } } return newList; }
@Override public boolean containsAll(Collection<?> c) { return super.containsAll(flatten(c)); }
Serializer<?> s = serializerForPosition(i); ByteBuffer cb = c.getBytes(s); if (cb == null) { String comparator = comparatorForPosition(i); if (comparator == null) { comparator = c.getComparator();
@SuppressWarnings("unchecked") @Override public Object set(int index, Object element) { serialized = null; if (element instanceof Component) { Component prev = components.set(index, (Component<?>) element); if (prev != null) { return prev.getValue(); } return null; } element = mapIfNumber(element); Serializer s = serializerForPosition(index); if (s == null) { s = SerializerTypeInferer.getSerializer(element); } String c = comparatorForPosition(index); if (c == null) { c = comparatorForSerializer(s); } Component prev = components.set(index, new Component(element, null, s, c, ComponentEquality.EQUAL)); if (prev != null) { return prev.getValue(); } return null; }
@Override public boolean removeAll(Collection<?> c) { return super.removeAll(flatten(c)); }
public <T> AbstractComposite addComponent(T value, Serializer<T> s, String comparator, ComponentEquality equality) { addComponent(-1, value, s, comparator, equality); return this; }
public <T> AbstractComposite addComponent(T value, Serializer<T> s, ComponentEquality equality) { addComponent(value, s, comparatorForSerializer(s), equality); return this; }
@Override public boolean addAll(int i, Collection<? extends Object> c) { return super.addAll(i, flatten(c)); }
public AbstractComposite(boolean dynamic, Object... o) { this.dynamic = dynamic; this.addAll(Arrays.asList(o)); }
public <T> AbstractComposite addComponent(T value, Serializer<T> s, String comparator) { addComponent(value, s, comparator, ComponentEquality.EQUAL); return this; }
@Override public boolean addAll(Collection<? extends Object> c) { return super.addAll(flatten(c)); }
@Override public CompositeBuilder addUUID(UUID value) { composite.addComponent(value, UUIDSerializer.get(), equality); return this; }