[Migration] Add content from Juniper

Automated change

Change-Id: Ie1ceb7b977663ecd93cdf0fc317d402d1f991d07
diff --git a/contrail-webui/controller/uuid.js b/contrail-webui/controller/uuid.js
new file mode 100644
index 0000000..ee4b388
--- /dev/null
+++ b/contrail-webui/controller/uuid.js
@@ -0,0 +1,233 @@
+/*

+ * UUID-js: A js library to generate and parse UUIDs, TimeUUIDs and generate

+ * TimeUUID based on dates for range selections.

+ * @see http://www.ietf.org/rfc/rfc4122.txt

+ **/

+

+function UUIDjs() {

+};

+

+UUIDjs.maxFromBits = function(bits) {

+  return Math.pow(2, bits);

+};

+

+UUIDjs.limitUI04 = UUIDjs.maxFromBits(4);

+UUIDjs.limitUI06 = UUIDjs.maxFromBits(6);

+UUIDjs.limitUI08 = UUIDjs.maxFromBits(8);

+UUIDjs.limitUI12 = UUIDjs.maxFromBits(12);

+UUIDjs.limitUI14 = UUIDjs.maxFromBits(14);

+UUIDjs.limitUI16 = UUIDjs.maxFromBits(16);

+UUIDjs.limitUI32 = UUIDjs.maxFromBits(32);

+UUIDjs.limitUI40 = UUIDjs.maxFromBits(40);

+UUIDjs.limitUI48 = UUIDjs.maxFromBits(48);

+

+UUIDjs.randomUI04 = function() {

+  return Math.round(Math.random() * UUIDjs.limitUI04);

+};

+UUIDjs.randomUI06 = function() {

+  return Math.round(Math.random() * UUIDjs.limitUI06);

+};

+UUIDjs.randomUI08 = function() {

+  return Math.round(Math.random() * UUIDjs.limitUI08);

+};

+UUIDjs.randomUI12 = function() {

+  return Math.round(Math.random() * UUIDjs.limitUI12);

+};

+UUIDjs.randomUI14 = function() {

+  return Math.round(Math.random() * UUIDjs.limitUI14);

+};

+UUIDjs.randomUI16 = function() {

+  return Math.round(Math.random() * UUIDjs.limitUI16);

+};

+UUIDjs.randomUI32 = function() {

+  return Math.round(Math.random() * UUIDjs.limitUI32);

+};

+UUIDjs.randomUI40 = function() {

+  return (0 | Math.random() * (1 << 30)) + (0 | Math.random() * (1 << 40 - 30)) * (1 << 30);

+};

+UUIDjs.randomUI48 = function() {

+  return (0 | Math.random() * (1 << 30)) + (0 | Math.random() * (1 << 48 - 30)) * (1 << 30);

+};

+

+UUIDjs.paddedString = function(string, length, z) {

+  string = String(string);

+  z = (!z) ? '0' : z;

+  var i = length - string.length;

+  for (; i > 0; i >>>= 1, z += z) {

+    if (i & 1) {

+      string = z + string;

+    }

+  }

+  return string;

+};

+

+UUIDjs.prototype.fromParts = function(timeLow, timeMid, timeHiAndVersion, clockSeqHiAndReserved, clockSeqLow, node) {

+  this.version = (timeHiAndVersion >> 12) & 0xF;

+  this.hex = UUIDjs.paddedString(timeLow.toString(16), 8)

+             + '-'

+             + UUIDjs.paddedString(timeMid.toString(16), 4)

+             + '-'

+             + UUIDjs.paddedString(timeHiAndVersion.toString(16), 4)

+             + '-'

+             + UUIDjs.paddedString(clockSeqHiAndReserved.toString(16), 2)

+             + UUIDjs.paddedString(clockSeqLow.toString(16), 2)

+             + '-'

+             + UUIDjs.paddedString(node.toString(16), 12);

+  return this;

+};

+

+UUIDjs.prototype.toString = function() {

+  return this.hex;

+};

+UUIDjs.prototype.toURN = function() {

+  return 'urn:uuid:' + this.hex;

+};

+

+UUIDjs.prototype.toBytes = function() {

+  var parts = this.hex.split('-');

+  var ints = [];

+  var intPos = 0;

+  for (var i = 0; i < parts.length; i++) {

+    for (var j = 0; j < parts[i].length; j+=2) {

+      ints[intPos++] = parseInt(parts[i].substr(j, 2), 16);

+    }

+  }

+  return ints;

+};

+

+UUIDjs.prototype.equals = function(uuid) {

+  if (!(uuid instanceof UUID)) {

+    return false;

+  }

+  if (this.hex !== uuid.hex) {

+    return false;

+  }

+  return true;

+};

+

