Filx application getting API issue

feature/appm-store/pbac
lasanthaDLPDS 6 years ago
parent 74be4d8a82
commit cd28edc6a3

@ -61,7 +61,7 @@ public class Filter {
/** /**
* Set as True if required to have only published application release, otherwise set to False * Set as True if required to have only published application release, otherwise set to False
*/ */
private boolean requirePublishedRelease; private String currentAppReleaseState;
public int getLimit() { public int getLimit() {
return limit; return limit;
@ -119,11 +119,11 @@ public class Filter {
this.appCategory = appCategory; this.appCategory = appCategory;
} }
public boolean isRequirePublishedRelease() { public String getCurrentAppReleaseState() {
return requirePublishedRelease; return currentAppReleaseState;
} }
public void setRequirePublishedRelease(boolean requirePublishedRelease) { public void setCurrentAppReleaseState(String currentAppReleaseState) {
this.requirePublishedRelease = requirePublishedRelease; this.currentAppReleaseState = currentAppReleaseState;
} }
} }

@ -26,8 +26,6 @@ public class Tag {
private int id; private int id;
private String tenantId;
private String tagName; private String tagName;
private Application application; private Application application;
@ -40,14 +38,6 @@ public class Tag {
this.id = id; this.id = id;
} }
public String getTenantId() {
return tenantId;
}
public void setTenantId(String tenantId) {
this.tenantId = tenantId;
}
public String getTagName() { public String getTagName() {
return tagName; return tagName;
} }

@ -97,13 +97,10 @@ public interface ApplicationManager {
* *
* @param id id of the Application * @param id id of the Application
* @param state state of the Application * @param state state of the Application
* @param handleConnections Whether it is required to handle DB connections within(true), or if there are
* existing connection(false)
* @return the Application identified by the ID * @return the Application identified by the ID
* @throws ApplicationManagementException Application Management Exception. * @throws ApplicationManagementException Application Management Exception.
*/ */
Application getApplicationById(int id, String state, boolean handleConnections) throws Application getApplicationById(int id, String state) throws ApplicationManagementException;
ApplicationManagementException;
/** /**
* To get an application associated with the release. * To get an application associated with the release.

@ -18,7 +18,6 @@
*/ */
package org.wso2.carbon.device.application.mgt.core.dao; package org.wso2.carbon.device.application.mgt.core.dao;
import org.wso2.carbon.device.application.mgt.common.Application;
import org.wso2.carbon.device.application.mgt.common.ApplicationRelease; import org.wso2.carbon.device.application.mgt.common.ApplicationRelease;
import org.wso2.carbon.device.application.mgt.common.Rating; import org.wso2.carbon.device.application.mgt.common.Rating;
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException; import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;

@ -182,14 +182,6 @@ public class Util {
applicationRelease.setIsSharedWithAllTenants(resultSet.getInt("SHARED")); applicationRelease.setIsSharedWithAllTenants(resultSet.getInt("SHARED"));
applicationRelease.setMetaData(resultSet.getString("APP_META_INFO")); applicationRelease.setMetaData(resultSet.getString("APP_META_INFO"));
applicationRelease.setRating(resultSet.getDouble("RATING")); applicationRelease.setRating(resultSet.getDouble("RATING"));
LifecycleState lifecycleState = new LifecycleState();
lifecycleState.setCurrentState(resultSet.getString("CURRENT_STATE"));
lifecycleState.setPreviousState(resultSet.getString("PREVIOUS_STATE"));
lifecycleState.setUpdatedBy(resultSet.getString("UPDATED_BY"));
lifecycleState.setUpdatedAt(resultSet.getTimestamp("UPDATED_AT"));
applicationRelease.setLifecycleState(lifecycleState);
return applicationRelease; return applicationRelease;
} }

