From a1b8632aa46597528af2f13301acbadd12581805 Mon Sep 17 00:00:00 2001 From: lasanthaDLPDS Date: Wed, 15 May 2019 17:18:17 +0530 Subject: [PATCH 1/3] Improve review management --- .../application/mgt/common/ReviewNode.java | 67 ++++++++++ .../application/mgt/core/dao/ReviewDAO.java | 3 + .../ApplicationManagementDAOFactory.java | 2 +- .../GenericApplicationDAOImpl.java | 54 ++++---- .../application/OracleApplicationDAOImpl.java | 14 -- .../GenericApplicationReleaseDAOImpl.java | 42 +++--- .../GenericLifecycleStateDAOImpl.java | 10 +- .../{Review => review}/ReviewDAOImpl.java | 120 ++++++++++-------- .../GenericSubscriptionDAOImpl.java | 15 +-- .../visibility/GenericVisibilityDAOImpl.java | 8 +- .../mgt/core/impl/ApplicationManagerImpl.java | 22 ++-- .../mgt/core/impl/AppmDataHandlerImpl.java | 4 +- .../mgt/core/impl/ReviewManagerImpl.java | 31 +++-- .../core/util/ApplicationManagementUtil.java | 2 +- .../application/mgt/core/util/Constants.java | 2 +- .../common/Util.java => util/DAOUtil.java} | 45 +++++-- 16 files changed, 271 insertions(+), 170 deletions(-) create mode 100644 components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/ReviewNode.java rename components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/{Review => review}/ReviewDAOImpl.java (84%) rename components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/{dao/common/Util.java => util/DAOUtil.java} (90%) diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/ReviewNode.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/ReviewNode.java new file mode 100644 index 0000000000..5a7f9930b7 --- /dev/null +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/ReviewNode.java @@ -0,0 +1,67 @@ +package org.wso2.carbon.device.application.mgt.common; +/* Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. + * + * Entgra (Pvt) Ltd. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import java.util.ArrayList; +import java.util.List; + +public class ReviewNode { + + private T data = null; + + private List> children = new ArrayList<>(); + + private ReviewNode parent = null; + + public ReviewNode(T data) { + this.data = data; + } + + public ReviewNode addChild(ReviewNode child) { + child.setParent(this); + this.children.add(child); + return child; + } + + public void addChildren(List> children) { + children.forEach(each -> each.setParent(this)); + this.children.addAll(children); + } + + public List> getChildren() { + return children; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + private void setParent(ReviewNode parent) { + this.parent = parent; + } + + public ReviewNode getParent() { + return parent; + } + +} \ No newline at end of file diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/ReviewDAO.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/ReviewDAO.java index 9f705d54c9..a77f0a28ef 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/ReviewDAO.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/ReviewDAO.java @@ -94,6 +94,9 @@ import java.util.List; List getAllReviews(String uuid, PaginationRequest request, int tenantId) throws ReviewManagementDAOException; + List getReplyComments(int parentId, PaginationRequest request, int tenantId) + throws ReviewManagementDAOException; + /** * To get list of comments using release id and application id. * @param uuid UUID of the application release diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/ApplicationManagementDAOFactory.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/ApplicationManagementDAOFactory.java index 1aa44c0332..b800a4fd5a 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/ApplicationManagementDAOFactory.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/ApplicationManagementDAOFactory.java @@ -23,7 +23,7 @@ import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.application.mgt.common.exception.UnsupportedDatabaseEngineException; import org.wso2.carbon.device.application.mgt.core.config.ConfigurationManager; import org.wso2.carbon.device.application.mgt.core.dao.*; -import org.wso2.carbon.device.application.mgt.core.dao.impl.Review.ReviewDAOImpl; +import org.wso2.carbon.device.application.mgt.core.dao.impl.review.ReviewDAOImpl; import org.wso2.carbon.device.application.mgt.core.dao.impl.application.GenericApplicationDAOImpl; import org.wso2.carbon.device.application.mgt.core.dao.impl.application.release.GenericApplicationReleaseDAOImpl; import org.wso2.carbon.device.application.mgt.core.dao.impl.application.OracleApplicationDAOImpl; diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java index 0120cccf6b..76dd1c0828 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java @@ -30,7 +30,7 @@ import org.wso2.carbon.device.application.mgt.common.Filter; import org.wso2.carbon.device.application.mgt.common.dto.TagDTO; import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException; import org.wso2.carbon.device.application.mgt.core.dao.ApplicationDAO; -import org.wso2.carbon.device.application.mgt.core.dao.common.Util; +import org.wso2.carbon.device.application.mgt.core.util.DAOUtil; 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.UnexpectedServerErrorException; @@ -90,7 +90,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (SQLException e) { throw new ApplicationManagementDAOException("Error occurred while adding the application", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -120,7 +120,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic throw new ApplicationManagementDAOException( "DB connection error occured while checking whether application exist or not.", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -248,7 +248,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } stmt.setInt(paramIndex, filter.getOffset()); rs = stmt.executeQuery(); - return Util.loadApplications(rs); + return DAOUtil.loadApplications(rs); } catch (SQLException e) { throw new ApplicationManagementDAOException("Error occurred while getting application list for the tenant" + " " + tenantId + ". While executing " + sql, e); @@ -259,7 +259,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (JSONException e) { throw new ApplicationManagementDAOException("Error occurred while parsing JSON ", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -294,7 +294,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection for " + "getting app release id", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -338,7 +338,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (DBConnectionException e) { throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } return count; } @@ -373,7 +373,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic + appType + "and app name " + appName); } - return Util.loadApplication(rs); + return DAOUtil.loadApplication(rs); } catch (SQLException e) { throw new ApplicationManagementDAOException( @@ -386,7 +386,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (UnexpectedServerErrorException e) { throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -416,7 +416,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic log.debug("Successfully retrieved basic details of the application with the id:" + id); } - return Util.loadApplication(rs); + return DAOUtil.loadApplication(rs); } catch (SQLException e) { throw new ApplicationManagementDAOException( @@ -429,7 +429,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (UnexpectedServerErrorException e) { throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -490,7 +490,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic + releaseUuid); } - return Util.loadApplication(rs); + return DAOUtil.loadApplication(rs); } catch (SQLException e) { throw new ApplicationManagementDAOException( @@ -503,7 +503,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (UnexpectedServerErrorException e) { throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -562,7 +562,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic log.debug("Successfully retrieved basic details of the application with the id " + applicationId); } - return Util.loadApplication(rs); + return DAOUtil.loadApplication(rs); } catch (SQLException e) { throw new ApplicationManagementDAOException( "Error occurred while getting application details with app id " + applicationId + @@ -574,7 +574,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (UnexpectedServerErrorException e) { throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -607,7 +607,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (DBConnectionException e) { throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -662,7 +662,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (SQLException e) { throw new ApplicationManagementDAOException("Error occurred while deleting the application: ", e); } finally { - Util.cleanupResources(stmt, null); + DAOUtil.cleanupResources(stmt, null); } } @@ -693,7 +693,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (SQLException e) { throw new ApplicationManagementDAOException("Error occurred while adding tags", e); } finally { - Util.cleanupResources(stmt, null); + DAOUtil.cleanupResources(stmt, null); } } @@ -730,7 +730,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (SQLException e) { throw new ApplicationManagementDAOException("Error occurred while adding tags", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -767,7 +767,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (SQLException e) { throw new ApplicationManagementDAOException("Error occurred while getting categories", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -859,7 +859,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (SQLException e) { throw new ApplicationManagementDAOException("Error occurred while adding categories.", e); } finally { - Util.cleanupResources(stmt, null); + DAOUtil.cleanupResources(stmt, null); } } @@ -892,7 +892,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (SQLException e) { throw new ApplicationManagementDAOException("Error occurred while adding data into category mapping.", e); } finally { - Util.cleanupResources(stmt, null); + DAOUtil.cleanupResources(stmt, null); } } @@ -1101,7 +1101,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (SQLException e) { throw new ApplicationManagementDAOException("Error occurred while adding tags", e); } finally { - Util.cleanupResources(stmt, null); + DAOUtil.cleanupResources(stmt, null); } } @@ -1459,7 +1459,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic throw new ApplicationManagementDAOException( "Error occurred while deleting tags of application: " + applicationId, e); } finally { - Util.cleanupResources(stmt, null); + DAOUtil.cleanupResources(stmt, null); } } @@ -1497,7 +1497,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic ApplicationDTO application = null; while (rs.next()) { - ApplicationReleaseDTO appRelease = Util.loadApplicationRelease(rs); + ApplicationReleaseDTO appRelease = DAOUtil.loadApplicationRelease(rs); application = new ApplicationDTO(); application.setId(rs.getInt("APP_ID")); @@ -1528,7 +1528,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (DBConnectionException e) { throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -1557,7 +1557,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic } catch (SQLException e) { throw new ApplicationManagementDAOException("Error occurred while getting application List", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/OracleApplicationDAOImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/OracleApplicationDAOImpl.java index 0e49ea4a06..56432d8db0 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/OracleApplicationDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/OracleApplicationDAOImpl.java @@ -21,20 +21,6 @@ package org.wso2.carbon.device.application.mgt.core.dao.impl.application; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.json.JSONException; -import org.wso2.carbon.device.application.mgt.common.AppLifecycleState; -import org.wso2.carbon.device.application.mgt.common.ApplicationList; -import org.wso2.carbon.device.application.mgt.common.Filter; -import org.wso2.carbon.device.application.mgt.common.Pagination; -import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException; -import org.wso2.carbon.device.application.mgt.core.dao.common.Util; -import org.wso2.carbon.device.application.mgt.core.dao.impl.application.GenericApplicationDAOImpl; -import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; /** * This is a ApplicationDAO Implementation specific to Oracle. diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/release/GenericApplicationReleaseDAOImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/release/GenericApplicationReleaseDAOImpl.java index 808d1603df..df590f2a13 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/release/GenericApplicationReleaseDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/release/GenericApplicationReleaseDAOImpl.java @@ -21,13 +21,11 @@ package org.wso2.carbon.device.application.mgt.core.dao.impl.application.release import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.application.mgt.common.AppLifecycleState; import org.wso2.carbon.device.application.mgt.common.dto.ApplicationReleaseDTO; -import org.wso2.carbon.device.application.mgt.common.ApplicationReleaseArtifactPaths; import org.wso2.carbon.device.application.mgt.common.Rating; import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException; import org.wso2.carbon.device.application.mgt.core.dao.ApplicationReleaseDAO; -import org.wso2.carbon.device.application.mgt.core.dao.common.Util; +import org.wso2.carbon.device.application.mgt.core.util.DAOUtil; import org.wso2.carbon.device.application.mgt.core.dao.impl.AbstractDAOImpl; import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException; @@ -118,7 +116,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements throw new ApplicationManagementDAOException( "Database Connection Exception while trying to release a new version", e); } finally { - Util.cleanupResources(statement, resultSet); + DAOUtil.cleanupResources(statement, resultSet); } } @@ -160,7 +158,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements resultSet = statement.executeQuery(); if (resultSet.next()) { - return Util.loadApplicationRelease(resultSet); + return DAOUtil.loadApplicationRelease(resultSet); } return null; } catch (DBConnectionException e) { @@ -170,7 +168,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements throw new ApplicationManagementDAOException( "Error while getting release details of the application " + applicationName + " and version " + versionName + " , while executing the query " + sql, e); } finally { - Util.cleanupResources(statement, resultSet); + DAOUtil.cleanupResources(statement, resultSet); } } @@ -207,7 +205,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements resultSet = statement.executeQuery(); if (resultSet.next()) { - return Util.loadApplicationRelease(resultSet); + return DAOUtil.loadApplicationRelease(resultSet); } return null; } catch (DBConnectionException e) { @@ -219,7 +217,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements "Error while getting release details of the application id: " + applicationId + " and theUUID of the application " + "release: " + releaseUuid + " , while executing the query " + sql, e); } finally { - Util.cleanupResources(statement, resultSet); + DAOUtil.cleanupResources(statement, resultSet); } } @@ -255,7 +253,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements statement.setInt(2, tenantId); try (ResultSet resultSet = statement.executeQuery()) { if (resultSet.next()) { - return Util.loadAppRelease(resultSet); + return DAOUtil.loadAppRelease(resultSet); } return null; } @@ -299,7 +297,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements resultSet = statement.executeQuery(); while (resultSet.next()) { - ApplicationReleaseDTO applicationRelease = Util.loadApplicationRelease(resultSet); + ApplicationReleaseDTO applicationRelease = DAOUtil.loadApplicationRelease(resultSet); applicationReleases.add(applicationRelease); } return applicationReleases; @@ -311,7 +309,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements "Error while getting all the release details of the app ID: " + applicationId + ", while executing the query " + sql, e); } finally { - Util.cleanupResources(statement, resultSet); + DAOUtil.cleanupResources(statement, resultSet); } } @@ -342,7 +340,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements resultSet = statement.executeQuery(); while (resultSet.next()) { - ApplicationReleaseDTO appRelease = Util.loadApplicationRelease(resultSet); + ApplicationReleaseDTO appRelease = DAOUtil.loadApplicationRelease(resultSet); applicationReleases.add(appRelease); } return applicationReleases; @@ -354,7 +352,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements "Error while getting all the release details of the app id" + appId + " application" + ", while executing the query " + sql, e); } finally { - Util.cleanupResources(statement, resultSet); + DAOUtil.cleanupResources(statement, resultSet); } } @@ -384,7 +382,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements throw new ApplicationManagementDAOException( "SQL exception while updating the release rating value ,while executing the query " + sql, e); } finally { - Util.cleanupResources(statement, null); + DAOUtil.cleanupResources(statement, null); } } @@ -420,7 +418,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements throw new ApplicationManagementDAOException( "SQL exception while updating the release ,while executing the query " + sql, e); } finally { - Util.cleanupResources(statement, resultSet); + DAOUtil.cleanupResources(statement, resultSet); } } @@ -487,7 +485,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements throw new ApplicationManagementDAOException( "SQL exception while updating the release ,while executing the query " + sql, e); } finally { - Util.cleanupResources(statement, null); + DAOUtil.cleanupResources(statement, null); } return applicationReleaseDTO; } @@ -512,7 +510,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements "SQL exception while deleting the release for release ID: " + id + ",while executing the query sql" , e); } finally { - Util.cleanupResources(statement, null); + DAOUtil.cleanupResources(statement, null); } } @@ -566,7 +564,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements } catch (DBConnectionException e) { throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -603,7 +601,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements throw new ApplicationManagementDAOException( "Error occurred while obtaining the DB connection to get application release package name.", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -640,7 +638,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements } catch (DBConnectionException e) { throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -674,7 +672,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements } catch (DBConnectionException e) { throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -721,7 +719,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements } catch (DBConnectionException e) { throw new ApplicationManagementDAOException("Error occurred while obtaining the DB connection.", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/lifecyclestate/GenericLifecycleStateDAOImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/lifecyclestate/GenericLifecycleStateDAOImpl.java index 73b1951b06..0673e1cb31 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/lifecyclestate/GenericLifecycleStateDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/lifecyclestate/GenericLifecycleStateDAOImpl.java @@ -24,7 +24,7 @@ import org.wso2.carbon.device.application.mgt.common.AppLifecycleState; import org.wso2.carbon.device.application.mgt.common.LifecycleState; import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException; import org.wso2.carbon.device.application.mgt.core.dao.LifecycleStateDAO; -import org.wso2.carbon.device.application.mgt.core.dao.common.Util; +import org.wso2.carbon.device.application.mgt.core.util.DAOUtil; import org.wso2.carbon.device.application.mgt.core.dao.impl.AbstractDAOImpl; import org.wso2.carbon.device.application.mgt.core.exception.LifeCycleManagementDAOException; @@ -64,7 +64,7 @@ public class GenericLifecycleStateDAOImpl extends AbstractDAOImpl implements Lif throw new LifeCycleManagementDAOException("Error occurred while obtaining the DB connection to get latest" + " lifecycle state for a specific application", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -89,7 +89,7 @@ public class GenericLifecycleStateDAOImpl extends AbstractDAOImpl implements Lif throw new LifeCycleManagementDAOException("Error occurred while obtaining the DB connection to get latest" + " lifecycle state for a specific application", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -120,7 +120,7 @@ public class GenericLifecycleStateDAOImpl extends AbstractDAOImpl implements Lif throw new LifeCycleManagementDAOException("Error occurred while obtaining the DB connection to get latest" + " lifecycle state for a specific application", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -199,7 +199,7 @@ public class GenericLifecycleStateDAOImpl extends AbstractDAOImpl implements Lif log.error("Error occurred while adding lifecycle: " + state.getCurrentState(), e); throw new LifeCycleManagementDAOException("Error occurred while adding lifecycle: " + state.getCurrentState(), e); } finally { - Util.cleanupResources(stmt, null); + DAOUtil.cleanupResources(stmt, null); } } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/Review/ReviewDAOImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/review/ReviewDAOImpl.java similarity index 84% rename from components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/Review/ReviewDAOImpl.java rename to components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/review/ReviewDAOImpl.java index e4aa49099d..4581c6ee1b 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/Review/ReviewDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/review/ReviewDAOImpl.java @@ -16,20 +16,21 @@ * under the License. * */ -package org.wso2.carbon.device.application.mgt.core.dao.impl.Review; +package org.wso2.carbon.device.application.mgt.core.dao.impl.review; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.application.mgt.common.ReviewTmp; import org.wso2.carbon.device.application.mgt.common.PaginationRequest; import org.wso2.carbon.device.application.mgt.common.dto.ReviewDTO; import org.wso2.carbon.device.application.mgt.common.exception.ReviewManagementException; import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException; import org.wso2.carbon.device.application.mgt.core.dao.ReviewDAO; -import org.wso2.carbon.device.application.mgt.core.dao.common.Util; +import org.wso2.carbon.device.application.mgt.core.exception.UnexpectedServerErrorException; +import org.wso2.carbon.device.application.mgt.core.util.DAOUtil; import org.wso2.carbon.device.application.mgt.core.dao.impl.AbstractDAOImpl; import org.wso2.carbon.device.application.mgt.core.exception.ReviewManagementDAOException; +import org.wso2.carbon.device.application.mgt.core.util.Constants; import java.sql.SQLException; import java.sql.ResultSet; @@ -165,7 +166,7 @@ public class ReviewDAOImpl extends AbstractDAOImpl implements ReviewDAO { } catch (DBConnectionException e) { throw new ReviewManagementDAOException("Error occured while getting the db connection to update reviewTmp"); } finally { - Util.cleanupResources(statement, rs); + DAOUtil.cleanupResources(statement, rs); } } @@ -194,27 +195,17 @@ public class ReviewDAOImpl extends AbstractDAOImpl implements ReviewDAO { statement = conn.prepareStatement(sql); statement.setInt(1, reviewId); rs = statement.executeQuery(); - if (rs.next()) { - ReviewDTO reviewDTO = new ReviewDTO(); - reviewDTO.setId(rs.getInt("ID")); - reviewDTO.setContent(rs.getString("COMMENT")); - reviewDTO.setCreatedAt(rs.getTimestamp("CREATED_AT")); - reviewDTO.setModifiedAt(rs.getTimestamp("MODIFIED_AT")); - reviewDTO.setRating(rs.getInt("RATING")); - reviewDTO.setRootParentId(rs.getInt("ROOT_PARENT_ID")); - reviewDTO.setImmediateParentId(rs.getInt("IMMEDIATE_PARENT_ID")); - reviewDTO.setUsername(rs.getString("USERNAME")); - return reviewDTO; - } - return null; + return DAOUtil.loadReview(rs); } catch (SQLException e) { throw new ReviewManagementDAOException( "SQL Error occurred while retrieving information of the reviewTmp " + reviewId, e); } catch (DBConnectionException e) { throw new ReviewManagementDAOException( "DB Connection Exception occurred while retrieving information of the reviewTmp " + reviewId, e); + } catch (UnexpectedServerErrorException e) { + throw new ReviewManagementDAOException("Found more than one review for review ID: " + reviewId, e); } finally { - Util.cleanupResources(statement, rs); + DAOUtil.cleanupResources(statement, rs); } } @@ -244,27 +235,17 @@ public class ReviewDAOImpl extends AbstractDAOImpl implements ReviewDAO { statement.setInt(1, reviewId); statement.setInt(2, appReleaseId); rs = statement.executeQuery(); - if (rs.next()) { - ReviewDTO reviewDTO = new ReviewDTO(); - reviewDTO.setId(rs.getInt("ID")); - reviewDTO.setContent(rs.getString("COMMENT")); - reviewDTO.setCreatedAt(rs.getTimestamp("CREATED_AT")); - reviewDTO.setModifiedAt(rs.getTimestamp("MODIFIED_AT")); - reviewDTO.setRating(rs.getInt("RATING")); - reviewDTO.setRootParentId(rs.getInt("ROOT_PARENT_ID")); - reviewDTO.setImmediateParentId(rs.getInt("IMMEDIATE_PARENT_ID")); - reviewDTO.setUsername(rs.getString("USERNAME")); - return reviewDTO; - } - return null; + return DAOUtil.loadReview(rs); } catch (SQLException e) { throw new ReviewManagementDAOException( "SQL Error occurred while retrieving information of the reviewTmp " + reviewId, e); } catch (DBConnectionException e) { throw new ReviewManagementDAOException( "DB Connection Exception occurred while retrieving information of the reviewTmp " + reviewId, e); + } catch (UnexpectedServerErrorException e) { + throw new ReviewManagementDAOException("Found more than one review for review ID: " + reviewId, e); } finally { - Util.cleanupResources(statement, rs); + DAOUtil.cleanupResources(statement, rs); } } @@ -277,8 +258,6 @@ public class ReviewDAOImpl extends AbstractDAOImpl implements ReviewDAO { log.debug("Getting comment of the application release (" + uuid + ") from the database"); } Connection conn; - PreparedStatement statement = null; - ResultSet rs = null; List reviewDTOs = new ArrayList<>(); try { conn = this.getDBConnection(); @@ -297,32 +276,67 @@ public class ReviewDAOImpl extends AbstractDAOImpl implements ReviewDAO { + "AP_APP_RELEASE.UUID = ? AND " + "AP_APP_REVIEW.TENANT_ID = ? AND " + "AP_APP_REVIEW.TENANT_ID = AP_APP_RELEASE.TENANT_ID " + + "LIMIT ? OFFSET ?"; + try (PreparedStatement statement = conn.prepareStatement(sql)) { + statement.setString(1, uuid); + statement.setInt(2, tenantId); + statement.setInt(3, request.getLimit()); + statement.setInt(4, request.getOffSet()); + try (ResultSet rs = statement.executeQuery()) { + reviewDTOs = DAOUtil.loadReviews(rs); + } + } + } catch (DBConnectionException e) { + throw new ReviewManagementDAOException( + "Error occurred while obtaining the DB connection when verifying application existence", e); + } catch (SQLException e) { + throw new ReviewManagementDAOException("DB connection error occurred while getting all reviewTmps", e); + } return reviewDTOs; + } + + @Override + public List getReplyComments(int parentId, PaginationRequest request, int tenantId) + throws ReviewManagementDAOException { + + if (log.isDebugEnabled()) { + log.debug("Getting comment of the application release (" + parentId + ") from the database"); + } + Connection conn; + PreparedStatement statement = null; + ResultSet rs = null; + List reviewDTOs = new ArrayList<>(); + try { + conn = this.getDBConnection(); + sql = "SELECT " + + "AP_APP_REVIEW.ID AS ID, " + + "AP_APP_REVIEW.COMMENT AS COMMENT, " + + "AP_APP_REVIEW.CREATED_AT AS CREATED_AT, " + + "AP_APP_REVIEW.MODIFIED_AT AS MODIFIED_AT, " + + "AP_APP_REVIEW.USERNAME AS USERNAME, " + + "AP_APP_REVIEW.PARENT_ID AS ROOT_PARENT_ID, " + + "AP_APP_REVIEW.REVIEW_TYPE AS IMMEDIATE_PARENT_ID, " + + "AP_APP_REVIEW.RATING AS RATING " + + "FROM AP_APP_REVIEW, AP_APP_RELEASE " + + "WHERE " + + "AP_APP_REVIEW.AP_APP_RELEASE_ID=AP_APP_RELEASE.ID AND " + + "AP_APP_RELEASE.PARENT_ID = ? AND " + + "AP_APP_REVIEW.TENANT_ID = ? AND " + + "AP_APP_REVIEW.AP_APP_RELEASE_ID = AP_APP_RELEASE.ID " + "LIMIT ? OFFSET ?;"; statement = conn.prepareStatement(sql); - statement.setString(1, uuid); + statement.setInt(1, parentId); statement.setInt(2, tenantId); statement.setInt(3, request.getLimit()); statement.setInt(4, request.getOffSet()); rs = statement.executeQuery(); - while (rs.next()) { - ReviewDTO reviewDTO = new ReviewDTO(); - reviewDTO.setId(rs.getInt("ID")); - reviewDTO.setContent(rs.getString("COMMENT")); - reviewDTO.setCreatedAt(rs.getTimestamp("CREATED_AT")); - reviewDTO.setModifiedAt(rs.getTimestamp("MODIFIED_AT")); - reviewDTO.setRootParentId(rs.getInt("ROOT_PARENT_ID")); - reviewDTO.setImmediateParentId(rs.getInt("IMMEDIATE_PARENT_ID")); - reviewDTO.setUsername(rs.getString("USERNAME")); - reviewDTO.setRating(rs.getInt("RATING")); - reviewDTOs.add(reviewDTO); - } + reviewDTOs = DAOUtil.loadReviews(rs); } catch (DBConnectionException e) { throw new ReviewManagementDAOException( "Error occurred while obtaining the DB connection when verifying application existence", e); } catch (SQLException e) { throw new ReviewManagementDAOException("DB connection error occurred while getting all reviewTmps", e); }finally { - Util.cleanupResources(statement, rs); + DAOUtil.cleanupResources(statement, rs); } return reviewDTOs; } @@ -358,7 +372,7 @@ public class ReviewDAOImpl extends AbstractDAOImpl implements ReviewDAO { "Error occured while getting DB connection to retrieve all rating values for the application release. App release UUID: " + uuid, e); } finally { - Util.cleanupResources(statement, rs); + DAOUtil.cleanupResources(statement, rs); } return reviews; } @@ -392,7 +406,7 @@ public class ReviewDAOImpl extends AbstractDAOImpl implements ReviewDAO { } catch (DBConnectionException e) { throw new ReviewManagementDAOException("DB Connection Exception occurred while retrieving review counts", e); } finally { - Util.cleanupResources(statement, rs); + DAOUtil.cleanupResources(statement, rs); } return commentCount; } @@ -421,7 +435,7 @@ public class ReviewDAOImpl extends AbstractDAOImpl implements ReviewDAO { commentCount = rs.getInt("COMMENT_COUNT"); } } finally { - Util.cleanupResources(statement, rs); + DAOUtil.cleanupResources(statement, rs); } return commentCount; } @@ -443,7 +457,7 @@ public class ReviewDAOImpl extends AbstractDAOImpl implements ReviewDAO { throw new ReviewManagementDAOException("Error occured while getting the database connection", e); } finally { - Util.cleanupResources(statement, null); + DAOUtil.cleanupResources(statement, null); } } @@ -471,7 +485,7 @@ public class ReviewDAOImpl extends AbstractDAOImpl implements ReviewDAO { } catch (SQLException e) { throw new ReviewManagementException("SQL Error occurred while deleting comments", e); } finally { - Util.cleanupResources(statement, null); + DAOUtil.cleanupResources(statement, null); } } } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/subscription/GenericSubscriptionDAOImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/subscription/GenericSubscriptionDAOImpl.java index 7eeb71046c..b59ca1f7b2 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/subscription/GenericSubscriptionDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/subscription/GenericSubscriptionDAOImpl.java @@ -19,15 +19,12 @@ package org.wso2.carbon.device.application.mgt.core.dao.impl.subscription; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.json.JSONException; -import org.wso2.carbon.device.application.mgt.common.dto.ApplicationDTO; import org.wso2.carbon.device.application.mgt.common.dto.DeviceSubscriptionDTO; import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException; import org.wso2.carbon.device.application.mgt.core.dao.SubscriptionDAO; -import org.wso2.carbon.device.application.mgt.core.dao.common.Util; +import org.wso2.carbon.device.application.mgt.core.util.DAOUtil; 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.UnexpectedServerErrorException; import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup; @@ -70,7 +67,7 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc throw new ApplicationManagementDAOException("Error occurred while adding device application mapping to DB", e); } finally { - Util.cleanupResources(stmt, null); + DAOUtil.cleanupResources(stmt, null); } } @@ -104,7 +101,7 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc throw new ApplicationManagementDAOException("Error occurred while adding device application mapping to DB", e); } finally { - Util.cleanupResources(stmt, null); + DAOUtil.cleanupResources(stmt, null); } } @@ -137,7 +134,7 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc throw new ApplicationManagementDAOException("Error occurred while adding device application mapping to DB", e); } finally { - Util.cleanupResources(stmt, null); + DAOUtil.cleanupResources(stmt, null); } } @@ -170,7 +167,7 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc throw new ApplicationManagementDAOException("Error occurred while adding device application mapping to DB", e); } finally { - Util.cleanupResources(stmt, null); + DAOUtil.cleanupResources(stmt, null); } } @@ -203,7 +200,7 @@ public class GenericSubscriptionDAOImpl extends AbstractDAOImpl implements Subsc log.debug("Successfully retrieved device subscriptions for application release id " + appReleaseId); } - return Util.loadDeviceSubscriptions(rs); + return DAOUtil.loadDeviceSubscriptions(rs); } } } catch (SQLException e) { diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/visibility/GenericVisibilityDAOImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/visibility/GenericVisibilityDAOImpl.java index 26f88165b0..c37949dbf3 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/visibility/GenericVisibilityDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/visibility/GenericVisibilityDAOImpl.java @@ -21,7 +21,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException; import org.wso2.carbon.device.application.mgt.core.dao.VisibilityDAO; -import org.wso2.carbon.device.application.mgt.core.dao.common.Util; +import org.wso2.carbon.device.application.mgt.core.util.DAOUtil; import org.wso2.carbon.device.application.mgt.core.dao.impl.AbstractDAOImpl; import org.wso2.carbon.device.application.mgt.core.exception.VisibilityManagementDAOException; @@ -66,7 +66,7 @@ public class GenericVisibilityDAOImpl extends AbstractDAOImpl implements Visibil }catch (SQLException e) { throw new VisibilityManagementDAOException("Error occurred while adding unrestricted roles", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -100,7 +100,7 @@ public class GenericVisibilityDAOImpl extends AbstractDAOImpl implements Visibil }catch (SQLException e) { throw new VisibilityManagementDAOException("Error occurred while adding unrestricted roles", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } @@ -167,7 +167,7 @@ public class GenericVisibilityDAOImpl extends AbstractDAOImpl implements Visibil }catch (SQLException e) { throw new VisibilityManagementDAOException("Error occurred while adding unrestricted roles", e); } finally { - Util.cleanupResources(stmt, rs); + DAOUtil.cleanupResources(stmt, rs); } } } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java index c29040d809..fc8f1ce530 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java @@ -65,7 +65,7 @@ import org.wso2.carbon.device.application.mgt.core.dao.LifecycleStateDAO; import org.wso2.carbon.device.application.mgt.core.dao.SubscriptionDAO; import org.wso2.carbon.device.application.mgt.core.dao.VisibilityDAO; import org.wso2.carbon.device.application.mgt.core.dao.common.ApplicationManagementDAOFactory; -import org.wso2.carbon.device.application.mgt.core.dao.common.Util; +import org.wso2.carbon.device.application.mgt.core.util.DAOUtil; import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException; import org.wso2.carbon.device.application.mgt.core.exception.BadRequestException; import org.wso2.carbon.device.application.mgt.core.exception.ForbiddenException; @@ -251,7 +251,7 @@ public class ApplicationManagerImpl implements ApplicationManager { } //insert application data into databse - ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager(); + ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager(); ApplicationReleaseDTO applicationReleaseDTO = applicationDTO.getApplicationReleaseDTOs().get(0); try { List applicationReleaseEntities = new ArrayList<>(); @@ -379,7 +379,7 @@ public class ApplicationManagerImpl implements ApplicationManager { } private void deleteApplicationArtifacts(List directoryPaths) throws ApplicationManagementException { - ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager(); + ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager(); try { applicationStorageManager.deleteAllApplicationReleaseArtifacts(directoryPaths); @@ -395,7 +395,7 @@ public class ApplicationManagerImpl implements ApplicationManager { ApplicationReleaseDTO applicationReleaseDTO, ApplicationArtifact applicationArtifact, boolean isNewRelease) throws ResourceManagementException, ApplicationManagementException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); - ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager(); + ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager(); String uuid = UUID.randomUUID().toString(); applicationReleaseDTO.setUuid(uuid); @@ -478,7 +478,7 @@ public class ApplicationManagerImpl implements ApplicationManager { ApplicationReleaseDTO applicationReleaseDTO, ApplicationArtifact applicationArtifact) throws ResourceManagementException, ApplicationManagementException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); - ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager(); + ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager(); // The application executable artifacts such as apks are uploaded. if (ApplicationType.ENTERPRISE.toString().equals(applicationType)) { @@ -562,7 +562,7 @@ public class ApplicationManagerImpl implements ApplicationManager { private ApplicationReleaseDTO addImageArtifacts(ApplicationReleaseDTO applicationReleaseDTO, ApplicationArtifact applicationArtifact) throws ResourceManagementException { - ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager(); + ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager(); applicationReleaseDTO.setIconName(applicationArtifact.getIconName()); applicationReleaseDTO.setBannerName(applicationArtifact.getBannerName()); @@ -591,7 +591,7 @@ public class ApplicationManagerImpl implements ApplicationManager { private ApplicationReleaseDTO updateImageArtifacts(ApplicationReleaseDTO applicationReleaseDTO, ApplicationArtifact applicationArtifact) throws ResourceManagementException{ - ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager(); + ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager(); applicationStorageManager.deleteImageArtifacts(applicationReleaseDTO); @@ -1193,7 +1193,7 @@ public class ApplicationManagerImpl implements ApplicationManager { + applicationId); } int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); - ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager(); + ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager(); ApplicationDTO applicationDTO = getApplication(applicationId); List applicationReleaseDTOs = applicationDTO.getApplicationReleaseDTOs(); for (ApplicationReleaseDTO applicationReleaseDTO : applicationReleaseDTOs) { @@ -1334,7 +1334,7 @@ public class ApplicationManagerImpl implements ApplicationManager { public void deleteApplicationRelease(String releaseUuid) throws ApplicationManagementException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); - ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager(); + ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager(); try { ConnectionManagerUtil.beginDBTransaction(); ApplicationReleaseDTO applicationReleaseDTO = this.applicationReleaseDAO @@ -1477,7 +1477,7 @@ public class ApplicationManagerImpl implements ApplicationManager { boolean isValidDeviceType = false; List deviceTypes; try { - deviceTypes = Util.getDeviceManagementService().getDeviceTypes(); + deviceTypes = DAOUtil.getDeviceManagementService().getDeviceTypes(); for (DeviceType dt : deviceTypes) { if (dt.getName().equals(deviceType)) { @@ -2595,7 +2595,7 @@ public class ApplicationManagerImpl implements ApplicationManager { throws BadRequestException, UnexpectedServerErrorException { List deviceTypes; try { - deviceTypes = Util.getDeviceManagementService().getDeviceTypes(); + deviceTypes = DAOUtil.getDeviceManagementService().getDeviceTypes(); if(deviceTypeAttr instanceof String){ for (DeviceType dt : deviceTypes) { diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/AppmDataHandlerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/AppmDataHandlerImpl.java index 71570221af..9f0ac6c8d2 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/AppmDataHandlerImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/AppmDataHandlerImpl.java @@ -29,7 +29,7 @@ import org.wso2.carbon.device.application.mgt.common.services.AppmDataHandler; import org.wso2.carbon.device.application.mgt.common.config.UIConfiguration; import org.wso2.carbon.device.application.mgt.core.dao.ApplicationReleaseDAO; import org.wso2.carbon.device.application.mgt.core.dao.common.ApplicationManagementDAOFactory; -import org.wso2.carbon.device.application.mgt.core.dao.common.Util; +import org.wso2.carbon.device.application.mgt.core.util.DAOUtil; import org.wso2.carbon.device.application.mgt.core.exception.ApplicationManagementDAOException; import org.wso2.carbon.device.application.mgt.core.exception.NotFoundException; import org.wso2.carbon.device.application.mgt.core.internal.DataHolder; @@ -67,7 +67,7 @@ public class AppmDataHandlerImpl implements AppmDataHandler { @Override public InputStream getArtifactStream(String uuid, String artifactName) throws ApplicationManagementException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); - ApplicationStorageManager applicationStorageManager = Util.getApplicationStorageManager(); + ApplicationStorageManager applicationStorageManager = DAOUtil.getApplicationStorageManager(); ApplicationReleaseDAO applicationReleaseDAO = ApplicationManagementDAOFactory.getApplicationReleaseDAO(); String artifactPath; String appReleaseHashValue; diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java index b3b4047d81..73fca86a40 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java @@ -22,6 +22,7 @@ import org.apache.commons.logging.LogFactory; import org.wso2.carbon.CarbonConstants; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.application.mgt.common.Rating; +import org.wso2.carbon.device.application.mgt.common.ReviewNode; import org.wso2.carbon.device.application.mgt.common.ReviewTmp; import org.wso2.carbon.device.application.mgt.common.PaginationRequest; import org.wso2.carbon.device.application.mgt.common.PaginationResult; @@ -283,7 +284,7 @@ public class ReviewManagerImpl implements ReviewManager { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); PaginationResult paginationResult = new PaginationResult(); int numOfComments; - TreeMap reviewTree = new TreeMap<>(); + TreeMap> reviewTree = new TreeMap<>(); if (log.isDebugEnabled()) { log.debug("Get all reviewTmps of the application release uuid: " + uuid); } @@ -295,17 +296,13 @@ public class ReviewManagerImpl implements ReviewManager { for (Review review : reviews) { if (review.getRootParentId() == -1 && review.getImmediateParentId() == -1) { - reviewTree.put(review.getId(), review); - } else if (reviewTree.containsKey(review.getRootParentId())) { - if (review.getRootParentId() == review.getImmediateParentId()) { - reviewTree.get(review.getRootParentId()).getReplyComments().put(review.getId(), review); - } else if (reviewTree.get(review.getRootParentId()).getReplyComments() - .containsKey(review.getImmediateParentId())) { - reviewTree.get(review.getRootParentId()).getReplyComments().get(review.getImmediateParentId()) - .getReplyComments().put(review.getId(), review); - } else { - //todo traverse and find - } + ReviewNode rootNode = new ReviewNode<>(review); + reviewTree.put(review.getId(), rootNode); + } else if (reviewTree.containsKey(review.getImmediateParentId())) { + ReviewNode childNode = new ReviewNode<>(review); + reviewTree.get(review.getImmediateParentId()).addChild(childNode); + } else { + reviewTree.put(review.getId(), findAndSetChild(reviewTree.get(review.getRootParentId()), review)); } } numOfComments = reviewTree.size(); @@ -329,6 +326,16 @@ public class ReviewManagerImpl implements ReviewManager { } } + private ReviewNode findAndSetChild(ReviewNode node, Review review) { + for (ReviewNode each : node.getChildren()) { + if ((each.getData()).getId() == review.getImmediateParentId()) { + ReviewNode childNode = new ReviewNode<>(review); + each.addChild(childNode); + } + } + return node; + } + @Override public boolean deleteReview(String uuid, int reviewId) throws ReviewManagementException, ReviewDoesNotExistException { diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ApplicationManagementUtil.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ApplicationManagementUtil.java index 3d3da35b87..30751baa96 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ApplicationManagementUtil.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/ApplicationManagementUtil.java @@ -32,7 +32,7 @@ import org.wso2.carbon.device.application.mgt.core.lifecycle.LifecycleStateManag import java.lang.reflect.Constructor; /** - * This Util class is responsible for making sure single instance of each Extension Manager is used throughout for + * This DAOUtil class is responsible for making sure single instance of each Extension Manager is used throughout for * all the tasks. */ public class ApplicationManagementUtil { diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/Constants.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/Constants.java index 1b9695659f..4c705094a5 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/Constants.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/Constants.java @@ -64,5 +64,5 @@ public class Constants { */ public static final String RELEASE_ARTIFACT = "artifact"; - public static final int MAXIMUM_REVIEWS_PER_USER = 10; + public static final int REVIEW_PARENT_ID = -1; } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/Util.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/DAOUtil.java similarity index 90% rename from components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/Util.java rename to components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/DAOUtil.java index 6a98cd1780..5285ef11f6 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/common/Util.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/DAOUtil.java @@ -16,7 +16,7 @@ * under the License. * */ -package org.wso2.carbon.device.application.mgt.core.dao.common; +package org.wso2.carbon.device.application.mgt.core.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -27,6 +27,7 @@ import org.wso2.carbon.device.application.mgt.common.PaginationRequest; import org.wso2.carbon.device.application.mgt.common.dto.ApplicationReleaseDTO; import org.wso2.carbon.device.application.mgt.common.dto.DeviceSubscriptionDTO; +import org.wso2.carbon.device.application.mgt.common.dto.ReviewDTO; import org.wso2.carbon.device.application.mgt.common.exception.ReviewManagementException; import org.wso2.carbon.device.application.mgt.common.services.ApplicationManager; import org.wso2.carbon.device.application.mgt.common.services.ApplicationStorageManager; @@ -34,8 +35,6 @@ import org.wso2.carbon.device.application.mgt.common.services.SubscriptionManage import org.wso2.carbon.device.application.mgt.core.config.Configuration; import org.wso2.carbon.device.application.mgt.core.config.ConfigurationManager; import org.wso2.carbon.device.application.mgt.core.exception.UnexpectedServerErrorException; -import org.wso2.carbon.device.application.mgt.core.impl.ApplicationStorageManagerImpl; -import org.wso2.carbon.device.application.mgt.core.util.ApplicationManagementUtil; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl; @@ -48,9 +47,9 @@ import java.util.List; /** * This class is responsible for handling the utils of the Application Management DAO. */ -public class Util { +public class DAOUtil { - private static final Log log = LogFactory.getLog(Util.class); + private static final Log log = LogFactory.getLog(DAOUtil.class); /** * To create application object from the result set retrieved from the Database. @@ -204,6 +203,36 @@ public class Util { return applicationRelease; } + public static ReviewDTO loadReview(ResultSet rs) throws SQLException, UnexpectedServerErrorException { + List reviewDTOs = loadReviews(rs); + if (reviewDTOs.isEmpty()) { + return null; + } + if (reviewDTOs.size() > 1) { + String msg = "Internal server error. Found more than one review for requested review ID"; + log.error(msg); + throw new UnexpectedServerErrorException(msg); + } + return reviewDTOs.get(0); + } + + public static List loadReviews (ResultSet rs) throws SQLException { + List reviewDTOs = new ArrayList<>(); + while (rs.next()) { + ReviewDTO reviewDTO = new ReviewDTO(); + reviewDTO.setId(rs.getInt("ID")); + reviewDTO.setContent(rs.getString("COMMENT")); + reviewDTO.setCreatedAt(rs.getTimestamp("CREATED_AT")); + reviewDTO.setModifiedAt(rs.getTimestamp("MODIFIED_AT")); + reviewDTO.setRootParentId(rs.getInt("ROOT_PARENT_ID")); + reviewDTO.setImmediateParentId(rs.getInt("IMMEDIATE_PARENT_ID")); + reviewDTO.setUsername(rs.getString("USERNAME")); + reviewDTO.setRating(rs.getInt("RATING")); + reviewDTOs.add(reviewDTO); + } + return reviewDTOs; + } + /** * Cleans up the statement and resultset after executing the query * @@ -248,7 +277,7 @@ public class Util { public static ApplicationManager getApplicationManager() { if (applicationManager == null) { - synchronized (Util.class) { + synchronized (DAOUtil.class) { if (applicationManager == null) { PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); applicationManager = @@ -272,7 +301,7 @@ public class Util { try { if (applicationStorageManager == null) { - synchronized (Util.class) { + synchronized (DAOUtil.class) { if (applicationStorageManager == null) { applicationStorageManager = ApplicationManagementUtil .getApplicationStorageManagerInstance(); @@ -299,7 +328,7 @@ public class Util { */ public static SubscriptionManager getSubscriptionManager() { if (subscriptionManager == null) { - synchronized (Util.class) { + synchronized (DAOUtil.class) { if (subscriptionManager == null) { PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); subscriptionManager = From 03ae30423425c5f6162c54ccc9da9852ebc706d4 Mon Sep 17 00:00:00 2001 From: lasanthaDLPDS Date: Thu, 16 May 2019 03:56:45 +0530 Subject: [PATCH 2/3] Fix lifecycle changing issue --- .../core/dao/impl/application/GenericApplicationDAOImpl.java | 3 +++ .../application/release/GenericApplicationReleaseDAOImpl.java | 1 + .../wso2/carbon/device/application/mgt/core/util/DAOUtil.java | 1 + 3 files changed, 5 insertions(+) diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java index 76dd1c0828..59ef55e1b4 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/GenericApplicationDAOImpl.java @@ -158,6 +158,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic + "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, " @@ -468,6 +469,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic + "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, " @@ -542,6 +544,7 @@ public class GenericApplicationDAOImpl extends AbstractDAOImpl implements Applic + "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, " diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/release/GenericApplicationReleaseDAOImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/release/GenericApplicationReleaseDAOImpl.java index df590f2a13..93663008c8 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/release/GenericApplicationReleaseDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/dao/impl/application/release/GenericApplicationReleaseDAOImpl.java @@ -239,6 +239,7 @@ public class GenericApplicationReleaseDAOImpl extends AbstractDAOImpl implements + "AR.APP_HASH_VALUE AS RELEASE_HASH_VALUE, " + "AR.APP_PRICE AS RELEASE_PRICE, " + "AR.APP_META_INFO AS RELEASE_META_INFO, " + + "AR.PACKAGE_NAME AS PACKAGE_NAME, " + "AR.SUPPORTED_OS_VERSIONS AS RELEASE_SUP_OS_VERSIONS, " + "AR.RATING AS RELEASE_RATING, " + "AR.CURRENT_STATE AS RELEASE_CURRENT_STATE, " diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/DAOUtil.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/DAOUtil.java index 5285ef11f6..57db28ef40 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/DAOUtil.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/DAOUtil.java @@ -145,6 +145,7 @@ public class DAOUtil { appRelease.setAppHashValue(rs.getString("RELEASE_HASH_VALUE")); appRelease.setPrice(rs.getDouble("RELEASE_PRICE")); appRelease.setMetaData(rs.getString("RELEASE_META_INFO")); + appRelease.setPackageName(rs.getString("PACKAGE_NAME")); appRelease.setSupportedOsVersions(rs.getString("RELEASE_SUP_OS_VERSIONS")); appRelease.setRating(rs.getDouble("RELEASE_RATING")); appRelease.setCurrentState(rs.getString("RELEASE_CURRENT_STATE")); From 5ea379dfd06d9069617d434b4ca90f665ff4e29a Mon Sep 17 00:00:00 2001 From: lasanthaDLPDS Date: Thu, 16 May 2019 11:57:25 +0530 Subject: [PATCH 3/3] Improve review management and lifecycle management in APPM --- .../mgt/common/response/Review.java | 12 +-- .../common/services/ApplicationManager.java | 3 +- .../mgt/core/impl/ApplicationManagerImpl.java | 3 +- .../mgt/core/impl/ReviewManagerImpl.java | 83 ++++++++++++------- ...ApplicationManagementPublisherAPIImpl.java | 5 +- .../impl/ReviewManagementAPIImpl.java | 2 +- 6 files changed, 67 insertions(+), 41 deletions(-) diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/response/Review.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/response/Review.java index 55140969cb..4acfa1e6a6 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/response/Review.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/response/Review.java @@ -18,7 +18,7 @@ package org.wso2.carbon.device.application.mgt.common.response; import java.sql.Timestamp; -import java.util.TreeMap; +import java.util.List; public class Review { @@ -30,7 +30,7 @@ public class Review { private Timestamp createdAt; private Timestamp modifiedAt; private int rating; - private TreeMap replyComments; + private List replies; public int getId() { return id; @@ -96,11 +96,7 @@ public class Review { this.rating = rating; } - public TreeMap getReplyComments() { - return replyComments; - } + public List getReplies() { return replies; } - public void setReplyComments(TreeMap replyComments) { - this.replyComments = replyComments; - } + public void setReplies(List replies) { this.replies = replies; } } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ApplicationManager.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ApplicationManager.java index 9b9874062e..cf49bf2a32 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ApplicationManager.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/services/ApplicationManager.java @@ -150,8 +150,9 @@ public interface ApplicationManager { * @param releaseUuid UUID of the ApplicationDTO Release. * @param lifecycleChanger Lifecycle changer that contains the action and the reson for the change. * @throws ApplicationManagementException ApplicationDTO Management Exception. + * @return */ - void changeLifecycleState(String releaseUuid, LifecycleChanger lifecycleChanger) + ApplicationRelease changeLifecycleState(String releaseUuid, LifecycleChanger lifecycleChanger) throws ApplicationManagementException; /** diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java index fc8f1ce530..04a63b485f 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ApplicationManagerImpl.java @@ -1618,7 +1618,7 @@ public class ApplicationManagerImpl implements ApplicationManager { } @Override - public void changeLifecycleState(String releaseUuid, LifecycleChanger lifecycleChanger) + public ApplicationRelease changeLifecycleState(String releaseUuid, LifecycleChanger lifecycleChanger) throws ApplicationManagementException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); @@ -1664,6 +1664,7 @@ public class ApplicationManagerImpl implements ApplicationManager { } this.lifecycleStateDAO.addLifecycleState(lifecycleState, applicationReleaseDTO.getId(), tenantId); ConnectionManagerUtil.commitDBTransaction(); + return releaseDtoToRelease(applicationReleaseDTO); } else { String msg = "Invalid lifecycle state transition from '" + applicationReleaseDTO.getCurrentState() + "'" + " to '" + lifecycleChanger.getAction() + "'"; diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java index 73fca86a40..b1f3ac8dcb 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java @@ -172,8 +172,12 @@ public class ReviewManagerImpl implements ReviewManager { } ReviewDTO replyComment = reviewWrapperToDO(reviewWrapper); replyComment.setUsername(username); - replyComment.setRootParentId(parentReview.getRootParentId()); replyComment.setImmediateParentId(parentReview.getId()); + if (parentReview.getRootParentId() == -1) { + replyComment.setRootParentId(parentReview.getId()); + } else { + replyComment.setRootParentId(parentReview.getRootParentId()); + } if (this.reviewDAO.addReview(replyComment, applicationReleaseDTO.getId(), tenantId)) { ConnectionManagerUtil.commitDBTransaction(); return true; @@ -214,12 +218,24 @@ public class ReviewManagerImpl implements ReviewManager { review.setImmediateParentId(reviewDTO.getImmediateParentId()); review.setCreatedAt(reviewDTO.getCreatedAt()); review.setModifiedAt(reviewDTO.getModifiedAt()); - review.setReplyComments(new TreeMap<>()); + review.setReplies(new ArrayList<>()); reviews.add(review); } return reviews; } + private Review reviewDTOToReview(ReviewDTO reviewDTO){ + Review review = new Review(); + review.setId(reviewDTO.getId()); + review.setContent(reviewDTO.getContent()); + review.setRootParentId(reviewDTO.getRootParentId()); + review.setImmediateParentId(reviewDTO.getImmediateParentId()); + review.setCreatedAt(reviewDTO.getCreatedAt()); + review.setModifiedAt(reviewDTO.getModifiedAt()); + review.setReplies(new ArrayList<>()); + return review; + } + @Override public boolean updateReview(ReviewWrapper updatingReview, int reviewId, String uuid) throws ReviewManagementException, ApplicationManagementException { @@ -283,38 +299,35 @@ public class ReviewManagerImpl implements ReviewManager { throws ReviewManagementException { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); PaginationResult paginationResult = new PaginationResult(); - int numOfComments; - TreeMap> reviewTree = new TreeMap<>(); + TreeMap> reviewTree = new TreeMap<>(); if (log.isDebugEnabled()) { log.debug("Get all reviewTmps of the application release uuid: " + uuid); } try { ConnectionManagerUtil.openDBConnection(); List reviewDTOs= this.reviewDAO.getAllReviews(uuid, request, tenantId); - List reviews = reviewDTOToReview(reviewDTOs); - reviews.sort(Comparator.comparing(Review::getId)); - - for (Review review : reviews) { - if (review.getRootParentId() == -1 && review.getImmediateParentId() == -1) { - ReviewNode rootNode = new ReviewNode<>(review); - reviewTree.put(review.getId(), rootNode); - } else if (reviewTree.containsKey(review.getImmediateParentId())) { - ReviewNode childNode = new ReviewNode<>(review); - reviewTree.get(review.getImmediateParentId()).addChild(childNode); + reviewDTOs.sort(Comparator.comparing(ReviewDTO::getId)); + + for (ReviewDTO reviewDTO : reviewDTOs) { + if (reviewDTO.getRootParentId() == -1 && reviewDTO.getImmediateParentId() == -1) { + ReviewNode rootNode = new ReviewNode<>(reviewDTO); + reviewTree.put(reviewDTO.getId(), rootNode); + } else if (reviewTree.containsKey(reviewDTO.getImmediateParentId())) { + ReviewNode childNode = new ReviewNode<>(reviewDTO); + reviewTree.get(reviewDTO.getImmediateParentId()).addChild(childNode); } else { - reviewTree.put(review.getId(), findAndSetChild(reviewTree.get(review.getRootParentId()), review)); + reviewTree.put(reviewDTO.getId(), findAndSetChild(reviewTree.get(reviewDTO.getRootParentId()), reviewDTO)); } } - numOfComments = reviewTree.size(); - if (numOfComments > 0) { - paginationResult.setData(new ArrayList<>(reviewTree.values())); - paginationResult.setRecordsFiltered(numOfComments); - paginationResult.setRecordsTotal(numOfComments); - } else { - paginationResult.setData(new ArrayList()); - paginationResult.setRecordsFiltered(0); - paginationResult.setRecordsTotal(0); + int numOfReviews = reviewTree.size(); + List results = new ArrayList<>(); + + for (ReviewNode reviewNode : reviewTree.values()){ + results.add(printTree(null, reviewNode)); } + paginationResult.setData(new ArrayList<>(results)); + paginationResult.setRecordsFiltered(numOfReviews); + paginationResult.setRecordsTotal(numOfReviews); return paginationResult; } catch (ReviewManagementDAOException e) { throw new ReviewManagementException("Error occured while getting all reviewTmps for application uuid: " + uuid, @@ -326,16 +339,30 @@ public class ReviewManagerImpl implements ReviewManager { } } - private ReviewNode findAndSetChild(ReviewNode node, Review review) { - for (ReviewNode each : node.getChildren()) { - if ((each.getData()).getId() == review.getImmediateParentId()) { - ReviewNode childNode = new ReviewNode<>(review); + private ReviewNode findAndSetChild(ReviewNode node, ReviewDTO reviewDTO) { + for (ReviewNode each : node.getChildren()) { + if ((each.getData()).getId() == reviewDTO.getImmediateParentId()) { + ReviewNode childNode = new ReviewNode<>(reviewDTO); each.addChild(childNode); } } return node; } + private Review printTree(Review parentReview, ReviewNode node) { + Review review = reviewDTOToReview(node.getData()); + if (parentReview != null){ + parentReview.getReplies().add(review); + } + if (node.getChildren().isEmpty()){ + return review; + } + for (ReviewNode reviewDTOReviewNode : node.getChildren()) { + printTree(review, reviewDTOReviewNode); + } + return review; + } + @Override public boolean deleteReview(String uuid, int reviewId) throws ReviewManagementException, ReviewDoesNotExistException { diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/impl/ApplicationManagementPublisherAPIImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/impl/ApplicationManagementPublisherAPIImpl.java index 57f91e0720..9d53177a03 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/impl/ApplicationManagementPublisherAPIImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.api/src/main/java/org/wso2/carbon/device/application/mgt/publisher/api/services/impl/ApplicationManagementPublisherAPIImpl.java @@ -453,7 +453,9 @@ public class ApplicationManagementPublisherAPIImpl implements ApplicationManagem @Valid LifecycleChanger lifecycleChanger) { ApplicationManager applicationManager = APIUtil.getApplicationManager(); try { - applicationManager.changeLifecycleState(applicationUuid, lifecycleChanger); + ApplicationRelease applicationRelease = applicationManager + .changeLifecycleState(applicationUuid, lifecycleChanger); + return Response.status(Response.Status.CREATED).entity(applicationRelease).build(); } catch (BadRequestException e) { String msg = "Request payload contains invalid data, hence veryfy the request payload."; log.error(msg, e); @@ -472,7 +474,6 @@ public class ApplicationManagementPublisherAPIImpl implements ApplicationManagem log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); } - return Response.status(Response.Status.CREATED).entity("Lifecycle state added successfully.").build(); } @GET diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/impl/ReviewManagementAPIImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/impl/ReviewManagementAPIImpl.java index 5fb8137229..2b1309639e 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/impl/ReviewManagementAPIImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/impl/ReviewManagementAPIImpl.java @@ -85,7 +85,7 @@ public class ReviewManagementAPIImpl implements ReviewManagementAPI { if (isReviewCreated) { return Response.status(Response.Status.CREATED).entity(reviewWrapper).build(); } else { - String msg = "Given reviewTmp is not valid. Please check the reviewTmp payload."; + String msg = "Review is not valid. Please check the reviewTmp payload."; log.error(msg); return Response.status(Response.Status.BAD_REQUEST).entity(msg).build(); }