X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.api.uuid%2Fsrc%2Forg%2Fargeo%2Fapi%2Fuuid%2FAbstractAsyncUuidFactory.java;h=52becc85ac0946a018e692b1065e3b20c999c83a;hb=0f8bddc982e2ea4f260e1eb639777b74e7893ea3;hp=38327223ff168173f62870eb93a293d7a63d7be9;hpb=593a4eabb76b74cd382ecf3f181d57abe0d643f9;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.api.uuid/src/org/argeo/api/uuid/AbstractAsyncUuidFactory.java b/org.argeo.api.uuid/src/org/argeo/api/uuid/AbstractAsyncUuidFactory.java index 38327223f..52becc85a 100644 --- a/org.argeo.api.uuid/src/org/argeo/api/uuid/AbstractAsyncUuidFactory.java +++ b/org.argeo.api.uuid/src/org/argeo/api/uuid/AbstractAsyncUuidFactory.java @@ -26,6 +26,7 @@ public abstract class AbstractAsyncUuidFactory extends AbstractUuidFactory imple protected ConcurrentTimeUuidState timeUuidState; private NodeIdSupplier nodeIdSupplier; + private long currentClockSequenceRange = 0; public AbstractAsyncUuidFactory() { secureRandom = createSecureRandom(); @@ -44,7 +45,7 @@ public abstract class AbstractAsyncUuidFactory extends AbstractUuidFactory imple if (nodeIdSupplier == null) throw new IllegalStateException("No node id supplier available"); long nodeIdBase = nodeIdSupplier.get(); - timeUuidState.reset(nodeIdBase); + timeUuidState.reset(nodeIdBase, currentClockSequenceRange); } public void setNodeIdSupplier(NodeIdSupplier nodeIdSupplier) { @@ -52,10 +53,24 @@ public abstract class AbstractAsyncUuidFactory extends AbstractUuidFactory imple reset(); } + public void setNodeIdSupplier(NodeIdSupplier nodeIdSupplier, long range) { + this.currentClockSequenceRange = range >= 0 ? range & 0x3F00 : range; + setNodeIdSupplier(nodeIdSupplier); + } + protected NodeIdSupplier getNodeIdSupplier() { return nodeIdSupplier; } + /** + * If positive, only clock_hi is taken from the argument (range & 0x3F00), if + * negative, the full range of possible values is used. + */ + public void setCurrentClockSequenceRange(long range) { + this.currentClockSequenceRange = range >= 0 ? range & 0x3F00 : range; + reset(); + } + /* * SYNC OPERATIONS */