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,
|
||||
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.device.application.mgt.common.ApplicationInstallResponse;
|
||||
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.ExecutionStatus;
|
||||
import org.wso2.carbon.device.application.mgt.common.SubAction;
|
||||
@ -865,7 +866,6 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
|
||||
throw new ApplicationManagementException(msg, e);
|
||||
}
|
||||
} catch (ApplicationManagementDAOException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
String msg = "Error occurred when get application release data for application" +
|
||||
" release UUID: " + appUUID;
|
||||
log.error(msg, e);
|
||||
@ -881,8 +881,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaginationResult getAppInstalledCategories(int offsetValue, int limitValue,
|
||||
String appUUID, String subType)
|
||||
public PaginationResult getAppInstalledCategories(int offsetValue, int limitValue, String appUUID, String subType)
|
||||
throws ApplicationManagementException {
|
||||
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||
@ -893,28 +892,24 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
|
||||
.getAppWithRelatedRelease(appUUID, tenantId);
|
||||
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)) {
|
||||
SubscriptionList = subscriptionDAO
|
||||
subscriptionList = subscriptionDAO
|
||||
.getAppSubscribedUsers(offsetValue, limitValue, applicationReleaseId, tenantId);
|
||||
} else if (SubscriptionType.ROLE.toString().equalsIgnoreCase(subType)) {
|
||||
SubscriptionList = subscriptionDAO
|
||||
subscriptionList = subscriptionDAO
|
||||
.getAppSubscribedRoles(offsetValue, limitValue, applicationReleaseId, tenantId);
|
||||
} else if (SubscriptionType.GROUP.toString().equalsIgnoreCase(subType)) {
|
||||
SubscriptionList = subscriptionDAO
|
||||
subscriptionList = subscriptionDAO
|
||||
.getAppSubscribedGroups(offsetValue, limitValue, applicationReleaseId, tenantId);
|
||||
}
|
||||
count = SubscriptionList.size();
|
||||
paginationResult.setData(SubscriptionList);
|
||||
int count = subscriptionList.size();
|
||||
paginationResult.setData(subscriptionList);
|
||||
paginationResult.setRecordsFiltered(count);
|
||||
paginationResult.setRecordsTotal(count);
|
||||
|
||||
return paginationResult;
|
||||
|
||||
} catch (ApplicationManagementDAOException e) {
|
||||
ConnectionManagerUtil.rollbackDBTransaction();
|
||||
String msg = "Error occurred when get application release data for application" +
|
||||
" release UUID: " + appUUID;
|
||||
log.error(msg, e);
|
||||
@ -928,4 +923,97 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
|
||||
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_ID = "__TENANT_ID_PROP__";
|
||||
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.
|
||||
|
||||
@ -49,7 +49,7 @@ info = @Info(
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@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")
|
||||
@Api(value = "Store Review Management Admin API")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public interface ReviewManagementStoreAdminAPI {
|
||||
String SCOPE = "scope";
|
||||
|
||||
@DELETE
|
||||
@Path("/{uuid}/{reviewId}")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Produces(MediaType.WILDCARD)
|
||||
@Consumes(MediaType.WILDCARD)
|
||||
@ApiOperation(
|
||||
consumes = 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.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.ReviewManagementException;
|
||||
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.store.api.services.admin.ReviewManagementStoreAdminAPI;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.DELETE;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
/**
|
||||
@ -44,6 +44,8 @@ public class ReviewManagementStoreAdminAPIImpl implements ReviewManagementStoreA
|
||||
@Override
|
||||
@DELETE
|
||||
@Path("/{uuid}/{reviewId}")
|
||||
@Produces(MediaType.WILDCARD)
|
||||
@Consumes(MediaType.WILDCARD)
|
||||
public Response deleteReview(
|
||||
@PathParam("uuid") String uuid,
|
||||
@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:serviceBeans>
|
||||
<ref bean="subscriptionMgtAdminServiceBean"/>
|
||||
<ref bean="reviewMgtAdminServiceBean"/>
|
||||
<ref bean="applicationMgtServiceBean"/>
|
||||
<ref bean="reviewMgtServiceBean"/>
|
||||
@ -55,6 +56,7 @@
|
||||
<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="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="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"/>
|
||||
|
||||
@ -576,8 +576,18 @@ public interface DeviceDAO {
|
||||
* @param limitValue limit value for get paginated request.
|
||||
* @param status status of the devices.
|
||||
* @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,
|
||||
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;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
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 {
|
||||
return DeviceManagementDAOFactory.getConnection();
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
|
||||
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.LogFactory;
|
||||
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 {
|
||||
return DeviceManagementDAOFactory.getConnection();
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
|
||||
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.LogFactory;
|
||||
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 {
|
||||
return DeviceManagementDAOFactory.getConnection();
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
|
||||
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.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.common.Device;
|
||||
@ -650,4 +651,50 @@ public class SQLServerDeviceDAOImpl extends AbstractDeviceDAOImpl {
|
||||
}
|
||||
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 status status of the devices.
|
||||
* @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,
|
||||
List<Integer> devicesIds, String status)
|
||||
throws DeviceManagementException;
|
||||
List<Integer> devicesIds, String status) 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
|
||||
* @param device Device queried using the properties
|
||||
@ -3722,39 +3760,4 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
deviceConfiguration.setDeviceOwner(deviceOwner);
|
||||
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