refactor waveserver. Allow future drivers

Change-Id: I8ca4ed2435d42aaf5d58eb020aa3a6cfd17c6fa4
diff --git a/drivers/ciena/README.md b/drivers/ciena/README.md
new file mode 100644
index 0000000..7a29a1d
--- /dev/null
+++ b/drivers/ciena/README.md
@@ -0,0 +1,4 @@
+There is no BUCK or pom.xml file at this level because each driver 
+should be completely independent of each other. i.e. The will be 
+treated as individual applications. The 'microsemi' folder is only 
+a grouping mechanism at the directory level. 
\ No newline at end of file
diff --git a/drivers/ciena/BUCK b/drivers/ciena/waveserver/BUCK
similarity index 81%
rename from drivers/ciena/BUCK
rename to drivers/ciena/waveserver/BUCK
index efc3835..0f3e825 100644
--- a/drivers/ciena/BUCK
+++ b/drivers/ciena/waveserver/BUCK
@@ -16,7 +16,7 @@
 ]
 
 BUNDLES = [
-    ':onos-drivers-ciena',
+    ':onos-drivers-ciena-waveserver',
     '//drivers/utilities:onos-drivers-utilities',
 ]
 
@@ -34,11 +34,11 @@
 )
 
 onos_app (
-    app_name = 'org.onosproject.drivers.ciena',
-    title = 'Ciena Drivers',
+    app_name = 'org.onosproject.drivers.ciena.waveserver.rest',
+    title = 'Ciena Waveserver Drivers',
     category = 'Drivers',
     url = 'http://onosproject.org',
-    description = 'Adds support for Ciena devices.',
+    description = 'Adds support for Ciena Waveserver devices.',
     included_bundles = BUNDLES,
     required_apps = REQUIRED_APPS,
 )
diff --git a/drivers/ciena/waveserver/README.md b/drivers/ciena/waveserver/README.md
new file mode 100644
index 0000000..aef0dc9
--- /dev/null
+++ b/drivers/ciena/waveserver/README.md
@@ -0,0 +1,61 @@
+# Ciena Waveserver
+
+This driver allows connection to the Ciena Waveserver
+
+The User Guide for this product is available on request from Ciena, and gives a full explanation of the theory of operation, functionality and how all functions can be accessed through the REST interface.
+
+Currently only a subset of it's functionality is supported through ONOS, but this will expand to full functionality in future releases.
+
+## Compile and Installation
+
+Currently this driver is built using BUCK and uses version 2.1 of onos-yang-tools<br/>
+
+All that is required to activate the driver is to run the following at the ONOS CLI
+
+```bash
+app activate org.onosproject.drivers.ciena.waveserver.rest
+```
+
+## Usage
+
+### Creating Devices
+
+Ciena Waveserver Devices are not Openflow devices. The connectivity is initiated from ONOS. They have to be created through the network/configuration REST interface in ONOS.
+
+* The name must follow the format **rest:ipaddr:port**
+* The **ip** and **port** must correspond to the ip and port in the name (above).
+
+```bash
+curl -X POST
+  http://onos-ip:8181/onos/v1/network/configuration
+  -H 'Authorization: Basic b25vczpyb2Nrcw==' \
+  -H 'Content-Type: application/json' \
+  -d '{
+    "devices": {
+      "rest:10.181.66.217:443": {
+        "rest": {
+          "port": 443,
+          "ip": "10.181.66.217",
+          "username": "su",
+          "password": "cws",
+          "protocol": "https",
+          "url": "/yang-api/datastore/"
+        },
+        "basic": {
+          "driver": "ciena-waveserver-rest"
+        }
+      }
+    }
+}'
+```
+
+
+
+#### Verify Connected Device
+
+When the Waveserver is configured and connected is should be visible in ONOS through the `devices` command.
+
+```bash 
+onos> devices 
+id=rest:10.181.66.217:443, available=true, local-status=connected 32s ago, role=MASTER, type=SWITCH, mfr=unknown, hw=unknown, sw=unknown, serial=unknown, driver=ciena-waveserver-rest, ipaddress=10.181.66.217, locType=geo, name=rest:10.181.66.217:443, protocol=REST
+```
diff --git a/drivers/ciena/features.xml b/drivers/ciena/waveserver/features.xml
similarity index 100%
rename from drivers/ciena/features.xml
rename to drivers/ciena/waveserver/features.xml
diff --git a/drivers/ciena/pom.xml b/drivers/ciena/waveserver/pom.xml
similarity index 88%
rename from drivers/ciena/pom.xml
rename to drivers/ciena/waveserver/pom.xml
index 53c195b..ee214e6 100644
--- a/drivers/ciena/pom.xml
+++ b/drivers/ciena/waveserver/pom.xml
@@ -25,15 +25,15 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>onos-drivers-ciena</artifactId>
+    <artifactId>onos-drivers-ciena-waveserver-rest</artifactId>
     <packaging>bundle</packaging>
 
