mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Fixed repeating task operations.
This commit is contained in:
parent
a7d7c689e8
commit
2bf6f562df
@ -32,6 +32,8 @@ import org.wso2.carbon.device.mgt.common.push.notification.NotificationContext;
|
||||
import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy;
|
||||
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationExecutionFailedException;
|
||||
import org.wso2.carbon.device.mgt.core.DeviceManagementConstants;
|
||||
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
|
||||
import org.wso2.carbon.device.mgt.core.config.task.TaskConfiguration;
|
||||
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.DeviceManagementDAOFactory;
|
||||
@ -106,16 +108,34 @@ public class OperationManagerImpl implements OperationManager {
|
||||
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation operationDto =
|
||||
OperationDAOUtil.convertOperation(operation);
|
||||
int operationId = this.lookupOperationDAO(operation).addOperation(operationDto);
|
||||
//TODO have to create a sql to load device details from deviceDAO using single query.
|
||||
for (DeviceIdentifier deviceId : deviceIds) {
|
||||
Device device = getDevice(deviceId);
|
||||
boolean isScheduledOperation = this.isTaskScheduledOperation(operation);
|
||||
boolean isNotRepeated = false;
|
||||
boolean hasExistingTaskOperation;
|
||||
int enrolmentId;
|
||||
if (operationDto.getControl() ==
|
||||
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Control.NO_REPEAT) {
|
||||
operationDAO.updateEnrollmentOperationsStatus(device.getEnrolmentInfo().getId(), operationDto.getCode(),
|
||||
isNotRepeated = true;
|
||||
}
|
||||
|
||||
//TODO have to create a sql to load device details from deviceDAO using single query.
|
||||
String operationCode = operationDto.getCode();
|
||||
for (DeviceIdentifier deviceId : deviceIds) {
|
||||
Device device = getDevice(deviceId);
|
||||
enrolmentId = device.getEnrolmentInfo().getId();
|
||||
//Do not repeat the task operations
|
||||
if (isScheduledOperation) {
|
||||
hasExistingTaskOperation = operationDAO.updateTaskOperation(enrolmentId, operationCode);
|
||||
if (!hasExistingTaskOperation) {
|
||||
operationMappingDAO.addOperationMapping(operationId, enrolmentId);
|
||||
}
|
||||
} else if (isNotRepeated) {
|
||||
operationDAO.updateEnrollmentOperationsStatus(enrolmentId, operationCode,
|
||||
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Status.PENDING,
|
||||
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Status.REPEATED);
|
||||
operationMappingDAO.addOperationMapping(operationId, enrolmentId);
|
||||
} else {
|
||||
operationMappingDAO.addOperationMapping(operationId, enrolmentId);
|
||||
}
|
||||
operationMappingDAO.addOperationMapping(operationId, device.getEnrolmentInfo().getId());
|
||||
if (notificationStrategy != null) {
|
||||
try {
|
||||
notificationStrategy.execute(new NotificationContext(deviceId, operation));
|
||||
@ -129,7 +149,7 @@ public class OperationManagerImpl implements OperationManager {
|
||||
OperationManagementDAOFactory.commitTransaction();
|
||||
Activity activity = new Activity();
|
||||
activity.setActivityId(DeviceManagementConstants.OperationAttributes.ACTIVITY + operationId);
|
||||
activity.setCode(operationDto.getCode());
|
||||
activity.setCode(operationCode);
|
||||
activity.setCreatedTimeStamp(new Date().toString());
|
||||
activity.setType(Activity.Type.valueOf(operationDto.getType().toString()));
|
||||
return activity;
|
||||
@ -788,4 +808,15 @@ public class OperationManagerImpl implements OperationManager {
|
||||
return enrolmentId;
|
||||
}
|
||||
|
||||
private boolean isTaskScheduledOperation(Operation operation) {
|
||||
TaskConfiguration taskConfiguration = DeviceConfigurationManager.getInstance().getDeviceManagementConfig().
|
||||
getTaskConfiguration();
|
||||
for (TaskConfiguration.Operation op:taskConfiguration.getOperations()) {
|
||||
if (operation.getCode().equals(op.getOperationName())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -60,6 +60,8 @@ public interface OperationDAO {
|
||||
void updateEnrollmentOperationsStatus(int enrolmentId, String operationCode, Operation.Status existingStatus,
|
||||
Operation.Status newStatus) throws OperationManagementDAOException;
|
||||
|
||||
boolean updateTaskOperation(int enrolmentId, String operationCode) throws OperationManagementDAOException;
|
||||
|
||||
void addOperationResponse(int enrolmentId, int operationId, Object operationResponse)
|
||||
throws OperationManagementDAOException;
|
||||
|
||||
|
||||
@ -153,6 +153,44 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateTaskOperation(int enrolmentId, String operationCode)
|
||||
throws OperationManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
boolean result = false;
|
||||
try {
|
||||
Connection connection = OperationManagementDAOFactory.getConnection();
|
||||
String query = "SELECT EOM.ID FROM DM_ENROLMENT_OP_MAPPING AS EOM INNER JOIN DM_OPERATION DM " +
|
||||
"ON DM.ID = EOM.OPERATION_ID WHERE EOM.ENROLMENT_ID = ? AND DM.OPERATION_CODE = ? AND " +
|
||||
"EOM.STATUS = ?;";
|
||||
stmt = connection.prepareStatement(query);
|
||||
stmt.setInt(1, enrolmentId);
|
||||
stmt.setString(2, operationCode);
|
||||
stmt.setString(3, Operation.Status.PENDING.toString());
|
||||
// This will return only one result always.
|
||||
rs = stmt.executeQuery();
|
||||
int id = 0;
|
||||
if (rs.next()) {
|
||||
id = rs.getInt("ID");
|
||||
}
|
||||
if (id != 0) {
|
||||
stmt = connection.prepareStatement("UPDATE DM_ENROLMENT_OP_MAPPING SET UPDATED_TIMESTAMP = ? " +
|
||||
"WHERE ID = ?");
|
||||
stmt.setLong(1, System.currentTimeMillis() / 1000);
|
||||
stmt.setInt(2, id);
|
||||
stmt.executeUpdate();
|
||||
result = true;
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while update device mapping operation status " +
|
||||
"metadata", e);
|
||||
} finally {
|
||||
OperationManagementDAOUtil.cleanupResources(stmt);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addOperationResponse(int enrolmentId, int operationId, Object operationResponse)
|
||||
throws OperationManagementDAOException {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user