Merge branch 'application-mgt-new' of https://gitlab.com/entgra/carbon-device-mgt into application-mgt-new

feature/appm-store/pbac
Jayasanka 6 years ago
commit aaefdb36fc

@ -68,7 +68,7 @@ public class Filter {
/** /**
* Category list of the application * Category list of the application
*/ */
private List<String> appCategories; private List<String> categories;
/** /**
* Tag list of the application * Tag list of the application
@ -155,12 +155,12 @@ public class Filter {
this.appType = appType; this.appType = appType;
} }
public List<String> getAppCategories() { public List<String> getCategories() {
return appCategories; return categories;
} }
public void setAppCategories(List<String> appCategories) { public void setCategories(List<String> categories) {
this.appCategories = appCategories; this.categories = categories;
} }
public List<String> getTags() { return tags; } public List<String> getTags() { return tags; }

@ -78,7 +78,7 @@ public interface ReviewManager {
* @return {@link Review}updated review * @return {@link Review}updated review
* @throws ReviewManagementException Exceptions of the reviewTmp management * @throws ReviewManagementException Exceptions of the reviewTmp management
*/ */
boolean updateReview(ReviewWrapper updatingReview, int reviewId, String uuid, boolean isPrivilegedUser) Review updateReview(ReviewWrapper updatingReview, int reviewId, String uuid, boolean isPrivilegedUser)
throws ReviewManagementException, ApplicationManagementException; throws ReviewManagementException, ApplicationManagementException;
/** /**

@ -134,14 +134,6 @@ public interface ApplicationDAO {
*/ */
ApplicationDTO getApplication(String releaseUuid, int tenantId) throws ApplicationManagementDAOException; ApplicationDTO getApplication(String releaseUuid, int tenantId) throws ApplicationManagementDAOException;
/**
* To get the UUID of latest app release that satisfy the given criteria.
*
* @param appId application id
* @throws ApplicationManagementDAOException ApplicationDTO Management DAO Exception.
*/
String getUuidOfLatestRelease(int appId) throws ApplicationManagementDAOException;
/** /**
* Verify whether application exist for given application name and device type. Because a name and device type is * Verify whether application exist for given application name and device type. Because a name and device type is
* unique for an application. * unique for an application.

@ -66,7 +66,7 @@ public interface ApplicationReleaseDAO {
* @param tenantId Tenant Id * @param tenantId Tenant Id
* @throws ApplicationManagementDAOException ApplicationDTO Management DAO Exception. * @throws ApplicationManagementDAOException ApplicationDTO Management DAO Exception.
*/ */
Rating getRating(String uuid, int tenantId) throws ApplicationManagementDAOException; Rating getReleaseRating(String uuid, int tenantId) throws ApplicationManagementDAOException;
List<Double> getReleaseRatings(String uuid, int tenantId) throws ApplicationManagementDAOException; List<Double> getReleaseRatings(String uuid, int tenantId) throws ApplicationManagementDAOException;
@ -101,14 +101,6 @@ public interface ApplicationReleaseDAO {
*/ */
String getPackageName(String releaseUuid, int tenantId) throws ApplicationManagementDAOException; String getPackageName(String releaseUuid, int tenantId) throws ApplicationManagementDAOException;
/**
* To verify whether application release exist or not for given application release uuid.
*
* @param uuid UUID of the application release.
* @param tenantId Tenant Id
* @throws ApplicationManagementDAOException Application Management DAO Exception.
*/
boolean isReleaseExist(String uuid, int tenantId) throws ApplicationManagementDAOException;
String getReleaseHashValue(String uuid, int tenantId) throws ApplicationManagementDAOException; String getReleaseHashValue(String uuid, int tenantId) throws ApplicationManagementDAOException;

@ -62,7 +62,7 @@ import java.util.List;
* @return row count if updating is succeed otherwise 0 * @return row count if updating is succeed otherwise 0
* @throws ReviewManagementDAOException Exceptions of the reviewTmp management. * @throws ReviewManagementDAOException Exceptions of the reviewTmp management.
*/ */
int updateReview(ReviewDTO reviewDTO, int reviewId, boolean isActiveReview, int tenantId) ReviewDTO updateReview(ReviewDTO reviewDTO, int reviewId, boolean isActiveReview, int tenantId)
throws ReviewManagementDAOException; throws ReviewManagementDAOException;

@ -236,41 +236,6 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
} }
} }
@Override
public String getUuidOfLatestRelease(int appId) throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Getting UUID from the latest app release");
}
Connection conn;
PreparedStatement stmt = null;
ResultSet rs = null;
String sql = "";
String uuId = null;
try {
conn = this.getDBConnection();
sql += "SELECT APP_RELEASE.UUID AS UUID FROM AP_APP_RELEASE AS APP_RELEASE, AP_APP_LIFECYCLE_STATE "
+ "AS LIFECYCLE WHERE APP_RELEASE.AP_APP_ID=? AND APP_RELEASE.ID = LIFECYCLE.AP_APP_RELEASE_ID "
+ "AND LIFECYCLE.CURRENT_STATE = ? ORDER BY APP_RELEASE.ID DESC;";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, appId);
stmt.setString(2, AppLifecycleState.PUBLISHED.toString());
rs = stmt.executeQuery();
if (rs.next()) {
uuId = rs.getString("UUID");
}
return uuId;
} catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred while getting uuid of latest app release", e);
} catch (DBConnectionException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection for "
+ "getting app release id", e);
} finally {
DAOUtil.cleanupResources(stmt, rs);
}
}
@Override @Override
public int getApplicationCount(Filter filter,int deviceTypeId, int tenantId) throws ApplicationManagementDAOException { public int getApplicationCount(Filter filter,int deviceTypeId, int tenantId) throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
@ -372,75 +337,73 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
} }
@Override @Override
public ApplicationDTO getApplication(String releaseUuid, int tenantId) public ApplicationDTO getApplication(String releaseUuid, int tenantId) throws ApplicationManagementDAOException {
throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Getting application with the release UUID: " + releaseUuid + " from the database"); log.debug("Getting application with the release UUID: " + releaseUuid + " from the database");
} }
Connection conn; String sql = "SELECT "
PreparedStatement stmt = null; + "AP_APP.ID AS APP_ID, "
ResultSet rs = null; + "AP_APP.NAME AS APP_NAME, "
+ "AP_APP.DESCRIPTION AS APP_DESCRIPTION, "
+ "AP_APP.TYPE AS APP_TYPE, "
+ "AP_APP.STATUS AS APP_STATUS, "
+ "AP_APP.SUB_TYPE AS APP_SUB_TYPE, "
+ "AP_APP.CURRENCY AS APP_CURRENCY, "
+ "AP_APP.RATING AS APP_RATING, "
+ "AP_APP.DEVICE_TYPE_ID AS APP_DEVICE_TYPE_ID, "
+ "AP_APP_RELEASE.ID AS RELEASE_ID, "
+ "AP_APP_RELEASE.DESCRIPTION AS RELEASE_DESCRIPTION, "
+ "AP_APP_RELEASE.VERSION AS RELEASE_VERSION, "
+ "AP_APP_RELEASE.UUID AS RELEASE_UUID, "
+ "AP_APP_RELEASE.RELEASE_TYPE AS RELEASE_TYPE, "
+ "AP_APP_RELEASE.INSTALLER_LOCATION AS AP_RELEASE_STORED_LOC, "
+ "AP_APP_RELEASE.ICON_LOCATION AS AP_RELEASE_ICON_LOC, "
+ "AP_APP_RELEASE.BANNER_LOCATION AS AP_RELEASE_BANNER_LOC, "
+ "AP_APP_RELEASE.SC_1_LOCATION AS AP_RELEASE_SC1, "
+ "AP_APP_RELEASE.SC_2_LOCATION AS AP_RELEASE_SC2, "
+ "AP_APP_RELEASE.SC_3_LOCATION AS AP_RELEASE_SC3, "
+ "AP_APP_RELEASE.APP_HASH_VALUE AS RELEASE_HASH_VALUE, "
+ "AP_APP_RELEASE.APP_PRICE AS RELEASE_PRICE, "
+ "AP_APP_RELEASE.APP_META_INFO AS RELEASE_META_INFO, "
+ "AP_APP_RELEASE.PACKAGE_NAME AS PACKAGE_NAME, "
+ "AP_APP_RELEASE.SUPPORTED_OS_VERSIONS AS RELEASE_SUP_OS_VERSIONS, "
+ "AP_APP_RELEASE.RATING AS RELEASE_RATING, "
+ "AP_APP_RELEASE.CURRENT_STATE AS RELEASE_CURRENT_STATE, "
+ "AP_APP_RELEASE.RATED_USERS AS RATED_USER_COUNT "
+ "FROM AP_APP "
+ "INNER JOIN AP_APP_RELEASE ON "
+ "AP_APP.ID = AP_APP_RELEASE.AP_APP_ID AND "
+ "AP_APP.TENANT_ID = AP_APP_RELEASE.TENANT_ID "
+ "WHERE "
+ "AP_APP.ID = (SELECT AP_APP_RELEASE.AP_APP_ID FROM AP_APP_RELEASE WHERE AP_APP_RELEASE.UUID = ?) "
+ "AND AP_APP.TENANT_ID = ?";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
String sql = "SELECT " try (PreparedStatement stmt = conn.prepareStatement(sql)){
+ "AP_APP.ID AS APP_ID, " stmt.setString(1, releaseUuid);
+ "AP_APP.NAME AS APP_NAME, " stmt.setInt(2, tenantId);
+ "AP_APP.DESCRIPTION AS APP_DESCRIPTION, " try (ResultSet rs = stmt.executeQuery()) {
+ "AP_APP.TYPE AS APP_TYPE, " if (log.isDebugEnabled()) {
+ "AP_APP.STATUS AS APP_STATUS, " log.debug("Successfully retrieved basic details of the application for the application "
+ "AP_APP.SUB_TYPE AS APP_SUB_TYPE, " + "release UUID: " + releaseUuid);
+ "AP_APP.CURRENCY AS APP_CURRENCY, " }
+ "AP_APP.RATING AS APP_RATING, " return DAOUtil.loadApplication(rs);
+ "AP_APP.DEVICE_TYPE_ID AS APP_DEVICE_TYPE_ID, " }
+ "AP_APP_RELEASE.ID AS RELEASE_ID, "
+ "AP_APP_RELEASE.DESCRIPTION AS RELEASE_DESCRIPTION, "
+ "AP_APP_RELEASE.VERSION AS RELEASE_VERSION, "
+ "AP_APP_RELEASE.UUID AS RELEASE_UUID, "
+ "AP_APP_RELEASE.RELEASE_TYPE AS RELEASE_TYPE, "
+ "AP_APP_RELEASE.INSTALLER_LOCATION AS AP_RELEASE_STORED_LOC, "
+ "AP_APP_RELEASE.ICON_LOCATION AS AP_RELEASE_ICON_LOC, "
+ "AP_APP_RELEASE.BANNER_LOCATION AS AP_RELEASE_BANNER_LOC, "
+ "AP_APP_RELEASE.SC_1_LOCATION AS AP_RELEASE_SC1, "
+ "AP_APP_RELEASE.SC_2_LOCATION AS AP_RELEASE_SC2, "
+ "AP_APP_RELEASE.SC_3_LOCATION AS AP_RELEASE_SC3, "
+ "AP_APP_RELEASE.APP_HASH_VALUE AS RELEASE_HASH_VALUE, "
+ "AP_APP_RELEASE.APP_PRICE AS RELEASE_PRICE, "
+ "AP_APP_RELEASE.APP_META_INFO AS RELEASE_META_INFO, "
+ "AP_APP_RELEASE.PACKAGE_NAME AS PACKAGE_NAME, "
+ "AP_APP_RELEASE.SUPPORTED_OS_VERSIONS AS RELEASE_SUP_OS_VERSIONS, "
+ "AP_APP_RELEASE.RATING AS RELEASE_RATING, "
+ "AP_APP_RELEASE.CURRENT_STATE AS RELEASE_CURRENT_STATE, "
+ "AP_APP_RELEASE.RATED_USERS AS RATED_USER_COUNT "
+ "FROM AP_APP "
+ "INNER JOIN AP_APP_RELEASE ON "
+ "AP_APP.ID = AP_APP_RELEASE.AP_APP_ID AND "
+ "AP_APP.TENANT_ID = AP_APP_RELEASE.TENANT_ID "
+ "WHERE "
+ "AP_APP.ID = (SELECT AP_APP_RELEASE.AP_APP_ID FROM AP_APP_RELEASE WHERE AP_APP_RELEASE.UUID = ?) "
+ "AND AP_APP.TENANT_ID = ?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, releaseUuid);
stmt.setInt(2, tenantId);
rs = stmt.executeQuery();
if (log.isDebugEnabled()) {
log.debug("Successfully retrieved basic details of the application for the application release UUID: "
+ releaseUuid);
} }
return DAOUtil.loadApplication(rs);
} catch (SQLException e) {
throw new ApplicationManagementDAOException(
"Error occurred while getting application details with app release uuid " + releaseUuid +
" while executing query.", e);
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); String msg = "Error occurred while obtaining the DB connection to get application for application release "
+ "UUID: " + releaseUuid;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred while getting application details with app release uuid " + releaseUuid
+ " while executing query. Executed query: " + sql;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (UnexpectedServerErrorException e) { } catch (UnexpectedServerErrorException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); String msg = "Found more than one application for application release UUID: " + releaseUuid;
} finally { log.error(msg);
DAOUtil.cleanupResources(stmt, rs); throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -450,86 +413,84 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Getting application with the id (" + applicationId + ") from the database"); log.debug("Getting application with the id (" + applicationId + ") from the database");
} }
Connection conn; String sql = "SELECT "
PreparedStatement stmt = null; + "AP_APP.ID AS APP_ID, "
ResultSet rs = null; + "AP_APP.NAME AS APP_NAME, "
+ "AP_APP.DESCRIPTION AS APP_DESCRIPTION, "
+ "AP_APP.TYPE AS APP_TYPE, "
+ "AP_APP.STATUS AS APP_STATUS, "
+ "AP_APP.SUB_TYPE AS APP_SUB_TYPE, "
+ "AP_APP.CURRENCY AS APP_CURRENCY, "
+ "AP_APP.RATING AS APP_RATING, "
+ "AP_APP.DEVICE_TYPE_ID AS APP_DEVICE_TYPE_ID, "
+ "AP_APP_RELEASE.ID AS RELEASE_ID, "
+ "AP_APP_RELEASE.DESCRIPTION AS RELEASE_DESCRIPTION, "
+ "AP_APP_RELEASE.VERSION AS RELEASE_VERSION, "
+ "AP_APP_RELEASE.UUID AS RELEASE_UUID, "
+ "AP_APP_RELEASE.RELEASE_TYPE AS RELEASE_TYPE, "
+ "AP_APP_RELEASE.INSTALLER_LOCATION AS AP_RELEASE_STORED_LOC, "
+ "AP_APP_RELEASE.ICON_LOCATION AS AP_RELEASE_ICON_LOC, "
+ "AP_APP_RELEASE.BANNER_LOCATION AS AP_RELEASE_BANNER_LOC, "
+ "AP_APP_RELEASE.SC_1_LOCATION AS AP_RELEASE_SC1, "
+ "AP_APP_RELEASE.SC_2_LOCATION AS AP_RELEASE_SC2, "
+ "AP_APP_RELEASE.SC_3_LOCATION AS AP_RELEASE_SC3, "
+ "AP_APP_RELEASE.APP_HASH_VALUE AS RELEASE_HASH_VALUE, "
+ "AP_APP_RELEASE.APP_PRICE AS RELEASE_PRICE, "
+ "AP_APP_RELEASE.APP_META_INFO AS RELEASE_META_INFO, "
+ "AP_APP_RELEASE.PACKAGE_NAME AS PACKAGE_NAME, "
+ "AP_APP_RELEASE.SUPPORTED_OS_VERSIONS AS RELEASE_SUP_OS_VERSIONS, "
+ "AP_APP_RELEASE.RATING AS RELEASE_RATING, "
+ "AP_APP_RELEASE.CURRENT_STATE AS RELEASE_CURRENT_STATE, "
+ "AP_APP_RELEASE.RATED_USERS AS RATED_USER_COUNT "
+ "FROM AP_APP "
+ "INNER JOIN AP_APP_RELEASE ON "
+ "AP_APP.ID = AP_APP_RELEASE.AP_APP_ID AND "
+ "AP_APP.TENANT_ID = AP_APP_RELEASE.TENANT_ID "
+ "WHERE "
+ "AP_APP.ID =? AND "
+ "AP_APP.TENANT_ID = ?";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
String sql = "SELECT " try (PreparedStatement stmt = conn.prepareStatement(sql)) {
+ "AP_APP.ID AS APP_ID, " stmt.setInt(1, applicationId);
+ "AP_APP.NAME AS APP_NAME, " stmt.setInt(2, tenantId);
+ "AP_APP.DESCRIPTION AS APP_DESCRIPTION, " try (ResultSet rs = stmt.executeQuery()) {
+ "AP_APP.TYPE AS APP_TYPE, " if (log.isDebugEnabled()) {
+ "AP_APP.STATUS AS APP_STATUS, " log.debug("Successfully retrieved basic details of the application with the id "
+ "AP_APP.SUB_TYPE AS APP_SUB_TYPE, " + applicationId);
+ "AP_APP.CURRENCY AS APP_CURRENCY, " }
+ "AP_APP.RATING AS APP_RATING, " return DAOUtil.loadApplication(rs);
+ "AP_APP.DEVICE_TYPE_ID AS APP_DEVICE_TYPE_ID, " }
+ "AP_APP_RELEASE.ID AS RELEASE_ID, "
+ "AP_APP_RELEASE.DESCRIPTION AS RELEASE_DESCRIPTION, "
+ "AP_APP_RELEASE.VERSION AS RELEASE_VERSION, "
+ "AP_APP_RELEASE.UUID AS RELEASE_UUID, "
+ "AP_APP_RELEASE.RELEASE_TYPE AS RELEASE_TYPE, "
+ "AP_APP_RELEASE.INSTALLER_LOCATION AS AP_RELEASE_STORED_LOC, "
+ "AP_APP_RELEASE.ICON_LOCATION AS AP_RELEASE_ICON_LOC, "
+ "AP_APP_RELEASE.BANNER_LOCATION AS AP_RELEASE_BANNER_LOC, "
+ "AP_APP_RELEASE.SC_1_LOCATION AS AP_RELEASE_SC1, "
+ "AP_APP_RELEASE.SC_2_LOCATION AS AP_RELEASE_SC2, "
+ "AP_APP_RELEASE.SC_3_LOCATION AS AP_RELEASE_SC3, "
+ "AP_APP_RELEASE.APP_HASH_VALUE AS RELEASE_HASH_VALUE, "
+ "AP_APP_RELEASE.APP_PRICE AS RELEASE_PRICE, "
+ "AP_APP_RELEASE.APP_META_INFO AS RELEASE_META_INFO, "
+ "AP_APP_RELEASE.PACKAGE_NAME AS PACKAGE_NAME, "
+ "AP_APP_RELEASE.SUPPORTED_OS_VERSIONS AS RELEASE_SUP_OS_VERSIONS, "
+ "AP_APP_RELEASE.RATING AS RELEASE_RATING, "
+ "AP_APP_RELEASE.CURRENT_STATE AS RELEASE_CURRENT_STATE, "
+ "AP_APP_RELEASE.RATED_USERS AS RATED_USER_COUNT "
+ "FROM AP_APP "
+ "INNER JOIN AP_APP_RELEASE ON "
+ "AP_APP.ID = AP_APP_RELEASE.AP_APP_ID AND "
+ "AP_APP.TENANT_ID = AP_APP_RELEASE.TENANT_ID "
+ "WHERE "
+ "AP_APP.ID =? AND "
+ "AP_APP.TENANT_ID = ?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, applicationId);
stmt.setInt(2, tenantId);
rs = stmt.executeQuery();
if (log.isDebugEnabled()) {
log.debug("Successfully retrieved basic details of the application with the id "
+ applicationId);
} }
return DAOUtil.loadApplication(rs);
} catch (SQLException e) {
throw new ApplicationManagementDAOException(
"Error occurred while getting application details with app id " + applicationId +
" while executing query.", e);
} catch (JSONException e) {
throw new ApplicationManagementDAOException("Error occurred while parsing JSON", e);
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); String msg = "Error occurred while obtaining the DB connection to get application for application ID: "
+ applicationId;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred to get application details with app id " + applicationId + " while executing "
+ "query. Query: " + sql;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (UnexpectedServerErrorException e) { } catch (UnexpectedServerErrorException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); String msg = "Found more than one application for application ID: " + applicationId;
} finally { log.error(msg);
DAOUtil.cleanupResources(stmt, rs); throw new ApplicationManagementDAOException(msg, e);
} }
} }
@Override @Override
public boolean updateApplication(ApplicationDTO applicationDTO, int tenantId) public boolean updateApplication(ApplicationDTO applicationDTO, int tenantId)
throws ApplicationManagementDAOException { throws ApplicationManagementDAOException {
Connection conn; String sql = "UPDATE AP_APP AP " +
"SET " +
"AP.NAME = ?, " +
"AP.DESCRIPTION = ?, " +
"AP.SUB_TYPE = ?, " +
"AP.CURRENCY = ? " +
"WHERE AP.ID = ? AND AP.TENANT_ID = ?";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
String sql = "UPDATE AP_APP AP " +
"SET " +
"AP.NAME = ?, " +
"AP.DESCRIPTION = ?, " +
"AP.SUB_TYPE = ?, " +
"AP.CURRENCY = ? " +
"WHERE AP.ID = ? AND AP.TENANT_ID = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) { try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, applicationDTO.getName()); stmt.setString(1, applicationDTO.getName());
stmt.setString(2, applicationDTO.getDescription()); stmt.setString(2, applicationDTO.getDescription());
@ -544,7 +505,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
log.error(msg); log.error(msg);
throw new ApplicationManagementDAOException(msg, e); throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
String msg = "Error occurred when obtaining database connection for updating the application."; String msg = "Error occurred when executing SQL to update an application. Executed query: " + sql;
log.error(msg); log.error(msg);
throw new ApplicationManagementDAOException(msg, e); throw new ApplicationManagementDAOException(msg, e);
} }
@ -553,16 +514,14 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
@Override @Override
public void updateApplicationRating(String uuid, double rating, int tenantId) public void updateApplicationRating(String uuid, double rating, int tenantId)
throws ApplicationManagementDAOException { throws ApplicationManagementDAOException {
Connection conn; String sql = "UPDATE AP_APP AP " +
"SET " +
"AP.RATING = ? " +
"WHERE " +
"AP.ID = (SELECT AP_APP_ID FROM AP_APP_RELEASE WHERE UUID = ?) AND " +
"AP.TENANT_ID = ?";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
String sql = "UPDATE AP_APP AP " +
"SET " +
"AP.RATING = ? " +
"WHERE " +
"AP.ID = (SELECT AP_APP_ID FROM AP_APP_RELEASE WHERE UUID = ?) AND " +
"AP.TENANT_ID = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) { try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setDouble(1, rating); stmt.setDouble(1, rating);
stmt.setString(2, uuid); stmt.setString(2, uuid);
@ -583,22 +542,27 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
@Override @Override
public void retireApplication(int appId) throws ApplicationManagementDAOException { public void retireApplication(int appId) throws ApplicationManagementDAOException {
Connection conn; String sql = "UPDATE "
PreparedStatement stmt = null; + "AP_APP "
+ "SET STATUS = ? "
+ "WHERE ID = ? ";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
String sql = "UPDATE AP_APP SET STATUS = ? WHERE ID = ? "; try (PreparedStatement stmt = conn.prepareStatement(sql)){
stmt = conn.prepareStatement(sql); stmt.setString(1, AppLifecycleState.RETIRED.toString());
stmt.setString(1, AppLifecycleState.RETIRED.toString()); stmt.setInt(2, appId);
stmt.setInt(2, appId); stmt.executeUpdate();
stmt.executeUpdate(); }
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); String msg = "Error occurred while obtaining the DB connection to retire application which has application "
+ "ID: " + appId;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred while deleting the application: ", e); String msg = "Error occurred while executing SQL to retire an application which has application ID "
} finally { + appId;
DAOUtil.cleanupResources(stmt, null); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -607,29 +571,28 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to add tags"); log.debug("Request received in DAO Layer to add tags");
} }
Connection conn;
PreparedStatement stmt = null;
String sql = "INSERT INTO AP_APP_TAG " String sql = "INSERT INTO AP_APP_TAG "
+ "(TAG," + "(TAG, "
+ " TENANT_ID) " + " TENANT_ID) "
+ "VALUES (?, ?)"; + "VALUES (?, ?)";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
stmt = conn.prepareStatement(sql); try (PreparedStatement stmt = conn.prepareStatement(sql)) {
for (String tag : tags) { for (String tag : tags) {
stmt.setString(1, tag); stmt.setString(1, tag);
stmt.setInt(2, tenantId); stmt.setInt(2, tenantId);
stmt.addBatch(); stmt.addBatch();
}
stmt.executeBatch();
} }
stmt.executeBatch();
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when adding tags";
"Error occurred while obtaining the DB connection when adding tags", e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred while adding tags", e); String msg = "SQL Error occurred while adding tags. Executed Query: " + sql;
} finally { log.error(msg);
DAOUtil.cleanupResources(stmt, null); throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -638,72 +601,70 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to get all tags"); log.debug("Request received in DAO Layer to get all tags");
} }
Connection conn; String sql = "SELECT "
PreparedStatement stmt = null; + "AP_APP_TAG.ID AS ID, "
ResultSet rs = null; + "AP_APP_TAG.TAG AS TAG "
+ "FROM AP_APP_TAG "
+ "WHERE TENANT_ID = ?";
try { try {
List<TagDTO> tagEntities = new ArrayList<>(); List<TagDTO> tagEntities = new ArrayList<>();
String sql = "SELECT " Connection conn = this.getDBConnection();
+ "AP_APP_TAG.ID AS ID, " try (PreparedStatement stmt = conn.prepareStatement(sql)) {
+ "AP_APP_TAG.TAG AS TAG " stmt.setInt(1, tenantId);
+ "FROM AP_APP_TAG " try (ResultSet rs = stmt.executeQuery()) {
+ "WHERE TENANT_ID = ?"; while (rs.next()) {
conn = this.getDBConnection(); TagDTO tagDTO = new TagDTO();
stmt = conn.prepareStatement(sql); tagDTO.setId(rs.getInt("ID"));
stmt.setInt(1, tenantId); tagDTO.setTagName(rs.getString("TAG"));
rs = stmt.executeQuery(); tagEntities.add(tagDTO);
}
while(rs.next()){ return tagEntities;
TagDTO tagDTO = new TagDTO(); }
tagDTO.setId(rs.getInt("ID"));
tagDTO.setTagName(rs.getString("TAG"));
tagEntities.add(tagDTO);
} }
return tagEntities;
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when getting all tags";
"Error occurred while obtaining the DB connection when adding tags", e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred while adding tags", e); String msg = "SQL Error occurred while getting all tags";
} finally { log.error(msg);
DAOUtil.cleanupResources(stmt, rs); throw new ApplicationManagementDAOException(msg, e);
} }
} }
@Override @Override
public List<CategoryDTO> getAllCategories(int tenantId) throws ApplicationManagementDAOException { public List<CategoryDTO> getAllCategories(int tenantId) throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to get all tags"); log.debug("Request received in DAO Layer to get all categories.");
} }
Connection conn; String sql = "SELECT "
PreparedStatement stmt = null; + "AP_APP_CATEGORY.ID AS ID, "
ResultSet rs = null; + "AP_APP_CATEGORY.CATEGORY AS CATEGORY "
+ "FROM AP_APP_CATEGORY "
+ "WHERE TENANT_ID = ?";
try { try {
List<CategoryDTO> categories = new ArrayList<>(); List<CategoryDTO> categories = new ArrayList<>();
String sql = "SELECT " Connection conn = this.getDBConnection();
+ "AP_APP_CATEGORY.ID AS ID, " try (PreparedStatement stmt = conn.prepareStatement(sql)) {
+ "AP_APP_CATEGORY.CATEGORY AS CATEGORY " stmt.setInt(1, tenantId);
+ "FROM AP_APP_CATEGORY " try (ResultSet rs = stmt.executeQuery()) {
+ "WHERE TENANT_ID = ?"; while (rs.next()) {
conn = this.getDBConnection(); CategoryDTO category = new CategoryDTO();
stmt = conn.prepareStatement(sql); category.setId(rs.getInt("ID"));
stmt.setInt(1, tenantId); category.setCategoryName(rs.getString("CATEGORY"));
rs = stmt.executeQuery(); categories.add(category);
}
while(rs.next()){ return categories;
CategoryDTO category = new CategoryDTO(); }
category.setId(rs.getInt("ID"));
category.setCategoryName(rs.getString("CATEGORY"));
categories.add(category);
} }
return categories;
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when getting all categories.";
"Error occurred while obtaining the DB connection when getting categories", e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred while getting categories", e); String msg = "SQL Error occurred while getting all categories. Executed query: " + sql;
} finally { log.error(msg);
DAOUtil.cleanupResources(stmt, rs); throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -711,14 +672,15 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
public List<Integer> getCategoryIdsForCategoryNames(List<String> categoryNames, int tenantId) public List<Integer> getCategoryIdsForCategoryNames(List<String> categoryNames, int tenantId)
throws ApplicationManagementDAOException { throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to get tag ids for given tag names"); log.debug("Request received in DAO Layer to get category ids for given category names");
} }
try { try {
Connection conn = this.getDBConnection(); Connection conn = this.getDBConnection();
int index = 1; int index = 1;
List<Integer> tagIds = new ArrayList<>(); List<Integer> tagIds = new ArrayList<>();
StringJoiner joiner = new StringJoiner(",", StringJoiner joiner = new StringJoiner(",",
"SELECT AP_APP_CATEGORY.ID AS ID FROM AP_APP_CATEGORY WHERE AP_APP_CATEGORY.CATEGORY IN (", ") AND TENANT_ID = ?"); "SELECT AP_APP_CATEGORY.ID AS ID FROM AP_APP_CATEGORY WHERE AP_APP_CATEGORY.CATEGORY IN (",
") AND TENANT_ID = ?");
categoryNames.stream().map(ignored -> "?").forEach(joiner::add); categoryNames.stream().map(ignored -> "?").forEach(joiner::add);
String query = joiner.toString(); String query = joiner.toString();
try (PreparedStatement ps = conn.prepareStatement(query)) { try (PreparedStatement ps = conn.prepareStatement(query)) {
@ -734,17 +696,21 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
} }
return tagIds; return tagIds;
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when getting category ids for given "
"Error occurred while obtaining the DB connection when getting categories", e); + "category names";
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred while getting categories", e); String msg = "SQL Error occurred while getting all categories.";
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@Override @Override
public List<Integer> getDistinctCategoryIdsInCategoryMapping() throws ApplicationManagementDAOException { public List<Integer> getDistinctCategoryIdsInCategoryMapping() throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to get distinct category ids for given tag names"); log.debug("Request received in DAO Layer to get distinct category ids in category mapping.");
} }
try { try {
Connection conn = this.getDBConnection(); Connection conn = this.getDBConnection();
@ -759,12 +725,14 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
} }
return distinctCategoryIds; return distinctCategoryIds;
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when getting distinct category ids in "
"Error occurred while obtaining the DB connection when getting distinct category ids in tag mapping", + "category mapping";
e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException( String msg = "SQL Error occurred while getting distinct category ids in category mapping.";
"Error occurred while getting distinct category ids in tag mapping", e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -773,12 +741,12 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to get category for given category name."); log.debug("Request received in DAO Layer to get category for given category name.");
} }
String sql = "SELECT AP_APP_CATEGORY.ID AS ID "
+ "FROM AP_APP_CATEGORY "
+ "WHERE AP_APP_CATEGORY.CATEGORY = ? AND "
+ "AP_APP_CATEGORY.TENANT_ID = ?";
try { try {
Connection conn = this.getDBConnection(); Connection conn = this.getDBConnection();
String sql = "SELECT AP_APP_CATEGORY.ID AS ID"
+ " FROM AP_APP_CATEGORY "
+ "WHERE AP_APP_CATEGORY.CATEGORY = ? AND "
+ "AP_APP_CATEGORY.TENANT_ID = ?";
try (PreparedStatement ps = conn.prepareStatement(sql)) { try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, categoryName); ps.setString(1, categoryName);
ps.setInt(2, tenantId); ps.setInt(2, tenantId);
@ -789,80 +757,81 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
categoryDTO.setCategoryName(categoryName); categoryDTO.setCategoryName(categoryName);
return categoryDTO; return categoryDTO;
} }
return null;
} }
} }
return null;
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when getting category for given category "
"Error occurred while obtaining the DB connection when getting category Id for given category name", + "name.";
e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException( String msg = "SQL Error occurred while getting category for category name. Executed query " + sql;
"SQL Error occurred while getting category Id for category name.", e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@Override @Override
public void addCategories(List<String> categories, int tenantId) throws ApplicationManagementDAOException { public void addCategories(List<String> categories, int tenantId) throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to add tags"); log.debug("DAO Request received in DAO Layer to add categories.");
} }
Connection conn;
PreparedStatement stmt = null;
String sql = "INSERT INTO AP_APP_CATEGORY " String sql = "INSERT INTO AP_APP_CATEGORY "
+ "(CATEGORY," + "(CATEGORY,"
+ " TENANT_ID) " + " TENANT_ID) "
+ "VALUES (?, ?)"; + "VALUES (?, ?)";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
stmt = conn.prepareStatement(sql); try (PreparedStatement stmt = conn.prepareStatement(sql)) {
for (String category : categories) { for (String category : categories) {
stmt.setString(1, category); stmt.setString(1, category);
stmt.setInt(2, tenantId); stmt.setInt(2, tenantId);
stmt.addBatch(); stmt.addBatch();
}
stmt.executeBatch();
} }
stmt.executeBatch();
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when adding categories.";
"Error occurred while obtaining the DB connection when adding categories.", e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred while adding categories.", e); String msg = "SQL Error occurred while adding categories. Executed query " + sql;
} finally { log.error(msg);
DAOUtil.cleanupResources(stmt, null); throw new ApplicationManagementDAOException(msg, e);
} }
} }
@Override @Override
public void addCategoryMapping (List<Integer> categoryIds, int applicationId, int tenantId) throws ApplicationManagementDAOException { public void addCategoryMapping(List<Integer> categoryIds, int applicationId, int tenantId)
throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to add categories"); log.debug("Request received in DAO Layer to add category mappings");
} }
Connection conn;
PreparedStatement stmt = null;
String sql = "INSERT INTO AP_APP_CATEGORY_MAPPING " String sql = "INSERT INTO AP_APP_CATEGORY_MAPPING "
+ "(AP_APP_CATEGORY_ID, " + "(AP_APP_CATEGORY_ID, "
+ "AP_APP_ID, " + "AP_APP_ID, "
+ " TENANT_ID) " + " TENANT_ID) "
+ "VALUES (?, ?, ?)"; + "VALUES (?, ?, ?)";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
stmt = conn.prepareStatement(sql); try (PreparedStatement stmt = conn.prepareStatement(sql)) {
for (Integer categoryId : categoryIds) { for (Integer categoryId : categoryIds) {
stmt.setInt(1, categoryId); stmt.setInt(1, categoryId);
stmt.setInt(2, applicationId); stmt.setInt(2, applicationId);
stmt.setInt(3, tenantId); stmt.setInt(3, tenantId);
stmt.addBatch(); stmt.addBatch();
}
stmt.executeBatch();
} }
stmt.executeBatch();
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when adding data into category mapping.";
"Error occurred while obtaining the DB connection when adding data into category mapping.", e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred while adding data into category mapping.", e); String msg = "SQL Error occurred while adding data into category mapping.";
} finally { log.error(msg);
DAOUtil.cleanupResources(stmt, null); throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -871,26 +840,28 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to delete Category mappings."); log.debug("Request received in DAO Layer to delete Category mappings.");
} }
Connection conn;
String sql = "DELETE FROM " String sql = "DELETE FROM "
+ "AP_APP_CATEGORY_MAPPING " + "AP_APP_CATEGORY_MAPPING "
+ "WHERE " + "WHERE "
+ "AP_APP_ID = ? AND " + "AP_APP_ID = ? AND "
+ "TENANT_ID = ?"; + "TENANT_ID = ?";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql)){ try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, applicationId); stmt.setInt(1, applicationId);
stmt.setInt(2, tenantId); stmt.setInt(2, tenantId);
stmt.executeUpdate(); stmt.executeUpdate();
} }
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when deleting category mapping of "
"Error occurred while obtaining the DB connection when deleting category mapping of application ID: " + "application ID: " + applicationId;
+ applicationId , e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred when deleting category mapping of application ID: " String msg = "SQL Error occurred when deleting category mapping of application ID: " + applicationId
+ applicationId, e); + " Executed query: " + sql;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -898,16 +869,15 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
public void deleteAppCategories(List<Integer> categoryIds, int applicationId, int tenantId) public void deleteAppCategories(List<Integer> categoryIds, int applicationId, int tenantId)
throws ApplicationManagementDAOException { throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to delete Tag mappings."); log.debug("Request received in DAO Layer to delete application category.");
} }
Connection conn;
String sql = "DELETE FROM " String sql = "DELETE FROM "
+ "AP_APP_CATEGORY_MAPPING WHERE " + "AP_APP_CATEGORY_MAPPING WHERE "
+ "AP_APP_CATEGORY_ID = ? AND " + "AP_APP_CATEGORY_ID = ? AND "
+ "AP_APP_ID = ? AND " + "AP_APP_ID = ? AND "
+ "TENANT_ID = ?"; + "TENANT_ID = ?";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql)){ try (PreparedStatement stmt = conn.prepareStatement(sql)){
for (Integer categoryId : categoryIds){ for (Integer categoryId : categoryIds){
stmt.setInt(1, categoryId); stmt.setInt(1, categoryId);
@ -918,10 +888,13 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
stmt.executeBatch(); stmt.executeBatch();
} }
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when deleting category mapping.";
"Error occurred while obtaining the DB connection when deleting category mapping", e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred when deleting category mapping", e); String msg = "SQL Error occurred when deleting category mapping. Executed query: " + sql;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -930,26 +903,28 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to delete category."); log.debug("Request received in DAO Layer to delete category.");
} }
Connection conn;
String sql = "DELETE FROM " + String sql = "DELETE FROM " +
"AP_APP_CATEGORY " + "AP_APP_CATEGORY " +
"WHERE " + "WHERE " +
"ID = ? AND " + "ID = ? AND " +
"TENANT_ID = ?"; "TENANT_ID = ?";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql)) { try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, categoryId); stmt.setInt(1, categoryId);
stmt.setInt(2, tenantId); stmt.setInt(2, tenantId);
stmt.executeUpdate(); stmt.executeUpdate();
} }
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when deleting category which has ID: "
"Error occurred while obtaining the DB connection when deleting category which has ID: " + categoryId;
+ categoryId, e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException( String msg = "SQL Error occurred when deleting category which has ID: " + categoryId + ". Executed query: "
"Error occurred when deleting category which has ID: " + categoryId, e); + sql;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -958,7 +933,6 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to update a category."); log.debug("Request received in DAO Layer to update a category.");
} }
Connection conn;
String sql = "UPDATE " + String sql = "UPDATE " +
"AP_APP_CATEGORY cat " + "AP_APP_CATEGORY cat " +
"SET cat.CATEGORY = ? " + "SET cat.CATEGORY = ? " +
@ -966,7 +940,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
"cat.ID = ? AND " + "cat.ID = ? AND " +
"cat.TENANT_ID = ?"; "cat.TENANT_ID = ?";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql)) { try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, categoryDTO.getCategoryName()); stmt.setString(1, categoryDTO.getCategoryName());
stmt.setInt(2, categoryDTO.getId()); stmt.setInt(2, categoryDTO.getId());
@ -974,12 +948,15 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
stmt.executeUpdate(); stmt.executeUpdate();
} }
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when updating category which has ID: "
"Error occurred while obtaining the DB connection when updating category which has ID: " + categoryDTO.getId();
+ categoryDTO.getId(), e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred when updating category which has ID: " + categoryDTO.getId() + ". Executed "
"Error occurred when updating category which has ID: " + categoryDTO.getId(), e); + "query: " + sql;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -994,7 +971,8 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
int index = 1; int index = 1;
List<Integer> tagIds = new ArrayList<>(); List<Integer> tagIds = new ArrayList<>();
StringJoiner joiner = new StringJoiner(",", StringJoiner joiner = new StringJoiner(",",
"SELECT AP_APP_TAG.ID AS ID FROM AP_APP_TAG WHERE AP_APP_TAG.TAG IN (", ") AND TENANT_ID = ?"); "SELECT AP_APP_TAG.ID AS ID FROM AP_APP_TAG WHERE AP_APP_TAG.TAG IN (",
") AND TENANT_ID = ?");
tagNames.stream().map(ignored -> "?").forEach(joiner::add); tagNames.stream().map(ignored -> "?").forEach(joiner::add);
String query = joiner.toString(); String query = joiner.toString();
try (PreparedStatement ps = conn.prepareStatement(query)) { try (PreparedStatement ps = conn.prepareStatement(query)) {
@ -1010,17 +988,20 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
} }
return tagIds; return tagIds;
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when getting tag IDs for given tag names.";
"Error occurred while obtaining the DB connection when adding tags", e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred while adding tags", e); String msg = "SQL Error occurred while getting tag IDs for given tag names";
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@Override @Override
public TagDTO getTagForTagName(String tagName, int tenantId) throws ApplicationManagementDAOException { public TagDTO getTagForTagName(String tagName, int tenantId) throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to get tag id for given tag name."); log.debug("Request received in DAO Layer to get tag for given tag name.");
} }
try { try {
Connection conn = this.getDBConnection(); Connection conn = this.getDBConnection();
@ -1042,17 +1023,19 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
} }
return null; return null;
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection when getting tag for given tag name";
"Error occurred while obtaining the DB connection when getting tag Id for given tag name", e); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("SQL Error occurred while getting tag Id for tag name.", e); String msg = "SQL Error occurred while getting tag for tag name.";
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@Override @Override
public List<Integer> getDistinctTagIdsInTagMapping() throws ApplicationManagementDAOException { public List<Integer> getDistinctTagIdsInTagMapping() throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received in DAO Layer to get distinct tag ids for given tag names"); log.debug("Request received in DAO Layer to get distinct tag ids in tag mapping.");
} }
try { try {
Connection conn = this.getDBConnection(); Connection conn = this.getDBConnection();

@ -191,52 +191,51 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
} }
@Override @Override
public Rating getRating(String uuid, int tenantId) throws ApplicationManagementDAOException { public Rating getReleaseRating(String uuid, int tenantId) throws ApplicationManagementDAOException {
Connection connection;
PreparedStatement statement = null;
ResultSet resultSet = null;
Rating rating = null;
String sql = "SELECT " String sql = "SELECT "
+ "RATING, " + "RATING, "
+ "RATED_USERS " + "RATED_USERS "
+ "FROM AP_APP_RELEASE " + "FROM AP_APP_RELEASE "
+ "WHERE UUID = ? AND TENANT_ID = ?"; + "WHERE UUID = ? AND TENANT_ID = ?";
try { try {
connection = this.getDBConnection(); Connection connection = this.getDBConnection();
statement = connection.prepareStatement(sql); try (PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, uuid); statement.setString(1, uuid);
statement.setInt(2, tenantId); statement.setInt(2, tenantId);
resultSet = statement.executeQuery(); try (ResultSet resultSet = statement.executeQuery()) {
if (resultSet.next()) {
if (resultSet.next()) { Rating rating = new Rating();
rating = new Rating(); rating.setRatingValue(resultSet.getDouble("RATING"));
rating.setRatingValue(resultSet.getDouble("RATING")); rating.setNoOfUsers(resultSet.getInt("RATED_USERS"));
rating.setNoOfUsers(resultSet.getInt("RATED_USERS")); return rating;
}
}
} }
return rating; return null;
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Database connection error occured when try to get application release rating which has "
"Database connection exception while trying to update the application release", e); + "application release UUID: " + uuid;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException( String msg = "SQL exception occured whn processing query: " + sql + " to get application release rating "
"SQL exception while updating the release ,while executing the query " + sql, e); + "which has application release uuid: " + uuid;
} finally { log.error(msg);
DAOUtil.cleanupResources(statement, resultSet); throw new ApplicationManagementDAOException(msg, e);
} }
} }
@Override @Override
public List<Double> getReleaseRatings(String uuid, int tenantId) throws ApplicationManagementDAOException { public List<Double> getReleaseRatings(String uuid, int tenantId) throws ApplicationManagementDAOException {
Connection connection;
List<Double> ratingValues = new ArrayList<>(); List<Double> ratingValues = new ArrayList<>();
String sql = "SELECT " String sql = "SELECT "
+ "RATING " + "RATING "
+ "FROM AP_APP_RELEASE " + "FROM AP_APP_RELEASE "
+ "WHERE " + "WHERE "
+ "AP_APP_ID = (SELECT AP_APP_ID FROM AP_APP_RELEASE WHERE UUID = ?) AND " + "AP_APP_ID = (SELECT AP_APP_ID FROM AP_APP_RELEASE WHERE UUID = ?) AND "
+ "TENANT_ID = ?"; + "TENANT_ID = ?";
try { try {
connection = this.getDBConnection(); Connection connection = this.getDBConnection();
try (PreparedStatement statement = connection.prepareStatement(sql)) { try (PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, uuid); statement.setString(1, uuid);
statement.setInt(2, tenantId); statement.setInt(2, tenantId);
@ -247,26 +246,21 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
} }
} }
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Database connection exception occurred when getting all release rating values for a "
"Database connection exception while trying to update the application release", e); + "particular application.";
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException( String msg = "SQL exception occurred while getting all release rating values for a particular application. "
"SQL exception while updating the release ,while executing the query " + sql, e); + "Executed query is" + sql;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
/**
* To insert the application release properties.
*
* @param applicationReleaseDTO ApplicationDTO Release the properties of which that need to be inserted.
* @throws ApplicationManagementDAOException ApplicationDTO Management DAO Exception.
*/
@Override @Override
public ApplicationReleaseDTO updateRelease(ApplicationReleaseDTO applicationReleaseDTO, int tenantId) public ApplicationReleaseDTO updateRelease(ApplicationReleaseDTO applicationReleaseDTO, int tenantId)
throws ApplicationManagementDAOException { throws ApplicationManagementDAOException {
Connection connection;
PreparedStatement statement = null;
String sql = "UPDATE AP_APP_RELEASE " String sql = "UPDATE AP_APP_RELEASE "
+ "SET " + "SET "
+ "DESCRIPTION = ?, " + "DESCRIPTION = ?, "
@ -286,89 +280,95 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
+ "APP_META_INFO = ?, " + "APP_META_INFO = ?, "
+ "SUPPORTED_OS_VERSIONS = ?, " + "SUPPORTED_OS_VERSIONS = ?, "
+ "CURRENT_STATE = ? " + "CURRENT_STATE = ? "
+ "WHERE ID = ? AND TENANT_ID = ? "; + "WHERE ID = ? AND TENANT_ID = ? ";
try { try {
connection = this.getDBConnection(); Connection connection = this.getDBConnection();
statement = connection.prepareStatement(sql); try (PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, applicationReleaseDTO.getDescription()); statement.setString(1, applicationReleaseDTO.getDescription());
statement.setString(2, applicationReleaseDTO.getVersion()); statement.setString(2, applicationReleaseDTO.getVersion());
statement.setString(3, applicationReleaseDTO.getUuid()); statement.setString(3, applicationReleaseDTO.getUuid());
statement.setString(4, applicationReleaseDTO.getReleaseType()); statement.setString(4, applicationReleaseDTO.getReleaseType());
statement.setString(5, applicationReleaseDTO.getPackageName()); statement.setString(5, applicationReleaseDTO.getPackageName());
statement.setDouble(6, applicationReleaseDTO.getPrice()); statement.setDouble(6, applicationReleaseDTO.getPrice());
statement.setString(7, applicationReleaseDTO.getInstallerName()); statement.setString(7, applicationReleaseDTO.getInstallerName());
statement.setString(8, applicationReleaseDTO.getBannerName()); statement.setString(8, applicationReleaseDTO.getBannerName());
statement.setString(9, applicationReleaseDTO.getIconName()); statement.setString(9, applicationReleaseDTO.getIconName());
statement.setString(10, applicationReleaseDTO.getScreenshotName1()); statement.setString(10, applicationReleaseDTO.getScreenshotName1());
statement.setString(11, applicationReleaseDTO.getScreenshotName2()); statement.setString(11, applicationReleaseDTO.getScreenshotName2());
statement.setString(12, applicationReleaseDTO.getScreenshotName3()); statement.setString(12, applicationReleaseDTO.getScreenshotName3());
statement.setString(13, applicationReleaseDTO.getAppHashValue()); statement.setString(13, applicationReleaseDTO.getAppHashValue());
statement.setBoolean(14, applicationReleaseDTO.getIsSharedWithAllTenants()); statement.setBoolean(14, applicationReleaseDTO.getIsSharedWithAllTenants());
statement.setString(15, applicationReleaseDTO.getMetaData()); statement.setString(15, applicationReleaseDTO.getMetaData());
statement.setString(16, applicationReleaseDTO.getSupportedOsVersions()); statement.setString(16, applicationReleaseDTO.getSupportedOsVersions());
statement.setString(17, applicationReleaseDTO.getCurrentState().toUpperCase()); statement.setString(17, applicationReleaseDTO.getCurrentState().toUpperCase());
statement.setInt(18, applicationReleaseDTO.getId()); statement.setInt(18, applicationReleaseDTO.getId());
statement.setInt(19, tenantId); statement.setInt(19, tenantId);
if (statement.executeUpdate() == 0) { if (statement.executeUpdate() == 0) {
return null; return null;
}
} }
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Database connection exception occured while trying to update the application release which "
"Database connection exception while trying to update the application release", e); + "has application release ID: " + applicationReleaseDTO.getId();
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException( String msg = "SQL exception occured while updating the application release which has release ID: "
"SQL exception while updating the release ,while executing the query " + sql, e); + applicationReleaseDTO.getId() + ". Executed query is " + sql;
} finally { log.error(msg);
DAOUtil.cleanupResources(statement, null); throw new ApplicationManagementDAOException(msg, e);
} }
return applicationReleaseDTO; return applicationReleaseDTO;
} }
@Override @Override
public void deleteRelease(int id) throws ApplicationManagementDAOException { public void deleteRelease(int id) throws ApplicationManagementDAOException {
Connection connection;
PreparedStatement statement = null;
String sql = "DELETE " String sql = "DELETE "
+ "FROM AP_APP_RELEASE " + "FROM AP_APP_RELEASE "
+ "WHERE ID = ?"; + "WHERE ID = ?";
try { try {
connection = this.getDBConnection(); Connection connection = this.getDBConnection();
statement = connection.prepareStatement(sql); try (PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setInt(1, id); statement.setInt(1, id);
statement.executeUpdate(); statement.executeUpdate();
}
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Database connection exception occurred while trying to delete the application release which "
"Database connection exception while trying to delete the release fore release ID: " + id, e); + "has ID: " + id;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException( String msg = "SQL exception occurred while deleting the release for release ID: " + id + ",while executing"
"SQL exception while deleting the release for release ID: " + id + ",while executing the query sql" + " the query sql " + sql;
, e); log.error(msg);
} finally { throw new ApplicationManagementDAOException(msg, e);
DAOUtil.cleanupResources(statement, null);
} }
} }
@Override @Override
public void deleteReleases(List<Integer> applicationReleaseIds) throws ApplicationManagementDAOException{ public void deleteReleases(List<Integer> applicationReleaseIds) throws ApplicationManagementDAOException{
Connection connection;
String sql = "DELETE " String sql = "DELETE "
+ "FROM AP_APP_RELEASE " + "FROM AP_APP_RELEASE "
+ "WHERE ID = ?"; + "WHERE ID = ?";
try { try {
connection = this.getDBConnection(); Connection connection = this.getDBConnection();
try (PreparedStatement statement = connection.prepareStatement(sql)){ try (PreparedStatement statement = connection.prepareStatement(sql)) {
for (Integer releaseId : applicationReleaseIds){ for (Integer releaseId : applicationReleaseIds) {
statement.setInt(1, releaseId); statement.setInt(1, releaseId);
statement.addBatch(); statement.addBatch();
} }
statement.executeBatch(); statement.executeBatch();
} }
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Database connection exception occurred while trying to delete application releases for given "
"Database connection exception occurred while trying to delete given application release", e); + "application release ids";
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException( String msg = "SQL exception occurred while execute delete query for deleting given application releases. "
"SQL exception occurred while execute delete query for deleting given application releases.", e); + "Executed query: " + sql;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -378,27 +378,30 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Verifying application release existence by application hash value: " + hashVal); log.debug("Verifying application release existence by application hash value: " + hashVal);
} }
Connection conn; String sql = "SELECT "
PreparedStatement stmt = null; + "AR.ID AS RELEASE_ID "
ResultSet rs = null; + "FROM AP_APP_RELEASE AS AR "
+ "WHERE AR.APP_HASH_VALUE = ? AND "
+ "AR.TENANT_ID = ?";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
String sql = "SELECT AR.ID AS RELEASE_ID FROM AP_APP_RELEASE AS AR WHERE AR.APP_HASH_VALUE = ? AND " try (PreparedStatement stmt = conn.prepareStatement(sql)) {
+ "AR.TENANT_ID = ?;"; stmt.setString(1, hashVal);
stmt.setInt(2, tenantId);
stmt = conn.prepareStatement(sql); try (ResultSet rs = stmt.executeQuery()) {
stmt.setString(1, hashVal); return rs.next();
stmt.setInt(2, tenantId); }
rs = stmt.executeQuery(); }
return rs.next();
} catch (SQLException e) {
throw new ApplicationManagementDAOException(
"Error occurred while getting application release details for application release hash value: "
+ hashVal + " While executing query ", e);
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); String msg = "Database connection error occurred while verifying release existence for app release hash "
} finally { + "value. Hash value: " + hashVal;
DAOUtil.cleanupResources(stmt, rs); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred while getting application release details for application release hash value: "
+ hashVal + " While executing query ";
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -407,69 +410,37 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Getting package name of the application release by application id:" + releaseUuid); log.debug("Getting package name of the application release by application id:" + releaseUuid);
} }
Connection conn; String sql = "SELECT "
+ "AR.PACKAGE_NAME AS PACKAGE_NAME "
+ "FROM AP_APP_RELEASE AS AR "
+ "WHERE AR.UUID = ? "
+ "AND AR.TENANT_ID = ?";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
String sql = "SELECT " try (PreparedStatement stmt = conn.prepareStatement(sql)) {
+ "AR.PACKAGE_NAME AS PACKAGE_NAME "
+ "FROM AP_APP_RELEASE AS AR "
+ "WHERE AR.UUID = ? "
+ "AND AR.TENANT_ID = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)){
stmt.setString(1, releaseUuid); stmt.setString(1, releaseUuid);
stmt.setInt(2, tenantId); stmt.setInt(2, tenantId);
try (ResultSet rs = stmt.executeQuery()){ try (ResultSet rs = stmt.executeQuery()) {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Successfully retrieved package name of the application release with the UUID: " log.debug("Successfully retrieved package name of the application release with the UUID: "
+ releaseUuid); + releaseUuid);
} }
if (rs.next()){ if (rs.next()) {
return rs.getString("PACKAGE_NAME"); return rs.getString("PACKAGE_NAME");
} }
return null; return null;
} }
} }
} catch (SQLException e) {
throw new ApplicationManagementDAOException(
"Error occurred while getting package name of the application release with app ID: " + releaseUuid, e);
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection to get application release package name "
"Error occurred while obtaining the DB connection to get application release package name.", e); + "which has application release UUID: " + releaseUuid;
} log.error(msg);
} throw new ApplicationManagementDAOException(msg, e);
@Override
public boolean isReleaseExist(String uuid, int tenantId) throws ApplicationManagementDAOException {
if (log.isDebugEnabled()) {
log.debug("Verifying application release existence by application release uuid: " + uuid);
}
Connection conn;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = this.getDBConnection();
String sql =
"SELECT AR.ID AS RELEASE_ID FROM AP_APP_RELEASE AS AR WHERE AR.UUID = ? AND AR.TENANT_ID = ?;";
stmt = conn.prepareStatement(sql);
stmt.setString(1, uuid);
stmt.setInt(2, tenantId);
rs = stmt.executeQuery();
if (log.isDebugEnabled()) {
log.debug("Successfully retrieved basic details of the application release with the application UUID: "
+ uuid);
}
return rs.next();
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while getting package name of the application release with app UUID: "
"Error occurred when executing query to get application release details for App release uuid: " + releaseUuid;
+ uuid, e); log.error(msg);
} catch (DBConnectionException e) { throw new ApplicationManagementDAOException(msg, e);
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
} finally {
DAOUtil.cleanupResources(stmt, rs);
} }
} }
@ -478,45 +449,36 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Getting application release artifact stored location paths for: " + uuid); log.debug("Getting application release artifact stored location paths for: " + uuid);
} }
Connection conn; String sql = "SELECT "
PreparedStatement stmt = null; + "AR.APP_HASH_VALUE AS HASH_VALUE "
ResultSet rs = null; + "FROM AP_APP_RELEASE AR "
String releaseHashValue = null; + "WHERE AR.UUID = ? AND AR.TENANT_ID = ?";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
String sql = "SELECT " try (PreparedStatement stmt = conn.prepareStatement(sql)){
+ "AR.APP_HASH_VALUE AS HASH_VALUE " stmt.setString(1, uuid);
+ "FROM AP_APP_RELEASE AR " stmt.setInt(2, tenantId);
+ "WHERE AR.UUID = ? AND AR.TENANT_ID = ?;"; try (ResultSet rs = stmt.executeQuery()){
if (log.isDebugEnabled()) {
stmt = conn.prepareStatement(sql); log.debug("Successfully retrieved application release hash value for application release "
stmt.setString(1, uuid); + "which has release UUID: " + uuid);
stmt.setInt(2, tenantId); }
rs = stmt.executeQuery(); if(rs.next()){
return rs.getString("HASH_VALUE");
if (log.isDebugEnabled()) { }
log.debug( return null;
"Successfully retrieved application release artifact details of the application release with the application UUID: " }
+ uuid);
}
if (rs.getFetchSize() >1){
String msg = "Found more than one application release for UUID: " + uuid;
log.error(msg);
throw new ApplicationManagementDAOException(msg);
}
while(rs.next()){
releaseHashValue = rs.getString("HASH_VALUE");
} }
return releaseHashValue;
} catch (SQLException e) {
throw new ApplicationManagementDAOException(
"Error occurred when executing query to get application release artifact paths for App release uuid: "
+ uuid, e);
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); String msg = "Error occurred while obtaining the DB connection to get hash value for application release "
} finally { + "which has application release UUID: " + uuid;
DAOUtil.cleanupResources(stmt, rs); log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred when executing query to get application release hash value which has "
+ "application release uuid: " + uuid + ". Executed query: " + sql;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -526,13 +488,13 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Verifying application release existence for package name:" + packageName); log.debug("Verifying application release existence for package name:" + packageName);
} }
Connection conn; String sql = "SELECT AR.ID AS RELEASE_ID "
+ "FROM AP_APP_RELEASE AS AR "
+ "WHERE AR.PACKAGE_NAME = ? AND "
+ "AR.CURRENT_STATE != ? AND "
+ "AR.TENANT_ID = ? LIMIT 1";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
String sql = "SELECT AR.ID AS RELEASE_ID "
+ "FROM AP_APP_RELEASE AS AR "
+ "WHERE AR.PACKAGE_NAME = ? AND AR.CURRENT_STATE != ? AND AR.TENANT_ID = ? LIMIT 1";
try (PreparedStatement stmt = conn.prepareStatement(sql)) { try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, packageName); stmt.setString(1, packageName);
stmt.setString(2, inactiveState); stmt.setString(2, inactiveState);
@ -541,11 +503,16 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
return rs.next(); return rs.next();
} }
} }
} catch (SQLException e) {
throw new ApplicationManagementDAOException(
"Error occurred while getting application release details for package name: " + packageName, e);
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); String msg = "Error occurred while obtaining the DB connection to verify the existence of package name for "
+ "active application release. Package name: " + packageName;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "SQL error occurred while verifying the existence of package name for active application "
+ "release. package name: " + packageName;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
@ -555,15 +522,13 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Verifying application release existence in the installable state: :" + installableStateName); log.debug("Verifying application release existence in the installable state: :" + installableStateName);
} }
Connection conn; String sql = "SELECT AR.ID AS RELEASE_ID "
+ "FROM AP_APP_RELEASE AS AR "
+ "WHERE AR.CURRENT_STATE = ? AND "
+ "AR.AP_APP_ID = (SELECT AP_APP_ID FROM AP_APP_RELEASE WHERE UUID = ?) AND "
+ "AR.TENANT_ID = ?";
try { try {
conn = this.getDBConnection(); Connection conn = this.getDBConnection();
String sql = "SELECT AR.ID AS RELEASE_ID "
+ "FROM AP_APP_RELEASE AS AR "
+ "WHERE AR.CURRENT_STATE = ? AND "
+ "AR.AP_APP_ID = (SELECT AP_APP_ID FROM AP_APP_RELEASE WHERE UUID = ?) AND "
+ "AR.TENANT_ID = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) { try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, installableStateName); stmt.setString(1, installableStateName);
stmt.setString(2, releaseUuid); stmt.setString(2, releaseUuid);
@ -572,15 +537,17 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
return rs.next(); return rs.next();
} }
} }
} catch (SQLException e) {
throw new ApplicationManagementDAOException(
"Error occurred while getting application release details in installable state: "
+ installableStateName, e);
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException( String msg = "Error occurred while obtaining the DB connection to verify the existence of app release for "
"Error occurred while obtaining the DB connection to get application release data in installable " + "application release uuid ;" + releaseUuid + " and application release state "
+ "state.", e); + installableStateName;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} catch (SQLException e) {
String msg = "Error occurred while executing SQL to verify the existence of app release for application "
+ "release uuid ;" + releaseUuid + " and application release state " + installableStateName;
log.error(msg);
throw new ApplicationManagementDAOException(msg, e);
} }
} }
}
}

