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 +
Dear {first-name},
+ + 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 +
Dear {first-name},
+ +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) );