DAO and Services for APIs to populate the installation details static UI.

appm_improvement
Nipuni Kavindya 6 months ago
parent 918c604d72
commit e5cd6c40ce

@ -75,9 +75,13 @@ public class DeviceSubscriptionData {
this.device = device; this.device = device;
} }
public String getCurrentInstalledVersion() { return currentInstalledVersion; } public String getCurrentInstalledVersion() {
return currentInstalledVersion;
}
public void setCurrentInstalledVersion(String currentInstalledVersion) { this.currentInstalledVersion = currentInstalledVersion; } public void setCurrentInstalledVersion(String currentInstalledVersion) {
this.currentInstalledVersion = currentInstalledVersion;
}
public int getSubId() { public int getSubId() {
return subId; return subId;

@ -0,0 +1,55 @@
/*
* Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package io.entgra.device.mgt.core.application.mgt.common.dto;
public class CategorizedSubscriptionCountsDTO {
private String subscriptionType;
private int subscriptionCount;
private int unsubscriptionCount;
public CategorizedSubscriptionCountsDTO(String subscriptionType, int subscriptionCount, int unsubscriptionCount) {
this.subscriptionType = subscriptionType;
this.subscriptionCount = subscriptionCount;
this.unsubscriptionCount = unsubscriptionCount;
}
public String getSubscriptionType() {
return subscriptionType;
}
public void setSubscriptionType(String subscriptionType) {
this.subscriptionType = subscriptionType;
}
public int getSubscriptionCount() {
return subscriptionCount;
}
public void setSubscriptionCount(int subscriptionCount) {
this.subscriptionCount = subscriptionCount;
}
public int getUnsubscriptionCount() {
return unsubscriptionCount;
}
public void setUnsubscriptionCount(int unsubscriptionCount) {
this.unsubscriptionCount = unsubscriptionCount;
}
}

@ -31,44 +31,94 @@ public class DeviceSubscriptionDTO {
private String actionTriggeredFrom; private String actionTriggeredFrom;
private String status; private String status;
private int deviceId; private int deviceId;
private int appReleaseId;
private String appUuid;
public int getId() { return id; } public int getId() {
return id;
}
public void setId(int id) { this.id = id; } public void setId(int id) {
this.id = id;
}
public String getSubscribedBy() { return subscribedBy; } public String getSubscribedBy() {
return subscribedBy;
}
public void setSubscribedBy(String subscribedBy) { this.subscribedBy = subscribedBy; } public void setSubscribedBy(String subscribedBy) {
this.subscribedBy = subscribedBy;
}
public Timestamp getSubscribedTimestamp() { return subscribedTimestamp; } public Timestamp getSubscribedTimestamp() {
return subscribedTimestamp;
}
public void setSubscribedTimestamp(Timestamp subscribedTimestamp) { public void setSubscribedTimestamp(Timestamp subscribedTimestamp) {
this.subscribedTimestamp = subscribedTimestamp; this.subscribedTimestamp = subscribedTimestamp;
} }
public boolean isUnsubscribed() { return isUnsubscribed; } public boolean isUnsubscribed() {
return isUnsubscribed;
}
public void setUnsubscribed(boolean unsubscribed) { isUnsubscribed = unsubscribed; } public void setUnsubscribed(boolean unsubscribed) {
isUnsubscribed = unsubscribed;
}
public String getUnsubscribedBy() { return unsubscribedBy; } public String getUnsubscribedBy() {
return unsubscribedBy;
}
public void setUnsubscribedBy(String unsubscribedBy) { this.unsubscribedBy = unsubscribedBy; } public void setUnsubscribedBy(String unsubscribedBy) {
this.unsubscribedBy = unsubscribedBy;
}
public Timestamp getUnsubscribedTimestamp() { return unsubscribedTimestamp; } public Timestamp getUnsubscribedTimestamp() {
return unsubscribedTimestamp;
}
public void setUnsubscribedTimestamp(Timestamp unsubscribedTimestamp) { public void setUnsubscribedTimestamp(Timestamp unsubscribedTimestamp) {
this.unsubscribedTimestamp = unsubscribedTimestamp; this.unsubscribedTimestamp = unsubscribedTimestamp;
} }
public String getActionTriggeredFrom() { return actionTriggeredFrom; } public String getActionTriggeredFrom() {
return actionTriggeredFrom;
}
public void setActionTriggeredFrom(String actionTriggeredFrom) {
this.actionTriggeredFrom = actionTriggeredFrom;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public int getDeviceId() {
return deviceId;
}
public void setActionTriggeredFrom(String actionTriggeredFrom) { this.actionTriggeredFrom = actionTriggeredFrom; } public void setDeviceId(int deviceId) {
this.deviceId = deviceId;
}
public String getStatus() { return status; } public int getAppReleaseId() {
return appReleaseId;
}
public void setStatus(String status) { this.status = status; } public void setAppReleaseId(int appReleaseId) {
this.appReleaseId = appReleaseId;
}
public int getDeviceId() { return deviceId; } public String getAppUuid() {
return appUuid;
}
public void setDeviceId(int deviceId) { this.deviceId = deviceId; } public void setAppUuid(String appUuid) {
this.appUuid = appUuid;
}
} }

@ -21,6 +21,7 @@ import io.entgra.device.mgt.core.application.mgt.common.ApplicationInstallRespon
import io.entgra.device.mgt.core.application.mgt.common.CategorizedSubscriptionResult; import io.entgra.device.mgt.core.application.mgt.common.CategorizedSubscriptionResult;
import io.entgra.device.mgt.core.application.mgt.common.ExecutionStatus; import io.entgra.device.mgt.core.application.mgt.common.ExecutionStatus;
import io.entgra.device.mgt.core.application.mgt.common.SubscriptionType; import io.entgra.device.mgt.core.application.mgt.common.SubscriptionType;
import io.entgra.device.mgt.core.application.mgt.common.dto.CategorizedSubscriptionCountsDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.GroupSubscriptionDetailDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.GroupSubscriptionDetailDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.ScheduledSubscriptionDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.ScheduledSubscriptionDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.UserSubscriptionDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.UserSubscriptionDTO;
@ -35,7 +36,6 @@ import io.entgra.device.mgt.core.device.mgt.common.app.mgt.App;
import io.entgra.device.mgt.core.device.mgt.common.operation.mgt.Activity; import io.entgra.device.mgt.core.device.mgt.common.operation.mgt.Activity;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Properties; import java.util.Properties;
/** /**
@ -264,4 +264,15 @@ public interface SubscriptionManager {
List<DeviceOperationDTO> getDeviceSubscriptionsOperationsByUUID(String uuid) List<DeviceOperationDTO> getDeviceSubscriptionsOperationsByUUID(String uuid)
throws ApplicationManagementException; throws ApplicationManagementException;
/**
* This method is responsible for retrieving device counts details related to the given UUID.
*
* @param uuid the UUID of the application release.
* @return {@link List<CategorizedSubscriptionCountsDTO>} which contains counts of subscriptions
and unsubscription for each subscription type.
* @throws SubscriptionManagementException if there is an error while fetching the details.
*/
List<CategorizedSubscriptionCountsDTO> getSubscriptionCountsByUUID(String uuid)
throws ApplicationManagementException;
} }

