/**
   * Parses standard hex and sortable url safe base64
   *
   * @param s
   * @param offset
   * @param len
   * @return
   * @see TimeUUIDUtils#toSortableUrlSafeBase64(UUID)
   */
  public static UUID parse(CharSequence s, int offset, int len) {

    // if (!isValid(s, offset, len))
    // throw new IllegalArgumentException("invalid TimeUUID ["
    // + s.subSequence(offset, offset + len) + "]");

    UUID retval = null;
    if (len == 32) {
      long msb = Hex.parseLong(s.subSequence(offset, offset + len));
      long lsb = Hex.parseLong(s.subSequence(offset + 16, offset + 32));
      retval = new UUID(msb, lsb);
    } else if (len == 36) {
      long msb = Hex.parseLong(s.subSequence(offset, offset + len));
      long lsb = Hex.parseLong(s.subSequence(offset + 19, offset + 36));
      retval = new UUID(msb, lsb);
    } else if (len == 22) {
      retval = TimeUUIDUtils.fromSortableUrlSafeBase64(s, offset);
    }

    if (retval == null) {
      throw new IllegalArgumentException(
          "String not in expected format [" + s.subSequence(offset, offset + len) + "]");
    }
    return retval;
  }
Beispiel #2
0
 /**
  * Appends a String representation of this object to the given {@link Appendable} object.
  *
  * <p>For reasons I'll probably never understand, Sun has decided to have a number of I/O classes
  * implement Appendable which forced them to destroy an otherwise nice and simple interface with
  * {@link IOException}s.
  *
  * <p>I decided to ignore any possible IOExceptions in this method.
  *
  * @param a the Appendable object, may be <code>null</code>
  * @return an Appendable object, defaults to a {@link StringBuilder} if <code>a</code> is <code>
  *     null</code>
  */
 public Appendable toAppendable(Appendable a) {
   Appendable out = a;
   if (out == null) {
     out = new StringBuilder(36);
   }
   try {
     Hex.append(out, (int) (time >> 32)).append('-');
     Hex.append(out, (short) (time >> 16)).append('-');
     Hex.append(out, (short) time).append('-');
     Hex.append(out, (short) (clockSeqAndNode >> 48)).append('-');
     Hex.append(out, clockSeqAndNode, 12);
   } catch (IOException ex) {
     // What were they thinking?
   }
   return out;
 }
Beispiel #3
0
 /**
  * Parses a textual representation of a UUID.
  *
  * <p>No validation is performed. If the {@link CharSequence} is shorter than 36 characters,
  * {@link ArrayIndexOutOfBoundsException}s will be thrown.
  *
  * @param s the {@link CharSequence}, may not be <code>null</code>
  */
 public UUID(CharSequence s) {
   this(Hex.parseLong(s.subSequence(0, 18)), Hex.parseLong(s.subSequence(19, 36)));
 }