123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- if (!dojo._hasResource["dojox.uuid._base"]) { // _hasResource checks added by
- // build. Do not use
- // _hasResource directly in your
- // code.
- dojo._hasResource["dojox.uuid._base"] = true;
- dojo.provide("dojox.uuid._base");
- // Public constants:
- dojox.uuid.NIL_UUID = "00000000-0000-0000-0000-000000000000";
- dojox.uuid.version = {
- // Enumeration for the different UUID versions.
- UNKNOWN : 0,
- TIME_BASED : 1,
- DCE_SECURITY : 2,
- NAME_BASED_MD5 : 3,
- RANDOM : 4,
- NAME_BASED_SHA1 : 5
- };
- dojox.uuid.variant = {
- // Enumeration for the different UUID variants.
- NCS : "0",
- DCE : "10",
- MICROSOFT : "110",
- UNKNOWN : "111"
- };
- dojox.uuid.assert = function(/* Boolean */booleanValue, /* String? */message) {
- // summary:
- // Throws an exception if the assertion fails.
- // description:
- // If the asserted condition is true, this method does nothing. If the
- // condition is false, we throw an error with a error message.
- // booleanValue: Must be true for the assertion to succeed.
- // message: A string describing the assertion.
- // throws: Throws an Error if 'booleanValue' is false.
- if (!booleanValue) {
- if (!message) {
- message = "An assert statement failed.\n"
- + "The method dojox.uuid.assert() was called with a 'false' value.\n";
- }
- throw new Error(message);
- }
- };
- dojox.uuid.generateNilUuid = function() {
- // summary:
- // This function returns the Nil UUID:
- // "00000000-0000-0000-0000-000000000000".
- // description:
- // The Nil UUID is described in section 4.1.7 of
- // RFC 4122: http://tools.ietf.org/html/rfc4122#section-4.1.7
- // examples:
- // var string = dojox.uuid.generateNilUuid();
- return dojox.uuid.NIL_UUID;; // String
- };
- dojox.uuid.isValid = function(/* String */uuidString) {
- // summary:
- // Returns true if the UUID was initialized with a valid value.
- uuidString = uuidString.toString();
- var valid = (dojo.isString(uuidString) && (uuidString.length == 36) && (uuidString == uuidString
- .toLowerCase()));
- if (valid) {
- var arrayOfParts = uuidString.split("-");
- valid = ((arrayOfParts.length == 5)
- && (arrayOfParts[0].length == 8)
- && (arrayOfParts[1].length == 4)
- && (arrayOfParts[2].length == 4)
- && (arrayOfParts[3].length == 4) && (arrayOfParts[4].length == 12));
- var HEX_RADIX = 16;
- for (var i in arrayOfParts) {
- var part = arrayOfParts[i];
- var integer = parseInt(part, HEX_RADIX);
- valid = valid && isFinite(integer);
- }
- }
- return valid; // boolean
- };
- dojox.uuid.getVariant = function(/* String */uuidString) {
- // summary:
- // Returns a variant code that indicates what type of UUID this is.
- // Returns one of the enumerated dojox.uuid.variant values.
- // example:
- // var variant =
- // dojox.uuid.getVariant("3b12f1df-5232-4804-897e-917bf397618a");
- // dojox.uuid.assert(variant == dojox.uuid.variant.DCE);
- // example:
- // "3b12f1df-5232-4804-897e-917bf397618a"
- // ^
- // |
- // (variant "10__" == DCE)
- if (!dojox.uuid._ourVariantLookupTable) {
- var variant = dojox.uuid.variant;
- var lookupTable = [];
- lookupTable[0x0] = variant.NCS; // 0000
- lookupTable[0x1] = variant.NCS; // 0001
- lookupTable[0x2] = variant.NCS; // 0010
- lookupTable[0x3] = variant.NCS; // 0011
- lookupTable[0x4] = variant.NCS; // 0100
- lookupTable[0x5] = variant.NCS; // 0101
- lookupTable[0x6] = variant.NCS; // 0110
- lookupTable[0x7] = variant.NCS; // 0111
- lookupTable[0x8] = variant.DCE; // 1000
- lookupTable[0x9] = variant.DCE; // 1001
- lookupTable[0xA] = variant.DCE; // 1010
- lookupTable[0xB] = variant.DCE; // 1011
- lookupTable[0xC] = variant.MICROSOFT; // 1100
- lookupTable[0xD] = variant.MICROSOFT; // 1101
- lookupTable[0xE] = variant.UNKNOWN; // 1110
- lookupTable[0xF] = variant.UNKNOWN; // 1111
- dojox.uuid._ourVariantLookupTable = lookupTable;
- }
- uuidString = uuidString.toString();
- var variantCharacter = uuidString.charAt(19);
- var HEX_RADIX = 16;
- var variantNumber = parseInt(variantCharacter, HEX_RADIX);
- dojox.uuid.assert((variantNumber >= 0) && (variantNumber <= 16));
- return dojox.uuid._ourVariantLookupTable[variantNumber]; // dojox.uuid.variant
- };
- dojox.uuid.getVersion = function(/* String */uuidString) {
- // summary:
- // Returns a version number that indicates what type of UUID this is.
- // Returns one of the enumerated dojox.uuid.version values.
- // example:
- // var version =
- // dojox.uuid.getVersion("b4308fb0-86cd-11da-a72b-0800200c9a66");
- // dojox.uuid.assert(version == dojox.uuid.version.TIME_BASED);
- // exceptions:
- // Throws an Error if this is not a DCE Variant UUID.
- var errorMessage = "dojox.uuid.getVersion() was not passed a DCE Variant UUID.";
- dojox.uuid.assert(
- dojox.uuid.getVariant(uuidString) == dojox.uuid.variant.DCE,
- errorMessage);
- uuidString = uuidString.toString();
- // "b4308fb0-86cd-11da-a72b-0800200c9a66"
- // ^
- // |
- // (version 1 == TIME_BASED)
- var versionCharacter = uuidString.charAt(14);
- var HEX_RADIX = 16;
- var versionNumber = parseInt(versionCharacter, HEX_RADIX);
- return versionNumber; // dojox.uuid.version
- };
- dojox.uuid.getNode = function(/* String */uuidString) {
- // summary:
- // If this is a version 1 UUID (a time-based UUID), getNode() returns a
- // 12-character string with the "node" or "pseudonode" portion of the
- // UUID,
- // which is the rightmost 12 characters.
- // exceptions:
- // Throws an Error if this is not a version 1 UUID.
- var errorMessage = "dojox.uuid.getNode() was not passed a TIME_BASED UUID.";
- dojox.uuid
- .assert(
- dojox.uuid.getVersion(uuidString) == dojox.uuid.version.TIME_BASED,
- errorMessage);
- uuidString = uuidString.toString();
- var arrayOfStrings = uuidString.split('-');
- var nodeString = arrayOfStrings[4];
- return nodeString; // String (a 12-character string, which will look
- // something like "917bf397618a")
- };
- dojox.uuid.getTimestamp = function(/* String */uuidString, /* String? */
- returnType) {
- // summary:
- // If this is a version 1 UUID (a time-based UUID), this method returns
- // the timestamp value encoded in the UUID. The caller can ask for the
- // timestamp to be returned either as a JavaScript Date object or as a
- // 15-character string of hex digits.
- // returnType: Any of these five values: "string", String, "hex",
- // "date", Date
- // returns:
- // Returns the timestamp value as a JavaScript Date object or a
- // 15-character string of hex digits.
- // examples:
- // var uuidString = "b4308fb0-86cd-11da-a72b-0800200c9a66";
- // var date, string, hexString;
- // date = dojox.uuid.getTimestamp(uuidString); // returns a JavaScript
- // Date
- // date = dojox.uuid.getTimestamp(uuidString, Date); //
- // string = dojox.uuid.getTimestamp(uuidString, String); // "Mon, 16 Jan
- // 2006 20:21:41 GMT"
- // hexString = dojox.uuid.getTimestamp(uuidString, "hex"); //
- // "1da86cdb4308fb0"
- // exceptions:
- // Throws an Error if this is not a version 1 UUID.
- var errorMessage = "dojox.uuid.getTimestamp() was not passed a TIME_BASED UUID.";
- dojox.uuid
- .assert(
- dojox.uuid.getVersion(uuidString) == dojox.uuid.version.TIME_BASED,
- errorMessage);
- uuidString = uuidString.toString();
- if (!returnType) {
- returnType = null
- };
- switch (returnType) {
- case "string" :
- case String :
- return dojox.uuid.getTimestamp(uuidString, Date).toUTCString(); // String
- // (e.g.
- // "Mon,
- // 16
- // Jan
- // 2006
- // 20:21:41
- // GMT")
- break;
- case "hex" :
- // Return a 15-character string of hex digits containing the
- // timestamp for this UUID, with the high-order bits first.
- var arrayOfStrings = uuidString.split('-');
- var hexTimeLow = arrayOfStrings[0];
- var hexTimeMid = arrayOfStrings[1];
- var hexTimeHigh = arrayOfStrings[2];
- // Chop off the leading "1" character, which is the UUID
- // version number for time-based UUIDs.
- hexTimeHigh = hexTimeHigh.slice(1);
- var timestampAsHexString = hexTimeHigh + hexTimeMid
- + hexTimeLow;
- dojox.uuid.assert(timestampAsHexString.length == 15);
- return timestampAsHexString; // String (e.g.
- // "1da86cdb4308fb0")
- break;
- case null : // no returnType was specified, so default to Date
- case "date" :
- case Date :
- // Return a JavaScript Date object.
- var GREGORIAN_CHANGE_OFFSET_IN_HOURS = 3394248;
- var HEX_RADIX = 16;
- var arrayOfParts = uuidString.split('-');
- var timeLow = parseInt(arrayOfParts[0], HEX_RADIX);
- var timeMid = parseInt(arrayOfParts[1], HEX_RADIX);
- var timeHigh = parseInt(arrayOfParts[2], HEX_RADIX);
- var hundredNanosecondIntervalsSince1582 = timeHigh & 0x0FFF;
- hundredNanosecondIntervalsSince1582 <<= 16;
- hundredNanosecondIntervalsSince1582 += timeMid;
- // What we really want to do next is shift left 32 bits, but the
- // result will be too big to fit in an int, so we'll multiply by
- // 2^32,
- // and the result will be a floating point approximation.
- hundredNanosecondIntervalsSince1582 *= 0x100000000;
- hundredNanosecondIntervalsSince1582 += timeLow;
- var millisecondsSince1582 = hundredNanosecondIntervalsSince1582
- / 10000;
- // Again, this will be a floating point approximation.
- // We can make things exact later if we need to.
- var secondsPerHour = 60 * 60;
- var hoursBetween1582and1970 = GREGORIAN_CHANGE_OFFSET_IN_HOURS;
- var secondsBetween1582and1970 = hoursBetween1582and1970
- * secondsPerHour;
- var millisecondsBetween1582and1970 = secondsBetween1582and1970
- * 1000;
- var millisecondsSince1970 = millisecondsSince1582
- - millisecondsBetween1582and1970;
- var timestampAsDate = new Date(millisecondsSince1970);
- return timestampAsDate; // Date
- break;
- default :
- // we got passed something other than a valid returnType
- dojox.uuid.assert(false,
- "dojox.uuid.getTimestamp was not passed a valid returnType: "
- + returnType);
- break;
- }
- };
- }
|