@Override public List<Application> getApplicationListForDevice(DeviceIdentifier deviceId) throws ApplicationManagementException { Device device; try { int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); DeviceManagementDAOFactory.openConnection(); device = deviceDAO.getDevice(deviceId, tenantId); if (device == null) { if (log.isDebugEnabled()) { log.debug( "No device is found upon the device identifier '" + deviceId.getId() + "' and type '" + deviceId.getType() + "'. Therefore returning null"); } return null; } return applicationDAO.getInstalledApplications(device.getId()); } catch (DeviceManagementDAOException e) { throw new ApplicationManagementException( "Error occurred while fetching the Application List of '" + deviceId.getType() + "' device carrying the identifier'" + deviceId.getId(), e); } catch (SQLException e) { throw new ApplicationManagementException( "Error occurred while opening a connection to the data source", e); } finally { DeviceManagementDAOFactory.closeConnection(); } }
@Override public void updateApplicationListInstalledInDevice( DeviceIdentifier deviceIdentifier, List<Application> applications) throws ApplicationManagementException { List<Application> installedAppList = getApplicationListForDevice(deviceIdentifier); try { int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); DeviceManagementDAOFactory.beginTransaction(); Device device = deviceDAO.getDevice(deviceIdentifier, tenantId); if (log.isDebugEnabled()) { log.debug("Device:" + device.getId() + ":identifier:" + deviceIdentifier.getId()); } if (log.isDebugEnabled()) { log.debug("num of apps installed:" + installedAppList.size()); } List<Application> appsToAdd = new ArrayList<>(); List<Integer> appIdsToRemove = new ArrayList<>(installedAppList.size()); for (Application installedApp : installedAppList) { if (!applications.contains(installedApp)) { if (log.isDebugEnabled()) { log.debug("Remove app Id:" + installedApp.getId()); } appIdsToRemove.add(installedApp.getId()); } } applicationMappingDAO.removeApplicationMapping(device.getId(), appIdsToRemove, tenantId); Application installedApp; List<Integer> applicationIds = new ArrayList<>(); for (Application application : applications) { if (!installedAppList.contains(application)) { installedApp = applicationDAO.getApplication( application.getApplicationIdentifier(), application.getVersion(), tenantId); if (installedApp == null) { appsToAdd.add(application); } else { applicationIds.add(installedApp.getId()); } } } if (log.isDebugEnabled()) { log.debug("num of apps add:" + appsToAdd.size()); } applicationIds.addAll(applicationDAO.addApplications(appsToAdd, tenantId)); if (log.isDebugEnabled()) { log.debug("num of app Ids:" + applicationIds.size()); } applicationMappingDAO.addApplicationMappings(device.getId(), applicationIds, tenantId); if (log.isDebugEnabled()) { log.debug("num of remove app Ids:" + appIdsToRemove.size()); } DeviceManagementDAOFactory.commitTransaction(); } catch (DeviceManagementDAOException e) { DeviceManagementDAOFactory.rollbackTransaction(); throw new ApplicationManagementException( "Error occurred saving application list to the device", e); } catch (TransactionManagementException e) { throw new ApplicationManagementException("Error occurred while initializing transaction", e); } finally { DeviceManagementDAOFactory.closeConnection(); } }