mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Refactor operation DAO methods.Add connection close util method
This commit is contained in:
parent
32b86c7ff1
commit
4a9a27ab7e
@ -41,6 +41,7 @@ public class Operation {
|
||||
private Status status;
|
||||
private String receivedTimeStamp;
|
||||
private String createdTimeStamp;
|
||||
private boolean isEnabled;
|
||||
|
||||
@XmlElement
|
||||
public String getCode() {
|
||||
@ -109,4 +110,12 @@ public class Operation {
|
||||
this.createdTimeStamp = createdTimeStamp;
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return isEnabled;
|
||||
}
|
||||
|
||||
public void setEnabled(boolean isEnabled) {
|
||||
this.isEnabled = isEnabled;
|
||||
}
|
||||
|
||||
}
|
||||
@ -137,7 +137,7 @@ public class OperationManagerImpl implements OperationManager {
|
||||
"pending operations assigned for '" + deviceId.getType() + "' device '" +
|
||||
deviceId.getId() + "'", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operation getNextPendingOperation(DeviceIdentifier deviceId) throws OperationManagementException {
|
||||
@ -156,7 +156,7 @@ public class OperationManagerImpl implements OperationManager {
|
||||
|
||||
@Override
|
||||
public Operation updateOperation(int id, DeviceIdentifier deviceIdentifier,
|
||||
String responsePayLoad) throws OperationManagementException {
|
||||
String responsePayLoad) throws OperationManagementException {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@ -27,9 +27,9 @@ public interface OperationDAO {
|
||||
|
||||
int addOperation(Operation operation) throws OperationManagementDAOException;
|
||||
|
||||
int updateOperation(Operation operation) throws OperationManagementDAOException;
|
||||
void updateOperation(Operation operation) throws OperationManagementDAOException;
|
||||
|
||||
int deleteOperation(int operationId) throws OperationManagementDAOException;
|
||||
void deleteOperation(int operationId) throws OperationManagementDAOException;
|
||||
|
||||
Operation getOperation(int operationId) throws OperationManagementDAOException;
|
||||
|
||||
|
||||
@ -74,20 +74,28 @@ public class OperationManagementDAOFactory {
|
||||
}
|
||||
}
|
||||
|
||||
public static Connection getConnection() throws OperationManagementDAOException {
|
||||
public static Connection openConnection() throws OperationManagementDAOException {
|
||||
if (currentConnection.get() == null) {
|
||||
synchronized (LOCK) {
|
||||
try {
|
||||
currentConnection.set(dataSource.getConnection());
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while retrieving data source connection",
|
||||
e);
|
||||
}
|
||||
try {
|
||||
currentConnection.set(dataSource.getConnection());
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while retrieving data source connection",
|
||||
e);
|
||||
}
|
||||
}
|
||||
return currentConnection.get();
|
||||
}
|
||||
|
||||
public static void closeConnection() throws OperationManagementDAOException {
|
||||
|
||||
Connection con = currentConnection.get();
|
||||
try {
|
||||
con.close();
|
||||
} catch (SQLException e) {
|
||||
log.error("Error occurred while close the connection");
|
||||
}
|
||||
}
|
||||
|
||||
public static void commitTransaction() throws OperationManagementDAOException {
|
||||
try {
|
||||
Connection conn = currentConnection.get();
|
||||
@ -101,6 +109,8 @@ public class OperationManagementDAOFactory {
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while committing the transaction", e);
|
||||
} finally {
|
||||
closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@ -117,6 +127,8 @@ public class OperationManagementDAOFactory {
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while rollbacking the transaction", e);
|
||||
} finally {
|
||||
closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -45,5 +45,13 @@ public class OperationManagementDAOUtil {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void cleanupResources(Statement stmt) {
|
||||
if (stmt != null) {
|
||||
try {
|
||||
stmt.close();
|
||||
} catch (SQLException e) {
|
||||
log.warn("Error occurred while closing the statement", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -36,13 +36,13 @@ public class CommandOperationDAOImpl extends OperationDAOImpl {
|
||||
|
||||
@Override
|
||||
public int addOperation(Operation operation) throws OperationManagementDAOException {
|
||||
|
||||
int operationId = super.addOperation(operation);
|
||||
CommandOperation commandOp = (CommandOperation) operation;
|
||||
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
try {
|
||||
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||
Connection conn = OperationManagementDAOFactory.openConnection();
|
||||
stmt = conn.prepareStatement("INSERT INTO DM_COMMAND_OPERATION(OPERATION_ID, ENABLED) VALUES(?, ?)");
|
||||
stmt.setInt(1, operationId);
|
||||
stmt.setBoolean(2, commandOp.isEnabled());
|
||||
@ -50,7 +50,7 @@ public class CommandOperationDAOImpl extends OperationDAOImpl {
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while adding command operation", e);
|
||||
} finally {
|
||||
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
OperationManagementDAOUtil.cleanupResources(stmt);
|
||||
}
|
||||
return operationId;
|
||||
}
|
||||
@ -59,41 +59,56 @@ public class CommandOperationDAOImpl extends OperationDAOImpl {
|
||||
Operation.Status status) throws OperationManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
List<Operation> operationList = new ArrayList<Operation>();
|
||||
Operation operation;
|
||||
try {
|
||||
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||
Connection conn = OperationManagementDAOFactory.openConnection();
|
||||
String sql = "SELECT po.OPERATION_ID, po.TYPE, po.CREATED_TIMESTAMP, po.RECEIVED_TIMESTAMP, po.STATUS, " +
|
||||
"co.ENABLED FROM DM_COMMAND_OPERATION co INNER JOIN (SELECT o.ID AS OPERATION_ID, o.TYPE, " +
|
||||
"o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS FROM DM_OPERATION o INNER JOIN (" +
|
||||
"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(1, deviceId.getId());
|
||||
stmt.setString(1, status.toString());
|
||||
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());
|
||||
operation.setCreatedTimeStamp(rs.getTimestamp("RECEIVED_TIMESTAMP").toString());
|
||||
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();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<? extends Operation> getOperations(DeviceIdentifier deviceId) throws OperationManagementDAOException {
|
||||
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
try {
|
||||
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||
Connection conn = OperationManagementDAOFactory.openConnection();
|
||||
String sql = "SELECT po.OPERATION_ID, po.TYPE, po.CREATED_TIMESTAMP, po.RECEIVED_TIMESTAMP, po.STATUS, " +
|
||||
"co.ENABLED FROM DM_COMMAND_OPERATION co INNER JOIN (SELECT o.ID AS OPERATION_ID, o.TYPE, " +
|
||||
"o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS FROM DM_OPERATION o INNER JOIN (" +
|
||||
"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 = " +
|
||||
@ -112,6 +127,7 @@ public class CommandOperationDAOImpl extends OperationDAOImpl {
|
||||
operation.setType(Operation.Type.valueOf(rs.getString("TYPE")));
|
||||
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;
|
||||
@ -120,6 +136,46 @@ public class CommandOperationDAOImpl extends OperationDAOImpl {
|
||||
"operations available for the '" + deviceId.getType() + "' device '" + deviceId.getId() + "'");
|
||||
} finally {
|
||||
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
OperationManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateOperation(Operation operation) throws OperationManagementDAOException {
|
||||
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
Connection connection = OperationManagementDAOFactory.openConnection();
|
||||
stmt = connection.prepareStatement(
|
||||
"UPDATE DM_COMMAND_OPERATION O SET O.ENABLED=? WHERE O.OPERATION_ID=?");
|
||||
|
||||
stmt.setBoolean(1,operation.isEnabled());
|
||||
stmt.setInt(2, operation.getId());
|
||||
stmt.executeUpdate();
|
||||
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while adding operation metadata", e);
|
||||
} finally {
|
||||
OperationManagementDAOUtil.cleanupResources(stmt);
|
||||
OperationManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteOperation(int id) throws OperationManagementDAOException {
|
||||
|
||||
super.deleteOperation(id);
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
Connection connection = OperationManagementDAOFactory.openConnection();
|
||||
stmt = connection.prepareStatement("DELETE DM_COMMAND_OPERATION WHERE OPERATION_ID=?") ;
|
||||
stmt.setInt(1, id);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while deleting operation metadata", e);
|
||||
} finally {
|
||||
OperationManagementDAOUtil.cleanupResources(stmt);
|
||||
OperationManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -26,28 +26,42 @@ import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOU
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
public class ConfigOperationDAOImpl extends OperationDAOImpl {
|
||||
|
||||
@Override
|
||||
public int addOperation(Operation operation) throws OperationManagementDAOException {
|
||||
int operationId = super.addOperation(operation);
|
||||
ConfigOperation commandOp = (ConfigOperation) operation;
|
||||
|
||||
int operationId = super.addOperation(operation);
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||
Connection conn = OperationManagementDAOFactory.openConnection();
|
||||
stmt = conn.prepareStatement("INSERT INTO DM_CONFIG_OPERATION(OPERATION_ID) VALUES(?)");
|
||||
stmt.setInt(1, operationId);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while adding command operation", e);
|
||||
} finally {
|
||||
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
OperationManagementDAOUtil.cleanupResources(stmt);
|
||||
}
|
||||
return operationId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteOperation(int id) throws OperationManagementDAOException {
|
||||
|
||||
super.deleteOperation(id);
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
Connection connection = OperationManagementDAOFactory.openConnection();
|
||||
stmt = connection.prepareStatement("DELETE DM_CONFIG_OPERATION WHERE OPERATION_ID=?") ;
|
||||
stmt.setInt(1, id);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while deleting operation metadata", e);
|
||||
} finally {
|
||||
OperationManagementDAOUtil.cleanupResources(stmt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,9 +37,9 @@ public class OperationDAOImpl implements OperationDAO {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
Connection connection = OperationManagementDAOFactory.getConnection();
|
||||
Connection connection = OperationManagementDAOFactory.openConnection();
|
||||
stmt = connection.prepareStatement(
|
||||
"INSERT INTO DM_OPERATION(TYPE, CREATED_TIMESTAMP, RECEIVED_TIMESTAMP, STATUS,OPERATIONCODE) " +
|
||||
"INSERT INTO DM_OPERATION(TYPE, CREATED_TIMESTAMP, RECEIVED_TIMESTAMP, STATUS, OPERATIONCODE) " +
|
||||
"VALUES (?, ?, ?, ?,?)");
|
||||
stmt.setString(1, operation.getType().toString());
|
||||
stmt.setTimestamp(2, new Timestamp(new Date().getTime()));
|
||||
@ -62,12 +62,11 @@ public class OperationDAOImpl implements OperationDAO {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateOperation(Operation operation) throws OperationManagementDAOException {
|
||||
public void updateOperation(Operation operation) throws OperationManagementDAOException {
|
||||
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
Connection connection = OperationManagementDAOFactory.getConnection();
|
||||
Connection connection = OperationManagementDAOFactory.openConnection();
|
||||
stmt = connection.prepareStatement(
|
||||
"UPDATE DM_OPERATION O SET O.RECEIVED_TIMESTAMP=?,O.STATUS=? WHERE O.ID=?");
|
||||
|
||||
@ -76,22 +75,26 @@ public class OperationDAOImpl implements OperationDAO {
|
||||
stmt.setInt(3, operation.getId());
|
||||
stmt.executeUpdate();
|
||||
|
||||
rs = stmt.getGeneratedKeys();
|
||||
int id = -1;
|
||||
if (rs.next()) {
|
||||
id = rs.getInt(1);
|
||||
}
|
||||
return id;
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while adding operation metadata", e);
|
||||
} finally {
|
||||
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
OperationManagementDAOUtil.cleanupResources(stmt);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deleteOperation(int id) throws OperationManagementDAOException {
|
||||
return 0;
|
||||
public void deleteOperation(int id) throws OperationManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
Connection connection = OperationManagementDAOFactory.openConnection();
|
||||
stmt = connection.prepareStatement("DELETE DM_OPERATION WHERE ID=?") ;
|
||||
stmt.setInt(1, id);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while deleting operation metadata", e);
|
||||
} finally {
|
||||
OperationManagementDAOUtil.cleanupResources(stmt);
|
||||
}
|
||||
}
|
||||
|
||||
public Operation getOperation(int id) throws OperationManagementDAOException {
|
||||
@ -117,9 +120,10 @@ public class OperationDAOImpl implements OperationDAO {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||
Connection conn = OperationManagementDAOFactory.openConnection();
|
||||
String sql =
|
||||
"SELECT o.ID, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS, o.OPERATIONCODE FROM DM_OPERATION o " +
|
||||
"SELECT o.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" +
|
||||
@ -150,6 +154,7 @@ public class OperationDAOImpl implements OperationDAO {
|
||||
"available for the '" + deviceId.getType() + "' with id '" + deviceId.getId() + "'", e);
|
||||
} finally {
|
||||
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
OperationManagementDAOFactory.closeConnection();
|
||||
}
|
||||
return operations;
|
||||
}
|
||||
@ -170,7 +175,7 @@ public class OperationDAOImpl implements OperationDAO {
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
Connection connection = OperationManagementDAOFactory.getConnection();
|
||||
Connection connection = OperationManagementDAOFactory.openConnection();
|
||||
stmt = connection.prepareStatement(
|
||||
"SELECT o.ID, o.TYPE, o.CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP, o.STATUS,o.OPERATIONCODE " +
|
||||
" FROM DM_OPERATION o " +
|
||||
@ -203,6 +208,7 @@ public class OperationDAOImpl implements OperationDAO {
|
||||
throw new OperationManagementDAOException("Error occurred while adding operation metadata", e);
|
||||
} finally {
|
||||
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
OperationManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -33,7 +33,7 @@ public class OperationMappingDAOImpl implements OperationMappingDAO {
|
||||
public void addOperationMapping(int operationId, Integer deviceId) throws OperationManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||
Connection conn = OperationManagementDAOFactory.openConnection();
|
||||
String sql = "INSERT INTO DM_DEVICE_OPERATION_MAPPING(DEVICE_ID, OPERATION_ID) VALUES(?, ?)";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, deviceId);
|
||||
@ -51,7 +51,7 @@ public class OperationMappingDAOImpl implements OperationMappingDAO {
|
||||
Integer deviceIds) throws OperationManagementDAOException {
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||
Connection conn = OperationManagementDAOFactory.openConnection();
|
||||
String sql = "DELETE FROM DM_DEVICE_OPERATION_MAPPING WHERE DEVICE_ID = ? AND OPERATION_ID = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setInt(1, 0);
|
||||
|
||||
@ -28,30 +28,31 @@ import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOF
|
||||
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOUtil;
|
||||
|
||||
import java.io.*;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.*;
|
||||
|
||||
public class ProfileOperationDAOImpl extends OperationDAOImpl {
|
||||
|
||||
private static final Log log = LogFactory.getLog(ProfileOperationDAOImpl.class);
|
||||
|
||||
public int addOperation(Operation operation) throws OperationManagementDAOException {
|
||||
|
||||
int operationId = super.addOperation(operation);
|
||||
operation.setCreatedTimeStamp(new Timestamp(new java.util.Date().getTime()).toString());
|
||||
operation.setId(operationId);
|
||||
ProfileOperation profileOp = (ProfileOperation) operation;
|
||||
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||
Connection conn = OperationManagementDAOFactory.openConnection();
|
||||
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
ByteArrayOutputStream bao = null;
|
||||
ObjectOutputStream oos = null;
|
||||
|
||||
try {
|
||||
bao = new ByteArrayOutputStream();
|
||||
oos = new ObjectOutputStream(bao);
|
||||
oos.writeObject(profileOp);
|
||||
|
||||
stmt = conn.prepareStatement("INSERT INTO DM_PROFILE_OPERATION(OPERATION_ID, PAYLOAD) VALUES(?, ?)");
|
||||
stmt = conn.prepareStatement("INSERT INTO DM_PROFILE_OPERATION(OPERATION_ID, OPERATIONDETAILS) " +
|
||||
"VALUES(?, ?)");
|
||||
stmt.setInt(1, operationId);
|
||||
stmt.setBytes(2, bao.toByteArray());
|
||||
stmt.executeUpdate();
|
||||
@ -74,29 +75,29 @@ public class ProfileOperationDAOImpl extends OperationDAOImpl {
|
||||
log.warn("Error occurred while closing ObjectOutputStream", e);
|
||||
}
|
||||
}
|
||||
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
OperationManagementDAOUtil.cleanupResources(stmt);
|
||||
}
|
||||
return operationId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Operation getOperation(int operationId) throws OperationManagementDAOException {
|
||||
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||
Connection conn = OperationManagementDAOFactory.openConnection();
|
||||
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
ByteArrayInputStream bais = null;
|
||||
ObjectInputStream ois = null;
|
||||
try {
|
||||
stmt = conn.prepareStatement("SELECT PAYLOAD FROM DM_PROFILE_OPERATION WHERE ID = ?");
|
||||
stmt = conn.prepareStatement("SELECT OPERATIONDETAILS FROM DM_PROFILE_OPERATION WHERE OPERATION_ID = ?");
|
||||
stmt.setInt(1, operationId);
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
byte[] payload = new byte[0];
|
||||
byte[] operationDetails = new byte[0];
|
||||
if (rs.next()) {
|
||||
payload = rs.getBytes("PAYLOAD");
|
||||
operationDetails = rs.getBytes("OPERATIONDETAILS");
|
||||
}
|
||||
bais = new ByteArrayInputStream(payload);
|
||||
bais = new ByteArrayInputStream(operationDetails);
|
||||
ois = new ObjectInputStream(bais);
|
||||
return (ProfileOperation) ois.readObject();
|
||||
} catch (SQLException e) {
|
||||
@ -104,7 +105,7 @@ public class ProfileOperationDAOImpl extends OperationDAOImpl {
|
||||
} 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 payload as a " +
|
||||
throw new OperationManagementDAOException("Error occurred while casting retrieved profile operation as a " +
|
||||
"ProfileOperation object", e);
|
||||
} finally {
|
||||
if (bais != null) {
|
||||
@ -122,6 +123,7 @@ public class ProfileOperationDAOImpl extends OperationDAOImpl {
|
||||
}
|
||||
}
|
||||
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
OperationManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@ -132,51 +134,28 @@ public class ProfileOperationDAOImpl extends OperationDAOImpl {
|
||||
ResultSet rs = null;
|
||||
ByteArrayInputStream bais;
|
||||
ObjectInputStream ois;
|
||||
int operationId = 0;
|
||||
|
||||
String operationType = "";
|
||||
String createdTime = "";
|
||||
String receivedTime = "";
|
||||
String operationStatus = "";
|
||||
String operationCode = "";
|
||||
|
||||
try {
|
||||
Connection connection = OperationManagementDAOFactory.getConnection();
|
||||
Connection connection = OperationManagementDAOFactory.openConnection();
|
||||
stmt = connection.prepareStatement(
|
||||
"SELECT o.ID AS OPERATION_ID, o.CREATED_TIMESTAMP AS CREATED_TIMESTAMP, o.RECEIVED_TIMESTAMP AS " +
|
||||
"RECEIVED_TIMESTAMP, po.PAYLOAD AS PAYLOAD,o.TYPE AS TYPE,o.STATUS as STATUS,o.OPERATIONCODE " +
|
||||
"SELECT po.OPERATIONDETAILS AS OPERATIONDETAILS " +
|
||||
"FROM DM_OPERATION o " +
|
||||
"INNER JOIN DM_PROFILE_OPERATION po ON o.ID = po.OPERATION_ID AND o.ID IN (" +
|
||||
"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 " +
|
||||
"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, deviceId.getType());
|
||||
stmt.setString(2, deviceId.getId());
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
byte[] payload = new byte[0];
|
||||
byte[] operationObjbyteArr = new byte[0];
|
||||
if (rs.next()) {
|
||||
operationId = rs.getInt("OPERATION_ID");
|
||||
createdTime = rs.getTimestamp("CREATED_TIMESTAMP").toString();
|
||||
receivedTime = rs.getTimestamp("RECEIVED_TIMESTAMP").toString();
|
||||
payload = rs.getBytes("PAYLOAD");
|
||||
operationType = rs.getString("TYPE");
|
||||
operationStatus = rs.getString("STATUS");
|
||||
operationCode = rs.getString("OPERATIONCODE");
|
||||
operationObjbyteArr = rs.getBytes("OPERATIONDETAILS");
|
||||
}
|
||||
bais = new ByteArrayInputStream(payload);
|
||||
bais = new ByteArrayInputStream(operationObjbyteArr);
|
||||
ois = new ObjectInputStream(bais);
|
||||
ProfileOperation profileOperation = new ProfileOperation();
|
||||
profileOperation.setPayload(ois.readObject());
|
||||
profileOperation.setId(operationId);
|
||||
profileOperation.setType(Operation.Type.valueOf(operationType));
|
||||
profileOperation.setStatus(Operation.Status.valueOf(operationStatus));
|
||||
profileOperation.setCreatedTimeStamp(createdTime);
|
||||
profileOperation.setReceivedTimeStamp(receivedTime);
|
||||
profileOperation.setCode(operationCode);
|
||||
return profileOperation;
|
||||
|
||||
return (ProfileOperation) ois.readObject();
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while adding operation metadata", e);
|
||||
} catch (ClassNotFoundException e) {
|
||||
@ -186,6 +165,67 @@ public class ProfileOperationDAOImpl extends OperationDAOImpl {
|
||||
throw new OperationManagementDAOException("Error occurred while serializing profile operation object", e);
|
||||
} finally {
|
||||
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
||||
OperationManagementDAOFactory.closeConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateOperation(Operation operation) throws OperationManagementDAOException {
|
||||
|
||||
PreparedStatement stmt = null;
|
||||
ByteArrayOutputStream bao = null;
|
||||
ObjectOutputStream oos = null;
|
||||
|
||||
try {
|
||||
Connection connection = OperationManagementDAOFactory.openConnection();
|
||||
stmt = connection.prepareStatement(
|
||||
"UPDATE DM_PROFILE_OPERATION O SET O.OPERATIONDETAILS=? WHERE O.OPERATION_ID=?");
|
||||
|
||||
bao = new ByteArrayOutputStream();
|
||||
oos = new ObjectOutputStream(bao);
|
||||
oos.writeObject(operation);
|
||||
|
||||
stmt.setBytes(1, bao.toByteArray());
|
||||
stmt.setInt(2, operation.getId());
|
||||
stmt.executeUpdate();
|
||||
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while update operation metadata", e);
|
||||
} catch (IOException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while serializing profile operation object", e);
|
||||
} finally {
|
||||
if (bao != null) {
|
||||
try {
|
||||
bao.close();
|
||||
} catch (IOException e) {
|
||||
log.warn("Error occurred while closing ByteArrayOutputStream", e);
|
||||
}
|
||||
}
|
||||
if (oos != null) {
|
||||
try {
|
||||
oos.close();
|
||||
} catch (IOException e) {
|
||||
log.warn("Error occurred while closing ObjectOutputStream", e);
|
||||
}
|
||||
}
|
||||
OperationManagementDAOUtil.cleanupResources(stmt);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteOperation(int id) throws OperationManagementDAOException {
|
||||
|
||||
super.deleteOperation(id);
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
Connection connection = OperationManagementDAOFactory.openConnection();
|
||||
stmt = connection.prepareStatement("DELETE DM_PROFILE_OPERATION WHERE OPERATION_ID=?");
|
||||
stmt.setInt(1, id);
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new OperationManagementDAOException("Error occurred while deleting operation metadata", e);
|
||||
} finally {
|
||||
OperationManagementDAOUtil.cleanupResources(stmt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -50,7 +50,7 @@ CREATE TABLE IF NOT EXISTS DM_COMMAND_OPERATION (
|
||||
CREATE TABLE IF NOT EXISTS DM_PROFILE_OPERATION (
|
||||
OPERATION_ID INTEGER NOT NULL,
|
||||
ENABLED INTEGER NOT NULL DEFAULT 0,
|
||||
PAYLOAD BLOB DEFAULT NULL,
|
||||
OPERATIONDETAILS BLOB DEFAULT NULL,
|
||||
PRIMARY KEY (OPERATION_ID),
|
||||
CONSTRAINT fk_dm_operation_profile FOREIGN KEY (OPERATION_ID) REFERENCES
|
||||
DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
|
||||
|
||||
Loading…
Reference in New Issue
Block a user