From 3142cc333154fe5cf255861fb1441335b30c4632 Mon Sep 17 00:00:00 2001 From: Fredrik Norberg <fnorbe@dsv.su.se> Date: Fri, 22 Jul 2011 15:31:38 +0200 Subject: [PATCH 1/7] started to improve the traffic lights --- .../dsv/scipro/basepanels/MainMenuPanel.java | 4 + .../checklists/panels/TrafficLightPanel.html | 21 ++++++ .../checklists/panels/TrafficLightPanel.java | 74 +++++++++++++++++++ .../scipro/project/pages/SelfCheckPage.html | 9 +++ .../scipro/project/pages/SelfCheckPage.java | 19 +++++ .../project/panels/ProjectTabMenuPanel.java | 2 + src/main/webapp/css/scipro.css | 4 + 7 files changed, 133 insertions(+) create mode 100644 src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html create mode 100644 src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java create mode 100644 src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html create mode 100644 src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java diff --git a/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java b/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java index 5c8eebbf94..d81e73fe2b 100644 --- a/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java +++ b/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java @@ -25,7 +25,9 @@ import se.su.dsv.scipro.message.pages.PrivateMessagesPage; import se.su.dsv.scipro.peer.pages.PeerReviewTemplatePage; import se.su.dsv.scipro.project.pages.FinalSeminarProjectListPage; import se.su.dsv.scipro.project.pages.ProjectOppositionPage; +import se.su.dsv.scipro.project.pages.ProjectPartnerPage; import se.su.dsv.scipro.project.pages.ProjectStartPage; +import se.su.dsv.scipro.project.pages.SelfCheckPage; import se.su.dsv.scipro.security.auth.MetaDataActionStrategy; import se.su.dsv.scipro.security.auth.roles.Roles; import se.su.dsv.scipro.supervisor.pages.SupervisorProjectsFinalSeminarPage; @@ -55,6 +57,8 @@ public class MainMenuPanel extends Panel implements IWiQueryPlugin { projectMenuSubItems.add(new MenuItem(ProjectStartPage.MAIN_MENU_LABEL, ProjectStartPage.class)); projectMenuSubItems.add(new MenuItem(ProjectOppositionPage.MAIN_MENU_LABEL, ProjectOppositionPage.class)); projectMenuSubItems.add(new MenuItem(FinalSeminarProjectListPage.MAIN_MENU_LABEL, FinalSeminarProjectListPage.class)); + projectMenuSubItems.add(new MenuItem("Project Partner", ProjectPartnerPage.class)); + projectMenuSubItems.add(new MenuItem("Self Check", SelfCheckPage.class)); MainMenuItem projectMenuItem = new MainMenuItem("projectMenuItem", ProjectStartPage.MAIN_MENU_LABEL, ProjectStartPage.class, containerClass, projectMenuSubItems); add(projectMenuItem); diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html new file mode 100644 index 0000000000..a235198823 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html + xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> +<head> +<meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> +</head> +<body> + <wicket:panel> + <div wicket:id="stateOfMindContainer"> + <form wicket:id="form"> + <table wicket:id="group"> + <tr wicket:id="persons"> + <td><input type="radio" wicket:id="radio" /></td> + <td> <img wicket:id="image"/></td> + </tr> + </table> + </form> + </div> + </wicket:panel> +</body> +</html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java new file mode 100644 index 0000000000..1aa44102c5 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java @@ -0,0 +1,74 @@ +package se.su.dsv.scipro.checklists.panels; + +import org.apache.wicket.AttributeModifier; +import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.basic.MultiLineLabel; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.Radio; +import org.apache.wicket.markup.html.form.RadioGroup; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.AbstractReadOnlyModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.spring.injection.annot.SpringBean; +import org.odlabs.wiquery.ui.core.DefaultJsScopeUiEvent; +import org.odlabs.wiquery.ui.slider.Slider; + +import se.su.dsv.scipro.SciProSession; +import se.su.dsv.scipro.data.dao.interfaces.ProjectDao; +import se.su.dsv.scipro.data.dataobjects.Project; +import se.su.dsv.scipro.data.enums.StateOfMind; +import se.su.dsv.scipro.knol.resource.page.StaticImage; +import edu.emory.mathcs.backport.java.util.Arrays; + +/** + * @author fnorbe@dsv.su.se + */ + +public class TrafficLightPanel extends Panel { + + + private static final long serialVersionUID = 8862892008428526067L; + + + public TrafficLightPanel(String id, WebPage parent) { + super(id); + WebMarkupContainer stateOfMindContainer = new WebMarkupContainer( + "stateOfMindContainer"); + add(stateOfMindContainer); + + Form<StateOfMind> f = new Form<StateOfMind>("form"); + stateOfMindContainer.add(f); + RadioGroup<StateOfMind> group = new RadioGroup<StateOfMind>("group"); + f.add(group); + + ListView<StateOfMind> persons = new ListView<StateOfMind>("persons", + Arrays.asList(StateOfMind.values())) { + protected void populateItem(ListItem<StateOfMind> item) { + StateOfMind stateOfMind = item.getModelObject(); + item.add(new Radio<StateOfMind>("radio", item.getModel())); + StaticImage image = null; + if (stateOfMind.equals(StateOfMind.FINE)) { + image = new StaticImage("image", new Model<String>( + "images/icons/green_ball_32.png")); + } else if (stateOfMind.equals(StateOfMind.NEEDHELP)) { + image = new StaticImage("image", new Model<String>( + "images/icons/red_ball_32.png")); + } else if (stateOfMind.equals(StateOfMind.NEUTRAL)) { + image = new StaticImage("image", new Model<String>( + "images/icons/yellow_ball_32.png")); + } + item.add(image); + }; + }; + group.add(persons); + } + +} + diff --git a/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html b/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html new file mode 100644 index 0000000000..bca333a27b --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<html + xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> +<body> +<wicket:extend> + <div wicket:id="trafficLightPanel""></div> +</wicket:extend> +</body> +</html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java b/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java new file mode 100644 index 0000000000..2cdae57ca1 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java @@ -0,0 +1,19 @@ +package se.su.dsv.scipro.project.pages; + +import org.apache.wicket.PageParameters; + +import se.su.dsv.scipro.checklists.panels.TrafficLightPanel; + +/** + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ + +public class SelfCheckPage extends ProjectPage { + + public SelfCheckPage(PageParameters pp) { + super(pp); + add(new TrafficLightPanel("trafficLightPanel", this)); + } + +} diff --git a/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java b/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java index b351cbd3c9..719379f0e4 100644 --- a/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java +++ b/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java @@ -18,6 +18,7 @@ import se.su.dsv.scipro.project.pages.ProjectPage; import se.su.dsv.scipro.project.pages.ProjectPartnerPage; import se.su.dsv.scipro.project.pages.ProjectSchedulePlannerPage; import se.su.dsv.scipro.project.pages.ProjectStartPage; +import se.su.dsv.scipro.project.pages.SelfCheckPage; import se.su.dsv.scipro.repository.panels.ProjectFilePanel; /** @@ -47,6 +48,7 @@ public class ProjectTabMenuPanel extends AbstractMenuPanel { itemList.add(new MenuItem("Peer review", ProjectPeerPortalPage.class)); itemList.add(new MenuItem("All Final Seminars", FinalSeminarProjectListPage.class)); itemList.add(new MenuItem("Conference", ProjectConferencePage.class)); + itemList.add(new MenuItem("Self Check", SelfCheckPage.class)); } else { itemList.add(new MenuItem("No active project!", NoActiveProjectPage.class)); itemList.add(new MenuItem("Project Partner", ProjectPartnerPage.class)); diff --git a/src/main/webapp/css/scipro.css b/src/main/webapp/css/scipro.css index 1d5fe781cd..a607f46718 100644 --- a/src/main/webapp/css/scipro.css +++ b/src/main/webapp/css/scipro.css @@ -1053,3 +1053,7 @@ div.wicket-aa ul li.selected { font-size: 1.4em; font-style: strong; } + +body { + font: 0.8em/21px arial,sans-serif; +} From 94133f4bace0d0dab8af9ff300a19c6376b7b857 Mon Sep 17 00:00:00 2001 From: Fredrik Norberg <fnorbe@dsv.su.se> Date: Mon, 25 Jul 2011 14:58:46 +0200 Subject: [PATCH 2/7] added base classes for dynamic checklists --- .../dao/interfaces/CheckListAnswerDao.java | 7 + .../data/dao/interfaces/CheckListDao.java | 7 + .../dao/interfaces/CheckListQuestionDao.java | 7 + .../dao/interfaces/CheckListTemplateDao.java | 8 + .../dao/jpa/CheckListAnswerDaoJPAImp.java | 23 +++ .../data/dao/jpa/CheckListDaoJPAImp.java | 21 +++ .../dao/jpa/CheckListQuestionDaoJPAImp.java | 21 +++ .../dao/jpa/CheckListTemplateDaoJPAImp.java | 23 +++ .../scipro/data/dataobjects/CheckList.java | 140 ++++++++++++++++++ .../data/dataobjects/CheckListAnswer.java | 106 +++++++++++++ .../data/dataobjects/CheckListQuestion.java | 116 +++++++++++++++ .../data/dataobjects/CheckListTemplate.java | 107 +++++++++++++ .../data/enums/CheckListQuestionAnswer.java | 7 + 13 files changed, 593 insertions(+) create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListAnswerDao.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListQuestionDao.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListTemplateDao.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListAnswerDaoJPAImp.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListQuestionDaoJPAImp.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListTemplateDaoJPAImp.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java create mode 100644 src/main/java/se/su/dsv/scipro/data/enums/CheckListQuestionAnswer.java diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListAnswerDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListAnswerDao.java new file mode 100644 index 0000000000..8fe29de76d --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListAnswerDao.java @@ -0,0 +1,7 @@ +package se.su.dsv.scipro.data.dao.interfaces; + +import se.su.dsv.scipro.data.dataobjects.CheckListAnswer; + +public interface CheckListAnswerDao extends Dao<CheckListAnswer> { + +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java new file mode 100644 index 0000000000..0dab6f8068 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java @@ -0,0 +1,7 @@ +package se.su.dsv.scipro.data.dao.interfaces; + +import se.su.dsv.scipro.data.dataobjects.CheckList; + +public interface CheckListDao extends Dao<CheckList> { + +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListQuestionDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListQuestionDao.java new file mode 100644 index 0000000000..fbf00a0b71 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListQuestionDao.java @@ -0,0 +1,7 @@ +package se.su.dsv.scipro.data.dao.interfaces; + +import se.su.dsv.scipro.data.dataobjects.CheckListQuestion; + +public interface CheckListQuestionDao extends Dao<CheckListQuestion> { + +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListTemplateDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListTemplateDao.java new file mode 100644 index 0000000000..24885dffb9 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListTemplateDao.java @@ -0,0 +1,8 @@ +package se.su.dsv.scipro.data.dao.interfaces; + +import se.su.dsv.scipro.data.dataobjects.CheckListTemplate; + + +public interface CheckListTemplateDao extends Dao<CheckListTemplate> { + +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListAnswerDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListAnswerDaoJPAImp.java new file mode 100644 index 0000000000..e30b653abd --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListAnswerDaoJPAImp.java @@ -0,0 +1,23 @@ +package se.su.dsv.scipro.data.dao.jpa; + +import org.springframework.stereotype.Repository; + +import se.su.dsv.scipro.data.dao.interfaces.CheckListAnswerDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListQuestionDao; +import se.su.dsv.scipro.data.dataobjects.CheckListAnswer; +import se.su.dsv.scipro.data.dataobjects.CheckListQuestion; + +/** + * + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ + +@Repository("checkListAnswerDao") +public class CheckListAnswerDaoJPAImp extends AbstractDaoJPAImp<CheckListAnswer> + implements CheckListAnswerDao { + + public CheckListAnswerDaoJPAImp() { + super(CheckListAnswer.class); + } +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java new file mode 100644 index 0000000000..4f0786dd92 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java @@ -0,0 +1,21 @@ +package se.su.dsv.scipro.data.dao.jpa; + +import org.springframework.stereotype.Repository; + +import se.su.dsv.scipro.data.dao.interfaces.CheckListDao; +import se.su.dsv.scipro.data.dataobjects.CheckList; + +/** + * + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ + +@Repository("checkListDao") +public class CheckListDaoJPAImp extends AbstractDaoJPAImp<CheckList> + implements CheckListDao { + + public CheckListDaoJPAImp() { + super(CheckList.class); + } +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListQuestionDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListQuestionDaoJPAImp.java new file mode 100644 index 0000000000..35eda47251 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListQuestionDaoJPAImp.java @@ -0,0 +1,21 @@ +package se.su.dsv.scipro.data.dao.jpa; + +import org.springframework.stereotype.Repository; + +import se.su.dsv.scipro.data.dao.interfaces.CheckListQuestionDao; +import se.su.dsv.scipro.data.dataobjects.CheckListQuestion; + +/** + * + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ + +@Repository("checkListQuestionDao") +public class CheckListQuestionDaoJPAImp extends AbstractDaoJPAImp<CheckListQuestion> + implements CheckListQuestionDao { + + public CheckListQuestionDaoJPAImp() { + super(CheckListQuestion.class); + } +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListTemplateDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListTemplateDaoJPAImp.java new file mode 100644 index 0000000000..12e9a906e9 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListTemplateDaoJPAImp.java @@ -0,0 +1,23 @@ +package se.su.dsv.scipro.data.dao.jpa; + +import org.springframework.stereotype.Repository; + +import se.su.dsv.scipro.data.dao.interfaces.CheckListQuestionDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListTemplateDao; +import se.su.dsv.scipro.data.dataobjects.CheckListQuestion; +import se.su.dsv.scipro.data.dataobjects.CheckListTemplate; + +/** + * + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ + +@Repository("checkListTemplateDao") +public class CheckListTemplateDaoJPAImp extends AbstractDaoJPAImp<CheckListTemplate> + implements CheckListTemplateDao { + + public CheckListTemplateDaoJPAImp() { + super(CheckListTemplate.class); + } +} diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java new file mode 100644 index 0000000000..9629983bbf --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java @@ -0,0 +1,140 @@ +package se.su.dsv.scipro.data.dataobjects; + +import java.util.List; + +import javax.persistence.Cacheable; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + +/** + + * @author Fredrik Norberg fnorbe@dsv.su.se + * + */ + +@Entity +@Table(name="checklist") +@Cacheable(true) +@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) //Hibernate +public abstract class CheckList extends LazyDeletableDomainObject{ + + private static final long serialVersionUID = 2959377496669050427L; + + @Id + @GeneratedValue + private Long id; + + @Column(nullable=false) + private String name; + + @ManyToOne(optional=false) + private User creator; + + @Column(nullable=false) + private List<CheckListQuestion> questions; + + @Column(nullable=false) + private ProjectClass level; + + public CheckList() {} + + public CheckList(String name, User creator, ProjectClass level) { + this.name = name; + this.creator = creator; + this.level = level; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getname() { + return name; + } + + public String getName(final int characters) { + String result = name; + if(name.length() > characters) + result = name.substring(0, characters)+".."; + return result; + } + + public void setName(String name) { + this.name = name; + } + + + public void setCreator(User creator) { + this.creator = creator; + } + + public User getCreator() { + return creator; + } + + public List<CheckListQuestion> getquestions(){ + return questions; + } + + public void setquestions(List<CheckListQuestion> questions){ + this.questions=questions; + } + + public void setLevel(ProjectClass level){ + this.level = level; + } + + public ProjectClass getLevel(){ + return level; + } + + @Override + public int hashCode() { + final int weight = 31; + int result = 17; + + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); + + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (obj instanceof CheckList){ + + CheckList other = (CheckList) obj; + + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + + return true; + } + return false; + } + + @Override + public String toString() { + return getname(); + } + +} + + \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java new file mode 100644 index 0000000000..c979fecc97 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java @@ -0,0 +1,106 @@ +package se.su.dsv.scipro.data.dataobjects; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EntityManager; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.TypedQuery; + +import org.apache.wicket.markup.html.panel.Panel; + +import se.su.dsv.scipro.data.enums.CheckListQuestionAnswer; +import se.su.dsv.scipro.data.enums.EventStatus; +import se.su.dsv.scipro.schedule.baseevent.panels.EventScheduleDetailsPanel; +import se.su.dsv.scipro.util.IAjaxCallback; + +/** + * @author Fredrik Norberg fnorbe@dsv.su.se + * + */ +@Entity +@Table(name="checklist_answer") +public class CheckListAnswer extends DomainObject{ + + private static final long serialVersionUID = 2959377496669050427L; + + @Id + @GeneratedValue + private Long id; + + @Enumerated(EnumType.STRING) + private CheckListQuestionAnswer answer; + + @ManyToOne + private User user; + + + public CheckListAnswer() {} + + public CheckListAnswer(User user, CheckListQuestionAnswer answer) { + this.user = user; + this.answer = answer; + } + + public CheckListQuestionAnswer getAnswer() { + return answer; + } + + public void setAnswer(CheckListQuestionAnswer answer) { + this.answer = answer; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @Override + public int hashCode() { + final int weight = 31; + int result = 17; + + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); + + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (obj instanceof CheckListAnswer){ + + CheckListAnswer other = (CheckListAnswer) obj; + + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + + return true; + } + return false; + } + +} \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java new file mode 100644 index 0000000000..fb9d0d90a9 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java @@ -0,0 +1,116 @@ +package se.su.dsv.scipro.data.dataobjects; + +import java.util.List; + +import javax.persistence.Cacheable; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Lob; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + +/** + * @author Fredrik Norberg - fnorbe@dsv.su.se + */ + + +@Entity +@Table(name="checklist_question") +@Cacheable(true) +@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) //Hibernate +public abstract class CheckListQuestion extends DomainObject + implements Comparable<CheckListQuestion> { + + private static final long serialVersionUID = 2959377496669050427L; + + @Id + @GeneratedValue + private Long id; + + @Lob + @Column(nullable=false) + private String question; + + @Column(nullable=false) + private int questionNumber; + + @OneToMany + List<CheckListAnswer> answers; + + public CheckListQuestion() {} + + public CheckListQuestion(String question) { + this.question = question; + questionNumber = answers.size() + 1; + } + + public String getQuestion() { + return question; + } + + public void setQuestion(String question) { + this.question = question; + } + + public int getQuestionNumber() { + return questionNumber; + } + + public void setQuestionNumber(int questionNumber) { + this.questionNumber = questionNumber; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @Override + public int hashCode() { + final int weight = 31; + int result = 17; + + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); + + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (obj instanceof CheckListQuestion){ + + CheckListQuestion other = (CheckListQuestion) obj; + + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + + return true; + } + return false; + } + + @Override + public String toString() { + return getQuestion(); + } + + @Override + public int compareTo(CheckListQuestion other) { + return questionNumber - other.questionNumber; + } +} \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java new file mode 100644 index 0000000000..74a47ffacf --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java @@ -0,0 +1,107 @@ +package se.su.dsv.scipro.data.dataobjects; + +import java.util.List; + +import javax.persistence.Column; +import javax.persistence.ElementCollection; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Lob; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +/** + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ +@Entity +@Table(name="checklist_template") +public class CheckListTemplate extends DomainObject { + + private static final long serialVersionUID = 2959377496669050427L; + + @Id + @GeneratedValue + private Long id; + + @Column(nullable=false) + private String name; + + @Lob + @ElementCollection + List<String> questions; + + @ManyToOne(optional=false) + private User creator; + + public CheckListTemplate() {} + + public CheckListTemplate(String name, User creator) { + this.name = name; + this.creator = creator; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public void setCreator(User creator) { + this.creator = creator; + } + + public User getCreator() { + return creator; + } + + public List<String> getQuestions(){ + return questions; + } + + public void setQuestions(List<String> questions){ + this.questions = questions; + } + + @Override + public int hashCode() { + final int weight = 31; + int result = 17; + + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); + + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (obj instanceof CheckListTemplate){ + + CheckListTemplate other = (CheckListTemplate) obj; + + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + + return true; + } + return false; + } +} \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/data/enums/CheckListQuestionAnswer.java b/src/main/java/se/su/dsv/scipro/data/enums/CheckListQuestionAnswer.java new file mode 100644 index 0000000000..397b191276 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/enums/CheckListQuestionAnswer.java @@ -0,0 +1,7 @@ +package se.su.dsv.scipro.data.enums; + +public enum CheckListQuestionAnswer { + RED, + GREEN, + YELLOW +} From 37387ee4a38192339ef204457479adaa74063523 Mon Sep 17 00:00:00 2001 From: joha-asc <aschan.johan@gmail.com> Date: Wed, 27 Jul 2011 16:46:53 +0200 Subject: [PATCH 3/7] checklist data classes --- .../data/dao/interfaces/CheckListDao.java | 4 + .../data/dao/jpa/CheckListDaoJPAImp.java | 33 ++++- .../scipro/data/dataobjects/CheckList.java | 131 +++++++++--------- .../data/dataobjects/CheckListAnswer.java | 68 +++++---- .../data/dataobjects/CheckListQuestion.java | 63 ++++++--- .../data/dataobjects/CheckListTemplate.java | 21 ++- 6 files changed, 202 insertions(+), 118 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java index 0dab6f8068..4c5058033e 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java @@ -1,7 +1,11 @@ package se.su.dsv.scipro.data.dao.interfaces; +import java.util.List; + import se.su.dsv.scipro.data.dataobjects.CheckList; +import se.su.dsv.scipro.data.dataobjects.Project; public interface CheckListDao extends Dao<CheckList> { + public List<CheckList> findCheckLists(final Project project); } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java index 4f0786dd92..94994e3311 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java @@ -1,9 +1,20 @@ package se.su.dsv.scipro.data.dao.jpa; +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceException; +import javax.persistence.TypedQuery; + +import org.hibernate.ejb.QueryHints; +import org.springframework.orm.jpa.JpaCallback; import org.springframework.stereotype.Repository; import se.su.dsv.scipro.data.dao.interfaces.CheckListDao; import se.su.dsv.scipro.data.dataobjects.CheckList; +import se.su.dsv.scipro.data.dataobjects.Project; /** * @@ -12,10 +23,28 @@ import se.su.dsv.scipro.data.dataobjects.CheckList; */ @Repository("checkListDao") -public class CheckListDaoJPAImp extends AbstractDaoJPAImp<CheckList> - implements CheckListDao { +public class CheckListDaoJPAImp extends AbstractDaoJPAImp<CheckList> implements CheckListDao { public CheckListDaoJPAImp() { super(CheckList.class); } + + public List<CheckList> findCheckLists(final Project project) { + return getJpaTemplate().execute(new JpaCallback<List<CheckList>>() { + public List<CheckList> doInJpa(EntityManager em) throws PersistenceException { + String q = "select s " + "from CheckList s " + "where s.project = :project"; + + TypedQuery<CheckList> query = em.createQuery(q, CheckList.class); + query.setParameter("project", project); + query.setHint(QueryHints.HINT_CACHEABLE, "true"); + try { + return query.getResultList(); + } catch (NoResultException e) { + return new ArrayList<CheckList>(); + } + + } + + }); + } } diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java index 9629983bbf..a44465e669 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java @@ -1,6 +1,7 @@ package se.su.dsv.scipro.data.dataobjects; -import java.util.List; +import java.util.SortedSet; +import java.util.TreeSet; import javax.persistence.Cacheable; import javax.persistence.Column; @@ -8,49 +9,52 @@ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; import javax.persistence.Table; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.Sort; +import org.hibernate.annotations.SortType; /** - - * @author Fredrik Norberg fnorbe@dsv.su.se - * + * + * @author Fredrik Norberg fnorbe@dsv.su.se + * */ @Entity -@Table(name="checklist") +@Table(name = "checklist") @Cacheable(true) -@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) //Hibernate -public abstract class CheckList extends LazyDeletableDomainObject{ +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +// Hibernate +public class CheckList extends DomainObject { private static final long serialVersionUID = 2959377496669050427L; - + @Id @GeneratedValue private Long id; - - @Column(nullable=false) + + @Column(nullable = false) private String name; + + @ManyToOne(optional = false) + private Project project; + - @ManyToOne(optional=false) - private User creator; - - @Column(nullable=false) - private List<CheckListQuestion> questions; - - @Column(nullable=false) - private ProjectClass level; - - public CheckList() {} - - public CheckList(String name, User creator, ProjectClass level) { - this.name = name; - this.creator = creator; - this.level = level; + @OneToMany + @Sort(type = SortType.NATURAL) + private SortedSet<CheckListQuestion> questions = new TreeSet<CheckListQuestion>(); + + public CheckList() { } - + + public CheckList(String name, Project project) { + this.name = name; + this.project = project; + } + public Long getId() { return id; } @@ -59,66 +63,59 @@ public abstract class CheckList extends LazyDeletableDomainObject{ this.id = id; } - public String getname() { - return name; - } - - public String getName(final int characters) { - String result = name; - if(name.length() > characters) - result = name.substring(0, characters)+".."; - return result; - } - public void setName(String name) { this.name = name; } - - - public void setCreator(User creator) { - this.creator = creator; - } - public User getCreator() { - return creator; - } - - public List<CheckListQuestion> getquestions(){ + /** + * @return the questions + */ + public SortedSet<CheckListQuestion> getQuestions() { return questions; } - - public void setquestions(List<CheckListQuestion> questions){ - this.questions=questions; + + /** + * @param questions + * the questions to set + */ + public void setQuestions(SortedSet<CheckListQuestion> questions) { + this.questions = questions; } - - public void setLevel(ProjectClass level){ - this.level = level; + + /** + * @return the project + */ + public Project getProject() { + return project; } - - public ProjectClass getLevel(){ - return level; + + /** + * @param project the project to set + */ + public void setProject(Project project) { + this.project = project; } - + @Override public int hashCode() { final int weight = 31; int result = 17; - + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); return result; } - + @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; - if (obj instanceof CheckList){ - + if (obj instanceof CheckList) { + CheckList other = (CheckList) obj; - + if (id == null) { if (other.id != null) return false; @@ -130,11 +127,11 @@ public abstract class CheckList extends LazyDeletableDomainObject{ return false; } - @Override - public String toString() { - return getname(); + /** + * @return the name + */ + public String getName() { + return name; } } - - \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java index c979fecc97..3045baded3 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java @@ -1,53 +1,55 @@ package se.su.dsv.scipro.data.dataobjects; -import java.util.Date; - import javax.persistence.Column; import javax.persistence.Entity; -import javax.persistence.EntityManager; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.Id; +import javax.persistence.Lob; import javax.persistence.ManyToOne; import javax.persistence.Table; -import javax.persistence.TypedQuery; - -import org.apache.wicket.markup.html.panel.Panel; import se.su.dsv.scipro.data.enums.CheckListQuestionAnswer; -import se.su.dsv.scipro.data.enums.EventStatus; -import se.su.dsv.scipro.schedule.baseevent.panels.EventScheduleDetailsPanel; -import se.su.dsv.scipro.util.IAjaxCallback; /** - * @author Fredrik Norberg fnorbe@dsv.su.se - * + * @author Fredrik Norberg fnorbe@dsv.su.se + * */ @Entity -@Table(name="checklist_answer") -public class CheckListAnswer extends DomainObject{ +@Table(name = "checklist_answer") +public class CheckListAnswer extends DomainObject { private static final long serialVersionUID = 2959377496669050427L; - + @Id @GeneratedValue private Long id; - + @Enumerated(EnumType.STRING) + @Column(nullable=false) private CheckListQuestionAnswer answer; - - @ManyToOne + + @ManyToOne(optional=false) private User user; - - public CheckListAnswer() {} - + @Lob + private String comment; + + public CheckListAnswer() { + } + public CheckListAnswer(User user, CheckListQuestionAnswer answer) { this.user = user; this.answer = answer; } + public CheckListAnswer(User user, CheckListQuestionAnswer answer, String comment) { + this.user = user; + this.answer = answer; + this.comment = comment; + } + public CheckListQuestionAnswer getAnswer() { return answer; } @@ -71,27 +73,43 @@ public class CheckListAnswer extends DomainObject{ public void setId(Long id) { this.id = id; } + + + + /** + * @return the comment + */ + public String getComment() { + return comment; + } + + /** + * @param comment the comment to set + */ + public void setComment(String comment) { + this.comment = comment; + } @Override public int hashCode() { final int weight = 31; int result = 17; - + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); return result; } - + @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; - if (obj instanceof CheckListAnswer){ - + if (obj instanceof CheckListAnswer) { + CheckListAnswer other = (CheckListAnswer) obj; - + if (id == null) { if (other.id != null) return false; diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java index fb9d0d90a9..c81037bd91 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java @@ -1,5 +1,6 @@ package se.su.dsv.scipro.data.dataobjects; +import java.util.ArrayList; import java.util.List; import javax.persistence.Cacheable; @@ -18,37 +19,37 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; * @author Fredrik Norberg - fnorbe@dsv.su.se */ - @Entity -@Table(name="checklist_question") +@Table(name = "checklist_question") @Cacheable(true) -@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) //Hibernate -public abstract class CheckListQuestion extends DomainObject - implements Comparable<CheckListQuestion> { +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class CheckListQuestion extends DomainObject implements + Comparable<CheckListQuestion> { private static final long serialVersionUID = 2959377496669050427L; - + @Id @GeneratedValue private Long id; - + @Lob - @Column(nullable=false) + @Column(nullable = false) private String question; - - @Column(nullable=false) + + @Column(nullable = false) private int questionNumber; - + @OneToMany - List<CheckListAnswer> answers; - - public CheckListQuestion() {} - + private List<CheckListAnswer> answers = new ArrayList<CheckListAnswer>(1); + + public CheckListQuestion() { + } + public CheckListQuestion(String question) { this.question = question; questionNumber = answers.size() + 1; } - + public String getQuestion() { return question; } @@ -64,7 +65,7 @@ public abstract class CheckListQuestion extends DomainObject public void setQuestionNumber(int questionNumber) { this.questionNumber = questionNumber; } - + public Long getId() { return id; } @@ -72,27 +73,43 @@ public abstract class CheckListQuestion extends DomainObject public void setId(Long id) { this.id = id; } + + + + /** + * @return the answers + */ + public List<CheckListAnswer> getAnswers() { + return answers; + } + + /** + * @param answers the answers to set + */ + public void setAnswers(List<CheckListAnswer> answers) { + this.answers = answers; + } @Override public int hashCode() { final int weight = 31; int result = 17; - + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); return result; } - + @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; - if (obj instanceof CheckListQuestion){ - + if (obj instanceof CheckListQuestion) { + CheckListQuestion other = (CheckListQuestion) obj; - + if (id == null) { if (other.id != null) return false; @@ -111,6 +128,6 @@ public abstract class CheckListQuestion extends DomainObject @Override public int compareTo(CheckListQuestion other) { - return questionNumber - other.questionNumber; + return other.questionNumber - questionNumber; } } \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java index 74a47ffacf..a4ba4cade7 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java @@ -1,5 +1,6 @@ package se.su.dsv.scipro.data.dataobjects; +import java.util.ArrayList; import java.util.List; import javax.persistence.Column; @@ -30,11 +31,14 @@ public class CheckListTemplate extends DomainObject { @Lob @ElementCollection - List<String> questions; + private List<String> questions = new ArrayList<String>(1); @ManyToOne(optional=false) private User creator; + @ManyToOne(optional=false) + private ProjectClass level; + public CheckListTemplate() {} public CheckListTemplate(String name, User creator) { @@ -74,6 +78,21 @@ public class CheckListTemplate extends DomainObject { this.questions = questions; } + + /** + * @return the level + */ + public ProjectClass getLevel() { + return level; + } + + /** + * @param level the level to set + */ + public void setLevel(ProjectClass level) { + this.level = level; + } + @Override public int hashCode() { final int weight = 31; From ebd17c914c67947fd29fccd23888055eb22aa99e Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Thu, 28 Jul 2011 15:31:12 +0200 Subject: [PATCH 4/7] Change of menu order Change-Id: I55961b2e54627246b904ca0870db95aaffa877ec --- .../su/dsv/scipro/peer/pages/AbstractSupervisorPeerPage.java | 4 ++-- .../su/dsv/scipro/peer/pages/ProjectPeerReviewGuidePage.java | 4 ++++ .../dsv/scipro/peer/pages/SupervisorPeerReviewGuidePage.java | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/peer/pages/AbstractSupervisorPeerPage.java b/src/main/java/se/su/dsv/scipro/peer/pages/AbstractSupervisorPeerPage.java index 674b792bc7..95630ea6ae 100644 --- a/src/main/java/se/su/dsv/scipro/peer/pages/AbstractSupervisorPeerPage.java +++ b/src/main/java/se/su/dsv/scipro/peer/pages/AbstractSupervisorPeerPage.java @@ -21,9 +21,9 @@ public abstract class AbstractSupervisorPeerPage extends AbstractSupervisorPage @Override protected List<MenuItem> getItemList() { - final List<MenuItem> items = new ArrayList<MenuItem>(); - items.add(new MenuItem("My projects", SupervisorPeerStatsPage.class, MenuHighlightReviewPage.class, ImageIcon.ICON_STATISTICS)); + final List<MenuItem> items = new ArrayList<MenuItem>(); items.add(new MenuItem("Peer portal", SupervisorPeerPortalPage.class, ImageIcon.ICON_FIND)); + items.add(new MenuItem("My projects", SupervisorPeerStatsPage.class, MenuHighlightReviewPage.class, ImageIcon.ICON_STATISTICS)); items.add(new MenuItem("How to write a good review", SupervisorPeerReviewGuidePage.class, ImageIcon.ICON_HELP)); return items; } diff --git a/src/main/java/se/su/dsv/scipro/peer/pages/ProjectPeerReviewGuidePage.java b/src/main/java/se/su/dsv/scipro/peer/pages/ProjectPeerReviewGuidePage.java index 646f7d2812..0b43a15fe7 100644 --- a/src/main/java/se/su/dsv/scipro/peer/pages/ProjectPeerReviewGuidePage.java +++ b/src/main/java/se/su/dsv/scipro/peer/pages/ProjectPeerReviewGuidePage.java @@ -2,6 +2,10 @@ package se.su.dsv.scipro.peer.pages; import org.apache.wicket.PageParameters; +import se.su.dsv.scipro.security.auth.Authorization; +import se.su.dsv.scipro.security.auth.roles.Roles; + +@Authorization(authorizedRoles={Roles.SYSADMIN}) public class ProjectPeerReviewGuidePage extends AbstractProjectPeerPage { public ProjectPeerReviewGuidePage(PageParameters pp) { diff --git a/src/main/java/se/su/dsv/scipro/peer/pages/SupervisorPeerReviewGuidePage.java b/src/main/java/se/su/dsv/scipro/peer/pages/SupervisorPeerReviewGuidePage.java index 5331d6a8ba..bc76c49272 100644 --- a/src/main/java/se/su/dsv/scipro/peer/pages/SupervisorPeerReviewGuidePage.java +++ b/src/main/java/se/su/dsv/scipro/peer/pages/SupervisorPeerReviewGuidePage.java @@ -2,6 +2,10 @@ package se.su.dsv.scipro.peer.pages; import org.apache.wicket.PageParameters; +import se.su.dsv.scipro.security.auth.Authorization; +import se.su.dsv.scipro.security.auth.roles.Roles; + +@Authorization(authorizedRoles={Roles.SYSADMIN}) public class SupervisorPeerReviewGuidePage extends AbstractSupervisorPeerPage { public SupervisorPeerReviewGuidePage(PageParameters pp) { From 3f55070871bb5304b40d5255104da54afb820dc0 Mon Sep 17 00:00:00 2001 From: joha-asc <aschan.johan@gmail.com> Date: Thu, 28 Jul 2011 15:31:41 +0200 Subject: [PATCH 5/7] buggfixes for conference --- .../dsv/scipro/basepanels/MainMenuPanel.java | 4 +- .../panels/CreateCheckListTemplatePanel.html | 25 +++ .../panels/CreateCheckListTemplatePanel.java | 159 ++++++++++++++++++ .../checklists/panels/TrafficLightPanel.html | 12 +- .../checklists/panels/TrafficLightPanel.java | 110 ++++++++++-- .../pages/ProjectConferencePage.java | 32 +--- .../pages/SupervisorConferencePage.java | 30 +--- .../conference/panels/ConferencePanel.java | 33 +++- .../impl/NotificationControllerImpl.java | 2 +- .../data/dao/interfaces/BoardMessageDao.java | 3 +- .../data/dao/interfaces/MessageBoardDao.java | 5 +- .../data/dao/jpa/BoardMessageDaoJPAImp.java | 27 ++- .../data/dao/jpa/MessageBoardDaoJPAImp.java | 1 + .../scipro/data/dataobjects/BoardMessage.java | 21 --- .../scipro/data/dataobjects/MessageBoard.java | 44 +++-- ...eckPage.html => ProjectChecklistPage.html} | 3 +- .../project/pages/ProjectChecklistPage.java | 22 +++ .../scipro/project/pages/SelfCheckPage.java | 19 --- .../project/panels/ProjectTabMenuPanel.java | 4 +- src/main/resources/META-INF/persistence.xml | 8 + src/main/webapp/WEB-INF/web.xml | 4 +- .../dao/jpa/TestBoardMessageDaoJPA.java | 21 ++- 22 files changed, 437 insertions(+), 152 deletions(-) create mode 100644 src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.html create mode 100644 src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.java rename src/main/java/se/su/dsv/scipro/project/pages/{SelfCheckPage.html => ProjectChecklistPage.html} (55%) create mode 100644 src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.java delete mode 100644 src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java diff --git a/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java b/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java index d81e73fe2b..1598d646fe 100644 --- a/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java +++ b/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java @@ -27,7 +27,7 @@ import se.su.dsv.scipro.project.pages.FinalSeminarProjectListPage; import se.su.dsv.scipro.project.pages.ProjectOppositionPage; import se.su.dsv.scipro.project.pages.ProjectPartnerPage; import se.su.dsv.scipro.project.pages.ProjectStartPage; -import se.su.dsv.scipro.project.pages.SelfCheckPage; +import se.su.dsv.scipro.project.pages.ProjectChecklistPage; import se.su.dsv.scipro.security.auth.MetaDataActionStrategy; import se.su.dsv.scipro.security.auth.roles.Roles; import se.su.dsv.scipro.supervisor.pages.SupervisorProjectsFinalSeminarPage; @@ -57,8 +57,6 @@ public class MainMenuPanel extends Panel implements IWiQueryPlugin { projectMenuSubItems.add(new MenuItem(ProjectStartPage.MAIN_MENU_LABEL, ProjectStartPage.class)); projectMenuSubItems.add(new MenuItem(ProjectOppositionPage.MAIN_MENU_LABEL, ProjectOppositionPage.class)); projectMenuSubItems.add(new MenuItem(FinalSeminarProjectListPage.MAIN_MENU_LABEL, FinalSeminarProjectListPage.class)); - projectMenuSubItems.add(new MenuItem("Project Partner", ProjectPartnerPage.class)); - projectMenuSubItems.add(new MenuItem("Self Check", SelfCheckPage.class)); MainMenuItem projectMenuItem = new MainMenuItem("projectMenuItem", ProjectStartPage.MAIN_MENU_LABEL, ProjectStartPage.class, containerClass, projectMenuSubItems); add(projectMenuItem); diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.html b/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.html new file mode 100644 index 0000000000..ae81354e01 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html + xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> +<head> +<meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> +</head> +<body> + <wicket:panel> + <div wicket:id="feedbackPanel"></div> + <form wicket:id="form"> + <div> + <input wicket:id="questions" type="text" /> + </div> + <input wicket:id="button" type="submit"/> + </form> + <div> + <a href="#" wicket:id="link">Print</a> + </div> + + <div> + <a href="#" wicket:id="newLink">New Link</a> + </div> + </wicket:panel> +</body> +</html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.java new file mode 100644 index 0000000000..5705cfbd88 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.java @@ -0,0 +1,159 @@ +package se.su.dsv.scipro.checklists.panels; + +import java.util.ArrayList; +import java.util.List; +import java.util.SortedSet; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxLink; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.basic.MultiLineLabel; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.Radio; +import org.apache.wicket.markup.html.form.RadioChoice; +import org.apache.wicket.markup.html.form.RadioGroup; +import org.apache.wicket.markup.html.form.RequiredTextField; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.spring.injection.annot.SpringBean; + +import se.su.dsv.scipro.SciProSession; +import se.su.dsv.scipro.data.dao.interfaces.CheckListAnswerDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListQuestionDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListTemplateDao; +import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao; +import se.su.dsv.scipro.data.dataobjects.CheckList; +import se.su.dsv.scipro.data.dataobjects.CheckListAnswer; +import se.su.dsv.scipro.data.dataobjects.CheckListQuestion; +import se.su.dsv.scipro.data.dataobjects.CheckListTemplate; +import se.su.dsv.scipro.data.dataobjects.GeneralSystemSettings; +import se.su.dsv.scipro.data.dataobjects.ProjectClass; +import se.su.dsv.scipro.data.enums.CheckListQuestionAnswer; +import se.su.dsv.scipro.data.enums.StateOfMind; +import se.su.dsv.scipro.knol.resource.page.StaticImage; +import edu.emory.mathcs.backport.java.util.Arrays; + +/** + * @author fnorbe@dsv.su.se + */ + +public class CreateCheckListTemplatePanel extends Panel { + + private static final long serialVersionUID = 8862892008428526067L; + + @SpringBean + private CheckListDao checkListDao; + + @SpringBean + private CheckListAnswerDao checkListAnswerDao; + + @SpringBean + private CheckListQuestionDao checkListQuestionDao; + + @SpringBean + private CheckListTemplateDao checkListTemplateDao; + + @SpringBean + private ProjectClassDao projectClassDao; + + private String question = ""; + private String title = ""; + + private ProjectClass projectClass; + + private CheckListTemplate checkListTemplate = new CheckListTemplate(); + + public CreateCheckListTemplatePanel(String id) { + super(id); + projectClass = projectClassDao.getProjectClass(ProjectClass.BACHELOR); + final FeedbackPanel feedbackPanel = new FeedbackPanel("feedbackPanel"); + feedbackPanel.setOutputMarkupId(true); + add(feedbackPanel); + Form<CheckListTemplate> form = new Form<CheckListTemplate>("form"); + final TextField<String> titleField = new RequiredTextField<String>("title", + new PropertyModel<String>(this, "title")); + final TextField<String> questionField = new RequiredTextField<String>("questions", + new PropertyModel<String>(this, "question")); + questionField.setOutputMarkupId(true); + RadioChoice<ProjectClass> radioChoice = new RadioChoice<ProjectClass>("view", + new PropertyModel<ProjectClass>(this, "projectClass"), projectClassDao.findAll()); + + IModel<List<String>> questionModel = new LoadableDetachableModel<List<String>>() { + + private static final long serialVersionUID = 1L; + + @Override + protected List<String> load() { + // TODO Auto-generated method stub + return checkListTemplate.getQuestions(); + } + }; + + AjaxLink<Void> printLink = new AjaxLink<Void>("addQuestionLink") { + + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + checkListTemplate.getQuestions().add(question); + question = ""; + target.addComponent(questionField); + } + }; + AjaxButton button = new AjaxButton("button", new Model<String>("Save")) { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + protected void onSubmit(AjaxRequestTarget target, Form<?> form) { + + checkListTemplate.setLevel(projectClass); + checkListTemplate.setCreator(SciProSession.get().getUser()); + checkListTemplate.setName(title); + + target.addComponent(feedbackPanel); + + } + }; + form.add(titleField); + form.add(radioChoice); + form.add(button); + form.add(questionField); + add(form); + + + + AjaxLink<Void> newLink = new AjaxLink<Void>("newLink") { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + checkListTemplate = new CheckListTemplate(); + + } + }; + add(printLink); + add(newLink); + + }; + +} diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html index a235198823..ed606075c0 100644 --- a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html @@ -11,11 +11,19 @@ <table wicket:id="group"> <tr wicket:id="persons"> <td><input type="radio" wicket:id="radio" /></td> - <td> <img wicket:id="image"/></td> - </tr> + <td><img wicket:id="image" /></td> + </tr> </table> </form> </div> + <div wicket:id="checkLists"> + <div wicket:id="listView"> + <span wicket:id="question"></span> + <div wicket:id="listViewAnswer"> + <span wicket:id="answer"></span> + </div> + </div> + </div> </wicket:panel> </body> </html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java index 1aa44102c5..bc91621b35 100644 --- a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java @@ -1,28 +1,29 @@ package se.su.dsv.scipro.checklists.panels; -import org.apache.wicket.AttributeModifier; -import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; -import org.apache.wicket.ajax.AjaxRequestTarget; +import java.util.ArrayList; +import java.util.List; + import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.basic.MultiLineLabel; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.Radio; import org.apache.wicket.markup.html.form.RadioGroup; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.Model; -import org.apache.wicket.model.PropertyModel; import org.apache.wicket.spring.injection.annot.SpringBean; -import org.odlabs.wiquery.ui.core.DefaultJsScopeUiEvent; -import org.odlabs.wiquery.ui.slider.Slider; import se.su.dsv.scipro.SciProSession; -import se.su.dsv.scipro.data.dao.interfaces.ProjectDao; -import se.su.dsv.scipro.data.dataobjects.Project; +import se.su.dsv.scipro.data.dao.interfaces.CheckListAnswerDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListQuestionDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListTemplateDao; +import se.su.dsv.scipro.data.dataobjects.CheckList; +import se.su.dsv.scipro.data.dataobjects.CheckListAnswer; +import se.su.dsv.scipro.data.dataobjects.CheckListQuestion; +import se.su.dsv.scipro.data.enums.CheckListQuestionAnswer; import se.su.dsv.scipro.data.enums.StateOfMind; import se.su.dsv.scipro.knol.resource.page.StaticImage; import edu.emory.mathcs.backport.java.util.Arrays; @@ -33,14 +34,23 @@ import edu.emory.mathcs.backport.java.util.Arrays; public class TrafficLightPanel extends Panel { - private static final long serialVersionUID = 8862892008428526067L; + @SpringBean + private CheckListDao checkListDao; - public TrafficLightPanel(String id, WebPage parent) { + @SpringBean + private CheckListAnswerDao checkListAnswerDao; + + @SpringBean + private CheckListQuestionDao checkListQuestionDao; + + @SpringBean + private CheckListTemplateDao checkListTemplateDao; + + public TrafficLightPanel(String id) { super(id); - WebMarkupContainer stateOfMindContainer = new WebMarkupContainer( - "stateOfMindContainer"); + WebMarkupContainer stateOfMindContainer = new WebMarkupContainer("stateOfMindContainer"); add(stateOfMindContainer); Form<StateOfMind> f = new Form<StateOfMind>("form"); @@ -59,16 +69,80 @@ public class TrafficLightPanel extends Panel { "images/icons/green_ball_32.png")); } else if (stateOfMind.equals(StateOfMind.NEEDHELP)) { image = new StaticImage("image", new Model<String>( - "images/icons/red_ball_32.png")); + "images/icons/red_ball_32.png")); } else if (stateOfMind.equals(StateOfMind.NEUTRAL)) { image = new StaticImage("image", new Model<String>( - "images/icons/yellow_ball_32.png")); + "images/icons/yellow_ball_32.png")); } item.add(image); }; }; group.add(persons); - } + + List<CheckList> checkLists = checkListDao.findCheckLists(SciProSession.get() + .getActiveProject()); + if (checkLists.size() < 1) { + CheckList checkList = new CheckList("Test", SciProSession.get().getActiveProject()); + CheckListQuestion checkListQuestion = new CheckListQuestion("Testquestion?"); + checkListQuestion = checkListQuestionDao.save(checkListQuestion); + checkList.getQuestions().add(checkListQuestion); + checkList = checkListDao.save(checkList); + } + + ListView<CheckList> checkListsListView = new ListView<CheckList>("checkLists", checkLists) { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem<CheckList> item) { + + ListView<CheckListQuestion> listView = new ListView<CheckListQuestion>( + "listView", + new ArrayList<CheckListQuestion>(item.getModel().getObject().getQuestions())) { + + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem<CheckListQuestion> item) { + CheckListQuestion checkListQuestion = item.getModel().getObject(); + if(checkListQuestion.getAnswers().size() == 0){ + CheckListAnswer checkListAnswer = new CheckListAnswer(SciProSession.get().getUser(), CheckListQuestionAnswer.GREEN); + checkListAnswer = checkListAnswerDao.save(checkListAnswer); + checkListQuestion.getAnswers().add(checkListAnswer); + checkListQuestionDao.save(checkListQuestion); + + } + item.add(new Label("question", item.getModel().getObject().getQuestion())); + + ListView<CheckListAnswer> listView = new ListView<CheckListAnswer>( + "listViewAnswer", + new ArrayList<CheckListAnswer>(item.getModel().getObject().getAnswers())) { + + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem<CheckListAnswer> item) { + item.add(new Label("answer", item.getModel().getObject().getAnswer().toString())); + + + } + + }; + item.add(listView); + + } + + }; + + item.add(listView); + + } + }; + + add(checkListsListView); + }; } - diff --git a/src/main/java/se/su/dsv/scipro/conference/pages/ProjectConferencePage.java b/src/main/java/se/su/dsv/scipro/conference/pages/ProjectConferencePage.java index 904cfd0479..915b18711c 100644 --- a/src/main/java/se/su/dsv/scipro/conference/pages/ProjectConferencePage.java +++ b/src/main/java/se/su/dsv/scipro/conference/pages/ProjectConferencePage.java @@ -5,12 +5,12 @@ package se.su.dsv.scipro.conference.pages; import java.util.HashSet; import java.util.Set; -import java.util.StringTokenizer; import org.apache.wicket.PageParameters; import org.apache.wicket.RequestCycle; import org.apache.wicket.RestartResponseException; import org.apache.wicket.markup.html.panel.EmptyPanel; +import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.protocol.http.RequestUtils; @@ -53,24 +53,10 @@ public class ProjectConferencePage extends ProjectPage { public ProjectConferencePage(PageParameters pp) { super(pp); - String projectId = pp.getString("pid"); - String boardMessageId = null; - if (projectId != null) { - StringTokenizer stringTokenizer = new StringTokenizer(projectId, "&"); - boolean first = true; - for (int i = 0; i < 2; i++) { - if (stringTokenizer.hasMoreTokens()) { - if (first) { - projectId = stringTokenizer.nextToken().trim(); - first = false; - } else { - boardMessageId = stringTokenizer.nextToken().trim(); - } - } - } - } + Long projectId = pp.getAsLong("pid"); + Long boardMessageId = pp.getAsLong("cid"); if (projectId == null && SciProSession.get().getActiveProject() != null) { - projectId = String.valueOf(SciProSession.get().getActiveProject().getId()); + projectId = SciProSession.get().getActiveProject().getId(); } if (projectId != null) { final Project project = projectDao.load(Long.valueOf(projectId)); @@ -126,23 +112,23 @@ public class ProjectConferencePage extends ProjectPage { messageBoard.setTitle(projectModel.getObject().getTitle()); messageBoard = messageBoardDao.save(messageBoard); } - messageBoardModel = new LoadableDetachableModel<MessageBoard>() { + messageBoardModel = new AbstractReadOnlyModel<MessageBoard>() { private static final long serialVersionUID = 1L; @Override - protected MessageBoard load() { + public MessageBoard getObject() { return messageBoardDao.reLoad(messageBoard); } }; if (boardMessageId != null) { final BoardMessage bm = boardMessageDao.load(Long.valueOf(boardMessageId)); - if (bm != null && messageBoard.getBoardMessageSet().contains(bm)) { - boardMessageModel = new LoadableDetachableModel<BoardMessage>() { + if (bm != null) { + boardMessageModel = new AbstractReadOnlyModel<BoardMessage>() { private static final long serialVersionUID = 1L; @Override - protected BoardMessage load() { + public BoardMessage getObject() { return boardMessageDao.reLoad(bm); } }; diff --git a/src/main/java/se/su/dsv/scipro/conference/pages/SupervisorConferencePage.java b/src/main/java/se/su/dsv/scipro/conference/pages/SupervisorConferencePage.java index 248bcb088d..77e4fbe596 100644 --- a/src/main/java/se/su/dsv/scipro/conference/pages/SupervisorConferencePage.java +++ b/src/main/java/se/su/dsv/scipro/conference/pages/SupervisorConferencePage.java @@ -11,6 +11,7 @@ import org.apache.wicket.PageParameters; import org.apache.wicket.RequestCycle; import org.apache.wicket.RestartResponseException; import org.apache.wicket.markup.html.panel.EmptyPanel; +import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.protocol.http.RequestUtils; @@ -56,22 +57,8 @@ public class SupervisorConferencePage extends AbstractSupervisorPage { public SupervisorConferencePage(PageParameters pp) { super(pp); - String projectId = pp.getString("pid"); - String boardMessageId = null; - if (projectId != null) { - StringTokenizer stringTokenizer = new StringTokenizer(projectId, "&"); - boolean first = true; - for (int i = 0; i < 2; i++) { - if (stringTokenizer.hasMoreTokens()) { - if (first) { - projectId = stringTokenizer.nextToken().trim(); - first = false; - } else { - boardMessageId = stringTokenizer.nextToken().trim(); - } - } - } - } + Long projectId = pp.getAsLong(PROJECTID); + Long boardMessageId = pp.getAsLong("cid"); if (projectId == null) { add(new EmptyPanel("conferencePanel")); } else { @@ -122,23 +109,24 @@ public class SupervisorConferencePage extends AbstractSupervisorPage { messageBoard.setTitle(projectModel.getObject().getTitle()); messageBoard = messageBoardDao.save(messageBoard); } - messageBoardModel = new LoadableDetachableModel<MessageBoard>() { + messageBoardModel = new AbstractReadOnlyModel<MessageBoard>() { private static final long serialVersionUID = 1L; @Override - protected MessageBoard load() { + public MessageBoard getObject() { return messageBoardDao.reLoad(messageBoard); } + }; if (boardMessageId != null) { final BoardMessage bm = boardMessageDao.load(Long.valueOf(boardMessageId)); - if (bm != null && messageBoard.getBoardMessageSet().contains(bm)) { - boardMessageModel = new LoadableDetachableModel<BoardMessage>() { + if (bm != null) { + boardMessageModel = new AbstractReadOnlyModel<BoardMessage>() { private static final long serialVersionUID = 1L; @Override - protected BoardMessage load() { + public BoardMessage getObject() { return boardMessageDao.reLoad(bm); } }; diff --git a/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java b/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java index c22e32565b..9fdc4a4fb1 100644 --- a/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java +++ b/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java @@ -32,6 +32,7 @@ import se.su.dsv.scipro.data.controllers.NotificationController; import se.su.dsv.scipro.data.controllers.NotificationMessage; import se.su.dsv.scipro.data.dao.interfaces.BoardMessageDao; import se.su.dsv.scipro.data.dao.interfaces.CommentThreadDao; +import se.su.dsv.scipro.data.dao.interfaces.MessageBoardDao; import se.su.dsv.scipro.data.dataobjects.BoardMessage; import se.su.dsv.scipro.data.dataobjects.MessageBoard; import se.su.dsv.scipro.data.dataobjects.User; @@ -51,6 +52,8 @@ public class ConferencePanel extends Panel { private BoardMessageDao boardMessageDao; @SpringBean private CommentThreadDao commentThreadDao; + @SpringBean + private MessageBoardDao messageBoardDao; @SpringBean private NotificationController notificationController; @@ -61,6 +64,7 @@ public class ConferencePanel extends Panel { private IModel<BoardMessage> boardMessageModel; private Set<SubscriberModel> subscriberModels; private FeedbackPanel feedbackPanel; + private final static int BOARDMESSAGESPERPAGE = 10; public ConferencePanel(String id, IModel<MessageBoard> messageBoardModel, Set<SubscriberModel> subscriberModels, IModel<BoardMessage> boardMessageModel) { @@ -80,7 +84,7 @@ public class ConferencePanel extends Panel { feedbackPanel = new FeedbackPanel("feedbackPanel"); feedbackPanel.setOutputMarkupId(true); add(feedbackPanel); - + add(new SendWallMessageForm("sendForm")); webMarkupContainer = new WebMarkupContainer("container"); loadUserDataView(new BoardMessageDataProvider(messageBoardModel)); @@ -88,11 +92,17 @@ public class ConferencePanel extends Panel { webMarkupContainer.setOutputMarkupId(true); webMarkupContainer.add(new PagingNavigator("pagingNavigator", dataView)); add(webMarkupContainer); + if (boardMessageModel != null) { + + int index = boardMessageDao.getBoardMessageSortOrderIndex(boardMessageModel.getObject()); + System.out.println(index); + dataView.setCurrentPage(index/BOARDMESSAGESPERPAGE); + } } public void loadUserDataView(IDataProvider<BoardMessage> boardMessageDataProvider) { - dataView = new DataView<BoardMessage>("boardMessageDataView", boardMessageDataProvider, 10) { + dataView = new DataView<BoardMessage>("boardMessageDataView", boardMessageDataProvider, BOARDMESSAGESPERPAGE) { private static final long serialVersionUID = 1L; @@ -112,8 +122,10 @@ public class ConferencePanel extends Panel { @Override public void onClick(AjaxRequestTarget target) { - BoardMessage boardMessageTemp = boardMessageDao.reLoad(bm); - boardMessageDao.delete(boardMessageTemp); + MessageBoard mb = messageBoardModel.getObject(); + mb.getBoardMessages().remove(boardMessageDao.reLoad(bm)); + messageBoardDao.save(mb); + boardMessageDao.delete(boardMessageDao.reLoad(bm)); webMarkupContainer.removeAll(); loadUserDataView(new BoardMessageDataProvider(messageBoardModel)); webMarkupContainer.add(dataView); @@ -242,23 +254,28 @@ public class ConferencePanel extends Panel { } else { BoardMessage bm = new BoardMessage(); bm.setMessage(message); - bm.setMessageBoard(messageBoardModel.getObject()); bm.setFromUser(SciProSession.get().getUser()); bm = boardMessageDao.save(bm); + + MessageBoard mb = messageBoardModel.getObject(); + mb.addToBoardMessages(bm); + messageBoardDao.save(mb); for (SubscriberModel subscriberModel : subscriberModels) { - notificationController.notifyConferencePost(subscriberModel.getUser(), message, messageBoardModel.getObject().getTitle(), + notificationController.notifyConferencePost(subscriberModel.getUser(), + message, messageBoardModel.getObject().getTitle(), subscriberModel.getNotificationPriority(), subscriberModel.getAbsolutePath()); } + messageTextArea.setDefaultModelObject(""); webMarkupContainer.removeAll(); loadUserDataView(new BoardMessageDataProvider(messageBoardModel)); webMarkupContainer.add(dataView); webMarkupContainer.add(new PagingNavigator("pagingNavigator", dataView)); target.addComponent(webMarkupContainer); - target.addComponent(messageTextArea); - + target.addComponent(messageTextArea); + } target.addComponent(feedbackPanel); } diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java b/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java index fb11252c3f..1e7a680d93 100644 --- a/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java +++ b/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java @@ -224,7 +224,7 @@ public class NotificationControllerImpl implements NotificationController { NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, mailSubject, mailMessage); - processNotification(user, notificationMessage, absolutePath + "&" + classId, + processNotification(user, notificationMessage, absolutePath + "/cid/" + classId, notificationPriority); } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/BoardMessageDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/BoardMessageDao.java index 3603f8a918..9e1a0636cd 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/BoardMessageDao.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/BoardMessageDao.java @@ -4,7 +4,6 @@ import java.util.List; import se.su.dsv.scipro.data.dataobjects.BoardMessage; import se.su.dsv.scipro.data.dataobjects.MessageBoard; -import se.su.dsv.scipro.data.dataobjects.User; /** * @author Johan Aschan - aschan@dsv.su.se @@ -17,4 +16,6 @@ public interface BoardMessageDao extends Dao<BoardMessage>{ final int count); public int getBoardMessageListCount(final MessageBoard mb); + public int getBoardMessageSortOrderIndex(final BoardMessage bm); + } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageBoardDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageBoardDao.java index 2d18e06550..f7d7bc6fa4 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageBoardDao.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageBoardDao.java @@ -4,7 +4,6 @@ package se.su.dsv.scipro.data.dao.interfaces; import se.su.dsv.scipro.data.dataobjects.MessageBoard; -import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.data.dataobjects.interfaces.Commentable; /** @@ -15,6 +14,6 @@ import se.su.dsv.scipro.data.dataobjects.interfaces.Commentable; public interface MessageBoardDao extends Dao<MessageBoard>{ - public MessageBoard getMessageBoard(Commentable commentableDomainObject); - + public MessageBoard getMessageBoard(final Commentable commentableDomainObject); + } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardMessageDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardMessageDaoJPAImp.java index fbf94f58ae..d750476587 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardMessageDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardMessageDaoJPAImp.java @@ -19,7 +19,6 @@ import org.springframework.transaction.annotation.Transactional; import se.su.dsv.scipro.data.dao.interfaces.BoardMessageDao; import se.su.dsv.scipro.data.dataobjects.BoardMessage; import se.su.dsv.scipro.data.dataobjects.MessageBoard; -import se.su.dsv.scipro.data.dataobjects.User; /** * @author Johan Aschan - aschan@dsv.su.se @@ -44,7 +43,7 @@ public class BoardMessageDaoJPAImp extends AbstractDaoJPAImp<BoardMessage> TypedQuery<BoardMessage> query = em .createQuery( "select bm FROM BoardMessage bm, MessageBoard mb " + - "WHERE bm member of mb.boardMessageSet AND mb = :mb ORDER BY bm.dateCreated DESC", BoardMessage.class); + "WHERE bm member of mb.boardMessages AND mb = :mb ORDER BY bm.dateCreated DESC", BoardMessage.class); query.setHint(QueryHints.HINT_CACHEABLE, "true"); query.setParameter("mb", mb); query.setFirstResult(first); @@ -68,7 +67,7 @@ public class BoardMessageDaoJPAImp extends AbstractDaoJPAImp<BoardMessage> TypedQuery<Long> query = em .createQuery( "SELECT COUNT (bm) FROM BoardMessage bm, MessageBoard mb " + - "WHERE bm member of mb.boardMessageSet AND mb = :mb", Long.class); + "WHERE bm member of mb.boardMessages AND mb = :mb", Long.class); query.setHint(QueryHints.HINT_CACHEABLE, "true"); query.setParameter("mb", mb); return query.getSingleResult().intValue(); @@ -77,6 +76,24 @@ public class BoardMessageDaoJPAImp extends AbstractDaoJPAImp<BoardMessage> }); } - - + + // Hibernate seemms not to support the index operator for the moment, but this query should be used if it does in the future. + @Override + @Transactional(readOnly = true) + public int getBoardMessageSortOrderIndex(final BoardMessage bm){ + return getJpaTemplate().execute(new JpaCallback<Integer>() { + @Override + public Integer doInJpa(EntityManager em) + throws PersistenceException { + TypedQuery<Integer> query = em + .createQuery( + "SELECT index(b) FROM MessageBoard mb JOIN mb.boardMessages b " + + "WHERE b = :bm", Integer.class); + query.setHint(QueryHints.HINT_CACHEABLE, "true"); + query.setParameter("bm", bm); + return query.getSingleResult().intValue(); + + } + }); + } } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageBoardDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageBoardDaoJPAImp.java index 649deda415..c2882b4c09 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageBoardDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageBoardDaoJPAImp.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import se.su.dsv.scipro.data.dao.interfaces.MessageBoardDao; +import se.su.dsv.scipro.data.dataobjects.BoardMessage; import se.su.dsv.scipro.data.dataobjects.MessageBoard; import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.data.dataobjects.interfaces.Commentable; diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/BoardMessage.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/BoardMessage.java index 6dbf3d0161..6008a96fe9 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/BoardMessage.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/BoardMessage.java @@ -7,14 +7,12 @@ import java.util.ArrayList; import java.util.List; import javax.persistence.Cacheable; -import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Lob; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; -import javax.persistence.OneToOne; import javax.persistence.Table; import org.hibernate.annotations.Cache; @@ -48,9 +46,6 @@ public class BoardMessage extends DomainObject implements Commentable, Comparabl @OneToMany private List<BoardMessage> replyMessageList = new ArrayList<BoardMessage>(0); - @ManyToOne(optional=false) - private MessageBoard messageBoard; - @Override public Long getId() { return id; @@ -65,20 +60,6 @@ public class BoardMessage extends DomainObject implements Commentable, Comparabl } - /** - * @return the messageBoard - */ - public MessageBoard getMessageBoard() { - return messageBoard; - } - - /** - * @param messageBoard the messageBoard to set - */ - public void setMessageBoard(MessageBoard messageBoard) { - this.messageBoard = messageBoard; - } - @Override public String getCommentKey() { return BoardMessage.class.getCanonicalName().toString(); @@ -140,8 +121,6 @@ public class BoardMessage extends DomainObject implements Commentable, Comparabl } if(this.getId() != null && o.getId() != null) return this.getId().compareTo(o.getId()); - if(this.message != null && o.message != null) - return message.compareTo(o.message); //By now we have to conclude the two objects are basically two objects full of nulls return 0; } diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java index ec7ab1259f..8441e6b0d4 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java @@ -4,6 +4,7 @@ package se.su.dsv.scipro.data.dataobjects; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.SortedSet; import java.util.TreeSet; @@ -15,7 +16,10 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; +import javax.persistence.ManyToMany; import javax.persistence.OneToMany; +import javax.persistence.OrderBy; +import javax.persistence.OrderColumn; import javax.persistence.PrePersist; import javax.persistence.PreUpdate; import javax.persistence.Table; @@ -50,7 +54,7 @@ public class MessageBoard extends DomainObject{ } @Basic(optional=false) - public String title; + private String title; @Basic(optional=false) @Column(length=255) @@ -70,32 +74,36 @@ public class MessageBoard extends DomainObject{ if(getCommentableKey().length() > 255) throw new IllegalArgumentException("CommentThread-commentableKey may not be longer than 255 characters"); } - - - @Sort(type=SortType.NATURAL) - @OneToMany(mappedBy="messageBoard", orphanRemoval=true, cascade=CascadeType.ALL, targetEntity=BoardMessage.class) - private SortedSet<BoardMessage> boardMessageSet = new TreeSet<BoardMessage>(); + @OrderColumn(name="orderIndex") + @ManyToMany + private List<BoardMessage> boardMessages = new ArrayList<BoardMessage>(); - public List<BoardMessage> getBoardMessageList() { - return new ArrayList<BoardMessage>(boardMessageSet); - } - - public SortedSet<BoardMessage> getBoardMessageSet() { - return boardMessageSet; - } - - - public void setBoardMessageSet( SortedSet<BoardMessage> boardMessageList) { - this.boardMessageSet = boardMessageList; + /** + * @return the boardMessages + */ + public List<BoardMessage> getBoardMessages() { + return boardMessages; } /** - * @return the commentableKey + * @param boardMessages the boardMessages to set */ + public void setBoardMessages(List<BoardMessage> boardMessages) { + this.boardMessages = boardMessages; + } + public String getCommentableKey() { return commentableKey; } + + public void addToBoardMessages(BoardMessage boardMessage){ + int pos = Collections.binarySearch(boardMessages, boardMessage); + if (pos < 0) { + pos = -pos - 1; + } + boardMessages.add(pos, boardMessage); + } /** * @param commentableKey the commentableKey to set */ diff --git a/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html b/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.html similarity index 55% rename from src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html rename to src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.html index bca333a27b..2921c71d9a 100644 --- a/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html +++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.html @@ -3,7 +3,8 @@ xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> <body> <wicket:extend> - <div wicket:id="trafficLightPanel""></div> +<!-- <div wicket:id="trafficLightPanel"></div> --> +<!-- <div wicket:id="createCheckList"></div> --> </wicket:extend> </body> </html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.java b/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.java new file mode 100644 index 0000000000..ad39c2dbc3 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.java @@ -0,0 +1,22 @@ +package se.su.dsv.scipro.project.pages; + +import org.apache.wicket.PageParameters; + +import se.su.dsv.scipro.security.auth.Authorization; +import se.su.dsv.scipro.security.auth.roles.Roles; + +/** + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ + +@Authorization(authorizedRoles={Roles.SYSADMIN}) //TODO Hidden for initial deployment +public class ProjectChecklistPage extends ProjectPage { + + public ProjectChecklistPage(PageParameters pp) { + super(pp); + //add(new TrafficLightPanel("trafficLightPanel")); + //add(new CreateCheckListTemplatePanel("createCheckList")); + } + +} diff --git a/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java b/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java deleted file mode 100644 index 2cdae57ca1..0000000000 --- a/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java +++ /dev/null @@ -1,19 +0,0 @@ -package se.su.dsv.scipro.project.pages; - -import org.apache.wicket.PageParameters; - -import se.su.dsv.scipro.checklists.panels.TrafficLightPanel; - -/** - * @author Fredrik Norberg - fnorbe@dsv.su.se - * - */ - -public class SelfCheckPage extends ProjectPage { - - public SelfCheckPage(PageParameters pp) { - super(pp); - add(new TrafficLightPanel("trafficLightPanel", this)); - } - -} diff --git a/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java b/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java index 719379f0e4..d1ad784e74 100644 --- a/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java +++ b/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java @@ -18,7 +18,7 @@ import se.su.dsv.scipro.project.pages.ProjectPage; import se.su.dsv.scipro.project.pages.ProjectPartnerPage; import se.su.dsv.scipro.project.pages.ProjectSchedulePlannerPage; import se.su.dsv.scipro.project.pages.ProjectStartPage; -import se.su.dsv.scipro.project.pages.SelfCheckPage; +import se.su.dsv.scipro.project.pages.ProjectChecklistPage; import se.su.dsv.scipro.repository.panels.ProjectFilePanel; /** @@ -48,7 +48,7 @@ public class ProjectTabMenuPanel extends AbstractMenuPanel { itemList.add(new MenuItem("Peer review", ProjectPeerPortalPage.class)); itemList.add(new MenuItem("All Final Seminars", FinalSeminarProjectListPage.class)); itemList.add(new MenuItem("Conference", ProjectConferencePage.class)); - itemList.add(new MenuItem("Self Check", SelfCheckPage.class)); + itemList.add(new MenuItem("Checklists", ProjectChecklistPage.class)); } else { itemList.add(new MenuItem("No active project!", NoActiveProjectPage.class)); itemList.add(new MenuItem("Project Partner", ProjectPartnerPage.class)); diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index cea9c530c7..7d6e6766b3 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -67,6 +67,10 @@ <class>se.su.dsv.scipro.data.dataobjects.ProjectPartner</class> <class>se.su.dsv.scipro.data.dataobjects.CheckPlagiarismEvent</class> <class>se.su.dsv.scipro.data.dataobjects.WebNotification</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckListTemplate</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckList</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckListAnswer</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckListQuestion</class> <properties> @@ -171,6 +175,10 @@ <class>se.su.dsv.scipro.data.dataobjects.ProjectPartner</class> <class>se.su.dsv.scipro.data.dataobjects.CheckPlagiarismEvent</class> <class>se.su.dsv.scipro.data.dataobjects.WebNotification</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckListTemplate</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckList</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckListAnswer</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckListQuestion</class> <properties> diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 7ea6274a27..63aefacc39 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -64,8 +64,8 @@ <!-- Use deployment for production, development for development --> <context-param> <param-name>configuration</param-name> -<!-- <param-value>development</param-value> --> - <param-value>deployment</param-value> + <param-value>development</param-value> +<!-- <param-value>deployment</param-value> --> </context-param> diff --git a/src/test/java/se/su/dsv/scipro/dao/jpa/TestBoardMessageDaoJPA.java b/src/test/java/se/su/dsv/scipro/dao/jpa/TestBoardMessageDaoJPA.java index 8b4ed74aa2..abd9ebcab1 100644 --- a/src/test/java/se/su/dsv/scipro/dao/jpa/TestBoardMessageDaoJPA.java +++ b/src/test/java/se/su/dsv/scipro/dao/jpa/TestBoardMessageDaoJPA.java @@ -94,17 +94,24 @@ public class TestBoardMessageDaoJPA { Set<User> subscribers = new HashSet<User>(); subscribers.add(user); - messageBoard = new MessageBoard(presenterProject); - messageBoard.setTitle("test"); - messageBoard = messageBoardDao.save(messageBoard); + boardMessage = new BoardMessage(); boardMessage.setFromUser(user); boardMessage.setMessage("Test"); - boardMessage.setMessageBoard(messageBoard); boardMessage = boardMessageDao.save(boardMessage); + + boardMessage = new BoardMessage(); + boardMessage.setFromUser(user); + boardMessage.setMessage("Test"); + boardMessage = boardMessageDao.save(boardMessage); + + messageBoard = new MessageBoard(presenterProject); + messageBoard.setTitle("test"); + messageBoard.getBoardMessages().add(boardMessage); + messageBoard = messageBoardDao.save(messageBoard); } @@ -123,5 +130,11 @@ public class TestBoardMessageDaoJPA { Assert.assertEquals(1, boardMessageDao.getBoardMessageListCount(messageBoard)); } + @Test + @Transactional + @Rollback + public void getBoardMessageSortOrderIndex() { + Assert.assertEquals(0, boardMessageDao.getBoardMessageSortOrderIndex(boardMessage)); + } } From dd6ba53a364206146b8a0235bfc575429dc8e541 Mon Sep 17 00:00:00 2001 From: joha-asc <aschan.johan@gmail.com> Date: Thu, 28 Jul 2011 15:37:28 +0200 Subject: [PATCH 6/7] development in web.xml --- src/main/webapp/WEB-INF/web.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 63aefacc39..7ea6274a27 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -64,8 +64,8 @@ <!-- Use deployment for production, development for development --> <context-param> <param-name>configuration</param-name> - <param-value>development</param-value> -<!-- <param-value>deployment</param-value> --> +<!-- <param-value>development</param-value> --> + <param-value>deployment</param-value> </context-param> From adcc1324e4612af3ec629332ff30a4e7737736f9 Mon Sep 17 00:00:00 2001 From: joha-asc <aschan.johan@gmail.com> Date: Thu, 28 Jul 2011 15:42:24 +0200 Subject: [PATCH 7/7] new method for removing boardmessages --- .../conference/panels/ConferencePanel.java | 2 +- .../scipro/data/dataobjects/MessageBoard.java | 17 ++++------------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java b/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java index 9fdc4a4fb1..cf5a5225ff 100644 --- a/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java +++ b/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java @@ -123,7 +123,7 @@ public class ConferencePanel extends Panel { public void onClick(AjaxRequestTarget target) { MessageBoard mb = messageBoardModel.getObject(); - mb.getBoardMessages().remove(boardMessageDao.reLoad(bm)); + mb.removeFromBoardMessages(boardMessageDao.reLoad(bm)); messageBoardDao.save(mb); boardMessageDao.delete(boardMessageDao.reLoad(bm)); webMarkupContainer.removeAll(); diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java index 8441e6b0d4..2cd5ea75da 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java @@ -79,19 +79,6 @@ public class MessageBoard extends DomainObject{ @ManyToMany private List<BoardMessage> boardMessages = new ArrayList<BoardMessage>(); - - /** - * @return the boardMessages - */ - public List<BoardMessage> getBoardMessages() { - return boardMessages; - } - /** - * @param boardMessages the boardMessages to set - */ - public void setBoardMessages(List<BoardMessage> boardMessages) { - this.boardMessages = boardMessages; - } public String getCommentableKey() { return commentableKey; @@ -104,6 +91,10 @@ public class MessageBoard extends DomainObject{ } boardMessages.add(pos, boardMessage); } + + public void removeFromBoardMessages(BoardMessage boardMessage){ + boardMessages.remove(boardMessage); + } /** * @param commentableKey the commentableKey to set */