dojo.provide("dojox.uuid.Uuid"); dojo.require("dojox.uuid"); dojox.uuid.Uuid = function(/*String?*/ input){ // summary: // This is the constructor for the Uuid class. The Uuid class offers // methods for inspecting existing UUIDs. // input: A 36-character string that conforms to the UUID spec. // examples: // var uuid; // uuid = new dojox.uuid.Uuid("3b12f1df-5232-4804-897e-917bf397618a"); // uuid = new dojox.uuid.Uuid(); // "00000000-0000-0000-0000-000000000000" // uuid = new dojox.uuid.Uuid(dojox.uuid.generateRandomUuid()); // uuid = new dojox.uuid.Uuid(dojox.uuid.generateTimeBasedUuid()); // dojox.uuid.Uuid.setGenerator(dojox.uuid.generateRandomUuid); // uuid = new dojox.uuid.Uuid(); // dojox.uuid.assert(!uuid.isEqual(dojox.uuid.NIL_UUID)); this._uuidString = dojox.uuid.NIL_UUID; if(input){ dojox.uuid.assert(dojo.isString(input)); this._uuidString = input.toLowerCase(); dojox.uuid.assert(this.isValid()); }else{ var ourGenerator = dojox.uuid.Uuid.getGenerator(); if(ourGenerator){ this._uuidString = ourGenerator(); dojox.uuid.assert(this.isValid()); } } }; dojox.uuid.Uuid.compare = function(/*dojox.uuid.Uuid*/ uuidOne, /*dojox.uuid.Uuid*/ uuidTwo){ // summary: // Given two UUIDs to compare, this method returns 0, 1, or -1. // description: // This method is designed to be used by sorting routines, like the // JavaScript built-in Array sort() method. This implementation is // intended to match the sample implementation in IETF RFC 4122: // http://www.ietf.org/rfc/rfc4122.txt // uuidOne: Any object that has toString() method that returns a 36-character string that conforms to the UUID spec. // uuidTwo: Any object that has toString() method that returns a 36-character string that conforms to the UUID spec. // examples: // var uuid; // var generator = dojox.uuid.TimeBasedGenerator; // var a = new dojox.uuid.Uuid(generator); // var b = new dojox.uuid.Uuid(generator); // var c = new dojox.uuid.Uuid(generator); // var array = new Array(a, b, c); // array.sort(dojox.uuid.Uuid.compare); var uuidStringOne = uuidOne.toString(); var uuidStringTwo = uuidTwo.toString(); if (uuidStringOne > uuidStringTwo) return 1; // integer if (uuidStringOne < uuidStringTwo) return -1; // integer return 0; // integer (either 0, 1, or -1) }; dojox.uuid.Uuid.setGenerator = function(/*Function?*/ generator){ // summary: // Sets the default generator, which will be used by the // "new dojox.uuid.Uuid()" constructor if no parameters // are passed in. // generator: A UUID generator function, such as dojox.uuid.generateTimeBasedUuid. dojox.uuid.assert(!generator || dojo.isFunction(generator)); dojox.uuid.Uuid._ourGenerator = generator; }; dojox.uuid.Uuid.getGenerator = function(){ // summary: // Returns the default generator. See setGenerator(). return dojox.uuid.Uuid._ourGenerator; // generator (A UUID generator, such as dojox.uuid.TimeBasedGenerator). }; dojox.uuid.Uuid.prototype.toString = function(){ // summary: // This method returns a standard 36-character string representing // the UUID, such as "3b12f1df-5232-4804-897e-917bf397618a". return this._uuidString; // string }; dojox.uuid.Uuid.prototype.compare = function(/*dojox.uuid.Uuid*/ otherUuid){ // summary: // Compares this UUID to another UUID, and returns 0, 1, or -1. // description: // This implementation is intended to match the sample implementation // in IETF RFC 4122: http://www.ietf.org/rfc/rfc4122.txt // otherUuid: Any object that has toString() method that returns a 36-character string that conforms to the UUID spec. return dojox.uuid.Uuid.compare(this, otherUuid); // integer (either 0, 1, or -1) }; dojox.uuid.Uuid.prototype.isEqual = function(/*dojox.uuid.Uuid*/ otherUuid){ // summary: // Returns true if this UUID is equal to the otherUuid, or false otherwise. // otherUuid: Any object that has toString() method that returns a 36-character string that conforms to the UUID spec. return (this.compare(otherUuid) == 0); // boolean }; dojox.uuid.Uuid.prototype.isValid = function(){ // summary: // Returns true if the UUID was initialized with a valid value. return dojox.uuid.isValid(this); }; dojox.uuid.Uuid.prototype.getVariant = function(){ // summary: // Returns a variant code that indicates what type of UUID this is. // Returns one of the enumerated dojox.uuid.variant values. // example: // var uuid = new dojox.uuid.Uuid("3b12f1df-5232-4804-897e-917bf397618a"); // var variant = uuid.getVariant(); // dojox.uuid.assert(variant == dojox.uuid.variant.DCE); // example: // "3b12f1df-5232-4804-897e-917bf397618a" // ^ // | // (variant "10__" == DCE) return dojox.uuid.getVariant(this); }; dojox.uuid.Uuid.prototype.getVersion = function(){ // summary: // Returns a version number that indicates what type of UUID this is. // Returns one of the enumerated dojox.uuid.version values. // example: // var uuid = new dojox.uuid.Uuid("b4308fb0-86cd-11da-a72b-0800200c9a66"); // var version = uuid.getVersion(); // dojox.uuid.assert(version == dojox.uuid.version.TIME_BASED); // exceptions: // Throws an Error if this is not a DCE Variant UUID. if(!this._versionNumber){ this._versionNumber = dojox.uuid.getVersion(this); } return this._versionNumber; // dojox.uuid.version }; dojox.uuid.Uuid.prototype.getNode = function(){ // 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. if (!this._nodeString) { this._nodeString = dojox.uuid.getNode(this); } return this._nodeString; // String (a 12-character string, which will look something like "917bf397618a") }; dojox.uuid.Uuid.prototype.getTimestamp = function(/*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 uuid = new dojox.uuid.Uuid("b4308fb0-86cd-11da-a72b-0800200c9a66"); // var date, string, hexString; // date = uuid.getTimestamp(); // returns a JavaScript Date // date = uuid.getTimestamp(Date); // // string = uuid.getTimestamp(String); // "Mon, 16 Jan 2006 20:21:41 GMT" // hexString = uuid.getTimestamp("hex"); // "1da86cdb4308fb0" // exceptions: // Throws an Error if this is not a version 1 UUID. if(!returnType){returnType = null}; switch(returnType){ case "string": case String: return this.getTimestamp(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. if (!this._timestampAsHexString) { this._timestampAsHexString = dojox.uuid.getTimestamp(this, "hex"); } return this._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. if (!this._timestampAsDate) { this._timestampAsDate = dojox.uuid.getTimestamp(this, Date); } return this._timestampAsDate; // Date break; default: // we got passed something other than a valid returnType dojox.uuid.assert(false, "The getTimestamp() method dojox.uuid.Uuid was passed a bogus returnType: " + returnType); break; } };