diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/CommentsManagerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/CommentsManagerImpl.java index 23c5903344..5ca47278ca 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/CommentsManagerImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/CommentsManagerImpl.java @@ -17,10 +17,274 @@ */ package org.wso2.carbon.device.application.mgt.core.impl; -import org.wso2.carbon.device.application.mgt.common.services.CommentsManager; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.device.application.mgt.common.Comment; +import org.wso2.carbon.device.application.mgt.common.PaginationRequest; +import org.wso2.carbon.device.application.mgt.common.PaginationResult; +import org.wso2.carbon.device.application.mgt.common.exception.ApplicationManagementException; +import org.wso2.carbon.device.application.mgt.common.exception.CommentManagementException; +import org.wso2.carbon.device.application.mgt.common.exception.DBConnectionException; +import org.wso2.carbon.device.application.mgt.common.exception.TransactionManagementException; +import org.wso2.carbon.device.application.mgt.common.services.*; +import org.wso2.carbon.device.application.mgt.core.dao.CommentDAO; +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.exception.ApplicationManagementDAOException; +import org.wso2.carbon.device.application.mgt.core.exception.NotFoundException; +import org.wso2.carbon.device.application.mgt.core.util.ConnectionManagerUtil; + +import java.sql.SQLException; +import java.sql.Timestamp; +import java.time.Instant; +import java.util.List; /** * This class is the default implementation for the Managing the comments. */ +@SuppressWarnings( "deprecation" ) public class CommentsManagerImpl implements CommentsManager { -} + + private static final Log log = LogFactory.getLog(CommentsManagerImpl.class); + private CommentDAO commentDAO; + + public CommentsManagerImpl() { + initDataAccessObjects(); + } + + private void initDataAccessObjects() { + this.commentDAO= ApplicationManagementDAOFactory.getCommentDAO(); + } + + @Override + public Comment addComment(Comment comment,String uuid,int tenantId) throws CommentManagementException { + + if (log.isDebugEnabled()) { + log.debug("Request for comment is received for uuid" +uuid); + } + comment.setCreatedAt(Timestamp.from(Instant.now())); + + try { + ConnectionManagerUtil.beginDBTransaction(); + ApplicationManagementDAOFactory.getCommentDAO().addComment(tenantId,comment, + comment.getCreatedBy(),comment.getParent(),uuid); + ConnectionManagerUtil.commitDBTransaction(); + return comment; + } catch (Exception e) { + log.error("Exception occurs.", e); + ConnectionManagerUtil.rollbackDBTransaction(); + } finally { + ConnectionManagerUtil.closeDBConnection(); + } + return comment; + } + + /** + * To validate the pre-request of the comment + * + * @param apAppCommentId ID of the comment. + * @param comment comment needed to be validate. + * @return Application related with the UUID. + * + * + */ + + public Boolean validateComment(int apAppCommentId,String comment) throws CommentManagementException{ + + if (apAppCommentId <= 0) { + throw new CommentManagementException("Comment ID is null or negative. Comment id is a required parameter to get the " + + "relevant comment."); + } + + if(comment==null){ + throw new NullPointerException("No comment is entered."); + } + + try { + throw new NotFoundException("Comment with comment id "+apAppCommentId+" does not exit"); + } catch (NotFoundException e) { + log.error("Not Found Exception occurs.", e); + } + return true; + } + + + @Override + public List getAllComments(PaginationRequest request,String uuid) throws CommentManagementException, + SQLException { + + PaginationResult paginationResult = new PaginationResult(); + List comments; + request = Util.validateCommentListPageSize(request); + + + if (log.isDebugEnabled()) { + log.debug("get all comments of the application release"+uuid); + } + + try { + ConnectionManagerUtil.openDBConnection(); + comments=commentDAO.getAllComments(uuid,request);//count ,pagination request + int count=commentDAO.getCommentCount(request,uuid); + paginationResult.setData(comments); + paginationResult.setRecordsFiltered(count); + paginationResult.setRecordsTotal(count); + + return comments; + } catch (DBConnectionException e) { + log.error("DB Connection Exception occurs.", e); + } finally { + ConnectionManagerUtil.closeDBConnection(); + } + return null; + } + + @Override + public Comment getComment(int apAppCommentId) throws CommentManagementException { + + PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); + Comment comment=null; + + if (log.isDebugEnabled()) { + log.debug("Comment retrieval request is received for the comment id " + apAppCommentId ); + } + + try { + ConnectionManagerUtil.openDBConnection(); + comment=ApplicationManagementDAOFactory.getCommentDAO().getComment(apAppCommentId); + } catch (DBConnectionException e) { + log.error("DB Connection Exception occurs.", e); + } catch (SQLException e) { + log.error("SQL Exception occurs.", e); + } finally { + ConnectionManagerUtil.closeDBConnection(); + } + return comment; + } + + @Override + public void deleteComment(int apAppCommentId) throws CommentManagementException { + + Comment comment; + comment= getComment(apAppCommentId); + + if (comment == null) { + throw new CommentManagementException( + "Cannot delete a non-existing comment for the application with comment id" + apAppCommentId); + } + try { + ConnectionManagerUtil.beginDBTransaction(); + ApplicationManagementDAOFactory.getCommentDAO().deleteComment(apAppCommentId); + ConnectionManagerUtil.commitDBTransaction(); + } catch (DBConnectionException e) { + log.error("DB Connection Exception occurs.", e); + } catch (SQLException e) { + log.error("SQL Exception occurs.", e); + } catch (TransactionManagementException e) { + log.error("Transaction Management Exception occurs.", e); + } finally { + ConnectionManagerUtil.closeDBConnection(); + } + } + + @Override + public Comment updateComment(Comment comment,int apAppCommentId) throws CommentManagementException, SQLException, + DBConnectionException { + + PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true); + validateComment(apAppCommentId,comment.getComment()); + + if (log.isDebugEnabled()) { + log.debug("Comment retrieval request is received for the comment id " +apAppCommentId); + } + comment.setModifiedAt(Timestamp.from(Instant.now())); + try { + ConnectionManagerUtil.openDBConnection(); + ApplicationManagementDAOFactory.getCommentDAO().getComment(apAppCommentId); + return ApplicationManagementDAOFactory.getCommentDAO().updateComment(apAppCommentId, + comment.getComment(),comment.getModifiedBy(),comment.getModifiedAt()); + } catch (SQLException e) { + log.error("SQL Exception occurs.", e); + } catch (DBConnectionException e) { + log.error("DB Connection Exception occurs.", e); + } finally { + ConnectionManagerUtil.closeDBConnection(); + } + return ApplicationManagementDAOFactory.getCommentDAO().getComment(apAppCommentId); + } + + public int getRatedUser(String uuid){ + + int ratedUsers=0; + if (log.isDebugEnabled()) { + log.debug("Get the rated users for the application release number"+uuid); + } + try { + ConnectionManagerUtil.openDBConnection(); + ratedUsers =ApplicationManagementDAOFactory.getCommentDAO().getRatedUser(uuid); + } catch (DBConnectionException e) { + log.error("DB Connection Exception occurs.", e); + } catch (ApplicationManagementDAOException e) { + log.error("Application Management Exception occurs.", e); + } finally { + ConnectionManagerUtil.closeDBConnection(); + } + return ratedUsers; + } + + @Override + public int getStars(String uuid) throws SQLException { + + int stars=0; + if (log.isDebugEnabled()) { + log.debug("Get the average of rated stars for the application "+uuid); + } + try { + ConnectionManagerUtil.openDBConnection(); + stars= ApplicationManagementDAOFactory.getCommentDAO().getStars(uuid); + } catch (DBConnectionException e) { + log.error("DB Connection Exception occurs.", e); + } catch (ApplicationManagementDAOException e) { + log.error("Application Management Exception occurs.", e); + } finally { + ConnectionManagerUtil.closeDBConnection(); + } + return stars; + } + + @Override + public int updateStars(int stars , String uuid) throws ApplicationManagementException { + + if (log.isDebugEnabled()) { + log.debug("Stars are received for the application " + uuid); + } + int newStars=0; + try { + ConnectionManagerUtil.beginDBTransaction(); + + int ratedUsers = ApplicationManagementDAOFactory.getCommentDAO().getRatedUser(uuid); + int oldStars = ApplicationManagementDAOFactory.getCommentDAO().getStars(uuid); + if(ratedUsers==0){ + newStars=ApplicationManagementDAOFactory.getCommentDAO().updateStars(stars,uuid); + return newStars; + }else { + int avgStars = ((oldStars*ratedUsers)+stars) / (ratedUsers+1); + newStars = ApplicationManagementDAOFactory.getCommentDAO().updateStars(avgStars, uuid); + ConnectionManagerUtil.commitDBTransaction(); + return newStars; + } + } catch (ApplicationManagementDAOException e) { + ConnectionManagerUtil.rollbackDBTransaction(); + log.error("Application Management Exception occurs.", e); + + } catch (DBConnectionException e) { + log.error("DB Connection Exception occurs.", e); + } finally { + ConnectionManagerUtil.closeDBConnection(); + } + return newStars; + } + + +} \ No newline at end of file