Moved generic Timestamp/ClockManager classes to onos-api
so they are usable by applications.

Change-Id: Icf0e92d12434dec782332e91b632da8066a85b60
diff --git a/core/store/dist/src/main/java/org/onosproject/store/app/GossipApplicationStore.java b/core/store/dist/src/main/java/org/onosproject/store/app/GossipApplicationStore.java
index 4910ce4..6cfb218 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/app/GossipApplicationStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/app/GossipApplicationStore.java
@@ -43,7 +43,7 @@
 import org.onosproject.store.cluster.messaging.ClusterMessage;
 import org.onosproject.store.cluster.messaging.ClusterMessageHandler;
 import org.onosproject.store.cluster.messaging.MessageSubject;
-import org.onosproject.store.impl.MultiValuedTimestamp;
+import org.onosproject.store.service.MultiValuedTimestamp;
 import org.onosproject.store.serializers.KryoNamespaces;
 import org.onosproject.store.service.EventuallyConsistentMap;
 import org.onosproject.store.service.EventuallyConsistentMapEvent;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java b/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java
index c46131e..f03215d 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java
@@ -35,7 +35,7 @@
 import org.onosproject.store.cluster.messaging.MessageSubject;
 import org.onosproject.store.impl.LogicalTimestamp;
 import org.onosproject.store.impl.Timestamped;
-import org.onosproject.store.impl.WallClockTimestamp;
+import org.onosproject.store.service.WallClockTimestamp;
 import org.onosproject.store.serializers.KryoSerializer;
 import org.onosproject.store.service.ClockService;
 import org.onosproject.store.service.EventuallyConsistentMap;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java
index 8a31de1..60b72d7 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/group/impl/DistributedGroupStore.java
@@ -62,7 +62,7 @@
 import org.onosproject.store.cluster.messaging.ClusterCommunicationService;
 import org.onosproject.store.cluster.messaging.ClusterMessage;
 import org.onosproject.store.cluster.messaging.ClusterMessageHandler;
-import org.onosproject.store.impl.MultiValuedTimestamp;
+import org.onosproject.store.service.MultiValuedTimestamp;
 import org.onosproject.store.serializers.KryoNamespaces;
 import org.onosproject.store.service.ClockService;
 import org.onosproject.store.service.EventuallyConsistentMap;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/host/impl/HostClockManager.java b/core/store/dist/src/main/java/org/onosproject/store/host/impl/HostClockManager.java
index 097af85..f96568b 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/host/impl/HostClockManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/host/impl/HostClockManager.java
@@ -24,7 +24,7 @@
 import org.onosproject.net.HostId;
 import org.onosproject.net.host.HostClockService;
 import org.onosproject.store.Timestamp;
