[ONOS-4166] Store device capapbilities using network config

Change-Id: Ib085c516bec0ecf9845e009eca090aad9302fbb0
diff --git a/apps/pce/app/pom.xml b/apps/pce/app/pom.xml
index c67c311..0e6f873 100644
--- a/apps/pce/app/pom.xml
+++ b/apps/pce/app/pom.xml
@@ -132,5 +132,10 @@
             <artifactId>onlab-misc</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-app-pcep-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
 </project>
diff --git a/apps/pcep-api/src/main/java/org/onosproject/pcep/api/DeviceCapability.java b/apps/pcep-api/src/main/java/org/onosproject/pcep/api/DeviceCapability.java
new file mode 100644
index 0000000..59f5eae
--- /dev/null
+++ b/apps/pcep-api/src/main/java/org/onosproject/pcep/api/DeviceCapability.java
@@ -0,0 +1,100 @@
+/*
+ * 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.pcep.api;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.config.Config;
+
+/**
+ * Configuration to specify device capabilities.
+ */
+public class DeviceCapability extends Config<DeviceId> {
+    public static final String SRCAP = "srCapabaility";
+    public static final String LABELSTACKCAP = "labelStackCapability";
+    public static final String LOCALLABELCAP = "localLabelCapability";
+
+    @Override
+    public boolean isValid() {
+        return true;
+    }
+
+    /**
+     * Gets the SR capability of the router.
+     *
+     * @return SR capability
+     */
+    public boolean srCap() {
+        String srCap = get(SRCAP, null);
+        return srCap != null ?
+                Boolean.valueOf(srCap) :
+                false;
+    }
+
+    /**
+     * Gets the label stack capability of the router.
+     *
+     * @return label stack capability
+     */
+    public boolean labelStackCap() {
+        String labelStackCap = get(LABELSTACKCAP, null);
+        return labelStackCap != null ?
+                              Boolean.valueOf(labelStackCap) :
+                              false;
+    }
+
+    /**
+     * Gets the local label capability of the router.
+     *
+     * @return local label capability
+     */
+    public boolean localLabelCap() {
+        String localLabelCap = get(LOCALLABELCAP, null);
+        return localLabelCap != null ?
+                                      Boolean.valueOf(localLabelCap) :
+                                      false;
+    }
+
+    /**
+     * Sets the SR capability of the router.
+     *
+     * @param srCap SR capability of the router.
+     * @return the capability configuration of the device.
+     */
+    public DeviceCapability setSrCap(boolean srCap) {
+        return (DeviceCapability) setOrClear(SRCAP, srCap);
+    }
+
+    /**
+     * Sets the label stack capability of the router.
+     *
+     * @param labelStackCap label stack capability of the router.
+     * @return the capability configuration of the device.
+     */
+    public DeviceCapability setLabelStackCap(boolean labelStackCap) {
+        return (DeviceCapability) setOrClear(LABELSTACKCAP, labelStackCap);
+    }
+
+    /**
+     * Sets the local label capability of the router.
+     *
+     * @param localLabelCap local label capability of the router.
+     * @return the capability configuration of the device.
+     */
+    public DeviceCapability setLocalLabelCap(boolean localLabelCap) {
+        return (DeviceCapability) setOrClear(LOCALLABELCAP, localLabelCap);
+    }
+}
+
diff --git a/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepNodeListener.java b/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepNodeListener.java
index a02a744..c014c8e 100644
--- a/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepNodeListener.java
+++ b/protocols/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepNodeListener.java
@@ -25,12 +25,12 @@
      *
      * @param pc PCEP client details
      */
-    void addNode(PcepClient pc);
+    void addDevicePcepConfig(PcepClient pc);
 
     /**
      * Notifies that the node was removed.
      *
      * @param pccId PCEP client ID
      */
-    void deleteNode(PccId pccId);
+    void deleteDevicePcepConfig(PccId pccId);
 }
diff --git a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepChannelHandler.java b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepChannelHandler.java
index bbad497..e8c52cc 100644
--- a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepChannelHandler.java
+++ b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepChannelHandler.java
@@ -261,7 +261,7 @@
                         disconnectDuplicate(h);
                     } else {
                         h.setState(ESTABLISHED);
-                        //Session is established, add a PCEP device
+                        //Session is established, add a network configuration with LSR id and device capabilities.
                         h.addNode();
                     }
                 }
