diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/EnrolmentInfo.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/EnrolmentInfo.java
index 0a3f32ba62..d6c399d130 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/EnrolmentInfo.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/EnrolmentInfo.java
@@ -32,6 +32,7 @@ public class EnrolmentInfo implements Serializable{
BYOD, COPE
}
+ private int id;
private Device device;
private Long dateOfEnrolment;
private Long dateOfLastUpdate;
@@ -48,6 +49,14 @@ public class EnrolmentInfo implements Serializable{
this.status = status;
}
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
public Long getDateOfEnrolment() {
return dateOfEnrolment;
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/permission/PermissionManager.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/permission/PermissionManager.java
index 2681ebc8e0..0e370b3825 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/permission/PermissionManager.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/permission/PermissionManager.java
@@ -66,8 +66,11 @@ public class PermissionManager {
/* Un-marshaling Device Management configuration */
JAXBContext cdmContext = JAXBContext.newInstance(PermissionConfiguration.class);
Unmarshaller unmarshaller = cdmContext.createUnmarshaller();
- PermissionConfiguration permissionConfiguration = (PermissionConfiguration) unmarshaller.unmarshal(permissionStream);
- this.addPermissions(permissionConfiguration.getPermissions());
+ PermissionConfiguration permissionConfiguration = (PermissionConfiguration)
+ unmarshaller.unmarshal(permissionStream);
+ if((permissionConfiguration != null) && (permissionConfiguration.getPermissions() != null)){
+ this.addPermissions(permissionConfiguration.getPermissions());
+ }
}
} catch (JAXBException e) {
throw new DeviceManagementException("Error occurred while initializing Data Source config", e);
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/policy/PolicyConfiguration.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/policy/PolicyConfiguration.java
index fe38dbbd95..deb10035bc 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/policy/PolicyConfiguration.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/policy/PolicyConfiguration.java
@@ -24,34 +24,64 @@ import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "PolicyConfiguration")
public class PolicyConfiguration {
- private String monitoringClass;
- private int maxRetries;
- private int minRetriesToMarkUnreachable;
-
- @XmlElement(name = "monitoringClass", required = true)
- public String getMonitoringClass() {
- return monitoringClass;
- }
-
- public void setMonitoringClass(String monitoringClass) {
- this.monitoringClass = monitoringClass;
- }
-
- @XmlElement(name = "maxRetries", required = true)
- public int getMaxRetries() {
- return maxRetries;
- }
-
- public void setMaxRetries(int maxRetries) {
- this.maxRetries = maxRetries;
- }
-
- @XmlElement(name = "minRetriesToMarkUnreachable", required = true)
- public int getMinRetriesToMarkUnreachable() {
- return minRetriesToMarkUnreachable;
- }
-
- public void setMinRetriesToMarkUnreachable(int minRetriesToMarkUnreachable) {
- this.minRetriesToMarkUnreachable = minRetriesToMarkUnreachable;
- }
+ private String monitoringClass;
+ private boolean monitoringEnable;
+ private int monitoringFrequency;
+ private int maxRetries;
+ private int minRetriesToMarkUnreachable;
+ private int minRetriesToMarkInactive;
+
+ @XmlElement(name = "monitoringClass", required = true)
+ public String getMonitoringClass() {
+ return monitoringClass;
+ }
+
+ public void setMonitoringClass(String monitoringClass) {
+ this.monitoringClass = monitoringClass;
+ }
+
+ @XmlElement(name = "maxRetries", required = true)
+ public int getMaxRetries() {
+ return maxRetries;
+ }
+
+ public void setMaxRetries(int maxRetries) {
+ this.maxRetries = maxRetries;
+ }
+
+ @XmlElement(name = "minRetriesToMarkUnreachable", required = true)
+ public int getMinRetriesToMarkUnreachable() {
+ return minRetriesToMarkUnreachable;
+ }
+
+ public void setMinRetriesToMarkUnreachable(int minRetriesToMarkUnreachable) {
+ this.minRetriesToMarkUnreachable = minRetriesToMarkUnreachable;
+ }
+
+ @XmlElement(name = "monitoringEnable", required = true)
+ public boolean getMonitoringEnable() {
+ return monitoringEnable;
+ }
+
+ public void setMonitoringEnable(boolean monitoringEnable) {
+ this.monitoringEnable = monitoringEnable;
+ }
+
+ @XmlElement(name = "minRetriesToMarkInactive", required = true)
+ public int getMinRetriesToMarkInactive() {
+ return minRetriesToMarkInactive;
+ }
+
+ public void setMinRetriesToMarkInactive(int minRetriesToMarkInactive) {
+ this.minRetriesToMarkInactive = minRetriesToMarkInactive;
+ }
+
+ @XmlElement(name = "monitoringFrequency", required = true)
+ public int getMonitoringFrequency() {
+ return monitoringFrequency;
+ }
+
+ public void setMonitoringFrequency(int monitoringFrequency) {
+ this.monitoringFrequency = monitoringFrequency;
+ }
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/DeviceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/DeviceDAOImpl.java
index 69c297d7f5..746b7d4bdb 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/DeviceDAOImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/DeviceDAOImpl.java
@@ -113,7 +113,7 @@ public class DeviceDAOImpl implements DeviceDAO {
conn = this.getConnection();
String sql =
"SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, d1.DEVICE_IDENTIFICATION, " +
- "e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, e.DATE_OF_ENROLMENT " +
+ "e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID " +
"FROM DM_ENROLMENT e, (SELECT d.ID, d.DESCRIPTION, d.NAME, " +
"t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION FROM DM_DEVICE d, DM_DEVICE_TYPE t WHERE " +
"t.NAME = ? AND d.DEVICE_IDENTIFICATION = ? AND d.TENANT_ID = ?) d1 WHERE d1.ID = e.DEVICE_ID " +
@@ -210,7 +210,7 @@ public class DeviceDAOImpl implements DeviceDAO {
String sql =
"SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " +
"d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " +
- "e.DATE_OF_ENROLMENT FROM DM_ENROLMENT e, (SELECT t.NAME AS DEVICE_TYPE, d.ID, d.DESCRIPTION, " +
+ "e.DATE_OF_ENROLMENT , e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT t.NAME AS DEVICE_TYPE, d.ID, d.DESCRIPTION, " +
"d.NAME, d.DEVICE_IDENTIFICATION FROM DM_DEVICE d, DM_DEVICE_TYPE t " +
"WHERE d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?) d1 " +
"WHERE DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? AND e.OWNER = ?";
@@ -475,6 +475,7 @@ public class DeviceDAOImpl implements DeviceDAO {
private EnrolmentInfo loadEnrolment(ResultSet rs) throws SQLException {
EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
+ enrolmentInfo.setId(rs.getInt("ENROLMENT_ID"));
enrolmentInfo.setOwner(rs.getString("OWNER"));
enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.valueOf(rs.getString("OWNERSHIP")));
enrolmentInfo.setDateOfEnrolment(rs.getTimestamp("DATE_OF_ENROLMENT").getTime());
@@ -493,7 +494,7 @@ public class DeviceDAOImpl implements DeviceDAO {
String sql =
"SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME AS DEVICE_NAME, t.NAME AS DEVICE_TYPE, " +
"d.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " +
- "e.DATE_OF_ENROLMENT FROM (SELECT e.ID, e.DEVICE_ID, e.OWNER, e.OWNERSHIP, e.STATUS, " +
+ "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM (SELECT e.ID, e.DEVICE_ID, e.OWNER, e.OWNERSHIP, e.STATUS, " +
"e.DATE_OF_ENROLMENT, e.DATE_OF_LAST_UPDATE FROM DM_ENROLMENT e WHERE TENANT_ID = ? " +
"AND STATUS = ?) e, DM_DEVICE d, DM_DEVICE_TYPE t WHERE DEVICE_ID = e.DEVICE_ID " +
"AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?";
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml
index 953650fd8e..a2333b475d 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml
@@ -55,8 +55,6 @@
Policy Management Core Bundle
org.wso2.carbon.policy.mgt.core.internal
- org.apache.axis2.*;
- version="${axis2.osgi.version.range}",
org.osgi.framework,
org.osgi.service.component,
org.apache.commons.logging,
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/cache/PolicyCacheManager.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/cache/PolicyCacheManager.java
index 573df93e38..63b3a666c7 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/cache/PolicyCacheManager.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/cache/PolicyCacheManager.java
@@ -19,7 +19,8 @@
package org.wso2.carbon.policy.mgt.core.cache;
-import org.wso2.carbon.device.mgt.core.policy.mgt.policy.Policy;
+import org.wso2.carbon.policy.mgt.common.Policy;
+import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
import java.util.List;
@@ -29,7 +30,9 @@ public interface PolicyCacheManager {
void updateAllPolicies(List policies);
- List getAllPolicies();
+ List getAllPolicies() throws PolicyManagementException;
+
+ void rePopulateCache() throws PolicyManagementException;
void removeAllPolicies();
@@ -37,9 +40,11 @@ public interface PolicyCacheManager {
void updatePolicy(Policy policy);
+ void updatePolicy(int policyId) throws PolicyManagementException;
+
void removePolicy(int policyId);
- Policy getPolicy(int policyId);
+ Policy getPolicy(int policyId) throws PolicyManagementException;
void addPolicyToDevice(int deviceId, int policyId);
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/cache/impl/PolicyCacheManagerImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/cache/impl/PolicyCacheManagerImpl.java
index d7c8046755..677b30920d 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/cache/impl/PolicyCacheManagerImpl.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/cache/impl/PolicyCacheManagerImpl.java
@@ -19,51 +19,145 @@
package org.wso2.carbon.policy.mgt.core.cache.impl;
-import org.wso2.carbon.device.mgt.core.policy.mgt.policy.Policy;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.policy.mgt.common.Policy;
+import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
import org.wso2.carbon.policy.mgt.core.cache.PolicyCacheManager;
+import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager;
+import org.wso2.carbon.policy.mgt.core.mgt.impl.PolicyManagerImpl;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Set;
public class PolicyCacheManagerImpl implements PolicyCacheManager {
+ private static final Log log = LogFactory.getLog(PolicyCacheManagerImpl.class);
+
+ private static HashMap> tenantedPolicyMap = new HashMap<>();
+
+ private static PolicyCacheManagerImpl policyCacheManager;
+
+ private PolicyCacheManagerImpl() {
+ }
+
+ public static PolicyCacheManager getInstance() {
+ if (policyCacheManager == null) {
+ synchronized (PolicyCacheManagerImpl.class) {
+ if (policyCacheManager == null) {
+ policyCacheManager = new PolicyCacheManagerImpl();
+ }
+ }
+ }
+ return policyCacheManager;
+ }
+
@Override
public void addAllPolicies(List policies) {
+ HashMap map = this.getTenantRelatedMap();
+ if (map.isEmpty()) {
+ for (Policy policy : policies) {
+ map.put(policy.getId(), policy);
+ }
+ }
}
@Override
public void updateAllPolicies(List policies) {
+ HashMap map = this.getTenantRelatedMap();
+ map.clear();
+ if (map.isEmpty()) {
+ for (Policy policy : policies) {
+ map.put(policy.getId(), policy);
+ }
+ }
+ }
+ @Override
+ public List getAllPolicies() throws PolicyManagementException {
+ HashMap map = this.getTenantRelatedMap();
+ if (map.isEmpty()) {
+ PolicyManager policyManager = new PolicyManagerImpl();
+ this.addAllPolicies(policyManager.getPolicies());
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("No of policies stored in the cache .. : " + map.size());
+
+ Set keySet = map.keySet();
+ for (Integer x : keySet) {
+ log.debug("Policy id in maps .. : " + map.get(x).getId() + " policy name : " + map.get(x).
+ getPolicyName() + " Activated : " + map.get(x).isActive());
+ }
+ }
+ return new ArrayList<>(map.values());
}
@Override
- public List getAllPolicies() {
- return null;
+ public void rePopulateCache() throws PolicyManagementException {
+
+ this.removeAllPolicies();
+ this.getAllPolicies();
}
@Override
public void removeAllPolicies() {
-
+ HashMap map = this.getTenantRelatedMap();
+ map.clear();
}
@Override
public void addPolicy(Policy policy) {
-
+ HashMap map = this.getTenantRelatedMap();
+ if (!map.containsKey(policy.getId())) {
+ map.put(policy.getId(), policy);
+ } else {
+ log.warn("Policy id (" + policy.getId() + ") already exist in the map. hence not attempted to store.");
+ }
}
@Override
public void updatePolicy(Policy policy) {
+ HashMap map = this.getTenantRelatedMap();
+ if (map.containsKey(policy.getId())) {
+ map.remove(policy.getId());
+ map.put(policy.getId(), policy);
+ }
+ }
+ @Override
+ public void updatePolicy(int policyId) throws PolicyManagementException {
+ HashMap map = this.getTenantRelatedMap();
+ if (map.containsKey(policyId)) {
+ this.removePolicy(policyId);
+ }
+ PolicyManager policyManager = new PolicyManagerImpl();
+ Policy policy = policyManager.getPolicy(policyId);
+ map.put(policyId, policy);
}
@Override
public void removePolicy(int policyId) {
-
+ HashMap map = this.getTenantRelatedMap();
+ if (map.containsKey(policyId)) {
+ map.remove(policyId);
+ } else {
+ log.warn("Policy id (" + policyId + ") does not exist in the cache. Hence not removed.");
+ }
}
@Override
- public Policy getPolicy(int policyId) {
- return null;
+ public Policy getPolicy(int policyId) throws PolicyManagementException {
+ HashMap map = this.getTenantRelatedMap();
+ if (!map.containsKey(policyId)) {
+ this.removeAllPolicies();
+ this.getAllPolicies();
+ }
+ return map.get(policyId);
+
}
@Override
@@ -80,4 +174,14 @@ public class PolicyCacheManagerImpl implements PolicyCacheManager {
public int getPolicyIdOfDevice(int deviceId) {
return 0;
}
+
+ private HashMap getTenantRelatedMap(){
+
+ int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
+ if(!tenantedPolicyMap.containsKey(tenantId)){
+ HashMap policyMap = new HashMap<>();
+ tenantedPolicyMap.put(tenantId, policyMap);
+ }
+ return tenantedPolicyMap.get(tenantId);
+ }
}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyDAO.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyDAO.java
index d0c04add50..9f5ba5b255 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyDAO.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/PolicyDAO.java
@@ -106,23 +106,23 @@ public interface PolicyDAO {
List getPolicyAppliedUsers(int policyId) throws PolicyManagerDAOException;
- void addEffectivePolicyToDevice(int deviceId, Policy policy)
+ void addEffectivePolicyToDevice(int deviceId, int enrolmentId, Policy policy)
throws PolicyManagerDAOException;
- void setPolicyApplied(int deviceId) throws PolicyManagerDAOException;
+ void setPolicyApplied(int deviceId, int enrollmentId) throws PolicyManagerDAOException;
- void updateEffectivePolicyToDevice(int deviceId, Policy policy)
+ void updateEffectivePolicyToDevice(int deviceId, int enrolmentId, Policy policy)
throws PolicyManagerDAOException;
- boolean checkPolicyAvailable(int deviceId) throws PolicyManagerDAOException;
+ boolean checkPolicyAvailable(int deviceId, int enrollmentId) throws PolicyManagerDAOException;
int getPolicyCount() throws PolicyManagerDAOException;
- int getAppliedPolicyId(int deviceId) throws PolicyManagerDAOException;
+ int getAppliedPolicyId(int deviceId, int enrollmentId) throws PolicyManagerDAOException;
- Policy getAppliedPolicy(int deviceId) throws PolicyManagerDAOException;
+ Policy getAppliedPolicy(int deviceId, int enrollmentId) throws PolicyManagerDAOException;
HashMap getAppliedPolicyIds(List deviceIds) throws PolicyManagerDAOException;
HashMap getAppliedPolicyIdsDeviceIds() throws PolicyManagerDAOException;
- }
+}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/PolicyDAOImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/PolicyDAOImpl.java
index 8f7d8d5e3b..05406bb0ca 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/PolicyDAOImpl.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/dao/impl/PolicyDAOImpl.java
@@ -119,17 +119,22 @@ public class PolicyDAOImpl implements PolicyDAO {
PreparedStatement stmt = null;
try {
conn = this.getConnection();
- String query = "INSERT INTO DM_DEVICE_POLICY (DEVICE_ID, POLICY_ID) VALUES (?, ?)";
+ String query = "INSERT INTO DM_DEVICE_POLICY (DEVICE_ID, POLICY_ID, ENROLMENT_ID, DEVICE) VALUES (?, ?, " +
+ "?, ?)";
stmt = conn.prepareStatement(query);
for (Device device : devices) {
stmt.setInt(1, device.getId());
stmt.setInt(2, policy.getId());
+ stmt.setInt(3, device.getEnrolmentInfo().getId());
+ stmt.setBytes(4, PolicyManagerUtil.getBytes(device));
stmt.addBatch();
}
stmt.executeBatch();
} catch (SQLException e) {
throw new PolicyManagerDAOException("Error occurred while adding the device ids with policy to " +
"database", e);
+ } catch (IOException e) {
+ throw new PolicyManagerDAOException("Error occurred while getting the byte array from device.", e);
} finally {
PolicyManagementDAOUtil.cleanupResources(stmt, null);
}
@@ -881,7 +886,8 @@ public class PolicyDAOImpl implements PolicyDAO {
@Override
- public void addEffectivePolicyToDevice(int deviceId, Policy policy) throws PolicyManagerDAOException {
+ public void addEffectivePolicyToDevice(int deviceId, int enrolmentId, Policy policy) throws
+ PolicyManagerDAOException {
Connection conn;
PreparedStatement stmt = null;
Timestamp currentTimestamp = new Timestamp(Calendar.getInstance().getTime().getTime());
@@ -889,7 +895,7 @@ public class PolicyDAOImpl implements PolicyDAO {
try {
conn = this.getConnection();
String query = "INSERT INTO DM_DEVICE_POLICY_APPLIED (DEVICE_ID, POLICY_ID, POLICY_CONTENT, " +
- "CREATED_TIME, UPDATED_TIME, TENANT_ID) VALUES (?, ?, ?, ?, ?, ?)";
+ "CREATED_TIME, UPDATED_TIME, TENANT_ID, ENROLMENT_ID) VALUES (?, ?, ?, ?, ?, ?, ?)";
stmt = conn.prepareStatement(query);
stmt.setInt(1, deviceId);
stmt.setInt(2, policy.getId());
@@ -897,6 +903,7 @@ public class PolicyDAOImpl implements PolicyDAO {
stmt.setTimestamp(4, currentTimestamp);
stmt.setTimestamp(5, currentTimestamp);
stmt.setInt(6, tenantId);
+ stmt.setInt(7, enrolmentId);
stmt.executeUpdate();
} catch (SQLException | IOException e) {
throw new PolicyManagerDAOException("Error occurred while adding the evaluated feature list to device", e);
@@ -907,7 +914,7 @@ public class PolicyDAOImpl implements PolicyDAO {
}
@Override
- public void setPolicyApplied(int deviceId) throws PolicyManagerDAOException {
+ public void setPolicyApplied(int deviceId, int enrollmentId) throws PolicyManagerDAOException {
Connection conn;
PreparedStatement stmt = null;
Timestamp currentTimestamp = new Timestamp(Calendar.getInstance().getTime().getTime());
@@ -915,12 +922,13 @@ public class PolicyDAOImpl implements PolicyDAO {
try {
conn = this.getConnection();
String query = "UPDATE DM_DEVICE_POLICY_APPLIED SET APPLIED_TIME = ?, APPLIED = ? WHERE DEVICE_ID = ? AND" +
- " TENANT_ID = ?";
+ " TENANT_ID = ? AND ENROLMENT_ID = ?";
stmt = conn.prepareStatement(query);
stmt.setTimestamp(1, currentTimestamp);
stmt.setBoolean(2, true);
stmt.setInt(3, deviceId);
stmt.setInt(4, tenantId);
+ stmt.setInt(5, enrollmentId);
stmt.executeUpdate();
} catch (SQLException e) {
throw new PolicyManagerDAOException("Error occurred while updating applied policy to device (" +
@@ -932,7 +940,8 @@ public class PolicyDAOImpl implements PolicyDAO {
@Override
- public void updateEffectivePolicyToDevice(int deviceId, Policy policy) throws PolicyManagerDAOException {
+ public void updateEffectivePolicyToDevice(int deviceId, int enrolmentId, Policy policy) throws
+ PolicyManagerDAOException {
Connection conn;
PreparedStatement stmt = null;
Timestamp currentTimestamp = new Timestamp(Calendar.getInstance().getTime().getTime());
@@ -940,7 +949,7 @@ public class PolicyDAOImpl implements PolicyDAO {
try {
conn = this.getConnection();
String query = "UPDATE DM_DEVICE_POLICY_APPLIED SET POLICY_ID = ?, POLICY_CONTENT = ?, UPDATED_TIME = ?, " +
- "APPLIED = ? WHERE DEVICE_ID = ? AND TENANT_ID = ?";
+ "APPLIED = ? WHERE DEVICE_ID = ? AND TENANT_ID = ? AND ENROLMENT_ID = ?";
stmt = conn.prepareStatement(query);
stmt.setInt(1, policy.getId());
stmt.setBytes(2, PolicyManagerUtil.getBytes(policy));
@@ -948,6 +957,7 @@ public class PolicyDAOImpl implements PolicyDAO {
stmt.setBoolean(4, false);
stmt.setInt(5, deviceId);
stmt.setInt(6, tenantId);
+ stmt.setInt(7, enrolmentId);
stmt.executeUpdate();
} catch (SQLException | IOException e) {
@@ -959,7 +969,7 @@ public class PolicyDAOImpl implements PolicyDAO {
}
@Override
- public boolean checkPolicyAvailable(int deviceId) throws PolicyManagerDAOException {
+ public boolean checkPolicyAvailable(int deviceId, int enrollmentId) throws PolicyManagerDAOException {
Connection conn;
PreparedStatement stmt = null;
ResultSet resultSet = null;
@@ -967,10 +977,12 @@ public class PolicyDAOImpl implements PolicyDAO {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
try {
conn = this.getConnection();
- String query = "SELECT * FROM DM_DEVICE_POLICY_APPLIED WHERE DEVICE_ID = ? AND TENANT_ID = ?";
+ String query = "SELECT * FROM DM_DEVICE_POLICY_APPLIED WHERE DEVICE_ID = ? AND TENANT_ID = ? AND " +
+ "ENROLMENT_ID = ?";
stmt = conn.prepareStatement(query);
stmt.setInt(1, deviceId);
stmt.setInt(2, tenantId);
+ stmt.setInt(3, enrollmentId);
resultSet = stmt.executeQuery();
exist = resultSet.next();
} catch (SQLException e) {
@@ -1282,17 +1294,18 @@ public class PolicyDAOImpl implements PolicyDAO {
}
@Override
- public int getAppliedPolicyId(int deviceId) throws PolicyManagerDAOException {
+ public int getAppliedPolicyId(int deviceId, int enrollmentId) throws PolicyManagerDAOException {
Connection conn;
PreparedStatement stmt = null;
ResultSet resultSet = null;
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
try {
conn = this.getConnection();
- String query = "SELECT * FROM DM_DEVICE_POLICY_APPLIED WHERE DEVICE_ID = ? AND TENANT_ID = ?";
+ String query = "SELECT * FROM DM_DEVICE_POLICY_APPLIED WHERE DEVICE_ID = ? AND TENANT_ID = ? AND ENROLMENT_ID = ?";
stmt = conn.prepareStatement(query);
stmt.setInt(1, deviceId);
stmt.setInt(2, tenantId);
+ stmt.setInt(3, enrollmentId);
resultSet = stmt.executeQuery();
while (resultSet.next()) {
@@ -1307,7 +1320,7 @@ public class PolicyDAOImpl implements PolicyDAO {
}
@Override
- public Policy getAppliedPolicy(int deviceId) throws PolicyManagerDAOException {
+ public Policy getAppliedPolicy(int deviceId, int enrollmentId) throws PolicyManagerDAOException {
Connection conn;
PreparedStatement stmt = null;
ResultSet resultSet = null;
@@ -1315,10 +1328,12 @@ public class PolicyDAOImpl implements PolicyDAO {
Policy policy = null;
try {
conn = this.getConnection();
- String query = "SELECT * FROM DM_DEVICE_POLICY_APPLIED WHERE DEVICE_ID = ? AND TENANT_ID = ?";
+ String query = "SELECT * FROM DM_DEVICE_POLICY_APPLIED WHERE DEVICE_ID = ? AND TENANT_ID = ? AND " +
+ "ENROLMENT_ID = ?";
stmt = conn.prepareStatement(query);
stmt.setInt(1, deviceId);
stmt.setInt(2, tenantId);
+ stmt.setInt(3, enrollmentId);
resultSet = stmt.executeQuery();
while (resultSet.next()) {
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/enforcement/DelegationTask.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/enforcement/DelegationTask.java
index 33ce6bd606..5e6ca873cc 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/enforcement/DelegationTask.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/enforcement/DelegationTask.java
@@ -27,6 +27,7 @@ import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.ntask.core.Task;
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
+import org.wso2.carbon.policy.mgt.core.cache.impl.PolicyCacheManagerImpl;
import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder;
import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager;
import org.wso2.carbon.policy.mgt.core.mgt.impl.PolicyManagerImpl;
@@ -57,6 +58,8 @@ public class DelegationTask implements Task {
PolicyManager policyManager = new PolicyManagerImpl();
List deviceTypes = policyManager.applyChangesMadeToPolicies();
+ PolicyCacheManagerImpl.getInstance().rePopulateCache();
+
if (log.isDebugEnabled()) {
log.debug("Number of device types which policies are changed .......... : " + deviceTypes.size());
}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/impl/PolicyAdministratorPointImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/impl/PolicyAdministratorPointImpl.java
index c6680d1a74..b17fd2bd6e 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/impl/PolicyAdministratorPointImpl.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/impl/PolicyAdministratorPointImpl.java
@@ -27,6 +27,8 @@ import org.wso2.carbon.ntask.core.TaskInfo;
import org.wso2.carbon.ntask.core.TaskManager;
import org.wso2.carbon.ntask.core.service.TaskService;
import org.wso2.carbon.policy.mgt.common.*;
+import org.wso2.carbon.policy.mgt.core.cache.PolicyCacheManager;
+import org.wso2.carbon.policy.mgt.core.cache.impl.PolicyCacheManagerImpl;
import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder;
import org.wso2.carbon.policy.mgt.core.mgt.FeatureManager;
import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager;
@@ -47,12 +49,14 @@ public class PolicyAdministratorPointImpl implements PolicyAdministratorPoint {
private PolicyManager policyManager;
private ProfileManager profileManager;
private FeatureManager featureManager;
+ private PolicyCacheManager cacheManager;
// private PolicyEnforcementDelegator delegator;
public PolicyAdministratorPointImpl() {
this.policyManager = new PolicyManagerImpl();
this.profileManager = new ProfileManagerImpl();
this.featureManager = new FeatureManagerImpl();
+ this.cacheManager = PolicyCacheManagerImpl.getInstance();
// this.delegator = new PolicyEnforcementDelegatorImpl();
}
@@ -64,6 +68,7 @@ public class PolicyAdministratorPointImpl implements PolicyAdministratorPoint {
// } catch (PolicyDelegationException e) {
// throw new PolicyManagementException("Error occurred while delegating policy operation to the devices", e);
// }
+ PolicyCacheManagerImpl.getInstance().addPolicy(resultantPolicy);
return resultantPolicy;
}
@@ -75,32 +80,41 @@ public class PolicyAdministratorPointImpl implements PolicyAdministratorPoint {
// } catch (PolicyDelegationException e) {
// throw new PolicyManagementException("Error occurred while delegating policy operation to the devices", e);
// }
+ PolicyCacheManagerImpl.getInstance().updatePolicy(resultantPolicy);
return resultantPolicy;
}
@Override
public boolean updatePolicyPriorities(List policies) throws PolicyManagementException {
- return policyManager.updatePolicyPriorities(policies);
+ boolean bool = policyManager.updatePolicyPriorities(policies);
+ PolicyCacheManagerImpl.getInstance().rePopulateCache();
+ return bool;
}
@Override
public void activatePolicy(int policyId) throws PolicyManagementException {
policyManager.activatePolicy(policyId);
+ PolicyCacheManagerImpl.getInstance().rePopulateCache();
}
@Override
public void inactivatePolicy(int policyId) throws PolicyManagementException {
policyManager.inactivatePolicy(policyId);
+ PolicyCacheManagerImpl.getInstance().rePopulateCache();
}
@Override
public boolean deletePolicy(Policy policy) throws PolicyManagementException {
- return policyManager.deletePolicy(policy);
+ boolean bool = policyManager.deletePolicy(policy);
+ PolicyCacheManagerImpl.getInstance().rePopulateCache();
+ return bool;
}
@Override
public boolean deletePolicy(int policyId) throws PolicyManagementException {
- return policyManager.deletePolicy(policyId);
+ boolean bool =policyManager.deletePolicy(policyId);
+ PolicyCacheManagerImpl.getInstance().rePopulateCache();
+ return bool;
}
@Override
@@ -127,15 +141,23 @@ public class PolicyAdministratorPointImpl implements PolicyAdministratorPoint {
String taskName = PolicyManagementConstants.DELEGATION_TASK_NAME + "_" + String.valueOf(tenantId);
- TaskInfo taskInfo = new TaskInfo(taskName, PolicyManagementConstants.DELEGATION_TASK_CLAZZ, properties, triggerInfo);
+ if (!taskManager.isTaskScheduled(taskName)) {
- taskManager.registerTask(taskInfo);
- taskManager.rescheduleTask(taskInfo.getName());
+ TaskInfo taskInfo = new TaskInfo(taskName, PolicyManagementConstants.DELEGATION_TASK_CLAZZ,
+ properties, triggerInfo);
+ taskManager.registerTask(taskInfo);
+ taskManager.rescheduleTask(taskInfo.getName());
+ } else {
+ throw new PolicyManagementException("There is a task already running for policy changes. Please try " +
+ "to apply " +
+ "changes after few minutes.");
+ }
} catch (TaskException e) {
- String msg = "Error occurred while creating the policy delegation task for tenant " + PrivilegedCarbonContext.
- getThreadLocalCarbonContext().getTenantId();
+ String msg = "Error occurred while creating the policy delegation task for tenant " +
+ PrivilegedCarbonContext.
+ getThreadLocalCarbonContext().getTenantId();
log.error(msg, e);
throw new PolicyManagementException(msg, e);
}
@@ -180,22 +202,26 @@ public class PolicyAdministratorPointImpl implements PolicyAdministratorPoint {
@Override
public Policy addPolicyToDevice(List deviceIdentifierList, Policy policy) throws
PolicyManagementException {
- return policyManager.addPolicyToDevice(deviceIdentifierList, policy);
+ policy = policyManager.addPolicyToDevice(deviceIdentifierList, policy);
+ PolicyCacheManagerImpl.getInstance().rePopulateCache();
+ return policy;
}
@Override
public Policy addPolicyToRole(List roleNames, Policy policy) throws PolicyManagementException {
- return policyManager.addPolicyToRole(roleNames, policy);
+ policy = policyManager.addPolicyToRole(roleNames, policy);
+ PolicyCacheManagerImpl.getInstance().rePopulateCache();
+ return policy;
}
@Override
public List getPolicies() throws PolicyManagementException {
- return policyManager.getPolicies();
+ return PolicyCacheManagerImpl.getInstance().getAllPolicies();
}
@Override
public Policy getPolicy(int policyId) throws PolicyManagementException {
- return policyManager.getPolicy(policyId);
+ return PolicyCacheManagerImpl.getInstance().getPolicy(policyId);
}
@Override
@@ -306,7 +332,7 @@ public class PolicyAdministratorPointImpl implements PolicyAdministratorPoint {
@Override
public int getPolicyCount() throws PolicyManagementException {
- return policyManager.getPolicyCount();
+ return PolicyCacheManagerImpl.getInstance().getAllPolicies().size();
}
}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/internal/PolicyManagementServiceComponent.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/internal/PolicyManagementServiceComponent.java
index 676595230b..1b6f10c162 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/internal/PolicyManagementServiceComponent.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/internal/PolicyManagementServiceComponent.java
@@ -21,6 +21,8 @@ package org.wso2.carbon.policy.mgt.core.internal;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.osgi.service.component.ComponentContext;
+import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
+import org.wso2.carbon.device.mgt.core.config.policy.PolicyConfiguration;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.ntask.core.service.TaskService;
import org.wso2.carbon.policy.mgt.common.PolicyEvaluationPoint;
@@ -84,8 +86,12 @@ public class PolicyManagementServiceComponent {
componentContext.getBundleContext().registerService(
PolicyManagerService.class.getName(), new PolicyManagerServiceImpl(), null);
- TaskScheduleService taskScheduleService = new TaskScheduleServiceImpl();
- taskScheduleService.startTask(30000);
+ PolicyConfiguration policyConfiguration = DeviceConfigurationManager.getInstance().getDeviceManagementConfig().
+ getDeviceManagementConfigRepository().getPolicyConfiguration();
+ if(policyConfiguration.getMonitoringEnable()) {
+ TaskScheduleService taskScheduleService = new TaskScheduleServiceImpl();
+ taskScheduleService.startTask(policyConfiguration.getMonitoringFrequency());
+ }
} catch (Throwable t) {
log.error("Error occurred while initializing the Policy management core.", t);
@@ -165,7 +171,7 @@ public class PolicyManagementServiceComponent {
protected void setPolicyMonitoringService(PolicyMonitoringService policyMonitoringService) {
if (log.isDebugEnabled()) {
- log.debug("Setting Policy Monitoring Service");
+ log.debug("Setting Policy Monitoring Service for " + policyMonitoringService.getType());
}
// TODO: FIX THE device type by taking from properties
PolicyManagementDataHolder.getInstance().setPolicyMonitoringService(policyMonitoringService.getType(),
@@ -174,7 +180,7 @@ public class PolicyManagementServiceComponent {
protected void unsetPolicyMonitoringService(PolicyMonitoringService policyMonitoringService) {
if (log.isDebugEnabled()) {
- log.debug("Removing the Policy Monitoring Service");
+ log.debug("Removing the Policy Monitoring Service for " + policyMonitoringService.getType());
}
// TODO: FIX THE device type by taking from properties
PolicyManagementDataHolder.getInstance().unsetPolicyMonitoringService(policyMonitoringService.getType());
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/MonitoringManager.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/MonitoringManager.java
index 9da602f261..883d49237d 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/MonitoringManager.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/MonitoringManager.java
@@ -21,6 +21,7 @@ package org.wso2.carbon.policy.mgt.core.mgt;
import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
+import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import org.wso2.carbon.policy.mgt.common.monitor.ComplianceData;
import org.wso2.carbon.policy.mgt.common.monitor.ComplianceFeature;
import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException;
@@ -39,4 +40,6 @@ public interface MonitoringManager {
void addMonitoringOperation(List devices) throws PolicyComplianceException;
+ List getDeviceTypes() throws PolicyComplianceException;
+
}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/MonitoringManagerImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/MonitoringManagerImpl.java
index b0ba65a2a8..6b52b04e7a 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/MonitoringManagerImpl.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/MonitoringManagerImpl.java
@@ -26,8 +26,13 @@ import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
+import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
+import org.wso2.carbon.device.mgt.core.config.DeviceManagementConfigRepository;
+import org.wso2.carbon.device.mgt.core.config.policy.PolicyConfiguration;
import org.wso2.carbon.device.mgt.core.dao.DeviceDAO;
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory;
+import org.wso2.carbon.device.mgt.core.dao.DeviceTypeDAO;
+import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
@@ -54,18 +59,24 @@ import java.util.Map;
public class MonitoringManagerImpl implements MonitoringManager {
private PolicyDAO policyDAO;
- private DeviceDAO deviceDAO;
+// private DeviceDAO deviceDAO;
+ private DeviceTypeDAO deviceTypeDAO;
private MonitoringDAO monitoringDAO;
private ComplianceDecisionPoint complianceDecisionPoint;
+ private PolicyConfiguration policyConfiguration;
private static final Log log = LogFactory.getLog(MonitoringManagerImpl.class);
private static final String OPERATION_MONITOR = "MONITOR";
public MonitoringManagerImpl() {
this.policyDAO = PolicyManagementDAOFactory.getPolicyDAO();
- this.deviceDAO = DeviceManagementDAOFactory.getDeviceDAO();
+// this.deviceDAO = DeviceManagementDAOFactory.getDeviceDAO();
+ this.deviceTypeDAO = DeviceManagementDAOFactory.getDeviceTypeDAO();
this.monitoringDAO = PolicyManagementDAOFactory.getMonitoringDAO();
this.complianceDecisionPoint = new ComplianceDecisionPointImpl();
+ this.policyConfiguration = DeviceConfigurationManager.getInstance().getDeviceManagementConfig().
+ getDeviceManagementConfigRepository().getPolicyConfiguration();
+
}
@Override
@@ -237,11 +248,14 @@ public class MonitoringManagerImpl implements MonitoringManager {
throw new PolicyComplianceException("SQL error occurred while getting monitoring details.", e);
} catch (PolicyManagerDAOException e) {
throw new PolicyComplianceException("SQL error occurred while getting policy details.", e);
+ } finally {
+ PolicyManagementDAOFactory.closeConnection();
}
Map deviceIdsToAddOperation = new HashMap<>();
Map deviceIdsWithExistingOperation = new HashMap<>();
Map inactiveDeviceIds = new HashMap<>();
+ Map deviceToMarkUnreachable = new HashMap<>();
Map firstTimeDeviceIdsWithPolicyIds = new HashMap<>();
Map tempMap = new HashMap<>();
@@ -258,8 +272,12 @@ public class MonitoringManagerImpl implements MonitoringManager {
} else {
deviceIdsWithExistingOperation.put(complianceData.getDeviceId(),
deviceIds.get(complianceData.getDeviceId()));
+ if (complianceData.getAttempts() >= policyConfiguration.getMinRetriesToMarkUnreachable()) {
+ deviceToMarkUnreachable.put(complianceData.getDeviceId(),
+ deviceIds.get(complianceData.getDeviceId()));
+ }
}
- if (complianceData.getAttempts() >= 20) {
+ if (complianceData.getAttempts() >= policyConfiguration.getMinRetriesToMarkInactive()) {
inactiveDeviceIds.put(complianceData.getDeviceId(),
deviceIds.get(complianceData.getDeviceId()));
}
@@ -288,9 +306,6 @@ public class MonitoringManagerImpl implements MonitoringManager {
if (!deviceIdsWithExistingOperation.isEmpty()) {
monitoringDAO.updateAttempts(new ArrayList<>(deviceIdsWithExistingOperation.keySet()), false);
- //TODO: Add attempts. This has to be fixed in the get pending operation tables too. This will be
-// decisionPoint.setDevicesAsUnreachable(this.getDeviceIdentifiersFromDevices(
-// new ArrayList<>(deviceIdsWithExistingOperation.values())));
}
PolicyManagementDAOFactory.commitTransaction();
@@ -312,6 +327,29 @@ public class MonitoringManagerImpl implements MonitoringManager {
}
}
+ // TODO : This should be uncommented, this is to mark the device as unreachable, But given the current implementation
+ // we are not able to do so.
+
+// if(!deviceToMarkUnreachable.isEmpty()) {
+// decisionPoint.setDevicesAsUnreachable(this.getDeviceIdentifiersFromDevices(
+// new ArrayList<>(deviceToMarkUnreachable.values())));
+// }
+
+ }
+
+ @Override
+ public List getDeviceTypes() throws PolicyComplianceException {
+
+ List deviceTypes = new ArrayList<>();
+ try {
+ DeviceManagementDAOFactory.openConnection();
+ deviceTypes = deviceTypeDAO.getDeviceTypes();
+ } catch (Exception e) {
+ log.error("Error occurred while getting the device types.", e);
+ } finally {
+ DeviceManagementDAOFactory.closeConnection();
+ }
+ return deviceTypes;
}
private void addMonitoringOperationsToDatabase(List devices)
@@ -325,8 +363,7 @@ public class MonitoringManagerImpl implements MonitoringManager {
DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl();
service.addOperation(monitoringOperation, deviceIdentifiers);
-// PolicyManagementDataHolder.getInstance().getDeviceManagementService().
-// addOperation(monitoringOperation, deviceIdentifiers);
+
}
private List getDeviceIdentifiersFromDevices(List devices) {
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/PolicyManagerImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/PolicyManagerImpl.java
index 9c879e5493..53c322236f 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/PolicyManagerImpl.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/PolicyManagerImpl.java
@@ -29,6 +29,8 @@ import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
import org.wso2.carbon.policy.mgt.common.*;
+import org.wso2.carbon.policy.mgt.core.cache.PolicyCacheManager;
+import org.wso2.carbon.policy.mgt.core.cache.impl.PolicyCacheManagerImpl;
import org.wso2.carbon.policy.mgt.core.dao.*;
import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager;
import org.wso2.carbon.policy.mgt.core.mgt.ProfileManager;
@@ -44,6 +46,7 @@ public class PolicyManagerImpl implements PolicyManager {
private ProfileDAO profileDAO;
private FeatureDAO featureDAO;
private ProfileManager profileManager;
+ private PolicyCacheManager policyCacheManager;
private static Log log = LogFactory.getLog(PolicyManagerImpl.class);
public PolicyManagerImpl() {
@@ -188,8 +191,20 @@ public class PolicyManagerImpl implements PolicyManager {
public boolean updatePolicyPriorities(List policies) throws PolicyManagementException {
boolean bool;
try {
+// List existingPolicies = this.getPolicies();
+ List existingPolicies = PolicyCacheManagerImpl.getInstance().getAllPolicies();
PolicyManagementDAOFactory.beginTransaction();
bool = policyDAO.updatePolicyPriorities(policies);
+
+ // This logic is added because ui sends only policy id and priority to update priorities.
+
+ for (Policy policy : policies) {
+ for (Policy exPolicy : existingPolicies) {
+ if (policy.getId() == exPolicy.getId()) {
+ policy.setProfile(exPolicy.getProfile());
+ }
+ }
+ }
policyDAO.recordUpdatedPolicies(policies);
PolicyManagementDAOFactory.commitTransaction();
} catch (PolicyManagerDAOException e) {
@@ -542,7 +557,8 @@ public class PolicyManagerImpl implements PolicyManager {
PolicyManagementDAOFactory.closeConnection();
}
- List tempPolicyList = this.getPolicies();
+// List tempPolicyList = this.getPolicies();
+ List tempPolicyList = PolicyCacheManagerImpl.getInstance().getAllPolicies();
for (Policy policy : tempPolicyList) {
for (Integer i : policyIdList) {
@@ -559,22 +575,29 @@ public class PolicyManagerImpl implements PolicyManager {
@Override
public List getPoliciesOfDeviceType(String deviceTypeName) throws PolicyManagementException {
List policies = new ArrayList<>();
- try {
- List profileList = profileManager.getProfilesOfDeviceType(deviceTypeName);
- List allPolicies = this.getPolicies();
-
- for (Profile profile : profileList) {
- for (Policy policy : allPolicies) {
- if (policy.getProfileId() == profile.getProfileId()) {
- policy.setProfile(profile);
- policies.add(policy);
- }
- }
+// try {
+ // List profileList = profileManager.getProfilesOfDeviceType(deviceTypeName);
+// List allPolicies = this.getPolicies();
+ List allPolicies = PolicyCacheManagerImpl.getInstance().getAllPolicies();
+
+ for (Policy policy : allPolicies) {
+ if (policy.getProfile().getDeviceType().getName().equalsIgnoreCase(deviceTypeName)) {
+ policies.add(policy);
}
- Collections.sort(policies);
- } catch (ProfileManagementException e) {
- throw new PolicyManagementException("Error occurred while getting all the profile features.", e);
}
+
+// for (Profile profile : profileList) {
+// for (Policy policy : allPolicies) {
+// if (policy.getProfileId() == profile.getProfileId()) {
+// policy.setProfile(profile);
+// policies.add(policy);
+// }
+// }
+// }
+ Collections.sort(policies);
+// } catch (ProfileManagementException e) {
+// throw new PolicyManagementException("Error occurred while getting all the profile features.", e);
+// }
return policies;
}
@@ -596,7 +619,8 @@ public class PolicyManagerImpl implements PolicyManager {
PolicyManagementDAOFactory.closeConnection();
}
- List tempPolicyList = this.getPolicies();
+// List tempPolicyList = this.getPolicies();
+ List tempPolicyList = PolicyCacheManagerImpl.getInstance().getAllPolicies();
for (Policy policy : tempPolicyList) {
for (Integer i : policyIdList) {
@@ -625,7 +649,8 @@ public class PolicyManagerImpl implements PolicyManager {
} finally {
PolicyManagementDAOFactory.closeConnection();
}
- List tempPolicyList = this.getPolicies();
+// List tempPolicyList = this.getPolicies();
+ List tempPolicyList = PolicyCacheManagerImpl.getInstance().getAllPolicies();
for (Policy policy : tempPolicyList) {
for (Integer i : policyIdList) {
@@ -654,14 +679,14 @@ public class PolicyManagerImpl implements PolicyManager {
HashMap allDeviceMap = new HashMap<>();
- if(!allDevices.isEmpty()) {
+ if (!allDevices.isEmpty()) {
allDeviceMap = PolicyManagerUtil.covertDeviceListToMap(allDevices);
}
for (int deviceId : deviceIds) {
- if(allDeviceMap.containsKey(deviceId)){
- if(log.isDebugEnabled()) {
+ if (allDeviceMap.containsKey(deviceId)) {
+ if (log.isDebugEnabled()) {
log.debug("Policy Applied device ids .............: " + deviceId + " - Policy Id " + policyId);
}
deviceList.add(allDeviceMap.get(deviceId));
@@ -695,11 +720,11 @@ public class PolicyManagerImpl implements PolicyManager {
deviceId = device.getId();
PolicyManagementDAOFactory.beginTransaction();
- boolean exist = policyDAO.checkPolicyAvailable(deviceId);
+ boolean exist = policyDAO.checkPolicyAvailable(deviceId, device.getEnrolmentInfo().getId());
if (exist) {
- policyDAO.updateEffectivePolicyToDevice(deviceId, policy);
+ policyDAO.updateEffectivePolicyToDevice(deviceId, device.getEnrolmentInfo().getId(), policy);
} else {
- policyDAO.addEffectivePolicyToDevice(deviceId, policy);
+ policyDAO.addEffectivePolicyToDevice(deviceId, device.getEnrolmentInfo().getId(), policy);
}
PolicyManagementDAOFactory.commitTransaction();
} catch (PolicyManagerDAOException e) {
@@ -725,7 +750,8 @@ public class PolicyManagerImpl implements PolicyManager {
// List inactivePolicies = new ArrayList<>();
List updatedPolicyIds = new ArrayList<>();
- List allPolicies = this.getPolicies();
+// List allPolicies = this.getPolicies();
+ List allPolicies = PolicyCacheManagerImpl.getInstance().getAllPolicies();
for (Policy policy : allPolicies) {
if (policy.isUpdated()) {
@@ -766,13 +792,13 @@ public class PolicyManagerImpl implements PolicyManager {
deviceId = device.getId();
PolicyManagementDAOFactory.beginTransaction();
- Policy policySaved = policyDAO.getAppliedPolicy(deviceId);
+ Policy policySaved = policyDAO.getAppliedPolicy(deviceId, device.getEnrolmentInfo().getId());
if (policySaved != null && policySaved.getId() != 0) {
if (policy.getId() != policySaved.getId()) {
- policyDAO.updateEffectivePolicyToDevice(deviceId, policy);
+ policyDAO.updateEffectivePolicyToDevice(deviceId, device.getEnrolmentInfo().getId(), policy);
}
} else {
- policyDAO.addEffectivePolicyToDevice(deviceId, policy);
+ policyDAO.addEffectivePolicyToDevice(deviceId, device.getEnrolmentInfo().getId(), policy);
}
PolicyManagementDAOFactory.commitTransaction();
} catch (PolicyManagerDAOException e) {
@@ -796,7 +822,7 @@ public class PolicyManagerImpl implements PolicyManager {
DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl();
Device device = service.getDevice(deviceIdentifier);
PolicyManagementDAOFactory.openConnection();
- exist = policyDAO.checkPolicyAvailable(device.getId());
+ exist = policyDAO.checkPolicyAvailable(device.getId(), device.getEnrolmentInfo().getId());
} catch (PolicyManagerDAOException e) {
throw new PolicyManagementException("Error occurred while checking whether device has a policy " +
"to apply.", e);
@@ -818,7 +844,7 @@ public class PolicyManagerImpl implements PolicyManager {
Device device = service.getDevice(deviceIdentifier);
PolicyManagementDAOFactory.openConnection();
- policyDAO.setPolicyApplied(device.getId());
+ policyDAO.setPolicyApplied(device.getId(), device.getEnrolmentInfo().getId());
return true;
} catch (PolicyManagerDAOException e) {
throw new PolicyManagementException("Error occurred while setting the policy has applied to device (" +
@@ -858,7 +884,7 @@ public class PolicyManagerImpl implements PolicyManager {
Device device = service.getDevice(deviceIdentifier);
//int policyId = policyDAO.getAppliedPolicyId(device.getId());
PolicyManagementDAOFactory.openConnection();
- policy = policyDAO.getAppliedPolicy(device.getId());
+ policy = policyDAO.getAppliedPolicy(device.getId(), device.getEnrolmentInfo().getId());
} catch (DeviceManagementException e) {
throw new PolicyManagementException("Error occurred while getting device id.", e);
} catch (PolicyManagerDAOException e) {
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/task/MonitoringTask.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/task/MonitoringTask.java
index 1c4492e239..cff114bf40 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/task/MonitoringTask.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/task/MonitoringTask.java
@@ -29,6 +29,7 @@ import org.wso2.carbon.device.mgt.core.dao.DeviceTypeDAO;
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.ntask.core.Task;
+import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException;
import org.wso2.carbon.policy.mgt.common.spi.PolicyMonitoringService;
import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder;
import org.wso2.carbon.policy.mgt.core.mgt.MonitoringManager;
@@ -63,24 +64,29 @@ public class MonitoringTask implements Task {
log.debug("Monitoring task started to run.");
}
+ MonitoringManager monitoringManager = new MonitoringManagerImpl();
+
List deviceTypes = new ArrayList<>();
try {
- DeviceManagementDAOFactory.openConnection();
- deviceTypes = deviceTypeDAO.getDeviceTypes();
- } catch (Exception e) {
- log.error("Error occurred while getting the device types.", e);
- } finally {
- DeviceManagementDAOFactory.closeConnection();
+ deviceTypes = monitoringManager.getDeviceTypes();
+ } catch (PolicyComplianceException e) {
+ log.error("Error occurred while getting the device types.");
}
if (!deviceTypes.isEmpty()) {
try {
+
+
DeviceManagementProviderService deviceManagementProviderService =
PolicyManagementDataHolder.getInstance().getDeviceManagementService();
- MonitoringManager monitoringManager = new MonitoringManagerImpl();
for (DeviceType deviceType : deviceTypes) {
+
+ if(log.isDebugEnabled()){
+ log.debug("Running task for device type : " + deviceType.getName() );
+ }
+
PolicyMonitoringService monitoringService =
PolicyManagementDataHolder.getInstance().getPolicyMonitoringService(deviceType.getName());
List devices = deviceManagementProviderService.getAllDevices(deviceType.getName());
@@ -91,7 +97,7 @@ public class MonitoringTask implements Task {
if (log.isDebugEnabled()) {
log.debug("Removing inactive and blocked devices from the list for the device type : " +
- deviceType);
+ deviceType.getName());
}
for (Device device : devices) {
if (device.getEnrolmentInfo().getStatus().equals(EnrolmentInfo.Status.INACTIVE) ||
@@ -102,7 +108,7 @@ public class MonitoringTask implements Task {
}
}
if (log.isDebugEnabled()) {
- log.debug("Following devices selected to send the notification for " + deviceType);
+ log.debug("Following devices selected to send the notification for " + deviceType.getName());
for (Device device : notifiableDevices) {
log.debug(device.getDeviceIdentifier());
}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/task/TaskScheduleServiceImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/task/TaskScheduleServiceImpl.java
index a8121f99ac..75550744ca 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/task/TaskScheduleServiceImpl.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/task/TaskScheduleServiceImpl.java
@@ -22,6 +22,8 @@ package org.wso2.carbon.policy.mgt.core.task;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
+import org.wso2.carbon.device.mgt.core.config.policy.PolicyConfiguration;
import org.wso2.carbon.ntask.common.TaskException;
import org.wso2.carbon.ntask.core.TaskInfo;
import org.wso2.carbon.ntask.core.TaskManager;
@@ -37,47 +39,64 @@ import java.util.Map;
public class TaskScheduleServiceImpl implements TaskScheduleService {
private static Log log = LogFactory.getLog(TaskScheduleServiceImpl.class);
+ private PolicyConfiguration policyConfiguration;
+
+
+ public TaskScheduleServiceImpl() {
+ this.policyConfiguration = DeviceConfigurationManager.getInstance().getDeviceManagementConfig().
+ getDeviceManagementConfigRepository().getPolicyConfiguration();
+ }
@Override
public void startTask(int monitoringFrequency) throws PolicyMonitoringTaskException {
- if (monitoringFrequency <= 0) {
- throw new PolicyMonitoringTaskException("Time interval cannot be 0 or less than 0.");
- }
- try {
- int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
- TaskService taskService = PolicyManagementDataHolder.getInstance().getTaskService();
- taskService.registerTaskType(PolicyManagementConstants.MONITORING_TASK_TYPE);
- if (log.isDebugEnabled()) {
- log.debug("Monitoring task is started for the tenant id " + tenantId);
+ if (policyConfiguration.getMonitoringEnable()) {
+
+ if (monitoringFrequency <= 0) {
+ throw new PolicyMonitoringTaskException("Time interval cannot be 0 or less than 0.");
}
+ try {
+ int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
+ TaskService taskService = PolicyManagementDataHolder.getInstance().getTaskService();
+ taskService.registerTaskType(PolicyManagementConstants.MONITORING_TASK_TYPE);
- TaskManager taskManager = taskService.getTaskManager(PolicyManagementConstants.MONITORING_TASK_TYPE);
+ if (log.isDebugEnabled()) {
+ log.debug("Monitoring task is started for the tenant id " + tenantId);
+ }
- TriggerInfo triggerInfo = new TriggerInfo();
+ TaskManager taskManager = taskService.getTaskManager(PolicyManagementConstants.MONITORING_TASK_TYPE);
- triggerInfo.setIntervalMillis(monitoringFrequency);
- triggerInfo.setRepeatCount(-1);
+ TriggerInfo triggerInfo = new TriggerInfo();
+ triggerInfo.setIntervalMillis(monitoringFrequency);
+ triggerInfo.setRepeatCount(-1);
- Map properties = new HashMap<>();
- properties.put(PolicyManagementConstants.TENANT_ID, String.valueOf(tenantId));
+ Map properties = new HashMap<>();
+ properties.put(PolicyManagementConstants.TENANT_ID, String.valueOf(tenantId));
- String taskName = PolicyManagementConstants.MONITORING_TASK_NAME + "_" + String.valueOf(tenantId);
+ String taskName = PolicyManagementConstants.MONITORING_TASK_NAME + "_" + String.valueOf(tenantId);
- TaskInfo taskInfo = new TaskInfo(taskName, PolicyManagementConstants.MONITORING_TASK_CLAZZ, properties, triggerInfo);
+ if (!taskManager.isTaskScheduled(taskName)) {
- taskManager.registerTask(taskInfo);
- taskManager.rescheduleTask(taskInfo.getName());
+ TaskInfo taskInfo = new TaskInfo(taskName, PolicyManagementConstants.MONITORING_TASK_CLAZZ,
+ properties, triggerInfo);
+ taskManager.registerTask(taskInfo);
+ taskManager.rescheduleTask(taskInfo.getName());
+ } else {
+ throw new PolicyMonitoringTaskException("Monitoring task is already started for this tenant " +
+ tenantId);
+ }
- } catch (TaskException e) {
- String msg = "Error occurred while creating the task for tenant " + PrivilegedCarbonContext.
- getThreadLocalCarbonContext().getTenantId();
- log.error(msg, e);
- throw new PolicyMonitoringTaskException(msg, e);
- }
+ } catch (TaskException e) {
+ throw new PolicyMonitoringTaskException("Error occurred while creating the task for tenant " +
+ PrivilegedCarbonContext.
+ getThreadLocalCarbonContext().getTenantId(), e);
+ }
+ } else {
+ throw new PolicyMonitoringTaskException("Policy monitoring is not enabled in the cdm-config.xml.");
+ }
}
@@ -90,10 +109,9 @@ public class TaskScheduleServiceImpl implements TaskScheduleService {
TaskManager taskManager = taskService.getTaskManager(PolicyManagementConstants.MONITORING_TASK_TYPE);
taskManager.deleteTask(taskName);
} catch (TaskException e) {
- String msg = "Error occurred while deleting the task for tenant " + PrivilegedCarbonContext.
- getThreadLocalCarbonContext().getTenantId();
- log.error(msg, e);
- throw new PolicyMonitoringTaskException(msg, e);
+ throw new PolicyMonitoringTaskException("Error occurred while deleting the task for tenant " +
+ PrivilegedCarbonContext.
+ getThreadLocalCarbonContext().getTenantId(), e);
}
}
@@ -103,29 +121,32 @@ public class TaskScheduleServiceImpl implements TaskScheduleService {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
String taskName = PolicyManagementConstants.MONITORING_TASK_NAME + "_" + String.valueOf(tenantId);
TaskService taskService = PolicyManagementDataHolder.getInstance().getTaskService();
-
TaskManager taskManager = taskService.getTaskManager(PolicyManagementConstants.MONITORING_TASK_TYPE);
- taskManager.deleteTask(taskName);
-
- TriggerInfo triggerInfo = new TriggerInfo();
+ if (taskManager.isTaskScheduled(taskName)) {
- triggerInfo.setIntervalMillis(monitoringFrequency);
- triggerInfo.setRepeatCount(-1);
+ taskManager.deleteTask(taskName);
+ TriggerInfo triggerInfo = new TriggerInfo();
+ triggerInfo.setIntervalMillis(monitoringFrequency);
+ triggerInfo.setRepeatCount(-1);
- Map properties = new HashMap<>();
- properties.put("tenantId", String.valueOf(tenantId));
+ Map properties = new HashMap<>();
+ properties.put("tenantId", String.valueOf(tenantId));
- TaskInfo taskInfo = new TaskInfo(taskName, PolicyManagementConstants.MONITORING_TASK_CLAZZ, properties, triggerInfo);
+ TaskInfo taskInfo = new TaskInfo(taskName, PolicyManagementConstants.MONITORING_TASK_CLAZZ, properties,
+ triggerInfo);
- taskManager.registerTask(taskInfo);
- taskManager.rescheduleTask(taskInfo.getName());
+ taskManager.registerTask(taskInfo);
+ taskManager.rescheduleTask(taskInfo.getName());
+ } else {
+ throw new PolicyMonitoringTaskException("Monitoring task has not been started for this tenant " +
+ tenantId + ". Please start the task first.");
+ }
} catch (TaskException e) {
- String msg = "Error occurred while updating the task for tenant " + PrivilegedCarbonContext.
- getThreadLocalCarbonContext().getTenantId();
- log.error(msg, e);
- throw new PolicyMonitoringTaskException(msg, e);
+ throw new PolicyMonitoringTaskException("Error occurred while updating the task for tenant " +
+ PrivilegedCarbonContext.
+ getThreadLocalCarbonContext().getTenantId(), e);
}
}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/BasePolicyManagementDAOTest.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/BasePolicyManagementDAOTest.java
index 6b15d82d2e..a01ff15567 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/BasePolicyManagementDAOTest.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/BasePolicyManagementDAOTest.java
@@ -26,6 +26,9 @@ import org.testng.annotations.BeforeSuite;
import org.w3c.dom.Document;
import org.wso2.carbon.base.MultitenantConstants;
import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
+import org.wso2.carbon.device.mgt.core.config.DeviceManagementConfig;
+import org.wso2.carbon.device.mgt.core.config.policy.PolicyConfiguration;
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
@@ -61,6 +64,7 @@ public abstract class BasePolicyManagementDAOTest {
this.initSQLScript();
this.initialize();
this.initiatePrivilegedCaronContext();
+ DeviceConfigurationManager.getInstance().initConfig();
}
public void initialize() throws TaskException {
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/PolicyDAOTestCase.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/PolicyDAOTestCase.java
index b836aaac4b..e8ab64cf01 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/PolicyDAOTestCase.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/PolicyDAOTestCase.java
@@ -32,12 +32,6 @@ import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceIm
import org.wso2.carbon.policy.mgt.common.*;
import org.wso2.carbon.policy.mgt.core.impl.PolicyAdministratorPointImpl;
import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder;
-import org.wso2.carbon.policy.mgt.core.mgt.FeatureManager;
-import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager;
-import org.wso2.carbon.policy.mgt.core.mgt.ProfileManager;
-import org.wso2.carbon.policy.mgt.core.mgt.impl.FeatureManagerImpl;
-import org.wso2.carbon.policy.mgt.core.mgt.impl.PolicyManagerImpl;
-import org.wso2.carbon.policy.mgt.core.mgt.impl.ProfileManagerImpl;
import org.wso2.carbon.policy.mgt.core.util.*;
import java.util.ArrayList;
@@ -87,7 +81,6 @@ public class PolicyDAOTestCase extends BasePolicyManagementDAOTest {
}
-
DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl();
PolicyManagementDataHolder.getInstance().setDeviceManagementService(service);
@@ -119,38 +112,39 @@ public class PolicyDAOTestCase extends BasePolicyManagementDAOTest {
@Test(dependsOnMethods = ("addFeatures"))
public void addProfileFeatures() throws ProfileManagementException {
- ProfileManager profileManager = new ProfileManagerImpl();
- Profile profile = ProfileCreator.getProfile2(FeatureCreator.getFeatureList2());
+// ProfileManager profileManager = new ProfileManagerImpl();
+// Profile profile = ProfileCreator.getProfile2(FeatureCreator.getFeatureList2());
// profileManager.addProfile(profile);
// profileFeatureList = profile.getProfileFeaturesList();
}
@Test(dependsOnMethods = ("addProfileFeatures"))
public void addPolicy() throws PolicyManagementException, ProfileManagementException {
- ProfileManager profileManager = new ProfileManagerImpl();
+// ProfileManager profileManager = new ProfileManagerImpl();
Profile profile = ProfileCreator.getProfile5(FeatureCreator.getFeatureList5());
- profileManager.addProfile(profile);
- PolicyManager policyManager = new PolicyManagerImpl();
+// profileManager.addProfile(profile);
+ PolicyAdministratorPoint pap = new PolicyAdministratorPointImpl();
policy = PolicyCreator.createPolicy(profile);
- policyManager.addPolicy(policy);
+ policy = pap.addPolicy(policy);
+ pap.activatePolicy(policy.getId());
}
@Test(dependsOnMethods = ("addPolicy"))
public void addPolicyToRole() throws PolicyManagementException {
- PolicyManager policyManager = new PolicyManagerImpl();
+ PolicyAdministratorPoint pap = new PolicyAdministratorPointImpl();
List roles = new ArrayList();
roles.add("Test_ROLE_01");
roles.add("Test_ROLE_02");
roles.add("Test_ROLE_03");
- policyManager.addPolicyToRole(roles, policy);
+ pap.addPolicyToRole(roles, policy);
}
@Test(dependsOnMethods = ("addPolicyToRole"))
public void addPolicyToDevice() throws PolicyManagementException {
- PolicyManager policyManager = new PolicyManagerImpl();
+ PolicyAdministratorPoint pap = new PolicyAdministratorPointImpl();
Device device = DeviceCreator.getSingleDevice();
List deviceIdentifierList = new ArrayList();
@@ -159,29 +153,31 @@ public class PolicyDAOTestCase extends BasePolicyManagementDAOTest {
deviceIdentifier.setType("android");
deviceIdentifierList.add(deviceIdentifier);
- policyManager.addPolicyToDevice(deviceIdentifierList, policy);
+ pap.addPolicyToDevice(deviceIdentifierList, policy);
}
@Test(dependsOnMethods = ("addPolicyToDevice"))
public void addNewPolicy() throws PolicyManagementException, ProfileManagementException {
- ProfileManager profileManager = new ProfileManagerImpl();
+ PolicyAdministratorPoint pap = new PolicyAdministratorPointImpl();
Profile profile = ProfileCreator.getProfile3(FeatureCreator.getFeatureList3());
- profileManager.addProfile(profile);
- PolicyManager policyManager = new PolicyManagerImpl();
+ //pap.addProfile(profile);
+ // PolicyManager policyManager = new PolicyManagerImpl();
Policy policy = PolicyCreator.createPolicy2(profile);
- policyManager.addPolicy(policy);
+ policy = pap.addPolicy(policy);
+ pap.activatePolicy(policy.getId());
}
@Test(dependsOnMethods = ("addPolicyToDevice"))
public void addThirdPolicy() throws PolicyManagementException, ProfileManagementException {
- ProfileManager profileManager = new ProfileManagerImpl();
+ //ProfileManager profileManager = new ProfileManagerImpl();
Profile profile = ProfileCreator.getProfile4(FeatureCreator.getFeatureList4());
- profileManager.addProfile(profile);
- PolicyManager policyManager = new PolicyManagerImpl();
+ //profileManager.addProfile(profile);
+ PolicyAdministratorPoint pap = new PolicyAdministratorPointImpl();
Policy policy = PolicyCreator.createPolicy4(profile);
- policyManager.addPolicy(policy);
+ policy = pap.addPolicy(policy);
+ pap.activatePolicy(policy.getId());
}
@Test(dependsOnMethods = ("addNewPolicy"))
@@ -273,26 +269,29 @@ public class PolicyDAOTestCase extends BasePolicyManagementDAOTest {
@Test(dependsOnMethods = ("getRoleRelatedPolicy"))
public void addSecondPolicy() throws PolicyManagementException, ProfileManagementException {
- ProfileManager profileManager = new ProfileManagerImpl();
+ // ProfileManager profileManager = new ProfileManagerImpl();
Profile profile = ProfileCreator.getProfile(FeatureCreator.getFeatureList());
- profileManager.addProfile(profile);
- PolicyManager policyManager = new PolicyManagerImpl();
+ //profileManager.addProfile(profile);
+ PolicyAdministratorPoint pap = new PolicyAdministratorPointImpl();
Policy policy = PolicyCreator.createPolicy3(profile);
- policyManager.addPolicy(policy);
+ policy = pap.addPolicy(policy);
+ pap.activatePolicy(policy.getId());
}
@Test(dependsOnMethods = ("addSecondPolicy"))
public void updatedPolicy() throws PolicyManagementException {
- PolicyManager policyManager = new PolicyManagerImpl();
+ PolicyAdministratorPoint pap = new PolicyAdministratorPointImpl();
Profile profile = ProfileCreator.getProfile3(FeatureCreator.getFeatureList3());
Policy policy = PolicyCreator.createPolicy3(profile);
policy.setPolicyName("Policy_05");
- policy = policyManager.addPolicy(policy);
+ policy = pap.addPolicy(policy);
+ pap.activatePolicy(policy.getId());
List users = new ArrayList<>();
users.add("Udara");
users.add("Dileesha");
policy.setUsers(users);
- policyManager.updatePolicy(policy);
+ pap.updatePolicy(policy);
+ pap.activatePolicy(policy.getId());
}
@Test(dependsOnMethods = ("updatedPolicy"))
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/cdm-config.xml b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/cdm-config.xml
new file mode 100644
index 0000000000..0f5861cc1d
--- /dev/null
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/cdm-config.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+ jdbc/DM_DS
+
+
+
+ 8
+ 100
+ 20
+ 1000
+
+
+ https://localhost:9443
+ admin
+ admin
+
+
+ org.wso2.carbon.policy.mgt
+ true
+ 60000
+ 5
+ 8
+ 20
+
+
+
+
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/notification-messages.xml b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/notification-messages.xml
new file mode 100644
index 0000000000..9b13c5d808
--- /dev/null
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/notification-messages.xml
@@ -0,0 +1,39 @@
+
+
+ Enroll your Device with WSO2 MDM
+
+
+ You have been registered to the WSO2 MDM. Below is the link to enroll.
+
+ {downloadUrl}
+
+ Best Regards,
+
+
+ WSO2 MDM Team.
+
+
+ http://www.wso2.com
+
+
+
+ Enroll your Device with WSO2 MDM
+
+
+You have been registered to WSO2 MDM with following credentials.
+Username: {user-name}
+Password: {password}
+Below is the link to enroll.
+
+ {downloadUrl}
+
+ Best Regards,
+
+
+ WSO2 MDM Team.
+
+
+ http://www.wso2.com
+
+
+
\ No newline at end of file
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql
index 4a32bc8db7..f221ba0e78 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/sql/CreateH2TestDB.sql
@@ -160,6 +160,8 @@ CREATE TABLE IF NOT EXISTS DM_POLICY (
CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY (
ID INT(11) NOT NULL AUTO_INCREMENT ,
DEVICE_ID INT(11) NOT NULL ,
+ ENROLMENT_ID INT(11) NOT NULL,
+ DEVICE BLOB NOT NULL,
POLICY_ID INT(11) NOT NULL ,
PRIMARY KEY (ID) ,
CONSTRAINT FK_POLICY_DEVICE_POLICY
@@ -245,8 +247,9 @@ CREATE TABLE IF NOT EXISTS DM_USER_POLICY (
CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY_APPLIED (
- ID INT NOT NULL AUTO_INCREMENT ,
- DEVICE_ID INT NOT NULL ,
+ ID INT NOT NULL AUTO_INCREMENT,
+ DEVICE_ID INT NOT NULL,
+ ENROLMENT_ID INT(11) NOT NULL,
POLICY_ID INT NOT NULL ,
POLICY_CONTENT BLOB NULL ,
TENANT_ID INT NOT NULL,
@@ -316,6 +319,7 @@ CREATE TABLE IF NOT EXISTS DM_POLICY_CRITERIA_PROPERTIES (
CREATE TABLE IF NOT EXISTS DM_POLICY_COMPLIANCE_STATUS (
ID INT NOT NULL AUTO_INCREMENT,
DEVICE_ID INT NOT NULL,
+ ENROLMENT_ID INT(11) NOT NULL,
POLICY_ID INT NOT NULL,
TENANT_ID INT NOT NULL,
STATUS INT NULL,
@@ -352,12 +356,7 @@ CREATE TABLE IF NOT EXISTS DM_POLICY_CHANGE_MGT (
POLICY_ID INT NOT NULL,
DEVICE_TYPE_ID INT NOT NULL,
TENANT_ID INT(11) NOT NULL,
- PRIMARY KEY (ID),
- CONSTRAINT FK_POLICY_CHANGE_MGT_POLICY
- FOREIGN KEY (POLICY_ID)
- REFERENCES DM_POLICY (ID)
- ON DELETE NO ACTION
- ON UPDATE NO ACTION
+ PRIMARY KEY (ID)
);
-- POLICY RELATED TABLES FINISHED --
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/conf/cdm-config.xml b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/conf/cdm-config.xml
index 0efa651a73..0f5861cc1d 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/conf/cdm-config.xml
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/conf/cdm-config.xml
@@ -37,8 +37,11 @@
org.wso2.carbon.policy.mgt
+ true
+ 60000
5
8
+ 20
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql
index 1e645d2554..781ea7640b 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql
@@ -145,6 +145,8 @@ CREATE TABLE IF NOT EXISTS DM_POLICY (
CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY (
ID INT(11) NOT NULL AUTO_INCREMENT ,
DEVICE_ID INT(11) NOT NULL ,
+ ENROLMENT_ID INT(11) NOT NULL,
+ DEVICE BLOB NOT NULL,
POLICY_ID INT(11) NOT NULL ,
PRIMARY KEY (ID) ,
CONSTRAINT FK_POLICY_DEVICE_POLICY
@@ -232,6 +234,7 @@ CREATE TABLE IF NOT EXISTS DM_USER_POLICY (
CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY_APPLIED (
ID INT NOT NULL AUTO_INCREMENT ,
DEVICE_ID INT NOT NULL ,
+ ENROLMENT_ID INT(11) NOT NULL,
POLICY_ID INT NOT NULL ,
POLICY_CONTENT BLOB NULL ,
TENANT_ID INT NOT NULL,
@@ -297,6 +300,7 @@ CREATE TABLE IF NOT EXISTS DM_POLICY_CRITERIA_PROPERTIES (
CREATE TABLE IF NOT EXISTS DM_POLICY_COMPLIANCE_STATUS (
ID INT NOT NULL AUTO_INCREMENT,
DEVICE_ID INT NOT NULL,
+ ENROLMENT_ID INT(11) NOT NULL,
POLICY_ID INT NOT NULL,
TENANT_ID INT NOT NULL,
STATUS INT NULL,
@@ -319,12 +323,7 @@ CREATE TABLE IF NOT EXISTS DM_POLICY_CHANGE_MGT (
POLICY_ID INT NOT NULL,
DEVICE_TYPE_ID INT NOT NULL,
TENANT_ID INT(11) NOT NULL,
- PRIMARY KEY (ID),
- CONSTRAINT FK_POLICY_CHANGE_MGT_POLICY
- FOREIGN KEY (POLICY_ID)
- REFERENCES DM_POLICY (ID)
- ON DELETE NO ACTION
- ON UPDATE NO ACTION
+ PRIMARY KEY (ID)
);