Merge pull request 'Add DAO Layer for VPP Associate' (#168) from osh.silva/device-mgt-core:vpp-associate into vpp-v2

Reviewed-on: community/device-mgt-core#168
location-fix
Inosh Perara 1 year ago
commit b3a4649b64

@ -46,6 +46,7 @@ public interface VPPApplicationManager {
boolean addAssociation(VppAssetDTO asset, List<VppUserDTO> vppUsers) throws boolean addAssociation(VppAssetDTO asset, List<VppUserDTO> vppUsers) throws
ApplicationManagementException; ApplicationManagementException;
VppAssociationDTO getUserAssociation(String adamId, String emmUsername) throws VppAssociationDTO getAssociation(int assetId, int userId) throws ApplicationManagementException;
ApplicationManagementException;
VppAssociationDTO getUserAssociation(String adamId, String emmUsername) throws ApplicationManagementException;
} }

@ -19,6 +19,7 @@
package io.entgra.device.mgt.core.application.mgt.core.dao; package io.entgra.device.mgt.core.application.mgt.core.dao;
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.VppAssociationDTO;
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.core.exception.ApplicationManagementDAOException; import io.entgra.device.mgt.core.application.mgt.core.exception.ApplicationManagementDAOException;
@ -36,4 +37,10 @@ public interface VppApplicationDAO {
int addAsset(VppAssetDTO vppAssetDTO, int tenantId) throws ApplicationManagementDAOException; int addAsset(VppAssetDTO vppAssetDTO, int tenantId) throws ApplicationManagementDAOException;
VppAssetDTO updateAsset(VppAssetDTO vppAssetDTO, int tenantId) throws ApplicationManagementDAOException; VppAssetDTO updateAsset(VppAssetDTO vppAssetDTO, int tenantId) throws ApplicationManagementDAOException;
VppAssociationDTO getAssociation(int assetId, int userId, int tenantId) throws ApplicationManagementDAOException;
int addAssociation(VppAssociationDTO vppAssociationDTO, int tenantId) throws ApplicationManagementDAOException;
VppAssociationDTO updateAssociation(VppAssociationDTO vppAssociationDTO, int tenantId) throws ApplicationManagementDAOException;
} }

@ -19,6 +19,7 @@
package io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp; package io.entgra.device.mgt.core.application.mgt.core.dao.impl.vpp;
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.VppAssociationDTO;
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.exception.DBConnectionException; import io.entgra.device.mgt.core.application.mgt.common.exception.DBConnectionException;
import io.entgra.device.mgt.core.application.mgt.core.dao.VppApplicationDAO; import io.entgra.device.mgt.core.application.mgt.core.dao.VppApplicationDAO;
@ -352,4 +353,124 @@ public class GenericVppApplicationDAOImpl extends AbstractDAOImpl implements Vp
throw new ApplicationManagementDAOException(msg, e); throw new ApplicationManagementDAOException(msg, e);
} }
} }
@Override
public VppAssociationDTO getAssociation(int assetId, int userId, int tenantId)
throws ApplicationManagementDAOException {
String sql = "SELECT "
+ "ID, "
+ "ASSOCIATION_TYPE, "
+ "CREATED_TIME, "
+ "LAST_UPDATED_TIME, "
+ "PRICING_PARAMS "
+ "FROM AP_VPP_ASSOCIATION "
+ "WHERE ASSET_ID = ? AND USER_ID = ? AND TENANT_ID = ?";
try {
Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, assetId);
stmt.setInt(2, userId);
stmt.setInt(3, tenantId);
try (ResultSet rs = stmt.executeQuery()) {
return DAOUtil.loadAssignment(rs);
}
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining database connection when retrieving assignment data of user with id "+ userId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when processing SQL to retrieve assignment by asset id and user id.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (UnexpectedServerErrorException e) {
String msg = "Found more than one assignment for user id: " + userId + " and asset id: " + assetId;
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
@Override
public int addAssociation(VppAssociationDTO vppAssociationDTO, int tenantId)
throws ApplicationManagementDAOException {
int associationId = -1;
String sql = "INSERT INTO "
+ "AP_VPP_ASSOCIATION("
+ "ASSET_ID, "
+ "USER_ID, "
+ "TENANT_ID, "
+ "ASSOCIATION_TYPE,"
+ "CREATED_TIME,"
+ "LAST_UPDATED_TIME,"
+ "PRICING_PARAMS) "
+ "VALUES (?, ?, ?, ?, ?)";
try {
Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
long currentTime = System.currentTimeMillis();
stmt.setInt(1, vppAssociationDTO.getAssetId());
stmt.setInt(2, vppAssociationDTO.getClientId());
stmt.setInt(3, tenantId);
stmt.setString(4, vppAssociationDTO.getAssociationType());
stmt.setLong(5, currentTime);
stmt.setLong(6, currentTime);
stmt.setString(7, vppAssociationDTO.getPricingParam());
stmt.executeUpdate();
try (ResultSet rs = stmt.getGeneratedKeys()) {
if (rs.next()) {
associationId = rs.getInt(1);
}
}
return associationId;
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining database connection when adding the asset.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when processing SQL to add the asset.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
@Override
public VppAssociationDTO updateAssociation(VppAssociationDTO vppAssociationDTO, int tenantId)
throws ApplicationManagementDAOException {
String sql = "UPDATE "
+ "AP_VPP_ASSOCIATION "
+ "SET "
+ "ASSET_ID = ?,"
+ "USER_ID = ?, "
+ "ASSOCIATION_TYPE = ?, "
+ "LAST_UPDATED_TIME = ?, "
+ "PRICING_PARAMS = ? "
+ "WHERE ID = ? AND TENANT_ID = ?";
try {
Connection conn = this.getDBConnection();
long updatedTime = System.currentTimeMillis();
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, vppAssociationDTO.getAssetId());
stmt.setInt(2, vppAssociationDTO.getClientId());
stmt.setString(3, vppAssociationDTO.getAssociationType());
stmt.setLong(4, updatedTime);
stmt.setString(5, vppAssociationDTO.getPricingParam());
stmt.setInt(6, vppAssociationDTO.getId());
stmt.setLong(7, tenantId);
if (stmt.executeUpdate() == 1) {
return vppAssociationDTO;
}
return null;
}
} catch (DBConnectionException e) {
String msg = "Error occurred while obtaining database connection when updating the vpp user";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when processing SQL to updating the vpp user.";
log.error(msg, e);
throw new ApplicationManagementDAOException(msg, e);
}
}
} }

