OECFG (onos-oecfg) completely removed

Change-Id: Id44f58c0402cfdb0fedd91d8a3479cc817f2b4a4
diff --git a/apps/oecfg/pom.xml b/apps/oecfg/pom.xml
deleted file mode 100644
index 8f595db..0000000
--- a/apps/oecfg/pom.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright 2014 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.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.onosproject</groupId>
-        <artifactId>onos-apps</artifactId>
-        <version>1.3.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>onos-app-oecfg</artifactId>
-    <packaging>jar</packaging>
-
-    <description>Standalone utility for converting ONOS JSON config to OE-Linc JSON config</description>
-
-    <dependencies>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-annotations</artifactId>
-            <scope>compile</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <configuration>
-                            <transformers>
-                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-                                    <manifestEntries>
-                                        <Main-Class>org.onosproject.oecfg.OELinkConfig</Main-Class>
-                                    </manifestEntries>
-                                </transformer>
-                            </transformers>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/apps/oecfg/src/main/java/org/onosproject/oecfg/OELinkConfig.java b/apps/oecfg/src/main/java/org/onosproject/oecfg/OELinkConfig.java
deleted file mode 100644
index 480640c..0000000
--- a/apps/oecfg/src/main/java/org/onosproject/oecfg/OELinkConfig.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2014 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.oecfg;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Utility program to convert standard ONOS config JSON to format expected
- * by the OE Link switch.
- */
-public final class OELinkConfig {
-
-    private ObjectMapper mapper = new ObjectMapper();
-    private Map<String, String> dpidToName = new HashMap<>();
-
-    public static void main(String[] args) {
-        try {
-            OELinkConfig config = new OELinkConfig();
-            JsonNode json = config.convert(System.in);
-            System.out.println(json.toString());
-        } catch (IOException e) {
-            System.err.println("Unable to convert JSON due to: " + e.getMessage());
-            e.printStackTrace();
-        }
-    }
-
-    private OELinkConfig() {
-    }
-
-    private JsonNode convert(InputStream input) throws IOException {
-        JsonNode json = mapper.readTree(input);
-        ObjectNode result = mapper.createObjectNode();
-        result.set("switchConfig", opticalSwitches(json));
-        result.set("linkConfig", opticalLinks(json));
-        return result;
-    }
-
-    private JsonNode opticalSwitches(JsonNode json) {
-        ArrayNode result = mapper.createArrayNode();
-        for (JsonNode node : json.get("devices")) {
-            String dpid = dpid(node.path("uri"));
-            String name = node.path("name").asText("none");
-            dpidToName.put(dpid, name);
-            if (node.path("type").asText("none").equals("ROADM")) {
-                result.add(opticalSwitch(dpid, name, (ObjectNode) node));
-            }
-        }
-        return result;
-    }
-
-    private ObjectNode opticalSwitch(String dpid, String name, ObjectNode node) {
-        ObjectNode result = mapper.createObjectNode();
-        ObjectNode annot = (ObjectNode) node.path("annotations");
-        result.put("allowed", true).put("type", "Roadm")
-                .put("name", name).put("nodeDpid", dpid)
-                .put("latitude", annot.path("latitude").asDouble(0.0))
-                .put("longitude", annot.path("longitude").asDouble(0.0))
-                .set("params", switchParams(annot));
-        return result;
-    }
-
-    private ObjectNode switchParams(ObjectNode annot) {
-        return mapper.createObjectNode()
-                .put("numRegen", annot.path("optical.regens").asInt(0));
-    }
-
-    private JsonNode opticalLinks(JsonNode json) {
-        ArrayNode result = mapper.createArrayNode();
-        for (JsonNode node : json.get("links")) {
-            if (node.path("type").asText("none").equals("OPTICAL")) {
-                result.add(opticalLink((ObjectNode) node));
-            }
-        }
-        return result;
-    }
-
-    private ObjectNode opticalLink(ObjectNode node) {
-        ObjectNode result = mapper.createObjectNode();
-        ObjectNode annot = (ObjectNode) node.path("annotations");
-        String src = dpid(node.path("src"));
-        String dst = dpid(node.path("dst"));
-        result.put("allowed", true).put("type", linkType(annot))
-                .put("nodeDpid1", src).put("nodeDpid2", dst)
-                .set("params", linkParams(src, dst, node, annot));
-        return result;
-    }
-
-    private String linkType(ObjectNode annot) {
-        return annot.path("optical.type").asText("cross-connect").equals("WDM") ?
-                "wdmLink" : "pktOptLink";
-    }
-
-    private ObjectNode linkParams(String src, String dst,
-                                  ObjectNode node, ObjectNode annot) {
-        ObjectNode result = mapper.createObjectNode()
-                .put("nodeName1", dpidToName.get(src))
-                .put("nodeName2", dpidToName.get(dst))
-                .put("port1", port(node.path("src")))
-                .put("port2", port(node.path("dst")));
-        if (annot.has("bandwidth")) {
-            result.put("bandwidth", annot.path("bandwidth").asInt());
-        }
-        if (annot.has("optical.waves")) {
-            result.put("numWaves", annot.path("optical.waves").asInt());
-        }
-        return result;
-    }
-
-    private String dpid(JsonNode node) {
-        String s = node.asText("of:0000000000000000").substring(3);
-        return s.substring(0, 2) + ":" + s.substring(2, 4) + ":" +
-                s.substring(4, 6) + ":" + s.substring(6, 8) + ":" +
-                s.substring(8, 10) + ":" + s.substring(10, 12) + ":" +
-                s.substring(12, 14) + ":" + s.substring(14, 16);
-    }
-
-    private int port(JsonNode node) {
-        return Integer.parseInt(node.asText("of:0000000000000000/0").substring(20));
-    }
-
-}
diff --git a/apps/pom.xml b/apps/pom.xml
index e30973e..e08f306 100644
--- a/apps/pom.xml
+++ b/apps/pom.xml
@@ -41,7 +41,6 @@
         <module>sdnip</module>
         <module>optical</module>
         <module>metrics</module>
