From dfedab3f0d2145afaab4c4d443c3d4b697db0448 Mon Sep 17 00:00:00 2001 From: maurizio Date: Fri, 20 Apr 2012 16:46:09 +0200 Subject: [PATCH 1/3] Upgrade voteDAO --- .../redoddity/portfolios/controller/DashboardController.java | 5 +---- src/main/java/it/redoddity/portfolios/dao/VoteDAO.java | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/it/redoddity/portfolios/controller/DashboardController.java b/src/main/java/it/redoddity/portfolios/controller/DashboardController.java index 02b9e37..88de125 100644 --- a/src/main/java/it/redoddity/portfolios/controller/DashboardController.java +++ b/src/main/java/it/redoddity/portfolios/controller/DashboardController.java @@ -34,13 +34,10 @@ public void setProjectDAO(ProjectDAO projectDAO) { @Override public void index() throws ServletException, IOException { - try { + User user = getCurrentUser(); List ownProjects = projectDAO.findUserProjects(user); request.setAttribute("ownProjects", ownProjects); render("index"); - } catch (SQLException ex) { - Logger.getLogger(DashboardController.class.getName()).log(Level.SEVERE, null, ex); - } } } diff --git a/src/main/java/it/redoddity/portfolios/dao/VoteDAO.java b/src/main/java/it/redoddity/portfolios/dao/VoteDAO.java index 9ab2367..5ea85c4 100644 --- a/src/main/java/it/redoddity/portfolios/dao/VoteDAO.java +++ b/src/main/java/it/redoddity/portfolios/dao/VoteDAO.java @@ -25,7 +25,7 @@ public VoteDAO(DatabaseConnectionInfo db) { Vote.setDao(this); } - public List getVotesByProject(Project project) throws SQLException { + public List findVotesByProject(Project project) throws SQLException { return select("select * from vote where project_id =?", project.getId()); } } From 5053224e60fe6ce777bb359c0c3cad0225b884a2 Mon Sep 17 00:00:00 2001 From: Ale Date: Fri, 20 Apr 2012 16:48:00 +0200 Subject: [PATCH 2/3] Added rating through ajax! --- src/main/database/portfolios.sql | 12 ++-- src/main/java/it/redoddity/dao/BaseDAO.java | 2 +- .../controller/ProjectController.java | 14 +++- .../portfolios/controller/VoteController.java | 48 ++++++++++---- .../it/redoddity/portfolios/dao/VoteDAO.java | 12 ++++ .../it/redoddity/portfolios/model/Vote.java | 10 ++- .../webapp/WEB-INF/views/project/view.jsp | 66 +++++++++++++++++++ src/main/webapp/template.jsp | 3 +- 8 files changed, 145 insertions(+), 22 deletions(-) diff --git a/src/main/database/portfolios.sql b/src/main/database/portfolios.sql index b383116..db8dd84 100644 --- a/src/main/database/portfolios.sql +++ b/src/main/database/portfolios.sql @@ -126,16 +126,16 @@ DROP TABLE IF EXISTS `vote`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `vote` ( `id` varchar(36) NOT NULL, - `user_id` varchar(36) NOT NULL, - `project_id` varchar(36) NOT NULL COMMENT ' ', + `userId` varchar(36) NOT NULL, + `projectId` varchar(36) NOT NULL, `value` int(11) NOT NULL, `createdAt` date DEFAULT NULL, `updatedAt` date DEFAULT NULL, PRIMARY KEY (`id`), - KEY `fk_vote_user` (`user_id`), - KEY `fk_vote_project` (`project_id`), - CONSTRAINT `fk_vote_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, - CONSTRAINT `fk_vote_project` FOREIGN KEY (`project_id`) REFERENCES `project` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION + KEY `fk_vote_user` (`userId`), + KEY `fk_vote_project` (`projectId`), + CONSTRAINT `fk_vote_user` FOREIGN KEY (`userId`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT `fk_vote_project` FOREIGN KEY (`projectId`) REFERENCES `project` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; diff --git a/src/main/java/it/redoddity/dao/BaseDAO.java b/src/main/java/it/redoddity/dao/BaseDAO.java index e7ffdbc..91c3e4e 100644 --- a/src/main/java/it/redoddity/dao/BaseDAO.java +++ b/src/main/java/it/redoddity/dao/BaseDAO.java @@ -215,7 +215,7 @@ public void create(T model) throws SQLException { try { params[i] = PropertyUtils.getProperty(model, propertyName); } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { - throw new SQLException(e); + //throw new SQLException(e); } i++; } diff --git a/src/main/java/it/redoddity/portfolios/controller/ProjectController.java b/src/main/java/it/redoddity/portfolios/controller/ProjectController.java index 7a24996..d8e07d4 100644 --- a/src/main/java/it/redoddity/portfolios/controller/ProjectController.java +++ b/src/main/java/it/redoddity/portfolios/controller/ProjectController.java @@ -5,8 +5,10 @@ package it.redoddity.portfolios.controller; import it.redoddity.portfolios.dao.ProjectDAO; +import it.redoddity.portfolios.dao.VoteDAO; import it.redoddity.portfolios.model.Project; import it.redoddity.portfolios.model.User; +import it.redoddity.portfolios.model.Vote; import java.io.IOException; import java.sql.SQLException; import java.util.logging.Level; @@ -25,11 +27,18 @@ public class ProjectController extends ApplicationController{ private ProjectDAO projectDAO; + + private VoteDAO voteDAO; @Autowired public void setProjectDAO(ProjectDAO projectDAO) { this.projectDAO = projectDAO; } + + @Autowired + public void setVoteDAO(VoteDAO voteDAO) { + this.voteDAO = voteDAO; + } public void newproject() throws ServletException, IOException { render("new"); @@ -55,7 +64,10 @@ public void create() throws SQLException, ServletException, IOException { public void view() throws ServletException, IOException { try { String projectId = (String) request.getAttribute("id"); - request.setAttribute("project", projectDAO.findById(projectId)); + Project project = projectDAO.findById(projectId); + request.setAttribute("project", project); + Vote vote = voteDAO.getUserVoteForProject(getCurrentUser(), project); + request.setAttribute("vote", vote == null ? 0 : vote.getValue()); render("view"); } catch (SQLException ex) { Logger.getLogger(ProjectController.class.getName()).log(Level.SEVERE, null, ex); diff --git a/src/main/java/it/redoddity/portfolios/controller/VoteController.java b/src/main/java/it/redoddity/portfolios/controller/VoteController.java index 50c1095..4c67da1 100644 --- a/src/main/java/it/redoddity/portfolios/controller/VoteController.java +++ b/src/main/java/it/redoddity/portfolios/controller/VoteController.java @@ -4,12 +4,15 @@ */ package it.redoddity.portfolios.controller; +import it.redoddity.portfolios.dao.ProjectDAO; import it.redoddity.portfolios.dao.VoteDAO; import it.redoddity.portfolios.model.Project; import it.redoddity.portfolios.model.User; import it.redoddity.portfolios.model.Vote; import java.io.IOException; import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.servlet.ServletException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; @@ -20,21 +23,42 @@ * @author Ale */ @Scope("prototype") -@Controller(value="vote") -public class VoteController extends ApplicationController{ - - private VoteDAO voteDAO; - +@Controller(value = "vote") +public class VoteController extends ApplicationController { + + private VoteDAO voteDAO; + private ProjectDAO projectDAO; + @Autowired public void setVoteDAO(VoteDAO voteDAO) { this.voteDAO = voteDAO; } - - public void create() throws SQLException, ServletException, IOException { - + + @Autowired + public void setProjectDAO(ProjectDAO projectDAO) { + this.projectDAO = projectDAO; + } + + public void vote() throws ServletException, IOException { + try { + String projectId = request.getParameter("projectId"); + Vote v = voteDAO.getUserVoteForProject(getCurrentUser(), projectDAO.findById(projectId)); + if (v != null) { + v.bind(request.getParameterMap(), validator); + voteDAO.update(v); + } else { + v = new Vote(); + v.bind(request.getParameterMap(), validator); + voteDAO.create(v); + if (isJson()) { + renderJson(v.getId()); + } else { + redirect("project", "view"); + } + } + + } catch (SQLException ex) { + Logger.getLogger(VoteController.class.getName()).log(Level.SEVERE, null, ex); + } } - - - - } diff --git a/src/main/java/it/redoddity/portfolios/dao/VoteDAO.java b/src/main/java/it/redoddity/portfolios/dao/VoteDAO.java index 1a1a1ea..31dc78f 100644 --- a/src/main/java/it/redoddity/portfolios/dao/VoteDAO.java +++ b/src/main/java/it/redoddity/portfolios/dao/VoteDAO.java @@ -5,18 +5,30 @@ package it.redoddity.portfolios.dao; import it.redoddity.dao.BaseDAO; +import it.redoddity.portfolios.model.Project; +import it.redoddity.portfolios.model.User; import it.redoddity.portfolios.model.Vote; import it.redoddity.utils.DatabaseConnectionInfo; +import java.sql.SQLException; +import java.util.List; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; /** * * @author madchicken */ +@Repository public class VoteDAO extends BaseDAO { @Autowired public VoteDAO(DatabaseConnectionInfo db) { super(Vote.class, db); Vote.setDao(this); } + + public Vote getUserVoteForProject(User user, Project project) throws SQLException { + List votes = select("select * from vote where userId = ? and projectId = ?", user.getId(), project.getId()); + return (votes.size() == 1) ? votes.get(0) : null; + } + } diff --git a/src/main/java/it/redoddity/portfolios/model/Vote.java b/src/main/java/it/redoddity/portfolios/model/Vote.java index f5805fd..1087f2c 100644 --- a/src/main/java/it/redoddity/portfolios/model/Vote.java +++ b/src/main/java/it/redoddity/portfolios/model/Vote.java @@ -7,6 +7,7 @@ import it.redoddity.dao.BaseDAO; import it.redoddity.model.Validatable; import it.redoddity.portfolios.dao.VoteDAO; +import java.util.Map; /** * @@ -14,6 +15,13 @@ */ public class Vote extends Validatable { private static VoteDAO dao; + + public Vote(Map properties) { + super(properties); + } + + public Vote() { + } public static void setDao(BaseDAO dao) { Vote.dao = (VoteDAO)dao; @@ -26,7 +34,7 @@ public static BaseDAO getDao() { private Integer value; private String userId; private String projectId; - + public void setValue(Integer value) { this.value = value; } diff --git a/src/main/webapp/WEB-INF/views/project/view.jsp b/src/main/webapp/WEB-INF/views/project/view.jsp index 6916198..d6aa48c 100644 --- a/src/main/webapp/WEB-INF/views/project/view.jsp +++ b/src/main/webapp/WEB-INF/views/project/view.jsp @@ -1,3 +1,4 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> @@ -23,6 +24,71 @@

${project.description}

+ +
+
+ + + + + +
+
+
+ ← Go Back + diff --git a/src/main/webapp/template.jsp b/src/main/webapp/template.jsp index a4d65a5..3672d79 100644 --- a/src/main/webapp/template.jsp +++ b/src/main/webapp/template.jsp @@ -16,6 +16,7 @@ padding-bottom: 40px; } + @@ -84,7 +85,7 @@ - + From cbe139508b6bb4a6fc425b85024a98430598d268 Mon Sep 17 00:00:00 2001 From: Ale Date: Fri, 20 Apr 2012 17:19:46 +0200 Subject: [PATCH 3/3] Merged rating with head --- .../portfolios/controller/VoteController.java | 21 +++++++++++++----- .../webapp/WEB-INF/views/project/view.jsp | 15 ++++++++++--- src/main/webapp/img/ajax-loader.gif | Bin 0 -> 1737 bytes 3 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 src/main/webapp/img/ajax-loader.gif diff --git a/src/main/java/it/redoddity/portfolios/controller/VoteController.java b/src/main/java/it/redoddity/portfolios/controller/VoteController.java index 4c67da1..8476350 100644 --- a/src/main/java/it/redoddity/portfolios/controller/VoteController.java +++ b/src/main/java/it/redoddity/portfolios/controller/VoteController.java @@ -11,6 +11,7 @@ import it.redoddity.portfolios.model.Vote; import java.io.IOException; import java.sql.SQLException; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletException; @@ -42,7 +43,8 @@ public void setProjectDAO(ProjectDAO projectDAO) { public void vote() throws ServletException, IOException { try { String projectId = request.getParameter("projectId"); - Vote v = voteDAO.getUserVoteForProject(getCurrentUser(), projectDAO.findById(projectId)); + Project project = projectDAO.findById(projectId); + Vote v = voteDAO.getUserVoteForProject(getCurrentUser(), project); if (v != null) { v.bind(request.getParameterMap(), validator); voteDAO.update(v); @@ -50,11 +52,18 @@ public void vote() throws ServletException, IOException { v = new Vote(); v.bind(request.getParameterMap(), validator); voteDAO.create(v); - if (isJson()) { - renderJson(v.getId()); - } else { - redirect("project", "view"); - } + } + List votes = voteDAO.findVotesByProject(project); + int sum = 0; + for (Vote vote : votes) { + sum += vote.getValue(); + } + project.setRating(new Float(sum/votes.size())); + projectDAO.update(project); + if (isJson()) { + renderJson(project.getRating().toString()); + } else { + redirect("project", "view"); } } catch (SQLException ex) { diff --git a/src/main/webapp/WEB-INF/views/project/view.jsp b/src/main/webapp/WEB-INF/views/project/view.jsp index 7e54b1e..bf7b740 100644 --- a/src/main/webapp/WEB-INF/views/project/view.jsp +++ b/src/main/webapp/WEB-INF/views/project/view.jsp @@ -22,9 +22,9 @@
  • ${project.description}

    -

    Rating:

    4.0

    +

    Rating:

    ${project.rating}

    - ${collaborator.nickName} + ${collaborator.nickName}rating
  • @@ -37,7 +37,9 @@ + + ← Go Back @@ -77,12 +79,19 @@ url: "${root}/vote/vote", dataType: 'json', type: 'POST', + beforeSend: function() { + $('#spinner').removeClass("hidden"); + }, + complete: function() { + $('#spinner').addClass("hidden"); + }, data: { value: value, userId: "${user.id}", projectId: "${project.id}" }, - success: function() { + success: function(rating) { + $('#rating').html(""+rating); vote = new Number(value); resetStars(); }, diff --git a/src/main/webapp/img/ajax-loader.gif b/src/main/webapp/img/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..148005da279b97c0acc697d48a815645977dc723 GIT binary patch literal 1737 zcmYk+ZA?>H8o=>msePlC7H(UlOeuva6-udX=eG2X-nQJ9g5||K3}WrHKr7Zx(JnHq zYm9Sl?~UuSa${USIL0u>7~?RkfNPD*`ob8-IL0xKV;t8tt}(_n#yG|p*O+y6r*3#Y zo}4H7<@}T5Z^5mNF)7XZ9@^9BHL{rdI2d-q18QMcRe^ZC;0^r1tCZr{Fr`0(NC z>T0c4YcLp46m_{=$z<~M>C@%q<(W+8@#Du&o;;bKpWn4>S4T%jBoaAu=FHWrS8X<% zOePx}8#{LFSU4Qswr$(Jd-rIX7KucIgM$YS97rS*Cr_Tlaah-n{wj*|S@>Zf)JV^~8x2Gcz-7ZEam$UA?`%eSLi% zkH_I~T)1#yWMsr>G(LLtsJ6Ct_wL<2Jv};|PN`H*OiYAAq2l7=ojZ393=Ejf=8G3E zUcP+!!Gi~U=R0Kh!QmGv~cD#M_U#IdvW!_9YHXI*NeZFCMP!&tY zMpHwv0sV$_VhB|Jn+*hSFIK)O3^fz0y;w)HQEw<%^7csgZvS0G!2RP60Ld&xDXLb~ z(-g0~x>gTSn}re-e(+&k1GE^ND9Pd!D`^x#_JM-Jk}=?HazeIHGHr4Z{<1uku9sN;jT0*bq@ZR zy5l(W&#&;^(fMKyE012XSU8p!+6zAE5w2aQpn;?GDKjD1idkWAsSnflj1#qo+1HjNgl{r4E%i_$QP7s;6!vR z8hE*_oFdUOVKPNoBkKn{rBZL#Mj?+>4}=`_V10)I_KOn?5P!A~>PlR>U^)qn0Yi?^ z*F&Y*l%qb9`>$rBac>T_kw``2EM;^4K>9zbzzB=QfHX)^%I(#9J(%6yaGS>Yip)z@ z@t=GD;?C;|7VF0Ix+bks9I8zDY0xO=)+}GYHW><1SXCgUz@46TMePof&={?B;?p)e zZ0y!DARsJ&K^;FQ+4u=eC2TpQ_+vPf`i>z!$UvE+FBkl*75cTVT&T7R;!&%b*|ZEJ z8={SB1GGE`n<=E3#a9zf6Po_lgbEifEnPCSq8#DnjqJt7_lc3%P+X~zG|_-xw>d61 z2TF`G%I6Ts+$IxC@S(Vj#H|iH9aNRLp}SwffcV-JbXkdlVSeGHzfRj z;-!m$?-Lu`joLa1hR}e(to^|X-e!S|k}9Hp0=22jy1OwFb-Nm9k2&54o&0Z@p)Ls| zd?p6CxPyP4Ig3ZQP&&S_ss^g$zU%9$HNRND; z4%e^AlsXu!YD1y$%HE%U`TFj}`^22Zx}EvN7H5;)Wmg+$U?Y5d7Ur>bswq_3ATPx0w-9QSx`*AL7f4I3iUbdbvlHZ_8bb`@^p|+G4|{ zQXHj8)Py5_KA)4)&^Dymj*!?g{WyWSOt7jpG!FPOA8f6zn?k&eurN$ap}~GAtUohu zt2hbPuhCBVdL=MkxMfPB!yv1*XEQC6^A^BR$FQ-}iDRisxq_-wwI|zFMYzh?xSzLj Wc_{4u<=a1<$G!l-{_f-Z-~1P&zb^m) literal 0 HcmV?d00001