@@ -472,14 +472,14 @@
     }
 
     /**
-     * Adds PCEP device once session is established.
+     * Adds PCEP device configuration with capabilities once session is established.
      */
     private void addNode() {
         pc.addNode(pc);
     }
 
     /**
-     * Deletes PCEP device when session is disconnected.
+     * Deletes PCEP device configuration when session is disconnected.
      */
     private void deleteNode() {
         pc.deleteNode(pc.getPccId());
diff --git a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
index 20c2856..391aa7d 100644
--- a/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
+++ b/protocols/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
@@ -385,14 +385,14 @@
         @Override
         public void addNode(PcepClient pc) {
             for (PcepNodeListener l : pcepNodeListener) {
-                l.addNode(pc);
+                l.addDevicePcepConfig(pc);
             }
         }
 
         @Override
         public void deleteNode(PccId pccId) {
             for (PcepNodeListener l : pcepNodeListener) {
-                l.deleteNode(pccId);
+                l.deleteDevicePcepConfig(pccId);
             }
         }
 
diff --git a/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java b/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java
index 38239ed..eaebc57 100644
--- a/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java
+++ b/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java
@@ -29,6 +29,10 @@
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Link.Type;
+import org.onosproject.net.config.ConfigFactory;
+import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.config.NetworkConfigService;
+import org.onosproject.net.config.basics.SubjectFactories;
 import org.onosproject.net.MastershipRole;
 import org.onosproject.net.OchPort;
 import org.onosproject.net.OduCltPort;
@@ -54,6 +58,7 @@
 import org.onosproject.net.link.LinkService;
 import org.onosproject.net.provider.AbstractProvider;
 import org.onosproject.net.provider.ProviderId;
+import org.onosproject.pcep.api.DeviceCapability;
 import org.onosproject.pcep.api.PcepController;
 import org.onosproject.pcep.api.PcepDpid;
 import org.onosproject.pcep.api.PcepLink;
@@ -122,29 +127,26 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected PcepClientController pcepClientController;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected NetworkConfigRegistry netConfigRegistry;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected NetworkConfigService netConfigService;
+
     private DeviceProviderService deviceProviderService;
     private LinkProviderService linkProviderService;
 
     private HashMap<Long, List<PortDescription>> portMap = new HashMap<>();
     private InternalLinkProvider listener = new InternalLinkProvider();
 
-    /*
-     * For the client supporting SR capability.
-     */
-    public static final String SR_CAPABILITY = "srCapability";
-
-    /*
-     * For the client supporting PCECC capability.
-     */
-    public static final String PCECC_CAPABILITY = "pceccCapability";
-
-    /*
-     * For the client supporting label stack capability.
-     */
-    public static final String LABEL_STACK_CAPABILITY = "labelStackCapability";
-
-    public static final String LSRID = "lsrId";
-    private static final String UNKNOWN = "unknown";
+    private final ConfigFactory<DeviceId, DeviceCapability> configFactory =
+            new ConfigFactory<DeviceId, DeviceCapability>(SubjectFactories.DEVICE_SUBJECT_FACTORY,
+                    DeviceCapability.class, "deviceCapability", true) {
+                @Override
+                public DeviceCapability createConfig() {
+                    return new DeviceCapability();
+                }
+            };
 
     @Activate
     public void activate() {
@@ -153,6 +155,7 @@
         controller.addListener(listener);
         controller.addLinkListener(listener);
         pcepClientController.addNodeListener(listener);
+        netConfigRegistry.registerConfigFactory(configFactory);
     }
 
     @Deactivate
@@ -162,6 +165,7 @@
         controller.removeListener(listener);
         controller.removeLinkListener(listener);
         pcepClientController.removeNodeListener(listener);
+        netConfigRegistry.unregisterConfigFactory(configFactory);
     }
 
     private List<PortDescription> buildPortDescriptions(PcepDpid dpid,
@@ -334,49 +338,27 @@
         }
 
         @Override
