Adding criteria based policy

4.x.x
geethkokila 10 years ago
parent d5cafe843d
commit 53c22fe9fe

@ -34,6 +34,8 @@ import java.util.Map;
@XmlRootElement @XmlRootElement
public class Policy implements Comparable<Policy>, Serializable { public class Policy implements Comparable<Policy>, Serializable {
private static final long serialVersionUID = 19981017L;
private int id; // Identifier of the policy. private int id; // Identifier of the policy.
private int priorityId; // Priority of the policies. This will be used only for simple evaluation. private int priorityId; // Priority of the policies. This will be used only for simple evaluation.
private Profile profile; // Profile private Profile profile; // Profile
@ -48,7 +50,7 @@ public class Policy implements Comparable<Policy>, Serializable {
/* This is related criteria based policy */ /* This is related criteria based policy */
private List<PolicyCriteria> policyCriterias; private List<PolicyCriterion> policyCriterias;
/*These are related to time based policies*/ /*These are related to time based policies*/
@ -161,11 +163,11 @@ public class Policy implements Comparable<Policy>, Serializable {
} }
@XmlElement @XmlElement
public List<PolicyCriteria> getPolicyCriterias() { public List<PolicyCriterion> getPolicyCriterias() {
return policyCriterias; return policyCriterias;
} }
public void setPolicyCriterias(List<PolicyCriteria> policyCriterias) { public void setPolicyCriterias(List<PolicyCriterion> policyCriterias) {
this.policyCriterias = policyCriterias; this.policyCriterias = policyCriterias;
} }

@ -22,9 +22,10 @@ package org.wso2.carbon.policy.mgt.common;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
public class PolicyCriteria { public class PolicyCriterion {
private int id; private int id;
private int criteriaId;
private String name; private String name;
private Properties properties; private Properties properties;
private Map<String, Object> objectMap; private Map<String, Object> objectMap;
@ -37,6 +38,14 @@ public class PolicyCriteria {
this.id = id; this.id = id;
} }
public int getCriteriaId() {
return criteriaId;
}
public void setCriteriaId(int criteriaId) {
this.criteriaId = criteriaId;
}
public String getName() { public String getName() {
return name; return name;
} }

@ -25,7 +25,6 @@ public class ProfileFeature implements Serializable {
private int id; private int id;
private String featureCode; private String featureCode;
// private Feature feature;
private int profileId; private int profileId;
private int deviceTypeId; private int deviceTypeId;
private Object content; private Object content;
@ -46,14 +45,6 @@ public class ProfileFeature implements Serializable {
this.featureCode = featureCode; this.featureCode = featureCode;
} }
// public Feature getFeature() {
// return feature;
// }
//
// public void setFeature(Feature feature) {
// this.feature = feature;
// }
public int getProfileId() { public int getProfileId() {
return profileId; return profileId;
} }

@ -58,7 +58,9 @@ public interface PolicyDAO {
Policy addPolicyCriteria(Policy policy) throws PolicyManagerDAOException; Policy addPolicyCriteria(Policy policy) throws PolicyManagerDAOException;
List<PolicyCriteria> getPolicyCriteria(int policyId) throws PolicyManagerDAOException; boolean addPolicyCriteriaProperties(List<PolicyCriterion> policyCriteria) throws PolicyManagerDAOException;
List<PolicyCriterion> getPolicyCriteria(int policyId) throws PolicyManagerDAOException;
Policy updatePolicy(Policy policy) throws PolicyManagerDAOException; Policy updatePolicy(Policy policy) throws PolicyManagerDAOException;

@ -29,9 +29,8 @@ import org.wso2.carbon.policy.mgt.core.dao.util.PolicyManagementDAOUtil;
import org.wso2.carbon.policy.mgt.core.util.PolicyManagerUtil; import org.wso2.carbon.policy.mgt.core.util.PolicyManagerUtil;
import java.sql.*; import java.sql.*;
import java.util.ArrayList; import java.sql.Date;
import java.util.Calendar; import java.util.*;
import java.util.List;
public class PolicyDAOImpl implements PolicyDAO { public class PolicyDAOImpl implements PolicyDAO {
@ -303,6 +302,7 @@ public class PolicyDAOImpl implements PolicyDAO {
throw new PolicyManagerDAOException(msg, e); throw new PolicyManagerDAOException(msg, e);
} finally { } finally {
PolicyManagementDAOUtil.cleanupResources(stmt, resultSet); PolicyManagementDAOUtil.cleanupResources(stmt, resultSet);
this.closeConnection();
} }
} }
@ -333,6 +333,7 @@ public class PolicyDAOImpl implements PolicyDAO {
throw new PolicyManagerDAOException(msg, e); throw new PolicyManagerDAOException(msg, e);
} finally { } finally {
PolicyManagementDAOUtil.cleanupResources(stmt, resultSet); PolicyManagementDAOUtil.cleanupResources(stmt, resultSet);
this.closeConnection();
} }
} }
@ -391,17 +392,163 @@ public class PolicyDAOImpl implements PolicyDAO {
@Override @Override
public List<Criterion> getAllPolicyCriteria() throws PolicyManagerDAOException { public List<Criterion> getAllPolicyCriteria() throws PolicyManagerDAOException {
return null;
Connection conn;
PreparedStatement stmt = null;
ResultSet resultSet = null;
List<Criterion> criteria = new ArrayList<Criterion>();
try {
conn = this.getConnection();
String query = "SELECT * FROM DM_CRITERIA";
stmt = conn.prepareStatement(query);
resultSet = stmt.executeQuery();
while (resultSet.next()) {
Criterion criterion = new Criterion();
criterion.setId(resultSet.getInt("ID"));
criterion.setName(resultSet.getString("NAME"));
criteria.add(criterion);
}
return criteria;
} catch (SQLException e) {
String msg = "Error occurred while reading the policies from the database.";
log.error(msg, e);
throw new PolicyManagerDAOException(msg, e);
} finally {
PolicyManagementDAOUtil.cleanupResources(stmt, resultSet);
this.closeConnection();
}
} }
@Override @Override
public Policy addPolicyCriteria(Policy policy) throws PolicyManagerDAOException { public Policy addPolicyCriteria(Policy policy) throws PolicyManagerDAOException {
return null;
Connection conn;
PreparedStatement stmt = null;
ResultSet generatedKeys;
try {
conn = this.getConnection();
String query = "INSERT INTO DM_POLICY_CRITERIA (CRITERIA_ID, POLICY_ID) VALUES (?, ?)";
stmt = conn.prepareStatement(query);
List<PolicyCriterion> criteria = policy.getPolicyCriterias();
for (PolicyCriterion criterion : criteria) {
stmt.setInt(1, criterion.getCriteriaId());
stmt.setInt(2, policy.getId());
stmt.addBatch();
}
stmt.executeUpdate();
generatedKeys = stmt.getGeneratedKeys();
int i = 0;
while (generatedKeys.next()) {
policy.getPolicyCriterias().get(i).setId(generatedKeys.getInt(1));
i++;
}
} catch (SQLException e) {
String msg = "Error occurred while inserting the criterion to policy (" + policy.getPolicyName() + ") " +
"to database.";
log.error(msg, e);
throw new PolicyManagerDAOException(msg, e);
} finally {
PolicyManagementDAOUtil.cleanupResources(stmt, null);
}
return policy;
} }
@Override @Override
public List<PolicyCriteria> getPolicyCriteria(int policyId) throws PolicyManagerDAOException { public boolean addPolicyCriteriaProperties(List<PolicyCriterion> policyCriteria) throws PolicyManagerDAOException {
return null;
Connection conn;
PreparedStatement stmt = null;
try {
conn = this.getConnection();
String query = "INSERT INTO DM_POLICY_CRITERIA_PROPERTIES (POLICY_CRITERION_ID, KEY, VALUE, CONTENT) VALUES (?, ?, ?, ?)";
stmt = conn.prepareStatement(query);
for (PolicyCriterion criterion : policyCriteria) {
for (String name : criterion.getProperties().stringPropertyNames()) {
stmt.setInt(1, criterion.getId());
stmt.setString(2, name);
stmt.setString(3, criterion.getProperties().getProperty(name));
stmt.setObject(4, criterion.getObjectMap());
stmt.addBatch();
}
}
stmt.executeUpdate();
} catch (SQLException e) {
String msg = "Error occurred while inserting the criterion properties to database.";
log.error(msg, e);
throw new PolicyManagerDAOException(msg, e);
} finally {
PolicyManagementDAOUtil.cleanupResources(stmt, null);
}
return false;
}
@Override
public List<PolicyCriterion> getPolicyCriteria(int policyId) throws PolicyManagerDAOException {
Connection conn;
PreparedStatement stmt = null;
ResultSet resultSet = null;
List<PolicyCriterion> criteria = new ArrayList<PolicyCriterion>();
try {
conn = this.getConnection();
String query = "SELECT DPC.ID, DPC.CRITERIA_ID, DPCP.KEY, DPCP.VALUE, DPCP.CONTENT FROM " +
"DM_POLICY_CRITERIA DPC LEFT JOIN DM_POLICY_CRITERIA_PROPERTIES DPCP " +
"ON DPCP.POLICY_CRITERION_ID = DPC.ID RIGHT JOIN DM_CRITERIA DC " +
"ON DC.ID=DPC.CRITERIA_ID WHERE DPC.POLICY_ID = ?";
stmt = conn.prepareStatement(query);
stmt.setInt(1, policyId);
resultSet = stmt.executeQuery();
int criteriaId = 0;
PolicyCriterion policyCriterion = null;
Properties prop = null;
while (resultSet.next()) {
if (criteriaId != resultSet.getInt("ID")) {
if (policyCriterion != null) {
policyCriterion.setProperties(prop);
criteria.add(policyCriterion);
}
policyCriterion = new PolicyCriterion();
prop = new Properties();
criteriaId = resultSet.getInt("ID");
policyCriterion.setId(resultSet.getInt("ID"));
policyCriterion.setCriteriaId(resultSet.getInt("CRITERIA_ID"));
} else {
prop.setProperty(resultSet.getString("KEY"), resultSet.getString("VALUE"));
}
}
} catch (SQLException e) {
String msg = "Error occurred while reading the criteria related to policies from the database.";
log.error(msg, e);
throw new PolicyManagerDAOException(msg, e);
} finally {
PolicyManagementDAOUtil.cleanupResources(stmt, resultSet);
this.closeConnection();
}
return criteria;
} }
@Override @Override
@ -972,6 +1119,13 @@ public class PolicyDAOImpl implements PolicyDAO {
stmt.setInt(1, policyId); stmt.setInt(1, policyId);
stmt.executeUpdate(); stmt.executeUpdate();
String deleteCriteria = "DELETE FROM DM_POLICY_CRITERIA WHERE POLICY_ID = ?";
stmt = conn.prepareStatement(deleteCriteria);
stmt.setInt(1, policyId);
stmt.executeUpdate();
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Policy (" + policyId + ") related configs deleted from database."); log.debug("Policy (" + policyId + ") related configs deleted from database.");
} }

