From 6441c201e5939c8e5d614957d4e9812a66857e94 Mon Sep 17 00:00:00 2001 From: harshanl Date: Fri, 18 Dec 2015 22:17:07 +0530 Subject: [PATCH] Added search support for pagination --- .../device/mgt/common/PaginationRequest.java | 89 +++++++ .../operation/mgt/OperationManager.java | 6 +- .../carbon/device/mgt/core/dao/DeviceDAO.java | 124 +++++++-- .../core/dao/impl/AbstractDeviceDAOImpl.java | 204 ++++++++++++++- .../dao/impl/device/GenericDeviceDAOImpl.java | 242 ++++++++++++++--- .../dao/impl/device/OracleDeviceDAOImpl.java | 243 ++++++++++++++++-- .../impl/device/PostgreSQLDeviceDAOImpl.java | 240 +++++++++++++++-- .../impl/device/SQLServerDeviceDAOImpl.java | 242 +++++++++++++++-- .../operation/mgt/OperationManagerImpl.java | 9 +- .../core/operation/mgt/dao/OperationDAO.java | 5 +- .../mgt/dao/impl/GenericOperationDAOImpl.java | 13 +- .../operation/OracleOperationDAOImpl.java | 13 +- .../operation/PostgreSQLOperationDAOImpl.java | 13 +- .../operation/SQLServerOperationDAOImpl.java | 14 +- .../DeviceManagementProviderService.java | 55 +++- .../DeviceManagementProviderServiceImpl.java | 189 +++++++++++++- .../authenticator/OAuthAuthenticator.java | 3 - 17 files changed, 1516 insertions(+), 188 deletions(-) create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/PaginationRequest.java diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/PaginationRequest.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/PaginationRequest.java new file mode 100644 index 00000000000..ae813f50a88 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/PaginationRequest.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2015, 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.common; + +/** + * This class holds required parameters for a querying a paginated response. + */ +public class PaginationRequest { + + private int startIndex; + private int rowCount; + private String owner; + private String status; + private String type; + private String deviceName; + private String ownership; + + public int getStartIndex() { + return startIndex; + } + + public void setStartIndex(int startIndex) { + this.startIndex = startIndex; + } + + public int getRowCount() { + return rowCount; + } + + public void setRowCount(int rowCount) { + this.rowCount = rowCount; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getOwnership() { + return ownership; + } + + public void setOwnership(String ownership) { + this.ownership = ownership; + } +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/operation/mgt/OperationManager.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/operation/mgt/OperationManager.java index 710facd64f8..1d86b618f8e 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/operation/mgt/OperationManager.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/operation/mgt/OperationManager.java @@ -19,6 +19,7 @@ package org.wso2.carbon.device.mgt.common.operation.mgt; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import org.wso2.carbon.device.mgt.common.PaginationRequest; import org.wso2.carbon.device.mgt.common.PaginationResult; import java.util.List; @@ -52,13 +53,12 @@ public interface OperationManager { * Method to retrieve all the operations applied to a device with pagination support. * * @param deviceId DeviceIdentifier of the device - * @param index Starting row number - * @param limit No of rows to fetch + * @param request PaginationRequest object holding the data for pagination * @return PaginationResult - Result including the required parameters necessary to do pagination. * @throws OperationManagementException If some unusual behaviour is observed while fetching the * operation list. */ - PaginationResult getOperations(DeviceIdentifier deviceId, int index, int limit) throws OperationManagementException; + PaginationResult getOperations(DeviceIdentifier deviceId, PaginationRequest request) throws OperationManagementException; /** * Method to retrieve the list of available operations to a device. diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/DeviceDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/DeviceDAO.java index dceabe6825b..6b204b008d7 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/DeviceDAO.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/DeviceDAO.java @@ -18,11 +18,8 @@ package org.wso2.carbon.device.mgt.core.dao; -import org.wso2.carbon.device.mgt.common.Device; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.common.EnrolmentInfo; +import org.wso2.carbon.device.mgt.common.*; import org.wso2.carbon.device.mgt.common.EnrolmentInfo.Status; -import org.wso2.carbon.device.mgt.common.PaginationResult; import org.wso2.carbon.device.mgt.core.dto.DeviceType; import java.util.HashMap; @@ -34,7 +31,7 @@ import java.util.List; public interface DeviceDAO { /** - * This method is used to add a device. + * This method is used to get the device count by device-type. * * @param type device type. * @param tenantId tenant id. @@ -43,6 +40,46 @@ public interface DeviceDAO { */ int getDeviceCount(String type, int tenantId) throws DeviceManagementDAOException; + /** + * This method is used to get the device count by user. + * + * @param username username of the user. + * @param tenantId tenant id. + * @return returns the device count of given user. + * @throws DeviceManagementDAOException + */ + int getDeviceCountByUser(String username, int tenantId) throws DeviceManagementDAOException; + + /** + * This method is used to get the device count by device name (pattern). + * + * @param deviceName name of the device. + * @param tenantId tenant id. + * @return returns the device count of given user. + * @throws DeviceManagementDAOException + */ + int getDeviceCountByName(String deviceName, int tenantId) throws DeviceManagementDAOException; + + /** + * This method is used to get the device count by status. + * + * @param status enrollment status. + * @param tenantId tenant id. + * @return returns the device count of given status. + * @throws DeviceManagementDAOException + */ + int getDeviceCount(EnrolmentInfo.Status status, int tenantId) throws DeviceManagementDAOException; + + /** + * This method is used to get the device count by ownership. + * + * @param ownerShip Ownership of devices. + * @param tenantId tenant id. + * @return returns the device count of given ownership. + * @throws DeviceManagementDAOException + */ + int getDeviceCountByOwnership(EnrolmentInfo.OwnerShip ownerShip, int tenantId) throws DeviceManagementDAOException; + /** * This method is used to add a device. * @@ -127,32 +164,30 @@ public interface DeviceDAO { /** * This method is used to retrieve the devices of a given tenant as a paginated result. * - * @param index start index of result set. - * @param limit number of records to be returned. + * @param request PaginationRequest object holding the data for pagination * @param tenantId tenant id. - * @return returns a PaginationResult including the requested data. + * @return returns paginated list of devices. * @throws DeviceManagementDAOException */ - PaginationResult getDevices(int index, int limit, int tenantId) throws DeviceManagementDAOException; + List getDevices(PaginationRequest request, int tenantId) throws DeviceManagementDAOException; /** * This method is used to retrieve the devices of a given tenant and type as a paginated result. * * @param type device type. - * @param index start index of result set. - * @param limit number of records to be returned. + * @param request PaginationRequest object holding the data for pagination * @param tenantId tenant id. - * @return returns a PaginationResult including the requested data. + * @return returns paginated list of devices of provided type. * @throws DeviceManagementDAOException */ - PaginationResult getDevices(String type, int index, int limit, int tenantId) throws DeviceManagementDAOException; + List getDevices(String type, PaginationRequest request, int tenantId) throws DeviceManagementDAOException; /** * This method is used to retrieve all the devices of a given tenant and device type. * * @param type device type. * @param tenantId tenant id. - * @return returns list of devices. + * @return returns list of devices of provided type. * @throws DeviceManagementDAOException */ List getDevices(String type, int tenantId) throws DeviceManagementDAOException; @@ -162,11 +197,22 @@ public interface DeviceDAO { * * @param username user name. * @param tenantId tenant id. - * @return returns list of devices. + * @return returns list of devices of given user. * @throws DeviceManagementDAOException */ List getDevicesOfUser(String username, int tenantId) throws DeviceManagementDAOException; + /** + * This method is used to retrieve devices of a given user. + * + * @param username user name. + * @param request PaginationRequest object holding the data for pagination + * @param tenantId tenant id. + * @return returns paginated list of devices in which owner matches (search) with given username. + * @throws DeviceManagementDAOException + */ + List getDevicesOfUser(String username, PaginationRequest request, int tenantId) throws DeviceManagementDAOException; + /** * This method is used to retrieve the device count of a given tenant. * @@ -176,6 +222,16 @@ public interface DeviceDAO { */ int getDeviceCount(int tenantId) throws DeviceManagementDAOException; + /** + * This method is used to retrieve the device count of a given tenant for the given search terms. + * + * @param request paginated request used to search devices. + * @param tenantId tenant id. + * @return returns the device count. + * @throws DeviceManagementDAOException + */ + int getDeviceCount(PaginationRequest request, int tenantId) throws DeviceManagementDAOException; + /** * This method is used to retrieve the available device types of a given tenant. * @@ -194,6 +250,18 @@ public interface DeviceDAO { */ List getDevicesByName(String deviceName, int tenantId) throws DeviceManagementDAOException; + /** + * This method is used to retrieve devices of a given device name. + * + * @param deviceName device name. + * @param request PaginationRequest object holding the data for pagination + * @param tenantId tenant id. + * @return returns paginated list of devices which name matches (search) given device-name. + * @throws DeviceManagementDAOException + */ + List getDevicesByName(String deviceName, PaginationRequest request, int tenantId) + throws DeviceManagementDAOException; + /** * This method is used to add an enrollment information of a given device. * @@ -246,11 +314,35 @@ public interface DeviceDAO { * * @param status enrollment status. * @param tenantId tenant id. - * @return returns list of devices. + * @return returns list of devices of given status. * @throws DeviceManagementDAOException */ List getDevicesByStatus(EnrolmentInfo.Status status, int tenantId) throws DeviceManagementDAOException; + /** + * This method is used to retrieve devices of a given ownership. + * + * @param ownerShip Ownership of devices. + * @param request PaginationRequest object holding the data for pagination + * @param tenantId tenant id. + * @return returns list of devices of given ownership. + * @throws DeviceManagementDAOException + */ + List getDevicesByOwnership(EnrolmentInfo.OwnerShip ownerShip, PaginationRequest request, int tenantId) + throws DeviceManagementDAOException; + + /** + * This method is used to retrieve devices of a given enrollment status. + * + * @param status enrollment status. + * @param request PaginationRequest object holding the data for pagination + * @param tenantId tenant id. + * @return returns paginated list of devices of given status. + * @throws DeviceManagementDAOException + */ + List getDevicesByStatus(EnrolmentInfo.Status status, PaginationRequest request, int tenantId) + throws DeviceManagementDAOException; + /** * This method is used to retrieve the enrollment id of a given device and status. * diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java index 92deb13643e..c1e4718df1f 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java @@ -22,6 +22,7 @@ import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.EnrolmentInfo; import org.wso2.carbon.device.mgt.common.EnrolmentInfo.Status; +import org.wso2.carbon.device.mgt.common.PaginationRequest; import org.wso2.carbon.device.mgt.core.dao.DeviceDAO; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; @@ -343,9 +344,12 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO { int deviceCount = 0; try { conn = this.getConnection(); - String sql = "SELECT COUNT(ID) AS DEVICE_COUNT FROM DM_DEVICE WHERE TENANT_ID = ? "; + String sql = "SELECT COUNT(d1.DEVICE_ID) AS DEVICE_COUNT FROM DM_ENROLMENT e, (SELECT d.ID AS DEVICE_ID FROM " + + "DM_DEVICE d, DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?) d1 WHERE " + + "d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, tenantId); + stmt.setInt(2, tenantId); rs = stmt.executeQuery(); if (rs.next()) { deviceCount = rs.getInt("DEVICE_COUNT"); @@ -358,6 +362,87 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO { return deviceCount; } + @Override + public int getDeviceCount(PaginationRequest request, int tenantId) throws DeviceManagementDAOException { + int deviceCount = 0; + Connection conn; + PreparedStatement stmt = null; + ResultSet rs = null; + String deviceType = request.getType(); + boolean isDeviceTypeProvided = false; + String deviceName = request.getDeviceName(); + boolean isDeviceNameProvided = false; + String owner = request.getOwner(); + boolean isOwnerProvided = false; + String ownership = request.getOwnership(); + boolean isOwnershipProvided = false; + String status = request.getStatus(); + boolean isStatusProvided = false; + try { + conn = this.getConnection(); + String sql = "SELECT COUNT(d1.ID) AS DEVICE_COUNT FROM DM_ENROLMENT e, (SELECT d.ID, d.NAME, d.DEVICE_IDENTIFICATION, " + + "t.NAME AS DEVICE_TYPE FROM DM_DEVICE d, DM_DEVICE_TYPE t WHERE DEVICE_TYPE_ID = t.ID " + + "AND d.TENANT_ID = ?"; + + if (deviceType != null && !deviceType.isEmpty()) { + sql = sql + " AND t.NAME = ?"; + isDeviceTypeProvided = true; + } + + if (deviceName != null && !deviceName.isEmpty()) { + sql = sql + " AND d.NAME LIKE ?"; + isDeviceNameProvided = true; + } + + sql = sql + ") d1 WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ?"; + + if (ownership != null && !ownership.isEmpty()) { + sql = sql + " AND e.OWNERSHIP = ?"; + isOwnershipProvided = true; + } + + if (owner != null && !owner.isEmpty()) { + sql = sql + " AND e.OWNER LIKE ?"; + isOwnerProvided = true; + } + + if (status != null && !status.isEmpty()) { + sql = sql + " AND e.STATUS = ?"; + isStatusProvided = true; + } + + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + int paramIdx = 2; + if (isDeviceTypeProvided) { + stmt.setString(paramIdx++, request.getType()); + } + if (isDeviceNameProvided) { + stmt.setString(paramIdx++, request.getDeviceName() + "%"); + } + stmt.setInt(paramIdx++, tenantId); + if (isOwnershipProvided) { + stmt.setString(paramIdx++, request.getOwnership()); + } + if (isOwnerProvided) { + stmt.setString(paramIdx++, request.getOwner() + "%"); + } + if (isStatusProvided) { + stmt.setString(paramIdx++, request.getStatus()); + } + rs = stmt.executeQuery(); + if (rs.next()) { + deviceCount = rs.getInt("DEVICE_COUNT"); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while retrieving information of all " + + "registered devices", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, rs); + } + return deviceCount; + } + @Override public int getDeviceCount(String type, int tenantId) throws DeviceManagementDAOException { Connection conn; @@ -366,11 +451,13 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO { int deviceCount = 0; try { conn = this.getConnection(); - String sql = "SELECT COUNT(d.ID) AS DEVICE_COUNT FROM DM_DEVICE d, (SELECT t.ID AS TYPE_ID FROM DM_DEVICE_TYPE t " + - "WHERE t.NAME = ?) d1 WHERE TYPE_ID = d.DEVICE_TYPE_ID AND d.TENANT_ID = ?"; + String sql = "SELECT COUNT(d1.ID) AS DEVICE_COUNT FROM DM_ENROLMENT e, (SELECT d.ID FROM DM_DEVICE d, " + + "DM_DEVICE_TYPE t WHERE DEVICE_TYPE_ID = t.ID AND t.NAME = ? " + + "AND d.TENANT_ID = ?) d1 WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ?"; stmt = conn.prepareStatement(sql); stmt.setString(1, type); stmt.setInt(2, tenantId); + stmt.setInt(3, tenantId); rs = stmt.executeQuery(); if (rs.next()) { deviceCount = rs.getInt("DEVICE_COUNT"); @@ -383,6 +470,117 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO { return deviceCount; } + @Override + public int getDeviceCountByUser(String username, int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + int deviceCount = 0; + try { + conn = this.getConnection(); + String sql = "SELECT COUNT(e1.DEVICE_ID) AS DEVICE_COUNT FROM DM_DEVICE d, (SELECT e.DEVICE_ID " + + "FROM DM_ENROLMENT e WHERE e.TENANT_ID = ? AND e.OWNER LIKE ?) " + + "e1, DM_DEVICE_TYPE t WHERE d.ID = e1.DEVICE_ID AND t.ID = d.DEVICE_TYPE_ID"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, username + "%"); + ResultSet rs = stmt.executeQuery(); + + if (rs.next()) { + deviceCount = rs.getInt("DEVICE_COUNT"); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices belongs to '" + + username + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return deviceCount; + } + + @Override + public int getDeviceCountByName(String deviceName, int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + int deviceCount = 0; + try { + conn = this.getConnection(); + String sql = "SELECT COUNT(d1.ID) AS DEVICE_COUNT FROM DM_ENROLMENT e, (SELECT d.ID FROM DM_DEVICE d, " + + "DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.NAME LIKE ? AND d.TENANT_ID = ?) d1 " + + "WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ?"; + stmt = conn.prepareStatement(sql); + stmt.setString(1, deviceName + "%"); + stmt.setInt(2, tenantId); + stmt.setInt(3, tenantId); + ResultSet rs = stmt.executeQuery(); + + if (rs.next()) { + deviceCount = rs.getInt("DEVICE_COUNT"); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the device count that matches " + + "'" + deviceName + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return deviceCount; + } + + @Override + public int getDeviceCountByOwnership(EnrolmentInfo.OwnerShip ownerShip, int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + int deviceCount = 0; + try { + conn = this.getConnection(); + String sql = "SELECT COUNT(d.ID) AS DEVICE_COUNT FROM (SELECT e.DEVICE_ID FROM DM_ENROLMENT e WHERE " + + "TENANT_ID = ? AND OWNERSHIP = ?) e, DM_DEVICE d, " + + "DM_DEVICE_TYPE t WHERE d.ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, ownerShip.toString()); + stmt.setInt(3, tenantId); + ResultSet rs = stmt.executeQuery(); + + if (rs.next()) { + deviceCount = rs.getInt("DEVICE_COUNT"); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches to ownership " + + "'" + ownerShip + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return deviceCount; + } + + @Override + public int getDeviceCount(Status status, int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + int deviceCount = 0; + try { + conn = this.getConnection(); + String sql = "SELECT COUNT(d.ID) AS DEVICE_COUNT FROM (SELECT e.DEVICE_ID FROM DM_ENROLMENT e WHERE " + + "TENANT_ID = ? AND STATUS = ?) e, DM_DEVICE d, " + + "DM_DEVICE_TYPE t WHERE d.ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, status.toString()); + stmt.setInt(3, tenantId); + ResultSet rs = stmt.executeQuery(); + + if (rs.next()) { + deviceCount = rs.getInt("DEVICE_COUNT"); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches to status " + + "'" + status + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return deviceCount; + } + /** * Get the list of devices that matches with the given device name. * diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/GenericDeviceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/GenericDeviceDAOImpl.java index e6bf3b7843f..134ccb8dffa 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/GenericDeviceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/GenericDeviceDAOImpl.java @@ -20,12 +20,11 @@ package org.wso2.carbon.device.mgt.core.dao.impl.device; import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.EnrolmentInfo; -import org.wso2.carbon.device.mgt.common.PaginationResult; +import org.wso2.carbon.device.mgt.common.PaginationRequest; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; import org.wso2.carbon.device.mgt.core.dao.impl.AbstractDeviceDAOImpl; import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil; -import org.wso2.carbon.device.mgt.core.dto.DeviceType; import java.sql.Connection; import java.sql.PreparedStatement; @@ -40,27 +39,82 @@ import java.util.List; public class GenericDeviceDAOImpl extends AbstractDeviceDAOImpl { @Override - public PaginationResult getDevices(int index, int limit, int tenantId) + public List getDevices(PaginationRequest request, int tenantId) throws DeviceManagementDAOException { - PaginationResult result = new PaginationResult(); Connection conn; PreparedStatement stmt = null; ResultSet rs = null; List devices = null; + String deviceType = request.getType(); + boolean isDeviceTypeProvided = false; + String deviceName = request.getDeviceName(); + boolean isDeviceNameProvided = false; + String owner = request.getOwner(); + boolean isOwnerProvided = false; + String ownership = request.getOwnership(); + boolean isOwnershipProvided = false; + String status = request.getStatus(); + boolean isStatusProvided = false; try { conn = this.getConnection(); - String sql = "SELECT d1.DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " + + String sql = "SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " + "d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + - "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID AS DEVICE_ID, " + - "d.DESCRIPTION, d.NAME, d.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE FROM DM_DEVICE d, " + - "DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?) d1 " + - "WHERE d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? LIMIT ?,?"; -// String sql = "SELECT * FROM DM_DEVICE WHERE TENANT_ID = ? LIMIT ?,?"; + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.DESCRIPTION, " + + "d.NAME, d.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE FROM DM_DEVICE d, DM_DEVICE_TYPE t " + + "WHERE DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?"; + + //Add the query for device-type + if (deviceType != null && !deviceType.isEmpty()) { + sql = sql + " AND t.NAME = ?"; + isDeviceTypeProvided = true; + } + //Add the query for device-name + if (deviceName != null && !deviceName.isEmpty()) { + sql = sql + " AND d.NAME LIKE ?"; + isDeviceNameProvided = true; + } + + sql = sql + ") d1 WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ?"; + + //Add the query for ownership + if (ownership != null && !ownership.isEmpty()) { + sql = sql + " AND e.OWNERSHIP = ?"; + isOwnershipProvided = true; + } + //Add the query for owner + if (owner != null && !owner.isEmpty()) { + sql = sql + " AND e.OWNER LIKE ?"; + isOwnerProvided = true; + } + //Add the query for status + if (status != null && !status.isEmpty()) { + sql = sql + " AND e.STATUS = ?"; + isStatusProvided = true; + } + + sql = sql + " LIMIT ?,?"; + stmt = conn.prepareStatement(sql); stmt.setInt(1, tenantId); - stmt.setInt(2, tenantId); - stmt.setInt(3, index); - stmt.setInt(4, limit); + int paramIdx = 2; + if (isDeviceTypeProvided) { + stmt.setString(paramIdx++, request.getType()); + } + if (isDeviceNameProvided) { + stmt.setString(paramIdx++, request.getDeviceName() + "%"); + } + stmt.setInt(paramIdx++, tenantId); + if (isOwnershipProvided) { + stmt.setString(paramIdx++, request.getOwnership()); + } + if (isOwnerProvided) { + stmt.setString(paramIdx++, request.getOwner() + "%"); + } + if (isStatusProvided) { + stmt.setString(paramIdx++, request.getStatus()); + } + stmt.setInt(paramIdx++, request.getStartIndex()); + stmt.setInt(paramIdx, request.getRowCount()); rs = stmt.executeQuery(); devices = new ArrayList<>(); while (rs.next()) { @@ -73,17 +127,12 @@ public class GenericDeviceDAOImpl extends AbstractDeviceDAOImpl { } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } - int count = this.getDeviceCount(tenantId); - result.setData(devices); - result.setRecordsFiltered(count); - result.setRecordsTotal(count); - return result; + return devices; } @Override - public PaginationResult getDevices(String type, int index, int limit, int tenantId) + public List getDevices(String type, PaginationRequest request, int tenantId) throws DeviceManagementDAOException { - PaginationResult result = new PaginationResult(); Connection conn; PreparedStatement stmt = null; ResultSet rs = null; @@ -96,14 +145,12 @@ public class GenericDeviceDAOImpl extends AbstractDeviceDAOImpl { "d.NAME, d.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE FROM DM_DEVICE d, " + "DM_DEVICE_TYPE t WHERE DEVICE_TYPE_ID = t.ID AND t.NAME = ? " + "AND d.TENANT_ID = ?) d1 WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ? LIMIT ?,?"; -// String sql = "SELECT * FROM DM_DEVICE d, (SELECT t.ID AS TYPE_ID FROM DM_DEVICE_TYPE t WHERE t.NAME = ?)" + -// " d1 WHERE TYPE_ID = d.DEVICE_TYPE_ID AND d.TENANT_ID = ? LIMIT ?,?"; stmt = conn.prepareStatement(sql); stmt.setString(1, type); stmt.setInt(2, tenantId); stmt.setInt(3, tenantId); - stmt.setInt(4, index); - stmt.setInt(5, limit); + stmt.setInt(4, request.getStartIndex()); + stmt.setInt(5, request.getRowCount()); rs = stmt.executeQuery(); devices = new ArrayList<>(); while (rs.next()) { @@ -115,14 +162,149 @@ public class GenericDeviceDAOImpl extends AbstractDeviceDAOImpl { } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } - int count = this.getDeviceCount(type, tenantId); - result.setData(devices); - result.setRecordsFiltered(count); - result.setRecordsTotal(count); - return result; + return devices; + } + + @Override + public List getDevicesOfUser(String username, PaginationRequest request, int tenantId) + throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT e1.OWNER, e1.OWNERSHIP, e1.ENROLMENT_ID, e1.DEVICE_ID, e1.STATUS, e1.DATE_OF_LAST_UPDATE," + + " e1.DATE_OF_ENROLMENT, d.DESCRIPTION, d.NAME AS DEVICE_NAME, d.DEVICE_IDENTIFICATION, t.NAME " + + "AS DEVICE_TYPE FROM DM_DEVICE d, (SELECT e.OWNER, e.OWNERSHIP, e.ID AS ENROLMENT_ID, " + + "e.DEVICE_ID, e.STATUS, e.DATE_OF_LAST_UPDATE, e.DATE_OF_ENROLMENT FROM DM_ENROLMENT e WHERE " + + "e.TENANT_ID = ? AND e.OWNER LIKE ?) e1, DM_DEVICE_TYPE t WHERE d.ID = e1.DEVICE_ID " + + "AND t.ID = d.DEVICE_TYPE_ID LIMIT ?,?"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, username + "%"); + stmt.setInt(3, request.getStartIndex()); + stmt.setInt(4, request.getRowCount()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices belongs to '" + + username + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; + } + + @Override + public List getDevicesByName(String deviceName, PaginationRequest request, int tenantId) + throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " + + "d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.NAME, " + + "d.DESCRIPTION, t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION FROM DM_DEVICE d, " + + "DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.NAME LIKE ? AND d.TENANT_ID = ?) d1 " + + "WHERE DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? LIMIT ?,?"; + stmt = conn.prepareStatement(sql); + stmt.setString(1, deviceName + "%"); + stmt.setInt(2, tenantId); + stmt.setInt(3, tenantId); + stmt.setInt(4, request.getStartIndex()); + stmt.setInt(5, request.getRowCount()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches " + + "'" + deviceName + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; + } + + @Override + public List getDevicesByOwnership(EnrolmentInfo.OwnerShip ownerShip, PaginationRequest request, + int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME AS DEVICE_NAME, t.NAME AS DEVICE_TYPE, " + + "d.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM (SELECT e.ID, e.DEVICE_ID, e.OWNER, e.OWNERSHIP, e.STATUS, " + + "e.DATE_OF_ENROLMENT, e.DATE_OF_LAST_UPDATE, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e " + + "WHERE TENANT_ID = ? AND OWNERSHIP = ?) e, DM_DEVICE d, DM_DEVICE_TYPE t " + + "WHERE DEVICE_ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ? LIMIT ?,?"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, ownerShip.toString()); + stmt.setInt(3, tenantId); + stmt.setInt(4, request.getStartIndex()); + stmt.setInt(5, request.getRowCount()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches to ownership " + + "'" + ownerShip + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; + } + + @Override + public List getDevicesByStatus(EnrolmentInfo.Status status, PaginationRequest request, + int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME AS DEVICE_NAME, t.NAME AS DEVICE_TYPE, " + + "d.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM (SELECT e.ID, e.DEVICE_ID, e.OWNER, e.OWNERSHIP, e.STATUS, " + + "e.DATE_OF_ENROLMENT, e.DATE_OF_LAST_UPDATE, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e " + + "WHERE TENANT_ID = ? AND STATUS = ?) e, DM_DEVICE d, DM_DEVICE_TYPE t " + + "WHERE DEVICE_ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ? LIMIT ?,?"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, status.toString()); + stmt.setInt(3, tenantId); + stmt.setInt(4, request.getStartIndex()); + stmt.setInt(5, request.getRowCount()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches to status " + + "'" + status + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; } - private Connection getConnection() throws SQLException { + private Connection getConnection() throws SQLException { return DeviceManagementDAOFactory.getConnection(); } } \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/OracleDeviceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/OracleDeviceDAOImpl.java index d1a6c570014..c75162ae4a3 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/OracleDeviceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/OracleDeviceDAOImpl.java @@ -19,12 +19,13 @@ package org.wso2.carbon.device.mgt.core.dao.impl.device; import org.wso2.carbon.device.mgt.common.Device; -import org.wso2.carbon.device.mgt.common.PaginationResult; +import org.wso2.carbon.device.mgt.common.EnrolmentInfo; +import org.wso2.carbon.device.mgt.common.PaginationRequest; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; import org.wso2.carbon.device.mgt.core.dao.impl.AbstractDeviceDAOImpl; import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil; -import org.wso2.carbon.device.mgt.core.dto.DeviceType; + import java.sql.Connection; import java.sql.PreparedStatement; @@ -39,26 +40,82 @@ import java.util.List; public class OracleDeviceDAOImpl extends AbstractDeviceDAOImpl { @Override - public PaginationResult getDevices(int index, int limit, int tenantId) + public List getDevices(PaginationRequest request, int tenantId) throws DeviceManagementDAOException { - PaginationResult result = new PaginationResult(); Connection conn; PreparedStatement stmt = null; ResultSet rs = null; List devices = null; + String deviceType = request.getType(); + boolean isDeviceTypeProvided = false; + String deviceName = request.getDeviceName(); + boolean isDeviceNameProvided = false; + String owner = request.getOwner(); + boolean isOwnerProvided = false; + String ownership = request.getOwnership(); + boolean isOwnershipProvided = false; + String status = request.getStatus(); + boolean isStatusProvided = false; try { conn = this.getConnection(); - String sql = "SELECT d1.DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " + + String sql = "SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " + "d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + - "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID AS DEVICE_ID, " + - "d.DESCRIPTION, d.NAME, d.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE FROM DM_DEVICE d, " + - "DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?) d1 " + - "WHERE d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.DESCRIPTION, " + + "d.NAME, d.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE FROM DM_DEVICE d, DM_DEVICE_TYPE t " + + "WHERE DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?"; + + //Add the query for device-type + if (deviceType != null && !deviceType.isEmpty()) { + sql = sql + " AND t.NAME = ?"; + isDeviceTypeProvided = true; + } + //Add the query for device-name + if (deviceName != null && !deviceName.isEmpty()) { + sql = sql + " AND d.NAME LIKE ?"; + isDeviceNameProvided = true; + } + + sql = sql + ") d1 WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ?"; + + //Add the query for ownership + if (ownership != null && !ownership.isEmpty()) { + sql = sql + " AND e.OWNERSHIP = ?"; + isOwnershipProvided = true; + } + //Add the query for owner + if (owner != null && !owner.isEmpty()) { + sql = sql + " AND e.OWNER LIKE ?"; + isOwnerProvided = true; + } + //Add the query for status + if (status != null && !status.isEmpty()) { + sql = sql + " AND e.STATUS = ?"; + isStatusProvided = true; + } + + sql = sql + " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + stmt = conn.prepareStatement(sql); stmt.setInt(1, tenantId); - stmt.setInt(2, tenantId); - stmt.setInt(3, index); - stmt.setInt(4, limit); + int paramIdx = 2; + if (isDeviceTypeProvided) { + stmt.setString(paramIdx++, request.getType()); + } + if (isDeviceNameProvided) { + stmt.setString(paramIdx++, request.getDeviceName() + "%"); + } + stmt.setInt(paramIdx++, tenantId); + if (isOwnershipProvided) { + stmt.setString(paramIdx++, request.getOwnership()); + } + if (isOwnerProvided) { + stmt.setString(paramIdx++, request.getOwner() + "%"); + } + if (isStatusProvided) { + stmt.setString(paramIdx++, request.getStatus()); + } + stmt.setInt(paramIdx++, request.getStartIndex()); + stmt.setInt(paramIdx, request.getRowCount()); rs = stmt.executeQuery(); devices = new ArrayList<>(); while (rs.next()) { @@ -71,17 +128,12 @@ public class OracleDeviceDAOImpl extends AbstractDeviceDAOImpl { } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } - int count = this.getDeviceCount(tenantId); - result.setData(devices); - result.setRecordsFiltered(count); - result.setRecordsTotal(count); - return result; + return devices; } @Override - public PaginationResult getDevices(String type, int index, int limit, int tenantId) + public List getDevices(String type, PaginationRequest request, int tenantId) throws DeviceManagementDAOException { - PaginationResult result = new PaginationResult(); Connection conn; PreparedStatement stmt = null; ResultSet rs = null; @@ -98,8 +150,8 @@ public class OracleDeviceDAOImpl extends AbstractDeviceDAOImpl { stmt.setString(1, type); stmt.setInt(2, tenantId); stmt.setInt(3, tenantId); - stmt.setInt(4, index); - stmt.setInt(5, limit); + stmt.setInt(4, request.getStartIndex()); + stmt.setInt(5, request.getRowCount()); rs = stmt.executeQuery(); devices = new ArrayList<>(); while (rs.next()) { @@ -111,14 +163,151 @@ public class OracleDeviceDAOImpl extends AbstractDeviceDAOImpl { } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } - int count = this.getDeviceCount(type, tenantId); - result.setData(devices); - result.setRecordsFiltered(count); - result.setRecordsTotal(count); - return result; + return devices; + } + + @Override + public List getDevicesOfUser(String username, PaginationRequest request, int tenantId) + throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT e1.OWNER, e1.OWNERSHIP, e1.ENROLMENT_ID, e1.DEVICE_ID, e1.STATUS, e1.DATE_OF_LAST_UPDATE," + + " e1.DATE_OF_ENROLMENT, d.DESCRIPTION, d.NAME AS DEVICE_NAME, d.DEVICE_IDENTIFICATION, t.NAME " + + "AS DEVICE_TYPE FROM DM_DEVICE d, (SELECT e.OWNER, e.OWNERSHIP, e.ID AS ENROLMENT_ID, " + + "e.DEVICE_ID, e.STATUS, e.DATE_OF_LAST_UPDATE, e.DATE_OF_ENROLMENT FROM DM_ENROLMENT e WHERE " + + "e.TENANT_ID = ? AND e.OWNER LIKE ?) e1, DM_DEVICE_TYPE t WHERE d.ID = e1.DEVICE_ID " + + "AND t.ID = d.DEVICE_TYPE_ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, username + "%"); + stmt.setInt(3, request.getStartIndex()); + stmt.setInt(4, request.getRowCount()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices belongs to '" + + username + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; + } + + @Override + public List getDevicesByStatus(EnrolmentInfo.Status status, PaginationRequest request, + int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME AS DEVICE_NAME, t.NAME AS DEVICE_TYPE, " + + "d.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM (SELECT e.ID, e.DEVICE_ID, e.OWNER, e.OWNERSHIP, e.STATUS, " + + "e.DATE_OF_ENROLMENT, e.DATE_OF_LAST_UPDATE, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e " + + "WHERE TENANT_ID = ? AND STATUS = ?) e, DM_DEVICE d, DM_DEVICE_TYPE t " + + "WHERE DEVICE_ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ? OFFSET ? ROWS" + + " FETCH NEXT ? ROWS ONLY"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, status.toString()); + stmt.setInt(3, tenantId); + stmt.setInt(4, request.getStartIndex()); + stmt.setInt(5, request.getRowCount()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches to status " + + "'" + status + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; + } + + @Override + public List getDevicesByName(String deviceName, PaginationRequest request, int tenantId) + throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " + + "d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.NAME, " + + "d.DESCRIPTION, t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION FROM DM_DEVICE d, " + + "DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.NAME LIKE ? AND d.TENANT_ID = ?) d1 " + + "WHERE DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + stmt = conn.prepareStatement(sql); + stmt.setString(1, deviceName + "%"); + stmt.setInt(2, tenantId); + stmt.setInt(3, tenantId); + stmt.setInt(4, request.getStartIndex()); + stmt.setInt(5, request.getRowCount()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches " + + "'" + deviceName + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; + } + + @Override + public List getDevicesByOwnership(EnrolmentInfo.OwnerShip ownerShip, PaginationRequest request, + int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME AS DEVICE_NAME, t.NAME AS DEVICE_TYPE, " + + "d.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM (SELECT e.ID, e.DEVICE_ID, e.OWNER, e.OWNERSHIP, e.STATUS, " + + "e.DATE_OF_ENROLMENT, e.DATE_OF_LAST_UPDATE, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e " + + "WHERE TENANT_ID = ? AND OWNERSHIP = ?) e, DM_DEVICE d, DM_DEVICE_TYPE t " + + "WHERE DEVICE_ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ? OFFSET ? " + + "ROWS FETCH NEXT ? ROWS ONLY"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, ownerShip.toString()); + stmt.setInt(3, tenantId); + stmt.setInt(4, request.getStartIndex()); + stmt.setInt(5, request.getRowCount()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches to ownership " + + "'" + ownerShip + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; } - private Connection getConnection() throws SQLException { + private Connection getConnection() throws SQLException { return DeviceManagementDAOFactory.getConnection(); } } \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/PostgreSQLDeviceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/PostgreSQLDeviceDAOImpl.java index 612a431fb17..ce22de94f99 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/PostgreSQLDeviceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/PostgreSQLDeviceDAOImpl.java @@ -19,12 +19,12 @@ package org.wso2.carbon.device.mgt.core.dao.impl.device; import org.wso2.carbon.device.mgt.common.Device; -import org.wso2.carbon.device.mgt.common.PaginationResult; +import org.wso2.carbon.device.mgt.common.EnrolmentInfo; +import org.wso2.carbon.device.mgt.common.PaginationRequest; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; import org.wso2.carbon.device.mgt.core.dao.impl.AbstractDeviceDAOImpl; import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil; -import org.wso2.carbon.device.mgt.core.dto.DeviceType; import java.sql.Connection; import java.sql.PreparedStatement; @@ -39,26 +39,82 @@ import java.util.List; public class PostgreSQLDeviceDAOImpl extends AbstractDeviceDAOImpl { @Override - public PaginationResult getDevices(int index, int limit, int tenantId) + public List getDevices(PaginationRequest request, int tenantId) throws DeviceManagementDAOException { - PaginationResult result = new PaginationResult(); Connection conn; PreparedStatement stmt = null; ResultSet rs = null; List devices = null; + String deviceType = request.getType(); + boolean isDeviceTypeProvided = false; + String deviceName = request.getDeviceName(); + boolean isDeviceNameProvided = false; + String owner = request.getOwner(); + boolean isOwnerProvided = false; + String ownership = request.getOwnership(); + boolean isOwnershipProvided = false; + String status = request.getStatus(); + boolean isStatusProvided = false; try { conn = this.getConnection(); - String sql = "SELECT d1.DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " + + String sql = "SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " + "d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + - "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID AS DEVICE_ID, " + - "d.DESCRIPTION, d.NAME, d.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE FROM DM_DEVICE d, " + - "DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?) d1 " + - "WHERE d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? LIMIT ? OFFSET ?"; + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.DESCRIPTION, " + + "d.NAME, d.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE FROM DM_DEVICE d, DM_DEVICE_TYPE t " + + "WHERE DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?"; + + //Add the query for device-type + if (deviceType != null && !deviceType.isEmpty()) { + sql = sql + " AND t.NAME = ?"; + isDeviceTypeProvided = true; + } + //Add the query for device-name + if (deviceName != null && !deviceName.isEmpty()) { + sql = sql + " AND d.NAME LIKE ?"; + isDeviceNameProvided = true; + } + + sql = sql + ") d1 WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ?"; + + //Add the query for ownership + if (ownership != null && !ownership.isEmpty()) { + sql = sql + " AND e.OWNERSHIP = ?"; + isOwnershipProvided = true; + } + //Add the query for owner + if (owner != null && !owner.isEmpty()) { + sql = sql + " AND e.OWNER LIKE ?"; + isOwnerProvided = true; + } + //Add the query for status + if (status != null && !status.isEmpty()) { + sql = sql + " AND e.STATUS = ?"; + isStatusProvided = true; + } + + sql = sql + " LIMIT ? OFFSET ?"; + stmt = conn.prepareStatement(sql); stmt.setInt(1, tenantId); - stmt.setInt(2, tenantId); - stmt.setInt(3, limit); - stmt.setInt(4, index); + int paramIdx = 2; + if (isDeviceTypeProvided) { + stmt.setString(paramIdx++, request.getType()); + } + if (isDeviceNameProvided) { + stmt.setString(paramIdx++, request.getDeviceName() + "%"); + } + stmt.setInt(paramIdx++, tenantId); + if (isOwnershipProvided) { + stmt.setString(paramIdx++, request.getOwnership()); + } + if (isOwnerProvided) { + stmt.setString(paramIdx++, request.getOwner() + "%"); + } + if (isStatusProvided) { + stmt.setString(paramIdx++, request.getStatus()); + } + stmt.setInt(paramIdx, request.getRowCount()); + stmt.setInt(paramIdx++, request.getStartIndex()); rs = stmt.executeQuery(); devices = new ArrayList<>(); while (rs.next()) { @@ -71,17 +127,12 @@ public class PostgreSQLDeviceDAOImpl extends AbstractDeviceDAOImpl { } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } - int count = this.getDeviceCount(tenantId); - result.setData(devices); - result.setRecordsFiltered(count); - result.setRecordsTotal(count); - return result; + return devices; } @Override - public PaginationResult getDevices(String type, int index, int limit, int tenantId) + public List getDevices(String type, PaginationRequest request, int tenantId) throws DeviceManagementDAOException { - PaginationResult result = new PaginationResult(); Connection conn; PreparedStatement stmt = null; ResultSet rs = null; @@ -98,8 +149,8 @@ public class PostgreSQLDeviceDAOImpl extends AbstractDeviceDAOImpl { stmt.setString(1, type); stmt.setInt(2, tenantId); stmt.setInt(3, tenantId); - stmt.setInt(4, limit); - stmt.setInt(5, index); + stmt.setInt(4, request.getRowCount()); + stmt.setInt(5, request.getStartIndex()); rs = stmt.executeQuery(); devices = new ArrayList<>(); while (rs.next()) { @@ -111,14 +162,149 @@ public class PostgreSQLDeviceDAOImpl extends AbstractDeviceDAOImpl { } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } - int count = this.getDeviceCount(type, tenantId); - result.setData(devices); - result.setRecordsFiltered(count); - result.setRecordsTotal(count); - return result; + return devices; + } + + @Override + public List getDevicesOfUser(String username, PaginationRequest request, int tenantId) + throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT e1.OWNER, e1.OWNERSHIP, e1.ENROLMENT_ID, e1.DEVICE_ID, e1.STATUS, e1.DATE_OF_LAST_UPDATE," + + " e1.DATE_OF_ENROLMENT, d.DESCRIPTION, d.NAME AS DEVICE_NAME, d.DEVICE_IDENTIFICATION, t.NAME " + + "AS DEVICE_TYPE FROM DM_DEVICE d, (SELECT e.OWNER, e.OWNERSHIP, e.ID AS ENROLMENT_ID, " + + "e.DEVICE_ID, e.STATUS, e.DATE_OF_LAST_UPDATE, e.DATE_OF_ENROLMENT FROM DM_ENROLMENT e WHERE " + + "e.TENANT_ID = ? AND e.OWNER LIKE ?) e1, DM_DEVICE_TYPE t WHERE d.ID = e1.DEVICE_ID " + + "AND t.ID = d.DEVICE_TYPE_ID LIMIT ? OFFSET ?"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, username + "%"); + stmt.setInt(3, request.getRowCount()); + stmt.setInt(4, request.getStartIndex()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices belongs to '" + + username + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; + } + + @Override + public List getDevicesByStatus(EnrolmentInfo.Status status, PaginationRequest request, + int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME AS DEVICE_NAME, t.NAME AS DEVICE_TYPE, " + + "d.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM (SELECT e.ID, e.DEVICE_ID, e.OWNER, e.OWNERSHIP, e.STATUS, " + + "e.DATE_OF_ENROLMENT, e.DATE_OF_LAST_UPDATE, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e " + + "WHERE TENANT_ID = ? AND STATUS = ?) e, DM_DEVICE d, DM_DEVICE_TYPE t " + + "WHERE DEVICE_ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ? LIMIT ? OFFSET ?"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, status.toString()); + stmt.setInt(3, tenantId); + stmt.setInt(4, request.getRowCount()); + stmt.setInt(5, request.getStartIndex()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches to status " + + "'" + status + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; + } + + @Override + public List getDevicesByName(String deviceName, PaginationRequest request, int tenantId) + throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " + + "d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.NAME, " + + "d.DESCRIPTION, t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION FROM DM_DEVICE d, " + + "DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.NAME LIKE ? AND d.TENANT_ID = ?) d1 " + + "WHERE DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? LIMIT ? OFFSET ?"; + stmt = conn.prepareStatement(sql); + stmt.setString(1, deviceName + "%"); + stmt.setInt(2, tenantId); + stmt.setInt(3, tenantId); + stmt.setInt(4, request.getRowCount()); + stmt.setInt(5, request.getStartIndex()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches " + + "'" + deviceName + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; + } + + @Override + public List getDevicesByOwnership(EnrolmentInfo.OwnerShip ownerShip, PaginationRequest request, + int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME AS DEVICE_NAME, t.NAME AS DEVICE_TYPE, " + + "d.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM (SELECT e.ID, e.DEVICE_ID, e.OWNER, e.OWNERSHIP, e.STATUS, " + + "e.DATE_OF_ENROLMENT, e.DATE_OF_LAST_UPDATE, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e " + + "WHERE TENANT_ID = ? AND OWNERSHIP = ?) e, DM_DEVICE d, DM_DEVICE_TYPE t " + + "WHERE DEVICE_ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ? LIMIT ? OFFSET ?"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, ownerShip.toString()); + stmt.setInt(3, tenantId); + stmt.setInt(4, request.getRowCount()); + stmt.setInt(5, request.getStartIndex()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches to ownership " + + "'" + ownerShip + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; } - private Connection getConnection() throws SQLException { + private Connection getConnection() throws SQLException { return DeviceManagementDAOFactory.getConnection(); } } \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/SQLServerDeviceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/SQLServerDeviceDAOImpl.java index 8e47ac2024f..393712fb5ab 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/SQLServerDeviceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/device/SQLServerDeviceDAOImpl.java @@ -19,12 +19,12 @@ package org.wso2.carbon.device.mgt.core.dao.impl.device; import org.wso2.carbon.device.mgt.common.Device; -import org.wso2.carbon.device.mgt.common.PaginationResult; +import org.wso2.carbon.device.mgt.common.EnrolmentInfo; +import org.wso2.carbon.device.mgt.common.PaginationRequest; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; import org.wso2.carbon.device.mgt.core.dao.impl.AbstractDeviceDAOImpl; import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil; -import org.wso2.carbon.device.mgt.core.dto.DeviceType; import java.sql.Connection; import java.sql.PreparedStatement; @@ -39,26 +39,82 @@ import java.util.List; public class SQLServerDeviceDAOImpl extends AbstractDeviceDAOImpl { @Override - public PaginationResult getDevices(int index, int limit, int tenantId) + public List getDevices(PaginationRequest request, int tenantId) throws DeviceManagementDAOException { - PaginationResult result = new PaginationResult(); Connection conn; PreparedStatement stmt = null; ResultSet rs = null; List devices = null; + String deviceType = request.getType(); + boolean isDeviceTypeProvided = false; + String deviceName = request.getDeviceName(); + boolean isDeviceNameProvided = false; + String owner = request.getOwner(); + boolean isOwnerProvided = false; + String ownership = request.getOwnership(); + boolean isOwnershipProvided = false; + String status = request.getStatus(); + boolean isStatusProvided = false; try { conn = this.getConnection(); - String sql = "SELECT d1.DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " + + String sql = "SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " + "d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + - "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID AS DEVICE_ID, " + - "d.DESCRIPTION, d.NAME, d.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE FROM DM_DEVICE d, " + - "DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?) d1 " + - "WHERE d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.DESCRIPTION, " + + "d.NAME, d.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE FROM DM_DEVICE d, DM_DEVICE_TYPE t " + + "WHERE DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ?"; + + //Add the query for device-type + if (deviceType != null && !deviceType.isEmpty()) { + sql = sql + " AND t.NAME = ?"; + isDeviceTypeProvided = true; + } + //Add the query for device-name + if (deviceName != null && !deviceName.isEmpty()) { + sql = sql + " AND d.NAME LIKE ?"; + isDeviceNameProvided = true; + } + + sql = sql + ") d1 WHERE d1.ID = e.DEVICE_ID AND TENANT_ID = ?"; + + //Add the query for ownership + if (ownership != null && !ownership.isEmpty()) { + sql = sql + " AND e.OWNERSHIP = ?"; + isOwnershipProvided = true; + } + //Add the query for owner + if (owner != null && !owner.isEmpty()) { + sql = sql + " AND e.OWNER LIKE ?"; + isOwnerProvided = true; + } + //Add the query for status + if (status != null && !status.isEmpty()) { + sql = sql + " AND e.STATUS = ?"; + isStatusProvided = true; + } + + sql = sql + " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + stmt = conn.prepareStatement(sql); stmt.setInt(1, tenantId); - stmt.setInt(2, tenantId); - stmt.setInt(3, index); - stmt.setInt(4, limit); + int paramIdx = 2; + if (isDeviceTypeProvided) { + stmt.setString(paramIdx++, request.getType()); + } + if (isDeviceNameProvided) { + stmt.setString(paramIdx++, request.getDeviceName() + "%"); + } + stmt.setInt(paramIdx++, tenantId); + if (isOwnershipProvided) { + stmt.setString(paramIdx++, request.getOwnership()); + } + if (isOwnerProvided) { + stmt.setString(paramIdx++, request.getOwner() + "%"); + } + if (isStatusProvided) { + stmt.setString(paramIdx++, request.getStatus()); + } + stmt.setInt(paramIdx++, request.getStartIndex()); + stmt.setInt(paramIdx, request.getRowCount()); rs = stmt.executeQuery(); devices = new ArrayList<>(); while (rs.next()) { @@ -71,17 +127,12 @@ public class SQLServerDeviceDAOImpl extends AbstractDeviceDAOImpl { } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } - int count = this.getDeviceCount(tenantId); - result.setData(devices); - result.setRecordsFiltered(count); - result.setRecordsTotal(count); - return result; + return devices; } @Override - public PaginationResult getDevices(String type, int index, int limit, int tenantId) + public List getDevices(String type, PaginationRequest request, int tenantId) throws DeviceManagementDAOException { - PaginationResult result = new PaginationResult(); Connection conn; PreparedStatement stmt = null; ResultSet rs = null; @@ -98,8 +149,8 @@ public class SQLServerDeviceDAOImpl extends AbstractDeviceDAOImpl { stmt.setString(1, type); stmt.setInt(2, tenantId); stmt.setInt(3, tenantId); - stmt.setInt(4, index); - stmt.setInt(5, limit); + stmt.setInt(4, request.getStartIndex()); + stmt.setInt(5, request.getRowCount()); rs = stmt.executeQuery(); devices = new ArrayList<>(); while (rs.next()) { @@ -111,14 +162,151 @@ public class SQLServerDeviceDAOImpl extends AbstractDeviceDAOImpl { } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } - int count = this.getDeviceCount(type, tenantId); - result.setData(devices); - result.setRecordsFiltered(count); - result.setRecordsTotal(count); - return result; + return devices; + } + + @Override + public List getDevicesOfUser(String username, PaginationRequest request, int tenantId) + throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT e1.OWNER, e1.OWNERSHIP, e1.ENROLMENT_ID, e1.DEVICE_ID, e1.STATUS, e1.DATE_OF_LAST_UPDATE," + + " e1.DATE_OF_ENROLMENT, d.DESCRIPTION, d.NAME AS DEVICE_NAME, d.DEVICE_IDENTIFICATION, t.NAME " + + "AS DEVICE_TYPE FROM DM_DEVICE d, (SELECT e.OWNER, e.OWNERSHIP, e.ID AS ENROLMENT_ID, " + + "e.DEVICE_ID, e.STATUS, e.DATE_OF_LAST_UPDATE, e.DATE_OF_ENROLMENT FROM DM_ENROLMENT e WHERE " + + "e.TENANT_ID = ? AND e.OWNER LIKE ?) e1, DM_DEVICE_TYPE t WHERE d.ID = e1.DEVICE_ID " + + "AND t.ID = d.DEVICE_TYPE_ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, username + "%"); + stmt.setInt(3, request.getStartIndex()); + stmt.setInt(4, request.getRowCount()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices belongs to '" + + username + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; + } + + @Override + public List getDevicesByStatus(EnrolmentInfo.Status status, PaginationRequest request, + int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME AS DEVICE_NAME, t.NAME AS DEVICE_TYPE, " + + "d.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM (SELECT e.ID, e.DEVICE_ID, e.OWNER, e.OWNERSHIP, e.STATUS, " + + "e.DATE_OF_ENROLMENT, e.DATE_OF_LAST_UPDATE, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e " + + "WHERE TENANT_ID = ? AND STATUS = ?) e, DM_DEVICE d, DM_DEVICE_TYPE t " + + "WHERE DEVICE_ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ? OFFSET ? ROWS" + + " FETCH NEXT ? ROWS ONLY"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, status.toString()); + stmt.setInt(3, tenantId); + stmt.setInt(4, request.getStartIndex()); + stmt.setInt(5, request.getRowCount()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches to status " + + "'" + status + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; + } + + @Override + public List getDevicesByName(String deviceName, PaginationRequest request, int tenantId) + throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT d1.ID AS DEVICE_ID, d1.DESCRIPTION, d1.NAME AS DEVICE_NAME, d1.DEVICE_TYPE, " + + "d1.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.NAME, " + + "d.DESCRIPTION, t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION FROM DM_DEVICE d, " + + "DM_DEVICE_TYPE t WHERE d.DEVICE_TYPE_ID = t.ID AND d.NAME LIKE ? AND d.TENANT_ID = ?) d1 " + + "WHERE DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + stmt = conn.prepareStatement(sql); + stmt.setString(1, deviceName + "%"); + stmt.setInt(2, tenantId); + stmt.setInt(3, tenantId); + stmt.setInt(4, request.getStartIndex()); + stmt.setInt(5, request.getRowCount()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches " + + "'" + deviceName + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; + } + + @Override + public List getDevicesByOwnership(EnrolmentInfo.OwnerShip ownerShip, PaginationRequest request, + int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME AS DEVICE_NAME, t.NAME AS DEVICE_TYPE, " + + "d.DEVICE_IDENTIFICATION, e.OWNER, e.OWNERSHIP, e.STATUS, e.DATE_OF_LAST_UPDATE, " + + "e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM (SELECT e.ID, e.DEVICE_ID, e.OWNER, e.OWNERSHIP, e.STATUS, " + + "e.DATE_OF_ENROLMENT, e.DATE_OF_LAST_UPDATE, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e " + + "WHERE TENANT_ID = ? AND OWNERSHIP = ?) e, DM_DEVICE d, DM_DEVICE_TYPE t " + + "WHERE DEVICE_ID = e.DEVICE_ID AND d.DEVICE_TYPE_ID = t.ID AND d.TENANT_ID = ? OFFSET ? " + + "ROWS FETCH NEXT ? ROWS ONLY"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, ownerShip.toString()); + stmt.setInt(3, tenantId); + stmt.setInt(4, request.getStartIndex()); + stmt.setInt(5, request.getRowCount()); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices that matches to ownership " + + "'" + ownerShip + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, null); + } + return devices; } - private Connection getConnection() throws SQLException { + private Connection getConnection() throws SQLException { return DeviceManagementDAOFactory.getConnection(); } } \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java index e0018eaafe2..b6bcb4ce1cd 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java @@ -21,10 +21,7 @@ package org.wso2.carbon.device.mgt.core.operation.mgt; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.CarbonContext; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.common.EnrolmentInfo; -import org.wso2.carbon.device.mgt.common.PaginationResult; -import org.wso2.carbon.device.mgt.common.TransactionManagementException; +import org.wso2.carbon.device.mgt.common.*; import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException; import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; @@ -190,7 +187,7 @@ public class OperationManagerImpl implements OperationManager { } @Override - public PaginationResult getOperations(DeviceIdentifier deviceId, int index, int limit) + public PaginationResult getOperations(DeviceIdentifier deviceId, PaginationRequest request) throws OperationManagementException { PaginationResult paginationResult = null; int enrolmentId; @@ -215,7 +212,7 @@ public class OperationManagerImpl implements OperationManager { deviceId.getType()); } List operationList = - operationDAO.getOperationsForDevice(enrolmentId, index, limit); + operationDAO.getOperationsForDevice(enrolmentId, request); for (org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation dtoOperation : operationList) { Operation operation = OperationDAOUtil.convertOperation(dtoOperation); operations.add(operation); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/OperationDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/OperationDAO.java index 78097cf8dda..c24887d1bfd 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/OperationDAO.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/OperationDAO.java @@ -18,6 +18,7 @@ */ package org.wso2.carbon.device.mgt.core.operation.mgt.dao; +import org.wso2.carbon.device.mgt.common.PaginationRequest; import org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation; import java.util.List; @@ -37,14 +38,14 @@ public interface OperationDAO { List getOperationsByDeviceAndStatus(int enrolmentId, Operation.Status status) throws OperationManagementDAOException; - List getOperationsByDeviceAndStatus(int enrolmentId, int index, int limit, Operation.Status status) + List getOperationsByDeviceAndStatus(int enrolmentId, PaginationRequest request, Operation.Status status) throws OperationManagementDAOException; List getOperationsForDevice(int enrolmentId) throws OperationManagementDAOException; int getOperationCountForDevice(int enrolmentId) throws OperationManagementDAOException; - List getOperationsForDevice(int enrolmentId, int index, int limit) throws OperationManagementDAOException; + List getOperationsForDevice(int enrolmentId, PaginationRequest request) throws OperationManagementDAOException; Operation getNextOperation(int enrolmentId) throws OperationManagementDAOException; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/GenericOperationDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/GenericOperationDAOImpl.java index 88640268260..b866285ff01 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/GenericOperationDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/GenericOperationDAOImpl.java @@ -19,6 +19,7 @@ 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.PaginationRequest; import org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationDAO; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException; @@ -276,7 +277,7 @@ public class GenericOperationDAOImpl implements OperationDAO { } @Override - public List getOperationsByDeviceAndStatus(int enrolmentId, int index, int limit, + public List getOperationsByDeviceAndStatus(int enrolmentId, PaginationRequest request, Operation.Status status) throws OperationManagementDAOException { PreparedStatement stmt = null; @@ -293,8 +294,8 @@ public class GenericOperationDAOImpl implements OperationDAO { stmt = conn.prepareStatement(sql); stmt.setInt(1, enrolmentId); stmt.setString(2, status.toString()); - stmt.setInt(3, index); - stmt.setInt(4, limit); + stmt.setInt(3, request.getStartIndex()); + stmt.setInt(4, request.getRowCount()); rs = stmt.executeQuery(); while (rs.next()) { @@ -360,7 +361,7 @@ public class GenericOperationDAOImpl implements OperationDAO { } @Override - public List getOperationsForDevice(int enrolmentId, int index, int limit) + public List getOperationsForDevice(int enrolmentId, PaginationRequest request) throws OperationManagementDAOException { PreparedStatement stmt = null; ResultSet rs = null; @@ -374,8 +375,8 @@ public class GenericOperationDAOImpl implements OperationDAO { "WHERE dm.ENROLMENT_ID = ?) om ON o.ID = om.OPERATION_ID ORDER BY o.CREATED_TIMESTAMP DESC LIMIT ?,?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, enrolmentId); - stmt.setInt(2, index); - stmt.setInt(3, limit); + stmt.setInt(2, request.getStartIndex()); + stmt.setInt(3, request.getRowCount()); rs = stmt.executeQuery(); while (rs.next()) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/operation/OracleOperationDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/operation/OracleOperationDAOImpl.java index eb16c2feda1..30fa360dd9e 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/operation/OracleOperationDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/operation/OracleOperationDAOImpl.java @@ -18,6 +18,7 @@ package org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.operation; +import org.wso2.carbon.device.mgt.common.PaginationRequest; 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.OperationManagementDAOFactory; @@ -37,7 +38,7 @@ import java.util.List; public class OracleOperationDAOImpl extends GenericOperationDAOImpl { @Override - public List getOperationsForDevice(int enrolmentId, int index, int limit) + public List getOperationsForDevice(int enrolmentId, PaginationRequest request) throws OperationManagementDAOException { PreparedStatement stmt = null; ResultSet rs = null; @@ -52,8 +53,8 @@ public class OracleOperationDAOImpl extends GenericOperationDAOImpl { "OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; stmt = conn.prepareStatement(sql); stmt.setInt(1, enrolmentId); - stmt.setInt(2, index); - stmt.setInt(3, limit); + stmt.setInt(2, request.getStartIndex()); + stmt.setInt(3, request.getRowCount()); rs = stmt.executeQuery(); while (rs.next()) { @@ -80,7 +81,7 @@ public class OracleOperationDAOImpl extends GenericOperationDAOImpl { } @Override - public List getOperationsByDeviceAndStatus(int enrolmentId, int index, int limit, + public List getOperationsByDeviceAndStatus(int enrolmentId, PaginationRequest request, Operation.Status status) throws OperationManagementDAOException { PreparedStatement stmt = null; @@ -97,8 +98,8 @@ public class OracleOperationDAOImpl extends GenericOperationDAOImpl { stmt = conn.prepareStatement(sql); stmt.setInt(1, enrolmentId); stmt.setString(2, status.toString()); - stmt.setInt(3, index); - stmt.setInt(4, limit); + stmt.setInt(3, request.getStartIndex()); + stmt.setInt(4, request.getRowCount()); rs = stmt.executeQuery(); while (rs.next()) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/operation/PostgreSQLOperationDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/operation/PostgreSQLOperationDAOImpl.java index 192ee388b8e..0d107ead1da 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/operation/PostgreSQLOperationDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/operation/PostgreSQLOperationDAOImpl.java @@ -18,6 +18,7 @@ package org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.operation; +import org.wso2.carbon.device.mgt.common.PaginationRequest; 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.OperationManagementDAOFactory; @@ -37,7 +38,7 @@ import java.util.List; public class PostgreSQLOperationDAOImpl extends GenericOperationDAOImpl { @Override - public List getOperationsForDevice(int enrolmentId, int index, int limit) + public List getOperationsForDevice(int enrolmentId, PaginationRequest request) throws OperationManagementDAOException { PreparedStatement stmt = null; ResultSet rs = null; @@ -51,8 +52,8 @@ public class PostgreSQLOperationDAOImpl extends GenericOperationDAOImpl { "WHERE dm.ENROLMENT_ID = ?) om ON o.ID = om.OPERATION_ID ORDER BY o.CREATED_TIMESTAMP DESC LIMIT ? OFFSET ?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, enrolmentId); - stmt.setInt(2, limit); - stmt.setInt(3, index); + stmt.setInt(2, request.getRowCount()); + stmt.setInt(3, request.getStartIndex()); rs = stmt.executeQuery(); while (rs.next()) { @@ -79,7 +80,7 @@ public class PostgreSQLOperationDAOImpl extends GenericOperationDAOImpl { } @Override - public List getOperationsByDeviceAndStatus(int enrolmentId, int index, int limit, + public List getOperationsByDeviceAndStatus(int enrolmentId, PaginationRequest request, Operation.Status status) throws OperationManagementDAOException { PreparedStatement stmt = null; @@ -96,8 +97,8 @@ public class PostgreSQLOperationDAOImpl extends GenericOperationDAOImpl { stmt = conn.prepareStatement(sql); stmt.setInt(1, enrolmentId); stmt.setString(2, status.toString()); - stmt.setInt(3, limit); - stmt.setInt(4, index); + stmt.setInt(3, request.getRowCount()); + stmt.setInt(4, request.getStartIndex()); rs = stmt.executeQuery(); while (rs.next()) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/operation/SQLServerOperationDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/operation/SQLServerOperationDAOImpl.java index 5849e8b0a10..d4768fc8760 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/operation/SQLServerOperationDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/operation/SQLServerOperationDAOImpl.java @@ -18,7 +18,7 @@ package org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.operation; -import org.wso2.carbon.device.mgt.common.PaginationResult; +import org.wso2.carbon.device.mgt.common.PaginationRequest; 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.OperationManagementDAOFactory; @@ -38,7 +38,7 @@ import java.util.List; public class SQLServerOperationDAOImpl extends GenericOperationDAOImpl { @Override - public List getOperationsForDevice(int enrolmentId, int index, int limit) + public List getOperationsForDevice(int enrolmentId, PaginationRequest request) throws OperationManagementDAOException { PreparedStatement stmt = null; ResultSet rs = null; @@ -53,8 +53,8 @@ public class SQLServerOperationDAOImpl extends GenericOperationDAOImpl { "OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; stmt = conn.prepareStatement(sql); stmt.setInt(1, enrolmentId); - stmt.setInt(2, index); - stmt.setInt(3, limit); + stmt.setInt(2, request.getStartIndex()); + stmt.setInt(3, request.getRowCount()); rs = stmt.executeQuery(); while (rs.next()) { @@ -81,7 +81,7 @@ public class SQLServerOperationDAOImpl extends GenericOperationDAOImpl { } @Override - public List getOperationsByDeviceAndStatus(int enrolmentId, int index, int limit, + public List getOperationsByDeviceAndStatus(int enrolmentId, PaginationRequest request, Operation.Status status) throws OperationManagementDAOException { PreparedStatement stmt = null; @@ -98,8 +98,8 @@ public class SQLServerOperationDAOImpl extends GenericOperationDAOImpl { stmt = conn.prepareStatement(sql); stmt.setInt(1, enrolmentId); stmt.setString(2, status.toString()); - stmt.setInt(3, index); - stmt.setInt(4, limit); + stmt.setInt(3, request.getStartIndex()); + stmt.setInt(4, request.getRowCount()); rs = stmt.executeQuery(); while (rs.next()) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderService.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderService.java index 4ab5651cffd..8c1a3cb7f3c 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderService.java @@ -43,24 +43,22 @@ public interface DeviceManagementProviderService extends OperationManager { * Method to retrieve all the devices with pagination support. * * @param deviceType Device platform - * @param index Starting row number - * @param limit No of rows to fetch + * @param request PaginationRequest object holding the data for pagination * @return PaginationResult - Result including the required parameters necessary to do pagination. * @throws DeviceManagementException If some unusual behaviour is observed while fetching the * devices. */ - PaginationResult getAllDevices(String deviceType, int index, int limit) throws DeviceManagementException; + PaginationResult getAllDevices(String deviceType, PaginationRequest request) throws DeviceManagementException; /** * Method to retrieve all the devices with pagination support. * - * @param index Starting row number - * @param limit No of rows to fetch + * @param request PaginationRequest object holding the data for pagination * @return PaginationResult - Result including the required parameters necessary to do pagination. * @throws DeviceManagementException If some unusual behaviour is observed while fetching the * devices. */ - PaginationResult getAllDevices(int index, int limit) throws DeviceManagementException; + PaginationResult getAllDevices(PaginationRequest request) throws DeviceManagementException; void sendEnrolmentInvitation(EmailMessageProperties config) throws DeviceManagementException; @@ -78,6 +76,29 @@ public interface DeviceManagementProviderService extends OperationManager { */ TenantConfiguration getConfiguration(String deviceType) throws DeviceManagementException; + /** + * Method to get the list of devices owned by an user with paging information. + * + * @param userName Username of the user + * @param request PaginationRequest object holding the data for pagination + * @return List of devices owned by a particular user along with the required parameters necessary to do pagination. + * @throws DeviceManagementException If some unusual behaviour is observed while fetching the + * device list + */ + PaginationResult getDevicesOfUser(String userName, PaginationRequest request) throws DeviceManagementException; + + /** + * Method to get the list of devices filtered by the ownership with paging information. + * + * @param ownerShip Ownership type of devices + * @param request PaginationRequest object holding the data for pagination + * @return List of devices owned by a particular user along with the required parameters necessary to do pagination. + * @throws DeviceManagementException If some unusual behaviour is observed while fetching the + * device list + */ + PaginationResult getDevicesByOwnership(EnrolmentInfo.OwnerShip ownerShip, PaginationRequest request) + throws DeviceManagementException; + /** * Method to get the list of devices owned by an user. * @@ -116,6 +137,17 @@ public interface DeviceManagementProviderService extends OperationManager { */ List getDevicesByName(String deviceName) throws DeviceManagementException; + /** + * This method is used to retrieve list of devices that matches with the given device name with paging information. + * + * @param deviceName name of the device + * @param request PaginationRequest object holding the data for pagination + * @return List of devices in given status along with the required parameters necessary to do pagination. + * @throws DeviceManagementException If some unusual behaviour is observed while fetching the + * device list + */ + PaginationResult getDevicesByName(String deviceName, PaginationRequest request) throws DeviceManagementException; + void updateDeviceEnrolmentInfo(Device device, EnrolmentInfo.Status active) throws DeviceManagementException; /** @@ -127,6 +159,17 @@ public interface DeviceManagementProviderService extends OperationManager { */ List getDevicesByStatus(EnrolmentInfo.Status status) throws DeviceManagementException; + /** + * This method is used to retrieve list of devices based on the device status with paging information. + * + * @param status Device status + * @param request PaginationRequest object holding the data for pagination + * @return List of devices in given status along with the required parameters necessary to do pagination. + * @throws DeviceManagementException If some unusual behaviour is observed while fetching the + * device list + */ + PaginationResult getDevicesByStatus(EnrolmentInfo.Status status, PaginationRequest request) throws DeviceManagementException; + License getLicense(String deviceType, String languageCode) throws DeviceManagementException; void addLicense(String deviceType, License license) throws DeviceManagementException; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java index c1bc8cfa94a..16a1fa105e3 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java @@ -288,7 +288,14 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv if (log.isDebugEnabled()) { log.debug("Device not found for id '" + deviceId.getId() + "'"); } - throw new DeviceManagementException("Device not found"); + return false; + } + + if (device.getEnrolmentInfo().getStatus().equals(EnrolmentInfo.Status.REMOVED)) { + if (log.isDebugEnabled()) { + log.debug("Device has already disenrolled : " + deviceId.getId() + "'"); + } + return false; } DeviceType deviceType = deviceTypeDAO.getDeviceType(device.getType()); @@ -387,13 +394,16 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv } @Override - public PaginationResult getAllDevices(String deviceType, int index, int limit) throws DeviceManagementException { - PaginationResult paginationResult; + public PaginationResult getAllDevices(String deviceType, PaginationRequest request) throws DeviceManagementException { + PaginationResult paginationResult = new PaginationResult(); List devices = new ArrayList<>(); - List allDevices; + List allDevices = new ArrayList<>(); + int count = 0; + int tenantId = this.getTenantId(); try { DeviceManagementDAOFactory.openConnection(); - paginationResult = deviceDAO.getDevices(deviceType, index, limit, this.getTenantId()); + allDevices = deviceDAO.getDevices(deviceType, request, tenantId); + count = deviceDAO.getDeviceCount(deviceType, tenantId); } catch (DeviceManagementDAOException e) { throw new DeviceManagementException("Error occurred while retrieving device list pertaining to " + "the current tenant", e); @@ -402,7 +412,6 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv } finally { DeviceManagementDAOFactory.closeConnection(); } - allDevices = (List) paginationResult.getData(); for (Device device : allDevices) { DeviceManager deviceManager = this.getDeviceManager(device.getType()); if (deviceManager == null) { @@ -422,17 +431,22 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv devices.add(device); } paginationResult.setData(devices); + paginationResult.setRecordsFiltered(count); + paginationResult.setRecordsTotal(count); return paginationResult; } @Override - public PaginationResult getAllDevices(int index, int limit) throws DeviceManagementException { - PaginationResult paginationResult; + public PaginationResult getAllDevices(PaginationRequest request) throws DeviceManagementException { + PaginationResult paginationResult = new PaginationResult(); List devices = new ArrayList<>(); - List allDevices; + List allDevices = new ArrayList<>(); + int count = 0; + int tenantId = this.getTenantId(); try { DeviceManagementDAOFactory.openConnection(); - paginationResult = deviceDAO.getDevices(index, limit, this.getTenantId()); + allDevices = deviceDAO.getDevices(request, tenantId); + count = deviceDAO.getDeviceCount(request, tenantId); } catch (DeviceManagementDAOException e) { throw new DeviceManagementException("Error occurred while retrieving device list pertaining to " + "the current tenant", e); @@ -441,7 +455,6 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv } finally { DeviceManagementDAOFactory.closeConnection(); } - allDevices = (List) paginationResult.getData(); for (Device device : allDevices) { DeviceManager deviceManager = this.getDeviceManager(device.getType()); if (deviceManager == null) { @@ -461,6 +474,8 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv devices.add(device); } paginationResult.setData(devices); + paginationResult.setRecordsFiltered(count); + paginationResult.setRecordsTotal(count); return paginationResult; } @@ -862,9 +877,9 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv } @Override - public PaginationResult getOperations(DeviceIdentifier deviceId, int index, int limit) + public PaginationResult getOperations(DeviceIdentifier deviceId, PaginationRequest request) throws OperationManagementException { - return DeviceManagementDataHolder.getInstance().getOperationManager().getOperations(deviceId, index, limit); + return DeviceManagementDataHolder.getInstance().getOperationManager().getOperations(deviceId, request); } @Override @@ -946,6 +961,87 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv } + @Override + public PaginationResult getDevicesOfUser(String username, PaginationRequest request) + throws DeviceManagementException { + PaginationResult result = new PaginationResult(); + int deviceCount = 0; + int tenantId = this.getTenantId(); + List devices = new ArrayList<>(); + List userDevices = new ArrayList<>(); + try { + DeviceManagementDAOFactory.openConnection(); + userDevices = deviceDAO.getDevicesOfUser(username, request, tenantId); + deviceCount = deviceDAO.getDeviceCountByUser(username, tenantId); + } catch (DeviceManagementDAOException e) { + throw new DeviceManagementException("Error occurred while retrieving the list of devices that " + + "belong to the user '" + username + "'", e); + } catch (SQLException e) { + throw new DeviceManagementException("Error occurred while opening a connection to the data source", e); + } finally { + DeviceManagementDAOFactory.closeConnection(); + } + + for (Device device : userDevices) { + DeviceManager deviceManager = this.getDeviceManager(device.getType()); + if (deviceManager == null) { + if (log.isDebugEnabled()) { + log.debug("Device Manager associated with the device type '" + device.getType() + "' is null. " + + "Therefore, not attempting method 'isEnrolled'"); + } + devices.add(device); + continue; + } + Device dmsDevice = + deviceManager.getDevice(new DeviceIdentifier(device.getDeviceIdentifier(), device.getType())); + if (dmsDevice != null) { + device.setFeatures(dmsDevice.getFeatures()); + device.setProperties(dmsDevice.getProperties()); + } + devices.add(device); + } + result.setData(devices); + result.setRecordsTotal(deviceCount); + result.setRecordsFiltered(deviceCount); + return result; + } + + @Override + public PaginationResult getDevicesByOwnership(EnrolmentInfo.OwnerShip ownerShip, + PaginationRequest request) + throws DeviceManagementException { + PaginationResult result = new PaginationResult(); + List devices = new ArrayList<>(); + List allDevices; + int deviceCount = 0; + int tenantId = this.getTenantId(); + try { + DeviceManagementDAOFactory.openConnection(); + allDevices = deviceDAO.getDevicesByOwnership(ownerShip, request, tenantId); + deviceCount = deviceDAO.getDeviceCountByOwnership(ownerShip, tenantId); + } catch (DeviceManagementDAOException e) { + throw new DeviceManagementException( + "Error occurred while fetching the list of devices that matches to ownership : '" + ownerShip + "'", e); + } catch (SQLException e) { + throw new DeviceManagementException("Error occurred while opening a connection to the data source", e); + } finally { + DeviceManagementDAOFactory.closeConnection(); + } + for (Device device : allDevices) { + Device dmsDevice = this.getDeviceManager(device.getType()). + getDevice(new DeviceIdentifier(device.getDeviceIdentifier(), device.getType())); + if (dmsDevice != null) { + device.setFeatures(dmsDevice.getFeatures()); + device.setProperties(dmsDevice.getProperties()); + } + devices.add(device); + } + result.setData(devices); + result.setRecordsTotal(deviceCount); + result.setRecordsFiltered(deviceCount); + return result; + } + @Override public List getAllDevicesOfRole(String role) throws DeviceManagementException { List devices = new ArrayList<>(); @@ -1022,7 +1118,40 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv devices.add(device); } return devices; + } + @Override + public PaginationResult getDevicesByName(String deviceName, PaginationRequest request) + throws DeviceManagementException { + PaginationResult result = new PaginationResult(); + int tenantId = this.getTenantId(); + List devices = new ArrayList<>(); + List allDevices = new ArrayList<>(); + try { + DeviceManagementDAOFactory.openConnection(); + allDevices = deviceDAO.getDevicesByName(deviceName, request, tenantId); + int deviceCount = deviceDAO.getDeviceCountByName(deviceName, tenantId); + result.setRecordsTotal(deviceCount); + result.setRecordsFiltered(deviceCount); + } catch (DeviceManagementDAOException e) { + throw new DeviceManagementException("Error occurred while fetching the list of devices that matches to '" + + deviceName + "'", e); + } catch (SQLException e) { + throw new DeviceManagementException("Error occurred while opening a connection to the data source", e); + } finally { + DeviceManagementDAOFactory.closeConnection(); + } + for (Device device : allDevices) { + Device dmsDevice = this.getDeviceManager(device.getType()). + getDevice(new DeviceIdentifier(device.getDeviceIdentifier(), device.getType())); + if (dmsDevice != null) { + device.setFeatures(dmsDevice.getFeatures()); + device.setProperties(dmsDevice.getProperties()); + } + devices.add(device); + } + result.setData(devices); + return result; } @Override @@ -1091,6 +1220,40 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv return devices; } + @Override + public PaginationResult getDevicesByStatus(EnrolmentInfo.Status status, PaginationRequest request) + throws DeviceManagementException { + PaginationResult result = new PaginationResult(); + List devices = new ArrayList<>(); + List allDevices = new ArrayList<>(); + int tenantId = this.getTenantId(); + try { + DeviceManagementDAOFactory.openConnection(); + allDevices = deviceDAO.getDevicesByStatus(status, request, tenantId); + int deviceCount = deviceDAO.getDeviceCount(status, tenantId); + result.setRecordsTotal(deviceCount); + result.setRecordsFiltered(deviceCount); + } catch (DeviceManagementDAOException e) { + throw new DeviceManagementException( + "Error occurred while fetching the list of devices that matches to status: '" + status + "'", e); + } catch (SQLException e) { + throw new DeviceManagementException("Error occurred while opening a connection to the data source", e); + } finally { + DeviceManagementDAOFactory.closeConnection(); + } + for (Device device : allDevices) { + Device dmsDevice = this.getDeviceManager(device.getType()). + getDevice(new DeviceIdentifier(device.getDeviceIdentifier(), device.getType())); + if (dmsDevice != null) { + device.setFeatures(dmsDevice.getFeatures()); + device.setProperties(dmsDevice.getProperties()); + } + devices.add(device); + } + result.setData(devices); + return result; + } + private int getTenantId() { return CarbonContext.getThreadLocalCarbonContext().getTenantId(); } diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/OAuthAuthenticator.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/OAuthAuthenticator.java index c82a57646b5..06bfe4f99d9 100644 --- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/OAuthAuthenticator.java +++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/OAuthAuthenticator.java @@ -141,9 +141,6 @@ public class OAuthAuthenticator implements WebappAuthenticator { tokenValue = tokenValue.substring(matcher.end()); } } - if (log.isDebugEnabled()) { - log.debug("Oauth Token : " + tokenValue); - } return tokenValue; }