///////////////////////////////////////////////////////////////
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
///////////////////////////////////////////////////////////////

[[library-uid, UID Library]]
= UID =

[devstatus]
--------------
source=libraries/uid/dev-status.xml
--------------

This library provides Services to easily generate unique identifiers and sequences of numbers.

include::../../build/docs/buildinfo/artifact.txt[]

== Unique Identifiers ==

Assembly is done using the provided Assembler:

[snippet,java]
----
source=libraries/uid/src/test/java/org/apache/zest/library/uid/DocumentationSupport.java
tag=uuid-assembly
----

Usage is quite simple:

[snippet,java]
----
source=libraries/uid/src/test/java/org/apache/zest/library/uid/DocumentationSupport.java
tag=uuid-usage
----



== Sequencing ==

Sequencing is used to automatically generate a sequence of numbers.

The algorithm is that `currentSequenceValue` is the number that was last returned in a `newSequenceValue` call, and will
initially be zero. Persisting Sequencing services defines "initially" as the first run ever, as subsequent starts may
retrieve the `currentSequenceValue` from an EntityStore.


=== Transient Sequences ===

Assembly is done using the provided Assembler:

[snippet,java]
----
source=libraries/uid/src/test/java/org/apache/zest/library/uid/DocumentationSupport.java
tag=seq-assembly
----

Usage is quite simple:

[snippet,java]
----
source=libraries/uid/src/test/java/org/apache/zest/library/uid/DocumentationSupport.java
tag=seq-usage
----

=== Persisted Sequences ===

Assembly is done using the provided Assembler:

[snippet,java]
----
source=libraries/uid/src/test/java/org/apache/zest/library/uid/DocumentationSupport.java
tag=perseq-assembly
----

Usage is quite simple:

[snippet,java]
----
source=libraries/uid/src/test/java/org/apache/zest/library/uid/DocumentationSupport.java
tag=seq-usage
----

