mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
fixing getAllActivity H2 issue
This commit is contained in:
parent
e1c4305e73
commit
c269f35ef2
@ -387,7 +387,7 @@ public interface DeviceManagementService {
|
|||||||
int limit,
|
int limit,
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "searchContext",
|
name = "searchContext",
|
||||||
value = "List of search conditions.",
|
value = "List of device properties as search conditions.",
|
||||||
required = true)
|
required = true)
|
||||||
SearchContext searchContext);
|
SearchContext searchContext);
|
||||||
|
|
||||||
|
|||||||
@ -28,6 +28,7 @@ import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
|
|||||||
import org.wso2.carbon.device.mgt.core.config.datasource.JNDILookupDefinition;
|
import org.wso2.carbon.device.mgt.core.config.datasource.JNDILookupDefinition;
|
||||||
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
||||||
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.*;
|
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.*;
|
||||||
|
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.operation.H2OperationDAOImpl;
|
||||||
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.operation.OracleOperationDAOImpl;
|
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.operation.OracleOperationDAOImpl;
|
||||||
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.operation.PostgreSQLOperationDAOImpl;
|
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.operation.PostgreSQLOperationDAOImpl;
|
||||||
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.operation.SQLServerOperationDAOImpl;
|
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.operation.SQLServerOperationDAOImpl;
|
||||||
@ -75,6 +76,7 @@ public class OperationManagementDAOFactory {
|
|||||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_POSTGRESQL:
|
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_POSTGRESQL:
|
||||||
return new PostgreSQLOperationDAOImpl();
|
return new PostgreSQLOperationDAOImpl();
|
||||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_H2:
|
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_H2:
|
||||||
|
return new H2OperationDAOImpl();
|
||||||
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MYSQL:
|
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MYSQL:
|
||||||
return new GenericOperationDAOImpl();
|
return new GenericOperationDAOImpl();
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -32,6 +32,7 @@ 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 org.wso2.carbon.device.mgt.core.operation.mgt.dao.util.OperationDAOUtil;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
@ -307,7 +308,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
List<OperationResponse> operationResponses = new ArrayList<>();
|
List<OperationResponse> operationResponses = new ArrayList<>();
|
||||||
if (rs.getInt("UPDATED_TIMESTAMP") != 0) {
|
if (rs.getInt("UPDATED_TIMESTAMP") != 0) {
|
||||||
activityStatus.setUpdatedTimestamp(new java.util.Date(rs.getLong(("UPDATED_TIMESTAMP")) * 1000).toString());
|
activityStatus.setUpdatedTimestamp(new java.util.Date(rs.getLong(("UPDATED_TIMESTAMP")) * 1000).toString());
|
||||||
operationResponses.add(this.getOperationResponse(rs));
|
operationResponses.add(OperationDAOUtil.getOperationResponse(rs));
|
||||||
}
|
}
|
||||||
activityStatus.setResponses(operationResponses);
|
activityStatus.setResponses(operationResponses);
|
||||||
|
|
||||||
@ -317,7 +318,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
activity.setActivityStatus(activityStatusList);
|
activity.setActivityStatus(activityStatusList);
|
||||||
} else {
|
} else {
|
||||||
if (rs.getInt("UPDATED_TIMESTAMP") != 0) {
|
if (rs.getInt("UPDATED_TIMESTAMP") != 0) {
|
||||||
activityStatus.getResponses().add(this.getOperationResponse(rs));
|
activityStatus.getResponses().add(OperationDAOUtil.getOperationResponse(rs));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -428,13 +429,13 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
|
|
||||||
}
|
}
|
||||||
if (rs.getTimestamp("RECEIVED_TIMESTAMP") != (null)) {
|
if (rs.getTimestamp("RECEIVED_TIMESTAMP") != (null)) {
|
||||||
operationResponses.add(this.getOperationResponse(rs));
|
operationResponses.add(OperationDAOUtil.getOperationResponse(rs));
|
||||||
responseId = rs.getInt("OP_RES_ID");
|
responseId = rs.getInt("OP_RES_ID");
|
||||||
}
|
}
|
||||||
activityStatus.setResponses(operationResponses);
|
activityStatus.setResponses(operationResponses);
|
||||||
statusList.add(activityStatus);
|
statusList.add(activityStatus);
|
||||||
activity.setActivityStatus(statusList);
|
activity.setActivityStatus(statusList);
|
||||||
activity.setActivityId(this.getActivityId(rs.getInt("OPERATION_ID")));
|
activity.setActivityId(OperationDAOUtil.getActivityId(rs.getInt("OPERATION_ID")));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -458,7 +459,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
rs.getLong(("UPDATED_TIMESTAMP")) * 1000).toString());
|
rs.getLong(("UPDATED_TIMESTAMP")) * 1000).toString());
|
||||||
}
|
}
|
||||||
if (rs.getTimestamp("RECEIVED_TIMESTAMP") != (null)) {
|
if (rs.getTimestamp("RECEIVED_TIMESTAMP") != (null)) {
|
||||||
operationResponses.add(this.getOperationResponse(rs));
|
operationResponses.add(OperationDAOUtil.getOperationResponse(rs));
|
||||||
responseId = rs.getInt("OP_RES_ID");
|
responseId = rs.getInt("OP_RES_ID");
|
||||||
}
|
}
|
||||||
activityStatus.setResponses(operationResponses);
|
activityStatus.setResponses(operationResponses);
|
||||||
@ -469,7 +470,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
|
|
||||||
if (rs.getInt("OP_RES_ID") != 0 && responseId != rs.getInt("OP_RES_ID")) {
|
if (rs.getInt("OP_RES_ID") != 0 && responseId != rs.getInt("OP_RES_ID")) {
|
||||||
if (rs.getTimestamp("RECEIVED_TIMESTAMP") != (null)) {
|
if (rs.getTimestamp("RECEIVED_TIMESTAMP") != (null)) {
|
||||||
activityStatus.getResponses().add(this.getOperationResponse(rs));
|
activityStatus.getResponses().add(OperationDAOUtil.getOperationResponse(rs));
|
||||||
responseId = rs.getInt("OP_RES_ID");
|
responseId = rs.getInt("OP_RES_ID");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -512,41 +513,6 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private OperationResponse getOperationResponse(ResultSet rs) throws
|
|
||||||
ClassNotFoundException, IOException, SQLException {
|
|
||||||
OperationResponse response = new OperationResponse();
|
|
||||||
if (rs.getTimestamp("RECEIVED_TIMESTAMP") != (null)) {
|
|
||||||
response.setReceivedTimeStamp(rs.getTimestamp("RECEIVED_TIMESTAMP").toString());
|
|
||||||
}
|
|
||||||
ByteArrayInputStream bais = null;
|
|
||||||
ObjectInputStream ois = null;
|
|
||||||
byte[] contentBytes;
|
|
||||||
try {
|
|
||||||
if (rs.getBytes("OPERATION_RESPONSE") != null) {
|
|
||||||
contentBytes = (byte[]) rs.getBytes("OPERATION_RESPONSE");
|
|
||||||
bais = new ByteArrayInputStream(contentBytes);
|
|
||||||
ois = new ObjectInputStream(bais);
|
|
||||||
response.setResponse(ois.readObject().toString());
|
|
||||||
}
|
|
||||||
} 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getEnrolmentIdFromMappingId(int enrollmentOpMappingId) throws OperationManagementDAOException {
|
public int getEnrolmentIdFromMappingId(int enrollmentOpMappingId) throws OperationManagementDAOException {
|
||||||
PreparedStatement stmt = null;
|
PreparedStatement stmt = null;
|
||||||
@ -689,7 +655,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
}
|
}
|
||||||
operation.setCode(rs.getString("OPERATION_CODE"));
|
operation.setCode(rs.getString("OPERATION_CODE"));
|
||||||
operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS")));
|
operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS")));
|
||||||
this.setActivityId(operation, rs.getInt("ID"));
|
OperationDAOUtil.setActivityId(operation, rs.getInt("ID"));
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new OperationManagementDAOException("SQL error occurred while retrieving the operation .", e);
|
throw new OperationManagementDAOException("SQL error occurred while retrieving the operation .", e);
|
||||||
@ -735,7 +701,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
new java.sql.Timestamp((rs.getLong("UPDATED_TIMESTAMP") * 1000)).toString());
|
new java.sql.Timestamp((rs.getLong("UPDATED_TIMESTAMP") * 1000)).toString());
|
||||||
}
|
}
|
||||||
operation.setCode(rs.getString("OPERATION_CODE"));
|
operation.setCode(rs.getString("OPERATION_CODE"));
|
||||||
this.setActivityId(operation, rs.getInt("ID"));
|
OperationDAOUtil.setActivityId(operation, rs.getInt("ID"));
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new OperationManagementDAOException("SQL error occurred while retrieving the operation " +
|
throw new OperationManagementDAOException("SQL error occurred while retrieving the operation " +
|
||||||
@ -782,7 +748,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
}
|
}
|
||||||
operation.setCode(rs.getString("OPERATION_CODE"));
|
operation.setCode(rs.getString("OPERATION_CODE"));
|
||||||
operation.setStatus(status);
|
operation.setStatus(status);
|
||||||
this.setActivityId(operation, rs.getInt("ID"));
|
OperationDAOUtil.setActivityId(operation, rs.getInt("ID"));
|
||||||
operations.add(operation);
|
operations.add(operation);
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
@ -834,7 +800,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
}
|
}
|
||||||
operation.setCode(rs.getString("OPERATION_CODE"));
|
operation.setCode(rs.getString("OPERATION_CODE"));
|
||||||
operation.setStatus(status);
|
operation.setStatus(status);
|
||||||
this.setActivityId(operation, rs.getInt("OM_MAPPING_ID"));
|
OperationDAOUtil.setActivityId(operation, rs.getInt("OM_MAPPING_ID"));
|
||||||
operations.add(operation);
|
operations.add(operation);
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
@ -933,7 +899,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
}
|
}
|
||||||
operation.setCode(rs.getString("OPERATION_CODE"));
|
operation.setCode(rs.getString("OPERATION_CODE"));
|
||||||
operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS")));
|
operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS")));
|
||||||
this.setActivityId(operation, rs.getInt("ID"));
|
OperationDAOUtil.setActivityId(operation, rs.getInt("ID"));
|
||||||
operations.add(operation);
|
operations.add(operation);
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
@ -987,7 +953,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
Operation operation = null;
|
Operation operation = null;
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
operation = new Operation();
|
operation = new Operation();
|
||||||
operation.setType(this.getType(rs.getString("TYPE")));
|
operation.setType(OperationDAOUtil.getType(rs.getString("TYPE")));
|
||||||
operation.setId(rs.getInt("ID"));
|
operation.setId(rs.getInt("ID"));
|
||||||
operation.setCreatedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
|
operation.setCreatedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
|
||||||
// if (rs.getTimestamp("RECEIVED_TIMESTAMP") == null) {
|
// if (rs.getTimestamp("RECEIVED_TIMESTAMP") == null) {
|
||||||
@ -1003,7 +969,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
}
|
}
|
||||||
operation.setCode(rs.getString("OPERATION_CODE"));
|
operation.setCode(rs.getString("OPERATION_CODE"));
|
||||||
operation.setStatus(Operation.Status.PENDING);
|
operation.setStatus(Operation.Status.PENDING);
|
||||||
this.setActivityId(operation, rs.getInt("ID"));
|
OperationDAOUtil.setActivityId(operation, rs.getInt("ID"));
|
||||||
}
|
}
|
||||||
return operation;
|
return operation;
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
@ -1051,7 +1017,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
new java.sql.Timestamp((rs.getLong("UPDATED_TIMESTAMP") * 1000)).toString());
|
new java.sql.Timestamp((rs.getLong("UPDATED_TIMESTAMP") * 1000)).toString());
|
||||||
}
|
}
|
||||||
operation.setCode(rs.getString("OPERATION_CODE"));
|
operation.setCode(rs.getString("OPERATION_CODE"));
|
||||||
this.setActivityId(operation, rs.getInt("ID"));
|
OperationDAOUtil.setActivityId(operation, rs.getInt("ID"));
|
||||||
operations.add(operation);
|
operations.add(operation);
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
@ -1063,18 +1029,7 @@ public class GenericOperationDAOImpl implements OperationDAO {
|
|||||||
return operations;
|
return operations;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Operation.Type getType(String type) {
|
|
||||||
return Operation.Type.valueOf(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setActivityId(Operation operation, int operationId) {
|
|
||||||
operation.setActivityId(DeviceManagementConstants.OperationAttributes.ACTIVITY + operationId);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private String getActivityId(int operationId) {
|
|
||||||
return DeviceManagementConstants.OperationAttributes.ACTIVITY + operationId;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,174 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016a, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* you may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.operation;
|
||||||
|
|
||||||
|
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||||
|
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.ActivityStatus;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationResponse;
|
||||||
|
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.OperationManagementDAOUtil;
|
||||||
|
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.GenericOperationDAOImpl;
|
||||||
|
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.util.OperationDAOUtil;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class holds the implementation of OperationDAO which can be used to support H2 db syntax.
|
||||||
|
*/
|
||||||
|
public class H2OperationDAOImpl extends GenericOperationDAOImpl {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Activity> getActivitiesUpdatedAfter(long timestamp, int limit, int offset) throws OperationManagementDAOException {
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
List<Activity> activities = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
Connection conn = OperationManagementDAOFactory.getConnection();
|
||||||
|
String sql = "SELECT feom.ENROLMENT_ID, feom.OPERATION_ID, feom.CREATED_TIMESTAMP, o.TYPE AS OPERATION_TYPE, " +
|
||||||
|
"o.OPERATION_CODE, orsp.OPERATION_RESPONSE, orsp.LATEST_RECEIVED_TIMESTAMP AS RECEIVED_TIMESTAMP, " +
|
||||||
|
"orsp.ID AS OP_RES_ID, feom.STATUS, feom.UPDATED_TIMESTAMP, feom.DEVICE_IDENTIFICATION, " +
|
||||||
|
"feom.DEVICE_TYPE FROM (SELECT eom.ENROLMENT_ID, eom.OPERATION_ID, eom.STATUS, eom.CREATED_TIMESTAMP, " +
|
||||||
|
"eom.UPDATED_TIMESTAMP, fe.DEVICE_IDENTIFICATION, fe.DEVICE_TYPE FROM " +
|
||||||
|
"(SELECT ENROLMENT_ID, OPERATION_ID, STATUS, CREATED_TIMESTAMP, UPDATED_TIMESTAMP " +
|
||||||
|
"FROM DM_ENROLMENT_OP_MAPPING WHERE UPDATED_TIMESTAMP > ? ORDER BY OPERATION_ID LIMIT ? OFFSET ?) eom " +
|
||||||
|
"LEFT OUTER JOIN (SELECT e.ID AS ENROLMENT_ID, d.ID AS DEVICE_ID, d.DEVICE_IDENTIFICATION, " +
|
||||||
|
"t.NAME AS DEVICE_TYPE FROM DM_ENROLMENT e LEFT OUTER JOIN DM_DEVICE d ON e.DEVICE_ID = d.ID " +
|
||||||
|
"LEFT OUTER JOIN DM_DEVICE_TYPE t ON d.DEVICE_TYPE_ID = t.ID WHERE d.TENANT_ID = ? AND " +
|
||||||
|
"e.TENANT_ID = ?) fe ON fe.ENROLMENT_ID = eom.ENROLMENT_ID) feom LEFT OUTER JOIN DM_OPERATION o " +
|
||||||
|
"ON feom.OPERATION_ID = o.ID LEFT OUTER JOIN (SELECT ID, ENROLMENT_ID, OPERATION_ID, " +
|
||||||
|
"OPERATION_RESPONSE, MAX(RECEIVED_TIMESTAMP) LATEST_RECEIVED_TIMESTAMP " +
|
||||||
|
"FROM DM_DEVICE_OPERATION_RESPONSE GROUP BY ENROLMENT_ID , OPERATION_ID) orsp " +
|
||||||
|
"ON o.ID = orsp.OPERATION_ID AND feom.ENROLMENT_ID = orsp.ENROLMENT_ID GROUP BY feom.ENROLMENT_ID, " +
|
||||||
|
"feom.OPERATION_ID, feom.CREATED_TIMESTAMP, o.TYPE, o.OPERATION_CODE, orsp.OPERATION_RESPONSE, " +
|
||||||
|
"orsp.LATEST_RECEIVED_TIMESTAMP, orsp.ID, feom.STATUS, feom.UPDATED_TIMESTAMP, " +
|
||||||
|
"feom.DEVICE_IDENTIFICATION, feom.DEVICE_TYPE";
|
||||||
|
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
|
||||||
|
stmt.setLong(1, timestamp);
|
||||||
|
stmt.setInt(2, limit);
|
||||||
|
stmt.setInt(3, offset);
|
||||||
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||||
|
stmt.setInt(4, tenantId);
|
||||||
|
stmt.setInt(5, tenantId);
|
||||||
|
|
||||||
|
rs = stmt.executeQuery();
|
||||||
|
|
||||||
|
int operationId = 0;
|
||||||
|
int enrolmentId = 0;
|
||||||
|
int responseId = 0;
|
||||||
|
Activity activity = null;
|
||||||
|
ActivityStatus activityStatus = null;
|
||||||
|
while (rs.next()) {
|
||||||
|
|
||||||
|
if (operationId != rs.getInt("OPERATION_ID")) {
|
||||||
|
activity = new Activity();
|
||||||
|
activities.add(activity);
|
||||||
|
List<ActivityStatus> statusList = new ArrayList<>();
|
||||||
|
activityStatus = new ActivityStatus();
|
||||||
|
|
||||||
|
operationId = rs.getInt("OPERATION_ID");
|
||||||
|
enrolmentId = rs.getInt("ENROLMENT_ID");
|
||||||
|
|
||||||
|
activity.setType(Activity.Type.valueOf(rs.getString("OPERATION_TYPE")));
|
||||||
|
activity.setCreatedTimeStamp(new java.util.Date(rs.getLong(("CREATED_TIMESTAMP")) * 1000).toString());
|
||||||
|
activity.setCode(rs.getString("OPERATION_CODE"));
|
||||||
|
|
||||||
|
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||||
|
deviceIdentifier.setId(rs.getString("DEVICE_IDENTIFICATION"));
|
||||||
|
deviceIdentifier.setType(rs.getString("DEVICE_TYPE"));
|
||||||
|
activityStatus.setDeviceIdentifier(deviceIdentifier);
|
||||||
|
|
||||||
|
activityStatus.setStatus(ActivityStatus.Status.valueOf(rs.getString("STATUS")));
|
||||||
|
|
||||||
|
List<OperationResponse> operationResponses = new ArrayList<>();
|
||||||
|
if (rs.getInt("UPDATED_TIMESTAMP") != 0) {
|
||||||
|
activityStatus.setUpdatedTimestamp(new java.util.Date(
|
||||||
|
rs.getLong(("UPDATED_TIMESTAMP")) * 1000).toString());
|
||||||
|
|
||||||
|
}
|
||||||
|
if (rs.getTimestamp("RECEIVED_TIMESTAMP") != (null)) {
|
||||||
|
operationResponses.add(OperationDAOUtil.getOperationResponse(rs));
|
||||||
|
responseId = rs.getInt("OP_RES_ID");
|
||||||
|
}
|
||||||
|
activityStatus.setResponses(operationResponses);
|
||||||
|
statusList.add(activityStatus);
|
||||||
|
activity.setActivityStatus(statusList);
|
||||||
|
activity.setActivityId(OperationDAOUtil.getActivityId(rs.getInt("OPERATION_ID")));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (operationId == rs.getInt("OPERATION_ID") && enrolmentId != rs.getInt("ENROLMENT_ID")) {
|
||||||
|
activityStatus = new ActivityStatus();
|
||||||
|
|
||||||
|
activity.setType(Activity.Type.valueOf(rs.getString("OPERATION_TYPE")));
|
||||||
|
activity.setCreatedTimeStamp(new java.util.Date(rs.getLong(("CREATED_TIMESTAMP")) * 1000).toString());
|
||||||
|
activity.setCode(rs.getString("OPERATION_CODE"));
|
||||||
|
|
||||||
|
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||||
|
deviceIdentifier.setId(rs.getString("DEVICE_IDENTIFICATION"));
|
||||||
|
deviceIdentifier.setType(rs.getString("DEVICE_TYPE"));
|
||||||
|
activityStatus.setDeviceIdentifier(deviceIdentifier);
|
||||||
|
|
||||||
|
activityStatus.setStatus(ActivityStatus.Status.valueOf(rs.getString("STATUS")));
|
||||||
|
|
||||||
|
List<OperationResponse> operationResponses = new ArrayList<>();
|
||||||
|
if (rs.getInt("UPDATED_TIMESTAMP") != 0) {
|
||||||
|
activityStatus.setUpdatedTimestamp(new java.util.Date(
|
||||||
|
rs.getLong(("UPDATED_TIMESTAMP")) * 1000).toString());
|
||||||
|
}
|
||||||
|
if (rs.getTimestamp("RECEIVED_TIMESTAMP") != (null)) {
|
||||||
|
operationResponses.add(OperationDAOUtil.getOperationResponse(rs));
|
||||||
|
responseId = rs.getInt("OP_RES_ID");
|
||||||
|
}
|
||||||
|
activityStatus.setResponses(operationResponses);
|
||||||
|
activity.getActivityStatus().add(activityStatus);
|
||||||
|
|
||||||
|
enrolmentId = rs.getInt("ENROLMENT_ID");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rs.getInt("OP_RES_ID") != 0 && responseId != rs.getInt("OP_RES_ID")) {
|
||||||
|
if (rs.getTimestamp("RECEIVED_TIMESTAMP") != (null)) {
|
||||||
|
activityStatus.getResponses().add(OperationDAOUtil.getOperationResponse(rs));
|
||||||
|
responseId = rs.getInt("OP_RES_ID");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new OperationManagementDAOException("Error occurred while getting the operation details from " +
|
||||||
|
"the database.", e);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
throw new OperationManagementDAOException("Error occurred while converting the operation response to string.", e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new OperationManagementDAOException("IO exception occurred while converting the operations responses.", e);
|
||||||
|
} finally {
|
||||||
|
OperationManagementDAOUtil.cleanupResources(stmt, rs);
|
||||||
|
}
|
||||||
|
return activities;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -18,11 +18,20 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.core.operation.mgt.dao.util;
|
package org.wso2.carbon.device.mgt.core.operation.mgt.dao.util;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationResponse;
|
||||||
import org.wso2.carbon.device.mgt.core.DeviceManagementConstants;
|
import org.wso2.carbon.device.mgt.core.DeviceManagementConstants;
|
||||||
import org.wso2.carbon.device.mgt.core.dto.operation.mgt.*;
|
import org.wso2.carbon.device.mgt.core.dto.operation.mgt.*;
|
||||||
|
|
||||||
public class OperationDAOUtil {
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
public class OperationDAOUtil {
|
||||||
|
private static final Log log = LogFactory.getLog(OperationDAOUtil.class);
|
||||||
public static Operation convertOperation(org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation) {
|
public static Operation convertOperation(org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation) {
|
||||||
|
|
||||||
Operation dtoOperation = null;
|
Operation dtoOperation = null;
|
||||||
@ -100,4 +109,52 @@ public class OperationDAOUtil {
|
|||||||
|
|
||||||
return operation;
|
return operation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static OperationResponse getOperationResponse(ResultSet rs) throws
|
||||||
|
ClassNotFoundException, IOException, SQLException {
|
||||||
|
OperationResponse response = new OperationResponse();
|
||||||
|
if (rs.getTimestamp("RECEIVED_TIMESTAMP") != (null)) {
|
||||||
|
response.setReceivedTimeStamp(rs.getTimestamp("RECEIVED_TIMESTAMP").toString());
|
||||||
|
}
|
||||||
|
ByteArrayInputStream bais = null;
|
||||||
|
ObjectInputStream ois = null;
|
||||||
|
byte[] contentBytes;
|
||||||
|
try {
|
||||||
|
if (rs.getBytes("OPERATION_RESPONSE") != null) {
|
||||||
|
contentBytes = (byte[]) rs.getBytes("OPERATION_RESPONSE");
|
||||||
|
bais = new ByteArrayInputStream(contentBytes);
|
||||||
|
ois = new ObjectInputStream(bais);
|
||||||
|
response.setResponse(ois.readObject().toString());
|
||||||
|
}
|
||||||
|
} 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Operation.Type getType(String type) {
|
||||||
|
return Operation.Type.valueOf(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setActivityId(Operation operation, int operationId) {
|
||||||
|
operation.setActivityId(DeviceManagementConstants.OperationAttributes.ACTIVITY + operationId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String getActivityId(int operationId) {
|
||||||
|
return DeviceManagementConstants.OperationAttributes.ACTIVITY + operationId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user