Skip to content
This repository has been archived by the owner on Oct 30, 2018. It is now read-only.

Commit

Permalink
Merge branch 'master' of https://github.com/madchicken/portfolios
Browse files Browse the repository at this point in the history
Conflicts:
	src/main/webapp/WEB-INF/views/project/view.jsp
  • Loading branch information
Daniel Francesconi committed Apr 20, 2012
2 parents 12eb2da + cbe1395 commit 2d48e04
Show file tree
Hide file tree
Showing 10 changed files with 163 additions and 29 deletions.
12 changes: 6 additions & 6 deletions src/main/database/portfolios.sql
Expand Up @@ -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 */;

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/it/redoddity/dao/BaseDAO.java
Expand Up @@ -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++;
}
Expand Down
Expand Up @@ -34,13 +34,10 @@ public void setProjectDAO(ProjectDAO projectDAO) {

@Override
public void index() throws ServletException, IOException {
try {

User user = getCurrentUser();
List<Project> ownProjects = projectDAO.findUserProjects(user);
request.setAttribute("ownProjects", ownProjects);
render("index");
} catch (SQLException ex) {
Logger.getLogger(DashboardController.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Expand Up @@ -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;
Expand All @@ -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");
Expand All @@ -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);
Expand Down
Expand Up @@ -4,12 +4,16 @@
*/
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.List;
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;
Expand All @@ -20,21 +24,50 @@
* @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");
Project project = projectDAO.findById(projectId);
Vote v = voteDAO.getUserVoteForProject(getCurrentUser(), project);
if (v != null) {
v.bind(request.getParameterMap(), validator);
voteDAO.update(v);
} else {
v = new Vote();
v.bind(request.getParameterMap(), validator);
voteDAO.create(v);
}
List<Vote> 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) {
Logger.getLogger(VoteController.class.getName()).log(Level.SEVERE, null, ex);
}
}




}
11 changes: 9 additions & 2 deletions src/main/java/it/redoddity/portfolios/dao/VoteDAO.java
Expand Up @@ -12,20 +12,27 @@
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<Vote> {

@Autowired
public VoteDAO(DatabaseConnectionInfo db) {
super(Vote.class, db);
Vote.setDao(this);
}

public Vote getUserVoteForProject(User user, Project project) throws SQLException {
List<Vote> votes = select("select * from vote where userId = ? and projectId = ?", user.getId(), project.getId());
return (votes.size() == 1) ? votes.get(0) : null;
}

public List<Vote> getVotesByProject(Project project) throws SQLException {
return select("select * from vote where project_id =?", project.getId());
public List<Vote> findVotesByProject(Project project) throws SQLException {
return select("select * from vote where projectId =?", project.getId());
}
}
10 changes: 9 additions & 1 deletion src/main/java/it/redoddity/portfolios/model/Vote.java
Expand Up @@ -7,13 +7,21 @@
import it.redoddity.dao.BaseDAO;
import it.redoddity.model.Validatable;
import it.redoddity.portfolios.dao.VoteDAO;
import java.util.Map;

/**
*
* @author madchicken
*/
public class Vote extends Validatable {
private static VoteDAO dao;

public Vote(Map<String, Object> properties) {
super(properties);
}

public Vote() {
}

public static void setDao(BaseDAO dao) {
Vote.dao = (VoteDAO)dao;
Expand All @@ -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;
}
Expand Down
78 changes: 77 additions & 1 deletion src/main/webapp/WEB-INF/views/project/view.jsp
Expand Up @@ -22,9 +22,25 @@
</li>
<li class="span8">
<p>${project.description}</p>
<h3>Rating: </h3><h1>4.0</h1>
<h3>Rating: </h3><h1><span id="rating">${project.rating}</span><span id="spinner" class="hidden"><image src="${contextRoot}/img/ajax-loader.gif"/></span></h1>
<c:forEach items="${project.getCollaborators()}" var="collaborator">
${collaborator.nickName}rating
</c:forEach>
</li>
</ul>
<c:if test="${not empty user}">
<div class="btn-toolbar" style="margin-bottom: 9px">
<div class="btn-group">
<a class="btn star" href="#" id="star1"><i class="icon-star-empty"></i></a>
<a class="btn star" href="#" id="star2"><i class="icon-star-empty"></i></a>
<a class="btn star" href="#" id="star3"><i class="icon-star-empty"></i></a>
<a class="btn star" href="#" id="star4"><i class="icon-star-empty"></i></a>
<a class="btn star" href="#" id="star5"><i class="icon-star-empty"></i></a>
</div>

</div>

</c:if>
<table class="table table-bordered table-striped">
<thead>
<tr>
Expand All @@ -42,5 +58,65 @@
</tbody>
</table>
<a class="btn" href="${root}/dashboard">&larr; Go Back</a>
<script type="text/javascript">
var vote = ${vote};
$(function() {
var resetStars = function() {
for(i = 1; i < vote+1;i++){
$("#star"+i+" i").removeClass('icon-star-empty').addClass('icon-star');
}
for(i = vote+1; i < 6;i++){
$("#star"+i+" i").removeClass('icon-star').addClass('icon-star-empty');
}
};
resetStars();
$('.star').mouseover( function() {
$this = $(this);
var id = $this.attr('id');
var value = id.substr('star'.length, 1);
var to = new Number(value)+1;
for(i = 1; i < to;i++){
$("#star"+i+" i").removeClass('icon-star-empty').addClass('icon-star');
}
for(i = to; i < 6;i++){
$("#star"+i+" i").removeClass('icon-star').addClass('icon-star-empty');
}
});
$('.star').mouseout( function() {
resetStars();
});
$('.star').click(function(){
var id = $this.attr('id');
var value = id.substr('star'.length, 1);
$.ajax({
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(rating) {
$('#rating').html(""+rating);
vote = new Number(value);
resetStars();
},
error: function() {
resetStars();
}
})
});
});
</script>
</body>
</html>
Binary file added src/main/webapp/img/ajax-loader.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion src/main/webapp/template.jsp
Expand Up @@ -16,6 +16,7 @@
padding-bottom: 40px;
}
</style>
<script src="${contextRoot}/js/jquery.js"></script>
<link href="${contextRoot}/css/bootstrap-responsive.css" rel="stylesheet">

<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
Expand Down Expand Up @@ -85,7 +86,7 @@
<!-- Le javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="${contextRoot}/js/jquery.js"></script>

<script src="${contextRoot}/js/bootstrap.js"></script>

</body>
Expand Down

0 comments on commit 2d48e04

Please sign in to comment.