mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Added pagination support for group-management for major db engines.
This commit is contained in:
parent
0551598988
commit
51c18d2108
@ -20,11 +20,16 @@ package org.wso2.carbon.device.mgt.core.dao;
|
|||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
|
||||||
import org.wso2.carbon.device.mgt.common.IllegalTransactionStateException;
|
import org.wso2.carbon.device.mgt.common.IllegalTransactionStateException;
|
||||||
import org.wso2.carbon.device.mgt.common.TransactionManagementException;
|
import org.wso2.carbon.device.mgt.common.TransactionManagementException;
|
||||||
|
import org.wso2.carbon.device.mgt.common.UnsupportedDatabaseEngineException;
|
||||||
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
|
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
|
||||||
import org.wso2.carbon.device.mgt.core.config.datasource.JNDILookupDefinition;
|
import org.wso2.carbon.device.mgt.core.config.datasource.JNDILookupDefinition;
|
||||||
import org.wso2.carbon.device.mgt.core.dao.impl.GroupDAOImpl;
|
import org.wso2.carbon.device.mgt.core.dao.impl.group.GenericGroupDAOImpl;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.impl.group.OracleGroupDAOImpl;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.impl.group.PostgreSQLGroupDAOImpl;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.impl.group.SQLServerGroupDAOImpl;
|
||||||
import org.wso2.carbon.device.mgt.core.dao.util.GroupManagementDAOUtil;
|
import org.wso2.carbon.device.mgt.core.dao.util.GroupManagementDAOUtil;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
@ -40,6 +45,7 @@ public class GroupManagementDAOFactory {
|
|||||||
|
|
||||||
private static final Log log = LogFactory.getLog(GroupManagementDAOFactory.class);
|
private static final Log log = LogFactory.getLog(GroupManagementDAOFactory.class);
|
||||||
private static DataSource dataSource;
|
private static DataSource dataSource;
|
||||||
|
private static String databaseEngine;
|
||||||
private static ThreadLocal<Connection> currentConnection = new ThreadLocal<>();
|
private static ThreadLocal<Connection> currentConnection = new ThreadLocal<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,25 +54,40 @@ public class GroupManagementDAOFactory {
|
|||||||
* @return instance of GroupDAO implementation
|
* @return instance of GroupDAO implementation
|
||||||
*/
|
*/
|
||||||
public static GroupDAO getGroupDAO() {
|
public static GroupDAO getGroupDAO() {
|
||||||
return new GroupDAOImpl();
|
if (databaseEngine != null) {
|
||||||
|
switch (databaseEngine) {
|
||||||
|
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_ORACLE:
|
||||||
|
return new OracleGroupDAOImpl();
|
||||||
|
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MSSQL:
|
||||||
|
return new SQLServerGroupDAOImpl();
|
||||||
|
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_POSTGRESQL:
|
||||||
|
return new PostgreSQLGroupDAOImpl();
|
||||||
|
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_H2:
|
||||||
|
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MYSQL:
|
||||||
|
return new GenericGroupDAOImpl();
|
||||||
|
default:
|
||||||
|
throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new IllegalStateException("Database engine has not initialized properly.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize factory with datasource configs
|
|
||||||
*
|
|
||||||
* @param config data source configuration
|
|
||||||
*/
|
|
||||||
public static void init(DataSourceConfig config) {
|
public static void init(DataSourceConfig config) {
|
||||||
dataSource = resolveDataSource(config);
|
dataSource = resolveDataSource(config);
|
||||||
|
try {
|
||||||
|
databaseEngine = dataSource.getConnection().getMetaData().getDatabaseProductName();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
log.error("Error occurred while retrieving config.datasource connection", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize factory with existing datasource
|
|
||||||
*
|
|
||||||
* @param dtSource an existing datasource
|
|
||||||
*/
|
|
||||||
public static void init(DataSource dtSource) {
|
public static void init(DataSource dtSource) {
|
||||||
dataSource = dtSource;
|
dataSource = dtSource;
|
||||||
|
try {
|
||||||
|
databaseEngine = dataSource.getConnection().getMetaData().getDatabaseProductName();
|
||||||
|
} catch (SQLException e) {
|
||||||
|
log.error("Error occurred while retrieving config.datasource connection", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -129,8 +150,8 @@ public class GroupManagementDAOFactory {
|
|||||||
Connection conn = currentConnection.get();
|
Connection conn = currentConnection.get();
|
||||||
if (conn == null) {
|
if (conn == null) {
|
||||||
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
|
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
|
||||||
"This might have ideally been caused by not properly initiating the transaction via " +
|
"This might have ideally been caused by not properly initiating " +
|
||||||
"'beginTransaction'/'openConnection' methods");
|
"the transaction via 'beginTransaction'/'openConnection' methods");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
conn.commit();
|
conn.commit();
|
||||||
@ -146,8 +167,8 @@ public class GroupManagementDAOFactory {
|
|||||||
Connection conn = currentConnection.get();
|
Connection conn = currentConnection.get();
|
||||||
if (conn == null) {
|
if (conn == null) {
|
||||||
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
|
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
|
||||||
"This might have ideally been caused by not properly initiating the transaction via " +
|
"This might have ideally been caused by not properly initiating " +
|
||||||
"'beginTransaction'/'openConnection' methods");
|
"the transaction via 'beginTransaction'/'openConnection' methods");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
conn.rollback();
|
conn.rollback();
|
||||||
|
|||||||
@ -18,13 +18,11 @@
|
|||||||
|
|
||||||
package org.wso2.carbon.device.mgt.core.dao.impl;
|
package org.wso2.carbon.device.mgt.core.dao.impl;
|
||||||
|
|
||||||
import org.wso2.carbon.device.mgt.common.Device;
|
|
||||||
import org.wso2.carbon.device.mgt.common.GroupPaginationRequest;
|
import org.wso2.carbon.device.mgt.common.GroupPaginationRequest;
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
||||||
import org.wso2.carbon.device.mgt.core.dao.GroupDAO;
|
import org.wso2.carbon.device.mgt.core.dao.GroupDAO;
|
||||||
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOException;
|
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOException;
|
||||||
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOFactory;
|
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOFactory;
|
||||||
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
|
||||||
import org.wso2.carbon.device.mgt.core.dao.util.GroupManagementDAOUtil;
|
import org.wso2.carbon.device.mgt.core.dao.util.GroupManagementDAOUtil;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
@ -37,7 +35,7 @@ import java.util.List;
|
|||||||
/**
|
/**
|
||||||
* This class represents implementation of GroupDAO
|
* This class represents implementation of GroupDAO
|
||||||
*/
|
*/
|
||||||
public class GroupDAOImpl implements GroupDAO {
|
public abstract class AbstractGroupDAOImpl implements GroupDAO {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int addGroup(DeviceGroup deviceGroup, int tenantId) throws GroupManagementDAOException {
|
public int addGroup(DeviceGroup deviceGroup, int tenantId) throws GroupManagementDAOException {
|
||||||
@ -47,7 +45,7 @@ public class GroupDAOImpl implements GroupDAO {
|
|||||||
try {
|
try {
|
||||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||||
String sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID) VALUES (?, ?, ?, ?)";
|
String sql = "INSERT INTO DM_GROUP(DESCRIPTION, GROUP_NAME, OWNER, TENANT_ID) VALUES (?, ?, ?, ?)";
|
||||||
stmt = conn.prepareStatement(sql, new String[]{"ID"});
|
stmt = conn.prepareStatement(sql, new String[]{"id"});
|
||||||
stmt.setString(1, deviceGroup.getDescription());
|
stmt.setString(1, deviceGroup.getDescription());
|
||||||
stmt.setString(2, deviceGroup.getName());
|
stmt.setString(2, deviceGroup.getName());
|
||||||
stmt.setString(3, deviceGroup.getOwner());
|
stmt.setString(3, deviceGroup.getOwner());
|
||||||
@ -179,126 +177,6 @@ public class GroupDAOImpl implements GroupDAO {
|
|||||||
return deviceGroupBuilders;
|
return deviceGroupBuilders;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceGroup> getGroups(GroupPaginationRequest request, int tenantId)
|
|
||||||
throws GroupManagementDAOException {
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet resultSet = null;
|
|
||||||
List<DeviceGroup> deviceGroupList = null;
|
|
||||||
|
|
||||||
String groupName = request.getGroupName();
|
|
||||||
boolean hasGroupName = false;
|
|
||||||
String owner = request.getOwner();
|
|
||||||
boolean hasOwner = false;
|
|
||||||
boolean hasLimit = request.getRowCount() != 0;
|
|
||||||
|
|
||||||
try {
|
|
||||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
|
||||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER FROM DM_GROUP WHERE TENANT_ID = ?";
|
|
||||||
if (groupName != null && !groupName.isEmpty()) {
|
|
||||||
sql += " AND GROUP_NAME LIKE ?";
|
|
||||||
hasGroupName = true;
|
|
||||||
}
|
|
||||||
if (owner != null && !owner.isEmpty()) {
|
|
||||||
sql += " AND OWNER LIKE ?";
|
|
||||||
hasOwner = true;
|
|
||||||
}
|
|
||||||
if (hasLimit) {
|
|
||||||
sql += " LIMIT ?, ?";
|
|
||||||
}
|
|
||||||
|
|
||||||
int paramIndex = 1;
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setInt(paramIndex++, tenantId);
|
|
||||||
if (hasGroupName) {
|
|
||||||
stmt.setString(paramIndex++, groupName + "%");
|
|
||||||
}
|
|
||||||
if (hasOwner) {
|
|
||||||
stmt.setString(paramIndex++, owner + "%");
|
|
||||||
}
|
|
||||||
if (hasLimit) {
|
|
||||||
stmt.setInt(paramIndex++, request.getStartIndex());
|
|
||||||
stmt.setInt(paramIndex, request.getRowCount());
|
|
||||||
}
|
|
||||||
resultSet = stmt.executeQuery();
|
|
||||||
deviceGroupList = new ArrayList<>();
|
|
||||||
while (resultSet.next()) {
|
|
||||||
deviceGroupList.add(GroupManagementDAOUtil.loadGroup(resultSet));
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new GroupManagementDAOException("Error occurred while listing all groups in tenant: " + tenantId, e);
|
|
||||||
} finally {
|
|
||||||
GroupManagementDAOUtil.cleanupResources(stmt, resultSet);
|
|
||||||
}
|
|
||||||
return deviceGroupList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<DeviceGroup> getGroups(GroupPaginationRequest request, List<Integer> deviceGroupIds,
|
|
||||||
int tenantId) throws GroupManagementDAOException {
|
|
||||||
int deviceGroupIdsCount = deviceGroupIds.size();
|
|
||||||
if (deviceGroupIdsCount == 0) {
|
|
||||||
return new ArrayList<>();
|
|
||||||
}
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet resultSet = null;
|
|
||||||
List<DeviceGroup> deviceGroupList = null;
|
|
||||||
|
|
||||||
String groupName = request.getGroupName();
|
|
||||||
boolean hasGroupName = false;
|
|
||||||
String owner = request.getOwner();
|
|
||||||
boolean hasOwner = false;
|
|
||||||
boolean hasLimit = request.getRowCount() != 0;
|
|
||||||
|
|
||||||
try {
|
|
||||||
Connection conn = GroupManagementDAOFactory.getConnection();
|
|
||||||
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER FROM DM_GROUP WHERE TENANT_ID = ?";
|
|
||||||
if (groupName != null && !groupName.isEmpty()) {
|
|
||||||
sql += " AND GROUP_NAME LIKE ?";
|
|
||||||
hasGroupName = true;
|
|
||||||
}
|
|
||||||
if (owner != null && !owner.isEmpty()) {
|
|
||||||
sql += " AND OWNER LIKE ?";
|
|
||||||
hasOwner = true;
|
|
||||||
}
|
|
||||||
sql += " AND ID IN (";
|
|
||||||
for (int i = 0; i < deviceGroupIdsCount; i++) {
|
|
||||||
sql += (deviceGroupIdsCount - 1 != i) ? "?," : "?";
|
|
||||||
}
|
|
||||||
sql += ")";
|
|
||||||
if (hasLimit) {
|
|
||||||
sql += " LIMIT ?, ?";
|
|
||||||
}
|
|
||||||
|
|
||||||
int paramIndex = 1;
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setInt(paramIndex++, tenantId);
|
|
||||||
if (hasGroupName) {
|
|
||||||
stmt.setString(paramIndex++, groupName + "%");
|
|
||||||
}
|
|
||||||
if (hasOwner) {
|
|
||||||
stmt.setString(paramIndex++, owner + "%");
|
|
||||||
}
|
|
||||||
for (Integer deviceGroupId : deviceGroupIds) {
|
|
||||||
stmt.setInt(paramIndex++, deviceGroupId);
|
|
||||||
}
|
|
||||||
if (hasLimit) {
|
|
||||||
stmt.setInt(paramIndex++, request.getStartIndex());
|
|
||||||
stmt.setInt(paramIndex, request.getRowCount());
|
|
||||||
}
|
|
||||||
resultSet = stmt.executeQuery();
|
|
||||||
deviceGroupList = new ArrayList<>();
|
|
||||||
while (resultSet.next()) {
|
|
||||||
deviceGroupList.add(GroupManagementDAOUtil.loadGroup(resultSet));
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new GroupManagementDAOException("Error occurred while listing all groups in tenant: " + tenantId, e);
|
|
||||||
} finally {
|
|
||||||
GroupManagementDAOUtil.cleanupResources(stmt, resultSet);
|
|
||||||
}
|
|
||||||
return deviceGroupList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<DeviceGroup> getGroups(int tenantId) throws GroupManagementDAOException {
|
public List<DeviceGroup> getGroups(int tenantId) throws GroupManagementDAOException {
|
||||||
PreparedStatement stmt = null;
|
PreparedStatement stmt = null;
|
||||||
@ -495,49 +373,6 @@ public class GroupDAOImpl implements GroupDAO {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Device> getDevices(int groupId, int startIndex, int rowCount, int tenantId)
|
|
||||||
throws GroupManagementDAOException {
|
|
||||||
Connection conn;
|
|
||||||
PreparedStatement stmt = null;
|
|
||||||
ResultSet rs = null;
|
|
||||||
List<Device> devices = null;
|
|
||||||
try {
|
|
||||||
conn = GroupManagementDAOFactory.getConnection();
|
|
||||||
String sql = "SELECT d1.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 gd.DEVICE_ID, gd.DESCRIPTION, gd.NAME, gd.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE " +
|
|
||||||
"FROM " +
|
|
||||||
"(SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME, d.DEVICE_IDENTIFICATION, d.DEVICE_TYPE_ID FROM" +
|
|
||||||
" DM_DEVICE d, (" +
|
|
||||||
"SELECT dgm.DEVICE_ID FROM DM_DEVICE_GROUP_MAP dgm WHERE dgm.GROUP_ID = ?) dgm1 " +
|
|
||||||
"WHERE d.ID = dgm1.DEVICE_ID AND d.TENANT_ID = ?) gd, DM_DEVICE_TYPE t " +
|
|
||||||
"WHERE gd.DEVICE_TYPE_ID = t.ID) d1 WHERE d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? LIMIT ? , ?";
|
|
||||||
|
|
||||||
stmt = conn.prepareStatement(sql);
|
|
||||||
stmt.setInt(1, groupId);
|
|
||||||
stmt.setInt(2, tenantId);
|
|
||||||
stmt.setInt(3, tenantId);
|
|
||||||
//noinspection JpaQueryApiInspection
|
|
||||||
stmt.setInt(4, startIndex);
|
|
||||||
//noinspection JpaQueryApiInspection
|
|
||||||
stmt.setInt(5, rowCount);
|
|
||||||
rs = stmt.executeQuery();
|
|
||||||
devices = new ArrayList<>();
|
|
||||||
while (rs.next()) {
|
|
||||||
Device device = DeviceManagementDAOUtil.loadDevice(rs);
|
|
||||||
devices.add(device);
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new GroupManagementDAOException("Error occurred while retrieving information of all " +
|
|
||||||
"registered devices", e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
|
||||||
}
|
|
||||||
return devices;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getRoles(int groupId, int tenantId) throws GroupManagementDAOException {
|
public List<String> getRoles(int groupId, int tenantId) throws GroupManagementDAOException {
|
||||||
PreparedStatement stmt = null;
|
PreparedStatement stmt = null;
|
||||||
@ -0,0 +1,204 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.core.dao.impl.group;
|
||||||
|
|
||||||
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
|
import org.wso2.carbon.device.mgt.common.GroupPaginationRequest;
|
||||||
|
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOException;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.impl.AbstractGroupDAOImpl;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.util.GroupManagementDAOUtil;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents implementation of GroupDAO
|
||||||
|
*/
|
||||||
|
public class GenericGroupDAOImpl extends AbstractGroupDAOImpl {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeviceGroup> getGroups(GroupPaginationRequest request, int tenantId)
|
||||||
|
throws GroupManagementDAOException {
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
List<DeviceGroup> deviceGroupList = null;
|
||||||
|
|
||||||
|
String groupName = request.getGroupName();
|
||||||
|
boolean hasGroupName = false;
|
||||||
|
String owner = request.getOwner();
|
||||||
|
boolean hasOwner = false;
|
||||||
|
boolean hasLimit = request.getRowCount() != 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||||
|
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER FROM DM_GROUP WHERE TENANT_ID = ?";
|
||||||
|
if (groupName != null && !groupName.isEmpty()) {
|
||||||
|
sql += " AND GROUP_NAME LIKE ?";
|
||||||
|
hasGroupName = true;
|
||||||
|
}
|
||||||
|
if (owner != null && !owner.isEmpty()) {
|
||||||
|
sql += " AND OWNER LIKE ?";
|
||||||
|
hasOwner = true;
|
||||||
|
}
|
||||||
|
if (hasLimit) {
|
||||||
|
sql += " LIMIT ?, ?";
|
||||||
|
}
|
||||||
|
|
||||||
|
int paramIndex = 1;
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(paramIndex++, tenantId);
|
||||||
|
if (hasGroupName) {
|
||||||
|
stmt.setString(paramIndex++, groupName + "%");
|
||||||
|
}
|
||||||
|
if (hasOwner) {
|
||||||
|
stmt.setString(paramIndex++, owner + "%");
|
||||||
|
}
|
||||||
|
if (hasLimit) {
|
||||||
|
stmt.setInt(paramIndex++, request.getStartIndex());
|
||||||
|
stmt.setInt(paramIndex, request.getRowCount());
|
||||||
|
}
|
||||||
|
resultSet = stmt.executeQuery();
|
||||||
|
deviceGroupList = new ArrayList<>();
|
||||||
|
while (resultSet.next()) {
|
||||||
|
deviceGroupList.add(GroupManagementDAOUtil.loadGroup(resultSet));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new GroupManagementDAOException("Error occurred while listing all groups in tenant: " + tenantId, e);
|
||||||
|
} finally {
|
||||||
|
GroupManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||||
|
}
|
||||||
|
return deviceGroupList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeviceGroup> getGroups(GroupPaginationRequest request, List<Integer> deviceGroupIds,
|
||||||
|
int tenantId) throws GroupManagementDAOException {
|
||||||
|
int deviceGroupIdsCount = deviceGroupIds.size();
|
||||||
|
if (deviceGroupIdsCount == 0) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
List<DeviceGroup> deviceGroupList = null;
|
||||||
|
|
||||||
|
String groupName = request.getGroupName();
|
||||||
|
boolean hasGroupName = false;
|
||||||
|
String owner = request.getOwner();
|
||||||
|
boolean hasOwner = false;
|
||||||
|
boolean hasLimit = request.getRowCount() != 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||||
|
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER FROM DM_GROUP WHERE TENANT_ID = ?";
|
||||||
|
if (groupName != null && !groupName.isEmpty()) {
|
||||||
|
sql += " AND GROUP_NAME LIKE ?";
|
||||||
|
hasGroupName = true;
|
||||||
|
}
|
||||||
|
if (owner != null && !owner.isEmpty()) {
|
||||||
|
sql += " AND OWNER LIKE ?";
|
||||||
|
hasOwner = true;
|
||||||
|
}
|
||||||
|
sql += " AND ID IN (";
|
||||||
|
for (int i = 0; i < deviceGroupIdsCount; i++) {
|
||||||
|
sql += (deviceGroupIdsCount - 1 != i) ? "?," : "?";
|
||||||
|
}
|
||||||
|
sql += ")";
|
||||||
|
if (hasLimit) {
|
||||||
|
sql += " LIMIT ?, ?";
|
||||||
|
}
|
||||||
|
|
||||||
|
int paramIndex = 1;
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(paramIndex++, tenantId);
|
||||||
|
if (hasGroupName) {
|
||||||
|
stmt.setString(paramIndex++, groupName + "%");
|
||||||
|
}
|
||||||
|
if (hasOwner) {
|
||||||
|
stmt.setString(paramIndex++, owner + "%");
|
||||||
|
}
|
||||||
|
for (Integer deviceGroupId : deviceGroupIds) {
|
||||||
|
stmt.setInt(paramIndex++, deviceGroupId);
|
||||||
|
}
|
||||||
|
if (hasLimit) {
|
||||||
|
stmt.setInt(paramIndex++, request.getStartIndex());
|
||||||
|
stmt.setInt(paramIndex, request.getRowCount());
|
||||||
|
}
|
||||||
|
resultSet = stmt.executeQuery();
|
||||||
|
deviceGroupList = new ArrayList<>();
|
||||||
|
while (resultSet.next()) {
|
||||||
|
deviceGroupList.add(GroupManagementDAOUtil.loadGroup(resultSet));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new GroupManagementDAOException("Error occurred while listing all groups in tenant: " + tenantId, e);
|
||||||
|
} finally {
|
||||||
|
GroupManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||||
|
}
|
||||||
|
return deviceGroupList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Device> getDevices(int groupId, int startIndex, int rowCount, int tenantId)
|
||||||
|
throws GroupManagementDAOException {
|
||||||
|
Connection conn;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
List<Device> devices = null;
|
||||||
|
try {
|
||||||
|
conn = GroupManagementDAOFactory.getConnection();
|
||||||
|
String sql = "SELECT d1.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 gd.DEVICE_ID, gd.DESCRIPTION, gd.NAME, gd.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE " +
|
||||||
|
"FROM " +
|
||||||
|
"(SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME, d.DEVICE_IDENTIFICATION, d.DEVICE_TYPE_ID FROM" +
|
||||||
|
" DM_DEVICE d, (" +
|
||||||
|
"SELECT dgm.DEVICE_ID FROM DM_DEVICE_GROUP_MAP dgm WHERE dgm.GROUP_ID = ?) dgm1 " +
|
||||||
|
"WHERE d.ID = dgm1.DEVICE_ID AND d.TENANT_ID = ?) gd, DM_DEVICE_TYPE t " +
|
||||||
|
"WHERE gd.DEVICE_TYPE_ID = t.ID) d1 WHERE d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? LIMIT ? , ?";
|
||||||
|
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(1, groupId);
|
||||||
|
stmt.setInt(2, tenantId);
|
||||||
|
stmt.setInt(3, tenantId);
|
||||||
|
//noinspection JpaQueryApiInspection
|
||||||
|
stmt.setInt(4, startIndex);
|
||||||
|
//noinspection JpaQueryApiInspection
|
||||||
|
stmt.setInt(5, rowCount);
|
||||||
|
rs = stmt.executeQuery();
|
||||||
|
devices = new ArrayList<>();
|
||||||
|
while (rs.next()) {
|
||||||
|
Device device = DeviceManagementDAOUtil.loadDevice(rs);
|
||||||
|
devices.add(device);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new GroupManagementDAOException("Error occurred while retrieving information of all " +
|
||||||
|
"registered devices", e);
|
||||||
|
} finally {
|
||||||
|
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||||
|
}
|
||||||
|
return devices;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,204 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.core.dao.impl.group;
|
||||||
|
|
||||||
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
|
import org.wso2.carbon.device.mgt.common.GroupPaginationRequest;
|
||||||
|
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOException;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.impl.AbstractGroupDAOImpl;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.util.GroupManagementDAOUtil;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents implementation of GroupDAO
|
||||||
|
*/
|
||||||
|
public class OracleGroupDAOImpl extends AbstractGroupDAOImpl {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeviceGroup> getGroups(GroupPaginationRequest request, int tenantId)
|
||||||
|
throws GroupManagementDAOException {
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
List<DeviceGroup> deviceGroupList = null;
|
||||||
|
|
||||||
|
String groupName = request.getGroupName();
|
||||||
|
boolean hasGroupName = false;
|
||||||
|
String owner = request.getOwner();
|
||||||
|
boolean hasOwner = false;
|
||||||
|
boolean hasLimit = request.getRowCount() != 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||||
|
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER FROM DM_GROUP WHERE TENANT_ID = ?";
|
||||||
|
if (groupName != null && !groupName.isEmpty()) {
|
||||||
|
sql += " AND GROUP_NAME LIKE ?";
|
||||||
|
hasGroupName = true;
|
||||||
|
}
|
||||||
|
if (owner != null && !owner.isEmpty()) {
|
||||||
|
sql += " AND OWNER LIKE ?";
|
||||||
|
hasOwner = true;
|
||||||
|
}
|
||||||
|
if (hasLimit) {
|
||||||
|
sql += " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
||||||
|
}
|
||||||
|
|
||||||
|
int paramIndex = 1;
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(paramIndex++, tenantId);
|
||||||
|
if (hasGroupName) {
|
||||||
|
stmt.setString(paramIndex++, groupName + "%");
|
||||||
|
}
|
||||||
|
if (hasOwner) {
|
||||||
|
stmt.setString(paramIndex++, owner + "%");
|
||||||
|
}
|
||||||
|
if (hasLimit) {
|
||||||
|
stmt.setInt(paramIndex++, request.getStartIndex());
|
||||||
|
stmt.setInt(paramIndex, request.getRowCount());
|
||||||
|
}
|
||||||
|
resultSet = stmt.executeQuery();
|
||||||
|
deviceGroupList = new ArrayList<>();
|
||||||
|
while (resultSet.next()) {
|
||||||
|
deviceGroupList.add(GroupManagementDAOUtil.loadGroup(resultSet));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new GroupManagementDAOException("Error occurred while listing all groups in tenant: " + tenantId, e);
|
||||||
|
} finally {
|
||||||
|
GroupManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||||
|
}
|
||||||
|
return deviceGroupList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeviceGroup> getGroups(GroupPaginationRequest request, List<Integer> deviceGroupIds,
|
||||||
|
int tenantId) throws GroupManagementDAOException {
|
||||||
|
int deviceGroupIdsCount = deviceGroupIds.size();
|
||||||
|
if (deviceGroupIdsCount == 0) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
List<DeviceGroup> deviceGroupList = null;
|
||||||
|
|
||||||
|
String groupName = request.getGroupName();
|
||||||
|
boolean hasGroupName = false;
|
||||||
|
String owner = request.getOwner();
|
||||||
|
boolean hasOwner = false;
|
||||||
|
boolean hasLimit = request.getRowCount() != 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||||
|
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER FROM DM_GROUP WHERE TENANT_ID = ?";
|
||||||
|
if (groupName != null && !groupName.isEmpty()) {
|
||||||
|
sql += " AND GROUP_NAME LIKE ?";
|
||||||
|
hasGroupName = true;
|
||||||
|
}
|
||||||
|
if (owner != null && !owner.isEmpty()) {
|
||||||
|
sql += " AND OWNER LIKE ?";
|
||||||
|
hasOwner = true;
|
||||||
|
}
|
||||||
|
sql += " AND ID IN (";
|
||||||
|
for (int i = 0; i < deviceGroupIdsCount; i++) {
|
||||||
|
sql += (deviceGroupIdsCount - 1 != i) ? "?," : "?";
|
||||||
|
}
|
||||||
|
sql += ")";
|
||||||
|
if (hasLimit) {
|
||||||
|
sql += " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
||||||
|
}
|
||||||
|
|
||||||
|
int paramIndex = 1;
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(paramIndex++, tenantId);
|
||||||
|
if (hasGroupName) {
|
||||||
|
stmt.setString(paramIndex++, groupName + "%");
|
||||||
|
}
|
||||||
|
if (hasOwner) {
|
||||||
|
stmt.setString(paramIndex++, owner + "%");
|
||||||
|
}
|
||||||
|
for (Integer deviceGroupId : deviceGroupIds) {
|
||||||
|
stmt.setInt(paramIndex++, deviceGroupId);
|
||||||
|
}
|
||||||
|
if (hasLimit) {
|
||||||
|
stmt.setInt(paramIndex++, request.getStartIndex());
|
||||||
|
stmt.setInt(paramIndex, request.getRowCount());
|
||||||
|
}
|
||||||
|
resultSet = stmt.executeQuery();
|
||||||
|
deviceGroupList = new ArrayList<>();
|
||||||
|
while (resultSet.next()) {
|
||||||
|
deviceGroupList.add(GroupManagementDAOUtil.loadGroup(resultSet));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new GroupManagementDAOException("Error occurred while listing all groups in tenant: " + tenantId, e);
|
||||||
|
} finally {
|
||||||
|
GroupManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||||
|
}
|
||||||
|
return deviceGroupList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Device> getDevices(int groupId, int startIndex, int rowCount, int tenantId)
|
||||||
|
throws GroupManagementDAOException {
|
||||||
|
Connection conn;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
List<Device> devices = null;
|
||||||
|
try {
|
||||||
|
conn = GroupManagementDAOFactory.getConnection();
|
||||||
|
String sql = "SELECT d1.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 gd.DEVICE_ID, gd.DESCRIPTION, gd.NAME, gd.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE " +
|
||||||
|
"FROM " +
|
||||||
|
"(SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME, d.DEVICE_IDENTIFICATION, d.DEVICE_TYPE_ID FROM" +
|
||||||
|
" DM_DEVICE d, (" +
|
||||||
|
"SELECT dgm.DEVICE_ID FROM DM_DEVICE_GROUP_MAP dgm WHERE dgm.GROUP_ID = ?) dgm1 " +
|
||||||
|
"WHERE d.ID = dgm1.DEVICE_ID AND d.TENANT_ID = ?) gd, DM_DEVICE_TYPE t " +
|
||||||
|
"WHERE gd.DEVICE_TYPE_ID = t.ID) d1 WHERE d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
||||||
|
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(1, groupId);
|
||||||
|
stmt.setInt(2, tenantId);
|
||||||
|
stmt.setInt(3, tenantId);
|
||||||
|
//noinspection JpaQueryApiInspection
|
||||||
|
stmt.setInt(4, startIndex);
|
||||||
|
//noinspection JpaQueryApiInspection
|
||||||
|
stmt.setInt(5, rowCount);
|
||||||
|
rs = stmt.executeQuery();
|
||||||
|
devices = new ArrayList<>();
|
||||||
|
while (rs.next()) {
|
||||||
|
Device device = DeviceManagementDAOUtil.loadDevice(rs);
|
||||||
|
devices.add(device);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new GroupManagementDAOException("Error occurred while retrieving information of all " +
|
||||||
|
"registered devices", e);
|
||||||
|
} finally {
|
||||||
|
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||||
|
}
|
||||||
|
return devices;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,204 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.core.dao.impl.group;
|
||||||
|
|
||||||
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
|
import org.wso2.carbon.device.mgt.common.GroupPaginationRequest;
|
||||||
|
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOException;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.impl.AbstractGroupDAOImpl;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.util.GroupManagementDAOUtil;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents implementation of GroupDAO
|
||||||
|
*/
|
||||||
|
public class PostgreSQLGroupDAOImpl extends AbstractGroupDAOImpl {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeviceGroup> getGroups(GroupPaginationRequest request, int tenantId)
|
||||||
|
throws GroupManagementDAOException {
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
List<DeviceGroup> deviceGroupList = null;
|
||||||
|
|
||||||
|
String groupName = request.getGroupName();
|
||||||
|
boolean hasGroupName = false;
|
||||||
|
String owner = request.getOwner();
|
||||||
|
boolean hasOwner = false;
|
||||||
|
boolean hasLimit = request.getRowCount() != 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||||
|
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER FROM DM_GROUP WHERE TENANT_ID = ?";
|
||||||
|
if (groupName != null && !groupName.isEmpty()) {
|
||||||
|
sql += " AND GROUP_NAME LIKE ?";
|
||||||
|
hasGroupName = true;
|
||||||
|
}
|
||||||
|
if (owner != null && !owner.isEmpty()) {
|
||||||
|
sql += " AND OWNER LIKE ?";
|
||||||
|
hasOwner = true;
|
||||||
|
}
|
||||||
|
if (hasLimit) {
|
||||||
|
sql += " LIMIT ? OFFSET ?";
|
||||||
|
}
|
||||||
|
|
||||||
|
int paramIndex = 1;
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(paramIndex++, tenantId);
|
||||||
|
if (hasGroupName) {
|
||||||
|
stmt.setString(paramIndex++, groupName + "%");
|
||||||
|
}
|
||||||
|
if (hasOwner) {
|
||||||
|
stmt.setString(paramIndex++, owner + "%");
|
||||||
|
}
|
||||||
|
if (hasLimit) {
|
||||||
|
stmt.setInt(paramIndex++, request.getRowCount());
|
||||||
|
stmt.setInt(paramIndex, request.getStartIndex());
|
||||||
|
}
|
||||||
|
resultSet = stmt.executeQuery();
|
||||||
|
deviceGroupList = new ArrayList<>();
|
||||||
|
while (resultSet.next()) {
|
||||||
|
deviceGroupList.add(GroupManagementDAOUtil.loadGroup(resultSet));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new GroupManagementDAOException("Error occurred while listing all groups in tenant: " + tenantId, e);
|
||||||
|
} finally {
|
||||||
|
GroupManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||||
|
}
|
||||||
|
return deviceGroupList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeviceGroup> getGroups(GroupPaginationRequest request, List<Integer> deviceGroupIds,
|
||||||
|
int tenantId) throws GroupManagementDAOException {
|
||||||
|
int deviceGroupIdsCount = deviceGroupIds.size();
|
||||||
|
if (deviceGroupIdsCount == 0) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
List<DeviceGroup> deviceGroupList = null;
|
||||||
|
|
||||||
|
String groupName = request.getGroupName();
|
||||||
|
boolean hasGroupName = false;
|
||||||
|
String owner = request.getOwner();
|
||||||
|
boolean hasOwner = false;
|
||||||
|
boolean hasLimit = request.getRowCount() != 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||||
|
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER FROM DM_GROUP WHERE TENANT_ID = ?";
|
||||||
|
if (groupName != null && !groupName.isEmpty()) {
|
||||||
|
sql += " AND GROUP_NAME LIKE ?";
|
||||||
|
hasGroupName = true;
|
||||||
|
}
|
||||||
|
if (owner != null && !owner.isEmpty()) {
|
||||||
|
sql += " AND OWNER LIKE ?";
|
||||||
|
hasOwner = true;
|
||||||
|
}
|
||||||
|
sql += " AND ID IN (";
|
||||||
|
for (int i = 0; i < deviceGroupIdsCount; i++) {
|
||||||
|
sql += (deviceGroupIdsCount - 1 != i) ? "?," : "?";
|
||||||
|
}
|
||||||
|
sql += ")";
|
||||||
|
if (hasLimit) {
|
||||||
|
sql += " LIMIT ? OFFSET ?";
|
||||||
|
}
|
||||||
|
|
||||||
|
int paramIndex = 1;
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(paramIndex++, tenantId);
|
||||||
|
if (hasGroupName) {
|
||||||
|
stmt.setString(paramIndex++, groupName + "%");
|
||||||
|
}
|
||||||
|
if (hasOwner) {
|
||||||
|
stmt.setString(paramIndex++, owner + "%");
|
||||||
|
}
|
||||||
|
for (Integer deviceGroupId : deviceGroupIds) {
|
||||||
|
stmt.setInt(paramIndex++, deviceGroupId);
|
||||||
|
}
|
||||||
|
if (hasLimit) {
|
||||||
|
stmt.setInt(paramIndex++, request.getRowCount());
|
||||||
|
stmt.setInt(paramIndex, request.getStartIndex());
|
||||||
|
}
|
||||||
|
resultSet = stmt.executeQuery();
|
||||||
|
deviceGroupList = new ArrayList<>();
|
||||||
|
while (resultSet.next()) {
|
||||||
|
deviceGroupList.add(GroupManagementDAOUtil.loadGroup(resultSet));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new GroupManagementDAOException("Error occurred while listing all groups in tenant: " + tenantId, e);
|
||||||
|
} finally {
|
||||||
|
GroupManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||||
|
}
|
||||||
|
return deviceGroupList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Device> getDevices(int groupId, int startIndex, int rowCount, int tenantId)
|
||||||
|
throws GroupManagementDAOException {
|
||||||
|
Connection conn;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
List<Device> devices = null;
|
||||||
|
try {
|
||||||
|
conn = GroupManagementDAOFactory.getConnection();
|
||||||
|
String sql = "SELECT d1.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 gd.DEVICE_ID, gd.DESCRIPTION, gd.NAME, gd.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE " +
|
||||||
|
"FROM " +
|
||||||
|
"(SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME, d.DEVICE_IDENTIFICATION, d.DEVICE_TYPE_ID FROM" +
|
||||||
|
" DM_DEVICE d, (" +
|
||||||
|
"SELECT dgm.DEVICE_ID FROM DM_DEVICE_GROUP_MAP dgm WHERE dgm.GROUP_ID = ?) dgm1 " +
|
||||||
|
"WHERE d.ID = dgm1.DEVICE_ID AND d.TENANT_ID = ?) gd, DM_DEVICE_TYPE t " +
|
||||||
|
"WHERE gd.DEVICE_TYPE_ID = t.ID) d1 WHERE d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? LIMIT ? OFFSET ?";
|
||||||
|
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(1, groupId);
|
||||||
|
stmt.setInt(2, tenantId);
|
||||||
|
stmt.setInt(3, tenantId);
|
||||||
|
//noinspection JpaQueryApiInspection
|
||||||
|
stmt.setInt(4, rowCount);
|
||||||
|
//noinspection JpaQueryApiInspection
|
||||||
|
stmt.setInt(5, startIndex);
|
||||||
|
rs = stmt.executeQuery();
|
||||||
|
devices = new ArrayList<>();
|
||||||
|
while (rs.next()) {
|
||||||
|
Device device = DeviceManagementDAOUtil.loadDevice(rs);
|
||||||
|
devices.add(device);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new GroupManagementDAOException("Error occurred while retrieving information of all " +
|
||||||
|
"registered devices", e);
|
||||||
|
} finally {
|
||||||
|
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||||
|
}
|
||||||
|
return devices;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,204 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.core.dao.impl.group;
|
||||||
|
|
||||||
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
|
import org.wso2.carbon.device.mgt.common.GroupPaginationRequest;
|
||||||
|
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOException;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOFactory;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.impl.AbstractGroupDAOImpl;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
||||||
|
import org.wso2.carbon.device.mgt.core.dao.util.GroupManagementDAOUtil;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents implementation of GroupDAO
|
||||||
|
*/
|
||||||
|
public class SQLServerGroupDAOImpl extends AbstractGroupDAOImpl {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeviceGroup> getGroups(GroupPaginationRequest request, int tenantId)
|
||||||
|
throws GroupManagementDAOException {
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
List<DeviceGroup> deviceGroupList = null;
|
||||||
|
|
||||||
|
String groupName = request.getGroupName();
|
||||||
|
boolean hasGroupName = false;
|
||||||
|
String owner = request.getOwner();
|
||||||
|
boolean hasOwner = false;
|
||||||
|
boolean hasLimit = request.getRowCount() != 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||||
|
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER FROM DM_GROUP WHERE TENANT_ID = ?";
|
||||||
|
if (groupName != null && !groupName.isEmpty()) {
|
||||||
|
sql += " AND GROUP_NAME LIKE ?";
|
||||||
|
hasGroupName = true;
|
||||||
|
}
|
||||||
|
if (owner != null && !owner.isEmpty()) {
|
||||||
|
sql += " AND OWNER LIKE ?";
|
||||||
|
hasOwner = true;
|
||||||
|
}
|
||||||
|
if (hasLimit) {
|
||||||
|
sql += " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
||||||
|
}
|
||||||
|
|
||||||
|
int paramIndex = 1;
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(paramIndex++, tenantId);
|
||||||
|
if (hasGroupName) {
|
||||||
|
stmt.setString(paramIndex++, groupName + "%");
|
||||||
|
}
|
||||||
|
if (hasOwner) {
|
||||||
|
stmt.setString(paramIndex++, owner + "%");
|
||||||
|
}
|
||||||
|
if (hasLimit) {
|
||||||
|
stmt.setInt(paramIndex++, request.getStartIndex());
|
||||||
|
stmt.setInt(paramIndex, request.getRowCount());
|
||||||
|
}
|
||||||
|
resultSet = stmt.executeQuery();
|
||||||
|
deviceGroupList = new ArrayList<>();
|
||||||
|
while (resultSet.next()) {
|
||||||
|
deviceGroupList.add(GroupManagementDAOUtil.loadGroup(resultSet));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new GroupManagementDAOException("Error occurred while listing all groups in tenant: " + tenantId, e);
|
||||||
|
} finally {
|
||||||
|
GroupManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||||
|
}
|
||||||
|
return deviceGroupList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeviceGroup> getGroups(GroupPaginationRequest request, List<Integer> deviceGroupIds,
|
||||||
|
int tenantId) throws GroupManagementDAOException {
|
||||||
|
int deviceGroupIdsCount = deviceGroupIds.size();
|
||||||
|
if (deviceGroupIdsCount == 0) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
List<DeviceGroup> deviceGroupList = null;
|
||||||
|
|
||||||
|
String groupName = request.getGroupName();
|
||||||
|
boolean hasGroupName = false;
|
||||||
|
String owner = request.getOwner();
|
||||||
|
boolean hasOwner = false;
|
||||||
|
boolean hasLimit = request.getRowCount() != 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Connection conn = GroupManagementDAOFactory.getConnection();
|
||||||
|
String sql = "SELECT ID, DESCRIPTION, GROUP_NAME, OWNER FROM DM_GROUP WHERE TENANT_ID = ?";
|
||||||
|
if (groupName != null && !groupName.isEmpty()) {
|
||||||
|
sql += " AND GROUP_NAME LIKE ?";
|
||||||
|
hasGroupName = true;
|
||||||
|
}
|
||||||
|
if (owner != null && !owner.isEmpty()) {
|
||||||
|
sql += " AND OWNER LIKE ?";
|
||||||
|
hasOwner = true;
|
||||||
|
}
|
||||||
|
sql += " AND ID IN (";
|
||||||
|
for (int i = 0; i < deviceGroupIdsCount; i++) {
|
||||||
|
sql += (deviceGroupIdsCount - 1 != i) ? "?," : "?";
|
||||||
|
}
|
||||||
|
sql += ")";
|
||||||
|
if (hasLimit) {
|
||||||
|
sql += " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
||||||
|
}
|
||||||
|
|
||||||
|
int paramIndex = 1;
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(paramIndex++, tenantId);
|
||||||
|
if (hasGroupName) {
|
||||||
|
stmt.setString(paramIndex++, groupName + "%");
|
||||||
|
}
|
||||||
|
if (hasOwner) {
|
||||||
|
stmt.setString(paramIndex++, owner + "%");
|
||||||
|
}
|
||||||
|
for (Integer deviceGroupId : deviceGroupIds) {
|
||||||
|
stmt.setInt(paramIndex++, deviceGroupId);
|
||||||
|
}
|
||||||
|
if (hasLimit) {
|
||||||
|
stmt.setInt(paramIndex++, request.getStartIndex());
|
||||||
|
stmt.setInt(paramIndex, request.getRowCount());
|
||||||
|
}
|
||||||
|
resultSet = stmt.executeQuery();
|
||||||
|
deviceGroupList = new ArrayList<>();
|
||||||
|
while (resultSet.next()) {
|
||||||
|
deviceGroupList.add(GroupManagementDAOUtil.loadGroup(resultSet));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new GroupManagementDAOException("Error occurred while listing all groups in tenant: " + tenantId, e);
|
||||||
|
} finally {
|
||||||
|
GroupManagementDAOUtil.cleanupResources(stmt, resultSet);
|
||||||
|
}
|
||||||
|
return deviceGroupList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Device> getDevices(int groupId, int startIndex, int rowCount, int tenantId)
|
||||||
|
throws GroupManagementDAOException {
|
||||||
|
Connection conn;
|
||||||
|
PreparedStatement stmt = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
List<Device> devices = null;
|
||||||
|
try {
|
||||||
|
conn = GroupManagementDAOFactory.getConnection();
|
||||||
|
String sql = "SELECT d1.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 gd.DEVICE_ID, gd.DESCRIPTION, gd.NAME, gd.DEVICE_IDENTIFICATION, t.NAME AS DEVICE_TYPE " +
|
||||||
|
"FROM " +
|
||||||
|
"(SELECT d.ID AS DEVICE_ID, d.DESCRIPTION, d.NAME, d.DEVICE_IDENTIFICATION, d.DEVICE_TYPE_ID FROM" +
|
||||||
|
" DM_DEVICE d, (" +
|
||||||
|
"SELECT dgm.DEVICE_ID FROM DM_DEVICE_GROUP_MAP dgm WHERE dgm.GROUP_ID = ?) dgm1 " +
|
||||||
|
"WHERE d.ID = dgm1.DEVICE_ID AND d.TENANT_ID = ?) gd, DM_DEVICE_TYPE t " +
|
||||||
|
"WHERE gd.DEVICE_TYPE_ID = t.ID) d1 WHERE d1.DEVICE_ID = e.DEVICE_ID AND TENANT_ID = ? OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
|
||||||
|
|
||||||
|
stmt = conn.prepareStatement(sql);
|
||||||
|
stmt.setInt(1, groupId);
|
||||||
|
stmt.setInt(2, tenantId);
|
||||||
|
stmt.setInt(3, tenantId);
|
||||||
|
//noinspection JpaQueryApiInspection
|
||||||
|
stmt.setInt(4, startIndex);
|
||||||
|
//noinspection JpaQueryApiInspection
|
||||||
|
stmt.setInt(5, rowCount);
|
||||||
|
rs = stmt.executeQuery();
|
||||||
|
devices = new ArrayList<>();
|
||||||
|
while (rs.next()) {
|
||||||
|
Device device = DeviceManagementDAOUtil.loadDevice(rs);
|
||||||
|
devices.add(device);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new GroupManagementDAOException("Error occurred while retrieving information of all " +
|
||||||
|
"registered devices", e);
|
||||||
|
} finally {
|
||||||
|
DeviceManagementDAOUtil.cleanupResources(stmt, rs);
|
||||||
|
}
|
||||||
|
return devices;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user