mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge branch 'feature/add-installed-version-to-subscription-details' into 'master'
Add installed version for installation details view See merge request entgra/carbon-device-mgt!842
This commit is contained in:
commit
f0cd2d91a2
@ -29,6 +29,7 @@ public class DeviceSubscriptionData {
|
|||||||
private String actionType;
|
private String actionType;
|
||||||
private String status;
|
private String status;
|
||||||
private Device device;
|
private Device device;
|
||||||
|
private String currentInstalledVersion;
|
||||||
|
|
||||||
public String getAction() {
|
public String getAction() {
|
||||||
return action;
|
return action;
|
||||||
@ -77,4 +78,8 @@ public class DeviceSubscriptionData {
|
|||||||
public void setDevice(Device device) {
|
public void setDevice(Device device) {
|
||||||
this.device = device;
|
this.device = device;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCurrentInstalledVersion() { return currentInstalledVersion; }
|
||||||
|
|
||||||
|
public void setCurrentInstalledVersion(String currentInstalledVersion) { this.currentInstalledVersion = currentInstalledVersion; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -175,12 +175,13 @@ public interface SubscriptionManager {
|
|||||||
* @param actionStatus status of the operation.
|
* @param actionStatus status of the operation.
|
||||||
* @param action action related to the device.
|
* @param action action related to the device.
|
||||||
* @param appUUID application release UUID
|
* @param appUUID application release UUID
|
||||||
|
* @param installedVersion installed version
|
||||||
* @return {@link PaginationResult}
|
* @return {@link PaginationResult}
|
||||||
* @throws ApplicationManagementException if offset or limit contains incorrect values, if it couldn't find an
|
* @throws ApplicationManagementException if offset or limit contains incorrect values, if it couldn't find an
|
||||||
* application release for given UUID, if an error occurred while getting device details of subscribed device ids,
|
* application release for given UUID, if an error occurred while getting device details of subscribed device ids,
|
||||||
* if an error occurred while getting subscription details of given application release UUID.
|
* if an error occurred while getting subscription details of given application release UUID.
|
||||||
*/
|
*/
|
||||||
PaginationResult getAppSubscriptionDetails(PaginationRequest request, String appUUID, String actionStatus, String action)
|
PaginationResult getAppSubscriptionDetails(PaginationRequest request, String appUUID, String actionStatus, String action, String installedVersion)
|
||||||
throws ApplicationManagementException;
|
throws ApplicationManagementException;
|
||||||
|
|
||||||
/***
|
/***
|
||||||
|
|||||||
@ -239,4 +239,13 @@ public interface SubscriptionDAO {
|
|||||||
*/
|
*/
|
||||||
List<Integer> getAppSubscribedDevicesForGroups(int appReleaseId, String subtype, int tenantId)
|
List<Integer> getAppSubscribedDevicesForGroups(int appReleaseId, String subtype, int tenantId)
|
||||||
throws ApplicationManagementDAOException;
|
throws ApplicationManagementDAOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is used to get the currently installed version for given app release id
|
||||||
|
* @param appId id of the application
|
||||||
|
* @param deviceIdList id list of devices
|
||||||
|
* @return Map with device id as a key and currently installed version as value
|
||||||
|
* @throws {@link ApplicationManagementDAOException} if connections establishment fails.
|
||||||
|
*/
|
||||||
|
Map<Integer,String> getCurrentInstalledAppVersion(int appId, List<Integer> deviceIdList, String installedVersion) throws ApplicationManagementDAOException;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1311,4 +1311,66 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
|
|||||||
throw new ApplicationManagementDAOException(msg, e);
|
throw new ApplicationManagementDAOException(msg, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Integer,String> getCurrentInstalledAppVersion(int appId, List<Integer> deviceIdList, String installedVersion ) throws ApplicationManagementDAOException {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Request received in DAO Layer to get current installed version of the app for " +
|
||||||
|
"given app release id.");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
|
||||||
|
Map<Integer,String> installedVersionsMap = new HashMap<>();
|
||||||
|
Connection conn = this.getDBConnection();
|
||||||
|
int index = 1;
|
||||||
|
boolean isInstalledVersionAvailable = false;
|
||||||
|
StringJoiner joiner = new StringJoiner(",",
|
||||||
|
" SELECT DM_DEVICE_ID AS DEVICE,VERSION FROM " +
|
||||||
|
" (SELECT AP_APP.ID, VERSION FROM AP_APP_RELEASE AP_APP " +
|
||||||
|
" WHERE ID IN (SELECT ID FROM AP_APP_RELEASE " +
|
||||||
|
" WHERE AP_APP_ID = ?) " +
|
||||||
|
" ) AP_APP_V" +
|
||||||
|
" INNER JOIN " +
|
||||||
|
" (SELECT AP_APP_RELEASE_ID, DM_DEVICE_ID FROM AP_DEVICE_SUBSCRIPTION AP_DEV_1 " +
|
||||||
|
" INNER JOIN (" +
|
||||||
|
" SELECT MAX(ID) AS ID FROM AP_DEVICE_SUBSCRIPTION " +
|
||||||
|
" WHERE STATUS = 'COMPLETED' AND DM_DEVICE_ID IN (",
|
||||||
|
") GROUP BY DM_DEVICE_ID " +
|
||||||
|
") AP_DEV_2 " +
|
||||||
|
"ON AP_DEV_2.ID = AP_DEV_1.ID ) AP_APP_R " +
|
||||||
|
"ON AP_APP_R.AP_APP_RELEASE_ID = AP_APP_V.ID");
|
||||||
|
deviceIdList.stream().map(ignored -> "?").forEach(joiner::add);
|
||||||
|
String query = joiner.toString();
|
||||||
|
if(installedVersion != null && !installedVersion.isEmpty()){
|
||||||
|
query += " WHERE VERSION = ? ";
|
||||||
|
isInstalledVersionAvailable = true;
|
||||||
|
}
|
||||||
|
try (PreparedStatement ps = conn.prepareStatement(query)) {
|
||||||
|
ps.setInt(index++, appId);
|
||||||
|
for (int deviceId : deviceIdList) {
|
||||||
|
ps.setInt(index++, deviceId);
|
||||||
|
}
|
||||||
|
if(isInstalledVersionAvailable){
|
||||||
|
ps.setString(index++, installedVersion);
|
||||||
|
}
|
||||||
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
|
while (rs.next()) {
|
||||||
|
installedVersionsMap.put(rs.getInt("DEVICE"),rs.getString("VERSION"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return installedVersionsMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
}catch (DBConnectionException e) {
|
||||||
|
String msg = "Error occurred while obtaining the DB connection to get current installed version of the app for " +
|
||||||
|
"given app id.";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new ApplicationManagementDAOException(msg, e);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "SQL Error occurred while getting current installed version of the app for given " +
|
||||||
|
"app id.";
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new ApplicationManagementDAOException(msg, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1361,7 +1361,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PaginationResult getAppSubscriptionDetails(PaginationRequest request, String appUUID, String actionStatus,
|
public PaginationResult getAppSubscriptionDetails(PaginationRequest request, String appUUID, String actionStatus,
|
||||||
String action) throws ApplicationManagementException {
|
String action, String installedVersion) throws ApplicationManagementException {
|
||||||
int limitValue = request.getRowCount();
|
int limitValue = request.getRowCount();
|
||||||
int offsetValue = request.getStartIndex();
|
int offsetValue = request.getStartIndex();
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
|
||||||
@ -1395,6 +1395,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
|
|||||||
}
|
}
|
||||||
List<Integer> deviceIdList = deviceSubscriptionDTOS.stream().map(DeviceSubscriptionDTO::getDeviceId)
|
List<Integer> deviceIdList = deviceSubscriptionDTOS.stream().map(DeviceSubscriptionDTO::getDeviceId)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
Map<Integer,String> currentVersionsMap = subscriptionDAO.getCurrentInstalledAppVersion(applicationDTO.getId(),deviceIdList, installedVersion);
|
||||||
try {
|
try {
|
||||||
//pass the device id list to device manager service method
|
//pass the device id list to device manager service method
|
||||||
PaginationResult paginationResult = deviceManagementProviderService.getAppSubscribedDevices
|
PaginationResult paginationResult = deviceManagementProviderService.getAppSubscribedDevices
|
||||||
@ -1404,7 +1405,15 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
|
|||||||
if (!paginationResult.getData().isEmpty()) {
|
if (!paginationResult.getData().isEmpty()) {
|
||||||
List<Device> devices = (List<Device>) paginationResult.getData();
|
List<Device> devices = (List<Device>) paginationResult.getData();
|
||||||
for (Device device : devices) {
|
for (Device device : devices) {
|
||||||
|
if(installedVersion != null && !installedVersion.isEmpty() && !currentVersionsMap.containsKey(device.getId())){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
DeviceSubscriptionData deviceSubscriptionData = new DeviceSubscriptionData();
|
DeviceSubscriptionData deviceSubscriptionData = new DeviceSubscriptionData();
|
||||||
|
if(currentVersionsMap.containsKey(device.getId())){
|
||||||
|
deviceSubscriptionData.setCurrentInstalledVersion(currentVersionsMap.get(device.getId()));
|
||||||
|
}else{
|
||||||
|
deviceSubscriptionData.setCurrentInstalledVersion("-");
|
||||||
|
}
|
||||||
for (DeviceSubscriptionDTO subscription : deviceSubscriptionDTOS) {
|
for (DeviceSubscriptionDTO subscription : deviceSubscriptionDTOS) {
|
||||||
if (subscription.getDeviceId() == device.getId()) {
|
if (subscription.getDeviceId() == device.getId()) {
|
||||||
deviceSubscriptionData.setDevice(device);
|
deviceSubscriptionData.setDevice(device);
|
||||||
|
|||||||
@ -139,6 +139,10 @@ public interface SubscriptionManagementAdminAPI {
|
|||||||
name = "status",
|
name = "status",
|
||||||
value = "Provide the device status details, such as active or inactive.")
|
value = "Provide the device status details, such as active or inactive.")
|
||||||
@QueryParam("status") List<String> status,
|
@QueryParam("status") List<String> status,
|
||||||
|
@ApiParam(
|
||||||
|
name = "installedVersion",
|
||||||
|
value = "Provide the installed version of the application.")
|
||||||
|
@QueryParam("installedVersion") String installedVersion,
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "uuid",
|
name = "uuid",
|
||||||
value = "uuid of the application release.",
|
value = "uuid of the application release.",
|
||||||
|
|||||||
@ -60,6 +60,7 @@ public class SubscriptionManagementAdminAPIImpl implements SubscriptionManagemen
|
|||||||
@QueryParam("action") String action,
|
@QueryParam("action") String action,
|
||||||
@QueryParam("actionStatus") String actionStatus,
|
@QueryParam("actionStatus") String actionStatus,
|
||||||
@QueryParam("status") List<String> status,
|
@QueryParam("status") List<String> status,
|
||||||
|
@QueryParam("installedVersion") String installedVersion,
|
||||||
@PathParam("uuid") String uuid,
|
@PathParam("uuid") String uuid,
|
||||||
@DefaultValue("0")
|
@DefaultValue("0")
|
||||||
@QueryParam("offset") int offset,
|
@QueryParam("offset") int offset,
|
||||||
@ -97,7 +98,7 @@ public class SubscriptionManagementAdminAPIImpl implements SubscriptionManagemen
|
|||||||
}
|
}
|
||||||
SubscriptionManager subscriptionManager = APIUtil.getSubscriptionManager();
|
SubscriptionManager subscriptionManager = APIUtil.getSubscriptionManager();
|
||||||
PaginationResult subscriptionData = subscriptionManager.getAppSubscriptionDetails
|
PaginationResult subscriptionData = subscriptionManager.getAppSubscriptionDetails
|
||||||
(request, uuid, actionStatus, action);
|
(request, uuid, actionStatus, action, installedVersion);
|
||||||
return Response.status(Response.Status.OK).entity(subscriptionData).build();
|
return Response.status(Response.Status.OK).entity(subscriptionData).build();
|
||||||
} catch (NotFoundException e) {
|
} catch (NotFoundException e) {
|
||||||
String msg = "Application with application release UUID: " + uuid + " is not found";
|
String msg = "Application with application release UUID: " + uuid + " is not found";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user