@ -374,4 +374,114 @@ public interface SubscriptionDAO {
*/ */
List<DeviceSubscriptionDTO> getDeviceSubscriptionsDetails(int appReleaseId, int tenantId) List<DeviceSubscriptionDTO> getDeviceSubscriptionsDetails(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException; throws ApplicationManagementDAOException;
/**
* This method is used to get the counts of all subscription types related to a UUID.
*
* @param appReleaseId the appReleaseId of the application release.
* @param tenantId id of the current tenant.
* @return {@link int} which contains the count of the subscription type
* @throws ApplicationManagementDAOException if connection establishment or SQL execution fails.
*/
int getAllSubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException;
/**
* This method is used to get the counts of all unsubscription types related to a UUID.
*
* @param appReleaseId the UUID of the application release.
* @param tenantId id of the current tenant.
* @return {@link int} which contains the count of the subscription type
* @throws ApplicationManagementDAOException if connection establishment or SQL execution fails.
*/
int getAllUnsubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException;
/**
* This method is used to get the counts of device subscriptions related to a UUID.
*
* @param appReleaseId the UUID of the application release.
* @param tenantId id of the current tenant.
* @return {@link int} which contains the count of the subscription type
* @throws ApplicationManagementDAOException if connection establishment or SQL execution fails.
*/
int getDeviceSubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException;
/**
* This method is used to get the counts of device unsubscription related to a UUID.
*
* @param appReleaseId the UUID of the application release.
* @param tenantId id of the current tenant.
* @return {@link int} which contains the count of the subscription type
* @throws ApplicationManagementDAOException if connection establishment or SQL execution fails.
*/
int getDeviceUnsubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException;
/**
* This method is used to get the counts of group subscriptions related to a UUID.
*
* @param appReleaseId the UUID of the application release.
* @param tenantId id of the current tenant.
* @return {@link int} which contains the count of the subscription type
* @throws ApplicationManagementDAOException if connection establishment or SQL execution fails.
*/
int getGroupSubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException;
/**
* This method is used to get the counts of group unsubscription related to a UUID.
*
* @param appReleaseId the UUID of the application release.
* @param tenantId id of the current tenant.
* @return {@link int} which contains the count of the subscription type
* @throws ApplicationManagementDAOException if connection establishment or SQL execution fails.
*/
int getGroupUnsubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException;
/**
* This method is used to get the counts of role subscriptions related to a UUID.
*
* @param appReleaseId the UUID of the application release.
* @param tenantId id of the current tenant.
* @return {@link int} which contains the count of the subscription type
* @throws ApplicationManagementDAOException if connection establishment or SQL execution fails.
*/
int getRoleSubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException;
/**
* This method is used to get the counts of role unsubscription related to a UUID.
*
* @param appReleaseId the UUID of the application release.
* @param tenantId id of the current tenant.
* @return {@link int} which contains the count of the subscription type
* @throws ApplicationManagementDAOException if connection establishment or SQL execution fails.
*/
int getRoleUnsubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException;
/**
* This method is used to get the counts of user subscriptions related to a UUID.
*
* @param appReleaseId the UUID of the application release.
* @param tenantId id of the current tenant.
* @return {@link int} which contains the count of the subscription type
* @throws ApplicationManagementDAOException if connection establishment or SQL execution fails.
*/
int getUserSubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException;
/**
* This method is used to get the counts of user unsubscription related to a UUID.
*
* @param appReleaseId the UUID of the application release.
* @param tenantId id of the current tenant.
* @return {@link int} which contains the count of the subscription type
* @throws ApplicationManagementDAOException if connection establishment or SQL execution fails.
*/
int getUserUnsubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException;
} }

