You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by im...@apache.org on 2007/03/03 20:31:14 UTC
svn commit: r514223 - in /myfaces/fusion/trunk/examples/src/main:
java/org/apache/myfaces/examples/ballot/backings/
java/org/apache/myfaces/examples/ballot/model/
java/org/apache/myfaces/examples/lib/ webapp/WEB-INF/ webapp/ballot/
Author: imario
Date: Sat Mar 3 11:31:13 2007
New Revision: 514223
URL: http://svn.apache.org/viewvc?view=rev&rev=514223
Log:
made min, max and count of votes per voter configureable
Added:
myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoteTopicCmp.java
Modified:
myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotHall.java
myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoteTopic.java
myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoter.java
myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Item.java
myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Topic.java
myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Vote.java
myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/lib/FacesUtils.java
myfaces/fusion/trunk/examples/src/main/webapp/WEB-INF/applicationContext.xml
myfaces/fusion/trunk/examples/src/main/webapp/ballot/Topic.jsp
myfaces/fusion/trunk/examples/src/main/webapp/ballot/VoteTopic.jsp
Modified: myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotHall.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotHall.java?view=diff&rev=514223&r1=514222&r2=514223
==============================================================================
--- myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotHall.java (original)
+++ myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotHall.java Sat Mar 3 11:31:13 2007
@@ -72,7 +72,7 @@
if (!StringUtils.isEmpty(uuid) && !StringUtils.isEmpty(uid))
{
Voter voter = getVoterDao().getByKey(Long.parseLong(uid, 10));
- if (uuid.equals(voter.getIdentification()))
+ if (voter != null && uuid.equals(voter.getIdentification()))
{
getBallotState().setVoterId(voter.getId());
getBallotState().setAuthenticated(true);
Modified: myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoteTopic.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoteTopic.java?view=diff&rev=514223&r1=514222&r2=514223
==============================================================================
--- myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoteTopic.java (original)
+++ myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoteTopic.java Sat Mar 3 11:31:13 2007
@@ -24,10 +24,10 @@
package org.apache.myfaces.examples.ballot.backings;
import org.apache.commons.lang.StringUtils;
+import org.apache.myfaces.examples.ballot.dao.ItemDao;
import org.apache.myfaces.examples.ballot.dao.TopicDao;
import org.apache.myfaces.examples.ballot.dao.VoteDao;
import org.apache.myfaces.examples.ballot.dao.VoterDao;
-import org.apache.myfaces.examples.ballot.dao.ItemDao;
import org.apache.myfaces.examples.ballot.lib.BallotState;
import org.apache.myfaces.examples.ballot.model.Item;
import org.apache.myfaces.examples.ballot.model.Topic;
@@ -35,25 +35,32 @@
import org.apache.myfaces.examples.ballot.model.Voter;
import org.apache.myfaces.examples.lib.FacesConst;
import org.apache.myfaces.examples.lib.FacesUtils;
+import org.apache.myfaces.examples.lib.SpringUtils;
import org.apache.myfaces.fusion.conversation.Conversation;
import org.apache.myfaces.fusion.conversation.ConversationUtils;
-import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.PlatformTransactionManager;
import javax.faces.context.FacesContext;
+import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
+import javax.servlet.ServletRequest;
import java.util.ArrayList;
+import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class BallotVoteTopic
{
+ private PlatformTransactionManager transactionManager;
+
private TopicDao topicDao;
private VoteDao voteDao;
private VoterDao voterDao;
private ItemDao itemDao;
private BallotState ballotState;
+ private BallotVoteTopicCmp ballotVoteTopicCmp;
private Topic topic;
@@ -89,6 +96,26 @@
}
}
+ public BallotVoteTopicCmp getBallotVoteTopicCmp()
+ {
+ return ballotVoteTopicCmp;
+ }
+
+ public void setBallotVoteTopicCmp(BallotVoteTopicCmp ballotVoteTopicCmp)
+ {
+ this.ballotVoteTopicCmp = ballotVoteTopicCmp;
+ }
+
+ public PlatformTransactionManager getTransactionManager()
+ {
+ return transactionManager;
+ }
+
+ public void setTransactionManager(PlatformTransactionManager transactionManager)
+ {
+ this.transactionManager = transactionManager;
+ }
+
public BallotState getBallotState()
{
return ballotState;
@@ -183,6 +210,18 @@
return topic;
}
+ public void voteChanged(ValueChangeEvent event)
+ {
+ Date now = new Date();
+
+ ItemInfo itemInfo = (ItemInfo) getBallotVoteTopicCmp().getItemInfoTable().getRowData();
+ Vote vote = itemInfo.getVote();
+ vote.setChanged(now);
+
+ ServletRequest sr = (ServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
+ vote.setRemoteIp(sr.getRemoteAddr());
+ }
+
public List<ItemInfo> getItems()
{
if (itemInfos != null)
@@ -217,13 +256,42 @@
return itemInfos;
}
- @Transactional
public String saveAction()
{
+ int voteCount = 0;
+
for (ItemInfo itemInfo : itemInfos)
{
- voteDao.save(itemInfo.getVote());
+ if (itemInfo.getVote().getChoice() != 0)
+ {
+ voteCount++;
+ }
+
+ Date now = new Date();
+
+ Vote vote = itemInfo.getVote();
+ if (vote.getCreated() == null)
+ {
+ vote.setCreated(now);
+ }
+
+ if (vote.getRemoteIp() == null)
+ {
+ ServletRequest sr = (ServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
+ vote.setRemoteIp(sr.getRemoteAddr());
+ }
+
+ voteDao.save(vote);
+ }
+
+ if (voteCount != getTopic().getMaxVoteCount())
+ {
+ FacesUtils.addErrorMessage("you have to choose (not 0 vote) exactly '" + getTopic().getMaxVoteCount() + "' items");
+ return FacesConst.FAILURE;
}
+
+ SpringUtils.commit(transactionManager);
+
BallotVoteTopic newBallotVoteTopic = (BallotVoteTopic) ConversationUtils.invalidateAndRestart(Conversation.getCurrentInstance());
newBallotVoteTopic.initTopic(getTopic().getId());
@@ -239,7 +307,7 @@
}
choices = new ArrayList<SelectItem>();
- for (int i = -2; i < 3; i++)
+ for (int i = getTopic().getMinVote(); i < (getTopic().getMaxVote()+1); i++)
{
choices.add(new SelectItem(i, Integer.toString(i)));
}
Added: myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoteTopicCmp.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoteTopicCmp.java?view=auto&rev=514223
==============================================================================
--- myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoteTopicCmp.java (added)
+++ myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoteTopicCmp.java Sat Mar 3 11:31:13 2007
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2007, Your Corporation. All Rights Reserved.
+ */
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF 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.
+ */
+package org.apache.myfaces.examples.ballot.backings;
+
+import javax.faces.component.UIData;
+
+public class BallotVoteTopicCmp
+{
+ private UIData itemInfoTable;
+
+ public UIData getItemInfoTable()
+ {
+ return itemInfoTable;
+ }
+
+ public void setItemInfoTable(UIData itemInfoTable)
+ {
+ this.itemInfoTable = itemInfoTable;
+ }
+}
Modified: myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoter.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoter.java?view=diff&rev=514223&r1=514222&r2=514223
==============================================================================
--- myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoter.java (original)
+++ myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/backings/BallotVoter.java Sat Mar 3 11:31:13 2007
@@ -152,6 +152,8 @@
if (isNew)
{
sendMail(getVoter().getEmail());
+
+ FacesUtils.addInfoMessage("a mail has been sent to you, use the link in this mail to start using this system");
}
Conversation.getCurrentInstance().invalidate();
Modified: myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Item.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Item.java?view=diff&rev=514223&r1=514222&r2=514223
==============================================================================
--- myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Item.java (original)
+++ myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Item.java Sat Mar 3 11:31:13 2007
@@ -52,7 +52,6 @@
@OneToMany(cascade = CascadeType.REMOVE, mappedBy = "item")
private List<Vote> votes;
-
public Long getId()
{
return id;
Modified: myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Topic.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Topic.java?view=diff&rev=514223&r1=514222&r2=514223
==============================================================================
--- myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Topic.java (original)
+++ myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Topic.java Sat Mar 3 11:31:13 2007
@@ -27,6 +27,7 @@
import javax.persistence.CascadeType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
+import javax.persistence.OrderBy;
import java.util.ArrayList;
import java.util.List;
@@ -47,7 +48,17 @@
@Column(nullable = false, length = 1024)
private String description;
+ @Column(nullable = false)
+ private int minVote;
+
+ @Column(nullable = false)
+ private int maxVote;
+
+ @Column(nullable = false)
+ private int maxVoteCount;
+
@OneToMany(mappedBy="topic", cascade = CascadeType.ALL)
+ @OrderBy(value="content")
private List<Item> items;
private boolean started;
@@ -126,15 +137,33 @@
this.started = started;
}
- /*
- public List<Vote> getVotes()
+ public int getMinVote()
+ {
+ return minVote;
+ }
+
+ public void setMinVote(int minVote)
+ {
+ this.minVote = minVote;
+ }
+
+ public int getMaxVote()
+ {
+ return maxVote;
+ }
+
+ public void setMaxVote(int maxVote)
+ {
+ this.maxVote = maxVote;
+ }
+
+ public int getMaxVoteCount()
{
- return votes;
+ return maxVoteCount;
}
- public void setVotes(List<Vote> votes)
+ public void setMaxVoteCount(int maxVoteCount)
{
- this.votes = votes;
+ this.maxVoteCount = maxVoteCount;
}
- */
}
Modified: myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Vote.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Vote.java?view=diff&rev=514223&r1=514222&r2=514223
==============================================================================
--- myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Vote.java (original)
+++ myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/ballot/model/Vote.java Sat Mar 3 11:31:13 2007
@@ -30,6 +30,9 @@
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.NamedQuery;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import java.util.Date;
@NamedQuery(
name="getVotesForVoter",
@@ -53,6 +56,16 @@
@Column(nullable = false)
public int choice;
+ @Temporal(value= TemporalType.TIMESTAMP)
+ @Column(nullable = false)
+ public Date created;
+
+ @Temporal(value= TemporalType.TIMESTAMP)
+ public Date changed;
+
+ @Column(nullable = false)
+ public String remoteIp;
+
public Long getId()
{
return id;
@@ -91,5 +104,35 @@
public void setChoice(int choice)
{
this.choice = choice;
+ }
+
+ public Date getCreated()
+ {
+ return created;
+ }
+
+ public void setCreated(Date created)
+ {
+ this.created = created;
+ }
+
+ public Date getChanged()
+ {
+ return changed;
+ }
+
+ public void setChanged(Date changed)
+ {
+ this.changed = changed;
+ }
+
+ public String getRemoteIp()
+ {
+ return remoteIp;
+ }
+
+ public void setRemoteIp(String remoteIp)
+ {
+ this.remoteIp = remoteIp;
}
}
Modified: myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/lib/FacesUtils.java
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/lib/FacesUtils.java?view=diff&rev=514223&r1=514222&r2=514223
==============================================================================
--- myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/lib/FacesUtils.java (original)
+++ myfaces/fusion/trunk/examples/src/main/java/org/apache/myfaces/examples/lib/FacesUtils.java Sat Mar 3 11:31:13 2007
@@ -31,12 +31,12 @@
public static void addErrorMessage(String message)
{
FacesContext.getCurrentInstance().addMessage(null,
- new FacesMessage(FacesMessage.SEVERITY_ERROR, message, message));
+ new FacesMessage(FacesMessage.SEVERITY_ERROR, null, message));
}
public static void addInfoMessage(String message)
{
FacesContext.getCurrentInstance().addMessage(null,
- new FacesMessage(FacesMessage.SEVERITY_INFO, message, message));
+ new FacesMessage(FacesMessage.SEVERITY_INFO, null, message));
}
}
Modified: myfaces/fusion/trunk/examples/src/main/webapp/WEB-INF/applicationContext.xml
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/examples/src/main/webapp/WEB-INF/applicationContext.xml?view=diff&rev=514223&r1=514222&r2=514223
==============================================================================
--- myfaces/fusion/trunk/examples/src/main/webapp/WEB-INF/applicationContext.xml (original)
+++ myfaces/fusion/trunk/examples/src/main/webapp/WEB-INF/applicationContext.xml Sat Mar 3 11:31:13 2007
@@ -196,6 +196,15 @@
</bean>
<bean
+ name="ballotVoteTopicCmp"
+ class="org.apache.myfaces.examples.ballot.backings.BallotVoteTopicCmp"
+ scope="request">
+
+ <aop:scoped-proxy/>
+
+ </bean>
+
+ <bean
name="ballotVoteTopic"
class="org.apache.myfaces.examples.ballot.backings.BallotVoteTopic"
scope="conversation"
Modified: myfaces/fusion/trunk/examples/src/main/webapp/ballot/Topic.jsp
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/examples/src/main/webapp/ballot/Topic.jsp?view=diff&rev=514223&r1=514222&r2=514223
==============================================================================
--- myfaces/fusion/trunk/examples/src/main/webapp/ballot/Topic.jsp (original)
+++ myfaces/fusion/trunk/examples/src/main/webapp/ballot/Topic.jsp Sat Mar 3 11:31:13 2007
@@ -68,7 +68,6 @@
<h:outputLabel
for="name"
value="Name"/>
-
<h:inputText
id="name"
value="#{ballotTopic.topic.name}"
@@ -90,9 +89,60 @@
rendered="#{ballotTopic.topicEditable && ballotState.authenticated}">
<f:validateLength maximum="1024" />
</h:inputTextarea>
-
<h:outputText
value="#{ballotTopic.topic.description}"
+ rendered="#{!ballotTopic.topicEditable || !ballotState.authenticated}"/>
+
+ <h:outputLabel
+ for="minVote"
+ value="Minimum vote choice"/>
+ <h:inputText
+ id="minVote"
+ value="#{ballotTopic.topic.minVote}"
+ size="5"
+ maxlength="5"
+ rendered="#{ballotTopic.topicEditable && ballotState.authenticated}">
+ <s:convertNumber
+ minFractionDigits="0"
+ maxFractionDigits="0" />
+ </h:inputText>
+ <h:outputText
+ value="#{ballotTopic.topic.inVote}"
+ rendered="#{!ballotTopic.topicEditable || !ballotState.authenticated}"/>
+
+ <h:outputLabel
+ for="maxVote"
+ value="Maximum vote choice"/>
+ <h:inputText
+ id="maxVote"
+ value="#{ballotTopic.topic.maxVote}"
+ size="5"
+ maxlength="5"
+ rendered="#{ballotTopic.topicEditable && ballotState.authenticated}">
+ <s:convertNumber
+ minFractionDigits="0"
+ maxFractionDigits="0" />
+ </h:inputText>
+ <h:outputText
+ value="#{ballotTopic.topic.minVote}"
+ rendered="#{!ballotTopic.topicEditable || !ballotState.authenticated}"/>
+
+ <h:outputLabel
+ for="maxVoteCount"
+ value="Maximum number of votes per voter"/>
+ <h:inputText
+ id="maxVoteCount"
+ value="#{ballotTopic.topic.maxVoteCount}"
+ size="5"
+ maxlength="5"
+ rendered="#{ballotTopic.topicEditable && ballotState.authenticated}">
+ <f:validateLongRange minimum="0" maximum="99999" />
+ <s:convertNumber
+ minFractionDigits="0"
+ maxFractionDigits="0" />
+ </h:inputText>
+ <h:outputText
+ value="#{ballotTopic.topic.maxVoteCount}"
rendered="#{!ballotTopic.topicEditable || !ballotState.authenticated}"/>
<h:outputLabel
Modified: myfaces/fusion/trunk/examples/src/main/webapp/ballot/VoteTopic.jsp
URL: http://svn.apache.org/viewvc/myfaces/fusion/trunk/examples/src/main/webapp/ballot/VoteTopic.jsp?view=diff&rev=514223&r1=514222&r2=514223
==============================================================================
--- myfaces/fusion/trunk/examples/src/main/webapp/ballot/VoteTopic.jsp (original)
+++ myfaces/fusion/trunk/examples/src/main/webapp/ballot/VoteTopic.jsp Sat Mar 3 11:31:13 2007
@@ -73,6 +73,7 @@
</h:panelGrid>
<t:dataTable
+ binding="#{ballotVoteTopicCmp.itemInfoTable}"
styleClass="inputTable"
var="itemInfo"
value="#{ballotVoteTopic.items}"
@@ -103,7 +104,9 @@
<h:outputText value="Vote"/>
</f:facet>
- <h:selectOneRadio value="#{itemInfo.vote.choice}">
+ <h:selectOneRadio
+ value="#{itemInfo.vote.choice}"
+ valueChangeListener="#{ballotVoteTopic.voteChanged}">
<f:selectItems value="#{ballotVoteTopic.choices}" />
</h:selectOneRadio>