From ace7442f2ae9cef0c29b92e6b1c0660228a698bc Mon Sep 17 00:00:00 2001 From: prathabanKavin Date: Mon, 14 Nov 2022 14:33:49 +0530 Subject: [PATCH] Add methods to filter commercialfeatures from metadata --- .../mgt/MetadataManagementService.java | 10 ++++++ .../mgt/MetadataManagementServiceImpl.java | 31 ++++++++++++++++ .../core/metadata/mgt/dao/MetadataDAO.java | 21 +++++++++++ .../mgt/dao/impl/AbstractMetadataDAOImpl.java | 25 +++++++++++++ .../mgt/dao/impl/GenericMetadataDAOImpl.java | 36 +++++++++++++++++++ .../mgt/dao/impl/OracleMetadataDAOImpl.java | 36 +++++++++++++++++++ .../dao/impl/SQLServerMetadataDAOImpl.java | 36 +++++++++++++++++++ 7 files changed, 195 insertions(+) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/MetadataManagementService.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/MetadataManagementService.java index 060492f620..70a2550d10 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/MetadataManagementService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/MetadataManagementService.java @@ -67,6 +67,16 @@ public interface MetadataManagementService { */ PaginationResult retrieveAllMetadata(PaginationRequest request) throws MetadataManagementException; + /** + * Get a paginated list of Metadata entries. + * + * @param request {@link PaginationRequest} obtained from the user + * @param filter Filter word + * @return {@link PaginationResult} enriched with metadata entries + * @throws MetadataManagementException If a data source related exception occurred + */ + PaginationResult retrieveAllMetadataWithFilter(PaginationRequest request, String filter) throws MetadataManagementException; + /** * Update the provided Metadata entry. * a new entry will be created if the provided Metadata.metaKey is not exist diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/MetadataManagementServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/MetadataManagementServiceImpl.java index 7d7fd1d7c0..b9988fe064 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/MetadataManagementServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/MetadataManagementServiceImpl.java @@ -160,6 +160,37 @@ public class MetadataManagementServiceImpl implements MetadataManagementService } } + @Override + public PaginationResult retrieveAllMetadataWithFilter(PaginationRequest request, String filter) throws MetadataManagementException { + if (log.isDebugEnabled()) { + log.debug("Retrieving Metadata entries for given PaginationRequest [rowCount:" + + request.getRowCount() + ", startIndex:" + request.getStartIndex() + "]"); + } + PaginationResult paginationResult = new PaginationResult(); + request = DeviceManagerUtil.validateMetadataListPageSize(request); + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); + try { + MetadataManagementDAOFactory.openConnection(); + List metadata = metadataDAO.getAllMetadataWithFilter(request, tenantId, filter); + int count = metadataDAO.getMetadataCountWithFilter(tenantId, filter); + paginationResult.setData(metadata); + paginationResult.setRecordsFiltered(count); + paginationResult.setRecordsTotal(count); + return paginationResult; + } catch (MetadataManagementDAOException e) { + String msg = "Error occurred while retrieving metadata entries for given PaginationRequest [rowCount:" + + request.getRowCount() + ", startIndex:" + request.getStartIndex() + "]"; + log.error(msg, e); + throw new MetadataManagementException(msg, e); + } catch (SQLException e) { + String msg = "Error occurred while opening a connection to the data source"; + log.error(msg, e); + throw new MetadataManagementException(msg, e); + } finally { + MetadataManagementDAOFactory.closeConnection(); + } + } + @Override public Metadata updateMetadata(Metadata metadata) throws MetadataManagementException { if (log.isDebugEnabled()) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/MetadataDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/MetadataDAO.java index 3fae719186..fb4564724c 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/MetadataDAO.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/MetadataDAO.java @@ -91,6 +91,17 @@ public interface MetadataDAO { */ List getAllMetadata(PaginationRequest request, int tenantId) throws MetadataManagementDAOException; + /** + * Select Metadata entries based on PaginationRequest and Filter. + * + * @param request {@link PaginationRequest} + * @param tenantId Tenant Id + * @param filter Filter word + * @return a list of Metadata entries + * @throws MetadataManagementDAOException might occur while executing database queries + */ + List getAllMetadataWithFilter(PaginationRequest request, int tenantId, String filter) throws MetadataManagementDAOException; + /** * Count number of Metadata entries. * @@ -100,4 +111,14 @@ public interface MetadataDAO { */ int getMetadataCount(int tenantId) throws MetadataManagementDAOException; + /** + * Count number of Metadata entries with filter. + * + * @param tenantId Tenant Id + * @param filter Filter word + * @return Metadata entry count of given tenant + * @throws MetadataManagementDAOException might occur while executing database queries + */ + int getMetadataCountWithFilter(int tenantId, String filter) throws MetadataManagementDAOException; + } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/AbstractMetadataDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/AbstractMetadataDAOImpl.java index f4615d3e6c..4002c4891e 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/AbstractMetadataDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/AbstractMetadataDAOImpl.java @@ -152,6 +152,31 @@ public abstract class AbstractMetadataDAOImpl implements MetadataDAO { return metadataCount; } + @Override + public int getMetadataCountWithFilter(int tenantId, String filter) throws MetadataManagementDAOException { + int metadataCount = 0; + String keyFilter = "%" + filter + "%"; + try { + Connection conn = MetadataManagementDAOFactory.getConnection(); + String sql = + "SELECT COUNT(*) AS METADATA_COUNT FROM DM_METADATA WHERE TENANT_ID = ? AND METADATA_KEY LIKE ?"; + try (PreparedStatement stmt = conn.prepareStatement(sql)) { + stmt.setInt(1, tenantId); + stmt.setString(2, keyFilter); + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + metadataCount = rs.getInt("METADATA_COUNT"); + } + } + } + } catch (SQLException e) { + String msg = "Error occurred while counting metadata with filter"; + log.error(msg, e); + throw new MetadataManagementDAOException(msg, e); + } + return metadataCount; + } + @Override public boolean isExist(int tenantId, String metaKey) throws MetadataManagementDAOException { try { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/GenericMetadataDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/GenericMetadataDAOImpl.java index fa6a7f6b71..d5a21270e8 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/GenericMetadataDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/GenericMetadataDAOImpl.java @@ -74,6 +74,42 @@ public class GenericMetadataDAOImpl extends AbstractMetadataDAOImpl { return metadata; } + public List getAllMetadataWithFilter(PaginationRequest request, int tenantId, String filter) + throws MetadataManagementDAOException { + List metadata; + String keyFilter = "%" + filter + "%"; + String sql = "SELECT DATA_TYPE, METADATA_KEY, METADATA_VALUE " + + "FROM DM_METADATA " + + "WHERE TENANT_ID = ? " + + "AND METADATA_KEY LIKE ? " + + "ORDER BY METADATA_KEY"; + if (request.getRowCount() != -1) { + sql = sql + " LIMIT ? OFFSET ?"; + } + try { + Connection conn = MetadataManagementDAOFactory.getConnection(); + try (PreparedStatement stmt = conn.prepareStatement(sql)) { + stmt.setInt(1, tenantId); + stmt.setString(2, keyFilter); + if (request.getRowCount() != -1) { + stmt.setInt(3, request.getRowCount()); + stmt.setInt(4, request.getStartIndex()); + } + try (ResultSet rs = stmt.executeQuery()) { + metadata = new ArrayList<>(); + while (rs.next()) { + metadata.add(MetadataDAOUtil.getMetadata(rs)); + } + } + } + } catch (SQLException e) { + String msg = "Error occurred while retrieving all metadata with filter"; + log.error(msg, e); + throw new MetadataManagementDAOException(msg, e); + } + return metadata; + } + @Override public boolean isExist(int tenantId, String metaKey) throws MetadataManagementDAOException { try { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/OracleMetadataDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/OracleMetadataDAOImpl.java index f0c1d95436..e6bb4d5f9e 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/OracleMetadataDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/OracleMetadataDAOImpl.java @@ -74,4 +74,40 @@ public class OracleMetadataDAOImpl extends AbstractMetadataDAOImpl { return metadata; } + @Override + public List getAllMetadataWithFilter(PaginationRequest request, int tenantId, String filter) throws MetadataManagementDAOException { + List metadata; + String keyFilter = "%" + filter + "%"; + String sql = "SELECT DATA_TYPE, METADATA_KEY, METADATA_VALUE " + + "FROM DM_METADATA " + + "WHERE TENANT_ID = ? " + + "AND METADATA_KEY LIKE ? " + + "ORDER BY METADATA_KEY"; + if (request.getRowCount() != -1) { + sql = sql + " OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + } + try { + Connection conn = MetadataManagementDAOFactory.getConnection(); + try (PreparedStatement stmt = conn.prepareStatement(sql)) { + stmt.setInt(1, tenantId); + stmt.setString(2, keyFilter); + if (request.getRowCount() != -1) { + stmt.setInt(3, request.getStartIndex()); + stmt.setInt(4, request.getRowCount()); + } + try (ResultSet rs = stmt.executeQuery()) { + metadata = new ArrayList<>(); + while (rs.next()) { + metadata.add(MetadataDAOUtil.getMetadata(rs)); + } + } + } + } catch (SQLException e) { + String msg = "Error occurred while retrieving all metadata"; + log.error(msg, e); + throw new MetadataManagementDAOException(msg, e); + } + return metadata; + } + } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/SQLServerMetadataDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/SQLServerMetadataDAOImpl.java index 1c8ddacf99..4870799a5c 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/SQLServerMetadataDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/dao/impl/SQLServerMetadataDAOImpl.java @@ -74,4 +74,40 @@ public class SQLServerMetadataDAOImpl extends AbstractMetadataDAOImpl { return metadata; } + @Override + public List getAllMetadataWithFilter(PaginationRequest request, int tenantId, String filter) throws MetadataManagementDAOException { + List metadata; + String keyFilter = "%" + filter + "%"; + String sql = "SELECT DATA_TYPE, METADATA_KEY, METADATA_VALUE " + + "FROM DM_METADATA " + + "WHERE TENANT_ID = ? " + + "AND METADATA_KEY LIKE ? " + + "ORDER BY METADATA_KEY"; + if (request.getRowCount() != -1) { + sql = sql + " LIMIT ? OFFSET ?"; + } + try { + Connection conn = MetadataManagementDAOFactory.getConnection(); + try (PreparedStatement stmt = conn.prepareStatement(sql)) { + stmt.setInt(1, tenantId); + stmt.setString(2, keyFilter); + if (request.getRowCount() != -1) { + stmt.setInt(3, request.getRowCount()); + stmt.setInt(4, request.getStartIndex()); + } + try (ResultSet rs = stmt.executeQuery()) { + metadata = new ArrayList<>(); + while (rs.next()) { + metadata.add(MetadataDAOUtil.getMetadata(rs)); + } + } + } + } catch (SQLException e) { + String msg = "Error occurred while retrieving all metadata with filter"; + log.error(msg, e); + throw new MetadataManagementDAOException(msg, e); + } + return metadata; + } + }