remotes/1725333865317989910/tmp_refs/heads/master
Dharmakeerthi Lasantha 2 years ago
commit c3d23c3cfa

@ -127,7 +127,6 @@
<dependency> <dependency>
<groupId>io.entgra.device.mgt.core</groupId> <groupId>io.entgra.device.mgt.core</groupId>
<artifactId>io.entgra.device.mgt.core.apimgt.extension.rest.api</artifactId> <artifactId>io.entgra.device.mgt.core.apimgt.extension.rest.api</artifactId>
<scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.json.wso2</groupId> <groupId>org.json.wso2</groupId>

@ -916,6 +916,24 @@ public interface PolicyManagementService {
response = ErrorResponse.class) response = ErrorResponse.class)
}) })
Response getPolicyList( Response getPolicyList(
@ApiParam(
name = "name",
value = "The name of the policy that needs filtering.",
required = false)
@QueryParam("name")
String name,
@ApiParam(
name = "type",
value = "The type of the policy that needs filtering.",
required = false)
@QueryParam("type")
String type,
@ApiParam(
name = "status",
value = "The status of the policy that needs filtering.",
required = false)
@QueryParam("status")
String status,
@ApiParam( @ApiParam(
name = "If-Modified-Since", name = "If-Modified-Since",
value = "Checks if the requested variant was modified, since the specified date-time. \n" + value = "Checks if the requested variant was modified, since the specified date-time. \n" +

@ -17,6 +17,7 @@
*/ */
package io.entgra.device.mgt.core.device.mgt.api.jaxrs.service.impl; package io.entgra.device.mgt.core.device.mgt.api.jaxrs.service.impl;
import io.entgra.device.mgt.core.device.mgt.common.PolicyPaginationRequest;
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.context.PrivilegedCarbonContext; import org.wso2.carbon.context.PrivilegedCarbonContext;
@ -481,6 +482,9 @@ public class PolicyManagementServiceImpl implements PolicyManagementService {
@Path("/list") @Path("/list")
@Override @Override
public Response getPolicyList( public Response getPolicyList(
@QueryParam("name") String name,
@QueryParam("type") String type,
@QueryParam("status") String status,
@HeaderParam("If-Modified-Since") String ifModifiedSince, @HeaderParam("If-Modified-Since") String ifModifiedSince,
@QueryParam("offset") int offset, @QueryParam("offset") int offset,
@QueryParam("limit") int limit) { @QueryParam("limit") int limit) {
@ -488,7 +492,16 @@ public class PolicyManagementServiceImpl implements PolicyManagementService {
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
List<Policy> policies; List<Policy> policies;
PolicyList targetPolicies = new PolicyList(); PolicyList targetPolicies = new PolicyList();
PaginationRequest request = new PaginationRequest(offset, limit); PolicyPaginationRequest request = new PolicyPaginationRequest(offset, limit);
if (name != null){
request.setName(name);
}
if (type != null){
request.setType(type);
}
if (status != null){
request.setStatus(status);
}
try { try {
PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP(); PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP();
policies = policyAdministratorPoint.getPolicyList(request); policies = policyAdministratorPoint.getPolicyList(request);

@ -0,0 +1,77 @@
/*
* Copyright (c) 2018 - 2023, Entgra (pvt) Ltd. (https://entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.device.mgt.common;
public class PolicyPaginationRequest {
private int startIndex;
private int rowCount;
private String name;
private String type;
private String status;
public PolicyPaginationRequest(int start, int rowCount) {
this.startIndex = start;
this.rowCount = rowCount;
}
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 getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
@Override
public String toString() {
return "Group Name '" + this.name + "' num of rows: " + this.rowCount + " start index: " + this.startIndex;
}
}

@ -18,20 +18,20 @@
package io.entgra.device.mgt.core.device.mgt.core.dao; package io.entgra.device.mgt.core.device.mgt.core.dao;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import io.entgra.device.mgt.core.device.mgt.common.DeviceManagementConstants; import io.entgra.device.mgt.core.device.mgt.common.DeviceManagementConstants;
import io.entgra.device.mgt.core.device.mgt.common.exceptions.IllegalTransactionStateException; import io.entgra.device.mgt.core.device.mgt.common.exceptions.IllegalTransactionStateException;
import io.entgra.device.mgt.core.device.mgt.common.exceptions.TransactionManagementException; import io.entgra.device.mgt.core.device.mgt.common.exceptions.TransactionManagementException;
import io.entgra.device.mgt.core.device.mgt.common.exceptions.UnsupportedDatabaseEngineException; import io.entgra.device.mgt.core.device.mgt.common.exceptions.UnsupportedDatabaseEngineException;
import io.entgra.device.mgt.core.device.mgt.core.config.datasource.DataSourceConfig; import io.entgra.device.mgt.core.device.mgt.core.config.datasource.DataSourceConfig;
import io.entgra.device.mgt.core.device.mgt.core.config.datasource.JNDILookupDefinition; import io.entgra.device.mgt.core.device.mgt.core.config.datasource.JNDILookupDefinition;
import io.entgra.device.mgt.core.device.mgt.core.dao.impl.*;
import io.entgra.device.mgt.core.device.mgt.core.dao.impl.event.GenericEventConfigDAOImpl; import io.entgra.device.mgt.core.device.mgt.core.dao.impl.event.GenericEventConfigDAOImpl;
import io.entgra.device.mgt.core.device.mgt.core.dao.impl.event.H2EventConfigDAOImpl; import io.entgra.device.mgt.core.device.mgt.core.dao.impl.event.H2EventConfigDAOImpl;
import io.entgra.device.mgt.core.device.mgt.core.dao.impl.event.SQLServerEventConfigDAOImpl;
import io.entgra.device.mgt.core.device.mgt.core.dao.impl.geofence.GenericGeofenceDAOImpl; import io.entgra.device.mgt.core.device.mgt.core.dao.impl.geofence.GenericGeofenceDAOImpl;
import io.entgra.device.mgt.core.device.mgt.core.dao.impl.geofence.SQLServerGeofenceDAOImpl; import io.entgra.device.mgt.core.device.mgt.core.dao.impl.geofence.SQLServerGeofenceDAOImpl;
import io.entgra.device.mgt.core.device.mgt.core.dao.util.DeviceManagementDAOUtil; import io.entgra.device.mgt.core.device.mgt.core.dao.util.DeviceManagementDAOUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.sql.Connection; import java.sql.Connection;
@ -69,6 +69,7 @@ public class EventManagementDAOFactory {
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_POSTGRESQL: case DeviceManagementConstants.DataBaseTypes.DB_TYPE_POSTGRESQL:
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_ORACLE: case DeviceManagementConstants.DataBaseTypes.DB_TYPE_ORACLE:
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MSSQL: case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MSSQL:
return new SQLServerEventConfigDAOImpl();
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MYSQL: case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MYSQL:
return new GenericEventConfigDAOImpl(); return new GenericEventConfigDAOImpl();
case DeviceManagementConstants.DataBaseTypes.DB_TYPE_H2: case DeviceManagementConstants.DataBaseTypes.DB_TYPE_H2:

@ -0,0 +1,82 @@
/*
* Copyright (c) 2018-2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. 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 io.entgra.device.mgt.core.device.mgt.core.dao.impl.event;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import io.entgra.device.mgt.core.device.mgt.common.event.config.EventConfig;
import io.entgra.device.mgt.core.device.mgt.core.dao.EventManagementDAOException;
import io.entgra.device.mgt.core.device.mgt.core.dao.EventManagementDAOFactory;
import io.entgra.device.mgt.core.device.mgt.core.dao.impl.AbstractEventConfigDAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import java.util.Calendar;
public class SQLServerEventConfigDAOImpl extends AbstractEventConfigDAO {
private static final Log log = LogFactory.getLog(SQLServerEventConfigDAOImpl.class);
@Override
public List<Integer> storeEventRecords(List<EventConfig> eventConfigList, int tenantId) throws EventManagementDAOException {
try {
Calendar calendar = Calendar.getInstance();
Timestamp timestamp = new Timestamp(calendar.getTime().getTime());
Connection conn = this.getConnection();
String sql = "INSERT INTO DM_DEVICE_EVENT(" +
"EVENT_SOURCE, " +
"EVENT_LOGIC, " +
"ACTIONS, "+
"CREATED_TIMESTAMP, " +
"TENANT_ID) " +
"VALUES (?, ?, ?, ?, ?)";
List<Integer> generatedIds = new ArrayList<>();
try (PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
for (EventConfig eventConfig : eventConfigList) {
stmt.setString(1, eventConfig.getEventSource());
stmt.setString(2, eventConfig.getEventLogic());
stmt.setString(3, eventConfig.getActions());
stmt.setTimestamp(4, timestamp);
stmt.setInt(5, tenantId);
stmt.executeUpdate();
try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
if (generatedKeys.next()) {
generatedIds.add(generatedKeys.getInt(1));
}
}
}
}
return generatedIds;
} catch (SQLException e) {
String msg = "Error occurred while creating event configurations for the tenant id " + tenantId;
log.error(msg, e);
throw new EventManagementDAOException(msg, e);
}
}
private Connection getConnection() throws SQLException {
return EventManagementDAOFactory.getConnection();
}
}

@ -20,6 +20,7 @@ package io.entgra.device.mgt.core.policy.mgt.common;
import io.entgra.device.mgt.core.device.mgt.common.DeviceIdentifier; import io.entgra.device.mgt.core.device.mgt.common.DeviceIdentifier;
import io.entgra.device.mgt.core.device.mgt.common.DynamicTaskContext; import io.entgra.device.mgt.core.device.mgt.common.DynamicTaskContext;
import io.entgra.device.mgt.core.device.mgt.common.PaginationRequest; import io.entgra.device.mgt.core.device.mgt.common.PaginationRequest;
import io.entgra.device.mgt.core.device.mgt.common.PolicyPaginationRequest;
import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.Policy; import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.Policy;
import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.Profile; import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.Profile;
@ -167,10 +168,10 @@ public interface PolicyAdministratorPoint {
/** /**
* Returns a list of policies filtered by offset and limit * Returns a list of policies filtered by offset and limit
* @param request {@link PaginationRequest} contains offset and limit * @param request {@link PolicyPaginationRequest} contains offset and limit and filters
* @return {@link List<Policy>} - list of policies for current tenant * @return {@link List<Policy>} - list of policies for current tenant
* @throws PolicyManagementException when there is an error while retrieving the policies from database or * @throws PolicyManagementException when there is an error while retrieving the policies from database or
* while retrieving device groups * while retrieving device groups
*/ */
List<Policy> getPolicyList(PaginationRequest request) throws PolicyManagementException; List<Policy> getPolicyList(PolicyPaginationRequest request) throws PolicyManagementException;
} }

@ -20,6 +20,7 @@ package io.entgra.device.mgt.core.policy.mgt.core.dao;
import io.entgra.device.mgt.core.device.mgt.common.Device; import io.entgra.device.mgt.core.device.mgt.common.Device;
import io.entgra.device.mgt.core.device.mgt.common.PaginationRequest; import io.entgra.device.mgt.core.device.mgt.common.PaginationRequest;
import io.entgra.device.mgt.core.device.mgt.common.PolicyPaginationRequest;
import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.CorrectiveAction; import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.CorrectiveAction;
import io.entgra.device.mgt.core.policy.mgt.common.Criterion; import io.entgra.device.mgt.core.policy.mgt.common.Criterion;
import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.DeviceGroupWrapper; import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.DeviceGroupWrapper;
@ -202,9 +203,9 @@ public interface PolicyDAO {
/** /**
* This method is used to retrieve policies from the database based on the offset and limit * This method is used to retrieve policies from the database based on the offset and limit
* sent through the PaginationRequest * sent through the PaginationRequest
* @param request {@link PaginationRequest} contains offset and limit * @param request {@link PolicyPaginationRequest} contains offset and limit and filters
* @return {@link List<Policy>} - list of policies for current tenant * @return {@link List<Policy>} - list of policies for current tenant
* @throws PolicyManagerDAOException when there is an error while retrieving the policies from database * @throws PolicyManagerDAOException when there is an error while retrieving the policies from database
*/ */
List<Policy> getAllPolicies(PaginationRequest request) throws PolicyManagerDAOException; List<Policy> getAllPolicies(PolicyPaginationRequest request) throws PolicyManagerDAOException;
} }

@ -18,6 +18,7 @@
package io.entgra.device.mgt.core.policy.mgt.core.dao.impl.policy; package io.entgra.device.mgt.core.policy.mgt.core.dao.impl.policy;
import io.entgra.device.mgt.core.device.mgt.common.PolicyPaginationRequest;
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.context.PrivilegedCarbonContext; import org.wso2.carbon.context.PrivilegedCarbonContext;
@ -41,21 +42,57 @@ public class GenericPolicyDAOImpl extends AbstractPolicyDAOImpl {
} }
@Override @Override
public List<Policy> getAllPolicies(PaginationRequest request) throws PolicyManagerDAOException { public List<Policy> getAllPolicies(PolicyPaginationRequest request) throws PolicyManagerDAOException {
Connection conn; Connection conn;
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
String name = request.getName();
String type = request.getType();
String status = request.getStatus();
int statusValue = 0;
boolean isPolicyNameProvided = false;
boolean isPolicyTypeProvided = false;
boolean isPolicyStatusProvided = false;
try { try {
conn = this.getConnection(); conn = this.getConnection();
String query = "SELECT * " + String query = "SELECT * " +
"FROM DM_POLICY " + "FROM DM_POLICY " +
"WHERE TENANT_ID = ? " + "WHERE TENANT_ID = ? ";
"ORDER BY ID LIMIT ?,?";
if (name != null && !name.isEmpty()) {
query += "AND NAME LIKE ? " ;
isPolicyNameProvided = true;
}
if (type != null && !type.isEmpty()) {
query += "AND POLICY_TYPE = ? " ;
isPolicyTypeProvided = true;
}
if (status != null && !status.isEmpty()) {
if (status.equals("ACTIVE")) {
statusValue = 1;
}
query += "AND ACTIVE = ? " ;
isPolicyStatusProvided = true;
}
query += "ORDER BY ID LIMIT ?,?";
try (PreparedStatement stmt = conn.prepareStatement(query)) { try (PreparedStatement stmt = conn.prepareStatement(query)) {
stmt.setInt(1, tenantId); int paramIdx = 1;
stmt.setInt(2, request.getStartIndex()); stmt.setInt(paramIdx++, tenantId);
stmt.setInt(3, request.getRowCount()); if (isPolicyNameProvided) {
stmt.setString(paramIdx++, "%" + name + "%");
}
if (isPolicyTypeProvided) {
stmt.setString(paramIdx++, type);
}
if (isPolicyStatusProvided) {
stmt.setInt(paramIdx++, statusValue);
}
stmt.setInt(paramIdx++, request.getStartIndex());
stmt.setInt(paramIdx++, request.getRowCount());
try (ResultSet resultSet = stmt.executeQuery()) { try (ResultSet resultSet = stmt.executeQuery()) {
return this.extractPolicyListFromDbResult(resultSet, tenantId); return this.extractPolicyListFromDbResult(resultSet, tenantId);
} }

@ -18,6 +18,7 @@
package io.entgra.device.mgt.core.policy.mgt.core.dao.impl.policy; package io.entgra.device.mgt.core.policy.mgt.core.dao.impl.policy;
import io.entgra.device.mgt.core.device.mgt.common.PolicyPaginationRequest;
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.context.PrivilegedCarbonContext; import org.wso2.carbon.context.PrivilegedCarbonContext;
@ -40,21 +41,57 @@ public class OraclePolicyDAOImpl extends AbstractPolicyDAOImpl {
} }
@Override @Override
public List<Policy> getAllPolicies(PaginationRequest request) throws PolicyManagerDAOException { public List<Policy> getAllPolicies(PolicyPaginationRequest request) throws PolicyManagerDAOException {
Connection conn; Connection conn;
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
String name = request.getName();
String type = request.getType();
String status = request.getStatus();
int statusValue = 0;
boolean isPolicyNameProvided = false;
boolean isPolicyTypeProvided = false;
boolean isPolicyStatusProvided = false;
try { try {
conn = this.getConnection(); conn = this.getConnection();
String query = "SELECT * " + String query = "SELECT * " +
"FROM DM_POLICY " + "FROM DM_POLICY " +
"WHERE TENANT_ID = ? " + "WHERE TENANT_ID = ? ";
"ORDER BY ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
if (name != null && !name.isEmpty()) {
query += "AND NAME LIKE ? " ;
isPolicyNameProvided = true;
}
if (type != null && !type.isEmpty()) {
query += "AND POLICY_TYPE = ? " ;
isPolicyTypeProvided = true;
}
if (status != null && !status.isEmpty()) {
if (status.equals("ACTIVE")) {
statusValue = 1;
}
query += "AND ACTIVE = ? " ;
isPolicyStatusProvided = true;
}
query += "ORDER BY ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
try (PreparedStatement stmt = conn.prepareStatement(query)) { try (PreparedStatement stmt = conn.prepareStatement(query)) {
stmt.setInt(1, tenantId); int paramIdx = 1;
stmt.setInt(2, request.getStartIndex()); stmt.setInt(paramIdx++, tenantId);
stmt.setInt(3, request.getRowCount()); if (isPolicyNameProvided) {
stmt.setString(paramIdx++, "%" + name + "%");
}
if (isPolicyTypeProvided) {
stmt.setString(paramIdx++, type);
}
if (isPolicyStatusProvided) {
stmt.setInt(paramIdx++, statusValue);
}
stmt.setInt(paramIdx++, request.getStartIndex());
stmt.setInt(paramIdx++, request.getRowCount());
try (ResultSet resultSet = stmt.executeQuery()) { try (ResultSet resultSet = stmt.executeQuery()) {
return this.extractPolicyListFromDbResult(resultSet, tenantId); return this.extractPolicyListFromDbResult(resultSet, tenantId);
} }

@ -18,6 +18,7 @@
package io.entgra.device.mgt.core.policy.mgt.core.dao.impl.policy; package io.entgra.device.mgt.core.policy.mgt.core.dao.impl.policy;
import io.entgra.device.mgt.core.device.mgt.common.PolicyPaginationRequest;
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.context.PrivilegedCarbonContext; import org.wso2.carbon.context.PrivilegedCarbonContext;
@ -40,21 +41,57 @@ public class PostgreSQLPolicyDAOImpl extends AbstractPolicyDAOImpl {
} }
@Override @Override
public List<Policy> getAllPolicies(PaginationRequest request) throws PolicyManagerDAOException { public List<Policy> getAllPolicies(PolicyPaginationRequest request) throws PolicyManagerDAOException {
Connection conn; Connection conn;
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
String name = request.getName();
String type = request.getType();
String status = request.getStatus();
int statusValue = 0;
boolean isPolicyNameProvided = false;
boolean isPolicyTypeProvided = false;
boolean isPolicyStatusProvided = false;
try { try {
conn = this.getConnection(); conn = this.getConnection();
String query = "SELECT * " + String query = "SELECT * " +
"FROM DM_POLICY " + "FROM DM_POLICY " +
"WHERE TENANT_ID = ? " + "WHERE TENANT_ID = ? ";
"ORDER BY ID LIMIT ? OFFSET ?";
if (name != null && !name.isEmpty()) {
query += "AND NAME LIKE ? " ;
isPolicyNameProvided = true;
}
if (type != null && !type.isEmpty()) {
query += "AND POLICY_TYPE = ? " ;
isPolicyTypeProvided = true;
}
if (status != null && !status.isEmpty()) {
if (status.equals("ACTIVE")) {
statusValue = 1;
}
query += "AND ACTIVE = ? " ;
isPolicyStatusProvided = true;
}
query += "ORDER BY ID LIMIT ? OFFSET ?";
try (PreparedStatement stmt = conn.prepareStatement(query)) { try (PreparedStatement stmt = conn.prepareStatement(query)) {
stmt.setInt(1, tenantId); int paramIdx = 1;
stmt.setInt(2, request.getRowCount()); stmt.setInt(paramIdx++, tenantId);
stmt.setInt(3, request.getStartIndex()); if (isPolicyNameProvided) {
stmt.setString(paramIdx++, "%" + name + "%");
}
if (isPolicyTypeProvided) {
stmt.setString(paramIdx++, type);
}
if (isPolicyStatusProvided) {
stmt.setInt(paramIdx++, statusValue);
}
stmt.setInt(paramIdx++, request.getStartIndex());
stmt.setInt(paramIdx++, request.getRowCount());
try (ResultSet resultSet = stmt.executeQuery()) { try (ResultSet resultSet = stmt.executeQuery()) {
return this.extractPolicyListFromDbResult(resultSet, tenantId); return this.extractPolicyListFromDbResult(resultSet, tenantId);
} }

@ -18,6 +18,7 @@
package io.entgra.device.mgt.core.policy.mgt.core.dao.impl.policy; package io.entgra.device.mgt.core.policy.mgt.core.dao.impl.policy;
import io.entgra.device.mgt.core.device.mgt.common.PolicyPaginationRequest;
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.context.PrivilegedCarbonContext; import org.wso2.carbon.context.PrivilegedCarbonContext;
@ -40,20 +41,57 @@ public class SQLServerPolicyDAOImpl extends AbstractPolicyDAOImpl {
} }
@Override @Override
public List<Policy> getAllPolicies(PaginationRequest request) throws PolicyManagerDAOException { public List<Policy> getAllPolicies(PolicyPaginationRequest request) throws PolicyManagerDAOException {
Connection conn; Connection conn;
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
String name = request.getName();
String type = request.getType();
String status = request.getStatus();
int statusValue = 0;
boolean isPolicyNameProvided = false;
boolean isPolicyTypeProvided = false;
boolean isPolicyStatusProvided = false;
try { try {
conn = this.getConnection(); conn = this.getConnection();
String query = "SELECT * " + String query = "SELECT * " +
"FROM DM_POLICY " + "FROM DM_POLICY " +
"WHERE TENANT_ID = ? " + "WHERE TENANT_ID = ? ";
"ORDER BY ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
if (name != null && !name.isEmpty()) {
query += "AND NAME LIKE ? " ;
isPolicyNameProvided = true;
}
if (type != null && !type.isEmpty()) {
query += "AND POLICY_TYPE = ? " ;
isPolicyTypeProvided = true;
}
if (status != null && !status.isEmpty()) {
if (status.equals("ACTIVE")) {
statusValue = 1;
}
query += "AND ACTIVE = ? " ;
isPolicyStatusProvided = true;
}
query += "ORDER BY ID OFFSET ? ROWS FETCH NEXT ? ROWS ONLY";
try (PreparedStatement stmt = conn.prepareStatement(query)) { try (PreparedStatement stmt = conn.prepareStatement(query)) {
stmt.setInt(1, tenantId); int paramIdx = 1;
stmt.setInt(2, request.getStartIndex()); stmt.setInt(paramIdx++, tenantId);
stmt.setInt(3, request.getRowCount()); if (isPolicyNameProvided) {
stmt.setString(paramIdx++, "%" + name + "%");
}
if (isPolicyTypeProvided) {
stmt.setString(paramIdx++, type);
}
if (isPolicyStatusProvided) {
stmt.setInt(paramIdx++, statusValue);
}
stmt.setInt(paramIdx++, request.getStartIndex());
stmt.setInt(paramIdx++, request.getRowCount());
try (ResultSet resultSet = stmt.executeQuery()) { try (ResultSet resultSet = stmt.executeQuery()) {
return this.extractPolicyListFromDbResult(resultSet, tenantId); return this.extractPolicyListFromDbResult(resultSet, tenantId);
} }

@ -18,6 +18,7 @@
package io.entgra.device.mgt.core.policy.mgt.core.impl; package io.entgra.device.mgt.core.policy.mgt.core.impl;
import io.entgra.device.mgt.core.device.mgt.common.PolicyPaginationRequest;
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.context.PrivilegedCarbonContext; import org.wso2.carbon.context.PrivilegedCarbonContext;
@ -335,7 +336,7 @@ public class PolicyAdministratorPointImpl implements PolicyAdministratorPoint {
} }
@Override @Override
public List<Policy> getPolicyList(PaginationRequest request) throws PolicyManagementException { public List<Policy> getPolicyList(PolicyPaginationRequest request) throws PolicyManagementException {
return policyManager.getPolicyList(request); return policyManager.getPolicyList(request);
} }
} }

@ -21,6 +21,7 @@ import io.entgra.device.mgt.core.device.mgt.common.Device;
import io.entgra.device.mgt.core.device.mgt.common.DeviceIdentifier; import io.entgra.device.mgt.core.device.mgt.common.DeviceIdentifier;
import io.entgra.device.mgt.core.device.mgt.common.DynamicTaskContext; import io.entgra.device.mgt.core.device.mgt.common.DynamicTaskContext;
import io.entgra.device.mgt.core.device.mgt.common.PaginationRequest; import io.entgra.device.mgt.core.device.mgt.common.PaginationRequest;
import io.entgra.device.mgt.core.device.mgt.common.PolicyPaginationRequest;
import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.Policy; import io.entgra.device.mgt.core.device.mgt.common.policy.mgt.Policy;
import io.entgra.device.mgt.core.policy.mgt.common.PolicyManagementException; import io.entgra.device.mgt.core.policy.mgt.common.PolicyManagementException;
import io.entgra.device.mgt.core.policy.mgt.core.mgt.bean.UpdatedPolicyDeviceListBean; import io.entgra.device.mgt.core.policy.mgt.core.mgt.bean.UpdatedPolicyDeviceListBean;
@ -93,10 +94,10 @@ public interface PolicyManager {
/** /**
* Returns list of policies with users, roles and groups attached to that policy * Returns list of policies with users, roles and groups attached to that policy
* @param request {@link PaginationRequest} contains offset and limit * @param request {@link PolicyPaginationRequest} contains offset and limit and filters
* @return {@link List<Policy>} - list of policies for current tenant * @return {@link List<Policy>} - list of policies for current tenant
* @throws PolicyManagementException when there is an error while retrieving the policies from database or * @throws PolicyManagementException when there is an error while retrieving the policies from database or
* while retrieving device groups * while retrieving device groups
*/ */
List<Policy> getPolicyList(PaginationRequest request) throws PolicyManagementException; List<Policy> getPolicyList(PolicyPaginationRequest request) throws PolicyManagementException;
} }

@ -18,6 +18,7 @@
package io.entgra.device.mgt.core.policy.mgt.core.mgt.impl; package io.entgra.device.mgt.core.policy.mgt.core.mgt.impl;
import io.entgra.device.mgt.core.device.mgt.common.PolicyPaginationRequest;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@ -1488,7 +1489,7 @@ public class PolicyManagerImpl implements PolicyManager {
} }
@Override @Override
public List<Policy> getPolicyList(PaginationRequest request) throws PolicyManagementException { public List<Policy> getPolicyList(PolicyPaginationRequest request) throws PolicyManagementException {
List<Policy> policyList; List<Policy> policyList;
try { try {
PolicyManagementDAOFactory.openConnection(); PolicyManagementDAOFactory.openConnection();

@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
~
~ Entgra (Pvt) Ltd. 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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>io.entgra.device.mgt.core</groupId>
<artifactId>apimgt-extensions-feature</artifactId>
<version>5.0.26-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>io.entgra.device.mgt.core.apimgt.extension.rest.api.feature</artifactId>
<packaging>pom</packaging>
<name>Entgra - API management REST API feature</name>
<description>This feature contains an implementation of API manager REST API extension</description>
<url>http://entgra.io</url>
<dependencies>
<dependency>
<groupId>io.entgra.device.mgt.core</groupId>
<artifactId>io.entgra.device.mgt.core.apimgt.extension.rest.api</artifactId>
<version>${io.entgra.device.mgt.core.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>generate-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>src/main/resources</outputDirectory>
<resources>
<resource>
<directory>resources</directory>
<includes>
<include>build.properties</include>
<include>p2.inf</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.wso2.maven</groupId>
<artifactId>carbon-p2-plugin</artifactId>
<version>${carbon.p2.plugin.version}</version>
<executions>
<execution>
<id>p2-feature-generation</id>
<phase>package</phase>
<goals>
<goal>p2-feature-gen</goal>
</goals>
<configuration>
<id>io.entgra.device.mgt.core.apimgt.extension.rest.api</id>
<propertiesFile>../../../features/etc/feature.properties</propertiesFile>
<adviceFile>
<properties>
<propertyDef>org.wso2.carbon.p2.category.type:server</propertyDef>
<propertyDef>org.eclipse.equinox.p2.type.group:false</propertyDef>
</properties>
</adviceFile>
<bundles>
<bundleDef>
io.entgra.device.mgt.core:io.entgra.device.mgt.core.apimgt.extension.rest.api:${io.entgra.device.mgt.core.version}
</bundleDef>
</bundles>
<importFeatures>
<importFeatureDef>org.wso2.carbon.core.server:${carbon.kernel.version}</importFeatureDef>
</importFeatures>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

@ -51,10 +51,6 @@
<groupId>io.swagger</groupId> <groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId> <artifactId>swagger-annotations</artifactId>
</dependency> </dependency>
<dependency>
<groupId>io.entgra.device.mgt.core</groupId>
<artifactId>io.entgra.device.mgt.core.apimgt.extension.rest.api</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
@ -146,9 +142,6 @@
<bundleDef> <bundleDef>
io.swagger:swagger-annotations:${swagger.version} io.swagger:swagger-annotations:${swagger.version}
</bundleDef> </bundleDef>
<bundleDef>
io.entgra.device.mgt.core:io.entgra.device.mgt.core.apimgt.extension.rest.api:${io.entgra.device.mgt.core.version}
</bundleDef>
</bundles> </bundles>
<importFeatures> <importFeatures>
<importFeatureDef>org.wso2.carbon.core.server:${carbon.kernel.version}</importFeatureDef> <importFeatureDef>org.wso2.carbon.core.server:${carbon.kernel.version}</importFeatureDef>

@ -38,6 +38,7 @@
<module>io.entgra.device.mgt.core.apimgt.application.extension.feature</module> <module>io.entgra.device.mgt.core.apimgt.application.extension.feature</module>
<module>io.entgra.device.mgt.core.apimgt.keymgt.extension.feature</module> <module>io.entgra.device.mgt.core.apimgt.keymgt.extension.feature</module>
<module>io.entgra.device.mgt.core.apimgt.analytics.extension.feature</module> <module>io.entgra.device.mgt.core.apimgt.analytics.extension.feature</module>
<module>io.entgra.device.mgt.core.apimgt.extension.rest.api.feature</module>
</modules> </modules>
</project> </project>

@ -775,7 +775,7 @@ CREATE TABLE DM_DEVICE_EVENT (
EVENT_SOURCE VARCHAR(100) NOT NULL, EVENT_SOURCE VARCHAR(100) NOT NULL,
EVENT_LOGIC VARCHAR(100) NOT NULL, EVENT_LOGIC VARCHAR(100) NOT NULL,
ACTIONS TEXT DEFAULT NULL, ACTIONS TEXT DEFAULT NULL,
CREATED_TIMESTAMP TIMESTAMP NOT NULL, CREATED_TIMESTAMP DATETIME2(0) NOT NULL,
TENANT_ID INTEGER DEFAULT 0, TENANT_ID INTEGER DEFAULT 0,
PRIMARY KEY (ID) PRIMARY KEY (ID)
); );

Loading…
Cancel
Save