From 4790de94ef06fe1a55658351f4f995119e5e9bf3 Mon Sep 17 00:00:00 2001
From: mharindu <milanharindu.ucsc@gmail.com>
Date: Fri, 21 Aug 2015 16:46:45 +0530
Subject: [PATCH 1/2] Implemented policy compliance checking function for
 Android plugin

---
 .../pom.xml                                   |  7 +++++-
 .../AndroidPolicyMonitoringService.java       | 25 ++++++++++++++++---
 .../pom.xml                                   |  4 +++
 pom.xml                                       |  6 +++++
 4 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/pom.xml
index b72c5b8e09..05201d0159 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/pom.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/pom.xml
@@ -76,7 +76,8 @@
                             org.wso2.carbon.registry.core.service,
                             org.wso2.carbon.registry.core.session,
                             org.wso2.carbon.registry.api,
-                            org.wso2.carbon.device.mgt.extensions.license.mgt.registry
+                            org.wso2.carbon.device.mgt.extensions.license.mgt.registry,
+                            com.google.gson.*
                         </Import-Package>
                         <Export-Package>
                             !org.wso2.carbon.device.mgt.mobile.internal,
@@ -165,5 +166,9 @@
             <artifactId>h2-database-engine</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
     </dependencies>
 </project>
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/src/main/java/org/wso2/carbon/device/mgt/mobile/impl/android/AndroidPolicyMonitoringService.java b/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/src/main/java/org/wso2/carbon/device/mgt/mobile/impl/android/AndroidPolicyMonitoringService.java
index de37861c83..c9dee0daec 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/src/main/java/org/wso2/carbon/device/mgt/mobile/impl/android/AndroidPolicyMonitoringService.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/src/main/java/org/wso2/carbon/device/mgt/mobile/impl/android/AndroidPolicyMonitoringService.java
@@ -19,6 +19,10 @@
 
 package org.wso2.carbon.device.mgt.mobile.impl.android;
 
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParser;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.wso2.carbon.device.mgt.common.Device;
@@ -43,15 +47,28 @@ public class AndroidPolicyMonitoringService implements PolicyMonitoringService {
 	}
 
 	@Override
