[ONOS-700][ONOS-1801]refactor tunnel subsystem api.
1.use more abstract and more flexible entity[TunnelPoint] to represent
for source or destination point of tunnel,instead of Label
2.suport for muti-producer
3.use Order entity to record tunnel-order relationship
4.modify Tunnel entity to add more properties.
5.rename Label and LabelId to OpticalTunnelPoint and OpticalLogicId in
order to keep code style consistently,at the same time
OpticalTunnelPoint implements TunnelPoint
6.add junit test

Change-Id: I371afcef5501e468a43758c5982e7a93b443b114
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/OpticalLogicId.java b/core/api/src/main/java/org/onosproject/net/tunnel/OpticalLogicId.java
new file mode 100644
index 0000000..d12849b
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/tunnel/OpticalLogicId.java
@@ -0,0 +1,77 @@
+/*
+ * 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.net.tunnel;
+
+import java.util.Objects;
+import com.google.common.primitives.UnsignedLongs;
+
+/**
+ * Representation of a label Id, a logical port identifier.
+ */
+public final class OpticalLogicId {
+        /**
+         * Represents a logical Id.
+        */
+        private final long logicId;
+
+        /**
+         * Constructor, public creation is prohibited.
+         */
+        private OpticalLogicId(long id) {
+            this.logicId = id;
+        }
+
+        /**
+         * Returns the LabelId representing the specified long value.
+         *
+         * @param id identifier as long value
+         * @return LabelId
+         */
+        public static OpticalLogicId logicId(long id) {
+            return new OpticalLogicId(id);
+        }
+
+        public static OpticalLogicId logicId(String string) {
+            return new OpticalLogicId(UnsignedLongs.decode(string));
+        }
+
+        public long toLong() {
+            return logicId;
+        }
+
+        @Override
+        public String toString() {
+            return UnsignedLongs.toString(logicId);
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(logicId);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj instanceof OpticalLogicId) {
+                final OpticalLogicId other = (OpticalLogicId) obj;
+                return this.logicId == other.logicId;
+            }
+            return false;
+        }
+
+}