-        public void addNode(PcepClient pc) {
-            if (deviceProviderService == null) {
+        public void addDevicePcepConfig(PcepClient pc) {
+            if (netConfigRegistry == null) {
+                log.error("Cannot add PCEP device capability as network config service is not available.");
                 return;
             }
-
-            //Right now device URI for PCEP devices is their LSRID
-            DeviceId deviceId = deviceId(uri(new PcepDpid(pc.getPccId().id().getIp4Address().toInt())));
-            ChassisId cId = new ChassisId();
-
-            Device.Type deviceType = Device.Type.ROUTER;
-
-            DefaultAnnotations.Builder annotationBuilder = DefaultAnnotations.builder();
-            //PCC capabilities (SR, PCECC and PCECC-SR)
-            annotationBuilder.set(SR_CAPABILITY, String.valueOf(pc.capability().srCapability()));
-            annotationBuilder.set(PCECC_CAPABILITY, String.valueOf(pc.capability().pceccCapability()));
-            annotationBuilder.set(LABEL_STACK_CAPABILITY, String.valueOf(pc.capability().labelStackCapability()));
-            //PccId is the lsrId contained in openMsg, if not present it will be the socket address
-            annotationBuilder.set(LSRID, String.valueOf(pc.getPccId().id()));
-
-            DeviceDescription description = new DefaultDeviceDescription(
-                    deviceId.uri(),
-                    deviceType,
-                    UNKNOWN,
-                    UNKNOWN,
-                    UNKNOWN,
-                    UNKNOWN,
-                    cId,
-                    annotationBuilder.build());
-
-            deviceProviderService.deviceConnected(deviceId, description);
+            DeviceId pccDeviceId = DeviceId.deviceId(String.valueOf(pc.getPccId().ipAddress()));
+            DeviceCapability deviceCap = netConfigService.addConfig(pccDeviceId, DeviceCapability.class);
+            deviceCap.setLabelStackCap(pc.capability().labelStackCapability())
+                .setLocalLabelCap(pc.capability().pceccCapability())
+                .setSrCap(pc.capability().srCapability())
+                .apply();
         }
 
         @Override
-        public void deleteNode(PccId pccId) {
-            if (deviceProviderService == null || deviceService == null) {
+        public void deleteDevicePcepConfig(PccId pccId) {
+            if (netConfigRegistry == null) {
+                log.error("Cannot remove PCEP device capability as network config service is not available.");
                 return;
             }
-            //TODO: In device manager, in deviceDisconnected() method, get the device but null check is not validated
-            if (deviceService.getDevice(DeviceId.deviceId(uri(new PcepDpid(pccId.id()
-                    .getIp4Address().toInt())))) == null) {
-                return;
-            }
-            deviceProviderService.deviceDisconnected(deviceId(uri(new PcepDpid(pccId.id().getIp4Address().toInt()))));
+            DeviceId pccDeviceId = DeviceId.deviceId(String.valueOf(pccId.ipAddress()));
+            netConfigService.removeConfig(pccDeviceId, DeviceCapability.class);
         }
     }
 
diff --git a/providers/pcep/topology/src/test/java/org/onosproject/provider/pcep/topology/impl/PcepClientControllerAdapter.java b/providers/pcep/topology/src/test/java/org/onosproject/provider/pcep/topology/impl/PcepClientControllerAdapter.java
index 74660b1..1cf2a32 100644
--- a/providers/pcep/topology/src/test/java/org/onosproject/provider/pcep/topology/impl/PcepClientControllerAdapter.java
+++ b/providers/pcep/topology/src/test/java/org/onosproject/provider/pcep/topology/impl/PcepClientControllerAdapter.java
@@ -271,14 +271,14 @@
         @Override
         public void addNode(PcepClient pc) {
             for (PcepNodeListener l : pcepNodeListener) {
-                l.addNode(pc);
+                l.addDevicePcepConfig(pc);
             }
         }
 
         @Override
         public void deleteNode(PccId pccId) {
             for (PcepNodeListener l : pcepNodeListener) {
-                l.deleteNode(pccId);
+                l.deleteDevicePcepConfig(pccId);
             }
         }
 
diff --git a/providers/pcep/topology/src/test/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProviderTest.java b/providers/pcep/topology/src/test/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProviderTest.java
index 65a4c02..2f8827c 100644
--- a/providers/pcep/topology/src/test/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProviderTest.java
+++ b/providers/pcep/topology/src/test/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProviderTest.java
@@ -12,13 +12,7 @@
  */
 package org.onosproject.provider.pcep.topology.impl;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
 import static org.onosproject.net.Link.State.ACTIVE;
-import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.LABEL_STACK_CAPABILITY;
-import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.LSRID;
-import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.PCECC_CAPABILITY;
-import static org.onosproject.provider.pcep.topology.impl.PcepTopologyProvider.SR_CAPABILITY;
 
 import java.util.Collection;
 import java.util.HashMap;
@@ -39,6 +33,10 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Link;
 import org.onosproject.net.MastershipRole;
+import org.onosproject.net.config.Config;
+import org.onosproject.net.config.ConfigApplyDelegate;
+import org.onosproject.net.config.ConfigFactory;
+import org.onosproject.net.config.NetworkConfigRegistryAdapter;
 import org.onosproject.net.device.DeviceDescription;
 import org.onosproject.net.device.DeviceProvider;
 import org.onosproject.net.device.DeviceProviderRegistry;
@@ -51,11 +49,19 @@
 import org.onosproject.net.link.LinkProviderRegistry;
 import org.onosproject.net.link.LinkProviderService;
 import org.onosproject.net.provider.ProviderId;
+import org.onosproject.pcep.api.DeviceCapability;
 import org.onosproject.pcep.controller.ClientCapability;
 import org.onosproject.pcep.controller.PccId;
 import org.onosproject.pcep.controller.PcepClient;
 import org.onosproject.pcep.controller.PcepNodeListener;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNull.nullValue;
 /**
  * Test for PCEP topology provider.
  */
@@ -68,6 +74,7 @@
     private final PcepControllerAdapter controller = new PcepControllerAdapter();
     private final MockLinkRegistry linkRegistry = new MockLinkRegistry();
     private final MockDeviceService deviceService = new MockDeviceService();
+    private final MockNetConfigRegistryAdapter netConfigRegistry = new MockNetConfigRegistryAdapter();
     private Map<DeviceId, Device> deviceMap = new HashMap<>();
 
     @Before
@@ -77,6 +84,8 @@
         provider.linkProviderRegistry = linkRegistry;
         provider.controller = controller;
         provider.deviceService = deviceService;
+        provider.netConfigRegistry = netConfigRegistry;
+        provider.netConfigService = netConfigRegistry;
         provider.activate();
     }
 
@@ -88,6 +97,8 @@
         provider.linkProviderRegistry = null;
         provider.controller = null;
         provider.deviceService = null;
+        provider.netConfigRegistry = null;
+        provider.netConfigService = null;
     }
 
     /* Class implement device test registry */
@@ -217,24 +228,104 @@
         }
     }
 