-import org.onosproject.store.impl.WallClockTimestamp;
+import org.onosproject.store.service.WallClockTimestamp;
 import org.slf4j.Logger;
 
 /**
diff --git a/core/store/dist/src/main/java/org/onosproject/store/impl/MultiValuedTimestamp.java b/core/store/dist/src/main/java/org/onosproject/store/impl/MultiValuedTimestamp.java
deleted file mode 100644
index f460dbd..0000000
--- a/core/store/dist/src/main/java/org/onosproject/store/impl/MultiValuedTimestamp.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.store.impl;
-
-import com.google.common.base.MoreObjects;
-import com.google.common.collect.ComparisonChain;
-import org.onosproject.store.Timestamp;
-
-import java.util.Objects;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * A logical timestamp that derives its value from two input values. The first
- * value always takes precedence over the second value when comparing timestamps.
- */
-public class MultiValuedTimestamp<T extends Comparable<T>, U extends Comparable<U>>
-        implements Timestamp {
-
-    private final T value1;
-    private final U value2;
-
-    /**
-     * Creates a new timestamp based on two values. The first value has higher
-     * precedence than the second when comparing timestamps.
-     *
-     * @param value1 first value
-     * @param value2 second value
-     */
-    public MultiValuedTimestamp(T value1, U value2) {
-        this.value1 = checkNotNull(value1);
-        this.value2 = checkNotNull(value2);
-    }
-
-    @Override
-    public int compareTo(Timestamp o) {
-        checkArgument(o instanceof MultiValuedTimestamp,
-                      "Must be MultiValuedTimestamp", o);
-        MultiValuedTimestamp that = (MultiValuedTimestamp) o;
-
-        return ComparisonChain.start()
-                .compare(this.value1, that.value1)
-                .compare(this.value2, that.value2)
-                .result();
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(value1, value2);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (!(obj instanceof MultiValuedTimestamp)) {
-            return false;
-        }
-        MultiValuedTimestamp that = (MultiValuedTimestamp) obj;
-        return Objects.equals(this.value1, that.value1) &&
-                Objects.equals(this.value2, that.value2);
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("value1", value1)
-                .add("value2", value2)
-                .toString();
-    }
-
-    /**
-     * Returns the first value.
-     *
-     * @return first value
-     */
-    public T value1() {
-        return value1;
-    }
-
-    /**
-     * Returns the second value.
-     *
-     * @return second value
-     */
-    public U value2() {
-        return value2;
-    }
-
-    // Default constructor for serialization
-    @SuppressWarnings("unused")
-    private MultiValuedTimestamp() {
-        this.value1 = null;
-        this.value2 = null;
-    }
-}
diff --git a/core/store/dist/src/main/java/org/onosproject/store/impl/WallClockTimestamp.java b/core/store/dist/src/main/java/org/onosproject/store/impl/WallClockTimestamp.java
deleted file mode 100644
index e7efb29..0000000
--- a/core/store/dist/src/main/java/org/onosproject/store/impl/WallClockTimestamp.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.onosproject.store.impl;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-import java.util.Objects;
-
-import org.onosproject.store.Timestamp;
-
-import com.google.common.base.MoreObjects;
-import com.google.common.collect.ComparisonChain;
-
-/**
- * A Timestamp that derives its value from the prevailing
- * wallclock time on the controller where it is generated.
- */
-public class WallClockTimestamp implements Timestamp {
-
-    private final long unixTimestamp;
-
-    public WallClockTimestamp() {
-        unixTimestamp = System.currentTimeMillis();
-    }
-
-    public WallClockTimestamp(long timestamp) {
-        unixTimestamp = timestamp;
-    }
-
-    @Override
-    public int compareTo(Timestamp o) {
-        checkArgument(o instanceof WallClockTimestamp,
-                "Must be WallClockTimestamp", o);
-        WallClockTimestamp that = (WallClockTimestamp) o;
-
-        return ComparisonChain.start()
-                .compare(this.unixTimestamp, that.unixTimestamp)
-                .result();
-    }
-    @Override
-    public int hashCode() {
-        return Objects.hash(unixTimestamp);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (!(obj instanceof WallClockTimestamp)) {
-            return false;
-        }
-        WallClockTimestamp that = (WallClockTimestamp) obj;
-        return Objects.equals(this.unixTimestamp, that.unixTimestamp);
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                    .add("unixTimestamp", unixTimestamp)
-                    .toString();
-    }
-
-    /**
-     * Returns the unixTimestamp.
-     *
-     * @return unix timestamp
-     */
-    public long unixTimestamp() {
-        return unixTimestamp;
-    }
-}
diff --git a/core/store/dist/src/main/java/org/onosproject/store/impl/WallclockClockManager.java b/core/store/dist/src/main/java/org/onosproject/store/impl/WallclockClockManager.java
deleted file mode 100644
index fd25ebf..0000000
--- a/core/store/dist/src/main/java/org/onosproject/store/impl/WallclockClockManager.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.onosproject.store.impl;
-
-import org.onosproject.store.Timestamp;
-import org.onosproject.store.service.ClockService;
-
-/**
- * A clock service which hands out wallclock-based timestamps.
- */
-public class WallclockClockManager<T, U> implements ClockService<T, U> {
-    @Override
-    public Timestamp getTimestamp(T object1, U object2) {
-        return new WallClockTimestamp();
-    }
-}
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
index 7de2d17..9412dac 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
@@ -36,8 +36,8 @@
 import org.onosproject.net.intent.Key;
 import org.onosproject.net.intent.PartitionService;
 import org.onosproject.store.AbstractStore;
