Refactor Operations

revert-70aa11f8
manoj 10 years ago
parent 21782b0714
commit 41edb530bc

@ -60,4 +60,5 @@ public interface DeviceDAO {
*/ */
List<Device> getDeviceListOfUser(String username , int tenantId) throws DeviceManagementDAOException; List<Device> getDeviceListOfUser(String username , int tenantId) throws DeviceManagementDAOException;
} }

@ -32,9 +32,9 @@ import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationDAO;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationMappingDAO; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationMappingDAO;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.util.OperationDAOUtil;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
/** /**
@ -67,7 +67,11 @@ public class OperationManagerImpl implements OperationManager {
List<DeviceIdentifier> devices) throws OperationManagementException { List<DeviceIdentifier> devices) throws OperationManagementException {
try { try {
OperationManagementDAOFactory.beginTransaction(); OperationManagementDAOFactory.beginTransaction();
int operationId = this.lookupOperationDAO(operation).addOperation(operation);
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation operationDto = OperationDAOUtil
.convertOperation(operation);
int operationId = this.lookupOperationDAO(operation).addOperation(operationDto);
for (DeviceIdentifier deviceIdentifier : devices) { for (DeviceIdentifier deviceIdentifier : devices) {
Device device = deviceDAO.getDevice(deviceIdentifier); Device device = deviceDAO.getDevice(deviceIdentifier);
operationMappingDAO.addOperationMapping(operationId, device.getId()); operationMappingDAO.addOperationMapping(operationId, device.getId());
@ -95,20 +99,24 @@ public class OperationManagerImpl implements OperationManager {
public List<? extends Operation> getOperations(DeviceIdentifier deviceId) throws OperationManagementException { public List<? extends Operation> getOperations(DeviceIdentifier deviceId) throws OperationManagementException {
try { try {
List<Operation> operations = new ArrayList<Operation>(); List<Operation> operations = new ArrayList<Operation>();
Device device;
OperationManagementDAOFactory.beginTransaction();
operations.addAll(profileOperationDAO.getOperations(deviceId));
operations.addAll(configOperationDAO.getOperations(deviceId));
operations.addAll(commandOperationDAO.getOperations(deviceId));
OperationManagementDAOFactory.commitTransaction();
return operations;
} catch (OperationManagementDAOException e) {
try { try {
OperationManagementDAOFactory.rollbackTransaction(); device = deviceDAO.getDevice(deviceId);
} catch (OperationManagementDAOException e1) { } catch (DeviceManagementDAOException deviceDAOException) {
log.warn("Error occurred while roll-backing the transaction", e1); String errorMsg = "Error occurred while retrieving the device " +
"for device Identifier type -'" + deviceId.getType() + "' and device Id '" + deviceId.getId();
log.error(errorMsg, deviceDAOException);
throw new OperationManagementException(errorMsg, deviceDAOException);
}
List<? extends org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation> operationList = operationDAO
.getOperationsForDevice(device.getId());
Operation operation;
for (org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation dtoOperation : operationList) {
operation = OperationDAOUtil.convertOperation(dtoOperation);
operations.add(operation);
} }
return operations;
} catch (OperationManagementDAOException e) {
throw new OperationManagementException("Error occurred while retrieving the list of " + throw new OperationManagementException("Error occurred while retrieving the list of " +
"operations assigned for '" + deviceId.getType() + "' device '" + deviceId.getId() + "'", e); "operations assigned for '" + deviceId.getType() + "' device '" + deviceId.getId() + "'", e);
} }
@ -119,25 +127,28 @@ public class OperationManagerImpl implements OperationManager {
DeviceIdentifier deviceId) throws OperationManagementException { DeviceIdentifier deviceId) throws OperationManagementException {
try { try {
List<Operation> operations = new ArrayList<Operation>(); List<Operation> operations = new ArrayList<Operation>();
List<? extends org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation> dtoOperationList = operationDAO
.getOperationsForStatus(org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Status.PENDING);
Operation operation;
for (org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation dtoOperation : dtoOperationList) {
operation = OperationDAOUtil.convertOperation(dtoOperation);
operations.add(operation);
}
operations.addAll(profileOperationDAO.getOperations(deviceId, Operation.Status.PENDING));
operations.addAll(configOperationDAO.getOperations(deviceId, Operation.Status.PENDING));
operations.addAll(commandOperationDAO.getOperations(deviceId, Operation.Status.PENDING));
return operations; return operations;
} catch (OperationManagementDAOException e) { } catch (OperationManagementDAOException e) {
throw new OperationManagementException("Error occurred while retrieving the list of " + throw new OperationManagementException("Error occurred while retrieving the list of " +
"pending operations assigned for '" + deviceId.getType() + "' device '" + "pending operations assigned for '" + deviceId.getType() + "' device '" +
deviceId.getId() + "'", e); deviceId.getId() + "'", e);
} }
} }
@Override @Override
public Operation getNextPendingOperation(DeviceIdentifier deviceId) throws OperationManagementException { public Operation getNextPendingOperation(DeviceIdentifier deviceId) throws OperationManagementException {
try { try {
Operation operation = operationDAO.getNextOperation(deviceId); org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation dtoOperation = operationDAO
if (operation!=null && operation.getType().equals(Operation.Type.PROFILE)){ .getNextOperation(deviceId);
operation = profileOperationDAO.getNextOperation(deviceId); Operation operation = OperationDAOUtil.convertOperation(dtoOperation);
}
return operation; return operation;
} catch (OperationManagementDAOException e) { } catch (OperationManagementDAOException e) {
throw new OperationManagementException("Error occurred while retrieving next pending operation", e); throw new OperationManagementException("Error occurred while retrieving next pending operation", e);
@ -149,18 +160,20 @@ public class OperationManagerImpl implements OperationManager {
throws OperationManagementException { throws OperationManagementException {
try { try {
Operation operation = operationDAO.getOperation(operationId); org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation dtoOperation = operationDAO.getOperation
operation.setStatus(operationStatus); (operationId);
dtoOperation.setStatus(org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Status.valueOf
(operationStatus.toString()));
OperationManagementDAOFactory.beginTransaction(); OperationManagementDAOFactory.beginTransaction();
operationDAO.updateOperation(operation); operationDAO.updateOperation(dtoOperation);
OperationManagementDAOFactory.commitTransaction(); OperationManagementDAOFactory.commitTransaction();
}catch(OperationManagementDAOException ex){ } catch (OperationManagementDAOException ex) {
try { try {
OperationManagementDAOFactory.rollbackTransaction(); OperationManagementDAOFactory.rollbackTransaction();
} catch (OperationManagementDAOException e1) { } catch (OperationManagementDAOException e1) {
log.warn("Error occurred while roll-backing the update operation transaction", e1); log.warn("Error occurred while roll-backing the update operation transaction", e1);
} }
log.error("Error occurred while updating the operation: "+operationId); log.error("Error occurred while updating the operation: " + operationId);
throw new OperationManagementException("Error occurred while update operation", ex); throw new OperationManagementException("Error occurred while update operation", ex);
} }
@ -174,7 +187,7 @@ public class OperationManagerImpl implements OperationManager {
return profileOperationDAO; return profileOperationDAO;
} else if (operation instanceof ConfigOperation) { } else if (operation instanceof ConfigOperation) {
return configOperationDAO; return configOperationDAO;
}else{ } else {
return operationDAO; return operationDAO;
} }
} }

@ -19,7 +19,7 @@
package org.wso2.carbon.device.mgt.core.operation.mgt.dao; package org.wso2.carbon.device.mgt.core.operation.mgt.dao;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation;
import java.util.List; import java.util.List;
@ -33,16 +33,15 @@ public interface OperationDAO {
Operation getOperation(int operationId) throws OperationManagementDAOException; Operation getOperation(int operationId) throws OperationManagementDAOException;
Operation getOperation(DeviceIdentifier deviceId, int operationId) throws OperationManagementDAOException; Operation getOperationByDeviceAndId(int deviceId,
int operationId) throws OperationManagementDAOException;
Operation getOperation(DeviceIdentifier deviceIdentifier, Operation.Status status) throws OperationManagementDAOException; List<? extends Operation> getOperationsByDeviceAndStatus(int deviceId, Operation.Status status) throws
OperationManagementDAOException;
List<? extends Operation> getOperations(DeviceIdentifier deviceId) throws OperationManagementDAOException; List<? extends Operation> getOperationsForDevice(int deviceId) throws OperationManagementDAOException;
List<? extends Operation> getOperations(DeviceIdentifier deviceId, List<? extends Operation> getOperationsForStatus(Operation.Status status) throws OperationManagementDAOException;
Operation.Status status) throws OperationManagementDAOException;
List<? extends Operation> getOperations(Operation.Status status) throws OperationManagementDAOException;
Operation getNextOperation(DeviceIdentifier deviceId) throws OperationManagementDAOException; Operation getNextOperation(DeviceIdentifier deviceId) throws OperationManagementDAOException;

@ -74,7 +74,7 @@ public class OperationManagementDAOFactory {
} }
} }
public static Connection openConnection() throws OperationManagementDAOException { public static Connection getConnection() throws OperationManagementDAOException {
if (currentConnection.get() == null) { if (currentConnection.get() == null) {
try { try {
currentConnection.set(dataSource.getConnection()); currentConnection.set(dataSource.getConnection());

@ -19,8 +19,8 @@
package org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl; package org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.core.dto.operation.mgt.CommandOperation;
import org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation; import org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOUtil; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOUtil;
@ -42,7 +42,7 @@ public class CommandOperationDAOImpl extends OperationDAOImpl {
PreparedStatement stmt = null; PreparedStatement stmt = null;
try { try {
Connection conn = OperationManagementDAOFactory.openConnection(); Connection conn = OperationManagementDAOFactory.getConnection();
stmt = conn.prepareStatement("INSERT INTO DM_COMMAND_OPERATION(OPERATION_ID, ENABLED) VALUES(?, ?)"); stmt = conn.prepareStatement("INSERT INTO DM_COMMAND_OPERATION(OPERATION_ID, ENABLED) VALUES(?, ?)");
stmt.setInt(1, operationId); stmt.setInt(1, operationId);
stmt.setBoolean(2, commandOp.isEnabled()); stmt.setBoolean(2, commandOp.isEnabled());
@ -55,151 +55,12 @@ public class CommandOperationDAOImpl extends OperationDAOImpl {
return operationId; return operationId;
} }
public Operation getOperation(int id) throws OperationManagementDAOException {
PreparedStatement stmt = null;
ResultSet rs = null;
Operation operation = null;
try {
Connection conn = OperationManagementDAOFactory.openConnection();
String sql = "SELECT o.ID, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS, o.OPERATIONCODE," +
"co.ENABLED FROM DM_OPERATION o INNER JOIN DM_COMMAND_OPERATION co ON " +
"co.OPERATION_ID = o.ID WHERE o.ID=?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, id);
rs = stmt.executeQuery();
if (rs.next()) {
operation = new Operation();
operation.setId(rs.getInt("ID"));
operation.setType(Operation.Type.valueOf(rs.getString("TYPE")));
operation.setCreatedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
if (rs.getTimestamp("RECEIVED_TIMESTAMP") == null) {
operation.setReceivedTimeStamp("");
} else {
operation.setReceivedTimeStamp(rs.getTimestamp("RECEIVED_TIMESTAMP").toString());
}
operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS")));
operation.setCode(rs.getString("OPERATIONCODE"));
}
} catch (SQLException e) {
throw new OperationManagementDAOException("Error occurred while retrieving the operation object " +
"available for the id '" + id + "'", e);
} finally {
OperationManagementDAOUtil.cleanupResources(stmt, rs);
OperationManagementDAOFactory.closeConnection();
}
return operation;
}
public List<? extends Operation> getOperations(DeviceIdentifier deviceId,
Operation.Status status) throws OperationManagementDAOException {
PreparedStatement stmt = null;
ResultSet rs = null;
List<Operation> operationList = new ArrayList<Operation>();
Operation operation;
try {
Connection conn = OperationManagementDAOFactory.openConnection();
String sql = "SELECT po.OPERATION_ID, po.TYPE, po.CREATED_TIMESTAMP, po.RECEIVED_TIMESTAMP, po.STATUS, " +
"co.ENABLED,o.OPERATIONCODE FROM DM_COMMAND_OPERATION co INNER JOIN (SELECT o.ID AS OPERATION_ID, o.TYPE, "
+
"o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS, o.OPERATIONCODE FROM DM_OPERATION o INNER JOIN ("
+
"SELECT dom.OPERATION_ID AS OP_ID FROM (SELECT d.ID FROM DM_DEVICE d INNER JOIN " +
"DM_DEVICE_TYPE dm ON d.DEVICE_TYPE_ID = dm.ID AND dm.NAME = ? AND " +
"d.DEVICE_IDENTIFICATION = ?) d1 INNER JOIN DM_DEVICE_OPERATION_MAPPING dom ON d1.ID = " +
"dom.DEVICE_ID) ois ON o.ID = ois.OP_ID AND o.STATUS = ? ORDER BY " +
"o.CREATED_TIMESTAMP ASC) po ON co.OPERATION_ID = po.OPERATION_ID";
stmt = conn.prepareStatement(sql);
stmt.setString(1, deviceId.getType());
stmt.setString(2, deviceId.getId());
stmt.setString(3, status.toString());
rs = stmt.executeQuery(sql);
while (rs.next()) {
operation = new Operation();
operation.setId(rs.getInt("OPERATION_ID"));
operation.setType(Operation.Type.valueOf(rs.getString("TYPE")));
operation.setCreatedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
if (rs.getTimestamp("RECEIVED_TIMESTAMP") != null) {
operation.setCreatedTimeStamp(rs.getTimestamp("RECEIVED_TIMESTAMP").toString());
} else {
operation.setCreatedTimeStamp(null);
}
operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS")));
operation.setEnabled(rs.getBoolean("ENABLED"));
operation.setCode(rs.getString("OPERATIONCODE"));
operationList.add(operation);
}
return operationList;
} catch (SQLException e) {
throw new OperationManagementDAOException("Error occurred while retrieving the list of " +
"operations with the status '" + status + "' available for the '" + deviceId.getType() +
"' device '" + deviceId.getId() + "'");
} finally {
OperationManagementDAOUtil.cleanupResources(stmt, rs);
OperationManagementDAOFactory.closeConnection();
}
}
public List<? extends Operation> getOperations(DeviceIdentifier deviceId) throws OperationManagementDAOException {
PreparedStatement stmt = null;
ResultSet rs = null;
try {
Connection conn = OperationManagementDAOFactory.openConnection();
String sql = "SELECT po.OPERATION_ID, po.TYPE, po.CREATED_TIMESTAMP, po.RECEIVED_TIMESTAMP, po.STATUS, " +
"co.ENABLED.o.OPERATIONCODE FROM DM_COMMAND_OPERATION co INNER JOIN (SELECT o.ID AS OPERATION_ID, o.TYPE, "
+
"o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS, o.OPERATIONCODE FROM DM_OPERATION o INNER JOIN ("
+
"SELECT dom.OPERATION_ID AS OP_ID FROM (SELECT d.ID FROM DM_DEVICE d INNER JOIN " +
"DM_DEVICE_TYPE dm ON d.DEVICE_TYPE_ID = dm.ID AND dm.NAME = ? AND " +
"d.DEVICE_IDENTIFICATION = ?) d1 INNER JOIN DM_DEVICE_OPERATION_MAPPING dom ON d1.ID = " +
"dom.DEVICE_ID) ois ON o.ID = ois.OP_ID ORDER BY " +
"o.CREATED_TIMESTAMP ASC) po ON co.OPERATION_ID = po.OPERATION_ID";
stmt = conn.prepareStatement(sql);
stmt.setString(1, deviceId.getType());
stmt.setString(2, deviceId.getId());
rs = stmt.executeQuery();
List<CommandOperation> operations = new ArrayList<CommandOperation>();
while (rs.next()) {
CommandOperation operation = new CommandOperation();
operation.setId(rs.getInt("ID"));
operation.setType(Operation.Type.valueOf(rs.getString("TYPE")));
operation.setCreatedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
if (rs.getTimestamp("RECEIVED_TIMESTAMP") == null) {
operation.setReceivedTimeStamp(null);
} else {
operation.setReceivedTimeStamp(rs.getTimestamp("RECEIVED_TIMESTAMP").toString());
}
operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS")));
operation.setEnabled(Boolean.parseBoolean(rs.getString("ENABLED")));
operation.setCode(rs.getString("OPERATIONCODE"));
operations.add(operation);
}
return operations;
} catch (SQLException e) {
throw new OperationManagementDAOException("Error occurred while retrieving the list of " +
"operations available for the '" + deviceId.getType() + "' device '" + deviceId.getId() + "'");
} finally {
OperationManagementDAOUtil.cleanupResources(stmt, rs);
OperationManagementDAOFactory.closeConnection();
}
}
@Override @Override
public void updateOperation(Operation operation) throws OperationManagementDAOException { public void updateOperation(Operation operation) throws OperationManagementDAOException {
PreparedStatement stmt = null; PreparedStatement stmt = null;
try { try {
Connection connection = OperationManagementDAOFactory.openConnection(); Connection connection = OperationManagementDAOFactory.getConnection();
stmt = connection.prepareStatement( stmt = connection.prepareStatement(
"UPDATE DM_COMMAND_OPERATION O SET O.ENABLED=? WHERE O.OPERATION_ID=?"); "UPDATE DM_COMMAND_OPERATION O SET O.ENABLED=? WHERE O.OPERATION_ID=?");
@ -221,7 +82,7 @@ public class CommandOperationDAOImpl extends OperationDAOImpl {
super.deleteOperation(id); super.deleteOperation(id);
PreparedStatement stmt = null; PreparedStatement stmt = null;
try { try {
Connection connection = OperationManagementDAOFactory.openConnection(); Connection connection = OperationManagementDAOFactory.getConnection();
stmt = connection.prepareStatement("DELETE DM_COMMAND_OPERATION WHERE OPERATION_ID=?"); stmt = connection.prepareStatement("DELETE DM_COMMAND_OPERATION WHERE OPERATION_ID=?");
stmt.setInt(1, id); stmt.setInt(1, id);
stmt.executeUpdate(); stmt.executeUpdate();

@ -18,7 +18,8 @@
*/ */
package org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl; package org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.core.operation.mgt.ConfigOperation; import org.wso2.carbon.device.mgt.core.operation.mgt.ConfigOperation;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory;
@ -36,7 +37,7 @@ public class ConfigOperationDAOImpl extends OperationDAOImpl {
int operationId = super.addOperation(operation); int operationId = super.addOperation(operation);
PreparedStatement stmt = null; PreparedStatement stmt = null;
try { try {
Connection conn = OperationManagementDAOFactory.openConnection(); Connection conn = OperationManagementDAOFactory.getConnection();
stmt = conn.prepareStatement("INSERT INTO DM_CONFIG_OPERATION(OPERATION_ID) VALUES(?)"); stmt = conn.prepareStatement("INSERT INTO DM_CONFIG_OPERATION(OPERATION_ID) VALUES(?)");
stmt.setInt(1, operationId); stmt.setInt(1, operationId);
stmt.executeUpdate(); stmt.executeUpdate();
@ -54,7 +55,7 @@ public class ConfigOperationDAOImpl extends OperationDAOImpl {
super.deleteOperation(id); super.deleteOperation(id);
PreparedStatement stmt = null; PreparedStatement stmt = null;
try { try {
Connection connection = OperationManagementDAOFactory.openConnection(); Connection connection = OperationManagementDAOFactory.getConnection();
stmt = connection.prepareStatement("DELETE DM_CONFIG_OPERATION WHERE OPERATION_ID=?") ; stmt = connection.prepareStatement("DELETE DM_CONFIG_OPERATION WHERE OPERATION_ID=?") ;
stmt.setInt(1, id); stmt.setInt(1, id);
stmt.executeUpdate(); stmt.executeUpdate();

@ -18,13 +18,19 @@
*/ */
package org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl; package org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.core.dto.operation.mgt.ProfileOperation;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationDAO; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationDAO;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOUtil; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOUtil;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.sql.*; import java.sql.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
@ -32,14 +38,16 @@ import java.util.List;
public class OperationDAOImpl implements OperationDAO { public class OperationDAOImpl implements OperationDAO {
private static final Log log = LogFactory.getLog(OperationDAOImpl.class);
public int addOperation(Operation operation) throws OperationManagementDAOException { public int addOperation(Operation operation) throws OperationManagementDAOException {
PreparedStatement stmt = null; PreparedStatement stmt = null;
ResultSet rs = null; ResultSet rs = null;
try { try {
Connection connection = OperationManagementDAOFactory.openConnection(); Connection connection = OperationManagementDAOFactory.getConnection();
stmt = connection.prepareStatement( stmt = connection.prepareStatement(
"INSERT INTO DM_OPERATION(TYPE, CREATED_TIMESTAMP, RECEIVED_TIMESTAMP, STATUS, OPERATIONCODE) " + "INSERT INTO DM_OPERATION(TYPE, CREATED_TIMESTAMP, RECEIVED_TIMESTAMP, STATUS, OPERATION_CODE) " +
"VALUES (?, ?, ?, ?,?)"); "VALUES (?, ?, ?, ?,?)");
stmt.setString(1, operation.getType().toString()); stmt.setString(1, operation.getType().toString());
stmt.setTimestamp(2, new Timestamp(new Date().getTime())); stmt.setTimestamp(2, new Timestamp(new Date().getTime()));
@ -66,7 +74,7 @@ public class OperationDAOImpl implements OperationDAO {
PreparedStatement stmt = null; PreparedStatement stmt = null;
try { try {
Connection connection = OperationManagementDAOFactory.openConnection(); Connection connection = OperationManagementDAOFactory.getConnection();
stmt = connection.prepareStatement("UPDATE DM_OPERATION O SET O.RECEIVED_TIMESTAMP=?,O.STATUS=? " + stmt = connection.prepareStatement("UPDATE DM_OPERATION O SET O.RECEIVED_TIMESTAMP=?,O.STATUS=? " +
"WHERE O.ID=?"); "WHERE O.ID=?");
@ -87,7 +95,7 @@ public class OperationDAOImpl implements OperationDAO {
PreparedStatement stmt = null; PreparedStatement stmt = null;
try { try {
Connection connection = OperationManagementDAOFactory.openConnection(); Connection connection = OperationManagementDAOFactory.getConnection();
stmt = connection.prepareStatement("DELETE DM_OPERATION WHERE ID=?"); stmt = connection.prepareStatement("DELETE DM_OPERATION WHERE ID=?");
stmt.setInt(1, id); stmt.setInt(1, id);
stmt.executeUpdate(); stmt.executeUpdate();
@ -98,22 +106,37 @@ public class OperationDAOImpl implements OperationDAO {
} }
} }
@Override
public Operation getOperation(int id) throws OperationManagementDAOException { public Operation getOperation(int id) throws OperationManagementDAOException {
PreparedStatement stmt = null; PreparedStatement stmt = null;
ResultSet rs = null; ResultSet rs = null;
Operation operation = null; Operation operation = null;
ByteArrayInputStream bais;
ObjectInputStream ois;
try { try {
Connection conn = OperationManagementDAOFactory.openConnection(); Connection conn = OperationManagementDAOFactory.getConnection();
String sql = String sql = "SELECT o.ID, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS, o.OPERATION_CODE," +
"SELECT o.ID, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS, o.OPERATIONCODE FROM " + "po.OPERATION_DETAILS,co.ENABLED from " +
"DM_OPERATION o WHERE o.ID=?"; "(SELECT ID, TYPE, CREATED_TIMESTAMP, RECEIVED_TIMESTAMP, STATUS, OPERATION_CODE FROM " +
" DM_OPERATION WHERE id=?) o" +
"LEFT OUTER JOIN DM_PROFILE_OPERATION po on o.ID =po.OPERATION_ID" +
"LEFT OUTER JOIN DM_COMMAND_OPERATION co on co.OPERATION_ID=o.ID";
stmt = conn.prepareStatement(sql); stmt = conn.prepareStatement(sql);
stmt.setInt(1, id); stmt.setInt(1, id);
rs = stmt.executeQuery(); rs = stmt.executeQuery();
if (rs.next()) { if (rs.next()) {
if (rs.getBytes("OPERATION_DETAILS") != null) {
byte[] operationDetails;
operationDetails = rs.getBytes("OPERATION_DETAILS");
bais = new ByteArrayInputStream(operationDetails);
ois = new ObjectInputStream(bais);
operation = (ProfileOperation) ois.readObject();
} else {
operation = new Operation(); operation = new Operation();
operation.setId(rs.getInt("ID")); operation.setId(rs.getInt("ID"));
operation.setType(Operation.Type.valueOf(rs.getString("TYPE"))); operation.setType(Operation.Type.valueOf(rs.getString("TYPE")));
@ -123,12 +146,24 @@ public class OperationDAOImpl implements OperationDAO {
} else { } else {
operation.setReceivedTimeStamp(rs.getTimestamp("RECEIVED_TIMESTAMP").toString()); operation.setReceivedTimeStamp(rs.getTimestamp("RECEIVED_TIMESTAMP").toString());
} }
operation.setEnabled(rs.getBoolean("ENABLED"));
operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS"))); operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS")));
operation.setCode(rs.getString("OPERATIONCODE")); operation.setCode(rs.getString("OPERATION_CODE"));
}
} }
} catch (IOException e) {
String errorMsg = "IO Error occurred while de serialize the profile operation object";
log.error(errorMsg, e);
throw new OperationManagementDAOException(errorMsg, e);
} catch (ClassNotFoundException e) {
String errorMsg = "Class not found error occurred while de serialize the profile operation object";
log.error(errorMsg, e);
throw new OperationManagementDAOException(errorMsg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new OperationManagementDAOException("Error occurred while retrieving the operation object " + String errorMsg = "SQL Error occurred while retrieving the operation object " +
"available for the id '" + id + "'", e); "available for the id '" + id;
log.error(errorMsg, e);
throw new OperationManagementDAOException(errorMsg, e);
} finally { } finally {
OperationManagementDAOUtil.cleanupResources(stmt, rs); OperationManagementDAOUtil.cleanupResources(stmt, rs);
OperationManagementDAOFactory.closeConnection(); OperationManagementDAOFactory.closeConnection();
@ -137,32 +172,40 @@ public class OperationDAOImpl implements OperationDAO {
} }
@Override @Override
public Operation getOperation(DeviceIdentifier deviceIdentifier, int operationId) public Operation getOperationByDeviceAndId(int deviceId, int operationId) throws OperationManagementDAOException {
throws OperationManagementDAOException {
PreparedStatement stmt = null; PreparedStatement stmt = null;
ResultSet rs = null; ResultSet rs = null;
Operation operation = null; Operation operation = null;
ByteArrayInputStream bais;
ObjectInputStream ois;
try { try {
Connection conn = OperationManagementDAOFactory.openConnection(); Connection conn = OperationManagementDAOFactory.getConnection();
String sql = String sql = "SELECT o.ID, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS, o.OPERATION_CODE," +
"SELECT o.ID, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS, o.OPERATIONCODE FROM " + "po.OPERATION_DETAILS,co.ENABLED from " +
"DM_OPERATION o " + "(SELECT ID, TYPE, CREATED_TIMESTAMP, RECEIVED_TIMESTAMP, STATUS, " +
"INNER JOIN (SELECT dom.OPERATION_ID AS OP_ID FROM " + "OPERATION_CODE FROM DM_OPERATION WHERE id=?) o INNER JOIN (Select * from " +
"(SELECT d.ID FROM DM_DEVICE d INNER " + "DM_DEVICE_OPERATION_MAPPING dm where dm.OPERATION_ID=? AND dm.DEVICE_ID=?) om " +
"JOIN " + "ON o.ID = om.OPERATION_ID " +
"DM_DEVICE_TYPE dm ON d.DEVICE_TYPE_ID = dm.ID AND dm.NAME = ? AND d" + "LEFT OUTER JOIN DM_PROFILE_OPERATION po on o.ID = po.OPERATION_ID " +
".DEVICE_IDENTIFICATION = ?) d1 " + "LEFT OUTER JOIN DM_COMMAND_OPERATION co on co.OPERATION_ID=o.ID";
"INNER JOIN DM_DEVICE_OPERATION_MAPPING dom ON d1.ID = dom.DEVICE_ID) ois " +
"ON o.ID = ois.OP_ID WHERE o.ID=?";
stmt = conn.prepareStatement(sql); stmt = conn.prepareStatement(sql);
stmt.setString(1, deviceIdentifier.getType()); stmt.setInt(1, operationId);
stmt.setString(2, deviceIdentifier.getId()); stmt.setInt(2, operationId);
stmt.setInt(3, operationId); stmt.setInt(3, deviceId);
rs = stmt.executeQuery(); rs = stmt.executeQuery();
if (rs.next()) { if (rs.next()) {
if (rs.getBytes("OPERATION_DETAILS") != null) {
byte[] operationDetails;
operationDetails = rs.getBytes("OPERATION_DETAILS");
bais = new ByteArrayInputStream(operationDetails);
ois = new ObjectInputStream(bais);
operation = (ProfileOperation) ois.readObject();
} else {
operation = new Operation(); operation = new Operation();
operation.setId(rs.getInt("ID")); operation.setId(rs.getInt("ID"));
operation.setType(Operation.Type.valueOf(rs.getString("TYPE"))); operation.setType(Operation.Type.valueOf(rs.getString("TYPE")));
@ -173,11 +216,25 @@ public class OperationDAOImpl implements OperationDAO {
operation.setReceivedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString()); operation.setReceivedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
} }
operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS"))); operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS")));
operation.setCode(rs.getString("OPERATIONCODE")); operation.setCode(rs.getString("OPERATION_CODE"));
}
} }
} catch (IOException ex) {
String errorMsg = "IO error occurred while de serializing the profile operation available for the " +
"device:" + deviceId + "' with id '" + operationId;
log.error(errorMsg);
throw new OperationManagementDAOException(errorMsg, ex);
} catch (ClassNotFoundException ex) {
String errorMsg =
"class not found error occurred while de serializing the profile operation available for " +
"the device:" + deviceId + "' with id '" + operationId;
log.error(errorMsg);
throw new OperationManagementDAOException(errorMsg, ex);
} catch (SQLException e) { } catch (SQLException e) {
throw new OperationManagementDAOException("Error occurred while retrieving the operation list " + String errorMsg = "SQL error occurred while retrieving the operation available for the device'" + deviceId +
"available for the '" + deviceIdentifier.getType() + "' with id '" + deviceIdentifier.getId() + "'", e); "' with id '" + operationId;
log.error(errorMsg);
throw new OperationManagementDAOException(errorMsg, e);
} finally { } finally {
OperationManagementDAOUtil.cleanupResources(stmt, rs); OperationManagementDAOUtil.cleanupResources(stmt, rs);
OperationManagementDAOFactory.closeConnection(); OperationManagementDAOFactory.closeConnection();
@ -186,36 +243,114 @@ public class OperationDAOImpl implements OperationDAO {
} }
@Override @Override
public Operation getOperation(DeviceIdentifier deviceId, public List<? extends Operation> getOperationsByDeviceAndStatus(int deviceId,
Operation.Status status) throws OperationManagementDAOException { Operation.Status status) throws OperationManagementDAOException {
return null;
PreparedStatement stmt = null;
ResultSet rs = null;
Operation operation = null;
ByteArrayInputStream bais;
ObjectInputStream ois;
List<Operation> operationList = new ArrayList<Operation>();
try {
Connection conn = OperationManagementDAOFactory.getConnection();
String sql = "SELECT o.ID, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS, o.OPERATIONCODE, " +
"po.OPERATIONDETAILS,co.ENABLED from " +
"(SELECT ID, TYPE, CREATED_TIMESTAMP, RECEIVED_TIMESTAMP, STATUS, " +
"OPERATIONCODE FROM DM_OPERATION WHERE STATUS=?) o " +
"INNER JOIN (Select * from DM_DEVICE_OPERATION_MAPPING dm " +
"where dm.DEVICE_ID=?) om ON o.ID = om.OPERATION_ID LEFT OUTER JOIN DM_PROFILE_OPERATION po ON " +
"o.ID =po.OPERATION_ID LEFT OUTER JOIN DM_COMMAND_OPERATION co ON co.OPERATION_ID=o.ID";
stmt = conn.prepareStatement(sql);
stmt.setString(1, status.toString());
stmt.setInt(2, deviceId);
rs = stmt.executeQuery();
while (rs.next()) {
if (rs.getBytes("OPERATION_DETAILS") != null) {
byte[] operationDetails;
operationDetails = rs.getBytes("OPERATION_DETAILS");
bais = new ByteArrayInputStream(operationDetails);
ois = new ObjectInputStream(bais);
operation = (ProfileOperation) ois.readObject();
} else {
operation = new Operation();
operation.setId(rs.getInt("ID"));
operation.setType(Operation.Type.valueOf(rs.getString("TYPE")));
operation.setCreatedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
if (rs.getTimestamp("CREATED_TIMESTAMP") == null) {
operation.setReceivedTimeStamp("");
} else {
operation.setReceivedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
}
operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS")));
operation.setCode(rs.getString("OPERATION_CODE"));
}
operationList.add(operation);
}
} catch (IOException ex) {
String errorMsg = "IO error occurred while de serializing the profile operation available for the " +
"device:" + deviceId + "' and status '" + status.toString();
log.error(errorMsg);
throw new OperationManagementDAOException(errorMsg, ex);
} catch (ClassNotFoundException ex) {
String errorMsg =
"class not found error occurred while de serializing the profile operation available for " +
"the device:" + deviceId + "' with status '" + status.toString();
log.error(errorMsg);
throw new OperationManagementDAOException(errorMsg, ex);
} catch (SQLException e) {
String errorMsg = "SQL error occurred while retrieving the operation available for the device'" + deviceId +
"' with status '" + status.toString();
log.error(errorMsg);
throw new OperationManagementDAOException(errorMsg, e);
} finally {
OperationManagementDAOUtil.cleanupResources(stmt, rs);
OperationManagementDAOFactory.closeConnection();
}
return operationList;
} }
@Override @Override
public List<? extends Operation> getOperations(DeviceIdentifier deviceId) throws OperationManagementDAOException { public List<? extends Operation> getOperationsForDevice(int deviceId)
throws OperationManagementDAOException {
List<Operation> operations;
PreparedStatement stmt = null; PreparedStatement stmt = null;
ResultSet rs = null; ResultSet rs = null;
Operation operation = null;
ByteArrayInputStream bais;
ObjectInputStream ois;
List<Operation> operationList = new ArrayList<Operation>();
try { try {
Connection conn = OperationManagementDAOFactory.openConnection(); Connection conn = OperationManagementDAOFactory.getConnection();
String sql = String sql = "SELECT o.ID, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS, o.OPERATIONCODE, " +
"SELECT o.ID, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS, o.OPERATIONCODE FROM " + "po.OPERATIONDETAILS,co.ENABLED from " +
"DM_OPERATION o " + "(SELECT ID, TYPE, CREATED_TIMESTAMP, RECEIVED_TIMESTAMP, STATUS, " +
"INNER JOIN (SELECT dom.OPERATION_ID AS OP_ID FROM (SELECT d.ID FROM DM_DEVICE d INNER " + "OPERATIONCODE FROM DM_OPERATION) o " +
"JOIN " + "INNER JOIN (Select * from DM_DEVICE_OPERATION_MAPPING dm " +
"DM_DEVICE_TYPE dm ON d.DEVICE_TYPE_ID = dm.ID AND dm.NAME = ? AND d" + "where dm.DEVICE_ID=?) om ON o.ID = om.OPERATION_ID LEFT OUTER JOIN DM_PROFILE_OPERATION po ON " +
".DEVICE_IDENTIFICATION = ?) d1 " + "o.ID =po.OPERATION_ID LEFT OUTER JOIN DM_COMMAND_OPERATION co ON co.OPERATION_ID=o.ID";
"INNER JOIN DM_DEVICE_OPERATION_MAPPING dom ON d1.ID = dom.DEVICE_ID) ois " +
"ON o.ID = ois.OP_ID";
stmt = conn.prepareStatement(sql); stmt = conn.prepareStatement(sql);
stmt.setString(1, deviceId.getType()); stmt.setInt(1, deviceId);
stmt.setString(2, deviceId.getId());
rs = stmt.executeQuery(); rs = stmt.executeQuery();
operations = new ArrayList<Operation>();
while (rs.next()) { while (rs.next()) {
Operation operation = new Operation(); if (rs.getBytes("OPERATION_DETAILS") != null) {
byte[] operationDetails;
operationDetails = rs.getBytes("OPERATION_DETAILS");
bais = new ByteArrayInputStream(operationDetails);
ois = new ObjectInputStream(bais);
operation = (ProfileOperation) ois.readObject();
} else {
operation = new Operation();
operation.setId(rs.getInt("ID")); operation.setId(rs.getInt("ID"));
operation.setType(Operation.Type.valueOf(rs.getString("TYPE"))); operation.setType(Operation.Type.valueOf(rs.getString("TYPE")));
operation.setCreatedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString()); operation.setCreatedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
@ -225,27 +360,101 @@ public class OperationDAOImpl implements OperationDAO {
operation.setReceivedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString()); operation.setReceivedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
} }
operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS"))); operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS")));
operation.setCode(rs.getString("OPERATIONCODE")); operation.setCode(rs.getString("OPERATION_CODE"));
} }
operationList.add(operation);
}
} catch (IOException ex) {
String errorMsg = "IO error occurred while de serializing the profile operation available for the " +
"device:" + deviceId;
log.error(errorMsg);
throw new OperationManagementDAOException(errorMsg, ex);
} catch (ClassNotFoundException ex) {
String errorMsg =
"class not found error occurred while de serializing the profile operation available for " +
"the device:" + deviceId;
log.error(errorMsg);
throw new OperationManagementDAOException(errorMsg, ex);
} catch (SQLException e) { } catch (SQLException e) {
throw new OperationManagementDAOException("Error occurred while retrieving the operation list " + String errorMsg = "SQL error occurred while retrieving the operation available for the device'" + deviceId +
"available for the '" + deviceId.getType() + "' with id '" + deviceId.getId() + "'", e); "' with status '";
log.error(errorMsg);
throw new OperationManagementDAOException(errorMsg, e);
} finally { } finally {
OperationManagementDAOUtil.cleanupResources(stmt, rs); OperationManagementDAOUtil.cleanupResources(stmt, rs);
OperationManagementDAOFactory.closeConnection(); OperationManagementDAOFactory.closeConnection();
} }
return operations; return operationList;
} }
@Override @Override
public List<? extends Operation> getOperations(DeviceIdentifier deviceId, public List<? extends Operation> getOperationsForStatus(Operation.Status status)
Operation.Status status) throws OperationManagementDAOException { throws OperationManagementDAOException {
return null;
}
@Override PreparedStatement stmt = null;
public List<? extends Operation> getOperations(Operation.Status status) throws OperationManagementDAOException { ResultSet rs = null;
return null; Operation operation = null;
ByteArrayInputStream bais;
ObjectInputStream ois;
List<Operation> operationList = new ArrayList<Operation>();
try {
Connection conn = OperationManagementDAOFactory.getConnection();
String sql = "SELECT o.ID, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS, o.OPERATION_CODE,"+
"po.OPERATION_DETAILS,co.ENABLED from "+
"(SELECT ID, TYPE, CREATED_TIMESTAMP, RECEIVED_TIMESTAMP, STATUS,"+
"OPERATIONCODE FROM DM_OPERATION WHERE STATUS=?) o "+
"LEFT OUTER JOIN DM_PROFILE_OPERATION po ON "+
"o.ID =po.OPERATION_ID LEFT OUTER JOIN DM_COMMAND_OPERATION co ON co.OPERATION_ID=o.ID";
stmt = conn.prepareStatement(sql);
stmt.setString(1, status.toString());
rs = stmt.executeQuery();
while (rs.next()) {
if (rs.getBytes("OPERATION_DETAILS") != null) {
byte[] operationDetails;
operationDetails = rs.getBytes("OPERATION_DETAILS");
bais = new ByteArrayInputStream(operationDetails);
ois = new ObjectInputStream(bais);
operation = (ProfileOperation) ois.readObject();
} else {
operation = new Operation();
operation.setId(rs.getInt("ID"));
operation.setType(Operation.Type.valueOf(rs.getString("TYPE")));
operation.setCreatedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
if (rs.getTimestamp("CREATED_TIMESTAMP") == null) {
operation.setReceivedTimeStamp("");
} else {
operation.setReceivedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
}
operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS")));
operation.setCode(rs.getString("OPERATION_CODE"));
}
operationList.add(operation);
}
} catch (IOException ex) {
String errorMsg = "IO error occurred while de serializing the profile operation available for the " +
"status:" + status.toString();
log.error(errorMsg);
throw new OperationManagementDAOException(errorMsg, ex);
} catch (ClassNotFoundException ex) {
String errorMsg =
"class not found error occurred while de serializing the profile operation available for " +
"the status:" + status.toString();
log.error(errorMsg);
throw new OperationManagementDAOException(errorMsg, ex);
} catch (SQLException e) {
String errorMsg = "SQL error occurred while retrieving the operation available for the status:'" +
status.toString();
log.error(errorMsg);
throw new OperationManagementDAOException(errorMsg, e);
} finally {
OperationManagementDAOUtil.cleanupResources(stmt, rs);
OperationManagementDAOFactory.closeConnection();
}
return operationList;
} }
@Override @Override
@ -253,14 +462,15 @@ public class OperationDAOImpl implements OperationDAO {
PreparedStatement stmt = null; PreparedStatement stmt = null;
ResultSet rs = null; ResultSet rs = null;
try { try {
Connection connection = OperationManagementDAOFactory.openConnection(); Connection connection = OperationManagementDAOFactory.getConnection();
stmt = connection.prepareStatement( stmt = connection.prepareStatement(
"SELECT o.ID, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS,o.OPERATIONCODE " + "SELECT o.ID, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS,o.OPERATION_CODE " +
" FROM DM_OPERATION o " + " FROM DM_OPERATION o " +
"INNER JOIN (SELECT dom.OPERATION_ID AS OP_ID FROM (SELECT d.ID " + "INNER JOIN (SELECT dom.OPERATION_ID AS OP_ID FROM (SELECT d.ID " +
"FROM DM_DEVICE d INNER JOIN DM_DEVICE_TYPE dm ON d.DEVICE_TYPE_ID = dm.ID AND " + "FROM DM_DEVICE d INNER JOIN DM_DEVICE_TYPE dm ON d.DEVICE_TYPE_ID = dm.ID AND " +
"dm.NAME = ? AND d.DEVICE_IDENTIFICATION = ?) d1 INNER JOIN " + "dm.NAME = ? AND d.DEVICE_IDENTIFICATION = ?) d1 INNER JOIN " +
"DM_DEVICE_OPERATION_MAPPING dom ON d1.ID = dom.DEVICE_ID) ois ON o.STATUS=? AND o.ID = ois.OP_ID " + "DM_DEVICE_OPERATION_MAPPING dom ON d1.ID = dom.DEVICE_ID) ois ON o.STATUS=? AND" +
" o.ID = ois.OP_ID " +
"ORDER BY o.CREATED_TIMESTAMP ASC LIMIT 1"); "ORDER BY o.CREATED_TIMESTAMP ASC LIMIT 1");
stmt.setString(1, deviceId.getType()); stmt.setString(1, deviceId.getType());
stmt.setString(2, deviceId.getId()); stmt.setString(2, deviceId.getId());
@ -280,7 +490,7 @@ public class OperationDAOImpl implements OperationDAO {
} else { } else {
operation.setReceivedTimeStamp(rs.getTimestamp("RECEIVED_TIMESTAMP").toString()); operation.setReceivedTimeStamp(rs.getTimestamp("RECEIVED_TIMESTAMP").toString());
} }
operation.setCode(rs.getString("OPERATIONCODE")); operation.setCode(rs.getString("OPERATION_CODE"));
} }
return operation; return operation;
} catch (SQLException e) { } catch (SQLException e) {

@ -33,7 +33,7 @@ public class OperationMappingDAOImpl implements OperationMappingDAO {
public void addOperationMapping(int operationId, Integer deviceId) throws OperationManagementDAOException { public void addOperationMapping(int operationId, Integer deviceId) throws OperationManagementDAOException {
PreparedStatement stmt = null; PreparedStatement stmt = null;
try { try {
Connection conn = OperationManagementDAOFactory.openConnection(); Connection conn = OperationManagementDAOFactory.getConnection();
String sql = "INSERT INTO DM_DEVICE_OPERATION_MAPPING(DEVICE_ID, OPERATION_ID) VALUES(?, ?)"; String sql = "INSERT INTO DM_DEVICE_OPERATION_MAPPING(DEVICE_ID, OPERATION_ID) VALUES(?, ?)";
stmt = conn.prepareStatement(sql); stmt = conn.prepareStatement(sql);
stmt.setInt(1, deviceId); stmt.setInt(1, deviceId);
@ -51,7 +51,7 @@ public class OperationMappingDAOImpl implements OperationMappingDAO {
Integer deviceIds) throws OperationManagementDAOException { Integer deviceIds) throws OperationManagementDAOException {
PreparedStatement stmt = null; PreparedStatement stmt = null;
try { try {
Connection conn = OperationManagementDAOFactory.openConnection(); Connection conn = OperationManagementDAOFactory.getConnection();
String sql = "DELETE FROM DM_DEVICE_OPERATION_MAPPING WHERE DEVICE_ID = ? AND OPERATION_ID = ?"; String sql = "DELETE FROM DM_DEVICE_OPERATION_MAPPING WHERE DEVICE_ID = ? AND OPERATION_ID = ?";
stmt = conn.prepareStatement(sql); stmt = conn.prepareStatement(sql);
stmt.setInt(1, 0); stmt.setInt(1, 0);

@ -21,8 +21,8 @@ package org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.core.operation.mgt.ProfileOperation; import org.wso2.carbon.device.mgt.core.dto.operation.mgt.ProfileOperation;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOUtil; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOUtil;
@ -39,8 +39,9 @@ public class ProfileOperationDAOImpl extends OperationDAOImpl {
int operationId = super.addOperation(operation); int operationId = super.addOperation(operation);
operation.setCreatedTimeStamp(new Timestamp(new java.util.Date().getTime()).toString()); operation.setCreatedTimeStamp(new Timestamp(new java.util.Date().getTime()).toString());
operation.setId(operationId); operation.setId(operationId);
operation.setEnabled(true);
ProfileOperation profileOp = (ProfileOperation) operation; ProfileOperation profileOp = (ProfileOperation) operation;
Connection conn = OperationManagementDAOFactory.openConnection(); Connection conn = OperationManagementDAOFactory.getConnection();
PreparedStatement stmt = null; PreparedStatement stmt = null;
@ -58,53 +59,6 @@ public class ProfileOperationDAOImpl extends OperationDAOImpl {
return operationId; return operationId;
} }
@Override
public Operation getOperation(int operationId) throws OperationManagementDAOException {
Connection conn = OperationManagementDAOFactory.openConnection();
PreparedStatement stmt = null;
ResultSet rs = null;
ByteArrayInputStream bais = null;
ObjectInputStream ois = null;
try {
stmt = conn.prepareStatement("SELECT OPERATION_DETAILS FROM DM_PROFILE_OPERATION WHERE OPERATION_ID = ?");
stmt.setInt(1, operationId);
rs = stmt.executeQuery();
byte[] operationDetails = new byte[0];
if (rs.next()) {
operationDetails = rs.getBytes("OPERATIONDETAILS");
}
bais = new ByteArrayInputStream(operationDetails);
ois = new ObjectInputStream(bais);
return (ProfileOperation) ois.readObject();
} catch (SQLException e) {
throw new OperationManagementDAOException("Error occurred while adding profile operation", e);
} catch (IOException e) {
throw new OperationManagementDAOException("Error occurred while serializing profile operation object", e);
} catch (ClassNotFoundException e) {
throw new OperationManagementDAOException("Error occurred while casting retrieved profile operation as a " +
"ProfileOperation object", e);
} finally {
if (bais != null) {
try {
bais.close();
} catch (IOException e) {
log.warn("Error occurred while closing ByteArrayOutputStream", e);
}
}
if (ois != null) {
try {
ois.close();
} catch (IOException e) {
log.warn("Error occurred while closing ObjectOutputStream", e);
}
}
OperationManagementDAOUtil.cleanupResources(stmt, rs);
OperationManagementDAOFactory.closeConnection();
}
}
@Override @Override
public Operation getNextOperation(DeviceIdentifier deviceId) throws OperationManagementDAOException { public Operation getNextOperation(DeviceIdentifier deviceId) throws OperationManagementDAOException {
@ -114,17 +68,18 @@ public class ProfileOperationDAOImpl extends OperationDAOImpl {
ObjectInputStream ois = null; ObjectInputStream ois = null;
try { try {
Connection connection = OperationManagementDAOFactory.openConnection(); Connection connection = OperationManagementDAOFactory.getConnection();
stmt = connection.prepareStatement( stmt = connection.prepareStatement(
"SELECT po.OPERATION_DETAILS AS OPERATIONDETAILS " + "SELECT po.OPERATION_DETAILS AS OPERATIONDETAILS " +
"FROM DM_OPERATION o " + "FROM DM_OPERATION o " +
"INNER JOIN DM_PROFILE_OPERATION po ON o.ID = po.OPERATION_ID AND o.STATUS =? AND o.ID IN (" + "INNER JOIN DM_PROFILE_OPERATION po ON o.ID = po.OPERATION_ID AND o.STATUS =? AND o.ID IN ("
+
"SELECT dom.OPERATION_ID FROM (SELECT d.ID FROM DM_DEVICE d INNER JOIN " + "SELECT dom.OPERATION_ID FROM (SELECT d.ID FROM DM_DEVICE d INNER JOIN " +
"DM_DEVICE_TYPE dm ON d.DEVICE_TYPE_ID = dm.ID AND dm.NAME = ? AND " + "DM_DEVICE_TYPE dm ON d.DEVICE_TYPE_ID = dm.ID AND dm.NAME = ? AND " +
"d.DEVICE_IDENTIFICATION = ?) d1 INNER JOIN DM_DEVICE_OPERATION_MAPPING dom " + "d.DEVICE_IDENTIFICATION = ?) d1 INNER JOIN DM_DEVICE_OPERATION_MAPPING dom " +
"ON d1.ID = dom.DEVICE_ID) ORDER BY o.CREATED_TIMESTAMP ASC LIMIT 1"); "ON d1.ID = dom.DEVICE_ID) ORDER BY o.CREATED_TIMESTAMP ASC LIMIT 1");
stmt.setString(1,Operation.Status.PENDING.toString()); stmt.setString(1, Operation.Status.PENDING.toString());
stmt.setString(2, deviceId.getType()); stmt.setString(2, deviceId.getType());
stmt.setString(3, deviceId.getId()); stmt.setString(3, deviceId.getId());
rs = stmt.executeQuery(); rs = stmt.executeQuery();
@ -174,7 +129,7 @@ public class ProfileOperationDAOImpl extends OperationDAOImpl {
ObjectOutputStream oos = null; ObjectOutputStream oos = null;
try { try {
Connection connection = OperationManagementDAOFactory.openConnection(); Connection connection = OperationManagementDAOFactory.getConnection();
stmt = connection.prepareStatement("UPDATE DM_PROFILE_OPERATION O SET O.OPERATION_DETAILS=? " + stmt = connection.prepareStatement("UPDATE DM_PROFILE_OPERATION O SET O.OPERATION_DETAILS=? " +
"WHERE O.OPERATION_ID=?"); "WHERE O.OPERATION_ID=?");
@ -215,7 +170,7 @@ public class ProfileOperationDAOImpl extends OperationDAOImpl {
super.deleteOperation(id); super.deleteOperation(id);
PreparedStatement stmt = null; PreparedStatement stmt = null;
try { try {
Connection connection = OperationManagementDAOFactory.openConnection(); Connection connection = OperationManagementDAOFactory.getConnection();
stmt = connection.prepareStatement("DELETE DM_PROFILE_OPERATION WHERE OPERATION_ID=?"); stmt = connection.prepareStatement("DELETE DM_PROFILE_OPERATION WHERE OPERATION_ID=?");
stmt.setInt(1, id); stmt.setInt(1, id);
stmt.executeUpdate(); stmt.executeUpdate();

@ -27,7 +27,7 @@ CREATE TABLE IF NOT EXISTS DM_OPERATION (
CREATED_TIMESTAMP TIMESTAMP NOT NULL, CREATED_TIMESTAMP TIMESTAMP NOT NULL,
RECEIVED_TIMESTAMP TIMESTAMP NULL, RECEIVED_TIMESTAMP TIMESTAMP NULL,
STATUS VARCHAR(50) NULL, STATUS VARCHAR(50) NULL,
OPERATIONCODE VARCHAR(25) NOT NULL, OPERATION_CODE VARCHAR(25) NOT NULL,
PRIMARY KEY (ID) PRIMARY KEY (ID)
); );
@ -40,7 +40,7 @@ CREATE TABLE IF NOT EXISTS DM_CONFIG_OPERATION (
CREATE TABLE IF NOT EXISTS DM_COMMAND_OPERATION ( CREATE TABLE IF NOT EXISTS DM_COMMAND_OPERATION (
OPERATION_ID INTEGER NOT NULL, OPERATION_ID INTEGER NOT NULL,
ENABLED INTEGER NOT NULL DEFAULT 0, ENABLED BOOLEAN NOT NULL DEFAULT FALSE,
PRIMARY KEY (OPERATION_ID), PRIMARY KEY (OPERATION_ID),
CONSTRAINT fk_dm_operation_command FOREIGN KEY (OPERATION_ID) REFERENCES CONSTRAINT fk_dm_operation_command FOREIGN KEY (OPERATION_ID) REFERENCES
DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
@ -48,7 +48,8 @@ CREATE TABLE IF NOT EXISTS DM_COMMAND_OPERATION (
CREATE TABLE IF NOT EXISTS DM_PROFILE_OPERATION ( CREATE TABLE IF NOT EXISTS DM_PROFILE_OPERATION (
OPERATION_ID INTEGER NOT NULL, OPERATION_ID INTEGER NOT NULL,
PAYLOAD BLOB NOT NULL, ENABLED INTEGER NOT NULL DEFAULT 0,
OPERATION_DETAILS BLOB DEFAULT NULL,
PRIMARY KEY (OPERATION_ID), PRIMARY KEY (OPERATION_ID),
CONSTRAINT fk_dm_operation_profile FOREIGN KEY (OPERATION_ID) REFERENCES CONSTRAINT fk_dm_operation_profile FOREIGN KEY (OPERATION_ID) REFERENCES
DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION

@ -27,7 +27,7 @@ CREATE TABLE IF NOT EXISTS DM_OPERATION (
CREATED_TIMESTAMP TIMESTAMP NOT NULL, CREATED_TIMESTAMP TIMESTAMP NOT NULL,
RECEIVED_TIMESTAMP TIMESTAMP NULL, RECEIVED_TIMESTAMP TIMESTAMP NULL,
STATUS VARCHAR(50) NULL, STATUS VARCHAR(50) NULL,
OPERATIONCODE VARCHAR(25) NOT NULL, OPERATION_CODE VARCHAR(25) NOT NULL,
PRIMARY KEY (ID) PRIMARY KEY (ID)
); );

Loading…
Cancel
Save