-        <module>oecfg</module>
         <module>routing</module>
         <module>routing-api</module>
         <module>reactive-routing</module>
diff --git a/tools/test/topos/opticalUtils.py b/tools/test/topos/opticalUtils.py
index 5b47d53..ddbe19a 100644
--- a/tools/test/topos/opticalUtils.py
+++ b/tools/test/topos/opticalUtils.py
@@ -366,11 +366,17 @@
         with open('Topology.json', 'w') as outfile:
             json.dump(opticalJSON, outfile, indent=4, separators=(',', ': '))
 
-        info('*** Converting Topology.json to linc-oe format (TopoConfig.json) file\n')
-        output = quietRun('%s/tools/test/bin/onos-oecfg ./Topology.json > TopoConfig.json' % LINCSwitch.onosDir, shell=True)
-        if output:
-            error('***ERROR: Error creating topology file: %s ' % output + '\n')
-            return False
+        info('*** Converting Topology.json to linc-oe format (TopoConfig.json) file (no oecfg) \n')
+        
+        topoConfigJson = {};
+        dpIdToName = {};
+
+        topoConfigJson["switchConfig"] = getSwitchConfig(dpIdToName);
+        topoConfigJson["linkConfig"] = getLinkConfig(dpIdToName);
+
+        #Writing to TopoConfig.json
+        with open( 'TopoConfig.json', 'w' ) as outfile:
+            json.dump( topoConfigJson, outfile, indent=4, separators=(',', ': ') )
 
         info('*** Creating sys.config...\n')
         output = quietRun('%s/config_generator TopoConfig.json %s/sys.config.template %s %s'
@@ -452,6 +458,87 @@
             if output.strip('{}'):
                 warn('***WARNING: Could not push topology file to ONOS: %s\n' % output)
 
+    #converts node ids to linc-oe format, with colons every two chars
+    def dpId(id):
+        nodeDpid = ""
+        id = id.split("/", 1)[0]
+        for i in range(3, len(id) - 1, 2):
+            nodeDpid += (id[i:(i + 2):]) + ":"
+        return nodeDpid[0:(len(nodeDpid) - 1)];
+
+    def getSwitchConfig (dpIdToName):
+        switchConfig = [];
+        #Iterate through all switches and convert the ROADM switches to linc-oe format
+        for switch in opticalJSON["devices"]:
+            if switch.get("type", "none") == "ROADM":
+                builtSwitch = {}
+
+                #set basic switch params based on annotations
+                builtSwitch["allowed"] = True;
+                builtSwitch["latitude"] = switch["annotations"].get("latitude", 0.0);
+                builtSwitch["longitude"] = switch["annotations"].get("longitude", 0.0);
+
+                #assumed that all switches have this entry
+                nodeId = switch["uri"]
+
+                #convert the nodeId to linc-oe format
+                nodeDpid = dpId(nodeId);
+
+                builtSwitch["name"] = switch.get("name", "none");
+
+                #keep track of the name corresponding to each switch dpid
+                dpIdToName[nodeDpid] = builtSwitch["name"];
+
+                builtSwitch["nodeDpid"] = nodeDpid
+
+                #set switch params and type
+                builtSwitch["params"] = {};
+                builtSwitch["params"]["numregens"] = switch["annotations"].get("optical.regens", 0);
+                builtSwitch["type"] = "Roadm"
+
+                #append to list of switches
+                switchConfig.append(builtSwitch);
+        return switchConfig
+
+
+    def getLinkConfig (dpIdToName):
+        newLinkConfig = [];
+        #Iterate through all optical links and convert them to linc-oe format
+        for link in opticalJSON["links"]:
+            if link.get("type", "none") == "OPTICAL":
+                builtLink = {}
+
+                #set basic link params for src and dst
+                builtLink["allowed"] = True;
+                builtLink["nodeDpid1"] = dpId(link["src"])
+                builtLink["nodeDpid2"] = dpId(link["dst"])
+
+                #set more params such as name/bandwidth/port/waves if they exist
+                params = {}
+                params["nodeName1"] = dpIdToName.get(builtLink["nodeDpid1"], "none")
+                params["nodeName2"] = dpIdToName.get(builtLink["nodeDpid2"], "none")
+                
+                params["port1"] = int(link["src"].split("/")[1])
+                params["port2"]  = int(link["dst"].split("/")[1])
+
+                if "bandwidth" in link["annotations"]:
+                    params["bandwidth"] = link["annotations"]["bandwidth"]
+
+                if "optical.waves" in link["annotations"]:
+                    params["numWaves"] = link["annotations"]["optical.waves"]
+                
+                builtLink["params"] = params
+
+                #set type of link (WDM or pktOpt)
+                if link["annotations"].get("optical.type", "cross-connect") == "WDM":
+                    builtLink["type"] = "wdmLink"
+                else:
+                    builtLink["type"] = "pktOptLink"
+
+                newLinkConfig.append(builtLink);
+        return newLinkConfig
+
+
     @staticmethod
     def waitStarted(net, timeout=TIMEOUT):
         "wait until all tap interfaces are available"
@@ -559,6 +646,8 @@
     def terminate(self):
         pass
 
+
+
 class LINCLink(Link):
     """
     LINC link class