Task #3079

Task #3074: Phase one implementaion for morpho to connect dataone services

Task #3075: Morpho needs new data file managment system and the local identifier authority.

Morpho needs a local unique id generator

Added by Jing Tao over 9 years ago. Updated almost 9 years ago.

Ben Leinfelder
Target version:
Start date:
Due date:
% Done:


Product Version:
Story Points:


Morpho can work online or offline. If a user work offline, morpho needs a local unique id generator to create identifiers for him/her.
Moreover, the MN.generateIdentifier() and CN.reserveIdentifier methods in Dataone API have a session parameter. So it only can be called if user login. If user only works locally (even though the computer is online), morpho still needs a mechanism to generate ids.

It will be perfect if the ids are globally unique. So morpho doesn't need to change it when morpho uploads them to the dataone server.

Since the file name is locally unique, we can combine a unique id of the computer with the file name to generate the id. The unique id of the computer can be the mac address, the motherboard id or a UUID.

The problem to use the mac address is that users can exchange network cards between computers. The problem to use motherboard id is that java doesn't have an elegant way to get it.


#1 Updated by Andrew Pippin over 9 years ago

Java's Universally Unique IDentifier (@see java.util.UUID) provides a good mechanism for this.

#2 Updated by Jing Tao over 9 years ago

The local file id looks like:


Scope is the input from user's profile. X is a number. Morpho increases X when it assigns a new id. The maximum X will be kept in the profile.

The new id is not guaranteed to be unique. So we still need to the mechanism to handle the id collision.

Currently here is the way morpho to handle the collision:
When id collision was detected, morpho will send a request to metacat to ask the biggest X for the scope. Then increase the X to assign a new id.

However, dataone network doesn't have the API. We may use this way:
Issue a new search to return all IDs that match scope. Morpho then filters and sorts list to find the biggest number in scope.

Note: the scope may be replaced by a random number.

Here are the choices for user in the profile creating process:

  1. use a scope that they provide (e.g., "knb-lter-sbc") [radio] + [text field]
  2. use a random scope (e.g., "ABGWJY") [radio]
  3. convert urn:ids to DOIs during the network save [checkbox]

#3 Updated by Dave Vieglais over 9 years ago

  • Target version changed from Sprint-2012.37-Block.5.3 to Sprint-2012.41-Block.6.1

#4 Updated by Ben Leinfelder over 9 years ago

  • Category set to Morpho

#5 Updated by Ben Leinfelder over 9 years ago

  • Target version changed from Sprint-2012.41-Block.6.1 to Sprint-2012.44-Block.6.2

#6 Updated by Ben Leinfelder about 9 years ago

  • Assignee set to Ben Leinfelder
  • Status changed from New to In Progress

Using identifiers in the form of scope.X. Still need to evaluate an appropriate prefix (ARK?)

#7 Updated by Chris Jones about 9 years ago

  • Target version changed from Sprint-2012.44-Block.6.2 to Sprint-2012.50-Block.6.4

#8 Updated by Ben Leinfelder almost 9 years ago

  • Target version changed from Sprint-2012.50-Block.6.4 to 2013.10-Block.2.1

#9 Updated by Ben Leinfelder almost 9 years ago

  • translation missing: en.field_remaining_hours set to 0.0
  • Status changed from In Progress to Closed

Using UUID locally

Also available in: Atom PDF

Add picture from clipboard (Maximum size: 14.8 MB)