@ -66,7 +66,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
try { try {
conn = this.getDBConnection(); conn = this.getDBConnection();
stmt = conn.prepareStatement("INSERT INTO AP_APP (NAME, TYPE, APP_CATEGORY, SUB_TYPE, RESTRICTED, " stmt = conn.prepareStatement("INSERT INTO AP_APP (NAME, TYPE, APP_CATEGORY, SUB_TYPE, RESTRICTED, "
+ "TENANT_ID, DM_DEVICE_TYPE_ID) VALUES (?, ?, ?, ?, ?, ?, ?)", + "TENANT_ID, DEVICE_TYPE_ID) VALUES (?, ?, ?, ?, ?, ?, ?)",
Statement.RETURN_GENERATED_KEYS); Statement.RETURN_GENERATED_KEYS);
stmt.setString(1, application.getName()); stmt.setString(1, application.getName());
stmt.setString(2, application.getType()); stmt.setString(2, application.getType());
@ -401,16 +401,18 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
try { try {
conn = this.getDBConnection(); conn = this.getDBConnection();
String sql = String sql =
"SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, " + "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY "
"AP_APP.APP_CATEGORY AS APP_CATEGORY, AP_APP.SUB_TYPE AS SUB_TYPE ," + + "AS APP_CATEGORY, AP_APP.SUB_TYPE AS SUB_TYPE, AP_APP.CURRENCY AS CURRENCY, "
"AP_APP.CURRENCY AS CURRENCY, AP_APP.RESTRICTED AS RESTRICTED, " + + "AP_APP.RESTRICTED AS RESTRICTED, AP_APP.DEVICE_TYPE_ID AS DEVICE_TYPE_ID, "
"DM_DEVICE_TYPE_ID AS DEVICE_TYPE_ID " + + "AP_APP_TAG.TAG AS APP_TAG, AP_UNRESTRICTED_ROLE.ROLE AS ROLE FROM "
"FROM AP_APP " + + "((AP_APP LEFT JOIN AP_APP_TAG ON AP_APP.ID = AP_APP_TAG.AP_APP_ID) "
"WHERE AP_APP.ID=? AND AP_APP.TENANT_ID=?;"; + "LEFT JOIN AP_UNRESTRICTED_ROLE ON AP_APP.ID = AP_UNRESTRICTED_ROLE.AP_APP_ID) WHERE "
+ "AP_APP.ID = ? AND AP_APP.TENANT_ID = ? AND AP_APP.STATUS != ?";
stmt = conn.prepareStatement(sql); stmt = conn.prepareStatement(sql);
stmt.setInt(1, applicationId); stmt.setInt(1, applicationId);
stmt.setInt(2, tenantId); stmt.setInt(2, tenantId);
stmt.setString(3, AppLifecycleState.REMOVED.toString());
rs = stmt.executeQuery(); rs = stmt.executeQuery();
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {

@ -112,20 +112,20 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
*/ */
@Override public ApplicationRelease getRelease(String applicationName, String applicationType, String versionName, @Override public ApplicationRelease getRelease(String applicationName, String applicationType, String versionName,
String releaseType, int tenantId) throws ApplicationManagementDAOException { String releaseType, int tenantId) throws ApplicationManagementDAOException {
//todo no usage
Connection connection; Connection connection;
PreparedStatement statement = null; PreparedStatement statement = null;
ResultSet resultSet = null; ResultSet resultSet = null;
String sql = "SELECT AR.ID AS RELEASE_ID, AR.VERSION AS RELEASE_VERSION, AR.UUID AS UUID, AR.RELEASE_TYPE AS " String sql = "SELECT AR.ID AS RELEASE_ID, AR.VERSION AS RELEASE_VERSION, AR.UUID AS UUID, AR.RELEASE_TYPE AS "
+ "RELEASE_TYPE, AR.PACKAGE_NAME AS PACKAGE_NAME, AR.APP_PRICE AS APP_PRICE, AR.STORED_LOCATION AS " + "RELEASE_TYPE, AR.PACKAGE_NAME AS PACKAGE_NAME, AR.APP_PRICE AS APP_PRICE, AR.STORED_LOCATION AS "
+ "STORED_LOCATION, AR.BANNER_LOCATION AS BANNER_LOCATION, ICON_LOCATION, AR.SC_1_LOCATION AS " + + "STORED_LOCATION, AR.BANNER_LOCATION AS BANNER_LOCATION, AR.ICON_LOCATION AS "
"SCREEN_SHOT_1, " + "ICON_LOCATION, AR.SC_1_LOCATION AS SCREEN_SHOT_1, AR.SC_2_LOCATION AS SCREEN_SHOT_2, "
+ "AR.SC_2_LOCATION AS SCREEN_SHOT_2, AR.SC_3_LOCATION AS SCREEN_SHOT_3, AR.APP_HASH_VALUE AS " + "AR.SC_3_LOCATION AS SCREEN_SHOT_3, AR.APP_HASH_VALUE AS HASH_VALUE, AR.SHARED_WITH_ALL_TENANTS "
+ "HASH_VALUE, AR.SHARED_WITH_ALL_TENANTS AS SHARED, AR.APP_META_INFO AS APP_META_INFO , " + "AS SHARED, AR.APP_META_INFO AS APP_META_INFO, AR.RATING AS RATING, AL.CURRENT_STATE, "
+ "AR.RATING AS RATING, AL.CURRENT_STATE, AL.PREVIOUS_STATE, AL.UPDATED_BY, AL.UPDATED_AT FROM " + "AL.PREVIOUS_STATE, AL.UPDATED_BY, AL.UPDATED_AT FROM AP_APP_RELEASE AS AR, AP_APP_LIFECYCLE_STATE "
+ "AP_APP_RELEASE AS AR, AP_APP_LIFECYCLE_STATE AS AL WHERE AR.AP_APP_ID=(SELECT ID FROM AP_APP WHERE " + "AS AL WHERE AR.AP_APP_ID=(SELECT ID FROM AP_APP WHERE NAME=? AND TYPE=? AND TENANT_ID=?) "
+ "NAME=? AND TYPE=? AND TENANT_ID=?) AND AR.VERSION=? AND AR.RELEASE_TYPE=? AND " + "AND AR.VERSION=? AND AR.RELEASE_TYPE=? AND AL.AP_APP_RELEASE_ID=AR.ID "
+ "AL.AP_APP_RELEASE_ID=AR.ID AND AL.TENANT_ID=AR.TENANT_ID ORDER BY AL.UPDATED_AT DESC;"; + "AND AL.TENANT_ID=AR.TENANT_ID ORDER BY AL.UPDATED_AT DESC;";
try { try {
connection = this.getDBConnection(); connection = this.getDBConnection();
@ -215,14 +215,11 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
ResultSet resultSet = null; ResultSet resultSet = null;
List<ApplicationRelease> applicationReleases = new ArrayList<>(); List<ApplicationRelease> applicationReleases = new ArrayList<>();
String sql = "SELECT AR.ID AS RELEASE_ID, AR.VERSION AS RELEASE_VERSION, AR.UUID, AR.RELEASE_TYPE " String sql = "SELECT AR.ID AS RELEASE_ID, AR.VERSION AS RELEASE_VERSION, AR.UUID, AR.RELEASE_TYPE "
+ "AS RELEASE_TYPE, AR.PACKAGE_NAME AS PACKAGE_NAME, AR.APP_PRICE, AR.STORED_LOCATION, ICON_LOCATION" + "AS RELEASE_TYPE, AR.PACKAGE_NAME AS PACKAGE_NAME, AR.APP_PRICE, AR.STORED_LOCATION, AR.ICON_LOCATION, "
+ "AR.BANNER_LOCATION, AR.SC_1_LOCATION AS SCREEN_SHOT_1, AR.SC_2_LOCATION AS SCREEN_SHOT_2, " + "AR.BANNER_LOCATION, AR.SC_1_LOCATION AS SCREEN_SHOT_1, AR.SC_2_LOCATION AS SCREEN_SHOT_2, "
+ "AR.SC_3_LOCATION AS SCREEN_SHOT_3, AR.APP_HASH_VALUE AS HASH_VALUE, " + "AR.SC_3_LOCATION AS SCREEN_SHOT_3, AR.APP_HASH_VALUE AS HASH_VALUE, "
+ "AR.SHARED_WITH_ALL_TENANTS AS SHARED, AR.APP_META_INFO AS APP_META_INFO, " + "AR.SHARED_WITH_ALL_TENANTS AS SHARED, AR.APP_META_INFO AS APP_META_INFO, "
+ "AR.RATING AS RATING AL.CURRENT_STATE AS CURRENT_STATE, AL.PREVIOUS_STATE AS PREVIOUSE_STATE, " + "AR.RATING AS RATING FROM AP_APP_RELEASE AS AR where AR.AP_APP_ID=? AND AR.TENANT_ID = ?;";
+ "AL.UPDATED_BY AS UPDATED_BY, AL.UPDATED_AT AS UPDATED_AT FROM AP_APP_RELEASE "
+ "AS AR, AP_APP_LIFECYCLE_STATE AS AL WHERE AR.AP_APP_ID=? AND AL.AP_APP_RELEASE_ID=AR.ID AND "
+ "AR.TENANT_ID=? AND AL.TENANT_ID=AR.TENANT_ID ORDER BY AL.UPDATED_AT DESC LIMIT 1;";
try { try {
connection = this.getDBConnection(); connection = this.getDBConnection();
@ -248,6 +245,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
} }
} }
//todo this has to be removed
@Override @Override
public List<ApplicationRelease> getReleaseByState(int appId, int tenantId, String state) throws public List<ApplicationRelease> getReleaseByState(int appId, int tenantId, String state) throws
ApplicationManagementDAOException { ApplicationManagementDAOException {

@ -29,7 +29,9 @@ import java.sql.Connection;
import java.sql.PreparedStatement; 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.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.List; import java.util.List;
/** /**
@ -129,14 +131,20 @@ public class GenericLifecycleStateDAOImpl extends AbstractDAOImpl implements Lif
try { try {
conn = this.getDBConnection(); conn = this.getDBConnection();
String sql = "INSERT INTO AP_APP_LIFECYCLE_STATE (CURRENT_STATE, PREVIOUS_STATE, TENANT_ID, UPDATED_BY, " String sql = "INSERT INTO AP_APP_LIFECYCLE_STATE (CURRENT_STATE, PREVIOUS_STATE, TENANT_ID, UPDATED_BY, "
+ "AP_APP_RELEASE_ID, AP_APP_ID) VALUES (?,?, ?, ?,(SELECT ID FROM AP_APP_RELEASE WHERE UUID=?),?);"; + "UPDATED_AT, AP_APP_RELEASE_ID, AP_APP_ID) VALUES (?,?, ?, ?, ?, "
+ "(SELECT ID FROM AP_APP_RELEASE WHERE UUID=?),?);";
Calendar calendar = Calendar.getInstance();
Timestamp timestamp = new Timestamp(calendar.getTime().getTime());
stmt = conn.prepareStatement(sql); stmt = conn.prepareStatement(sql);
stmt.setString(1, state.getCurrentState().toUpperCase()); stmt.setString(1, state.getCurrentState().toUpperCase());
stmt.setString(2, state.getPreviousState().toUpperCase()); stmt.setString(2, state.getPreviousState().toUpperCase());
stmt.setInt(3, tenantId); stmt.setInt(3, tenantId);
stmt.setString(4, state.getUpdatedBy()); stmt.setString(4, state.getUpdatedBy());
stmt.setString(5, uuid); stmt.setTimestamp(5, timestamp);
stmt.setInt(6, appId); stmt.setString(6, uuid);
stmt.setInt(7, appId);
stmt.executeUpdate(); stmt.executeUpdate();
} catch (DBConnectionException e) { } catch (DBConnectionException e) {

@ -101,7 +101,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
} }
ConnectionManagerUtil.openDBConnection(); ConnectionManagerUtil.openDBConnection();
validateAppCreatingRequest(application); validateAppCreatingRequest(application, tenantId);
validateAppReleasePayload(application.getApplicationReleases().get(0)); validateAppReleasePayload(application.getApplicationReleases().get(0));
DeviceType deviceType; DeviceType deviceType;
ApplicationRelease applicationRelease; ApplicationRelease applicationRelease;
@ -210,7 +210,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
} }
try { try {
ConnectionManagerUtil.getDBConnection(); ConnectionManagerUtil.openDBConnection();
applicationList = applicationDAO.getApplications(filter, tenantId); applicationList = applicationDAO.getApplications(filter, tenantId);
if(applicationList != null && applicationList.getApplications() != null && !applicationList if(applicationList != null && applicationList.getApplications() != null && !applicationList
.getApplications().isEmpty()) { .getApplications().isEmpty()) {
@ -218,7 +218,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
applicationList = getRoleRestrictedApplicationList(applicationList, userName); applicationList = getRoleRestrictedApplicationList(applicationList, userName);
} }
for (Application application : applicationList.getApplications()) { for (Application application : applicationList.getApplications()) {
applicationReleases = getReleases(application, filter.isRequirePublishedRelease()); applicationReleases = getReleases(application, filter.getCurrentAppReleaseState());
application.setApplicationReleases(applicationReleases); application.setApplicationReleases(applicationReleases);
} }
} }
@ -230,6 +230,8 @@ public class ApplicationManagerImpl implements ApplicationManager {
} catch (ApplicationManagementDAOException e) { } catch (ApplicationManagementDAOException e) {
throw new ApplicationManagementException( throw new ApplicationManagementException(
"DAO exception while getting applications for the user " + userName + " of tenant " + tenantId, e); "DAO exception while getting applications for the user " + userName + " of tenant " + tenantId, e);
} finally {
ConnectionManagerUtil.closeDBConnection();
} }
} }
@ -273,19 +275,24 @@ public class ApplicationManagerImpl implements ApplicationManager {
} }
@Override @Override
public Application getApplicationById(int appId, String state, boolean handleConnections) throws ApplicationManagementException { public Application getApplicationById(int appId, String state) throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername(); String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
Application application; Application application;
boolean isAppAllowed = false; boolean isAppAllowed = false;
boolean isOpenConnection = false;
List<ApplicationRelease> applicationReleases = null; List<ApplicationRelease> applicationReleases = null;
try { try {
if (handleConnections) { if (state != null) {
ConnectionManagerUtil.openDBConnection(); ConnectionManagerUtil.openDBConnection();
isOpenConnection = true;
} }
application = this.applicationDAO.getApplicationById(appId, tenantId); application = this.applicationDAO.getApplicationById(appId, tenantId);
if (application == null) {
throw new NotFoundException("Couldn't find an application for application Id: " + appId);
}
if (isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) { if (isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) {
applicationReleases = getReleaseInState(appId, state, tenantId); applicationReleases = getReleases(application, state);
application.setApplicationReleases(applicationReleases); application.setApplicationReleases(applicationReleases);
return application; return application;
} }
@ -301,14 +308,14 @@ public class ApplicationManagerImpl implements ApplicationManager {
if (!isAppAllowed) { if (!isAppAllowed) {
return null; return null;
} }
applicationReleases = getReleaseInState(appId, state, tenantId); applicationReleases = getReleases(application, state);
application.setApplicationReleases(applicationReleases); application.setApplicationReleases(applicationReleases);
return application; return application;
} catch (UserStoreException e) { } catch (UserStoreException e) {
throw new ApplicationManagementException( throw new ApplicationManagementException(
"User-store exception while getting application with the application id " + appId); "User-store exception while getting application with the application id " + appId);
} finally { } finally {
if (handleConnections) { if (isOpenConnection) {
ConnectionManagerUtil.closeDBConnection(); ConnectionManagerUtil.closeDBConnection();
} }
} }
@ -349,7 +356,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
ConnectionManagerUtil.openDBConnection(); ConnectionManagerUtil.openDBConnection();
application = this.applicationDAO.getApplication(appName, appType, tenantId); application = this.applicationDAO.getApplication(appName, appType, tenantId);
if (isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) { if (isAdminUser(userName, tenantId, CarbonConstants.UI_ADMIN_PERMISSION_COLLECTION)) {
applicationReleases = getReleases(application, false); applicationReleases = getReleases(application, null);
application.setApplicationReleases(applicationReleases); application.setApplicationReleases(applicationReleases);
return application; return application;
} }
@ -366,7 +373,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
return null; return null;
} }
applicationReleases = getReleases(application, false); applicationReleases = getReleases(application, null);
application.setApplicationReleases(applicationReleases); application.setApplicationReleases(applicationReleases);
return application; return application;
} catch (UserStoreException e) { } catch (UserStoreException e) {
@ -421,16 +428,14 @@ public class ApplicationManagerImpl implements ApplicationManager {
} }
} }
private List<ApplicationRelease> getReleases(Application application, boolean requirePublishedRelease) private List<ApplicationRelease> getReleases(Application application, String releaseState)
throws ApplicationManagementException { throws ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
List<ApplicationRelease> applicationReleases; List<ApplicationRelease> applicationReleases;
List<ApplicationRelease> filteredApplicationReleases = new ArrayList<>();
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request is received to retrieve all the releases related with the application " + application log.debug("Request is received to retrieve all the releases related with the application " + application
.toString()); .toString());
} }
ConnectionManagerUtil.getDBConnection();
applicationReleases = this.applicationReleaseDAO.getReleases(application.getId(), tenantId); applicationReleases = this.applicationReleaseDAO.getReleases(application.getId(), tenantId);
for (ApplicationRelease applicationRelease : applicationReleases) { for (ApplicationRelease applicationRelease : applicationReleases) {
LifecycleState lifecycleState = null; LifecycleState lifecycleState = null;
@ -443,47 +448,26 @@ public class ApplicationManagerImpl implements ApplicationManager {
} }
if (lifecycleState != null) { if (lifecycleState != null) {
applicationRelease.setLifecycleState(lifecycleState); applicationRelease.setLifecycleState(lifecycleState);
if (!AppLifecycleState.REMOVED.toString()
.equals(applicationRelease.getLifecycleState().getCurrentState())) {
if (requirePublishedRelease){
if (AppLifecycleState.PUBLISHED.toString()
.equals(applicationRelease.getLifecycleState().getCurrentState())){
filteredApplicationReleases.add(applicationRelease);
}
}else{
filteredApplicationReleases.add(applicationRelease);
} }
} }
return filterAppReleaseByCurrentState(applicationReleases, releaseState);
} }
}
if (requirePublishedRelease && filteredApplicationReleases.size() > 1) {
log.error("There are more than one published application releases for application ID: " + application
.getId());
}
return filteredApplicationReleases;
} private List<ApplicationRelease> filterAppReleaseByCurrentState(List<ApplicationRelease> applicationReleases,
String state) {
private List<ApplicationRelease> getReleaseInState(int applicationId, String state, int tenantId)
throws ApplicationManagementException {
List<ApplicationRelease> applicationReleases;
List<ApplicationRelease> filteredReleases = new ArrayList<>(); List<ApplicationRelease> filteredReleases = new ArrayList<>();
// todo check whether this rquired or not
Application application = getApplicationIfAccessible(applicationId);
if (log.isDebugEnabled()) {
log.debug("Request is received to retrieve all the releases related with the application " + application
.toString());
}
applicationReleases = this.applicationReleaseDAO.getReleases(applicationId, tenantId);
if (state != null && !state.isEmpty()) { if (state != null && !state.isEmpty()) {
for (ApplicationRelease applicationRelease : applicationReleases) { for (ApplicationRelease applicationRelease : applicationReleases) {
if (state.equals(applicationRelease.getLifecycleState().getCurrentState())) { if (state.equals(applicationRelease.getLifecycleState().getCurrentState())) {
filteredReleases.add(applicationRelease); filteredReleases.add(applicationRelease);
} }
} }
if (AppLifecycleState.PUBLISHED.toString()
.equals(state) && filteredReleases.size() > 1) {
log.warn("There are more than one application releases is found which is in PUBLISHED state");
}
return filteredReleases; return filteredReleases;
} }
return applicationReleases; return applicationReleases;
@ -507,7 +491,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
if ( application == null) { if ( application == null) {
throw new ApplicationManagementException("Invalid Application"); throw new ApplicationManagementException("Invalid Application");
} }
List<ApplicationRelease> applicationReleases = getReleases(application, false); List<ApplicationRelease> applicationReleases = getReleases(application, null);
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request is received to delete applications which are related with the application id " + log.debug("Request is received to delete applications which are related with the application id " +
applicationId); applicationId);
@ -589,7 +573,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
* @param application Application that need to be created * @param application Application that need to be created
* @throws ValidationException Validation Exception * @throws ValidationException Validation Exception
*/ */
private void validateAppCreatingRequest(Application application) throws ValidationException { private void validateAppCreatingRequest(Application application, int tenantId) throws ValidationException {
Boolean isValidApplicationType; Boolean isValidApplicationType;
try { try {
@ -611,7 +595,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
"App Type contains in the application creating payload doesn't match with supported app types"); "App Type contains in the application creating payload doesn't match with supported app types");
} }
validateApplicationExistence(application); validateApplicationExistence(application, tenantId);
} catch (ApplicationManagementException e) { } catch (ApplicationManagementException e) {
throw new ValidationException("Error occured while validating whether there is already an application " throw new ValidationException("Error occured while validating whether there is already an application "
+ "registered with same name.", e); + "registered with same name.", e);
@ -633,14 +617,14 @@ public class ApplicationManagerImpl implements ApplicationManager {
* @param application Application that need to be validated * @param application Application that need to be validated
* @throws ValidationException Validation Exception * @throws ValidationException Validation Exception
*/ */
private void validateApplicationExistence(Application application) throws ApplicationManagementException { private void validateApplicationExistence(Application application, int tenantId) throws ApplicationManagementException {
Filter filter = new Filter(); Filter filter = new Filter();
filter.setFullMatch(true); filter.setFullMatch(true);
filter.setAppName(application.getName().trim()); filter.setAppName(application.getName().trim());
filter.setOffset(0); filter.setOffset(0);
filter.setLimit(1); filter.setLimit(1);
ApplicationList applicationList = getApplications(filter); ApplicationList applicationList = applicationDAO.getApplications(filter, tenantId);
if (applicationList != null && applicationList.getApplications() != null && !applicationList.getApplications() if (applicationList != null && applicationList.getApplications() != null && !applicationList.getApplications()
.isEmpty()) { .isEmpty()) {
throw new ApplicationManagementException( throw new ApplicationManagementException(
@ -765,10 +749,10 @@ public class ApplicationManagerImpl implements ApplicationManager {
ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager(); ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager();
ApplicationRelease applicationRelease; ApplicationRelease applicationRelease;
try { try {
ConnectionManagerUtil.getDBConnection(); ConnectionManagerUtil.openDBConnection();
applicationRelease = getAppReleaseIfExists(appId, uuid); applicationRelease = getAppReleaseIfExists(appId, uuid);
Application application = getApplicationById(appId, null, false); Application application = getApplicationById(appId, null);
List<DeviceType> deviceTypes = Util.getDeviceManagementService().getDeviceTypes(); List<DeviceType> deviceTypes = Util.getDeviceManagementService().getDeviceTypes();
for (DeviceType deviceType:deviceTypes) { for (DeviceType deviceType:deviceTypes) {

@ -141,9 +141,9 @@ public interface ApplicationManagementAPI {
value = "Is it requesting exactly matching application or partially matching application.") value = "Is it requesting exactly matching application or partially matching application.")
@QueryParam("exact-match") boolean isFullMatch, @QueryParam("exact-match") boolean isFullMatch,
@ApiParam( @ApiParam(
name = "published-release", name = "release-state",
value = "If set to True, only get published release for the application") value = "Current state of the application release")
@QueryParam("published-release") boolean requirePublishedReleases, @QueryParam("release-state") String releaseState,
@ApiParam( @ApiParam(
name = "offset", name = "offset",
value = "offset", value = "offset",

@ -70,7 +70,7 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
@QueryParam("type") String appType, @QueryParam("type") String appType,
@QueryParam("category") String appCategory, @QueryParam("category") String appCategory,
@QueryParam("exact-match") boolean isFullMatch, @QueryParam("exact-match") boolean isFullMatch,
@QueryParam("published-release") boolean requirePublishedReleases, @QueryParam("release-state") String releaseState,
@DefaultValue("0") @QueryParam("offset") int offset, @DefaultValue("0") @QueryParam("offset") int offset,
@DefaultValue("20") @QueryParam("limit") int limit, @DefaultValue("20") @QueryParam("limit") int limit,
@DefaultValue("ASC") @QueryParam("sort") String sortBy) { @DefaultValue("ASC") @QueryParam("sort") String sortBy) {
@ -82,7 +82,6 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
filter.setLimit(limit); filter.setLimit(limit);
filter.setSortBy(sortBy); filter.setSortBy(sortBy);
filter.setFullMatch(isFullMatch); filter.setFullMatch(isFullMatch);
filter.setRequirePublishedRelease(requirePublishedReleases);
if (appName != null && !appName.isEmpty()) { if (appName != null && !appName.isEmpty()) {
filter.setAppName(appName); filter.setAppName(appName);
} }
@ -92,6 +91,9 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
if (appCategory != null && !appCategory.isEmpty()) { if (appCategory != null && !appCategory.isEmpty()) {
filter.setAppCategory(appCategory); filter.setAppCategory(appCategory);
} }
if (releaseState != null && !releaseState.isEmpty()) {
filter.setCurrentAppReleaseState(releaseState);
}
ApplicationList applications = applicationManager.getApplications(filter); ApplicationList applications = applicationManager.getApplications(filter);
if (applications.getApplications().isEmpty()) { if (applications.getApplications().isEmpty()) {
return Response.status(Response.Status.NOT_FOUND).entity return Response.status(Response.Status.NOT_FOUND).entity
@ -105,25 +107,24 @@ public class ApplicationManagementAPIImpl implements ApplicationManagementAPI {
} }
} }
@GET @GET
@Consumes("application/json") @Consumes("application/json")
@Path("/{appId}") @Path("/{appId}")
public Response getApplication( public Response getApplication(
@PathParam("appId") int appId, @PathParam("appId") int appId,
@QueryParam("state") String state) { @DefaultValue("PUBLISHED") @QueryParam("state") String state) {
ApplicationManager applicationManager = APIUtil.getApplicationManager(); ApplicationManager applicationManager = APIUtil.getApplicationManager();
try { try {
Application application = applicationManager.getApplicationById(appId, state, true); Application application = applicationManager.getApplicationById(appId, state);
if (application == null) {
return Response.status(Response.Status.NOT_FOUND).entity
("Application with application id: " + appId + " not found").build();
}
return Response.status(Response.Status.OK).entity(application).build(); return Response.status(Response.Status.OK).entity(application).build();
} catch (NotFoundException e) {
String msg = "Application with application id: " + appId + " not found";
log.error(msg, e);
return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
} catch (ApplicationManagementException e) { } catch (ApplicationManagementException e) {
log.error("Error occurred while getting application with the id " + appId, e); String msg = "Error occurred while getting application with the id " + appId;
return APIUtil.getResponse(e, Response.Status.INTERNAL_SERVER_ERROR); log.error(msg, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
} }
} }

@ -11,7 +11,7 @@ CREATE TABLE IF NOT EXISTS AP_APP (
STATUS VARCHAR(45) NOT NULL DEFAULT 'ACTIVE', STATUS VARCHAR(45) NOT NULL DEFAULT 'ACTIVE',
SUB_TYPE VARCHAR(45) NOT NULL, SUB_TYPE VARCHAR(45) NOT NULL,
CURRENCY VARCHAR(45) NULL DEFAULT '$', CURRENCY VARCHAR(45) NULL DEFAULT '$',
DM_DEVICE_TYPE_ID INT(11) NOT NULL, DEVICE_TYPE_ID INT(11) NOT NULL,
PRIMARY KEY (ID)); PRIMARY KEY (ID));

@ -21,7 +21,7 @@ CREATE TABLE IF NOT EXISTS `AP_APP` (
`STATUS` VARCHAR(45) NOT NULL DEFAULT 'ACTIVE', `STATUS` VARCHAR(45) NOT NULL DEFAULT 'ACTIVE',
`SUB_TYPE` VARCHAR(45) NOT NULL, `SUB_TYPE` VARCHAR(45) NOT NULL,
`CURRENCY` VARCHAR(45) NULL DEFAULT '$', `CURRENCY` VARCHAR(45) NULL DEFAULT '$',
`DM_DEVICE_TYPE_ID` INT(11) NOT NULL, `DEVICE_TYPE_ID` INT(11) NOT NULL,
PRIMARY KEY (`ID`)) PRIMARY KEY (`ID`))
ENGINE = InnoDB ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8; DEFAULT CHARACTER SET = utf8;

Loading…
Cancel
Save