From a1b8632aa46597528af2f13301acbadd12581805 Mon Sep 17 00:00:00 2001 From: lasanthaDLPDS Date: Wed, 15 May 2019 17:18:17 +0530 Subject: [PATCH] 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 00000000000..5a7f9930b7f --- /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 9f705d54c90..a77f0a28ef5 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 1aa44c03322..b800a4fd5ac 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 0120cccf6b5..76dd1c08284 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 0e49ea4a061..56432d8db03 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 808d1603dfb..df590f2a13b 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 73b1951b06f..0673e1cb315 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 e4aa49099d9..4581c6ee1b7 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 7eeb71046c6..b59ca1f7b23 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 26f88165b05..c37949dbf3c 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 c29040d809c..fc8f1ce530a 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 71570221afb..9f0ac6c8d23 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 b3b4047d81b..73fca86a403 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 3d3da35b870..30751baa962 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 1b9695659f7..4c705094a51 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 6a98cd17805..5285ef11f6d 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 =