+    /* Mock test for device service */
+    private class MockNetConfigRegistryAdapter extends NetworkConfigRegistryAdapter {
+        private ConfigFactory cfgFactory;
+        private Map<DeviceId, DeviceCapability> classConfig = new HashMap<>();
+
+        @Override
+        public void registerConfigFactory(ConfigFactory configFactory) {
+            cfgFactory = configFactory;
+        }
+
+        @Override
+        public void unregisterConfigFactory(ConfigFactory configFactory) {
+            cfgFactory = null;
+        }
+
+        @Override
+        public <S, C extends Config<S>> C addConfig(S subject, Class<C> configClass) {
+            if (configClass == DeviceCapability.class) {
+                DeviceCapability devCap = new DeviceCapability();
+                classConfig.put((DeviceId) subject, devCap);
+
+                JsonNode node = new ObjectNode(new MockJsonNode());
+                ObjectMapper mapper = new ObjectMapper();
+                ConfigApplyDelegate delegate = new InternalApplyDelegate();
+                devCap.init((DeviceId) subject, null, node, mapper, delegate);
+                return (C) devCap;
+            }
+
+            return null;
+        }
+
+        @Override
+        public <S, C extends Config<S>> void removeConfig(S subject, Class<C> configClass) {
+            classConfig.remove(subject);
+        }
+
+        @Override
+        public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) {
+            if (configClass == DeviceCapability.class) {
+                return (C) classConfig.get(subject);
+            }
+            return null;
+        }
+
+        private class MockJsonNode extends JsonNodeFactory {
+        }
+
+        // Auxiliary delegate to receive notifications about changes applied to
+        // the network configuration - by the apps.
+        private class InternalApplyDelegate implements ConfigApplyDelegate {
+            @Override
+            public void onApply(Config config) {
+                //configs.put(config.subject(), config.node());
+            }
+        }
+    }
+
     /**
-     * Adds the PCEP device and removes it.
+     * Adds the PCEP device with SR, label stack and local label capabilities and deletes the device.
      */
     @Test
     public void testPcepTopologyProviderTestAddDevice1() {
         PcepClient pc = clientController.getClient(PccId.pccId(IpAddress.valueOf("1.1.1.1")));
         for (PcepNodeListener l : clientController.pcepNodeListener) {
             pc.setCapability(new ClientCapability(true, true, false, true, true));
-            l.addNode(pc);
-            assertThat(nodeRegistry.connected.size(), is(1));
-            assertThat(deviceMap.keySet().iterator().next(), is(DeviceId.deviceId("l3:1.1.1.1")));
-            assertThat(deviceMap.values().iterator().next().annotations().value(LABEL_STACK_CAPABILITY), is("true"));
-            assertThat(deviceMap.values().iterator().next().annotations().value(LSRID), is("1.1.1.1"));
-            assertThat(deviceMap.values().iterator().next().annotations().value(PCECC_CAPABILITY), is("true"));
-            assertThat(deviceMap.values().iterator().next().annotations().value(SR_CAPABILITY), is("true"));
+            l.addDevicePcepConfig(pc);
 
-            l.deleteNode(pc.getPccId());
-            assertThat(nodeRegistry.connected.size(), is(0));
+            DeviceId pccDeviceId = DeviceId.deviceId(String.valueOf(pc.getPccId().ipAddress()));
+            DeviceCapability deviceCap = netConfigRegistry.getConfig(pccDeviceId, DeviceCapability.class);
+            assertThat(deviceCap.srCap(), is(true));
+            assertThat(deviceCap.labelStackCap(), is(true));
+            assertThat(deviceCap.localLabelCap(), is(true));
+
+            l.deleteDevicePcepConfig(pc.getPccId());
+            deviceCap = netConfigRegistry.getConfig(pccDeviceId, DeviceCapability.class);
+            assertThat(deviceCap, is(nullValue()));
+        }
+    }
+
+    /**
+     * Adds the PCEP device with SR, and local label capabilities and deletes the device.
+     */
+    @Test
+    public void testPcepTopologyProviderTestAddDevice2() {
+        PcepClient pc = clientController.getClient(PccId.pccId(IpAddress.valueOf("1.1.1.1")));
+        for (PcepNodeListener l : clientController.pcepNodeListener) {
+            pc.setCapability(new ClientCapability(true, true, false, false, true));
+            l.addDevicePcepConfig(pc);
+
+            DeviceId pccDeviceId = DeviceId.deviceId(String.valueOf(pc.getPccId().ipAddress()));
+            DeviceCapability deviceCap = netConfigRegistry.getConfig(pccDeviceId, DeviceCapability.class);
+            assertThat(deviceCap.srCap(), is(true));
+            assertThat(deviceCap.labelStackCap(), is(false));
+            assertThat(deviceCap.localLabelCap(), is(true));
+
+            l.deleteDevicePcepConfig(pc.getPccId());
+            deviceCap = netConfigRegistry.getConfig(pccDeviceId, DeviceCapability.class);
+            assertThat(deviceCap, is(nullValue()));
         }
     }
 }
diff --git a/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientControllerAdapter.java b/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientControllerAdapter.java
index dd82aac..b9c751e 100644
--- a/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientControllerAdapter.java
+++ b/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/PcepClientControllerAdapter.java
@@ -275,14 +275,14 @@
         @Override
         public void addNode(PcepClient pc) {
             for (PcepNodeListener l : pcepNodeListener) {
-                l.addNode(pc);
+                l.addDevicePcepConfig(pc);
             }
         }
 
         @Override
         public void deleteNode(PccId pccId) {
             for (PcepNodeListener l : pcepNodeListener) {
-                l.deleteNode(pccId);
+                l.deleteDevicePcepConfig(pccId);
             }
         }