mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Add new admin API to get app subscription data
This commit is contained in:
parent
36021014af
commit
d4f3754ebc
@ -0,0 +1,78 @@
|
|||||||
|
package org.wso2.carbon.device.application.mgt.common;/* Copyright (c) 2019, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
|
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
|
||||||
|
public class DeviceSubscriptionData {
|
||||||
|
|
||||||
|
private String action;
|
||||||
|
private Timestamp actionTriggeredTimestamp;
|
||||||
|
private String actionTriggeredBy;
|
||||||
|
private String actionType;
|
||||||
|
private String status;
|
||||||
|
private Device device;
|
||||||
|
|
||||||
|
public String getAction() {
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAction(String action) {
|
||||||
|
this.action = action;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Timestamp getActionTriggeredTimestamp() {
|
||||||
|
return actionTriggeredTimestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActionTriggeredTimestamp(Timestamp actionTriggeredTimestamp) {
|
||||||
|
this.actionTriggeredTimestamp = actionTriggeredTimestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getActionTriggeredBy() {
|
||||||
|
return actionTriggeredBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActionTriggeredBy(String actionTriggeredBy) {
|
||||||
|
this.actionTriggeredBy = actionTriggeredBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getActionType() {
|
||||||
|
return actionType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActionType(String actionType) {
|
||||||
|
this.actionType = actionType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(String status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Device getDevice() {
|
||||||
|
return device;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDevice(Device device) {
|
||||||
|
this.device = device;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -108,4 +108,18 @@ public interface SubscriptionManager {
|
|||||||
*/
|
*/
|
||||||
PaginationResult getAppInstalledCategories(int offsetValue, int limitValue, String appUUID,
|
PaginationResult getAppInstalledCategories(int offsetValue, int limitValue, String appUUID,
|
||||||
String subType) throws ApplicationManagementException;
|
String subType) throws ApplicationManagementException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is responsible to provide application subscription data for given application release UUID.
|
||||||
|
*
|
||||||
|
* @param offsetValue offset
|
||||||
|
* @param limitValue limit
|
||||||
|
* @param appUUID application release UUID
|
||||||
|
* @return {@link PaginationResult}
|
||||||
|
* @throws ApplicationManagementException if values are incorrect for offset and limit or couldn't find an
|
||||||
|
* application release for given UUID or error occurred while getting device details of subscribed device ids or
|
||||||
|
* getting subscription details of given application release UUID.
|
||||||
|
*/
|
||||||
|
PaginationResult getAppSubscriptionDetails(int offsetValue, int limitValue, String appUUID)
|
||||||
|
throws ApplicationManagementException;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,6 +30,7 @@ import org.wso2.carbon.apimgt.application.extension.exception.APIManagerExceptio
|
|||||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||||
import org.wso2.carbon.device.application.mgt.common.ApplicationInstallResponse;
|
import org.wso2.carbon.device.application.mgt.common.ApplicationInstallResponse;
|
||||||
import org.wso2.carbon.device.application.mgt.common.ApplicationType;
|
import org.wso2.carbon.device.application.mgt.common.ApplicationType;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.DeviceSubscriptionData;
|
||||||
import org.wso2.carbon.device.application.mgt.common.DeviceTypes;
|
import org.wso2.carbon.device.application.mgt.common.DeviceTypes;
|
||||||
import org.wso2.carbon.device.application.mgt.common.ExecutionStatus;
|
import org.wso2.carbon.device.application.mgt.common.ExecutionStatus;
|
||||||
import org.wso2.carbon.device.application.mgt.common.SubAction;
|
import org.wso2.carbon.device.application.mgt.common.SubAction;
|
||||||
@ -865,7 +866,6 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
|
|||||||
throw new ApplicationManagementException(msg, e);
|
throw new ApplicationManagementException(msg, e);
|
||||||
}
|
}
|
||||||
} catch (ApplicationManagementDAOException e) {
|
} catch (ApplicationManagementDAOException e) {
|
||||||
ConnectionManagerUtil.rollbackDBTransaction();
|
|
||||||
String msg = "Error occurred when get application release data for application" +
|
String msg = "Error occurred when get application release data for application" +
|
||||||
" release UUID: " + appUUID;
|
" release UUID: " + appUUID;
|
||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
@ -881,8 +881,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PaginationResult getAppInstalledCategories(int offsetValue, int limitValue,
|
public PaginationResult getAppInstalledCategories(int offsetValue, int limitValue, String appUUID, String subType)
|
||||||
String appUUID, String subType)
|
|
||||||
throws ApplicationManagementException {
|
throws ApplicationManagementException {
|
||||||
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||||
@ -893,28 +892,24 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
|
|||||||
.getAppWithRelatedRelease(appUUID, tenantId);
|
.getAppWithRelatedRelease(appUUID, tenantId);
|
||||||
int applicationReleaseId = applicationDTO.getApplicationReleaseDTOs().get(0).getId();
|
int applicationReleaseId = applicationDTO.getApplicationReleaseDTOs().get(0).getId();
|
||||||
|
|
||||||
int count = 0;
|
List<String> subscriptionList = new ArrayList<>();
|
||||||
List<String> SubscriptionList = new ArrayList<>();
|
|
||||||
|
|
||||||
if (SubscriptionType.USER.toString().equalsIgnoreCase(subType)) {
|
if (SubscriptionType.USER.toString().equalsIgnoreCase(subType)) {
|
||||||
SubscriptionList = subscriptionDAO
|
subscriptionList = subscriptionDAO
|
||||||
.getAppSubscribedUsers(offsetValue, limitValue, applicationReleaseId, tenantId);
|
.getAppSubscribedUsers(offsetValue, limitValue, applicationReleaseId, tenantId);
|
||||||
} else if (SubscriptionType.ROLE.toString().equalsIgnoreCase(subType)) {
|
} else if (SubscriptionType.ROLE.toString().equalsIgnoreCase(subType)) {
|
||||||
SubscriptionList = subscriptionDAO
|
subscriptionList = subscriptionDAO
|
||||||
.getAppSubscribedRoles(offsetValue, limitValue, applicationReleaseId, tenantId);
|
.getAppSubscribedRoles(offsetValue, limitValue, applicationReleaseId, tenantId);
|
||||||
} else if (SubscriptionType.GROUP.toString().equalsIgnoreCase(subType)) {
|
} else if (SubscriptionType.GROUP.toString().equalsIgnoreCase(subType)) {
|
||||||
SubscriptionList = subscriptionDAO
|
subscriptionList = subscriptionDAO
|
||||||
.getAppSubscribedGroups(offsetValue, limitValue, applicationReleaseId, tenantId);
|
.getAppSubscribedGroups(offsetValue, limitValue, applicationReleaseId, tenantId);
|
||||||
}
|
}
|
||||||
count = SubscriptionList.size();
|
int count = subscriptionList.size();
|
||||||
paginationResult.setData(SubscriptionList);
|
paginationResult.setData(subscriptionList);
|
||||||
paginationResult.setRecordsFiltered(count);
|
paginationResult.setRecordsFiltered(count);
|
||||||
paginationResult.setRecordsTotal(count);
|
paginationResult.setRecordsTotal(count);
|
||||||
|
|
||||||
return paginationResult;
|
return paginationResult;
|
||||||
|
|
||||||
} catch (ApplicationManagementDAOException e) {
|
} catch (ApplicationManagementDAOException e) {
|
||||||
ConnectionManagerUtil.rollbackDBTransaction();
|
|
||||||
String msg = "Error occurred when get application release data for application" +
|
String msg = "Error occurred when get application release data for application" +
|
||||||
" release UUID: " + appUUID;
|
" release UUID: " + appUUID;
|
||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
@ -928,4 +923,97 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
|
|||||||
ConnectionManagerUtil.closeDBConnection();
|
ConnectionManagerUtil.closeDBConnection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PaginationResult getAppSubscriptionDetails(int offsetValue, int limitValue, String appUUID)
|
||||||
|
throws ApplicationManagementException {
|
||||||
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||||
|
DeviceManagementProviderService deviceManagementProviderService = HelperUtil
|
||||||
|
.getDeviceManagementProviderService();
|
||||||
|
if (offsetValue < 0 || limitValue <= 0) {
|
||||||
|
String msg = "Found incompatible values for offset and limit. Hence please check the request and resend. "
|
||||||
|
+ "Offset " + offsetValue + " limit " + limitValue;
|
||||||
|
log.error(msg);
|
||||||
|
throw new BadRequestException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
ConnectionManagerUtil.openDBConnection();
|
||||||
|
ApplicationDTO applicationDTO = this.applicationDAO.getAppWithRelatedRelease(appUUID, tenantId);
|
||||||
|
if (applicationDTO == null) {
|
||||||
|
String msg = "Couldn't found an application with application release which has UUID " + appUUID;
|
||||||
|
log.error(msg);
|
||||||
|
throw new NotFoundException(msg);
|
||||||
|
}
|
||||||
|
int applicationReleaseId = applicationDTO.getApplicationReleaseDTOs().get(0).getId();
|
||||||
|
|
||||||
|
List<DeviceSubscriptionDTO> deviceSubscriptionDTOS = subscriptionDAO
|
||||||
|
.getDeviceSubscriptions(applicationReleaseId, tenantId);
|
||||||
|
if (deviceSubscriptionDTOS.isEmpty()) {
|
||||||
|
String msg = "Couldn't found an subscribed devices for application release id: " + applicationReleaseId;
|
||||||
|
log.info(msg);
|
||||||
|
}
|
||||||
|
List<Integer> deviceIdList = deviceSubscriptionDTOS.stream().map(DeviceSubscriptionDTO::getDeviceId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (deviceIdList.isEmpty()) {
|
||||||
|
PaginationResult paginationResult = new PaginationResult();
|
||||||
|
paginationResult.setData(deviceIdList);
|
||||||
|
paginationResult.setRecordsFiltered(0);
|
||||||
|
paginationResult.setRecordsTotal(0);
|
||||||
|
return paginationResult;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
//pass the device id list to device manager service method
|
||||||
|
PaginationResult paginationResult = deviceManagementProviderService
|
||||||
|
.getAppSubscribedDevices(offsetValue, limitValue, deviceIdList, null);
|
||||||
|
List<DeviceSubscriptionData> deviceSubscriptionDataList = new ArrayList<>();
|
||||||
|
|
||||||
|
if (!paginationResult.getData().isEmpty()) {
|
||||||
|
List<Device> devices = (List<Device>) paginationResult.getData();
|
||||||
|
for (Device device : devices) {
|
||||||
|
DeviceSubscriptionData deviceSubscriptionData = new DeviceSubscriptionData();
|
||||||
|
for (DeviceSubscriptionDTO subscription : deviceSubscriptionDTOS) {
|
||||||
|
if (subscription.getDeviceId() == device.getId()) {
|
||||||
|
deviceSubscriptionData.setDevice(device);
|
||||||
|
if (subscription.isUnsubscribed()) {
|
||||||
|
deviceSubscriptionData.setAction(Constants.UNSUBSCRIBED);
|
||||||
|
deviceSubscriptionData.setActionTriggeredBy(subscription.getUnsubscribedBy());
|
||||||
|
deviceSubscriptionData
|
||||||
|
.setActionTriggeredTimestamp(subscription.getUnsubscribedTimestamp());
|
||||||
|
} else {
|
||||||
|
deviceSubscriptionData.setAction(Constants.SUBSCRIBED);
|
||||||
|
deviceSubscriptionData.setActionTriggeredBy(subscription.getSubscribedBy());
|
||||||
|
deviceSubscriptionData
|
||||||
|
.setActionTriggeredTimestamp(subscription.getSubscribedTimestamp());
|
||||||
|
}
|
||||||
|
deviceSubscriptionData.setActionType(subscription.getActionTriggeredFrom());
|
||||||
|
deviceSubscriptionData.setStatus(subscription.getStatus());
|
||||||
|
deviceSubscriptionDataList.add(deviceSubscriptionData);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
paginationResult.setData(deviceSubscriptionDataList);
|
||||||
|
return paginationResult;
|
||||||
|
} catch (DeviceManagementException e) {
|
||||||
|
String msg = "service error occurred while getting device data from the device management service. "
|
||||||
|
+ "Device ids " + deviceIdList;
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new ApplicationManagementException(msg, e);
|
||||||
|
}
|
||||||
|
} catch (ApplicationManagementDAOException e) {
|
||||||
|
String msg = "Error occurred when getting application release data for application release UUID: "
|
||||||
|
+ appUUID;
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new ApplicationManagementException(msg, e);
|
||||||
|
} catch (DBConnectionException e) {
|
||||||
|
String msg = "DB Connection error occurred while trying to get subscription data of application which has "
|
||||||
|
+ "application release UUID " + appUUID;
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new ApplicationManagementException(msg, e);
|
||||||
|
} finally {
|
||||||
|
ConnectionManagerUtil.closeDBConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -58,6 +58,9 @@ public class Constants {
|
|||||||
public static final String TENANT_DOMAIN = "TENANT_DOMAIN";
|
public static final String TENANT_DOMAIN = "TENANT_DOMAIN";
|
||||||
public static final String TENANT_ID = "__TENANT_ID_PROP__";
|
public static final String TENANT_ID = "__TENANT_ID_PROP__";
|
||||||
public static final String TASK_NAME = "TASK_NAME";
|
public static final String TASK_NAME = "TASK_NAME";
|
||||||
|
public static final String SUBSCRIBED = "SUBSCRIBED";
|
||||||
|
public static final String UNSUBSCRIBED = "UNSUBSCRIBED";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Database types supported by Application Management.
|
* Database types supported by Application Management.
|
||||||
|
|||||||
@ -49,7 +49,7 @@ info = @Info(
|
|||||||
extensions = {
|
extensions = {
|
||||||
@Extension(properties = {
|
@Extension(properties = {
|
||||||
@ExtensionProperty(name = "name", value = "StoreReviewManagementAdminService"),
|
@ExtensionProperty(name = "name", value = "StoreReviewManagementAdminService"),
|
||||||
@ExtensionProperty(name = "context", value = "/api/application-mgt-store/v1.0/admin/review"),
|
@ExtensionProperty(name = "context", value = "/api/application-mgt-store/v1.0/admin/reviews"),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
@ -70,14 +70,13 @@ scopes = {
|
|||||||
|
|
||||||
@Path("/admin/reviews")
|
@Path("/admin/reviews")
|
||||||
@Api(value = "Store Review Management Admin API")
|
@Api(value = "Store Review Management Admin API")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
|
||||||
public interface ReviewManagementStoreAdminAPI {
|
public interface ReviewManagementStoreAdminAPI {
|
||||||
String SCOPE = "scope";
|
String SCOPE = "scope";
|
||||||
|
|
||||||
@DELETE
|
@DELETE
|
||||||
@Path("/{uuid}/{reviewId}")
|
@Path("/{uuid}/{reviewId}")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.WILDCARD)
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.WILDCARD)
|
||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
consumes = MediaType.APPLICATION_JSON,
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
produces = MediaType.APPLICATION_JSON,
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
|||||||
@ -0,0 +1,132 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019, Entgra (pvt) Ltd. (http://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 org.wso2.carbon.device.application.mgt.store.api.services.admin;
|
||||||
|
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import io.swagger.annotations.ApiResponse;
|
||||||
|
import io.swagger.annotations.ApiResponses;
|
||||||
|
import io.swagger.annotations.Extension;
|
||||||
|
import io.swagger.annotations.ExtensionProperty;
|
||||||
|
import io.swagger.annotations.Info;
|
||||||
|
import io.swagger.annotations.SwaggerDefinition;
|
||||||
|
import io.swagger.annotations.Tag;
|
||||||
|
import org.wso2.carbon.apimgt.annotations.api.Scopes;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.ErrorResponse;
|
||||||
|
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import javax.ws.rs.Consumes;
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.POST;
|
||||||
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.PathParam;
|
||||||
|
import javax.ws.rs.Produces;
|
||||||
|
import javax.ws.rs.QueryParam;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API to handle subscription management related admin tasks.
|
||||||
|
*/
|
||||||
|
@SwaggerDefinition(
|
||||||
|
info = @Info(
|
||||||
|
version = "1.0.0",
|
||||||
|
title = "Subscription Management Admin Service",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = "name", value = "SubscriptionManagementAdminService"),
|
||||||
|
@ExtensionProperty(name = "context", value = "/api/application-mgt-store/v1.0/admin/subscription"),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
),
|
||||||
|
tags = {
|
||||||
|
@Tag(name = "subscription_management, device_management", description = "Subscription Management "
|
||||||
|
+ "related Admin APIs")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@Scopes(
|
||||||
|
scopes = {
|
||||||
|
@org.wso2.carbon.apimgt.annotations.api.Scope(
|
||||||
|
name = "View Application Subscriptions",
|
||||||
|
description = "View Application Subscriptions.",
|
||||||
|
key = "perm:app:subscription:view",
|
||||||
|
permissions = {"/app-mgt/store/subscription/view"}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@Path("/admin/subscription")
|
||||||
|
@Api(value = "Subscription Management Admin API")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
public interface SubscriptionManagementAdminAPI {
|
||||||
|
|
||||||
|
String SCOPE = "scope";
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/{uuid}")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@ApiOperation(
|
||||||
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "GET",
|
||||||
|
value = "Get subscription details of specific application.",
|
||||||
|
notes = "This will get the subscription details of specific application",
|
||||||
|
tags = "Subscription Management",
|
||||||
|
extensions = {
|
||||||
|
@Extension(properties = {
|
||||||
|
@ExtensionProperty(name = SCOPE, value = "perm:app:subscription:view")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully retrieved subscription details.",
|
||||||
|
response = List.class,
|
||||||
|
responseContainer = "List"),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n No Application found which has application release of UUID.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n Error occurred while getting data",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
Response getAppInstalledDevices(
|
||||||
|
@ApiParam(
|
||||||
|
name = "uuid",
|
||||||
|
value = "uuid of the application release.",
|
||||||
|
required = true)
|
||||||
|
@PathParam("uuid") String uuid,
|
||||||
|
@ApiParam(
|
||||||
|
name = "offset",
|
||||||
|
value = "The starting pagination index for the complete list of qualified items.",
|
||||||
|
defaultValue = "0")
|
||||||
|
@QueryParam("offset") int offset,
|
||||||
|
@ApiParam(
|
||||||
|
name = "limit",
|
||||||
|
value = "Provide how many device details you require from the starting pagination index/offset.",
|
||||||
|
defaultValue = "5")
|
||||||
|
@QueryParam("limit") int limit
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -18,9 +18,6 @@ package org.wso2.carbon.device.application.mgt.store.api.services.impl.admin;
|
|||||||
|
|
||||||
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.application.mgt.common.PaginationRequest;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.PaginationResult;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.Rating;
|
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||||
import org.wso2.carbon.device.application.mgt.common.exception.ReviewManagementException;
|
import org.wso2.carbon.device.application.mgt.common.exception.ReviewManagementException;
|
||||||
import org.wso2.carbon.device.application.mgt.common.services.ReviewManager;
|
import org.wso2.carbon.device.application.mgt.common.services.ReviewManager;
|
||||||
@ -28,9 +25,12 @@ import org.wso2.carbon.device.application.mgt.core.exception.NotFoundException;
|
|||||||
import org.wso2.carbon.device.application.mgt.core.util.APIUtil;
|
import org.wso2.carbon.device.application.mgt.core.util.APIUtil;
|
||||||
import org.wso2.carbon.device.application.mgt.store.api.services.admin.ReviewManagementStoreAdminAPI;
|
import org.wso2.carbon.device.application.mgt.store.api.services.admin.ReviewManagementStoreAdminAPI;
|
||||||
|
|
||||||
|
import javax.ws.rs.Consumes;
|
||||||
import javax.ws.rs.DELETE;
|
import javax.ws.rs.DELETE;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
import javax.ws.rs.PathParam;
|
import javax.ws.rs.PathParam;
|
||||||
|
import javax.ws.rs.Produces;
|
||||||
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,6 +44,8 @@ public class ReviewManagementStoreAdminAPIImpl implements ReviewManagementStoreA
|
|||||||
@Override
|
@Override
|
||||||
@DELETE
|
@DELETE
|
||||||
@Path("/{uuid}/{reviewId}")
|
@Path("/{uuid}/{reviewId}")
|
||||||
|
@Produces(MediaType.WILDCARD)
|
||||||
|
@Consumes(MediaType.WILDCARD)
|
||||||
public Response deleteReview(
|
public Response deleteReview(
|
||||||
@PathParam("uuid") String uuid,
|
@PathParam("uuid") String uuid,
|
||||||
@PathParam("reviewId") int reviewId) {
|
@PathParam("reviewId") int reviewId) {
|
||||||
|
|||||||
@ -0,0 +1,102 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019, 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 org.wso2.carbon.device.application.mgt.store.api.services.impl.admin;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.ApplicationInstallResponse;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.BasicUserInfo;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.BasicUserInfoList;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.DeviceGroupList;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.DeviceList;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.ErrorResponse;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.RoleList;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.SubAction;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.SubscriptionType;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException;
|
||||||
|
import org.wso2.carbon.device.application.mgt.common.services.SubscriptionManager;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationOperationTaskException;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.exception.BadRequestException;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.exception.ForbiddenException;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.exception.NotFoundException;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.task.ScheduledAppSubscriptionTaskManager;
|
||||||
|
import org.wso2.carbon.device.application.mgt.core.util.APIUtil;
|
||||||
|
import org.wso2.carbon.device.application.mgt.store.api.services.SubscriptionManagementAPI;
|
||||||
|
import org.wso2.carbon.device.application.mgt.store.api.services.admin.SubscriptionManagementAdminAPI;
|
||||||
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
|
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||||
|
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import javax.ws.rs.Consumes;
|
||||||
|
import javax.ws.rs.DefaultValue;
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.POST;
|
||||||
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.PathParam;
|
||||||
|
import javax.ws.rs.Produces;
|
||||||
|
import javax.ws.rs.QueryParam;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of Subscription Management related APIs.
|
||||||
|
*/
|
||||||
|
@Produces({"application/json"})
|
||||||
|
@Path("/admin/subscription")
|
||||||
|
public class SubscriptionManagementAdminAPIImpl implements SubscriptionManagementAdminAPI {
|
||||||
|
|
||||||
|
private static Log log = LogFactory.getLog(SubscriptionManagementAdminAPIImpl.class);
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Consumes("application/json")
|
||||||
|
@Produces("application/json")
|
||||||
|
@Path("/{uuid}")
|
||||||
|
public Response getAppInstalledDevices(
|
||||||
|
@PathParam("uuid") String uuid,
|
||||||
|
@DefaultValue("0")
|
||||||
|
@QueryParam("offset") int offset,
|
||||||
|
@DefaultValue("5")
|
||||||
|
@QueryParam("limit") int limit) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
SubscriptionManager subscriptionManager = APIUtil.getSubscriptionManager();
|
||||||
|
PaginationResult subscriptionData = subscriptionManager
|
||||||
|
.getAppSubscriptionDetails(offset, limit, uuid);
|
||||||
|
return Response.status(Response.Status.OK).entity(subscriptionData).build();
|
||||||
|
} catch (NotFoundException e) {
|
||||||
|
String msg = "Application with application release UUID: " + uuid + " is not found";
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
|
||||||
|
} catch (BadRequestException e) {
|
||||||
|
String msg = "Found invalid payload for getting application which has UUID: " + uuid
|
||||||
|
+ ". Hence verify the payload";
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
|
||||||
|
} catch (ApplicationManagementException e) {
|
||||||
|
String msg = "Error occurred while getting app installed devices which has application release UUID of: "
|
||||||
|
+ uuid;
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
<jaxrs:server id="applicationMgtService" address="/">
|
<jaxrs:server id="applicationMgtService" address="/">
|
||||||
<jaxrs:serviceBeans>
|
<jaxrs:serviceBeans>
|
||||||
|
<ref bean="subscriptionMgtAdminServiceBean"/>
|
||||||
<ref bean="reviewMgtAdminServiceBean"/>
|
<ref bean="reviewMgtAdminServiceBean"/>
|
||||||
<ref bean="applicationMgtServiceBean"/>
|
<ref bean="applicationMgtServiceBean"/>
|
||||||
<ref bean="reviewMgtServiceBean"/>
|
<ref bean="reviewMgtServiceBean"/>
|
||||||
@ -55,6 +56,7 @@
|
|||||||
<bean id="swaggerResource" class="io.swagger.jaxrs.listing.ApiListingResource" />
|
<bean id="swaggerResource" class="io.swagger.jaxrs.listing.ApiListingResource" />
|
||||||
|
|
||||||
<bean id="reviewMgtAdminServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.admin.ReviewManagementStoreAdminAPIImpl" />
|
<bean id="reviewMgtAdminServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.admin.ReviewManagementStoreAdminAPIImpl" />
|
||||||
|
<bean id="subscriptionMgtAdminServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.admin.SubscriptionManagementAdminAPIImpl" />
|
||||||
<bean id="applicationMgtServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.ApplicationManagementAPIImpl"/>
|
<bean id="applicationMgtServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.ApplicationManagementAPIImpl"/>
|
||||||
<bean id="reviewMgtServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.ReviewManagementAPIImpl" />
|
<bean id="reviewMgtServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.ReviewManagementAPIImpl" />
|
||||||
<bean id="subscriptionMgtServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.SubscriptionManagementAPIImpl"/>
|
<bean id="subscriptionMgtServiceBean" class="org.wso2.carbon.device.application.mgt.store.api.services.impl.SubscriptionManagementAPIImpl"/>
|
||||||
|
|||||||
@ -576,8 +576,18 @@ public interface DeviceDAO {
|
|||||||
* @param limitValue limit value for get paginated request.
|
* @param limitValue limit value for get paginated request.
|
||||||
* @param status status of the devices.
|
* @param status status of the devices.
|
||||||
* @return devices - subscribed device details list
|
* @return devices - subscribed device details list
|
||||||
* @throws {@link DeviceManagementDAOException} if connections establishment fails.
|
* @throws DeviceManagementDAOException if connections establishment fails.
|
||||||
*/
|
*/
|
||||||
List<Device> getSubscribedDevices(int offsetValue, int limitValue, List<Integer> deviceIds,
|
List<Device> getSubscribedDevices(int offsetValue, int limitValue, List<Integer> deviceIds,
|
||||||
int tenantId, String status) throws DeviceManagementDAOException;
|
int tenantId, String status) throws DeviceManagementDAOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param deviceIds device ids of the subscribed devices.
|
||||||
|
* @param tenantId tenant id
|
||||||
|
* @param status current status of the device. (e.g ACTIVE, REMOVED, etc)
|
||||||
|
* @return number of subscribed device count.
|
||||||
|
* @throws DeviceManagementDAOException if error occurred while processing the SQL statement.
|
||||||
|
*/
|
||||||
|
int getSubscribedDeviceCount(List<Integer> deviceIds, int tenantId, String status)
|
||||||
|
throws DeviceManagementDAOException;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
package org.wso2.carbon.device.mgt.core.dao.impl.device;
|
package org.wso2.carbon.device.mgt.core.dao.impl.device;
|
||||||
|
|
||||||
|
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;
|
||||||
import org.wso2.carbon.device.mgt.common.Device;
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
@ -645,6 +646,52 @@ public class GenericDeviceDAOImpl extends AbstractDeviceDAOImpl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSubscribedDeviceCount(List<Integer> deviceIds, int tenantId, String status)
|
||||||
|
throws DeviceManagementDAOException {
|
||||||
|
try {
|
||||||
|
Connection conn = this.getConnection();
|
||||||
|
int index = 1;
|
||||||
|
StringJoiner joiner = new StringJoiner(",",
|
||||||
|
"SELECT " +
|
||||||
|
"COUNT(e.DEVICE_ID) AS DEVICE_ID "+
|
||||||
|
"FROM DM_ENROLMENT AS e, DM_DEVICE AS f "+
|
||||||
|
"WHERE " +
|
||||||
|
"e.DEVICE_ID=f.ID AND " +
|
||||||
|
"e.DEVICE_ID IN (", ") AND e.TENANT_ID = ?");
|
||||||
|
|
||||||
|
deviceIds.stream().map(ignored -> "?").forEach(joiner::add);
|
||||||
|
String query = joiner.toString();
|
||||||
|
|
||||||
|
if (!StringUtils.isBlank(status)) {
|
||||||
|
query = query + " AND e.STATUS = ?";
|
||||||
|
}
|
||||||
|
|
||||||
|
try (PreparedStatement ps = conn.prepareStatement(query)) {
|
||||||
|
for (Integer deviceId : deviceIds) {
|
||||||
|
ps.setObject(index++, deviceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
ps.setInt(index++, tenantId);
|
||||||
|
if (!StringUtils.isBlank(status)) {
|
||||||
|
ps.setString(index, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
|
if (rs.next()) {
|
||||||
|
return rs.getInt("DEVICE_ID");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred while retrieving information of all registered devices " +
|
||||||
|
"according to device ids and the limit area.";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new DeviceManagementDAOException(msg, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Connection getConnection() throws SQLException {
|
private Connection getConnection() throws SQLException {
|
||||||
return DeviceManagementDAOFactory.getConnection();
|
return DeviceManagementDAOFactory.getConnection();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
package org.wso2.carbon.device.mgt.core.dao.impl.device;
|
package org.wso2.carbon.device.mgt.core.dao.impl.device;
|
||||||
|
|
||||||
|
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;
|
||||||
import org.wso2.carbon.device.mgt.common.Device;
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
@ -648,6 +649,52 @@ public class OracleDeviceDAOImpl extends AbstractDeviceDAOImpl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSubscribedDeviceCount(List<Integer> deviceIds, int tenantId, String status)
|
||||||
|
throws DeviceManagementDAOException {
|
||||||
|
try {
|
||||||
|
Connection conn = this.getConnection();
|
||||||
|
int index = 1;
|
||||||
|
StringJoiner joiner = new StringJoiner(",",
|
||||||
|
"SELECT " +
|
||||||
|
"COUNT(e.DEVICE_ID) AS DEVICE_ID "+
|
||||||
|
"FROM DM_ENROLMENT AS e, DM_DEVICE AS f "+
|
||||||
|
"WHERE " +
|
||||||
|
"e.DEVICE_ID=f.ID AND " +
|
||||||
|
"e.DEVICE_ID IN (", ") AND e.TENANT_ID = ?");
|
||||||
|
|
||||||
|
deviceIds.stream().map(ignored -> "?").forEach(joiner::add);
|
||||||
|
String query = joiner.toString();
|
||||||
|
|
||||||
|
if (!StringUtils.isBlank(status)) {
|
||||||
|
query = query + " AND e.STATUS = ?";
|
||||||
|
}
|
||||||
|
|
||||||
|
try (PreparedStatement ps = conn.prepareStatement(query)) {
|
||||||
|
for (Integer deviceId : deviceIds) {
|
||||||
|
ps.setObject(index++, deviceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
ps.setInt(index++, tenantId);
|
||||||
|
if (!StringUtils.isBlank(status)) {
|
||||||
|
ps.setString(index, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
|
if (rs.next()) {
|
||||||
|
return rs.getInt("DEVICE_ID");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred while retrieving information of all registered devices " +
|
||||||
|
"according to device ids and the limit area.";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new DeviceManagementDAOException(msg, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Connection getConnection() throws SQLException {
|
private Connection getConnection() throws SQLException {
|
||||||
return DeviceManagementDAOFactory.getConnection();
|
return DeviceManagementDAOFactory.getConnection();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
package org.wso2.carbon.device.mgt.core.dao.impl.device;
|
package org.wso2.carbon.device.mgt.core.dao.impl.device;
|
||||||
|
|
||||||
|
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;
|
||||||
import org.wso2.carbon.device.mgt.common.Device;
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
@ -628,6 +629,52 @@ public class PostgreSQLDeviceDAOImpl extends AbstractDeviceDAOImpl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSubscribedDeviceCount(List<Integer> deviceIds, int tenantId, String status)
|
||||||
|
throws DeviceManagementDAOException {
|
||||||
|
try {
|
||||||
|
Connection conn = this.getConnection();
|
||||||
|
int index = 1;
|
||||||
|
StringJoiner joiner = new StringJoiner(",",
|
||||||
|
"SELECT " +
|
||||||
|
"COUNT(e.DEVICE_ID) AS DEVICE_ID "+
|
||||||
|
"FROM DM_ENROLMENT AS e, DM_DEVICE AS f "+
|
||||||
|
"WHERE " +
|
||||||
|
"e.DEVICE_ID=f.ID AND " +
|
||||||
|
"e.DEVICE_ID IN (", ") AND e.TENANT_ID = ?");
|
||||||
|
|
||||||
|
deviceIds.stream().map(ignored -> "?").forEach(joiner::add);
|
||||||
|
String query = joiner.toString();
|
||||||
|
|
||||||
|
if (!StringUtils.isBlank(status)) {
|
||||||
|
query = query + " AND e.STATUS = ?";
|
||||||
|
}
|
||||||
|
|
||||||
|
try (PreparedStatement ps = conn.prepareStatement(query)) {
|
||||||
|
for (Integer deviceId : deviceIds) {
|
||||||
|
ps.setObject(index++, deviceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
ps.setInt(index++, tenantId);
|
||||||
|
if (!StringUtils.isBlank(status)) {
|
||||||
|
ps.setString(index, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
|
if (rs.next()) {
|
||||||
|
return rs.getInt("DEVICE_ID");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred while retrieving information of all registered devices " +
|
||||||
|
"according to device ids and the limit area.";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new DeviceManagementDAOException(msg, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Connection getConnection() throws SQLException {
|
private Connection getConnection() throws SQLException {
|
||||||
return DeviceManagementDAOFactory.getConnection();
|
return DeviceManagementDAOFactory.getConnection();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
package org.wso2.carbon.device.mgt.core.dao.impl.device;
|
package org.wso2.carbon.device.mgt.core.dao.impl.device;
|
||||||
|
|
||||||
|
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;
|
||||||
import org.wso2.carbon.device.mgt.common.Device;
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
@ -650,4 +651,50 @@ public class SQLServerDeviceDAOImpl extends AbstractDeviceDAOImpl {
|
|||||||
}
|
}
|
||||||
return devices;
|
return devices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSubscribedDeviceCount(List<Integer> deviceIds, int tenantId, String status)
|
||||||
|
throws DeviceManagementDAOException {
|
||||||
|
try {
|
||||||
|
Connection conn = this.getConnection();
|
||||||
|
int index = 1;
|
||||||
|
StringJoiner joiner = new StringJoiner(",",
|
||||||
|
"SELECT " +
|
||||||
|
"COUNT(e.DEVICE_ID) AS DEVICE_ID "+
|
||||||
|
"FROM DM_ENROLMENT AS e, DM_DEVICE AS f "+
|
||||||
|
"WHERE " +
|
||||||
|
"e.DEVICE_ID=f.ID AND " +
|
||||||
|
"e.DEVICE_ID IN (", ") AND e.TENANT_ID = ?");
|
||||||
|
|
||||||
|
deviceIds.stream().map(ignored -> "?").forEach(joiner::add);
|
||||||
|
String query = joiner.toString();
|
||||||
|
|
||||||
|
if (!StringUtils.isBlank(status)) {
|
||||||
|
query = query + " AND e.STATUS = ?";
|
||||||
|
}
|
||||||
|
|
||||||
|
try (PreparedStatement ps = conn.prepareStatement(query)) {
|
||||||
|
for (Integer deviceId : deviceIds) {
|
||||||
|
ps.setObject(index++, deviceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
ps.setInt(index++, tenantId);
|
||||||
|
if (!StringUtils.isBlank(status)) {
|
||||||
|
ps.setString(index, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
|
if (rs.next()) {
|
||||||
|
return rs.getInt("DEVICE_ID");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred while retrieving information of all registered devices " +
|
||||||
|
"according to device ids and the limit area.";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new DeviceManagementDAOException(msg, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -802,9 +802,8 @@ public interface DeviceManagementProviderService {
|
|||||||
* @param limitValue limit value for get paginated request.
|
* @param limitValue limit value for get paginated request.
|
||||||
* @param status status of the devices.
|
* @param status status of the devices.
|
||||||
* @return {@link PaginationResult}
|
* @return {@link PaginationResult}
|
||||||
* @throws {@link DeviceManagementException} if any service level or DAO level error occurs.
|
* @throws DeviceManagementException if any service level or DAO level error occurs.
|
||||||
*/
|
*/
|
||||||
PaginationResult getAppSubscribedDevices(int offsetValue, int limitValue,
|
PaginationResult getAppSubscribedDevices(int offsetValue, int limitValue,
|
||||||
List<Integer> devicesIds, String status)
|
List<Integer> devicesIds, String status) throws DeviceManagementException;
|
||||||
throws DeviceManagementException;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3702,6 +3702,44 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PaginationResult getAppSubscribedDevices(int offsetValue, int limitValue, List<Integer> devicesIds,
|
||||||
|
String status) throws DeviceManagementException {
|
||||||
|
|
||||||
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Getting all devices details for device ids: " + devicesIds);
|
||||||
|
}
|
||||||
|
PaginationResult paginationResult = new PaginationResult();
|
||||||
|
int count;
|
||||||
|
List<Device> subscribedDeviceDetails;
|
||||||
|
try {
|
||||||
|
DeviceManagementDAOFactory.openConnection();
|
||||||
|
subscribedDeviceDetails = deviceDAO
|
||||||
|
.getSubscribedDevices(offsetValue, limitValue, devicesIds, tenantId, status);
|
||||||
|
if (subscribedDeviceDetails.isEmpty()){
|
||||||
|
paginationResult.setData(new ArrayList<>());
|
||||||
|
paginationResult.setRecordsFiltered(0);
|
||||||
|
paginationResult.setRecordsTotal(0);
|
||||||
|
}
|
||||||
|
count = deviceDAO.getSubscribedDeviceCount(devicesIds, tenantId, status);
|
||||||
|
paginationResult.setData(getAllDeviceInfo(subscribedDeviceDetails));
|
||||||
|
paginationResult.setRecordsFiltered(count);
|
||||||
|
paginationResult.setRecordsTotal(count);
|
||||||
|
return paginationResult;
|
||||||
|
} catch (DeviceManagementDAOException e) {
|
||||||
|
String msg = "Error occurred while retrieving device list for device ids " + devicesIds;
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new DeviceManagementException(msg, e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Error occurred while opening a connection to the data source";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new DeviceManagementException(msg, e);
|
||||||
|
} finally {
|
||||||
|
DeviceManagementDAOFactory.closeConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrap the device configuration data into DeviceConfiguration bean
|
* Wrap the device configuration data into DeviceConfiguration bean
|
||||||
* @param device Device queried using the properties
|
* @param device Device queried using the properties
|
||||||
@ -3722,39 +3760,4 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|||||||
deviceConfiguration.setDeviceOwner(deviceOwner);
|
deviceConfiguration.setDeviceOwner(deviceOwner);
|
||||||
return deviceConfiguration;
|
return deviceConfiguration;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public PaginationResult getAppSubscribedDevices(int offsetValue, int limitValue,
|
|
||||||
List<Integer> devicesIds, String status)
|
|
||||||
throws DeviceManagementException {
|
|
||||||
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Getting all devices details for device ids: " + devicesIds);
|
|
||||||
}
|
|
||||||
PaginationResult paginationResult = new PaginationResult();
|
|
||||||
int count;
|
|
||||||
List<Device> subscribedDeviceDetails;
|
|
||||||
try {
|
|
||||||
DeviceManagementDAOFactory.openConnection();
|
|
||||||
subscribedDeviceDetails = deviceDAO
|
|
||||||
.getSubscribedDevices(offsetValue, limitValue, devicesIds, tenantId, status);
|
|
||||||
count = subscribedDeviceDetails.size();
|
|
||||||
|
|
||||||
} catch (DeviceManagementDAOException e) {
|
|
||||||
String msg = "Error occurred while retrieving device list for device ids " + devicesIds;
|
|
||||||
log.error(msg, e);
|
|
||||||
throw new DeviceManagementException(msg, e);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
String msg = "Error occurred while opening a connection to the data source";
|
|
||||||
log.error(msg, e);
|
|
||||||
throw new DeviceManagementException(msg, e);
|
|
||||||
} finally {
|
|
||||||
DeviceManagementDAOFactory.closeConnection();
|
|
||||||
}
|
|
||||||
paginationResult.setData(getAllDeviceInfo(subscribedDeviceDetails));
|
|
||||||
paginationResult.setRecordsFiltered(count);
|
|
||||||
paginationResult.setRecordsTotal(count);
|
|
||||||
return paginationResult;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user