| /******************************************************************************* |
| * Copyright (c) 2015 Composent and others. All rights reserved. This |
| * program and the accompanying materials are made available under the terms of |
| * the Eclipse Public License v1.0 which accompanies this distribution, and is |
| * available at http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Scott Lewis - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.ecf.core.identity; |
| |
| import java.net.URI; |
| import java.util.UUID; |
| import org.eclipse.core.runtime.Assert; |
| |
| /** |
| * @since 3.5 |
| */ |
| public class UuID extends BaseID { |
| |
| private static final long serialVersionUID = -2586540125532542205L; |
| |
| public static class UuIDNamespace extends Namespace { |
| |
| private static final long serialVersionUID = -7708511830843215943L; |
| public static final String SCHEME = "uuid"; |
| |
| public UuIDNamespace() { |
| this(UuID.class.getName(), "UuID Namespace"); |
| } |
| |
| public UuIDNamespace(String name, String description) { |
| super(name, description); |
| } |
| |
| @Override |
| public ID createInstance(Object[] parameters) throws IDCreateException { |
| try { |
| String init = getInitStringFromExternalForm(parameters); |
| if (init != null) |
| return new UuID(this, UUID.fromString(init)); |
| if (parameters != null && parameters.length > 0) { |
| if (parameters[0] instanceof String) |
| return new UuID(this, UUID.fromString((String) parameters[0])); |
| else if (parameters[0] instanceof URI) |
| return new UuID(this, UUID.fromString(((URI) parameters[0]).getSchemeSpecificPart())); |
| else if (parameters[0] instanceof UUID) |
| return new UuID(this, (UUID) parameters[0]); |
| } |
| // If we get here, then use random |
| return new UuID(this, UUID.randomUUID()); |
| } catch (Exception e) { |
| throw new IDCreateException(UuIDNamespace.this.getName() + " createInstance()", e); //$NON-NLS-1$ |
| } |
| } |
| |
| @Override |
| public String getScheme() { |
| return SCHEME; |
| } |
| |
| @Override |
| public Class<?>[][] getSupportedParameterTypes() { |
| return new Class[][] { { String.class }, { UUID.class }, { URI.class } }; |
| } |
| } |
| |
| protected UUID uuid; |
| |
| /** |
| * @since 3.9 |
| */ |
| public UuID() { |
| |
| } |
| |
| protected UuID(UuIDNamespace ns, UUID uuid) { |
| super(ns); |
| Assert.isNotNull(uuid); |
| this.uuid = uuid; |
| } |
| |
| protected int namespaceCompareTo(BaseID obj) { |
| return getName().compareTo(obj.getName()); |
| } |
| |
| protected boolean namespaceEquals(BaseID obj) { |
| if (!(obj instanceof UuID)) |
| return false; |
| UuID o = (UuID) obj; |
| return uuid.equals(o.uuid); |
| } |
| |
| protected String namespaceGetName() { |
| return uuid.toString(); |
| } |
| |
| protected int namespaceHashCode() { |
| return uuid.hashCode() ^ getClass().hashCode(); |
| } |
| |
| public UUID getUUID() { |
| return uuid; |
| } |
| |
| @Override |
| public String toString() { |
| return "UuID[uuid=" + uuid + "]"; |
| } |
| |
| } |