-    <description>Ciena device drivers</description>
+    <description>Ciena Waveserver device drivers</description>
 
     <properties>
-        <onos.app.name>org.onosproject.drivers.ciena</onos.app.name>
+        <onos.app.name>org.onosproject.drivers.ciena.waveserver.rest</onos.app.name>
         <onos.app.origin>ONOS Community</onos.app.origin>
-        <onos.app.title>Ciena Device Drivers</onos.app.title>
+        <onos.app.title>Ciena Waveserver Device Drivers</onos.app.title>
         <onos.app.category>Drivers</onos.app.category>
         <onos.app.url>http://onosproject.org</onos.app.url>
         <onos.app.requires>
diff --git a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaDriversLoader.java b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaDriversLoader.java
similarity index 94%
rename from drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaDriversLoader.java
rename to drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaDriversLoader.java
index 2fd72c5..11e3fc5 100644
--- a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaDriversLoader.java
+++ b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaDriversLoader.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.drivers.ciena;
+package org.onosproject.drivers.ciena.waveserver.rest;
 
 import org.apache.felix.scr.annotations.Component;
 import org.onosproject.net.driver.AbstractDriverLoader;
diff --git a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaFlowRuleProgrammable.java b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaFlowRuleProgrammable.java
similarity index 98%
rename from drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaFlowRuleProgrammable.java
rename to drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaFlowRuleProgrammable.java
index 5e05232..6dc0400 100644
--- a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaFlowRuleProgrammable.java
+++ b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaFlowRuleProgrammable.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.drivers.ciena;
+package org.onosproject.drivers.ciena.waveserver.rest;
 
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.OchSignal;
diff --git a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaRestDevice.java b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaRestDevice.java
similarity index 99%
rename from drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaRestDevice.java
rename to drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaRestDevice.java
index 96f557f..ea02de3 100644
--- a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaRestDevice.java
+++ b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaRestDevice.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.drivers.ciena;
+package org.onosproject.drivers.ciena.waveserver.rest;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
diff --git a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveServerAlarmConsumer.java b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaWaveServerAlarmConsumer.java
similarity index 95%
rename from drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveServerAlarmConsumer.java
rename to drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaWaveServerAlarmConsumer.java
index a274622..c1a6767 100644
--- a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveServerAlarmConsumer.java
+++ b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaWaveServerAlarmConsumer.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.drivers.ciena;
+package org.onosproject.drivers.ciena.waveserver.rest;
 
 import org.onosproject.incubator.net.faultmanagement.alarm.Alarm;
 import org.onosproject.incubator.net.faultmanagement.alarm.AlarmConsumer;
diff --git a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveServerLambdaQuery.java b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaWaveServerLambdaQuery.java
similarity index 96%
rename from drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveServerLambdaQuery.java
rename to drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaWaveServerLambdaQuery.java
index 596d152..cb5d452 100644
--- a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveServerLambdaQuery.java
+++ b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaWaveServerLambdaQuery.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.drivers.ciena;
+package org.onosproject.drivers.ciena.waveserver.rest;
 
 import org.onosproject.net.ChannelSpacing;
 import org.onosproject.net.OchSignal;
diff --git a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveserverDeviceDescription.java b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaWaveserverDeviceDescription.java
similarity index 98%
rename from drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveserverDeviceDescription.java
rename to drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaWaveserverDeviceDescription.java
index bd411c1..0cd3b2b 100644
--- a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveserverDeviceDescription.java
+++ b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaWaveserverDeviceDescription.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.drivers.ciena;
+package org.onosproject.drivers.ciena.waveserver.rest;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
diff --git a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveserverPortAdmin.java b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaWaveserverPortAdmin.java
similarity index 97%
rename from drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveserverPortAdmin.java
rename to drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaWaveserverPortAdmin.java
index a943f7a..d3895c1 100644
--- a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveserverPortAdmin.java
+++ b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/CienaWaveserverPortAdmin.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.drivers.ciena;
+package org.onosproject.drivers.ciena.waveserver.rest;
 
 import org.onlab.util.Tools;
 import org.onosproject.net.PortNumber;
diff --git a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/package-info.java b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/package-info.java
similarity index 92%
rename from drivers/ciena/src/main/java/org/onosproject/drivers/ciena/package-info.java
rename to drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/package-info.java
index fbd462f..220063b 100644
--- a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/package-info.java
+++ b/drivers/ciena/waveserver/src/main/java/org/onosproject/drivers/ciena/waveserver/rest/package-info.java
@@ -17,4 +17,4 @@
 /**
  * Package for Ciena device drivers.
  */
