/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.master; import java.util.Collection; import java.util.List; import java.util.Map; import org.threeten.bp.Clock; import org.threeten.bp.Instant; import com.opengamma.core.change.BasicChangeManager; import com.opengamma.core.change.ChangeManager; import com.opengamma.core.change.ChangeType; import com.opengamma.id.ObjectIdentifiable; import com.opengamma.id.UniqueId; import com.opengamma.id.VersionCorrection; /** * Turns any master into change providing master */ public class ChangeProvidingDecorator { public static <D extends AbstractDocument> AbstractChangeProvidingMaster<D> wrap(final AbstractMaster<D> underlying) { return wrap(underlying, Clock.systemUTC()); } public static <D extends AbstractDocument> AbstractChangeProvidingMaster<D> wrap(final AbstractMaster<D> underlying, final Clock clock) { return new AbstractChangeProvidingMaster<D>() { private final BasicChangeManager _changeManager = new BasicChangeManager(); @Override public ChangeManager changeManager() { return _changeManager; } @Override public D add(D document) { D doc = underlying.add(document); _changeManager.entityChanged(ChangeType.CHANGED, doc.getObjectId(), doc.getVersionFromInstant(), doc.getVersionToInstant(), Instant.now(clock)); return doc; } @Override public UniqueId addVersion(ObjectIdentifiable objectId, D documentToAdd) { UniqueId uid = underlying.addVersion(objectId, documentToAdd); _changeManager.entityChanged(ChangeType.ADDED, uid.getObjectId(), null, null, Instant.now(clock)); return uid; } @Override public D correct(D document) { D doc = underlying.correct(document); _changeManager.entityChanged(ChangeType.CHANGED, doc.getObjectId(), doc.getVersionFromInstant(), doc.getVersionToInstant(), Instant.now(clock)); return doc; } @Override public D get(ObjectIdentifiable objectId, VersionCorrection versionCorrection) { return underlying.get(objectId, versionCorrection); } @Override public D get(UniqueId uniqueId) { return underlying.get(uniqueId); } @Override public Map<UniqueId, D> get(Collection<UniqueId> uniqueIds) { return underlying.get(uniqueIds); } @Override public void remove(ObjectIdentifiable objectIdentifiable) { underlying.remove(objectIdentifiable); _changeManager.entityChanged(ChangeType.REMOVED, objectIdentifiable.getObjectId(), null, null, Instant.now(clock)); } @Override public void removeVersion(UniqueId uniqueId) { underlying.removeVersion(uniqueId); _changeManager.entityChanged(ChangeType.REMOVED, uniqueId.getObjectId(), null, null, Instant.now(clock)); } @Override public List<UniqueId> replaceAllVersions(ObjectIdentifiable objectId, List<D> replacementDocuments) { List<UniqueId> removed = underlying.replaceAllVersions(objectId, replacementDocuments); _changeManager.entityChanged(ChangeType.REMOVED, objectId.getObjectId(), null, null, Instant.now(clock)); return removed; } @Override public UniqueId replaceVersion(D replacementDocument) { UniqueId uid = underlying.replaceVersion(replacementDocument); _changeManager.entityChanged(ChangeType.CHANGED, uid.getObjectId(), null, null, Instant.now(clock)); return uid; } @Override public List<UniqueId> replaceVersion(UniqueId uniqueId, List<D> replacementDocuments) { List<UniqueId> replaced = underlying.replaceVersion(uniqueId, replacementDocuments); _changeManager.entityChanged(ChangeType.CHANGED, uniqueId.getObjectId(), null, null, Instant.now(clock)); return replaced; } @Override public List<UniqueId> replaceVersions(ObjectIdentifiable objectId, List<D> replacementDocuments) { List<UniqueId> replaced = underlying.replaceVersions(objectId, replacementDocuments); _changeManager.entityChanged(ChangeType.CHANGED, objectId.getObjectId(), null, null, Instant.now(clock)); return replaced; } @Override public D update(D document) { D doc = underlying.update(document); _changeManager.entityChanged(ChangeType.CHANGED, doc.getObjectId(), doc.getVersionFromInstant(), doc.getVersionToInstant(), Instant.now(clock)); return doc; } }; } }