Resolve OSGi wiring issue in TL1

Change-Id: Ic749d0739e2faa0fc913dbffa78c38af56142834
diff --git a/drivers/lumentum/BUCK b/drivers/lumentum/BUCK
index 03ae2a9..0402921 100644
--- a/drivers/lumentum/BUCK
+++ b/drivers/lumentum/BUCK
@@ -4,7 +4,6 @@
     '//drivers/utilities:onos-drivers-utilities',
     '//protocols/snmp/api:onos-protocols-snmp-api',
     '//protocols/tl1/api:onos-protocols-tl1-api',
-    '//protocols/tl1/ctl:onos-protocols-tl1-ctl',
     '//incubator/api:onos-incubator-api',
     '//apps/optical-model:onos-apps-optical-model',
     '//drivers/optical:onos-drivers-optical',
diff --git a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumWaveReadyDiscovery.java b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumWaveReadyDiscovery.java
index cf9ad21..3c02c37 100644
--- a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumWaveReadyDiscovery.java
+++ b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumWaveReadyDiscovery.java
@@ -31,10 +31,10 @@
 import org.onosproject.net.device.DeviceDescriptionDiscovery;
 import org.onosproject.net.device.PortDescription;
 import org.onosproject.net.driver.AbstractHandlerBehaviour;
+import org.onosproject.tl1.DefaultTl1Command;
 import org.onosproject.tl1.Tl1Command;
 import org.onosproject.tl1.Tl1Controller;
 import org.onosproject.tl1.Tl1Device;
-import org.onosproject.tl1.impl.DefaultTl1Command;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/protocols/tl1/ctl/src/main/java/org/onosproject/tl1/impl/DefaultTl1Command.java b/protocols/tl1/api/src/main/java/org/onosproject/tl1/DefaultTl1Command.java
similarity index 97%
rename from protocols/tl1/ctl/src/main/java/org/onosproject/tl1/impl/DefaultTl1Command.java
rename to protocols/tl1/api/src/main/java/org/onosproject/tl1/DefaultTl1Command.java
index ab55427..2213698 100644
--- a/protocols/tl1/ctl/src/main/java/org/onosproject/tl1/impl/DefaultTl1Command.java
+++ b/protocols/tl1/api/src/main/java/org/onosproject/tl1/DefaultTl1Command.java
@@ -13,9 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.tl1.impl;
-
-import org.onosproject.tl1.Tl1Command;
+package org.onosproject.tl1;
 
 import java.util.Optional;
 
diff --git a/protocols/tl1/ctl/src/main/java/org/onosproject/tl1/impl/DefaultTl1Device.java b/protocols/tl1/api/src/main/java/org/onosproject/tl1/DefaultTl1Device.java
similarity index 97%
rename from protocols/tl1/ctl/src/main/java/org/onosproject/tl1/impl/DefaultTl1Device.java
rename to protocols/tl1/api/src/main/java/org/onosproject/tl1/DefaultTl1Device.java
index 602d24c..27ac9c9 100644
--- a/protocols/tl1/ctl/src/main/java/org/onosproject/tl1/impl/DefaultTl1Device.java
+++ b/protocols/tl1/api/src/main/java/org/onosproject/tl1/DefaultTl1Device.java
@@ -13,12 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.tl1.impl;
+package org.onosproject.tl1;
 
 import io.netty.channel.Channel;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.TpPort;
