You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2005/04/21 04:09:34 UTC
cvs commit: ws-axis/java/src/org/apache/axis/components/uuid FastUUIDGen.java
dims 2005/04/20 19:09:34
Modified: java/src/org/apache/axis/components/uuid FastUUIDGen.java
Log:
Fix CR/LF problems.
Revision Changes Path
1.3 +132 -132 ws-axis/java/src/org/apache/axis/components/uuid/FastUUIDGen.java
Index: FastUUIDGen.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/components/uuid/FastUUIDGen.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FastUUIDGen.java 5 Nov 2004 00:12:22 -0000 1.2
+++ FastUUIDGen.java 21 Apr 2005 02:09:34 -0000 1.3
@@ -1,132 +1,132 @@
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.axis.components.uuid;
-
-import java.util.Random;
-import java.security.SecureRandom;
-
-/**
- * Creates time-based UUID's. See the <a href="http://www.ietf.org/internet-drafts/draft-mealling-uuid-urn-03.txt">UUID Internet Draft</a> for details.
- *
- * @author Jarek Gawor (gawor@apache.org)
- */
-public class FastUUIDGen implements UUIDGen {
-
- private static Random secureRandom;
-
- private static String nodeStr;
- private static int clockSequence;
-
- private long lastTime = 0;
-
- static {
- // problem: the node should be the IEEE 802 ethernet address, but can not
- // be retrieved in Java yet.
- // see bug ID 4173528
- // workaround (also suggested in bug ID 4173528)
- // If a system wants to generate UUIDs but has no IEE 802 compliant
- // network card or other source of IEEE 802 addresses, then this section
- // describes how to generate one.
- // The ideal solution is to obtain a 47 bit cryptographic quality random
- // number, and use it as the low 47 bits of the node ID, with the most
- // significant bit of the first octet of the node ID set to 1. This bit
- // is the unicast/multicast bit, which will never be set in IEEE 802
- // addresses obtained from network cards; hence, there can never be a
- // conflict between UUIDs generated by machines with and without network
- // cards.
- try {
- secureRandom = SecureRandom.getInstance("SHA1PRNG", "SUN");
- } catch (Exception e) {
- secureRandom = new Random();
- }
-
- nodeStr = getNodeHexValue();
- clockSequence = getClockSequence();
- }
-
- private static String getNodeHexValue() {
- long node = 0;
- long nodeValue = 0;
- while ( (node = getBitsValue(nodeValue, 47, 47)) == 0 ) {
- nodeValue = secureRandom.nextLong();
- }
- node = node | 0x800000000000L;
- return leftZeroPadString(Long.toHexString(node), 12);
- }
-
- private static int getClockSequence() {
- return secureRandom.nextInt(16384);
- }
-
- public String nextUUID() {
- long time = System.currentTimeMillis();
-
- long timestamp = time * 10000;
- timestamp += 0x01b21dd2L << 32;
- timestamp += 0x13814000;
-
- synchronized(this) {
- if (time - lastTime <= 0) {
- int oldClockSequence = clockSequence;
- while ( oldClockSequence == clockSequence) {
- clockSequence = getClockSequence();
- }
- }
- lastTime = time;
- }
-
- long timeLow = getBitsValue(timestamp, 32, 32);
- long timeMid = getBitsValue(timestamp, 48, 16);
- long timeHi = getBitsValue(timestamp, 64, 16) | 0x1000;
-
- long clockSeqLow = getBitsValue(clockSequence, 8, 8);
- long clockSeqHi = getBitsValue(clockSequence, 16, 8) | 0x80;
-
- String timeLowStr = leftZeroPadString(Long.toHexString(timeLow), 8);
- String timeMidStr = leftZeroPadString(Long.toHexString(timeMid), 4);
- String timeHiStr = leftZeroPadString(Long.toHexString(timeHi), 4);
-
- String clockSeqHiStr = leftZeroPadString(Long.toHexString(clockSeqHi), 2);
- String clockSeqLowStr = leftZeroPadString(Long.toHexString(clockSeqLow), 2);
-
- StringBuffer result = new StringBuffer(36);
- result.append(timeLowStr).append("-");
- result.append(timeMidStr).append("-");
- result.append(timeHiStr).append("-");
- result.append(clockSeqHiStr).append(clockSeqLowStr);
- result.append("-").append(nodeStr);
-
- return result.toString();
- }
-
- private static long getBitsValue(long value, int startBit, int bitLen) {
- return ((value << (64-startBit)) >>> (64-bitLen));
- }
-
- private static final String leftZeroPadString(String bitString, int len) {
- if (bitString.length() < len) {
- int nbExtraZeros = len - bitString.length();
- StringBuffer extraZeros = new StringBuffer();
- for (int i = 0; i < nbExtraZeros; i++) {
- extraZeros.append("0");
- }
- extraZeros.append(bitString);
- bitString = extraZeros.toString();
- }
- return bitString;
- }
-
-}
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.axis.components.uuid;
+
+import java.util.Random;
+import java.security.SecureRandom;
+
+/**
+ * Creates time-based UUID's. See the <a href="http://www.ietf.org/internet-drafts/draft-mealling-uuid-urn-03.txt">UUID Internet Draft</a> for details.
+ *
+ * @author Jarek Gawor (gawor@apache.org)
+ */
+public class FastUUIDGen implements UUIDGen {
+
+ private static Random secureRandom;
+
+ private static String nodeStr;
+ private static int clockSequence;
+
+ private long lastTime = 0;
+
+ static {
+ // problem: the node should be the IEEE 802 ethernet address, but can not
+ // be retrieved in Java yet.
+ // see bug ID 4173528
+ // workaround (also suggested in bug ID 4173528)
+ // If a system wants to generate UUIDs but has no IEE 802 compliant
+ // network card or other source of IEEE 802 addresses, then this section
+ // describes how to generate one.
+ // The ideal solution is to obtain a 47 bit cryptographic quality random
+ // number, and use it as the low 47 bits of the node ID, with the most
+ // significant bit of the first octet of the node ID set to 1. This bit
+ // is the unicast/multicast bit, which will never be set in IEEE 802
+ // addresses obtained from network cards; hence, there can never be a
+ // conflict between UUIDs generated by machines with and without network
+ // cards.
+ try {
+ secureRandom = SecureRandom.getInstance("SHA1PRNG", "SUN");
+ } catch (Exception e) {
+ secureRandom = new Random();
+ }
+
+ nodeStr = getNodeHexValue();
+ clockSequence = getClockSequence();
+ }
+
+ private static String getNodeHexValue() {
+ long node = 0;
+ long nodeValue = 0;
+ while ( (node = getBitsValue(nodeValue, 47, 47)) == 0 ) {
+ nodeValue = secureRandom.nextLong();
+ }
+ node = node | 0x800000000000L;
+ return leftZeroPadString(Long.toHexString(node), 12);
+ }
+
+ private static int getClockSequence() {
+ return secureRandom.nextInt(16384);
+ }
+
+ public String nextUUID() {
+ long time = System.currentTimeMillis();
+
+ long timestamp = time * 10000;
+ timestamp += 0x01b21dd2L << 32;
+ timestamp += 0x13814000;
+
+ synchronized(this) {
+ if (time - lastTime <= 0) {
+ int oldClockSequence = clockSequence;
+ while ( oldClockSequence == clockSequence) {
+ clockSequence = getClockSequence();
+ }
+ }
+ lastTime = time;
+ }
+
+ long timeLow = getBitsValue(timestamp, 32, 32);
+ long timeMid = getBitsValue(timestamp, 48, 16);
+ long timeHi = getBitsValue(timestamp, 64, 16) | 0x1000;
+
+ long clockSeqLow = getBitsValue(clockSequence, 8, 8);
+ long clockSeqHi = getBitsValue(clockSequence, 16, 8) | 0x80;
+
+ String timeLowStr = leftZeroPadString(Long.toHexString(timeLow), 8);
+ String timeMidStr = leftZeroPadString(Long.toHexString(timeMid), 4);
+ String timeHiStr = leftZeroPadString(Long.toHexString(timeHi), 4);
+
+ String clockSeqHiStr = leftZeroPadString(Long.toHexString(clockSeqHi), 2);
+ String clockSeqLowStr = leftZeroPadString(Long.toHexString(clockSeqLow), 2);
+
+ StringBuffer result = new StringBuffer(36);
+ result.append(timeLowStr).append("-");
+ result.append(timeMidStr).append("-");
+ result.append(timeHiStr).append("-");
+ result.append(clockSeqHiStr).append(clockSeqLowStr);
+ result.append("-").append(nodeStr);
+
+ return result.toString();
+ }
+
+ private static long getBitsValue(long value, int startBit, int bitLen) {
+ return ((value << (64-startBit)) >>> (64-bitLen));
+ }
+
+ private static final String leftZeroPadString(String bitString, int len) {
+ if (bitString.length() < len) {
+ int nbExtraZeros = len - bitString.length();
+ StringBuffer extraZeros = new StringBuffer();
+ for (int i = 0; i < nbExtraZeros; i++) {
+ extraZeros.append("0");
+ }
+ extraZeros.append(bitString);
+ bitString = extraZeros.toString();
+ }
+ return bitString;
+ }
+
+}