Merge branch 'application-mgt-new' into 'application-mgt-new'

Improve SQL queries in APPM

See merge request entgra/carbon-device-mgt!330
merge-requests/332/merge
Inosh Perara 5 years ago
commit d43bfecda9

@ -140,7 +140,7 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc
try (ResultSet rs = stmt.getGeneratedKeys()){
List<Integer> updatedDeviceSubIds = new ArrayList<>();
while (rs.next()) {
updatedDeviceSubIds.add(rs.getInt("ID"));
updatedDeviceSubIds.add(rs.getInt(1));
}
return updatedDeviceSubIds;
}

@ -26,7 +26,9 @@ import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
/**
@ -156,4 +158,113 @@ public class SQLServerSubscriptionDAOImpl extends GenericSubscriptionDAOImpl {
throw new ApplicationManagementDAOException(msg, e);
}
}
@Override
public List<Integer> updateDeviceSubscription(String updateBy, List<Integer> deviceIds,
boolean isUnsubscribed, String actionTriggeredFrom, String installStatus, int releaseId, int tenantId)
throws ApplicationManagementDAOException {
try {
String sql = "UPDATE AP_DEVICE_SUBSCRIPTION SET ";
if (isUnsubscribed) {
sql += "UNSUBSCRIBED = true, UNSUBSCRIBED_BY = ?, UNSUBSCRIBED_TIMESTAMP = ?, ";
} else {
sql += "SUBSCRIBED_BY = ?, SUBSCRIBED_TIMESTAMP = ?, ";
}
sql += "ACTION_TRIGGERED_FROM = ?, " +
"STATUS = ? " +
"WHERE " +
"DM_DEVICE_ID = ? AND " +
"AP_APP_RELEASE_ID = ? AND " +
"TENANT_ID = ?";
Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
Calendar calendar = Calendar.getInstance();
Timestamp timestamp = new Timestamp(calendar.getTime().getTime());
List<Integer> updatedDeviceSubIds = new ArrayList<>();
for (Integer deviceId : deviceIds) {
stmt.setString(1, updateBy);
stmt.setTimestamp(2, timestamp);
stmt.setString(3, actionTriggeredFrom);
stmt.setString(4, installStatus);
stmt.setInt(5, deviceId);
stmt.setInt(6, releaseId);
stmt.setInt(7, tenantId);
stmt.executeUpdate();
try (ResultSet rs = stmt.getGeneratedKeys()) {
if (rs.next()) {
updatedDeviceSubIds.add(rs.getInt(1));
}
}
}
return updatedDeviceSubIds;
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining the DB connection to update device subscriptions of "
+ "application. Updated by: " + updateBy + " and updating action triggered from "
+ actionTriggeredFrom;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred while executing SQL to update the device subscriptions of application. "
+ "Updated by: " + updateBy + " and updating action triggered from " + actionTriggeredFrom;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
@Override
public List<Integer> addDeviceSubscription(String subscribedBy, List<Integer> deviceIds,
String subscribedFrom, String installStatus, int releaseId, int tenantId)
throws ApplicationManagementDAOException {
String sql = "INSERT INTO "
+ "AP_DEVICE_SUBSCRIPTION("
+ "SUBSCRIBED_BY, "
+ "SUBSCRIBED_TIMESTAMP, "
+ "ACTION_TRIGGERED_FROM, "
+ "STATUS, "
+ "DM_DEVICE_ID, "
+ "AP_APP_RELEASE_ID,"
+ "TENANT_ID) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?)";
try {
Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
Calendar calendar = Calendar.getInstance();
Timestamp timestamp = new Timestamp(calendar.getTime().getTime());
List<Integer> deviceSubIds = new ArrayList<>();
for (Integer deviceId : deviceIds) {
stmt.setString(1, subscribedBy);
stmt.setTimestamp(2, timestamp);
stmt.setString(3, subscribedFrom);
stmt.setString(4, installStatus);
stmt.setInt(5, deviceId);
stmt.setInt(6, releaseId);
stmt.setInt(7, tenantId);
if (log.isDebugEnabled()) {
log.debug("Adding a device subscription for device id " + deviceId + " and application "
+ "release which has release id" + releaseId);
}
stmt.executeUpdate();
try (ResultSet rs = stmt.getGeneratedKeys()) {
if (rs.next()) {
deviceSubIds.add(rs.getInt(1));
}
}
}
return deviceSubIds;
}
} catch (DBConnectionException e) {
String msg = "Error occured while obtaining database connection to add device subscription for application "
+ "release which has release Id" + releaseId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occured when processing SQL to add device subscription for application release which"
+ " has release Id " + releaseId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
}

@ -642,6 +642,16 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
}
}
/**
* This method is responsible to add operation on given devices.
*
* @param applicationDTO application.
* @param deviceIdentifierList list of device identifiers.
* @param deviceType device type
* @param action action e.g :- INSTALL, UNINSTALL
* @return {@link Activity}
* @throws ApplicationManagementException if found an invalid device.
*/
private Activity addAppOperationOnDevices(ApplicationDTO applicationDTO,
List<DeviceIdentifier> deviceIdentifierList, String deviceType, String action)
throws ApplicationManagementException {
@ -664,7 +674,6 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
private Operation generateOperationPayloadByDeviceType(String deviceType, Application application, String action)
throws ApplicationManagementException {
try {
//todo rethink and modify the {@link App} usage
if (ApplicationType.CUSTOM.toString().equalsIgnoreCase(application.getType())) {
ProfileOperation operation = new ProfileOperation();
if (SubAction.INSTALL.toString().equalsIgnoreCase(action)) {
@ -692,15 +701,13 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
App app = new App();
MobileAppTypes mobileAppType = MobileAppTypes.valueOf(application.getType());
if (DeviceTypes.ANDROID.toString().equalsIgnoreCase(deviceType)) {
app.setType(mobileAppType);
app.setLocation(application.getApplicationReleases().get(0).getInstallerPath());
app.setIdentifier(application.getPackageName());
app.setName(application.getName());
if (SubAction.INSTALL.toString().equalsIgnoreCase(action)) {
app.setType(mobileAppType);
app.setLocation(application.getApplicationReleases().get(0).getInstallerPath());
app.setIdentifier(application.getPackageName());
app.setName(application.getName());
return MDMAndroidOperationUtil.createInstallAppOperation(app);
} else if (SubAction.UNINSTALL.toString().equalsIgnoreCase(action)) {
app.setType(mobileAppType);
app.setAppIdentifier(application.getPackageName());
return MDMAndroidOperationUtil.createAppUninstallOperation(app);
} else {
String msg = "Invalid Action is found. Action: " + action;
@ -722,7 +729,7 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
return MDMIOSOperationUtil.createInstallAppOperation(app);
} else if (SubAction.UNINSTALL.toString().equalsIgnoreCase(action)) {
app.setType(mobileAppType);
app.setAppIdentifier(application.getPackageName());
app.setIdentifier(application.getPackageName());
return MDMIOSOperationUtil.createAppUninstallOperation(app);
} else {
String msg = "Invalid Action is found. Action: " + action;
@ -817,6 +824,14 @@ public class SubscriptionManagerImpl implements SubscriptionManager {
for (DeviceSubscriptionDTO deviceIds : deviceSubscriptionDTOS) {
deviceIdList.add(deviceIds.getDeviceId());
}
if (deviceIdList.isEmpty()){
PaginationResult paginationResult = new PaginationResult();
paginationResult.setData(deviceIdList);
paginationResult.setRecordsFiltered(0);
paginationResult.setRecordsTotal(0);
return paginationResult;
}
//pass the device id list to device manager service method
try {
PaginationResult deviceDetails = deviceManagementProviderService

@ -59,8 +59,6 @@ public class App {
"tab and you will see the package name under the respective " +
"application..", required = true)
private String packageName;
@ApiModelProperty(name = "appIdentifier", value = "The package name of the application.", required = true)
private String appIdentifier;
private String location;
@ApiModelProperty(name = "properties", value = "List of meta data.", required = true)
private Properties properties;
@ -129,14 +127,6 @@ public class App {
this.packageName = packageName;
}
public String getAppIdentifier() {
return appIdentifier;
}
public void setAppIdentifier(String appIdentifier) {
this.appIdentifier = appIdentifier;
}
public String getLocation() {
return location;
}

@ -3734,12 +3734,12 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
}
PaginationResult paginationResult = new PaginationResult();
int count;
List<Device> SubscribedDeviceDetails;
List<Device> subscribedDeviceDetails;
try {
DeviceManagementDAOFactory.openConnection();
SubscribedDeviceDetails = deviceDAO
subscribedDeviceDetails = deviceDAO
.getSubscribedDevices(offsetValue, limitValue, devicesIds, tenantId, status);
count = SubscribedDeviceDetails.size();
count = subscribedDeviceDetails.size();
} catch (DeviceManagementDAOException e) {
String msg = "Error occurred while retrieving device list for device ids " + devicesIds;
@ -3752,7 +3752,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
} finally {
DeviceManagementDAOFactory.closeConnection();
}
paginationResult.setData(getAllDeviceInfo(SubscribedDeviceDetails));
paginationResult.setData(getAllDeviceInfo(subscribedDeviceDetails));
paginationResult.setRecordsFiltered(count);
paginationResult.setRecordsTotal(count);
return paginationResult;

@ -91,14 +91,14 @@ public class MDMAndroidOperationUtil {
EnterpriseApplication enterpriseApplication =
new EnterpriseApplication();
enterpriseApplication.setType(application.getType().toString());
enterpriseApplication.setAppIdentifier(application.getAppIdentifier());
enterpriseApplication.setAppIdentifier(application.getIdentifier());
operation.setPayLoad(enterpriseApplication.toJSON());
break;
case PUBLIC:
AppStoreApplication appStoreApplication =
new AppStoreApplication();
appStoreApplication.setType(application.getType().toString());
appStoreApplication.setAppIdentifier(application.getAppIdentifier());
appStoreApplication.setAppIdentifier(application.getIdentifier());
operation.setPayLoad(appStoreApplication.toJSON());
break;
case WEBAPP:

@ -25,7 +25,7 @@ CREATE TABLE IF NOT EXISTS AP_APP_RELEASE(
TENANT_ID INTEGER NOT NULL,
UUID VARCHAR(200) NOT NULL,
RELEASE_TYPE VARCHAR(45) NOT NULL,
PACKAGE_NAME VARCHAR(45) NOT NULL,
PACKAGE_NAME VARCHAR(150) NOT NULL,
APP_PRICE DECIMAL(6, 2) NULL DEFAULT NULL,
INSTALLER_LOCATION VARCHAR(100) NOT NULL,
ICON_LOCATION VARCHAR(100) NOT NULL,
@ -107,7 +107,7 @@ CREATE TABLE IF NOT EXISTS AP_DEVICE_SUBSCRIPTION(
TENANT_ID INTEGER NOT NULL,
SUBSCRIBED_BY VARCHAR(100) NOT NULL,
SUBSCRIBED_TIMESTAMP TIMESTAMP NOT NULL,
UNSUBSCRIBED BOOLEAN NULL DEFAULT NULL,
UNSUBSCRIBED BOOLEAN NOT NULL DEFAULT false,
UNSUBSCRIBED_BY VARCHAR(100) NULL DEFAULT NULL,
UNSUBSCRIBED_TIMESTAMP TIMESTAMP NULL DEFAULT NULL,
ACTION_TRIGGERED_FROM VARCHAR(45) NOT NULL,
@ -129,7 +129,7 @@ CREATE TABLE IF NOT EXISTS AP_GROUP_SUBSCRIPTION(
TENANT_ID INTEGER NOT NULL,
SUBSCRIBED_BY VARCHAR(100) NOT NULL,
SUBSCRIBED_TIMESTAMP TIMESTAMP NOT NULL,
UNSUBSCRIBED BOOLEAN NULL DEFAULT NULL,
UNSUBSCRIBED BOOLEAN NOT NULL DEFAULT false,
UNSUBSCRIBED_BY VARCHAR(100) NULL DEFAULT NULL,
UNSUBSCRIBED_TIMESTAMP TIMESTAMP NULL DEFAULT NULL,
GROUP_NAME VARCHAR(100) NOT NULL,
@ -150,7 +150,7 @@ CREATE TABLE IF NOT EXISTS AP_ROLE_SUBSCRIPTION(
ROLE_NAME VARCHAR(100) NOT NULL,
SUBSCRIBED_BY VARCHAR(100) NOT NULL,
SUBSCRIBED_TIMESTAMP TIMESTAMP NOT NULL,
UNSUBSCRIBED BOOLEAN NULL DEFAULT NULL,
UNSUBSCRIBED BOOLEAN NOT NULL DEFAULT false,
UNSUBSCRIBED_BY VARCHAR(100) NULL DEFAULT NULL,
UNSUBSCRIBED_TIMESTAMP TIMESTAMP NULL DEFAULT NULL,
AP_APP_RELEASE_ID INTEGER NOT NULL,
@ -185,7 +185,7 @@ CREATE TABLE IF NOT EXISTS AP_USER_SUBSCRIPTION(
USER_NAME VARCHAR(100) NOT NULL,
SUBSCRIBED_BY VARCHAR(100) NOT NULL,
SUBSCRIBED_TIMESTAMP TIMESTAMP NOT NULL,
UNSUBSCRIBED BOOLEAN NULL DEFAULT NULL,
UNSUBSCRIBED BOOLEAN NOT NULL DEFAULT false,
UNSUBSCRIBED_BY VARCHAR(100) NULL DEFAULT NULL,
UNSUBSCRIBED_TIMESTAMP TIMESTAMP NULL DEFAULT NULL,
AP_APP_RELEASE_ID INTEGER NOT NULL,

@ -25,7 +25,7 @@ CREATE TABLE AP_APP_RELEASE(
TENANT_ID INTEGER NOT NULL,
UUID VARCHAR(200) NOT NULL,
RELEASE_TYPE VARCHAR(45) NOT NULL,
PACKAGE_NAME VARCHAR(45) NOT NULL,
PACKAGE_NAME VARCHAR(150) NOT NULL,
APP_PRICE DECIMAL(6, 2) NULL DEFAULT NULL,
INSTALLER_LOCATION VARCHAR(100) NOT NULL,
ICON_LOCATION VARCHAR(100) NOT NULL,
@ -108,7 +108,7 @@ CREATE TABLE AP_DEVICE_SUBSCRIPTION(
TENANT_ID INTEGER NOT NULL,
SUBSCRIBED_BY VARCHAR(100) NOT NULL,
SUBSCRIBED_TIMESTAMP DATETIME2(0) NOT NULL,
UNSUBSCRIBED BIT NULL DEFAULT NULL,
UNSUBSCRIBED BIT NOT NULL DEFAULT 'false',
UNSUBSCRIBED_BY VARCHAR(100) NULL DEFAULT NULL,
UNSUBSCRIBED_TIMESTAMP DATETIME2(0) NULL DEFAULT NULL,
ACTION_TRIGGERED_FROM VARCHAR(45) NOT NULL,
@ -130,7 +130,7 @@ CREATE TABLE AP_GROUP_SUBSCRIPTION(
TENANT_ID INTEGER NOT NULL,
SUBSCRIBED_BY VARCHAR(100) NOT NULL,
SUBSCRIBED_TIMESTAMP DATETIME2(0) NOT NULL,
UNSUBSCRIBED BIT NULL DEFAULT NULL,
UNSUBSCRIBED BIT NOT NULL DEFAULT 'false',
UNSUBSCRIBED_BY VARCHAR(100) NULL DEFAULT NULL,
UNSUBSCRIBED_TIMESTAMP DATETIME2(0) NULL DEFAULT NULL,
GROUP_NAME VARCHAR(100) NOT NULL,
@ -151,7 +151,7 @@ CREATE TABLE AP_ROLE_SUBSCRIPTION(
ROLE_NAME VARCHAR(100) NOT NULL,
SUBSCRIBED_BY VARCHAR(100) NOT NULL,
SUBSCRIBED_TIMESTAMP DATETIME2(0) NOT NULL,
UNSUBSCRIBED BIT NULL DEFAULT NULL,
UNSUBSCRIBED BIT NOT NULL DEFAULT 'false',
UNSUBSCRIBED_BY VARCHAR(100) NULL DEFAULT NULL,
UNSUBSCRIBED_TIMESTAMP DATETIME2(0) NULL DEFAULT NULL,
AP_APP_RELEASE_ID INTEGER NOT NULL,
@ -186,7 +186,7 @@ CREATE TABLE AP_USER_SUBSCRIPTION(
USER_NAME VARCHAR(100) NOT NULL,
SUBSCRIBED_BY VARCHAR(100) NOT NULL,
SUBSCRIBED_TIMESTAMP DATETIME2(0) NOT NULL,
UNSUBSCRIBED BIT NULL DEFAULT NULL,
UNSUBSCRIBED BIT NOT NULL DEFAULT 'false',
UNSUBSCRIBED_BY VARCHAR(100) NULL DEFAULT NULL,
UNSUBSCRIBED_TIMESTAMP DATETIME2(0) NULL DEFAULT NULL,
AP_APP_RELEASE_ID INTEGER NOT NULL,

@ -25,7 +25,7 @@ CREATE TABLE IF NOT EXISTS AP_APP_RELEASE(
TENANT_ID INTEGER NOT NULL,
UUID VARCHAR(200) NOT NULL,
RELEASE_TYPE VARCHAR(45) NOT NULL,
PACKAGE_NAME VARCHAR(45) NOT NULL,
PACKAGE_NAME VARCHAR(150) NOT NULL,
APP_PRICE DECIMAL(6, 2) NULL DEFAULT NULL,
INSTALLER_LOCATION VARCHAR(100) NOT NULL,
ICON_LOCATION VARCHAR(100) NOT NULL,
@ -107,7 +107,7 @@ CREATE TABLE IF NOT EXISTS AP_DEVICE_SUBSCRIPTION(
TENANT_ID INTEGER NOT NULL,
SUBSCRIBED_BY VARCHAR(100) NOT NULL,
SUBSCRIBED_TIMESTAMP TIMESTAMP NOT NULL,
UNSUBSCRIBED BOOLEAN NULL DEFAULT NULL,
UNSUBSCRIBED BOOLEAN NOT NULL DEFAULT false,
UNSUBSCRIBED_BY VARCHAR(100) NULL DEFAULT NULL,
UNSUBSCRIBED_TIMESTAMP TIMESTAMP NULL DEFAULT NULL,
ACTION_TRIGGERED_FROM VARCHAR(45) NOT NULL,
@ -129,7 +129,7 @@ CREATE TABLE IF NOT EXISTS AP_GROUP_SUBSCRIPTION(
TENANT_ID INTEGER NOT NULL,
SUBSCRIBED_BY VARCHAR(100) NOT NULL,
SUBSCRIBED_TIMESTAMP TIMESTAMP NOT NULL,
UNSUBSCRIBED BOOLEAN NULL DEFAULT NULL,
UNSUBSCRIBED BOOLEAN NOT NULL DEFAULT false,
UNSUBSCRIBED_BY VARCHAR(100) NULL DEFAULT NULL,
UNSUBSCRIBED_TIMESTAMP TIMESTAMP NULL DEFAULT NULL,
GROUP_NAME VARCHAR(100) NOT NULL,
@ -145,19 +145,19 @@ CREATE INDEX fk_AP_GROUP_SUBSCRIPTION_AP_APP_RELEASE1_idx ON AP_GROUP_SUBSCRIPTI
-- Table AP_ROLE_SUBSCRIPTION
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS AP_ROLE_SUBSCRIPTION(
ID INTEGER NOT NULL AUTO_INCREMENT,
TENANT_ID INTEGER NOT NULL,
ROLE_NAME VARCHAR(100) NOT NULL,
SUBSCRIBED_BY VARCHAR(100) NOT NULL,
SUBSCRIBED_TIMESTAMP TIMESTAMP NOT NULL,
UNSUBSCRIBED BOOLEAN NULL DEFAULT NULL,
UNSUBSCRIBED_BY VARCHAR(100) NULL DEFAULT NULL,
UNSUBSCRIBED_TIMESTAMP TIMESTAMP NULL DEFAULT NULL,
AP_APP_RELEASE_ID INTEGER NOT NULL,
PRIMARY KEY (ID),
CONSTRAINT fk_AP_ROLE_SUBSCRIPTION_AP_APP_RELEASE1
FOREIGN KEY (AP_APP_RELEASE_ID)
REFERENCES AP_APP_RELEASE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
ID INTEGER NOT NULL AUTO_INCREMENT,
TENANT_ID INTEGER NOT NULL,
ROLE_NAME VARCHAR(100) NOT NULL,
SUBSCRIBED_BY VARCHAR(100) NOT NULL,
SUBSCRIBED_TIMESTAMP TIMESTAMP NOT NULL,
UNSUBSCRIBED BOOLEAN NOT NULL DEFAULT false,
UNSUBSCRIBED_BY VARCHAR(100) NULL DEFAULT NULL,
UNSUBSCRIBED_TIMESTAMP TIMESTAMP NULL DEFAULT NULL,
AP_APP_RELEASE_ID INTEGER NOT NULL,
PRIMARY KEY (ID),
CONSTRAINT fk_AP_ROLE_SUBSCRIPTION_AP_APP_RELEASE1
FOREIGN KEY (AP_APP_RELEASE_ID)
REFERENCES AP_APP_RELEASE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX fk_AP_ROLE_SUBSCRIPTION_AP_APP_RELEASE1_idx ON AP_ROLE_SUBSCRIPTION (AP_APP_RELEASE_ID ASC);
@ -185,7 +185,7 @@ CREATE TABLE IF NOT EXISTS AP_USER_SUBSCRIPTION(
USER_NAME VARCHAR(100) NOT NULL,
SUBSCRIBED_BY VARCHAR(100) NOT NULL,
SUBSCRIBED_TIMESTAMP TIMESTAMP NOT NULL,
UNSUBSCRIBED BOOLEAN NULL DEFAULT NULL,
UNSUBSCRIBED BOOLEAN NOT NULL DEFAULT false,
UNSUBSCRIBED_BY VARCHAR(100) NULL DEFAULT NULL,
UNSUBSCRIBED_TIMESTAMP TIMESTAMP NULL DEFAULT NULL,
AP_APP_RELEASE_ID INTEGER NOT NULL,

Loading…
Cancel
Save