@ -1892,5 +1892,395 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
} }
} }
@Override
public int getAllSubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Getting all subscriptions count for the application appReleaseId " + appReleaseId
+ " from the database");
}
try {
Connection conn = this.getDBConnection();
String sql = "SELECT COUNT(*) AS count " +
"FROM AP_DEVICE_SUBSCRIPTION " +
"WHERE AP_APP_RELEASE_ID = ? " +
"AND TENANT_ID = ? " +
"AND UNSUBSCRIBED = FALSE";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, appReleaseId);
ps.setInt(2, tenantId);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
return rs.getInt("count");
}
return 0;
}
} catch (SQLException e) {
String msg = "Error occurred while running SQL to get all subscriptions count for application appReleaseId: "
+ appReleaseId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining the DB connection for getting all subscriptions count for appReleaseId: "
+ appReleaseId + ".";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
@Override
public int getAllUnsubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Getting all unsubscription count for the application appReleaseId " + appReleaseId
+ " from the database");
}
try {
Connection conn = this.getDBConnection();
String sql = "SELECT COUNT(*) AS count " +
"FROM AP_DEVICE_SUBSCRIPTION " +
"WHERE AP_APP_RELEASE_ID = ? " +
"AND TENANT_ID = ? " +
"AND UNSUBSCRIBED = TRUE";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, appReleaseId);
ps.setInt(2, tenantId);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
return rs.getInt("count");
}
return 0;
}
} catch (SQLException e) {
String msg = "Error occurred while running SQL to get all unsubscription count for application appReleaseId: "
+ appReleaseId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining the DB connection for getting all unsubscription count for appReleaseId: "
+ appReleaseId + ".";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
@Override
public int getDeviceSubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Getting device subscriptions count for the application appReleaseId " + appReleaseId
+ " from the database");
}
try {
Connection conn = this.getDBConnection();
String sql = "SELECT COUNT(*) AS count " +
"FROM AP_DEVICE_SUBSCRIPTION " +
"WHERE AP_APP_RELEASE_ID = ? " +
"AND TENANT_ID = ? " +
"AND UNSUBSCRIBED = FALSE " +
"AND ACTION_TRIGGERED_FROM = 'DEVICE'";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, appReleaseId);
ps.setInt(2, tenantId);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
return rs.getInt("count");
}
return 0;
}
} catch (SQLException e) {
String msg = "Error occurred while running SQL to get device subscriptions count for application appReleaseId: "
+ appReleaseId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining the DB connection for getting device subscriptions count for appReleaseId: "
+ appReleaseId + ".";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
@Override
public int getDeviceUnsubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Getting device unsubscriptions count for the application appReleaseId " + appReleaseId
+ " from the database");
}
try {
Connection conn = this.getDBConnection();
String sql = "SELECT COUNT(*) AS count " +
"FROM AP_DEVICE_SUBSCRIPTION " +
"WHERE AP_APP_RELEASE_ID = ? " +
"AND TENANT_ID = ? " +
"AND UNSUBSCRIBED = TRUE " +
"AND ACTION_TRIGGERED_FROM = 'DEVICE'";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, appReleaseId);
ps.setInt(2, tenantId);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
return rs.getInt("count");
}
return 0;
}
} catch (SQLException e) {
String msg = "Error occurred while running SQL to get device unsubscription count for application appReleaseId: "
+ appReleaseId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining the DB connection for getting device unsubscription count for appReleaseId: "
+ appReleaseId + ".";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
@Override
public int getGroupSubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Getting group subscriptions count for the application appReleaseId " + appReleaseId
+ " from the database");
}
try {
Connection conn = this.getDBConnection();
String sql = "SELECT COUNT(*) AS count " +
"FROM AP_GROUP_SUBSCRIPTION " +
"WHERE AP_APP_RELEASE_ID = ? " +
"AND TENANT_ID = ? " +
"AND UNSUBSCRIBED = FALSE";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, appReleaseId);
ps.setInt(2, tenantId);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
return rs.getInt("count");
}
return 0;
}
} catch (SQLException e) {
String msg = "Error occurred while running SQL to get group subscriptions count for application appReleaseId: "
+ appReleaseId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining the DB connection for getting group subscriptions count for appReleaseId: "
+ appReleaseId + ".";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
@Override
public int getGroupUnsubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Getting group unsubscriptions count for the application appReleaseId " + appReleaseId
+ " from the database");
}
try {
Connection conn = this.getDBConnection();
String sql = "SELECT COUNT(*) AS count " +
"FROM AP_GROUP_SUBSCRIPTION " +
"WHERE AP_APP_RELEASE_ID = ? " +
"AND TENANT_ID = ? " +
"AND UNSUBSCRIBED = TRUE";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, appReleaseId);
ps.setInt(2, tenantId);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
return rs.getInt("count");
}
return 0;
}
} catch (SQLException e) {
String msg = "Error occurred while running SQL to get group unsubscription count for application appReleaseId: "
+ appReleaseId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining the DB connection for getting group unsubscription count for appReleaseId: "
+ appReleaseId + ".";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
@Override
public int getRoleSubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Getting role subscriptions count for the application appReleaseId " + appReleaseId
+ " from the database");
}
try {
Connection conn = this.getDBConnection();
String sql = "SELECT COUNT(*) AS count " +
"FROM AP_ROLE_SUBSCRIPTION " +
"WHERE AP_APP_RELEASE_ID = ? " +
"AND TENANT_ID = ? " +
"AND UNSUBSCRIBED = FALSE";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, appReleaseId);
ps.setInt(2, tenantId);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
return rs.getInt("count");
}
return 0;
}
} catch (SQLException e) {
String msg = "Error occurred while running SQL to get role subscriptions count for application appReleaseId: "
+ appReleaseId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining the DB connection for getting role subscriptions count for appReleaseId: "
+ appReleaseId + ".";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
@Override
public int getRoleUnsubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Getting role unsubscription count for the application appReleaseId " + appReleaseId
+ " from the database");
}
try {
Connection conn = this.getDBConnection();
String sql = "SELECT COUNT(*) AS count " +
"FROM AP_ROLE_SUBSCRIPTION " +
"WHERE AP_APP_RELEASE_ID = ? " +
"AND TENANT_ID = ? " +
"AND UNSUBSCRIBED = TRUE";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, appReleaseId);
ps.setInt(2, tenantId);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
return rs.getInt("count");
}
return 0;
}
} catch (SQLException e) {
String msg = "Error occurred while running SQL to get role unsubscription count for application appReleaseId: "
+ appReleaseId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining the DB connection for getting role unsubscription count for appReleaseId: "
+ appReleaseId + ".";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
@Override
public int getUserSubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Getting user subscriptions count for the application appReleaseId " + appReleaseId
+ " from the database");
}
try {
Connection conn = this.getDBConnection();
String sql = "SELECT COUNT(*) AS count " +
"FROM AP_USER_SUBSCRIPTION " +
"WHERE AP_APP_RELEASE_ID = ? " +
"AND TENANT_ID = ? " +
"AND UNSUBSCRIBED = FALSE";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, appReleaseId);
ps.setInt(2, tenantId);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
return rs.getInt("count");
}
return 0;
}
} catch (SQLException e) {
String msg = "Error occurred while running SQL to get user subscriptions count for application appReleaseId: "
+ appReleaseId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining the DB connection for getting user subscriptions count for appReleaseId: "
+ appReleaseId + ".";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
@Override
public int getUserUnsubscriptionCount(int appReleaseId, int tenantId)
throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Getting user unsubscription count for the application appReleaseId " + appReleaseId
+ " from the database");
}
try {
Connection conn = this.getDBConnection();
String sql = "SELECT COUNT(*) AS count " +
"FROM AP_USER_SUBSCRIPTION " +
"WHERE AP_APP_RELEASE_ID = ? " +
"AND TENANT_ID = ? " +
"AND UNSUBSCRIBED = TRUE";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, appReleaseId);
ps.setInt(2, tenantId);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
return rs.getInt("count");
}
return 0;
}
} catch (SQLException e) {
String msg = "Error occurred while running SQL to get user unsubscription count for application appReleaseId: "
+ appReleaseId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining the DB connection for getting user unsubscription count for appReleaseId: "
+ appReleaseId + ".";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
} }

