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.NotificationStrategy;
|
||||||
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationExecutionFailedException;
|
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.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.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;
|
||||||
@ -106,16 +108,34 @@ public class OperationManagerImpl implements OperationManager {
|
|||||||
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation operationDto =
|
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation operationDto =
|
||||||
OperationDAOUtil.convertOperation(operation);
|
OperationDAOUtil.convertOperation(operation);
|
||||||
int operationId = this.lookupOperationDAO(operation).addOperation(operationDto);
|
int operationId = this.lookupOperationDAO(operation).addOperation(operationDto);
|
||||||
|
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) {
|
||||||
|
isNotRepeated = true;
|
||||||
|
}
|
||||||
|
|
||||||
//TODO have to create a sql to load device details from deviceDAO using single query.
|
//TODO have to create a sql to load device details from deviceDAO using single query.
|
||||||
|
String operationCode = operationDto.getCode();
|
||||||
for (DeviceIdentifier deviceId : deviceIds) {
|
for (DeviceIdentifier deviceId : deviceIds) {
|
||||||
Device device = getDevice(deviceId);
|
Device device = getDevice(deviceId);
|
||||||
if (operationDto.getControl() ==
|
enrolmentId = device.getEnrolmentInfo().getId();
|
||||||
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Control.NO_REPEAT) {
|
//Do not repeat the task operations
|
||||||
operationDAO.updateEnrollmentOperationsStatus(device.getEnrolmentInfo().getId(), operationDto.getCode(),
|
if (isScheduledOperation) {
|
||||||
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Status.PENDING,
|
hasExistingTaskOperation = operationDAO.updateTaskOperation(enrolmentId, operationCode);
|
||||||
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Status.REPEATED);
|
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) {
|
if (notificationStrategy != null) {
|
||||||
try {
|
try {
|
||||||
notificationStrategy.execute(new NotificationContext(deviceId, operation));
|
notificationStrategy.execute(new NotificationContext(deviceId, operation));
|
||||||
@ -129,7 +149,7 @@ public class OperationManagerImpl implements OperationManager {
|
|||||||
OperationManagementDAOFactory.commitTransaction();
|
OperationManagementDAOFactory.commitTransaction();
|
||||||
Activity activity = new Activity();
|
Activity activity = new Activity();
|
||||||
activity.setActivityId(DeviceManagementConstants.OperationAttributes.ACTIVITY + operationId);
|
activity.setActivityId(DeviceManagementConstants.OperationAttributes.ACTIVITY + operationId);
|
||||||
activity.setCode(operationDto.getCode());
|
activity.setCode(operationCode);
|
||||||
activity.setCreatedTimeStamp(new Date().toString());
|
activity.setCreatedTimeStamp(new Date().toString());
|
||||||
activity.setType(Activity.Type.valueOf(operationDto.getType().toString()));
|
activity.setType(Activity.Type.valueOf(operationDto.getType().toString()));
|
||||||
return activity;
|
return activity;
|
||||||
@ -788,4 +808,15 @@ public class OperationManagerImpl implements OperationManager {
|
|||||||
return enrolmentId;
|
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,
|
void updateEnrollmentOperationsStatus(int enrolmentId, String operationCode, Operation.Status existingStatus,
|
||||||
Operation.Status newStatus) throws OperationManagementDAOException;
|
Operation.Status newStatus) throws OperationManagementDAOException;
|
||||||
|
|
||||||
|
boolean updateTaskOperation(int enrolmentId, String operationCode) throws OperationManagementDAOException;
|
||||||
|
|
||||||
void addOperationResponse(int enrolmentId, int operationId, Object operationResponse)
|
void addOperationResponse(int enrolmentId, int operationId, Object operationResponse)
|
||||||
throws OperationManagementDAOException;
|
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
|
@Override
|
||||||
public void addOperationResponse(int enrolmentId, int operationId, Object operationResponse)
|
public void addOperationResponse(int enrolmentId, int operationId, Object operationResponse)
|
||||||
throws OperationManagementDAOException {
|
throws OperationManagementDAOException {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user