TL1 device provider with driver for Lumentum WaveReady.

ONOS-5800 & ONOS-5801

Change-Id: Icd820285eb8db2fd92c03ebf11ce022b6a82b48a
diff --git a/protocols/tl1/api/src/main/java/org/onosproject/tl1/Tl1Command.java b/protocols/tl1/api/src/main/java/org/onosproject/tl1/Tl1Command.java
new file mode 100644
index 0000000..02dd4dc
--- /dev/null
+++ b/protocols/tl1/api/src/main/java/org/onosproject/tl1/Tl1Command.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2016-present 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.tl1;
+
+import com.google.common.annotations.Beta;
+
+import java.util.Optional;
+
+/**
+ * Representation of a TL1 command, which is sent from the controller to a network element.
+ *
+ * The following shows the typical TL1 command structure:
+ *      {@literal VERB-MODIFIER:<tid>:<aid>:<ctag>::parameter-list;}
+ *
+ * The ctag must be a non-zero decimal number consisting of not more than six characters,
+ * and is assumed to be a unique message identifier per device.
+ */
+@Beta
+public interface Tl1Command {
+
+    /**
+     * Minimum CTAG value.
+     */
+    int MIN_CTAG = 0;
+
+    /**
+     * Maximum CTAG value.
+     */
+    int MAX_CTAG = 999999;
+
+    /**
+     * Returns the verb of the command.
+     *
+     * @return the verb
+     */
+    String verb();
+
+    /**
+     * Returns the modifier of the command.
+     *
+     * @return the modifier
+     */
+    String modifier();
+
+    /**
+     * Returns the optional target identifier (tid).
+     *
+     * @return the tid
+     */
+    Optional<String> tid();
+
+    /**
+     * Returns the optional access identifier (aid).
+     *
+     * @return the aid
+     */
+    Optional<String> aid();
+
+    /**
+     * Returns the correlation tag (ctag).
+     *
+     * @return correlation tag
+     */
+    int ctag();
+
+    /**
+     * Returns the optional parameters.
+     *
+     * @return the parameters
+     */
+    Optional<String> parameters();
+
+    /**
+     * TL1 command builder.
+     *
+     * @param <T> builder implementation type
+     */
+    interface Builder<T extends Builder<T>> {
+        /**
+         * Assigns a verb to this TL1 command.
+         *
+         * @param verb a verb
+         * @return this
+         */
+        T withVerb(String verb);
+
+        /**
+         * Assigns a modifier to this TL1 command.
+         *
+         * @param modifier a modifier
+         * @return this
+         */
+        T withModifier(String modifier);
+
+        /**
+         * Assigns a target identifier to this TL1 command.
+         *
+         * @param tid a tid
+         * @return this
+         */
+        T forTid(String tid);
+
+        /**
+         * Assigns an access identifier to this TL1 command.
+         *
+         * @param aid an aid
+         * @return this
+         */
+        T withAid(String aid);
+
+        /**
+         * Assigns a correlation tag to this TL1 command.
+         *
+         * @param ctag a ctag
+         * @return this
+         */
+        T withCtag(int ctag);
+
+        /**
+         * Assigns parameters to this TL1 command.
+         *
+         * @param parameters the parameters
+         * @return this
+         */
+        T withParameters(String parameters);
+
+        /**
+         * Builds a TL1 command.
+         *
+         * @return the TL1 command
+         */
+        Tl1Command build();
+    }
+}