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
 	 */