@ -142,7 +142,7 @@ public class ReviewDAOImpl extends AbstractDAOImpl implements ReviewDAO {
} }
@Override @Override
public int updateReview(ReviewDTO reviewDTO, int reviewId, boolean isActiveReview, int tenantId) public ReviewDTO updateReview(ReviewDTO reviewDTO, int reviewId, boolean isActiveReview, int tenantId)
throws ReviewManagementDAOException { throws ReviewManagementDAOException {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Request received to DAO Layer to update the Review which has ID " + reviewId); log.debug("Request received to DAO Layer to update the Review which has ID " + reviewId);
@ -167,7 +167,11 @@ public class ReviewDAOImpl extends AbstractDAOImpl implements ReviewDAO {
statement.setBoolean(4, isActiveReview); statement.setBoolean(4, isActiveReview);
statement.setInt(5, reviewId); statement.setInt(5, reviewId);
statement.setInt(6, tenantId); statement.setInt(6, tenantId);
return statement.executeUpdate(); if (statement.executeUpdate() == 1) {
reviewDTO.setModifiedAt(timestamp);
return reviewDTO;
}
return null;
} }
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
String msg = "Error occured while getting the db connection to update review for review ID: " + reviewId; String msg = "Error occured while getting the db connection to update review for review ID: " + reviewId;

@ -524,7 +524,7 @@ public class ApplicationManagerImpl implements ApplicationManager {
for (ApplicationDTO applicationDTO : appDTOs) { for (ApplicationDTO applicationDTO : appDTOs) {
boolean isSearchingApp = true; boolean isSearchingApp = true;
List<String> filteringTags = filter.getTags(); List<String> filteringTags = filter.getTags();
List<String> filteringCategories = filter.getAppCategories(); List<String> filteringCategories = filter.getCategories();
List<String> filteringUnrestrictedRoles = filter.getUnrestrictedRoles(); List<String> filteringUnrestrictedRoles = filter.getUnrestrictedRoles();
if (!lifecycleStateManager.getEndState().equals(applicationDTO.getStatus())) { if (!lifecycleStateManager.getEndState().equals(applicationDTO.getStatus())) {
@ -2511,15 +2511,17 @@ public class ApplicationManagerImpl implements ApplicationManager {
+ "price is " + price + " for " + applicationSubType + " application."); + "price is " + price + " for " + applicationSubType + " application.");
} }
DeviceType deviceTypeObj = APIUtil.getDeviceTypeData(applicationDTO.getDeviceTypeId()); if (!ApplicationType.WEB_CLIP.toString().equals(appType) && !ApplicationType.WEB_APP.toString()
String supportedOSVersions = applicationReleaseDTO.getSupportedOsVersions(); .equals(appType)) {
if (!ApplicationType.WEB_CLIP.toString().equals(appType) && !ApplicationType.WEB_APP.toString().equals(appType) DeviceType deviceTypeObj = APIUtil.getDeviceTypeData(applicationDTO.getDeviceTypeId());
&& !StringUtils.isEmpty(supportedOSVersions) && !isValidOsVersions( String supportedOSVersions = applicationReleaseDTO.getSupportedOsVersions();
supportedOSVersions, deviceTypeObj.getName())) { if (!StringUtils.isEmpty(supportedOSVersions) && !isValidOsVersions(supportedOSVersions,
String msg = "You are trying to update application release which has invalid or unsupported OS " deviceTypeObj.getName())) {
+ "versions in the supportedOsVersions section. Hence, please re-evaluate the request payload."; String msg = "You are trying to update application release which has invalid or unsupported OS "
log.error(msg); + "versions in the supportedOsVersions section. Hence, please re-evaluate the request payload.";
throw new BadRequestException(msg); log.error(msg);
throw new BadRequestException(msg);
}
} }
} }

@ -272,7 +272,7 @@ public class ReviewManagerImpl implements ReviewManager {
} }
@Override @Override
public boolean updateReview(ReviewWrapper updatingReview, int reviewId, String uuid, public Review updateReview(ReviewWrapper updatingReview, int reviewId, String uuid,
boolean isPrivilegedUser) throws ReviewManagementException, ApplicationManagementException { boolean isPrivilegedUser) throws ReviewManagementException, ApplicationManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
String username = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername(); String username = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
@ -299,6 +299,8 @@ public class ReviewManagerImpl implements ReviewManager {
.calculateRating(updatingReview.getRating(), reviewDTO.getRating(), uuid, tenantId); .calculateRating(updatingReview.getRating(), reviewDTO.getRating(), uuid, tenantId);
new Thread(task).start(); new Thread(task).start();
reviewDTO.setRating(updatingReview.getRating()); reviewDTO.setRating(updatingReview.getRating());
}
if (!reviewDTO.getContent().equals(updatingReview.getContent())) {
reviewDTO.setContent(updatingReview.getContent()); reviewDTO.setContent(updatingReview.getContent());
} }
} else { } else {
@ -310,22 +312,28 @@ public class ReviewManagerImpl implements ReviewManager {
reviewDTO.setContent(updatingReview.getContent()); reviewDTO.setContent(updatingReview.getContent());
} }
if (updateReviewInDB(reviewDTO, reviewId, isActiveReview, tenantId)) { ReviewDTO updatedReviewDTO = updateReviewInDB(reviewDTO, reviewId, isActiveReview, tenantId);
if (updatedReviewDTO != null) {
if (!isActiveReview) { if (!isActiveReview) {
if (addReview(updatingReview, uuid, true) != null) { Review newReview = addReview(updatingReview, uuid, true);
return true; if (newReview != null) {
return newReview;
} else { } else {
if (updateReviewInDB(reviewDTO, reviewId, true, tenantId)) { ReviewDTO restoringReviewDTO = updateReviewInDB(reviewDTO, reviewId, true, tenantId);
return false; if (restoringReviewDTO != null) {
String msg = "Review Updating Status: Adding new Review for application release which has"
+ " UUID: " + uuid + " is failed and the old review is restored.";
log.error(msg);
throw new ApplicationManagementException(msg);
} else { } else {
String msg = "Review Updating Status: Adding new Review for application release which has UUID: " String msg = "Review Updating Status: Adding new Review for application release which has "
+ "" + uuid + " is failed and the old review restoring is also failed."; + "UUID: " + uuid + " is failed and the old review restoring is also failed.";
log.error(msg); log.error(msg);
throw new ApplicationManagementException(msg); throw new ApplicationManagementException(msg);
} }
} }
} }
return true; return reviewDTOToReview(updatedReviewDTO);
} else { } else {
String msg = "Review Updating is failed. Hence please contact the administrator."; String msg = "Review Updating is failed. Hence please contact the administrator.";
log.error(msg); log.error(msg);
@ -333,16 +341,17 @@ public class ReviewManagerImpl implements ReviewManager {
} }
} }
private boolean updateReviewInDB(ReviewDTO reviewDTO, int reviewId, boolean isActiveReview, private ReviewDTO updateReviewInDB(ReviewDTO reviewDTO, int reviewId, boolean isActiveReview,
int tenantId) throws ReviewManagementException, ApplicationManagementException { int tenantId) throws ReviewManagementException, ApplicationManagementException {
try { try {
ConnectionManagerUtil.beginDBTransaction(); ConnectionManagerUtil.beginDBTransaction();
if (this.reviewDAO.updateReview(reviewDTO, reviewId, isActiveReview, tenantId) == 1) { ReviewDTO updatedReviewDTO = this.reviewDAO.updateReview(reviewDTO, reviewId, isActiveReview, tenantId);
if (updatedReviewDTO != null) {
ConnectionManagerUtil.commitDBTransaction(); ConnectionManagerUtil.commitDBTransaction();
return true; return updatedReviewDTO;
} }
ConnectionManagerUtil.rollbackDBTransaction(); ConnectionManagerUtil.rollbackDBTransaction();
return false; return null;
} catch (ReviewManagementDAOException e) { } catch (ReviewManagementDAOException e) {
ConnectionManagerUtil.rollbackDBTransaction(); ConnectionManagerUtil.rollbackDBTransaction();
String msg = "Error occured while getting reviewTmp with reviewTmp id " + reviewId + "."; String msg = "Error occured while getting reviewTmp with reviewTmp id " + reviewId + ".";
@ -626,7 +635,7 @@ public class ReviewManagerImpl implements ReviewManager {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
try { try {
ConnectionManagerUtil.openDBConnection(); ConnectionManagerUtil.openDBConnection();
Rating rating = this.applicationReleaseDAO.getRating(appReleaseUuid, tenantId); Rating rating = this.applicationReleaseDAO.getReleaseRating(appReleaseUuid, tenantId);
if (rating == null) { if (rating == null) {
throw new NotFoundException( throw new NotFoundException(
"Couldn't find rating for application release UUID: " + appReleaseUuid "Couldn't find rating for application release UUID: " + appReleaseUuid
@ -710,7 +719,7 @@ public class ReviewManagerImpl implements ReviewManager {
private void calculateRating(int newRatingVal, int oldRatingVal, String uuid, int tenantId) { private void calculateRating(int newRatingVal, int oldRatingVal, String uuid, int tenantId) {
try { try {
ConnectionManagerUtil.beginDBTransaction(); ConnectionManagerUtil.beginDBTransaction();
Rating rating = this.applicationReleaseDAO.getRating(uuid, tenantId); Rating rating = this.applicationReleaseDAO.getReleaseRating(uuid, tenantId);
if (rating == null) { if (rating == null) {
log.error("Couldn't find rating for application release uuid: " + uuid); log.error("Couldn't find rating for application release uuid: " + uuid);
} else { } else {

@ -88,54 +88,6 @@ scopes = {
public interface ReviewManagementAdminAPI { public interface ReviewManagementAdminAPI {
String SCOPE = "scope"; String SCOPE = "scope";
@PUT
@Path("/{uuid}/{reviewId}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@ApiOperation(
consumes = MediaType.APPLICATION_JSON,
produces = MediaType.APPLICATION_JSON,
httpMethod = "PUT",
value = "Edit a review",
notes = "This will edit the review",
tags = "Review Management",
extensions = {
@Extension(properties = {
@ExtensionProperty(name = SCOPE, value = "perm:admin:app:review:update")
})
}
)
@ApiResponses(
value = {
@ApiResponse(
code = 200,
message = "OK. \n Successfully updated reviewTmp.",
response = Review.class),
@ApiResponse(
code = 400,
message = "Bad Request. \n Invalid request or validation error."),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n Error occurred while updating the new reviewTmp.",
response = ErrorResponse.class)
})
Response updateReview(
@ApiParam(
name = "reviewTmp",
value = "The review that need to be updated.",
required = true)
@Valid ReviewWrapper updatingReview,
@ApiParam(
name = "uuid",
value = "uuid of the application release",
required = true)
@PathParam("uuid") String uuid,
@ApiParam(
name = "reviewId",
value = "review id of the updating reviewTmp.",
required = true)
@PathParam("reviewId") int reviewId);
@DELETE @DELETE
@Path("/{uuid}/{reviewId}") @Path("/{uuid}/{reviewId}")
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)

@ -48,38 +48,6 @@ public class ReviewManagementAdminAPIImpl implements ReviewManagementAdminAPI {
private static Log log = LogFactory.getLog(ReviewManagementAdminAPIImpl.class); private static Log log = LogFactory.getLog(ReviewManagementAdminAPIImpl.class);
//todo remove this API
@Override
@PUT
@Consumes("application/json")
@Path("/{uuid}/{reviewId}")
public Response updateReview(
@ApiParam ReviewWrapper updatingReview,
@PathParam("uuid") String uuid,
@PathParam("reviewId") int reviewId) {
ReviewManager reviewManager = APIUtil.getReviewManager();
try {
if (reviewManager.updateReview(updatingReview, reviewId, uuid, true)) {
return Response.status(Response.Status.OK).entity(updatingReview).build();
} else {
String msg = "Review updating failed. Please contact the administrator";
log.error(msg);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
}
} catch (ReviewManagementException e) {
String msg = "Error occurred while retrieving comments.";
log.error(msg, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
} catch (NotFoundException e) {
String msg = "Couldn't found application release data for UUID " + uuid + " or Review for review ID: " + reviewId;
log.error(msg, e);
return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
} catch (ApplicationManagementException e) {
String msg = "Error occurred when getting application release data for application release UUID:." + uuid;
log.error(msg, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); }
}
@Override @Override
@DELETE @DELETE
@Path("/{uuid}/{reviewId}") @Path("/{uuid}/{reviewId}")
@ -91,7 +59,6 @@ public class ReviewManagementAdminAPIImpl implements ReviewManagementAdminAPI {
try { try {
reviewManager.deleteReview(uuid, reviewId, true); reviewManager.deleteReview(uuid, reviewId, true);
return Response.status(Response.Status.OK).entity("Review is deleted successfully.").build(); return Response.status(Response.Status.OK).entity("Review is deleted successfully.").build();
} catch (NotFoundException e) { } catch (NotFoundException e) {
String msg = "Couldn't found an application review to delete which match with the request."; String msg = "Couldn't found an application review to delete which match with the request.";
log.error(msg, e); log.error(msg, e);

@ -199,8 +199,9 @@ public class ReviewManagementAPIImpl implements ReviewManagementAPI {
@PathParam("reviewId") int reviewId) { @PathParam("reviewId") int reviewId) {
ReviewManager reviewManager = APIUtil.getReviewManager(); ReviewManager reviewManager = APIUtil.getReviewManager();
try { try {
if (reviewManager.updateReview(updatingReview, reviewId, uuid, false)) { Review updatedReview = reviewManager.updateReview(updatingReview, reviewId, uuid, false);
return Response.status(Response.Status.OK).entity(updatingReview).build(); if (updatedReview != null) {
return Response.status(Response.Status.OK).entity(updatedReview).build();
} else { } else {
String msg = "Review updating failed. Please contact the administrator"; String msg = "Review updating failed. Please contact the administrator";
log.error(msg); log.error(msg);
@ -230,12 +231,10 @@ public class ReviewManagementAPIImpl implements ReviewManagementAPI {
public Response deleteReview( public Response deleteReview(
@PathParam("uuid") String uuid, @PathParam("uuid") String uuid,
@PathParam("reviewId") int reviewId) { @PathParam("reviewId") int reviewId) {
ReviewManager reviewManager = APIUtil.getReviewManager(); ReviewManager reviewManager = APIUtil.getReviewManager();
try { try {
reviewManager.deleteReview(uuid, reviewId, false); reviewManager.deleteReview(uuid, reviewId, false);
return Response.status(Response.Status.OK).entity("Review is deleted successfully.").build(); return Response.status(Response.Status.OK).entity("Review is deleted successfully.").build();
} catch (NotFoundException e) { } catch (NotFoundException e) {
String msg = "Couldn't found an application review to delete which match with the request."; String msg = "Couldn't found an application review to delete which match with the request.";
log.error(msg, e); log.error(msg, e);

Loading…
Cancel
Save