@ -24,7 +24,6 @@ import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.core.dao.DeviceDAO; import org.wso2.carbon.device.mgt.core.dao.DeviceDAO;
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException;
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; 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.Device; import org.wso2.carbon.device.mgt.core.dto.Device;
import org.wso2.carbon.policy.mgt.common.*; import org.wso2.carbon.policy.mgt.common.*;
import org.wso2.carbon.policy.mgt.core.dao.*; import org.wso2.carbon.policy.mgt.core.dao.*;
@ -40,7 +39,7 @@ public class PolicyManagerImpl implements PolicyManager {
private ProfileDAO profileDAO; private ProfileDAO profileDAO;
private FeatureDAO featureDAO; private FeatureDAO featureDAO;
private DeviceDAO deviceDAO; private DeviceDAO deviceDAO;
private DeviceTypeDAO deviceTypeDAO; // private DeviceTypeDAO deviceTypeDAO;
private ProfileManager profileManager; private ProfileManager profileManager;
private static Log log = LogFactory.getLog(PolicyManagerImpl.class); private static Log log = LogFactory.getLog(PolicyManagerImpl.class);
@ -49,7 +48,7 @@ public class PolicyManagerImpl implements PolicyManager {
this.profileDAO = PolicyManagementDAOFactory.getProfileDAO(); this.profileDAO = PolicyManagementDAOFactory.getProfileDAO();
this.featureDAO = PolicyManagementDAOFactory.getFeatureDAO(); this.featureDAO = PolicyManagementDAOFactory.getFeatureDAO();
this.deviceDAO = DeviceManagementDAOFactory.getDeviceDAO(); this.deviceDAO = DeviceManagementDAOFactory.getDeviceDAO();
this.deviceTypeDAO = DeviceManagementDAOFactory.getDeviceTypeDAO(); // this.deviceTypeDAO = DeviceManagementDAOFactory.getDeviceTypeDAO();
this.profileManager = new ProfileManagerImpl(); this.profileManager = new ProfileManagerImpl();
} }
@ -77,6 +76,20 @@ public class PolicyManagerImpl implements PolicyManager {
policyDAO.addPolicyToDevice(policy.getDevices(), policy); policyDAO.addPolicyToDevice(policy.getDevices(), policy);
} }
if (policy.getPolicyCriterias() != null) {
List<PolicyCriterion> criteria = policy.getPolicyCriterias();
for (PolicyCriterion criterion : criteria) {
if (!policyDAO.checkCriterionExists(criterion.getName())) {
Criterion criteriaObj = new Criterion();
criteriaObj.setName(criterion.getName());
policyDAO.addCriterion(criteriaObj);
}
}
policyDAO.addPolicyCriteria(policy);
policyDAO.addPolicyCriteriaProperties(policy.getPolicyCriterias());
}
if (policy.getEndDate() != null & policy.getStartDate() != null) { if (policy.getEndDate() != null & policy.getStartDate() != null) {
policyDAO.addDatesToPolicy(policy.getStartDate(), policy.getEndDate(), policy); policyDAO.addDatesToPolicy(policy.getStartDate(), policy.getEndDate(), policy);
} }
@ -145,6 +158,20 @@ public class PolicyManagerImpl implements PolicyManager {
policyDAO.addPolicyToDevice(policy.getDevices(), policy); policyDAO.addPolicyToDevice(policy.getDevices(), policy);
} }
if (policy.getPolicyCriterias() != null) {
List<PolicyCriterion> criteria = policy.getPolicyCriterias();
for (PolicyCriterion criterion : criteria) {
if (!policyDAO.checkCriterionExists(criterion.getName())) {
Criterion criteriaObj = new Criterion();
criteriaObj.setName(criterion.getName());
policyDAO.addCriterion(criteriaObj);
}
}
policyDAO.addPolicyCriteria(policy);
policyDAO.addPolicyCriteriaProperties(policy.getPolicyCriterias());
}
if (policy.getEndDate() != null & policy.getStartDate() != null) { if (policy.getEndDate() != null & policy.getStartDate() != null) {
policyDAO.addDatesToPolicy(policy.getStartDate(), policy.getEndDate(), policy); policyDAO.addDatesToPolicy(policy.getStartDate(), policy.getEndDate(), policy);
} }

Loading…
Cancel
Save