Uuid.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:7k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.uuid.Uuid");
  9. dojo.require("dojo.lang.common");
  10. dojo.require("dojo.lang.assert");
  11. dojo.uuid.Uuid = function (input) {
  12. this._uuidString = dojo.uuid.Uuid.NIL_UUID;
  13. if (input) {
  14. if (dojo.lang.isString(input)) {
  15. this._uuidString = input.toLowerCase();
  16. dojo.lang.assert(this.isValid());
  17. } else {
  18. if (dojo.lang.isObject(input) && input.generate) {
  19. var generator = input;
  20. this._uuidString = generator.generate();
  21. dojo.lang.assert(this.isValid());
  22. } else {
  23. dojo.lang.assert(false, "The dojo.uuid.Uuid() constructor must be initializated with a UUID string.");
  24. }
  25. }
  26. } else {
  27. var ourGenerator = dojo.uuid.Uuid.getGenerator();
  28. if (ourGenerator) {
  29. this._uuidString = ourGenerator.generate();
  30. dojo.lang.assert(this.isValid());
  31. }
  32. }
  33. };
  34. dojo.uuid.Uuid.NIL_UUID = "00000000-0000-0000-0000-000000000000";
  35. dojo.uuid.Uuid.Version = {UNKNOWN:0, TIME_BASED:1, DCE_SECURITY:2, NAME_BASED_MD5:3, RANDOM:4, NAME_BASED_SHA1:5};
  36. dojo.uuid.Uuid.Variant = {NCS:"0", DCE:"10", MICROSOFT:"110", UNKNOWN:"111"};
  37. dojo.uuid.Uuid.HEX_RADIX = 16;
  38. dojo.uuid.Uuid.compare = function (uuidOne, uuidTwo) {
  39. var uuidStringOne = uuidOne.toString();
  40. var uuidStringTwo = uuidTwo.toString();
  41. if (uuidStringOne > uuidStringTwo) {
  42. return 1;
  43. }
  44. if (uuidStringOne < uuidStringTwo) {
  45. return -1;
  46. }
  47. return 0;
  48. };
  49. dojo.uuid.Uuid.setGenerator = function (generator) {
  50. dojo.lang.assert(!generator || (dojo.lang.isObject(generator) && generator.generate));
  51. dojo.uuid.Uuid._ourGenerator = generator;
  52. };
  53. dojo.uuid.Uuid.getGenerator = function () {
  54. return dojo.uuid.Uuid._ourGenerator;
  55. };
  56. dojo.uuid.Uuid.prototype.toString = function (format) {
  57. if (format) {
  58. switch (format) {
  59.   case "{}":
  60. return "{" + this._uuidString + "}";
  61. break;
  62.   case "()":
  63. return "(" + this._uuidString + ")";
  64. break;
  65.   case """":
  66. return """ + this._uuidString + """;
  67. break;
  68.   case "''":
  69. return "'" + this._uuidString + "'";
  70. break;
  71.   case "urn":
  72. return "urn:uuid:" + this._uuidString;
  73. break;
  74.   case "!-":
  75. return this._uuidString.split("-").join("");
  76. break;
  77.   default:
  78. dojo.lang.assert(false, "The toString() method of dojo.uuid.Uuid was passed a bogus format.");
  79. }
  80. } else {
  81. return this._uuidString;
  82. }
  83. };
  84. dojo.uuid.Uuid.prototype.compare = function (otherUuid) {
  85. return dojo.uuid.Uuid.compare(this, otherUuid);
  86. };
  87. dojo.uuid.Uuid.prototype.isEqual = function (otherUuid) {
  88. return (this.compare(otherUuid) == 0);
  89. };
  90. dojo.uuid.Uuid.prototype.isValid = function () {
  91. try {
  92. dojo.lang.assertType(this._uuidString, String);
  93. dojo.lang.assert(this._uuidString.length == 36);
  94. dojo.lang.assert(this._uuidString == this._uuidString.toLowerCase());
  95. var arrayOfParts = this._uuidString.split("-");
  96. dojo.lang.assert(arrayOfParts.length == 5);
  97. dojo.lang.assert(arrayOfParts[0].length == 8);
  98. dojo.lang.assert(arrayOfParts[1].length == 4);
  99. dojo.lang.assert(arrayOfParts[2].length == 4);
  100. dojo.lang.assert(arrayOfParts[3].length == 4);
  101. dojo.lang.assert(arrayOfParts[4].length == 12);
  102. for (var i in arrayOfParts) {
  103. var part = arrayOfParts[i];
  104. var integer = parseInt(part, dojo.uuid.Uuid.HEX_RADIX);
  105. dojo.lang.assert(isFinite(integer));
  106. }
  107. return true;
  108. }
  109. catch (e) {
  110. return false;
  111. }
  112. };
  113. dojo.uuid.Uuid.prototype.getVariant = function () {
  114. var variantCharacter = this._uuidString.charAt(19);
  115. var variantNumber = parseInt(variantCharacter, dojo.uuid.Uuid.HEX_RADIX);
  116. dojo.lang.assert((variantNumber >= 0) && (variantNumber <= 16));
  117. if (!dojo.uuid.Uuid._ourVariantLookupTable) {
  118. var Variant = dojo.uuid.Uuid.Variant;
  119. var lookupTable = [];
  120. lookupTable[0] = Variant.NCS;
  121. lookupTable[1] = Variant.NCS;
  122. lookupTable[2] = Variant.NCS;
  123. lookupTable[3] = Variant.NCS;
  124. lookupTable[4] = Variant.NCS;
  125. lookupTable[5] = Variant.NCS;
  126. lookupTable[6] = Variant.NCS;
  127. lookupTable[7] = Variant.NCS;
  128. lookupTable[8] = Variant.DCE;
  129. lookupTable[9] = Variant.DCE;
  130. lookupTable[10] = Variant.DCE;
  131. lookupTable[11] = Variant.DCE;
  132. lookupTable[12] = Variant.MICROSOFT;
  133. lookupTable[13] = Variant.MICROSOFT;
  134. lookupTable[14] = Variant.UNKNOWN;
  135. lookupTable[15] = Variant.UNKNOWN;
  136. dojo.uuid.Uuid._ourVariantLookupTable = lookupTable;
  137. }
  138. return dojo.uuid.Uuid._ourVariantLookupTable[variantNumber];
  139. };
  140. dojo.uuid.Uuid.prototype.getVersion = function () {
  141. if (!this._versionNumber) {
  142. var errorMessage = "Called getVersion() on a dojo.uuid.Uuid that was not a DCE Variant UUID.";
  143. dojo.lang.assert(this.getVariant() == dojo.uuid.Uuid.Variant.DCE, errorMessage);
  144. var versionCharacter = this._uuidString.charAt(14);
  145. this._versionNumber = parseInt(versionCharacter, dojo.uuid.Uuid.HEX_RADIX);
  146. }
  147. return this._versionNumber;
  148. };
  149. dojo.uuid.Uuid.prototype.getNode = function () {
  150. if (!this._nodeString) {
  151. var errorMessage = "Called getNode() on a dojo.uuid.Uuid that was not a TIME_BASED UUID.";
  152. dojo.lang.assert(this.getVersion() == dojo.uuid.Uuid.Version.TIME_BASED, errorMessage);
  153. var arrayOfStrings = this._uuidString.split("-");
  154. this._nodeString = arrayOfStrings[4];
  155. }
  156. return this._nodeString;
  157. };
  158. dojo.uuid.Uuid.prototype.getTimestamp = function (returnType) {
  159. var errorMessage = "Called getTimestamp() on a dojo.uuid.Uuid that was not a TIME_BASED UUID.";
  160. dojo.lang.assert(this.getVersion() == dojo.uuid.Uuid.Version.TIME_BASED, errorMessage);
  161. if (!returnType) {
  162. returnType = null;
  163. }
  164. switch (returnType) {
  165.   case "string":
  166.   case String:
  167. return this.getTimestamp(Date).toUTCString();
  168. break;
  169.   case "hex":
  170. if (!this._timestampAsHexString) {
  171. var arrayOfStrings = this._uuidString.split("-");
  172. var hexTimeLow = arrayOfStrings[0];
  173. var hexTimeMid = arrayOfStrings[1];
  174. var hexTimeHigh = arrayOfStrings[2];
  175. hexTimeHigh = hexTimeHigh.slice(1);
  176. this._timestampAsHexString = hexTimeHigh + hexTimeMid + hexTimeLow;
  177. dojo.lang.assert(this._timestampAsHexString.length == 15);
  178. }
  179. return this._timestampAsHexString;
  180. break;
  181.   case null:
  182.   case "date":
  183.   case Date:
  184. if (!this._timestampAsDate) {
  185. var GREGORIAN_CHANGE_OFFSET_IN_HOURS = 3394248;
  186. var arrayOfParts = this._uuidString.split("-");
  187. var timeLow = parseInt(arrayOfParts[0], dojo.uuid.Uuid.HEX_RADIX);
  188. var timeMid = parseInt(arrayOfParts[1], dojo.uuid.Uuid.HEX_RADIX);
  189. var timeHigh = parseInt(arrayOfParts[2], dojo.uuid.Uuid.HEX_RADIX);
  190. var hundredNanosecondIntervalsSince1582 = timeHigh & 4095;
  191. hundredNanosecondIntervalsSince1582 <<= 16;
  192. hundredNanosecondIntervalsSince1582 += timeMid;
  193. hundredNanosecondIntervalsSince1582 *= 4294967296;
  194. hundredNanosecondIntervalsSince1582 += timeLow;
  195. var millisecondsSince1582 = hundredNanosecondIntervalsSince1582 / 10000;
  196. var secondsPerHour = 60 * 60;
  197. var hoursBetween1582and1970 = GREGORIAN_CHANGE_OFFSET_IN_HOURS;
  198. var secondsBetween1582and1970 = hoursBetween1582and1970 * secondsPerHour;
  199. var millisecondsBetween1582and1970 = secondsBetween1582and1970 * 1000;
  200. var millisecondsSince1970 = millisecondsSince1582 - millisecondsBetween1582and1970;
  201. this._timestampAsDate = new Date(millisecondsSince1970);
  202. }
  203. return this._timestampAsDate;
  204. break;
  205.   default:
  206. dojo.lang.assert(false, "The getTimestamp() method dojo.uuid.Uuid was passed a bogus returnType: " + returnType);
  207. break;
  208. }
  209. };