public MutationBatch write(final ApplicationScope collectionScope, UniqueValue value) { Preconditions.checkNotNull(value, "value is required"); final Id entityId = value.getEntityId(); final UUID entityVersion = value.getEntityVersion(); final Field<?> field = value.getField(); ValidationUtils.verifyIdentity(entityId); ValidationUtils.verifyVersion(entityVersion); final EntityVersion ev = new EntityVersion(entityId, entityVersion); final UniqueFieldEntry uniqueFieldEntry = new UniqueFieldEntry(entityVersion, field); return doWrite( collectionScope, value, new RowOp() { @Override public void doLookup(final ColumnListMutation<EntityVersion> colMutation) { colMutation.putColumn(ev, COL_VALUE); } @Override public void doLog(final ColumnListMutation<UniqueFieldEntry> colMutation) { colMutation.putColumn(uniqueFieldEntry, COL_VALUE); } }); }
@Override public MutationBatch write( final ApplicationScope collectionScope, final UniqueValue value, final int timeToLive) { Preconditions.checkNotNull(value, "value is required"); Preconditions.checkArgument(timeToLive > 0, "timeToLive must be greater than 0 is required"); final Id entityId = value.getEntityId(); final UUID entityVersion = value.getEntityVersion(); final Field<?> field = value.getField(); ValidationUtils.verifyIdentity(entityId); ValidationUtils.verifyVersion(entityVersion); final EntityVersion ev = new EntityVersion(entityId, entityVersion); final UniqueFieldEntry uniqueFieldEntry = new UniqueFieldEntry(entityVersion, field); return doWrite( collectionScope, value, new RowOp() { @Override public void doLookup(final ColumnListMutation<EntityVersion> colMutation) { colMutation.putColumn(ev, COL_VALUE, timeToLive); } // we purposefully leave out TTL. Worst case we issue deletes against tombstoned columns // best case, we clean up an invalid secondary index entry when the log is used @Override public void doLog(final ColumnListMutation<UniqueFieldEntry> colMutation) { colMutation.putColumn(uniqueFieldEntry, COL_VALUE); } }); }