+UUIDjs.getTimeFieldValues = function(time) {

+  var ts = time - Date.UTC(1582, 9, 15);

+  var hm = ((ts / 0x100000000) * 10000) & 0xFFFFFFF;

+  return { low: ((ts & 0xFFFFFFF) * 10000) % 0x100000000,

+            mid: hm & 0xFFFF, hi: hm >>> 16, timestamp: ts };

+};

+

+UUIDjs._create4 = function() {

+  return new UUIDjs().fromParts(

+    UUIDjs.randomUI32(),

+    UUIDjs.randomUI16(),

+    0x4000 | UUIDjs.randomUI12(),

+    0x80   | UUIDjs.randomUI06(),

+    UUIDjs.randomUI08(),

+    UUIDjs.randomUI48()

+  );

+};

+

+UUIDjs._create1 = function() {

+  var now = new Date().getTime();

+  var sequence = UUIDjs.randomUI14();

+  var node = (UUIDjs.randomUI08() | 1) * 0x10000000000 + UUIDjs.randomUI40();

+  var tick = UUIDjs.randomUI04();

+  var timestamp = 0;

+  var timestampRatio = 1/4;

+

+  if (now != timestamp) {

+    if (now < timestamp) {

+      sequence++;

+    }

+    timestamp = now;

+    tick = UUIDjs.randomUI04();

+  } else if (Math.random() < timestampRatio && tick < 9984) {

+    tick += 1 + UUIDjs.randomUI04();

+  } else {

+    sequence++;

+  }

+

+  var tf = UUIDjs.getTimeFieldValues(timestamp);

+  var tl = tf.low + tick;

+  var thav = (tf.hi & 0xFFF) | 0x1000;

+

+  sequence &= 0x3FFF;

+  var cshar = (sequence >>> 8) | 0x80;

+  var csl = sequence & 0xFF;

+

+  return new UUIDjs().fromParts(tl, tf.mid, thav, cshar, csl, node);

+};

+

+UUIDjs.create = function(version) {

+  version = version || 4;

+  return this['_create' + version]();

+};

+

+UUIDjs.fromTime = function(time, last) {

+  last = (!last) ? false : last;

+  var tf = UUIDjs.getTimeFieldValues(time);

+  var tl = tf.low;

+  var thav = (tf.hi & 0xFFF) | 0x1000;  // set version '0001'

+  if (last === false) {

+    return new UUIDjs().fromParts(tl, tf.mid, thav, 0, 0, 0);

+  } else {

+    return new UUIDjs().fromParts(tl, tf.mid, thav, 0x80 | UUIDjs.limitUI06, UUIDjs.limitUI08 - 1, UUIDjs.limitUI48 - 1);

+  }

+};

+

+UUIDjs.firstFromTime = function(time) {

+  return UUIDjs.fromTime(time, false);

+};

+UUIDjs.lastFromTime = function(time) {

+  return UUIDjs.fromTime(time, true);

+};

+

+UUIDjs.fromURN = function(strId) {

+  var r, p = /^(?:urn:uuid:|\{)?([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{2})([0-9a-f]{2})-([0-9a-f]{12})(?:\})?$/i;

+  if ((r = p.exec(strId))) {

+    return new UUIDjs().fromParts(parseInt(r[1], 16), parseInt(r[2], 16),

+                            parseInt(r[3], 16), parseInt(r[4], 16),

+                            parseInt(r[5], 16), parseInt(r[6], 16));

+  }

+  return null;

+};

+

+UUIDjs.fromBytes = function(ints) {

+  if (ints.length < 5) {

+    return null;

+  }

+  var str = '';

+  var pos = 0;

+  var parts = [4, 2, 2, 2, 6];

+  for (var i = 0; i < parts.length; i++) {

+    for (var j = 0; j < parts[i]; j++) {

+      var octet = ints[pos++].toString(16);

+      if (octet.length == 1) {

+        octet = '0' + octet;

+      }

+      str += octet;

+    }

+    if (parts[i] !== 6) {

+      str += '-';

+    }

+  }

+  return UUIDjs.fromURN(str);

+};

+

+UUIDjs.fromBinary = function(binary) {

+  var ints = [];

+  for (var i = 0; i < binary.length; i++) {

+    ints[i] = binary.charCodeAt(i);

+    if (ints[i] > 255 || ints[i] < 0) {

+      throw new Error('Unexpected byte in binary data.');

+    }

+  }

+  return UUIDjs.fromBytes(ints);

+};

+

+// Aliases to support legacy code. Do not use these when writing new code as

+// they may be removed in future versions!

+UUIDjs.new = function() {

+  return this.create(4);

+};

+UUIDjs.newTS = function() {

+  return this.create(1);

+};

+

+//module.exports = UUIDjs;