-	public ComplianceData checkPolicyCompliance(DeviceIdentifier deviceIdentifier, Policy policy, Object o) throws PolicyComplianceException {
-		ComplianceData complianceData = new ComplianceData();
-		if (log.isDebugEnabled()) {
+	public ComplianceData checkPolicyCompliance(DeviceIdentifier deviceIdentifier, Policy policy, Object o)
+            throws PolicyComplianceException {
+        if (log.isDebugEnabled()) {
 			log.debug("Checking policy compliance status of device '" + deviceIdentifier.getId() + "'");
 		}
 		if (o == null || policy == null) {
 			return null;
 		}
-		List<ComplianceFeature> complianceFeatures = (List<ComplianceFeature>) o;
+        ComplianceData complianceData = new ComplianceData();
+        List<ComplianceFeature> complianceFeatures = new ArrayList<ComplianceFeature>();
+
+        // Parsing json string to get compliance features.
+        JsonElement jsonElement = new JsonParser().parse((String) o);
+        JsonArray jsonArray = jsonElement.getAsJsonArray();
+        Gson gson = new Gson();
+        ComplianceFeature complianceFeature;
+
+        for (int i = 0; i < jsonArray.size(); i++) {
+            complianceFeature = gson.fromJson(jsonArray.get(i), ComplianceFeature.class);
+            complianceFeatures.add(complianceFeature);
+        }
+
 		complianceData.setComplianceFeatures(complianceFeatures);
 
 		for (ComplianceFeature cf : complianceFeatures) {
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.mobile.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.mobile.feature/pom.xml
index 92c9564374..6be1ceae20 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.mobile.feature/pom.xml
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.mobile.feature/pom.xml
@@ -58,6 +58,10 @@
             <artifactId>org.wso2.carbon.device.mgt.extensions.feature</artifactId>
             <type>zip</type>
         </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/pom.xml b/pom.xml
index b5a35ee11d..34409e1cdf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -511,6 +511,11 @@
                 <artifactId>axis2</artifactId>
                 <version>${axis2.orbit.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.google.code.gson</groupId>
+                <artifactId>gson</artifactId>
+                <version>${google.gson.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
@@ -577,6 +582,7 @@
         <bouncycastle.version>1.49</bouncycastle.version>
         <apache.wss4j.version>2.0.0</apache.wss4j.version>
         <codehaus.plexus.version>3.0.21</codehaus.plexus.version>
+        <google.gson.version>2.2.4</google.gson.version>
 
     </properties>
 

From eab9aa93d0409775020ea28b9cbb65fb38fa1513 Mon Sep 17 00:00:00 2001
From: mharindu <milanharindu.ucsc@gmail.com>
Date: Fri, 21 Aug 2015 16:57:56 +0530
Subject: [PATCH 2/2] Fixed formating issues

---
 .../AndroidPolicyMonitoringService.java       | 52 +++++++++----------
 1 file changed, 26 insertions(+), 26 deletions(-)

diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/src/main/java/org/wso2/carbon/device/mgt/mobile/impl/android/AndroidPolicyMonitoringService.java b/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/src/main/java/org/wso2/carbon/device/mgt/mobile/impl/android/AndroidPolicyMonitoringService.java
index c9dee0daec..d6e0fceeb5 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/src/main/java/org/wso2/carbon/device/mgt/mobile/impl/android/AndroidPolicyMonitoringService.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.mobile.impl/src/main/java/org/wso2/carbon/device/mgt/mobile/impl/android/AndroidPolicyMonitoringService.java
@@ -39,27 +39,27 @@ import java.util.List;
 
 public class AndroidPolicyMonitoringService implements PolicyMonitoringService {
 
-	private static Log log = LogFactory.getLog(AndroidPolicyMonitoringService.class);
+    private static Log log = LogFactory.getLog(AndroidPolicyMonitoringService.class);
 
-	@Override
-	public void notifyDevices(List<Device> list) throws PolicyComplianceException {
+    @Override
+    public void notifyDevices(List<Device> list) throws PolicyComplianceException {
 
-	}
+    }
 
-	@Override
-	public ComplianceData checkPolicyCompliance(DeviceIdentifier deviceIdentifier, Policy policy, Object o)
-            throws PolicyComplianceException {
+    @Override
+    public ComplianceData checkPolicyCompliance(DeviceIdentifier deviceIdentifier, Policy policy,
+                                                Object compliancePayload) throws PolicyComplianceException {
         if (log.isDebugEnabled()) {
-			log.debug("Checking policy compliance status of device '" + deviceIdentifier.getId() + "'");
-		}
-		if (o == null || policy == null) {
-			return null;
-		}
+            log.debug("Checking policy compliance status of device '" + deviceIdentifier.getId() + "'");
+        }
+        if (compliancePayload == null || policy == null) {
+            return null;
+        }
         ComplianceData complianceData = new ComplianceData();
         List<ComplianceFeature> complianceFeatures = new ArrayList<ComplianceFeature>();
 
         // Parsing json string to get compliance features.
-        JsonElement jsonElement = new JsonParser().parse((String) o);
+        JsonElement jsonElement = new JsonParser().parse((String) compliancePayload);
         JsonArray jsonArray = jsonElement.getAsJsonArray();
         Gson gson = new Gson();
         ComplianceFeature complianceFeature;
@@ -69,19 +69,19 @@ public class AndroidPolicyMonitoringService implements PolicyMonitoringService {
             complianceFeatures.add(complianceFeature);
         }
 
-		complianceData.setComplianceFeatures(complianceFeatures);
+        complianceData.setComplianceFeatures(complianceFeatures);
 
-		for (ComplianceFeature cf : complianceFeatures) {
-			if(!cf.isCompliance()){
-				complianceData.setStatus(false);
-				break;
-			}
-		}
-		return complianceData;
-	}
+        for (ComplianceFeature cf : complianceFeatures) {
+            if (!cf.isCompliance()) {
+                complianceData.setStatus(false);
+                break;
+            }
+        }
+        return complianceData;
+    }
 
-	@Override
-	public String getType() {
-		return DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID;
-	}
+    @Override
+    public String getType() {
+        return DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_ANDROID;
+    }
 }
\ No newline at end of file