Reformat the DAO layer and add application release updating SQL logic

In order to fix DAO issues and improve the logic, modified the DAO layer. Further added generic application release SQL to update application release.
feature/appm-store/pbac
lasantha 7 years ago
parent 1b7451327e
commit 8b505a7741

@ -35,7 +35,7 @@ public interface ApplicationReleaseDAO {
* @return Unique ID of the relevant release. * @return Unique ID of the relevant release.
* @throws ApplicationManagementDAOException Application Management DAO Exception. * @throws ApplicationManagementDAOException Application Management DAO Exception.
*/ */
ApplicationRelease createRelease(ApplicationRelease applicationRelease, int appId) throws ApplicationRelease createRelease(ApplicationRelease applicationRelease, int appId, int tenantId) throws
ApplicationManagementDAOException; ApplicationManagementDAOException;
/** /**
@ -67,11 +67,15 @@ public interface ApplicationReleaseDAO {
/** /**
* To update an Application release. * To update an Application release.
*
* @param applicationRelease ApplicationRelease that need to be updated. * @param applicationRelease ApplicationRelease that need to be updated.
* @param applicationId Id of the application.
* @param tenantId Id of the tenant
* @return the updated Application Release * @return the updated Application Release
* @throws ApplicationManagementDAOException Application Management DAO Exception * @throws ApplicationManagementDAOException Application Management DAO Exception
*/ */
ApplicationRelease updateRelease(ApplicationRelease applicationRelease) throws ApplicationManagementDAOException; ApplicationRelease updateRelease(int applicationId, ApplicationRelease applicationRelease, int tenantId) throws
ApplicationManagementDAOException;
/** /**
* To update an Application release. * To update an Application release.

@ -116,7 +116,7 @@ public class Util {
public static Application loadApplication(ResultSet rs) throws SQLException, JSONException { public static Application loadApplication(ResultSet rs) throws SQLException, JSONException {
Application application = null; Application application = null;
int applicatioId = -1; int applicatioId;
int iteration = 0; int iteration = 0;
while (rs.next()) { while (rs.next()) {
@ -159,7 +159,6 @@ public class Util {
appRelease.setId(rs.getInt("RELEASE_ID")); appRelease.setId(rs.getInt("RELEASE_ID"));
appRelease.setVersion(rs.getString("VERSION")); appRelease.setVersion(rs.getString("VERSION"));
appRelease.setTenantId(rs.getString("TENANT_ID"));
appRelease.setUuid(rs.getString("UUID")); appRelease.setUuid(rs.getString("UUID"));
appRelease.setReleaseType(rs.getString("RELEASE_TYPE")); appRelease.setReleaseType(rs.getString("RELEASE_TYPE"));
appRelease.setPrice(rs.getDouble("APP_PRICE")); appRelease.setPrice(rs.getDouble("APP_PRICE"));
@ -179,6 +178,7 @@ public class Util {
return appRelease; return appRelease;
} }
/** /**
* Cleans up the statement and resultset after executing the query * Cleans up the statement and resultset after executing the query
* *
@ -207,7 +207,8 @@ public class Util {
if (paginationRequest.getLimit() == 0) { if (paginationRequest.getLimit() == 0) {
Configuration commentManagementConfig = ConfigurationManager.getInstance().getConfiguration(); Configuration commentManagementConfig = ConfigurationManager.getInstance().getConfiguration();
if (commentManagementConfig != null) { if (commentManagementConfig != null) {
paginationRequest.setLimit(commentManagementConfig.getPaginationConfiguration().getCommentListPageSize()); paginationRequest.setLimit(
commentManagementConfig.getPaginationConfiguration().getCommentListPageSize());
} else { } else {
throw new CommentManagementException("Device-Mgt configuration has not initialized. Please check the " + throw new CommentManagementException("Device-Mgt configuration has not initialized. Please check the " +
"cdm-config.xml file."); "cdm-config.xml file.");

@ -84,7 +84,8 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
return applicationId; return applicationId;
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection when application creation", e); throw new ApplicationManagementDAOException(
"Error occurred while obtaining the DB connection when application creation", e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred while adding the application", e); throw new ApplicationManagementDAOException("Error occurred while adding the application", e);
} finally { } finally {
@ -113,7 +114,8 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
stmt.executeBatch(); stmt.executeBatch();
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection when adding tags", e); throw new ApplicationManagementDAOException(
"Error occurred while obtaining the DB connection when adding tags", e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred while adding tags", e); throw new ApplicationManagementDAOException("Error occurred while adding tags", e);
} finally { } finally {
@ -146,7 +148,8 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
return isExist; return isExist;
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection when verifying application existence", e); throw new ApplicationManagementDAOException(
"Error occurred while obtaining the DB connection when verifying application existence", e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException("Error occurred while adding unrestricted roles", e); throw new ApplicationManagementDAOException("Error occurred while adding unrestricted roles", e);
} finally { } finally {
@ -167,7 +170,9 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
ApplicationList applicationList = new ApplicationList(); ApplicationList applicationList = new ApplicationList();
Pagination pagination = new Pagination(); Pagination pagination = new Pagination();
String sql = "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY" String sql = "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY"
+ " AS APP_CATEGORY, AP_APP.IS_FREE, AP_APP.RESTRICTED, AP_APP_TAG.TAG AS APP_TAG, AP_UNRESTRICTED_ROLES.ROLE " +
" AS APP_CATEGORY, AP_APP.IS_FREE, AP_APP.RESTRICTED, AP_APP_TAG.TAG AS APP_TAG, " +
"AP_UNRESTRICTED_ROLES.ROLE "
+ "AS APP_UNRESTRICTED_ROLES FROM ((AP_APP LEFT JOIN AP_APP_TAG ON AP_APP.ID = AP_APP_TAG.AP_APP_ID) " + "AS APP_UNRESTRICTED_ROLES FROM ((AP_APP LEFT JOIN AP_APP_TAG ON AP_APP.ID = AP_APP_TAG.AP_APP_ID) "
+ "LEFT JOIN AP_UNRESTRICTED_ROLES ON AP_APP.ID = AP_UNRESTRICTED_ROLES.AP_APP_ID) " + "LEFT JOIN AP_UNRESTRICTED_ROLES ON AP_APP.ID = AP_UNRESTRICTED_ROLES.AP_APP_ID) "
+ "WHERE AP_APP.TENANT_ID = ?"; + "WHERE AP_APP.TENANT_ID = ?";
@ -224,7 +229,8 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
+ " " + tenantId + ". While executing " + sql, e); + " " + tenantId + ". While executing " + sql, e);
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection while " throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection while "
+ "getting application list for the tenant " + tenantId, e); + "getting application list for the tenant " + tenantId,
e);
} catch (JSONException e) { } catch (JSONException e) {
throw new ApplicationManagementDAOException("Error occurred while parsing JSON ", e); throw new ApplicationManagementDAOException("Error occurred while parsing JSON ", e);
} finally { } finally {
@ -325,9 +331,13 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
ResultSet rs = null; ResultSet rs = null;
try { try {
conn = this.getDBConnection(); conn = this.getDBConnection();
String sql = "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY " String sql =
+ "AS APP_CATEGORY, AP_APP.IS_FREE AS IS_FREE, AP_APP.RESTRICTED AS RESTRICTED, AP_APP_TAG.TAG AS " + "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY "
"APP_TAG, AP_UNRESTRICTED_ROLES.ROLE AS AS ROLE FROM AP_APP, AP_APP_TAG, AP_UNRESTRICTED_ROLES " + +
"AS APP_CATEGORY, AP_APP.IS_FREE AS IS_FREE, AP_APP.RESTRICTED AS RESTRICTED, AP_APP_TAG" +
".TAG AS " +
"APP_TAG, AP_UNRESTRICTED_ROLES.ROLE AS AS ROLE FROM AP_APP, AP_APP_TAG, " +
"AP_UNRESTRICTED_ROLES " +
"WHERE AP_APP.NAME=? AND AP_APP.TYPE= ? AND AP_APP.TENANT_ID=?;"; "WHERE AP_APP.NAME=? AND AP_APP.TYPE= ? AND AP_APP.TENANT_ID=?;";
stmt = conn.prepareStatement(sql); stmt = conn.prepareStatement(sql);
@ -345,7 +355,8 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException( throw new ApplicationManagementDAOException(
"Error occurred while getting application details with app name " + appName + " While executing query ", e); "Error occurred while getting application details with app name " + appName +
" While executing query ", e);
} catch (JSONException e) { } catch (JSONException e) {
throw new ApplicationManagementDAOException("Error occurred while parsing JSON", e); throw new ApplicationManagementDAOException("Error occurred while parsing JSON", e);
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
@ -366,9 +377,13 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
ResultSet rs = null; ResultSet rs = null;
try { try {
conn = this.getDBConnection(); conn = this.getDBConnection();
String sql = "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY " + String sql =
"AS APP_CATEGORY, AP_APP.IS_FREE AS IS_FREE, AP_APP.RESTRICTED AS RESTRICTED, AP_APP_TAG.TAG AS APP_TAG, " + "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP" +
"AP_UNRESTRICTED_ROLES.ROLE AS ROLE FROM AP_APP, AP_APP_TAG, AP_UNRESTRICTED_ROLES WHERE AP_APP.ID=?" + ".APP_CATEGORY " +
"AS APP_CATEGORY, AP_APP.IS_FREE AS IS_FREE, AP_APP.RESTRICTED AS RESTRICTED, AP_APP_TAG" +
".TAG AS APP_TAG, " +
"AP_UNRESTRICTED_ROLES.ROLE AS ROLE FROM AP_APP, AP_APP_TAG, AP_UNRESTRICTED_ROLES WHERE " +
"AP_APP.ID=?" +
" AND AP_APP.TENANT_ID=?;"; " AND AP_APP.TENANT_ID=?;";
stmt = conn.prepareStatement(sql); stmt = conn.prepareStatement(sql);
@ -385,7 +400,8 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException( throw new ApplicationManagementDAOException(
"Error occurred while getting application details with app id " + applicationId + " While executing query ", e); "Error occurred while getting application details with app id " + applicationId +
" While executing query ", e);
} catch (JSONException e) { } catch (JSONException e) {
throw new ApplicationManagementDAOException("Error occurred while parsing JSON", e); throw new ApplicationManagementDAOException("Error occurred while parsing JSON", e);
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
@ -406,8 +422,11 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
Boolean isAppExist = false; Boolean isAppExist = false;
try { try {
conn = this.getDBConnection(); conn = this.getDBConnection();
String sql = "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY " String sql =
+ "AS APP_CATEGORY, AP_APP.IS_FREE, AP_APP_TAG.TAG, AP_UNRESTRICTED_ROLES.ROLE AS RELESE_ID FROM " "SELECT AP_APP.ID AS APP_ID, AP_APP.NAME AS APP_NAME, AP_APP.TYPE AS APP_TYPE, AP_APP.APP_CATEGORY "
+
"AS APP_CATEGORY, AP_APP.IS_FREE, AP_APP_TAG.TAG, AP_UNRESTRICTED_ROLES.ROLE AS RELESE_ID" +
" FROM "
+ "AP_APP, AP_APP_TAG, AP_UNRESTRICTED_ROLES WHERE AP_APP.ID=?;"; + "AP_APP, AP_APP_TAG, AP_UNRESTRICTED_ROLES WHERE AP_APP.ID=?;";
stmt = conn.prepareStatement(sql); stmt = conn.prepareStatement(sql);
@ -426,7 +445,8 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
} catch (SQLException e) { } catch (SQLException e) {
throw new ApplicationManagementDAOException( throw new ApplicationManagementDAOException(
"Error occurred while getting application details with app ID " + appId + " While executing query ", e); "Error occurred while getting application details with app ID " + appId + " While executing query ",
e);
} catch (DBConnectionException e) { } catch (DBConnectionException e) {
throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e);
} finally { } finally {
@ -447,14 +467,14 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
conn = this.getDBConnection(); conn = this.getDBConnection();
String sql = "UPDATE AP_APP SET "; String sql = "UPDATE AP_APP SET ";
if (application.getName() != null && !application.getName().equals(existingApplication.getName())) { if (application.getName() != null && !application.getName().equals(existingApplication.getName())) {
sql += "NAME = ?, "; sql += "NAME = ?, ";
} }
if (application.getType() != null && !application.getType().equals(existingApplication.getType())) { if (application.getType() != null && !application.getType().equals(existingApplication.getType())) {
sql += "TYPE = ?, "; sql += "TYPE = ?, ";
} }
if (application.getAppCategory() != null && !application.getAppCategory().equals(existingApplication.getAppCategory())) { if (application.getAppCategory() != null && !application.getAppCategory().equals(
existingApplication.getAppCategory())) {
sql += "APP_CATEGORY = ?, "; sql += "APP_CATEGORY = ?, ";
} }
if (application.getIsRestricted() != existingApplication.getIsRestricted()) { if (application.getIsRestricted() != existingApplication.getIsRestricted()) {
@ -473,7 +493,8 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic
if (application.getType() != null && !application.getType().equals(existingApplication.getType())) { if (application.getType() != null && !application.getType().equals(existingApplication.getType())) {
stmt.setString(2, application.getType()); stmt.setString(2, application.getType());
} }
if (application.getAppCategory() != null && !application.getAppCategory().equals(existingApplication.getAppCategory())) { if (application.getAppCategory() != null && !application.getAppCategory().equals(
existingApplication.getAppCategory())) {
stmt.setString(3, application.getAppCategory()); stmt.setString(3, application.getAppCategory());
} }
if (application.getIsRestricted() != existingApplication.getIsRestricted()) { if (application.getIsRestricted() != existingApplication.getIsRestricted()) {

@ -28,9 +28,11 @@ import org.wso2.carbon.device.application.mgt.core.dao.impl.AbstractDAOImpl;
import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException; import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException;
import java.sql.Connection; import java.sql.Connection;
import java.sql.Date;
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.List; import java.util.List;
@ -44,10 +46,11 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
* *
* @param appId Id of the application * @param appId Id of the application
* @param applicationRelease Application Release the properties of which that need to be inserted. * @param applicationRelease Application Release the properties of which that need to be inserted.
* @param tenantId Tenant Id
* @throws ApplicationManagementDAOException Application Management DAO Exception. * @throws ApplicationManagementDAOException Application Management DAO Exception.
*/ */
@Override @Override
public ApplicationRelease createRelease(ApplicationRelease applicationRelease, int appId) throws public ApplicationRelease createRelease(ApplicationRelease applicationRelease, int appId, int tenantId) throws
ApplicationManagementDAOException { ApplicationManagementDAOException {
Connection connection; Connection connection;
PreparedStatement statement = null; PreparedStatement statement = null;
@ -64,7 +67,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
connection = this.getDBConnection(); connection = this.getDBConnection();
statement = connection.prepareStatement(sql, generatedColumns); statement = connection.prepareStatement(sql, generatedColumns);
statement.setString(++index, applicationRelease.getVersion()); statement.setString(++index, applicationRelease.getVersion());
statement.setString(++index, applicationRelease.getTenantId()); statement.setInt(++index, tenantId);
statement.setString(++index, applicationRelease.getUuid()); statement.setString(++index, applicationRelease.getUuid());
statement.setString(++index, String.valueOf(applicationRelease.getReleaseType())); statement.setString(++index, String.valueOf(applicationRelease.getReleaseType()));
statement.setDouble(++index, applicationRelease.getPrice()); statement.setDouble(++index, applicationRelease.getPrice());
@ -267,22 +270,51 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements
} }
} }
// have to complete
//Todo
/** /**
* To insert the application release properties. * To insert the application release properties.
* *
* @param applicationRelease Application Release the properties of which that need to be inserted. * @param applicationRelease Application Release the properties of which that need to be inserted.
* @throws SQLException SQL Exception. * @throws ApplicationManagementDAOException Application Management DAO Exception.
*/ */
@Override @Override
public ApplicationRelease updateRelease(ApplicationRelease applicationRelease) public ApplicationRelease updateRelease(int applicationId, ApplicationRelease applicationRelease, int tenantId)
throws ApplicationManagementDAOException { throws ApplicationManagementDAOException {
Connection connection;
PreparedStatement statement = null;
String sql = "UPDATE AP_APP_RELEASE SET VERSION = ? AND UUID = ? AND RELEASE_TYPE = ? AND APP_PRICE = ? AND " +
"STORED_LOCATION = ? AND BANNER_LOCATION = ? AND SC_1_LOCATION = ? AND SC_2_LOCATION = ? AND " +
"SC_3_LOCATION = ? AND APP_HASH_VALUE = ? AND SHARED_WITH_ALL_TENANTS = ? AND APP_META_INFO = ? AND " +
"CREATED_BY = ? AND CREATED_AT = ? WHERE AP_APP_ID = ? AND TENANT_ID = ? AND ID = ?;";
try {
connection = this.getDBConnection();
statement = connection.prepareStatement(sql);
statement.setString(1, applicationRelease.getVersion());
statement.setString(2, applicationRelease.getUuid());
statement.setString(3, applicationRelease.getReleaseType());
statement.setDouble(4, applicationRelease.getPrice());
statement.setString(5, applicationRelease.getAppStoredLoc());
statement.setString(6, applicationRelease.getBannerLoc());
statement.setString(7, applicationRelease.getScreenshotLoc1());
statement.setString(8, applicationRelease.getScreenshotLoc2());
statement.setString(9, applicationRelease.getScreenshotLoc3());
statement.setString(10, applicationRelease.getAppHashValue());
statement.setInt(11, applicationRelease.getIsSharedWithAllTenants());
statement.setString(12, applicationRelease.getMetaData());
statement.setString(13, applicationRelease.getApplicationCreator());
statement.setTimestamp(14, new Timestamp(System.currentTimeMillis()));
statement.executeUpdate();
} catch (DBConnectionException e) {
throw new ApplicationManagementDAOException(
"Database connection exception while trying to update the application release", e);
} catch (SQLException e) {
throw new ApplicationManagementDAOException(
"SQL exception while updating the release ,while executing the query " + sql, e);
} finally {
Util.cleanupResources(statement, null);
}
return applicationRelease; return applicationRelease;
} }
//
/** /**
* To delete an application release. * To delete an application release.
* *

Loading…
Cancel
Save