public static <E> DocumentBasedAssignment create( DocumentEventRouter<? super E, E, ?> router, E container) { DocumentBasedAssignment assignment = new DocumentBasedAssignment( DocumentBasedStructuredValue.create(router, container, Serializer.STRING, Key.class)); assignment.value.addListener(assignment); return assignment; }
public void onDeleted() { // TODO(anorth): detach listeners when EventPlumber makes that possible. triggerOnDeleted(); }
@Override public void onAttributesChanged(E element, final Map<String, String> oldValues, final Map<String, String> newValues) { assert element.equals(this.element) : "Received event for unrelated element"; final Map<K, V> oldFields = CollectionUtils.newHashMap(); final Map<K, V> newFields = CollectionUtils.newHashMap(); K[] names = keyClass.getEnumConstants(); for (K name : names) { if (oldValues.containsKey(name.toString()) || newValues.containsKey(name.toString())) { String oldValueStr = oldValues.get(name.toString()); String newValueStr = newValues.get(name.toString()); V oldValue = serializer.fromString(oldValueStr); V newValue = serializer.fromString(newValueStr); if (ValueUtils.notEqual(oldValue, newValue)) { oldFields.put(name, oldValue); newFields.put(name, newValue); } } } assert oldFields.keySet().equals(newFields.keySet()); if (!oldFields.isEmpty()) { triggerOnValuesChanged(oldFields, newFields); } }
@Override public Initializer createInitializer(AssignmentInitializer initialState) { return new CompoundInitializer( DocumentBasedStructuredValue.createInitialiser(Serializer.STRING, CollectionUtils.immutableMap(Key.ADDRESS, initialState.address, Key.ROLE, RoleSerializer.INSTANCE.toString(initialState.role)))); } };
/** * Creates a structured value. * * @param router router for the document holding the value state * @param element element on which the value state is stored * @param serializer converter between strings and values * @param keyClass class object for the key type */ public static <E, K extends Enum<K>, C extends Comparable<C>> DocumentBasedStructuredValue<E, K, C> create( DocumentEventRouter<? super E, E, ?> router, E element, Serializer<C> serializer, Class<K> keyClass) { DocumentBasedStructuredValue<E, K, C> value = new DocumentBasedStructuredValue<E, K, C>(router.getDocument(), element, serializer, keyClass); router.addAttributeListener(element, value); router.addDeletionListener(element, value); return value; }
public void testInitialiser() { Initializer init = DocumentBasedStructuredValue.createInitialiser(Serializer.INTEGER, CollectionUtils.immutableMap(Key.NAME1, 23, Key.NAME2, 42)); TestUtil.assertInitializerValues(CollectionUtils.immutableMap(Key.NAME1.toString(), "23", Key.NAME2.toString(), "42"), init); init = DocumentBasedStructuredValue.createInitialiser(Serializer.INTEGER, CollectionUtils.immutableMap(Key.NAME1, (Integer) null)); TestUtil.assertInitializerValues(Collections.<String, String> emptyMap(), init); }
private static <N, E extends N> ObservableStructuredValue<Key, Integer> createTargetOn2( ValueContext<N, E> context) { return DocumentBasedStructuredValue.create(DefaultDocumentEventRouter.create(context.doc), context.container, Serializer.INTEGER, Key.class); }
public void testInitialiser() { Initializer init = DocumentBasedStructuredValue.createInitialiser(Serializer.INTEGER, CollectionUtils.immutableMap(Key.NAME1, 23, Key.NAME2, 42)); TestUtil.assertInitializerValues(CollectionUtils.immutableMap(Key.NAME1.toString(), "23", Key.NAME2.toString(), "42"), init); init = DocumentBasedStructuredValue.createInitialiser(Serializer.INTEGER, CollectionUtils.immutableMap(Key.NAME1, (Integer) null)); TestUtil.assertInitializerValues(Collections.<String, String> emptyMap(), init); }
private static <N, E extends N> ObservableStructuredValue<Key, Integer> createTargetOn2( ValueContext<N, E> context) { return DocumentBasedStructuredValue.create(DefaultDocumentEventRouter.create(context.doc), context.container, Serializer.INTEGER, Key.class); }
/** * Creates a document-based manifest backed by an empty document. * * @param doc the document on which to base the manifest * @precondition {@code !documentHasManifest(doc)} */ @VisibleForTesting public static <E> DocumentBasedManifest createNew( ObservableMutableDocument<? super E, E, ?> doc) { // If the precondition holds then the document must be empty. E top = DocHelper.createFirstTopLevelElement(doc, MANIFEST_TOP_TAG); DocumentEventRouter<? super E, E, ?> router = DefaultDocumentEventRouter.create(doc); return new DocumentBasedManifest( DocumentBasedManifestThread.create(router, top), DocumentBasedStructuredValue.create(router, top, Serializer.STRING, AnchorKey.class)); }
/** * Creates a document-based manifest backed by a document with existing * conversation structure. * * @param router event router for the document on which to base the manifest * @precondition {@code documentHasManifest(doc)} */ static <E> DocumentBasedManifest createOnExisting( DocumentEventRouter<? super E, E, ?> router, E top) { Preconditions.checkArgument(router.getDocument().getTagName(top).equals(MANIFEST_TOP_TAG), "Invalid manifest top tag %s", router.getDocument().getTagName(top)); return new DocumentBasedManifest( DocumentBasedManifestThread.create(router, top), DocumentBasedStructuredValue.create(router, top, Serializer.STRING, AnchorKey.class)); }