-import org.onosproject.tl1.Tl1Device;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/providers/tl1/BUCK b/providers/tl1/BUCK
index f5ebffb..6168610 100644
--- a/providers/tl1/BUCK
+++ b/providers/tl1/BUCK
@@ -1,7 +1,6 @@
 BUNDLES = [
     '//providers/tl1/device:onos-providers-tl1-device',
     '//protocols/tl1/api:onos-protocols-tl1-api',
-    '//protocols/tl1/ctl:onos-protocols-tl1-ctl',
 ]
 
 onos_app (
diff --git a/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceProvider.java b/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceProvider.java
index 6013aea..506eb9d 100644
--- a/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceProvider.java
+++ b/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceProvider.java
@@ -47,10 +47,11 @@
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.provider.AbstractProvider;
 import org.onosproject.net.provider.ProviderId;
+import org.onosproject.tl1.DefaultTl1Device;
 import org.onosproject.tl1.Tl1Controller;
 import org.onosproject.tl1.Tl1Device;
 import org.onosproject.tl1.Tl1Listener;
-import org.onosproject.tl1.impl.DefaultTl1Device;
+import org.onosproject.tl1.device.Tl1DeviceConfig;
 import org.slf4j.Logger;
 
 import java.io.IOException;
@@ -74,7 +75,11 @@
 @Component(immediate = true)
 public class Tl1DeviceProvider extends AbstractProvider implements DeviceProvider {
     private static final String APP_NAME = "org.onosproject.tl1";
-    protected static final String TL1 = "tl1";
+    /**
+     * @deprecated in 1.11.0. Use {@link Tl1DeviceConfig#TL1} instead
+     */
+    @Deprecated
+    protected static final String TL1 = Tl1DeviceConfig.TL1;
     private static final String PROVIDER = "org.onosproject.provider.tl1.device";
     private static final String UNKNOWN = "unknown";
     private static final int REACHABILITY_TIMEOUT = 2000;      // in milliseconds
@@ -116,7 +121,7 @@
             },
             new ConfigFactory<DeviceId, Tl1DeviceConfig>(SubjectFactories.DEVICE_SUBJECT_FACTORY,
                                                          Tl1DeviceConfig.class,
-                                                         TL1) {
+                                                         Tl1DeviceConfig.TL1) {
                 @Override
                 public Tl1DeviceConfig createConfig() {
                     return new Tl1DeviceConfig();
@@ -150,7 +155,7 @@
     }
 
     public Tl1DeviceProvider() {
-        super(new ProviderId(TL1, PROVIDER));
+        super(new ProviderId(Tl1DeviceConfig.TL1, PROVIDER));
     }
 
     @Override
@@ -237,11 +242,11 @@
         try {
             // Add device to TL1 controller
             DeviceId deviceId = DeviceId.deviceId(
-                    new URI(TL1, device.ip() + ":" + device.port(), null));
+                    new URI(Tl1DeviceConfig.TL1, device.ip() + ":" + device.port(), null));
 
             if (controller.addDevice(deviceId, device)) {
                 SparseAnnotations ann = DefaultAnnotations.builder()
-                        .set(AnnotationKeys.PROTOCOL, TL1.toUpperCase())
+                        .set(AnnotationKeys.PROTOCOL, Tl1DeviceConfig.TL1.toUpperCase())
                         .build();
                 // Register device in the core with default parameters and mark it as unavailable
                 DeviceDescription dd = new DefaultDeviceDescription(deviceId.uri(),
diff --git a/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1ProviderConfig.java b/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1ProviderConfig.java
index 4f883cd..d083cb9 100644
--- a/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1ProviderConfig.java
+++ b/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1ProviderConfig.java
@@ -21,7 +21,7 @@
 import org.onosproject.core.ApplicationId;
 import org.onosproject.incubator.net.config.basics.ConfigException;
 import org.onosproject.net.config.Config;
-import org.onosproject.tl1.impl.DefaultTl1Device;
+import org.onosproject.tl1.DefaultTl1Device;
 import org.onosproject.tl1.Tl1Device;
 
 import java.util.Set;
diff --git a/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceConfig.java b/providers/tl1/device/src/main/java/org/onosproject/tl1/device/Tl1DeviceConfig.java
similarity index 92%
rename from providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceConfig.java
rename to providers/tl1/device/src/main/java/org/onosproject/tl1/device/Tl1DeviceConfig.java
index 91c235d..4a7fd7a 100644
--- a/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceConfig.java
+++ b/providers/tl1/device/src/main/java/org/onosproject/tl1/device/Tl1DeviceConfig.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.provider.tl1.device.impl;
+package org.onosproject.tl1.device;
 
 import com.google.common.annotations.Beta;
 import org.apache.commons.lang3.tuple.Pair;
@@ -28,6 +28,11 @@
 @Beta
 public class Tl1DeviceConfig extends Config<DeviceId> {
 
+    /**
+     * TL1 provider scheme and ConfigKey.
+     */
+    public static final String TL1 = "tl1";
+
     private static final String IP = "ip";
     private static final String PORT = "port";
     private static final String USERNAME = "username";
@@ -78,7 +83,7 @@
 
     private Pair<String, Integer> extractIpPort() {
         String info = subject.toString();
-        if (info.startsWith(Tl1DeviceProvider.TL1)) {
+        if (info.startsWith(TL1)) {
             //+1 is due to length of colon separator
             String ip = info.substring(info.indexOf(":") + 1, info.lastIndexOf(":"));
             int port = Integer.parseInt(info.substring(info.lastIndexOf(":") + 1));
diff --git a/providers/tl1/device/src/main/java/org/onosproject/tl1/device/package-info.java b/providers/tl1/device/src/main/java/org/onosproject/tl1/device/package-info.java
new file mode 100644
index 0000000..4e579ba
--- /dev/null
+++ b/providers/tl1/device/src/main/java/org/onosproject/tl1/device/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2017-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.
+ */
+/**
+ * TL1 device configuration.
+ */
+package org.onosproject.tl1.device;