ONOS-1767 SM-ONOS implementation

22a363e ONOS-17767 SM-ONOS impl

Change-Id: Ifca8129f2266bada68af735cf81a1d39f1ec8506
diff --git a/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java b/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
index 1b1c23b..54f0fb8 100644
--- a/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
+++ b/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
@@ -20,6 +20,7 @@
 import com.google.common.io.ByteStreams;
 import com.google.common.io.Files;
 import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.configuration.XMLConfiguration;
 import org.onlab.util.Tools;
 import org.onosproject.app.ApplicationDescription;
@@ -28,9 +29,11 @@
 import org.onosproject.app.ApplicationStoreDelegate;
 import org.onosproject.app.DefaultApplicationDescription;
 import org.onosproject.core.ApplicationRole;
-import org.onosproject.core.Permission;
 import org.onosproject.core.Version;
+import org.onosproject.security.AppPermission;
+import org.onosproject.security.Permission;
 import org.onosproject.store.AbstractStore;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -79,7 +82,9 @@
     private static final String DESCRIPTION = "description";
 
     private static final String ROLE = "security.role";
-    private static final String PERMISSIONS = "security.permissions.permission";
+    private static final String APP_PERMISSIONS = "security.permissions.app-perm";
+    private static final String NET_PERMISSIONS = "security.permissions.net-perm";
+    private static final String JAVA_PERMISSIONS = "security.permissions.java-perm";
 
     private static final String OAR = ".oar";
     private static final String APP_XML = "app.xml";
@@ -386,13 +391,25 @@
     // Returns the set of Permissions specified in the app.xml file
     private ImmutableSet<Permission> getPermissions(XMLConfiguration cfg) {
         List<Permission> permissionList = new ArrayList();
-        for (Object o : cfg.getList(PERMISSIONS)) {
+
+        for (Object o : cfg.getList(APP_PERMISSIONS)) {
             String name = (String) o;
-            try {
-                Permission perm = Permission.valueOf(name);
-                permissionList.add(perm);
-            } catch (IllegalArgumentException e) {
-                log.debug("Unknown permission specified: %s", name);
+            permissionList.add(new Permission(AppPermission.class.getName(), name));
+        }
+        for (Object o : cfg.getList(NET_PERMISSIONS)) {
+            //TODO: TO BE FLESHED OUT WHEN NETWORK PERMISSIONS ARE SUPPORTED
+            break;
+        }
+
+        List<HierarchicalConfiguration> fields =
+                cfg.configurationsAt(JAVA_PERMISSIONS);
+        for (HierarchicalConfiguration sub : fields) {
+            String classname = sub.getString("classname");
+            String name = sub.getString("name");
+            String actions = sub.getString("actions");
+
+            if (classname != null && name != null) {
+                permissionList.add(new Permission(classname, name, actions));
             }
         }
         return ImmutableSet.copyOf(permissionList);