@ -50,6 +50,7 @@ import io.entgra.device.mgt.core.application.mgt.core.util.ApplicationManagement
import io.entgra.device.mgt.core.application.mgt.core.util.ConnectionManagerUtil; import io.entgra.device.mgt.core.application.mgt.core.util.ConnectionManagerUtil;
import io.entgra.device.mgt.core.application.mgt.core.util.Constants; import io.entgra.device.mgt.core.application.mgt.core.util.Constants;
import io.entgra.device.mgt.core.application.mgt.core.util.VppHttpUtil; import io.entgra.device.mgt.core.application.mgt.core.util.VppHttpUtil;
import io.entgra.device.mgt.core.application.mgt.core.util.APIUtil;
import io.entgra.device.mgt.core.device.mgt.common.exceptions.MetadataManagementException; import io.entgra.device.mgt.core.device.mgt.common.exceptions.MetadataManagementException;
import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.Metadata; import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.Metadata;
import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.MetadataManagementService; import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.MetadataManagementService;
@ -71,6 +72,7 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
private static final String USER_UPDATE = APP_API + "/users/update"; private static final String USER_UPDATE = APP_API + "/users/update";
private static final String USER_GET = APP_API + "/users"; private static final String USER_GET = APP_API + "/users";
private static final String ASSIGNMENTS_POST = APP_API + "/assets/associate"; private static final String ASSIGNMENTS_POST = APP_API + "/assets/associate";
private static final String ASSIGNMENTS_GET = APP_API + "/assignments";
private static final String TOKEN = ""; private static final String TOKEN = "";
private static final String LOOKUP_API = "https://uclient-api.itunes.apple" + private static final String LOOKUP_API = "https://uclient-api.itunes.apple" +
".com/WebObjects/MZStorePlatform.woa/wa/lookup?version=2&id="; ".com/WebObjects/MZStorePlatform.woa/wa/lookup?version=2&id=";
@ -112,12 +114,12 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
Gson gson = new Gson(); Gson gson = new Gson();
String userPayload = gson.toJson(wrapper); String userPayload = gson.toJson(wrapper);
ProxyResponse proxyResponse = callVPPBackend(USER_CREATE, userPayload, TOKEN, Constants.VPP.POST); ProxyResponse proxyResponse = callVPPBackend(USER_CREATE, userPayload, getVppToken(), Constants.VPP.POST);
if ((proxyResponse.getCode() == HttpStatus.SC_OK || proxyResponse.getCode() == if ((proxyResponse.getCode() == HttpStatus.SC_OK || proxyResponse.getCode() ==
HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.EVENT_ID)) { HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.EVENT_ID)) {
// Create user does not return any useful data. Its needed to call the backend again // Create user does not return any useful data. Its needed to call the backend again
ProxyResponse getUserResponse = callVPPBackend(USER_GET + Constants.VPP.CLIENT_USER_ID_PARAM + ProxyResponse getUserResponse = callVPPBackend(USER_GET + Constants.VPP.CLIENT_USER_ID_PARAM +
userDTO.getClientUserId(), userPayload, TOKEN, Constants.VPP.GET); userDTO.getClientUserId(), userPayload, getVppToken(), Constants.VPP.GET);
if ((getUserResponse.getCode() == HttpStatus.SC_OK || getUserResponse.getCode() == if ((getUserResponse.getCode() == HttpStatus.SC_OK || getUserResponse.getCode() ==
HttpStatus.SC_CREATED) && getUserResponse.getData().contains(Constants.VPP.TOTAL_PAGES)) { HttpStatus.SC_CREATED) && getUserResponse.getData().contains(Constants.VPP.TOTAL_PAGES)) {
VppItuneUserResponseWrapper vppItuneUserResponseWrapper = gson.fromJson VppItuneUserResponseWrapper vppItuneUserResponseWrapper = gson.fromJson
@ -194,12 +196,13 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
Gson gson = new Gson(); Gson gson = new Gson();
String userPayload = gson.toJson(wrapper); String userPayload = gson.toJson(wrapper);
try { try {
ProxyResponse proxyResponse = callVPPBackend(USER_UPDATE, userPayload, TOKEN, Constants.VPP.POST); ProxyResponse proxyResponse = callVPPBackend(USER_UPDATE, userPayload, getVppToken(), Constants.VPP.POST);
if ((proxyResponse.getCode() == HttpStatus.SC_OK || proxyResponse.getCode() == if ((proxyResponse.getCode() == HttpStatus.SC_OK || proxyResponse.getCode() ==
HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.EVENT_ID)) { HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.EVENT_ID)) {
VppUserDTO currentUserDTO = getUserByDMUsername(userDTO.getDmUsername());
log.error("userDTO " + userDTO.toString()); if (currentUserDTO != null) {
userDTO.setId(currentUserDTO.getId());
}
try { try {
ConnectionManagerUtil.beginDBTransaction(); ConnectionManagerUtil.beginDBTransaction();
if (vppApplicationDAO.updateVppUser(userDTO, tenantId) == null) { if (vppApplicationDAO.updateVppUser(userDTO, tenantId) == null) {
@ -226,6 +229,7 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
ConnectionManagerUtil.closeDBConnection(); ConnectionManagerUtil.closeDBConnection();
} }
} }
} catch (IOException e) { } catch (IOException e) {
String msg = "Error while calling VPP backend to update"; String msg = "Error while calling VPP backend to update";
log.error(msg, e); log.error(msg, e);
@ -237,7 +241,7 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
public void syncUsers(String clientId) throws ApplicationManagementException { public void syncUsers(String clientId) throws ApplicationManagementException {
ProxyResponse proxyResponse = null; ProxyResponse proxyResponse = null;
try { try {
proxyResponse = callVPPBackend(USER_GET, null, TOKEN, Constants proxyResponse = callVPPBackend(USER_GET, null, getVppToken(), Constants
.VPP.GET); .VPP.GET);
if ((proxyResponse.getCode() == HttpStatus.SC_OK || proxyResponse.getCode() == if ((proxyResponse.getCode() == HttpStatus.SC_OK || proxyResponse.getCode() ==
HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.TOTAL_PAGES)) { HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.TOTAL_PAGES)) {
@ -264,7 +268,7 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
if (nextPageIndex > 0) { // Not the first page if (nextPageIndex > 0) { // Not the first page
url += "?pageIndex=" + nextPageIndex; url += "?pageIndex=" + nextPageIndex;
} }
proxyResponse = callVPPBackend(url, null, TOKEN, Constants.VPP.GET); proxyResponse = callVPPBackend(url, null, getVppToken(), Constants.VPP.GET);
if ((proxyResponse.getCode() == HttpStatus.SC_OK || proxyResponse.getCode() == if ((proxyResponse.getCode() == HttpStatus.SC_OK || proxyResponse.getCode() ==
HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.TOTAL_PAGES)) { HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.TOTAL_PAGES)) {
Gson gson = new Gson(); Gson gson = new Gson();
@ -286,10 +290,10 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
VppAssetDTO vppAssetDTOs = getAssetByAppId(application.getId()); VppAssetDTO vppAssetDTOs = getAssetByAppId(application.getId());
if (vppAssetDTOs == null) { if (vppAssetDTOs == null) {
vppAssetDTOs = new VppAssetDTO(); vppAssetDTOs = new VppAssetDTO();
vppAssetDTOs.setAppId(application.getId()); vppAssetDTO.setAppId(application.getId());
try { try {
ConnectionManagerUtil.beginDBTransaction(); ConnectionManagerUtil.beginDBTransaction();
if (vppApplicationDAO.addAsset(vppAssetDTOs, tenantId) != -1) { if (vppApplicationDAO.addAsset(vppAssetDTO, tenantId) != -1) {
ConnectionManagerUtil.commitDBTransaction(); ConnectionManagerUtil.commitDBTransaction();
} }
ConnectionManagerUtil.rollbackDBTransaction(); ConnectionManagerUtil.rollbackDBTransaction();
@ -358,7 +362,7 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
private ItuneAppDTO lookupAsset(String packageName) throws ApplicationManagementException { private ItuneAppDTO lookupAsset(String packageName) throws ApplicationManagementException {
String lookupURL = LOOKUP_API + packageName + LOOKUP_API_PREFIX; String lookupURL = LOOKUP_API + packageName + LOOKUP_API_PREFIX;
try { try {
ProxyResponse proxyResponse = callVPPBackend(lookupURL, null, TOKEN, Constants.VPP.GET); ProxyResponse proxyResponse = callVPPBackend(lookupURL, null, getVppToken(), Constants.VPP.GET);
if ((proxyResponse.getCode() == HttpStatus.SC_OK || proxyResponse.getCode() == if ((proxyResponse.getCode() == HttpStatus.SC_OK || proxyResponse.getCode() ==
HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.GET_APP_DATA_RESPONSE_START)) { HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.GET_APP_DATA_RESPONSE_START)) {
String responseData = proxyResponse.getData(); String responseData = proxyResponse.getData();
@ -414,7 +418,7 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
return null; return null;
} }
@Override
public VppAssetDTO getAssetByAppId(int appId) throws ApplicationManagementException { public VppAssetDTO getAssetByAppId(int appId) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
try { try {
@ -434,40 +438,12 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
} }
@Override @Override
public ProxyResponse callVPPBackend(String url,
String payload,
String accessToken,
String method) throws IOException {
return VppHttpUtil.execute(url, payload, accessToken, method);
}
public String getVppToken() throws ApplicationManagementException {
String token = "";
MetadataManagementService meta = DeviceManagementDataHolder
.getInstance().getMetadataManagementService();
Metadata metadata = null;
try {
metadata = meta.retrieveMetadata("DEP_META_KEY");
if (metadata != null) {
Gson g = new Gson();
DepConfig depConfigs = g.fromJson(metadata.getMetaValue(), DepConfig.class);
token = depConfigs.getAccessToken();
return token;
}
}catch (MetadataManagementException e) {
String msg = "Error when retrieving metadata of vpp feature";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
}
return token;
}
public boolean addAssociation(VppAssetDTO asset, List<VppUserDTO> vppUsers) throws public boolean addAssociation(VppAssetDTO asset, List<VppUserDTO> vppUsers) throws
ApplicationManagementException { ApplicationManagementException {
List<VppAssociationDTO> associations = new ArrayList<>(); // To save to UEM DBs List<VppAssociationDTO> associations = new ArrayList<>(); // To save to UEM DBs
List<String> clientUserIds = new ArrayList<>(); // Need this to send to vpp backend. List<String> clientUserIds = new ArrayList<>(); // Need this to send to vpp backend.
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
if (asset != null) { if (asset != null) {
for (VppUserDTO vppUserDTO : vppUsers) { for (VppUserDTO vppUserDTO : vppUsers) {
VppAssociationDTO associationDTO = VppHttpUtil.getAssociation(vppUserDTO, asset); VppAssociationDTO associationDTO = VppHttpUtil.getAssociation(vppUserDTO, asset);
@ -493,9 +469,77 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
Gson gson = new Gson(); Gson gson = new Gson();
String payload = gson.toJson(vppAssociate); String payload = gson.toJson(vppAssociate);
ProxyResponse proxyResponse = callVPPBackend(ASSIGNMENTS_POST, payload, TOKEN, ProxyResponse proxyResponse = callVPPBackend(ASSIGNMENTS_POST, payload, getVppToken(),
Constants.VPP.POST); Constants.VPP.POST);
if ((proxyResponse.getCode() == HttpStatus.SC_OK || proxyResponse.getCode() ==
HttpStatus.SC_CREATED) && proxyResponse.getData().contains(Constants.VPP.EVENT_ID)) {
// Create assignment does not return any useful data. Its needed to call the backend again
ProxyResponse getAssignmentResponse = callVPPBackend(ASSIGNMENTS_GET, null, getVppToken(), Constants.VPP.GET);
if ((getAssignmentResponse.getCode() == HttpStatus.SC_OK || getAssignmentResponse.getCode() ==
HttpStatus.SC_CREATED) && getAssignmentResponse.getData().contains(Constants.VPP.TOTAL_PAGES)) {
// VppAssociateResponseWrapper vppAssociateResponseWrapper = gson.fromJson
// (getAssignmentResponse.getData(), VppAssociateResponseWrapper.class);
for (VppAssociationDTO association : associations) {
VppAssociationDTO vppAssociation = getAssociation(association.getAssetId(), association.getClientId());
if (vppAssociation == null) {
try {
ConnectionManagerUtil.beginDBTransaction();
if (vppApplicationDAO.addAssociation(association, tenantId) != -1) {
ConnectionManagerUtil.commitDBTransaction();
return true; return true;
}
ConnectionManagerUtil.rollbackDBTransaction();
return false;
} catch (ApplicationManagementDAOException e) {
ConnectionManagerUtil.rollbackDBTransaction();
String msg = "Error occurred while adding the Assignment.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (TransactionManagementException e) {
String msg = "Error occurred while executing database transaction for adding Assignment.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (DBConnectionException e) {
String msg = "Error occurred while retrieving the database connection for adding Assignment.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} finally {
ConnectionManagerUtil.closeDBConnection();
}
} else {
try {
ConnectionManagerUtil.beginDBTransaction();
if (vppApplicationDAO.updateAssociation(association, tenantId) == null) {
ConnectionManagerUtil.rollbackDBTransaction();
String msg = "Unable to update the assignment: " +association.getAssetId();
log.error(msg);
throw new ApplicationManagementException(msg);
}
ConnectionManagerUtil.commitDBTransaction();
return true;
} catch (ApplicationManagementDAOException e) {
ConnectionManagerUtil.rollbackDBTransaction();
String msg = "Error occurred while updating the Asset.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (TransactionManagementException e) {
String msg = "Error occurred while executing database transaction for Asset update.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (DBConnectionException e) {
String msg = "Error occurred while retrieving the database connection for Asset update.";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} finally {
ConnectionManagerUtil.closeDBConnection();
}
}
}
}
}
} catch (IOException e) { } catch (IOException e) {
String msg = "Error while adding associations"; String msg = "Error while adding associations";
@ -510,6 +554,53 @@ public class VppApplicationManagerImpl implements VPPApplicationManager {
} }
@Override @Override
public VppAssociationDTO getAssociation(int assetId, int userId) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
try {
ConnectionManagerUtil.openDBConnection();
return vppApplicationDAO.getAssociation(assetId, userId, tenantId);
} catch (DBConnectionException e) {
String msg = "DB Connection error occurs while getting assignment related to user of id " + userId + ".";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} catch (ApplicationManagementDAOException e) {
String msg = "Error occurred while getting assignment data related to user of id " + userId + ".";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
} finally {
ConnectionManagerUtil.closeDBConnection();
}
}
@Override
public ProxyResponse callVPPBackend(String url,
String payload,
String accessToken,
String method) throws IOException {
return VppHttpUtil.execute(url, payload, accessToken, method);
}
public String getVppToken() throws ApplicationManagementException {
String token = "";
MetadataManagementService meta = APIUtil.getMetadataManager();
Metadata metadata = null;
try {
metadata = meta.retrieveMetadata("DEP_META_KEY");
if (metadata != null) {
Gson g = new Gson();
DepConfig depConfigs = g.fromJson(metadata.getMetaValue(), DepConfig.class);
token = depConfigs.getAccessToken();
return token;
}
}catch (MetadataManagementException e) {
String msg = "Error when retrieving metadata of vpp feature";
log.error(msg, e);
throw new ApplicationManagementException(msg, e);
}
return token;
}
public VppAssociationDTO getUserAssociation(String adamId, String emmUsername) throws ApplicationManagementException { public VppAssociationDTO getUserAssociation(String adamId, String emmUsername) throws ApplicationManagementException {
// Todo: Join the 3 tables and find a matching association // Todo: Join the 3 tables and find a matching association
return null; return null;

@ -26,6 +26,7 @@ import io.entgra.device.mgt.core.application.mgt.core.config.IdentityServiceProv
import io.entgra.device.mgt.core.application.mgt.core.serviceprovider.ISServiceProviderApplicationService; import io.entgra.device.mgt.core.application.mgt.core.serviceprovider.ISServiceProviderApplicationService;
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.application.mgt.core.exception.UnexpectedServerErrorException; import io.entgra.device.mgt.core.application.mgt.core.exception.UnexpectedServerErrorException;
import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.MetadataManagementService;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@ -72,6 +73,7 @@ public class APIUtil {
private static volatile ReviewManager reviewManager; private static volatile ReviewManager reviewManager;
private static volatile AppmDataHandler appmDataHandler; private static volatile AppmDataHandler appmDataHandler;
private static volatile VPPApplicationManager vppApplicationManager; private static volatile VPPApplicationManager vppApplicationManager;
private static volatile MetadataManagementService metadataManagementService;
public static SPApplicationManager getSPApplicationManager() { public static SPApplicationManager getSPApplicationManager() {
if (SPApplicationManager == null) { if (SPApplicationManager == null) {
@ -113,6 +115,24 @@ public class APIUtil {
return applicationManager; return applicationManager;
} }
public static MetadataManagementService getMetadataManager() {
if (metadataManagementService == null) {
synchronized (APIUtil.class) {
if (metadataManagementService == null) {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
metadataManagementService =
(MetadataManagementService) ctx.getOSGiService(MetadataManagementService.class, null);
if (metadataManagementService == null) {
String msg = "MetadataManagement Manager service has not initialized.";
log.error(msg);
throw new IllegalStateException(msg);
}
}
}
}
return metadataManagementService;
}
/** /**
* To get the ApplicationDTO Storage Manager from the osgi context. * To get the ApplicationDTO Storage Manager from the osgi context.
* @return ApplicationStoreManager instance in the current osgi context. * @return ApplicationStoreManager instance in the current osgi context.

@ -49,7 +49,9 @@ import io.entgra.device.mgt.core.application.mgt.core.impl.VppApplicationManager
import io.entgra.device.mgt.core.application.mgt.core.lifecycle.LifecycleStateManager; import io.entgra.device.mgt.core.application.mgt.core.lifecycle.LifecycleStateManager;
import io.entgra.device.mgt.core.device.mgt.common.Base64File; import io.entgra.device.mgt.core.device.mgt.common.Base64File;
import io.entgra.device.mgt.core.device.mgt.common.DeviceManagementConstants; import io.entgra.device.mgt.core.device.mgt.common.DeviceManagementConstants;
import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.MetadataManagementService;
import io.entgra.device.mgt.core.device.mgt.core.common.util.FileUtil; import io.entgra.device.mgt.core.device.mgt.core.common.util.FileUtil;
import io.entgra.device.mgt.core.device.mgt.core.metadata.mgt.MetadataManagementServiceImpl;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@ -208,7 +210,6 @@ public class ApplicationManagementUtil {
// TODO: implement as an extension // TODO: implement as an extension
return new VppApplicationManagerImpl(); return new VppApplicationManagerImpl();
} }
/** /**
* This is useful to delete application artifacts if any error occurred while creating release/application * This is useful to delete application artifacts if any error occurred while creating release/application
* after uploading the artifacts * after uploading the artifacts

@ -33,6 +33,7 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.time.Instant; import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -375,10 +376,16 @@ public class DAOUtil {
vppUserDTO.setDmUsername(rs.getString("DM_USERNAME")); vppUserDTO.setDmUsername(rs.getString("DM_USERNAME"));
} }
if (rs.getLong("CREATED_TIME") != 0) { if (rs.getLong("CREATED_TIME") != 0) {
vppUserDTO.setCreatedTime(new Date(rs.getLong(("CREATED_TIME")) * 1000).toString()); Date date = new Date(rs.getLong("CREATED_TIME"));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = dateFormat.format(date);
vppUserDTO.setCreatedTime(dateString);
} }
if (rs.getLong("LAST_UPDATED_TIME") != 0) { if (rs.getLong("LAST_UPDATED_TIME") != 0) {
vppUserDTO.setLastUpdatedTime(new Date(rs.getLong(("LAST_UPDATED_TIME")) * 1000).toString()); Date date = new Date(rs.getLong("LAST_UPDATED_TIME"));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = dateFormat.format(date);
vppUserDTO.setLastUpdatedTime(dateString);
} }
vppUserDTOS.add(vppUserDTO); vppUserDTOS.add(vppUserDTO);
} }
@ -416,10 +423,16 @@ public class DAOUtil {
vppAssetDTO.setAppId(rs.getInt("APP_ID")); vppAssetDTO.setAppId(rs.getInt("APP_ID"));
vppAssetDTO.setTenantId(rs.getInt("TENANT_ID")); vppAssetDTO.setTenantId(rs.getInt("TENANT_ID"));
if (rs.getLong("CREATED_TIME") != 0) { if (rs.getLong("CREATED_TIME") != 0) {
vppAssetDTO.setCreatedTime(new Date(rs.getLong(("CREATED_TIME")) * 1000).toString()); Date date = new Date(rs.getLong("CREATED_TIME"));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = dateFormat.format(date);
vppAssetDTO.setCreatedTime(dateString);
} }
if (rs.getLong("LAST_UPDATED_TIME") != 0) { if (rs.getLong("LAST_UPDATED_TIME") != 0) {
vppAssetDTO.setLastUpdatedTime(new Date(rs.getLong(("LAST_UPDATED_TIME")) * 1000).toString()); Date date = new Date(rs.getLong("LAST_UPDATED_TIME"));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = dateFormat.format(date);
vppAssetDTO.setLastUpdatedTime(dateString);
} }
vppAssetDTO.setAdamId(rs.getString("ADAM_ID")); vppAssetDTO.setAdamId(rs.getString("ADAM_ID"));
vppAssetDTO.setAssignedCount(rs.getString("ASSIGNED_COUNT")); vppAssetDTO.setAssignedCount(rs.getString("ASSIGNED_COUNT"));
@ -441,6 +454,43 @@ public class DAOUtil {
return vppAssetDTOS; return vppAssetDTOS;
} }
public static VppAssociationDTO loadAssignment(ResultSet rs) throws SQLException, UnexpectedServerErrorException {
List<VppAssociationDTO> vppAssociationDTOS = loadAssignments(rs);
if (vppAssociationDTOS.isEmpty()) {
return null;
}
if (vppAssociationDTOS.size() > 1) {
String msg = "Internal server error. Found more than one asset for given app id.";
log.error(msg);
throw new UnexpectedServerErrorException(msg);
}
return vppAssociationDTOS.get(0);
}
public static List<VppAssociationDTO> loadAssignments (ResultSet rs) throws SQLException {
List<VppAssociationDTO> vppAssociationDTOS = new ArrayList<>();
while (rs.next()) {
VppAssociationDTO vppAssociationDTO = new VppAssociationDTO();
vppAssociationDTO.setId(rs.getInt("ID"));
vppAssociationDTO.setAssociationType(rs.getString("ASSOCIATION_TYPE"));
if (rs.getLong("CREATED_TIME") != 0) {
Date date = new Date(rs.getLong("CREATED_TIME"));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = dateFormat.format(date);
vppAssociationDTO.setCreatedTime(dateString);
}
if (rs.getLong("LAST_UPDATED_TIME") != 0) {
Date date = new Date(rs.getLong("LAST_UPDATED_TIME"));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = dateFormat.format(date);
vppAssociationDTO.setLastUpdatedTime(dateString);
}
vppAssociationDTO.setPricingParam(rs.getString("PRICING_PARAMS"));
vppAssociationDTOS.add(vppAssociationDTO);
}
return vppAssociationDTOS;
}
/** /**
* Cleans up the statement and resultset after executing the query * Cleans up the statement and resultset after executing the query
* *

Loading…
Cancel
Save