-package org.onosproject.drivers.ciena;
\ No newline at end of file
+package org.onosproject.drivers.ciena.waveserver.rest;
\ No newline at end of file
diff --git a/drivers/ciena/src/main/resources/ciena-drivers.xml b/drivers/ciena/waveserver/src/main/resources/ciena-drivers.xml
similarity index 68%
rename from drivers/ciena/src/main/resources/ciena-drivers.xml
rename to drivers/ciena/waveserver/src/main/resources/ciena-drivers.xml
index 378626b..1a779b1 100644
--- a/drivers/ciena/src/main/resources/ciena-drivers.xml
+++ b/drivers/ciena/waveserver/src/main/resources/ciena-drivers.xml
@@ -16,19 +16,19 @@
   -->
 <drivers>
     <!-- Waveserver supports flex grid, although this driver only enables 50 GHz fixed grid. -->
-    <driver name="restCiena" manufacturer="Ciena" hwVersion="1.0.0" swVersion="1.0.0">
+    <driver name="ciena-waveserver-rest" manufacturer="Ciena" hwVersion="1.0.0" swVersion="1.0.0">
         <behaviour api="org.onosproject.net.optical.OpticalDevice"
                    impl="org.onosproject.net.optical.DefaultOpticalDevice"/>
         <behaviour api="org.onosproject.net.device.DeviceDescriptionDiscovery"
-                   impl="org.onosproject.drivers.ciena.CienaWaveserverDeviceDescription"/>
+                   impl="org.onosproject.drivers.ciena.waveserver.rest.CienaWaveserverDeviceDescription"/>
         <behaviour api="org.onosproject.net.behaviour.PortAdmin"
-                   impl="org.onosproject.drivers.ciena.CienaWaveserverPortAdmin"/>
+                   impl="org.onosproject.drivers.ciena.waveserver.rest.CienaWaveserverPortAdmin"/>
         <behaviour api="org.onosproject.net.flow.FlowRuleProgrammable"
-                   impl="org.onosproject.drivers.ciena.CienaFlowRuleProgrammable"/>
+                   impl="org.onosproject.drivers.ciena.waveserver.rest.CienaFlowRuleProgrammable"/>
         <behaviour api="org.onosproject.net.behaviour.LambdaQuery"
-                   impl="org.onosproject.drivers.ciena.CienaWaveServerLambdaQuery"/>
+                   impl="org.onosproject.drivers.ciena.waveserver.rest.CienaWaveServerLambdaQuery"/>
         <behaviour api="org.onosproject.incubator.net.faultmanagement.alarm.AlarmConsumer"
-                   impl="org.onosproject.drivers.ciena.CienaWaveServerAlarmConsumer"/>
+                   impl="org.onosproject.drivers.ciena.waveserver.rest.CienaWaveServerAlarmConsumer"/>
     </driver>
 </drivers>
 
diff --git a/drivers/ciena/src/test/java/org/onosproject/drivers/ciena/CienaDriversLoaderTest.java b/drivers/ciena/waveserver/src/test/java/org/onosproject/drivers/ciena/waveserver/rest/CienaDriversLoaderTest.java
similarity index 93%
rename from drivers/ciena/src/test/java/org/onosproject/drivers/ciena/CienaDriversLoaderTest.java
rename to drivers/ciena/waveserver/src/test/java/org/onosproject/drivers/ciena/waveserver/rest/CienaDriversLoaderTest.java
index 198ff00..3a2786f 100644
--- a/drivers/ciena/src/test/java/org/onosproject/drivers/ciena/CienaDriversLoaderTest.java
+++ b/drivers/ciena/waveserver/src/test/java/org/onosproject/drivers/ciena/waveserver/rest/CienaDriversLoaderTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.drivers.ciena;
+package org.onosproject.drivers.ciena.waveserver.rest;
 
 import org.junit.Before;
 import org.onosproject.net.driver.AbstractDriverLoaderTest;
diff --git a/modules.defs b/modules.defs
index ccbc538..7184beb 100644
--- a/modules.defs
+++ b/modules.defs
@@ -91,7 +91,8 @@
     '//drivers/arista:onos-drivers-arista-oar',
     # TODO ONOS-5554 excluding from the build
     #'//drivers/bti:onos-drivers-bti-oar',
-    '//drivers/ciena:onos-drivers-ciena-oar',
+    '//drivers/ciena/waveserver:onos-drivers-ciena-waveserver-oar',
+    # TODO in-progress '//drivers/ciena/waveserverai:onos-drivers-ciena-waveserverai-oar',
     '//drivers/cisco/netconf:onos-drivers-cisco-netconf-oar',
     '//drivers/cisco/rest:onos-drivers-cisco-rest-oar',
     '//drivers/corsa:onos-drivers-corsa-oar',