@Override public B mergeFrom(P other) { excludeFromIndexes = other.excludeFromIndexes(); meaning = other.getMeaning(); set(other.get()); return self(); }
@Test public void testExcludeFromIndexes() throws Exception { for (Map.Entry<ValueType, Value<?>> entry : typeToValue.entrySet()) { assertFalse(entry.getValue().excludeFromIndexes()); } TestBuilder builder = new TestBuilder(); assertFalse(builder.build().excludeFromIndexes()); assertTrue(builder.setExcludeFromIndexes(true).build().excludeFromIndexes()); assertFalse(builder.setExcludeFromIndexes(false).build().excludeFromIndexes()); }
@SuppressWarnings("deprecation") @Override public final com.google.datastore.v1.Value toProto(P value) { com.google.datastore.v1.Value.Builder builder = com.google.datastore.v1.Value.newBuilder(); builder.setExcludeFromIndexes(value.excludeFromIndexes()); builder.setMeaning(value.getMeaning()); setValue(value, builder); return builder.build(); }
/** @return true if all values have the same index status */ private static boolean isIndexHomogeneous(final List<Value<?>> list) { if (list.isEmpty()) return true; final boolean excluded = list.get(0).excludeFromIndexes(); for (int i=1; i<list.size(); i++) { if (list.get(i).excludeFromIndexes() != excluded) return false; } return true; } }
/** * The datastore has a weird behavior of reordering values in a list so that indexed ones come before nonindexed * ones. This can really mess up ordered lists. So if we find a heterogeneous list, we need to force index everything. */ public static void homogenizeIndexes(final List<Value<?>> list) { if (isIndexHomogeneous(list)) return; for (int i=0; i<list.size(); i++) { final Value<?> value = list.get(i); if (value.excludeFromIndexes()) list.set(i, index(value, true)); } }
@SuppressWarnings({"unchecked", "deprecation"}) @Test public void testToBuilder() throws Exception { Set<String> content = Collections.singleton("bla"); @SuppressWarnings("rawtypes") ValueBuilder builder = new TestBuilder(); builder.setMeaning(1).set(content).setExcludeFromIndexes(true); Value<?> value = builder.build(); builder = value.toBuilder(); assertEquals(1, value.getMeaning()); assertTrue(value.excludeFromIndexes()); assertEquals(ValueType.LIST, value.getType()); assertEquals(content, value.get()); assertEquals(value, builder.build()); } }
/** @return a value that has the specified index flag (possibly the original itself) */ @SuppressWarnings("unchecked") public static <D> Value<D> index(final Value<D> original, final boolean index) { if (original.excludeFromIndexes() == !index) { return original; } else { return (Value<D>)original.toBuilder().setExcludeFromIndexes(!index).build(); } }
@Override public B mergeFrom(P other) { excludeFromIndexes = other.excludeFromIndexes(); meaning = other.getMeaning(); set(other.get()); return self(); }
@SuppressWarnings("deprecation") @Override public final com.google.datastore.v1.Value toProto(P value) { com.google.datastore.v1.Value.Builder builder = com.google.datastore.v1.Value.newBuilder(); builder.setExcludeFromIndexes(value.excludeFromIndexes()); builder.setMeaning(value.getMeaning()); setValue(value, builder); return builder.build(); }