-import org.onosproject.store.impl.MultiValuedTimestamp;
-import org.onosproject.store.impl.WallClockTimestamp;
+import org.onosproject.store.service.MultiValuedTimestamp;
+import org.onosproject.store.service.WallClockTimestamp;
 import org.onosproject.store.serializers.KryoNamespaces;
 import org.onosproject.store.service.EventuallyConsistentMap;
 import org.onosproject.store.service.EventuallyConsistentMapEvent;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentClockManager.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentClockManager.java
index 7dea4df..a0d7d2f 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentClockManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentClockManager.java
@@ -22,7 +22,7 @@
 import org.onosproject.net.intent.IntentClockService;
 import org.onosproject.net.intent.IntentId;
 import org.onosproject.store.Timestamp;
-import org.onosproject.store.impl.WallClockTimestamp;
+import org.onosproject.store.service.WallClockTimestamp;
 import org.slf4j.Logger;
 
 import static org.slf4j.LoggerFactory.getLogger;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentDataClockManager.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentDataClockManager.java
index 1c4ffbf..d828988 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentDataClockManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentDataClockManager.java
@@ -18,7 +18,7 @@
 import org.onosproject.net.intent.IntentData;
 import org.onosproject.store.Timestamp;
 import org.onosproject.store.service.ClockService;
-import org.onosproject.store.impl.MultiValuedTimestamp;
+import org.onosproject.store.service.MultiValuedTimestamp;
 
 /**
  * ClockService that uses IntentData versions as timestamps.
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentDataLogicalClockManager.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentDataLogicalClockManager.java
index 9d21223..8d78138 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentDataLogicalClockManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/IntentDataLogicalClockManager.java
@@ -18,7 +18,7 @@
 import org.onosproject.net.intent.IntentData;
 import org.onosproject.store.Timestamp;
 import org.onosproject.store.service.ClockService;
-import org.onosproject.store.impl.MultiValuedTimestamp;
+import org.onosproject.store.service.MultiValuedTimestamp;
 
 import java.util.concurrent.atomic.AtomicLong;
 
diff --git a/core/store/dist/src/main/java/org/onosproject/store/serializers/impl/DistributedStoreSerializers.java b/core/store/dist/src/main/java/org/onosproject/store/serializers/impl/DistributedStoreSerializers.java
index 6748154..d717a31 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/serializers/impl/DistributedStoreSerializers.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/serializers/impl/DistributedStoreSerializers.java
@@ -17,7 +17,7 @@
 
 import org.onosproject.store.impl.MastershipBasedTimestamp;
 import org.onosproject.store.impl.Timestamped;
-import org.onosproject.store.impl.WallClockTimestamp;
+import org.onosproject.store.service.WallClockTimestamp;
 import org.onosproject.store.serializers.KryoNamespaces;
 import org.onlab.util.KryoNamespace;
 
diff --git a/core/store/dist/src/test/java/org/onosproject/store/ecmap/EventuallyConsistentMapImplTest.java b/core/store/dist/src/test/java/org/onosproject/store/ecmap/EventuallyConsistentMapImplTest.java
index a4db35f..c215f5b 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/ecmap/EventuallyConsistentMapImplTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/ecmap/EventuallyConsistentMapImplTest.java
@@ -38,7 +38,7 @@
 import org.onosproject.store.cluster.messaging.MessageSubject;
 import org.onosproject.store.service.ClockService;
 import org.onosproject.store.impl.LogicalTimestamp;
-import org.onosproject.store.impl.WallClockTimestamp;
+import org.onosproject.store.service.WallClockTimestamp;
 import org.onosproject.store.serializers.KryoNamespaces;
 import org.onosproject.store.serializers.KryoSerializer;
 import org.onosproject.store.service.EventuallyConsistentMap;
diff --git a/core/store/dist/src/test/java/org/onosproject/store/impl/WallClockTimestampTest.java b/core/store/dist/src/test/java/org/onosproject/store/impl/WallClockTimestampTest.java
index c0fda9e..ead4612 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/impl/WallClockTimestampTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/impl/WallClockTimestampTest.java
@@ -24,6 +24,7 @@
 import org.onlab.util.KryoNamespace;
 
 import com.google.common.testing.EqualsTester;
+import org.onosproject.store.service.WallClockTimestamp;
 
 /**
  * Tests for {@link WallClockTimestamp}.