@ -24,6 +24,7 @@ import io.entgra.device.mgt.core.application.mgt.common.ApplicationSubscriptionI
import io.entgra.device.mgt.core.application.mgt.common.ApplicationType; import io.entgra.device.mgt.core.application.mgt.common.ApplicationType;
import io.entgra.device.mgt.core.application.mgt.common.CategorizedSubscriptionResult; import io.entgra.device.mgt.core.application.mgt.common.CategorizedSubscriptionResult;
import io.entgra.device.mgt.core.application.mgt.common.DeviceSubscriptionData; import io.entgra.device.mgt.core.application.mgt.common.DeviceSubscriptionData;
import io.entgra.device.mgt.core.application.mgt.common.dto.CategorizedSubscriptionCountsDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.DeviceSubscriptionDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.DeviceSubscriptionDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.GroupSubscriptionDetailDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.GroupSubscriptionDetailDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.UserSubscriptionDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.UserSubscriptionDTO;
@ -42,6 +43,7 @@ import io.entgra.device.mgt.core.application.mgt.common.dto.ApplicationPolicyDTO
import io.entgra.device.mgt.core.application.mgt.common.dto.VppAssetDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.VppAssetDTO;
import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO; import io.entgra.device.mgt.core.application.mgt.common.dto.VppUserDTO;
import io.entgra.device.mgt.core.application.mgt.common.services.VPPApplicationManager; import io.entgra.device.mgt.core.application.mgt.common.services.VPPApplicationManager;
import io.entgra.device.mgt.core.application.mgt.core.dao.ApplicationReleaseDAO;
import io.entgra.device.mgt.core.application.mgt.core.dao.VppApplicationDAO; import io.entgra.device.mgt.core.application.mgt.core.dao.VppApplicationDAO;
import io.entgra.device.mgt.core.application.mgt.core.exception.BadRequestException; import io.entgra.device.mgt.core.application.mgt.core.exception.BadRequestException;
import io.entgra.device.mgt.core.device.mgt.common.PaginationRequest; import io.entgra.device.mgt.core.device.mgt.common.PaginationRequest;
@ -143,12 +145,14 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
private SubscriptionDAO subscriptionDAO; private SubscriptionDAO subscriptionDAO;
private ApplicationDAO applicationDAO; private ApplicationDAO applicationDAO;
private VppApplicationDAO vppApplicationDAO; private VppApplicationDAO vppApplicationDAO;
private ApplicationReleaseDAO applicationReleaseDAO;
private LifecycleStateManager lifecycleStateManager; private LifecycleStateManager lifecycleStateManager;
public SubscriptionManagerImpl() { public SubscriptionManagerImpl() {
this.lifecycleStateManager = DataHolder.getInstance().getLifecycleStateManager(); this.lifecycleStateManager = DataHolder.getInstance().getLifecycleStateManager();
this.subscriptionDAO = ApplicationManagementDAOFactory.getSubscriptionDAO(); this.subscriptionDAO = ApplicationManagementDAOFactory.getSubscriptionDAO();
this.applicationDAO = ApplicationManagementDAOFactory.getApplicationDAO(); this.applicationDAO = ApplicationManagementDAOFactory.getApplicationDAO();
this.applicationReleaseDAO = ApplicationManagementDAOFactory.getApplicationReleaseDAO();
this.vppApplicationDAO = ApplicationManagementDAOFactory.getVppApplicationDAO(); this.vppApplicationDAO = ApplicationManagementDAOFactory.getVppApplicationDAO();
} }
@ -2132,4 +2136,60 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
ConnectionManagerUtil.closeDBConnection(); ConnectionManagerUtil.closeDBConnection();
} }
} }
@Override
public List<CategorizedSubscriptionCountsDTO> getSubscriptionCountsByUUID(String uuid)
throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
if (uuid == null || uuid.isEmpty()) {
throw new IllegalArgumentException("UUID cannot be null or empty.");
}
try {
ConnectionManagerUtil.openDBConnection();
ApplicationReleaseDTO applicationReleaseDTO = this.applicationReleaseDAO.getReleaseByUUID(uuid, tenantId);
if (applicationReleaseDTO == null) {
String msg = "Couldn't find an application release for application release UUID: " + uuid;
log.error(msg);
throw new NotFoundException(msg);
}
int appReleaseId = applicationReleaseDTO.getId();
List<CategorizedSubscriptionCountsDTO> subscriptionCounts = new ArrayList<>();
subscriptionCounts.add(new CategorizedSubscriptionCountsDTO(
"ALL",
subscriptionDAO.getAllSubscriptionCount(appReleaseId, tenantId),
subscriptionDAO.getAllUnsubscriptionCount(appReleaseId, tenantId)));
subscriptionCounts.add(new CategorizedSubscriptionCountsDTO(
"DEVICE",
subscriptionDAO.getDeviceSubscriptionCount(appReleaseId, tenantId),
subscriptionDAO.getDeviceUnsubscriptionCount(appReleaseId, tenantId)));
subscriptionCounts.add(new CategorizedSubscriptionCountsDTO(
"GROUP",
subscriptionDAO.getGroupSubscriptionCount(appReleaseId, tenantId),
subscriptionDAO.getGroupUnsubscriptionCount(appReleaseId, tenantId)));
subscriptionCounts.add(new CategorizedSubscriptionCountsDTO(
"ROLE",
subscriptionDAO.getRoleSubscriptionCount(appReleaseId, tenantId),
subscriptionDAO.getRoleUnsubscriptionCount(appReleaseId, tenantId)));
subscriptionCounts.add(new CategorizedSubscriptionCountsDTO(
"USER",
subscriptionDAO.getUserSubscriptionCount(appReleaseId, tenantId),
subscriptionDAO.getUserUnsubscriptionCount(appReleaseId, tenantId)));
return subscriptionCounts;
} catch (ApplicationManagementDAOException e) {
String msg = "Error occurred while retrieving subscriptions counts for UUID: " + uuid;
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (DBConnectionException e) {
String msg = "Error occurred while retrieving the database connection";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} finally {
ConnectionManagerUtil.closeDBConnection();
}
}
} }

Loading…
Cancel
Save