@Override public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { MetaData metaData = (MetaData) source; if (!metaData.isEmpty()) { super.marshal(new HashMap<>(metaData), writer, context); } }
/** * Java Serialization specification method that will ensure that deserialization will maintain a single instance of * empty MetaData. * * @return the MetaData instance to use after deserialization */ protected Object readResolve() { if (isEmpty()) { return MetaData.emptyInstance(); } return this; }
/** * Returns a MetaData instance containing values of {@code this}, combined with the given * {@code additionalEntries}. If any entries have identical keys, the values from the * {@code additionalEntries} will take precedence. * * @param additionalEntries The additional entries for the new MetaData * @return a MetaData instance containing values of {@code this}, combined with the given * {@code additionalEntries} */ public MetaData mergedWith(Map<String, ?> additionalEntries) { if (additionalEntries.isEmpty()) { return this; } if (isEmpty()) { return MetaData.from(additionalEntries); } Map<String, Object> merged = new HashMap<>(values); merged.putAll(additionalEntries); return new MetaData(merged); }
@Test public void testReturnedEventMessageBehavior() { testSubject.appendEvents(createEvent().withMetaData(singletonMap("key", "value"))); DomainEventMessage<?> messageWithMetaData = testSubject.readEvents(AGGREGATE).next(); /// we make sure persisted events have the same MetaData alteration logic DomainEventMessage<?> altered = messageWithMetaData.withMetaData(singletonMap("key2", "value")); DomainEventMessage<?> combined = messageWithMetaData.andMetaData(singletonMap("key2", "value")); assertTrue(altered.getMetaData().containsKey("key2")); altered.getPayload(); assertFalse(altered.getMetaData().containsKey("key")); assertTrue(altered.getMetaData().containsKey("key2")); assertTrue(combined.getMetaData().containsKey("key")); assertTrue(combined.getMetaData().containsKey("key2")); assertNotNull(messageWithMetaData.getPayload()); assertNotNull(messageWithMetaData.getMetaData()); assertFalse(messageWithMetaData.getMetaData().isEmpty()); }
@Override public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { MetaData metaData = (MetaData) source; if (!metaData.isEmpty()) { super.marshal(new HashMap<>(metaData), writer, context); } }
/** * Java Serialization specification method that will ensure that deserialization will maintain a single instance of * empty MetaData. * * @return the MetaData instance to use after deserialization */ protected Object readResolve() { if (isEmpty()) { return MetaData.emptyInstance(); } return this; }
@Override public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { MetaData metaData = (MetaData) source; if (!metaData.isEmpty()) { super.marshal(new HashMap<>(metaData), writer, context); } }
/** * Java Serialization specification method that will ensure that deserialization will maintain a single instance of * empty MetaData. * * @return the MetaData instance to use after deserialization */ protected Object readResolve() { if (isEmpty()) { return MetaData.emptyInstance(); } return this; }
/** * Returns a MetaData instance containing values of {@code this}, combined with the given * {@code additionalEntries}. If any entries have identical keys, the values from the * {@code additionalEntries} will take precedence. * * @param additionalEntries The additional entries for the new MetaData * @return a MetaData instance containing values of {@code this}, combined with the given * {@code additionalEntries} */ public MetaData mergedWith(Map<String, ?> additionalEntries) { if (additionalEntries.isEmpty()) { return this; } if (isEmpty()) { return MetaData.from(additionalEntries); } Map<String, Object> merged = new HashMap<>(values); merged.putAll(additionalEntries); return new MetaData(merged); }
/** * Returns a MetaData instance containing values of {@code this}, combined with the given * {@code additionalEntries}. If any entries have identical keys, the values from the * {@code additionalEntries} will take precedence. * * @param additionalEntries The additional entries for the new MetaData * @return a MetaData instance containing values of {@code this}, combined with the given * {@code additionalEntries} */ public MetaData mergedWith(Map<String, ?> additionalEntries) { if (additionalEntries.isEmpty()) { return this; } if (isEmpty()) { return MetaData.from(additionalEntries); } Map<String, Object> merged = new HashMap<>(values); merged.putAll(additionalEntries); return new MetaData(merged); }