From b87a4d3224f1bf1777ef5456eba2f42d503bd688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20H=C3=B6jvall?= <hojvall@dsv.su.se> Date: Fri, 17 Jun 2011 13:00:01 +0200 Subject: [PATCH 1/9] Added new page Level settings to Admin->Settings page. Used to add/edit project classes --- .../pages/AbstractAdminSettingsPage.java | 2 + .../AdminProjectClassSettingsPage.html | 16 ++++++++ .../AdminProjectClassSettingsPage.java | 40 +++++++++++++++++++ src/main/resources/META-INF/persistence.xml | 4 +- 4 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html create mode 100644 src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSettingsPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSettingsPage.java index e097dd2c61..734b665053 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSettingsPage.java +++ b/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSettingsPage.java @@ -10,6 +10,7 @@ import se.su.dsv.scipro.admin.pages.settings.AdminFinalSeminarSettingsPage; import se.su.dsv.scipro.admin.pages.settings.AdminFinalSeminarSettingsPerProjectClassPage; import se.su.dsv.scipro.admin.pages.settings.AdminGeneralSettingsPage; import se.su.dsv.scipro.admin.pages.settings.AdminPeerSettingsPage; +import se.su.dsv.scipro.admin.pages.settings.AdminProjectClassSettingsPage; import se.su.dsv.scipro.components.AbstractMenuPanel; import se.su.dsv.scipro.icons.ImageIcon; import se.su.dsv.scipro.security.auth.Authorization; @@ -32,6 +33,7 @@ public abstract class AbstractAdminSettingsPage extends AbstractAdminPage { items.add(new MenuItem("Final seminar general settings", AdminFinalSeminarSettingsPage.class)); items.add(new MenuItem("Final seminar project level settings", AdminFinalSeminarSettingsPerProjectClassPage.class)); items.add(new MenuItem("Peer settings", AdminPeerSettingsPage.class, ImageIcon.ICON_SETTINGS)); + items.add(new MenuItem("Level settings", AdminProjectClassSettingsPage.class)); return items; } diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html new file mode 100644 index 0000000000..2adce100a5 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html + xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> +<body> +<wicket:extend> +<table> +<tr> +<th>Code</th><th>Name</th><th>Description</th> +</tr> +<tr wicket:id="projectClassList"> +<td wicket:id="code">MASTER</td><td wicket:id="name">Master</td><td wicket:id="desc">Master MasterMasterMasterMasterMaster fdsafsad erewr</td> +</tr> +</table> +</wicket:extend> +</body> +</html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java new file mode 100644 index 0000000000..b47d3a0d09 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java @@ -0,0 +1,40 @@ +package se.su.dsv.scipro.admin.pages.settings; + +import org.apache.wicket.PageParameters; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.basic.MultiLineLabel; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.model.IModel; +import org.apache.wicket.spring.injection.annot.SpringBean; + +import se.su.dsv.scipro.admin.pages.AbstractAdminSettingsPage; +import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao; +import se.su.dsv.scipro.data.dataobjects.ProjectClass; + +public class AdminProjectClassSettingsPage extends AbstractAdminSettingsPage { + + @SpringBean + ProjectClassDao projectClassDao; + + public AdminProjectClassSettingsPage(PageParameters pp) { + super(pp); + + ListView<ProjectClass> listView = new ListView<ProjectClass>("projectClassList", projectClassDao.findAll()){ + + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem<ProjectClass> item) { + IModel<ProjectClass> model = item.getModel(); + item.add(new Label("code", model.getObject().getCode())); + item.add(new Label("name", model.getObject().getName())); + item.add(new MultiLineLabel("desc", model.getObject().getDescription())); + } + + }; + add(listView); + + } + +} diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index 8eb77b0f92..c38c45219f 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -89,8 +89,8 @@ <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"></property> <property name="hibernate.connection.url" value="jdbc:mysql://localhost/scipro"></property> - <property name="hibernate.connection.username" value="root"></property> - <property name="hibernate.connection.password" value="juju"></property> + <property name="hibernate.connection.username" value="scipro"></property> + <property name="hibernate.connection.password" value="pighleef"></property> <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"></property> <property name="hibernate.c3p0.min_size" value="3"></property> <property name="hibernate.c3p0.max_size" value="6"></property> From dd8cf8e2621a8e55716f841eda42c0a74d011218 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20H=C3=B6jvall?= <hojvall@dsv.su.se> Date: Mon, 20 Jun 2011 11:06:02 +0200 Subject: [PATCH 2/9] Added panels in for editing and deleting panels --- .../AdminProjectClassSettingsPage.html | 32 +++++--- .../AdminProjectClassSettingsPage.java | 51 ++++++++++++- .../admin/panels/AdminProjectClassPanel.html | 35 +++++++++ .../admin/panels/AdminProjectClassPanel.java | 76 +++++++++++++++++++ 4 files changed, 180 insertions(+), 14 deletions(-) create mode 100644 src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.html create mode 100644 src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.java diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html index 2adce100a5..0ff6dfae81 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html +++ b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html @@ -2,15 +2,27 @@ <html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> <body> -<wicket:extend> -<table> -<tr> -<th>Code</th><th>Name</th><th>Description</th> -</tr> -<tr wicket:id="projectClassList"> -<td wicket:id="code">MASTER</td><td wicket:id="name">Master</td><td wicket:id="desc">Master MasterMasterMasterMasterMaster fdsafsad erewr</td> -</tr> -</table> -</wicket:extend> + <wicket:extend> + + <div wicket:id="dialog"> + <div wicket:id="dialogContent"></div> + </div> + <a href=# wicket:id="createLink">Create new level</a> + <table> + <tr> + <th>Code</th> + <th>Name</th> + <th>Description</th> + <th>Edit</th> + </tr> + <tr> </tr> + <tr wicket:id="projectClassList"> + <td wicket:id="code"></td> + <td wicket:id="name"></td> + <td wicket:id="desc"></td> + <td><a href=# wicket:id="editLink">Edit</a></td> + </tr> + </table> + </wicket:extend> </body> </html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java index b47d3a0d09..6ac7d19771 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java +++ b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java @@ -1,40 +1,83 @@ package se.su.dsv.scipro.admin.pages.settings; import org.apache.wicket.PageParameters; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.basic.MultiLineLabel; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.markup.html.panel.EmptyPanel; import org.apache.wicket.model.IModel; import org.apache.wicket.spring.injection.annot.SpringBean; +import org.odlabs.wiquery.ui.dialog.Dialog; import se.su.dsv.scipro.admin.pages.AbstractAdminSettingsPage; +import se.su.dsv.scipro.admin.panels.AdminProjectClassPanel; import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao; + import se.su.dsv.scipro.data.dataobjects.ProjectClass; public class AdminProjectClassSettingsPage extends AbstractAdminSettingsPage { @SpringBean ProjectClassDao projectClassDao; - + public AdminProjectClassSettingsPage(PageParameters pp) { super(pp); + + final Dialog dialog = new Dialog("dialog"); + dialog.setModal(true); + dialog.setAutoOpen(false); + dialog.add(new EmptyPanel("dialogContent")); + + dialog.setWidth(500); + dialog.setHeight(500); + add(dialog); - ListView<ProjectClass> listView = new ListView<ProjectClass>("projectClassList", projectClassDao.findAll()){ + final ListView<ProjectClass> listView = new ListView<ProjectClass>("projectClassList", projectClassDao.findAll()){ private static final long serialVersionUID = 1L; @Override protected void populateItem(ListItem<ProjectClass> item) { - IModel<ProjectClass> model = item.getModel(); + final IModel<ProjectClass> model = item.getModel(); + item.add(new Label("code", model.getObject().getCode())); item.add(new Label("name", model.getObject().getName())); item.add(new MultiLineLabel("desc", model.getObject().getDescription())); + + AjaxLink<Void> editLink = new AjaxLink<Void>("editLink"){ + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + dialog.replace(new AdminProjectClassPanel("dialogContent", model)); + target.addComponent(dialog); + dialog.setTitle("Edit"); + dialog.open(target); + } + }; + item.add(editLink); } - + }; + listView.setOutputMarkupId(true); add(listView); + AjaxLink<Void> createLink = new AjaxLink<Void>("createLink"){ + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + dialog.replace(new AdminProjectClassPanel("dialogContent")); + target.addComponent(dialog); + dialog.setTitle("Add new..."); + dialog.open(target); + } + }; + add(createLink); + } } diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.html b/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.html new file mode 100644 index 0000000000..c473bdab7b --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html + xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> +<body> + <wicket:panel> + <form wicket:id="projectClassForm"> + <!-- Fix max lengths --> + <table> + <tr> + <td>Code: <input wicket:id="code" type="text" maxlength="32" /> + </td> + </tr> + <tr> + <td>Name: <input wicket:id="name" type="text" maxlength="32" /> + </td> + </tr> + <tr> + <td>Description:</td> + </tr> + <tr> + <td><textarea wicket:id="description" cols="60" rows="5"></textarea> + </td> + </tr> + <tr> + <td><input wicket:id="createButton" type="submit" + value="Create" /></td> + <td><input wicket:id="deleteButton" type="submit" + value="Delete" /></td> + </tr> + </table> + </form> + + </wicket:panel> +</body> +</html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.java new file mode 100644 index 0000000000..b43d48fb0c --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.java @@ -0,0 +1,76 @@ +package se.su.dsv.scipro.admin.panels; + +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.TextArea; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; +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.admin.pages.settings.AdminProjectClassSettingsPage; +import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao; +import se.su.dsv.scipro.data.dataobjects.ProjectClass; + +public class AdminProjectClassPanel extends Panel { + + @SpringBean + ProjectClassDao projectClassDao; + + private static final long serialVersionUID = 1L; + + public AdminProjectClassPanel(String id) { + super(id); + + Model<ProjectClass> model = new Model<ProjectClass>(new ProjectClass()); + add(new ProjectClassSettingsForm("projectClassForm", model)); + } + + public AdminProjectClassPanel(String id, IModel<ProjectClass> model) { + super(id); + add(new ProjectClassSettingsForm("projectClassForm", model)); + } + + private class ProjectClassSettingsForm extends Form<Void>{ + + private static final long serialVersionUID = 1L; + + IModel<ProjectClass> projectClassModel; + + public ProjectClassSettingsForm(String id, final IModel<ProjectClass> model) { + super(id); + projectClassModel = model; + + add(new TextField<ProjectClass>("code", new PropertyModel<ProjectClass>(projectClassModel, "code"))); + add(new TextField<ProjectClass>("name", new PropertyModel<ProjectClass>(projectClassModel, "name"))); + add(new TextArea<ProjectClass>("description", new PropertyModel<ProjectClass>(projectClassModel, "description"))); + + Button createButton = new Button("createButton"){ + private static final long serialVersionUID = 1L; + @Override + public void onSubmit(){ + ProjectClass pc = projectClassDao.save(projectClassModel.getObject()); + projectClassModel.setObject(pc); + setRedirect(true); + setResponsePage(AdminProjectClassSettingsPage.class); + } + }; + add(createButton); + + Button deleteButton = new Button("deleteButton"){ + private static final long serialVersionUID = 1L; + @Override + public void onSubmit(){ + projectClassModel.getObject().setDeleted(true); + projectClassDao.save(projectClassModel.getObject()); + setRedirect(true); + setResponsePage(AdminProjectClassSettingsPage.class); + } + }; + add(deleteButton); + } + } + +} From d06c02f438e2153c9b2ccb59c6a5c624ddcb2449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20H=C3=B6jvall?= <hojvall@dsv.su.se> Date: Mon, 20 Jun 2011 13:32:39 +0200 Subject: [PATCH 3/9] Added a undelete function in admin projectclass settings --- .../AdminProjectClassSettingsPage.html | 32 +++++++- .../AdminProjectClassSettingsPage.java | 73 ++++++++++++++++++- .../data/dao/interfaces/ProjectClassDao.java | 6 +- .../data/dao/jpa/ProjectClassDaoJPAImp.java | 14 ++++ 4 files changed, 117 insertions(+), 8 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html index 0ff6dfae81..0f9821056d 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html +++ b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html @@ -3,10 +3,11 @@ xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> <body> <wicket:extend> - + <!-- Edit/add dialog --> <div wicket:id="dialog"> <div wicket:id="dialogContent"></div> </div> + <h2>Active</h2> <a href=# wicket:id="createLink">Create new level</a> <table> <tr> @@ -15,13 +16,38 @@ <th>Description</th> <th>Edit</th> </tr> - <tr> </tr> + <tr> + </tr> + <tbody wicket:id="activeProjectClassContainer"> <tr wicket:id="projectClassList"> <td wicket:id="code"></td> <td wicket:id="name"></td> <td wicket:id="desc"></td> - <td><a href=# wicket:id="editLink">Edit</a></td> + <td><a href=# wicket:id="editLink">Edit</a> + </td> </tr> + </tbody> + </table> + + <h2>Deleted</h2> + <table> + <tr> + <th>Code</th> + <th>Name</th> + <th>Description</th> + <th>Edit</th> + </tr> + <tr> + </tr> + <tbody wicket:id="deletedProjectClassContainer"> + <tr wicket:id="projectClassListDel"> + <td wicket:id="codeDel"></td> + <td wicket:id="nameDel"></td> + <td wicket:id="descDel"></td> + <td><a href=# wicket:id="undeleteLink">Undelete</a> + </td> + </tr> + </tbody> </table> </wicket:extend> </body> diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java index 6ac7d19771..c98a0bc63b 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java +++ b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java @@ -1,14 +1,18 @@ package se.su.dsv.scipro.admin.pages.settings; +import java.util.List; + import org.apache.wicket.PageParameters; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; +import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.basic.MultiLineLabel; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.EmptyPanel; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.odlabs.wiquery.ui.dialog.Dialog; @@ -34,8 +38,22 @@ public class AdminProjectClassSettingsPage extends AbstractAdminSettingsPage { dialog.setWidth(500); dialog.setHeight(500); add(dialog); + + IModel<List<ProjectClass>> activeProjectClass = new LoadableDetachableModel<List<ProjectClass>>() { + + private static final long serialVersionUID = 1L; + + @Override + protected List<ProjectClass> load() { + return projectClassDao.findAll(); + } + }; - final ListView<ProjectClass> listView = new ListView<ProjectClass>("projectClassList", projectClassDao.findAll()){ + final WebMarkupContainer activeWmc = new WebMarkupContainer("activeProjectClassContainer"); + activeWmc.setOutputMarkupId(true); + add(activeWmc); + + final ListView<ProjectClass> listView = new ListView<ProjectClass>("projectClassList", activeProjectClass){ private static final long serialVersionUID = 1L; @@ -46,7 +64,7 @@ public class AdminProjectClassSettingsPage extends AbstractAdminSettingsPage { item.add(new Label("code", model.getObject().getCode())); item.add(new Label("name", model.getObject().getName())); item.add(new MultiLineLabel("desc", model.getObject().getDescription())); - + AjaxLink<Void> editLink = new AjaxLink<Void>("editLink"){ private static final long serialVersionUID = 1L; @@ -62,8 +80,55 @@ public class AdminProjectClassSettingsPage extends AbstractAdminSettingsPage { } }; - listView.setOutputMarkupId(true); - add(listView); + activeWmc.add(listView); + + /* + * Begin - list of deleted project classes + */ + + final IModel<List<ProjectClass>> deletedProjectClass = new LoadableDetachableModel<List<ProjectClass>>() { + + private static final long serialVersionUID = 1L; + + @Override + protected List<ProjectClass> load() { + return projectClassDao.findAllDeleted(); + } + }; + + final WebMarkupContainer deletedWmc = new WebMarkupContainer("deletedProjectClassContainer"); + deletedWmc.setOutputMarkupId(true); + add(deletedWmc); + + final ListView<ProjectClass> listViewDeleted = new ListView<ProjectClass>("projectClassListDel", deletedProjectClass){ + + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem<ProjectClass> item) { + final IModel<ProjectClass> model = item.getModel(); + + item.add(new Label("codeDel", model.getObject().getCode())); + item.add(new Label("nameDel", model.getObject().getName())); + item.add(new MultiLineLabel("descDel", model.getObject().getDescription())); + + AjaxLink<Void> undeleteLink = new AjaxLink<Void>("undeleteLink"){ + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + model.getObject().setDeleted(false); + model.setObject(projectClassDao.save(model.getObject())); + deletedProjectClass.detach(); + target.addComponent(activeWmc); + target.addComponent(deletedWmc); + } + }; + item.add(undeleteLink); + } + + }; + deletedWmc.add(listViewDeleted); AjaxLink<Void> createLink = new AjaxLink<Void>("createLink"){ private static final long serialVersionUID = 1L; diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/ProjectClassDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/ProjectClassDao.java index c8eb98a5a4..f0bcf31b93 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/ProjectClassDao.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/ProjectClassDao.java @@ -1,9 +1,13 @@ package se.su.dsv.scipro.data.dao.interfaces; +import java.util.List; + import se.su.dsv.scipro.data.dataobjects.ProjectClass; public interface ProjectClassDao extends Dao<ProjectClass>{ - ProjectClass getProjectClass(String projectCode); + ProjectClass getProjectClass(String projectCode); + + List<ProjectClass> findAllDeleted(); } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectClassDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectClassDaoJPAImp.java index 76db26d20d..f0b8bf5c38 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectClassDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/ProjectClassDaoJPAImp.java @@ -1,9 +1,13 @@ package se.su.dsv.scipro.data.dao.jpa; +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 org.springframework.transaction.annotation.Transactional; @@ -38,6 +42,16 @@ public class ProjectClassDaoJPAImp extends LazyDeleteAbstractDaoJPAImp<ProjectCl }); } + @Transactional( readOnly=true ) + public List<ProjectClass> findAllDeleted() { + return getJpaTemplate().execute(new JpaCallback<List<ProjectClass>>() { + public List<ProjectClass> doInJpa(EntityManager em) throws PersistenceException { + TypedQuery<ProjectClass> query = em.createQuery("SELECT x FROM ProjectClass x WHERE x.deleted = 1", ProjectClass.class); + return query.getResultList(); + } + }); + } + @Override @Transactional public ProjectClass save(ProjectClass projectClass){ From 255484fd279916df3afb651ec7ad2079a5317b97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20H=C3=B6jvall?= <hojvall@dsv.su.se> Date: Mon, 20 Jun 2011 17:21:36 +0200 Subject: [PATCH 4/9] Added info printing and a duplicate check when creating a new project class --- .../pages/AbstractAdminSettingsPage.java | 4 +-- .../AdminProjectClassSettingsPage.html | 6 ++-- .../AdminProjectClassSettingsPage.java | 9 ++++- .../admin/panels/AdminProjectClassPanel.html | 14 ++++---- .../admin/panels/AdminProjectClassPanel.java | 35 +++++++++++++------ 5 files changed, 47 insertions(+), 21 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSettingsPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSettingsPage.java index 734b665053..8f8f105c41 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSettingsPage.java +++ b/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSettingsPage.java @@ -32,8 +32,8 @@ public abstract class AbstractAdminSettingsPage extends AbstractAdminPage { items.add(new MenuItem("General settings", AdminGeneralSettingsPage.class)); items.add(new MenuItem("Final seminar general settings", AdminFinalSeminarSettingsPage.class)); items.add(new MenuItem("Final seminar project level settings", AdminFinalSeminarSettingsPerProjectClassPage.class)); - items.add(new MenuItem("Peer settings", AdminPeerSettingsPage.class, ImageIcon.ICON_SETTINGS)); - items.add(new MenuItem("Level settings", AdminProjectClassSettingsPage.class)); + items.add(new MenuItem("Level settings", AdminPeerSettingsPage.class, ImageIcon.ICON_SETTINGS)); + items.add(new MenuItem("Edit levels", AdminProjectClassSettingsPage.class)); return items; } diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html index 0f9821056d..579b984c13 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html +++ b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html @@ -3,10 +3,12 @@ xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> <body> <wicket:extend> + <!-- Edit/add dialog --> <div wicket:id="dialog"> <div wicket:id="dialogContent"></div> </div> + <h2>Active</h2> <a href=# wicket:id="createLink">Create new level</a> <table> @@ -29,7 +31,7 @@ </tbody> </table> - <h2>Deleted</h2> + <h2>Inactive</h2> <table> <tr> <th>Code</th> @@ -44,7 +46,7 @@ <td wicket:id="codeDel"></td> <td wicket:id="nameDel"></td> <td wicket:id="descDel"></td> - <td><a href=# wicket:id="undeleteLink">Undelete</a> + <td><a href=# wicket:id="undeleteLink">Activate</a> </td> </tr> </tbody> diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java index c98a0bc63b..a55e2cd398 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java +++ b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java @@ -29,7 +29,13 @@ public class AdminProjectClassSettingsPage extends AbstractAdminSettingsPage { public AdminProjectClassSettingsPage(PageParameters pp) { super(pp); - + + String msg = ""; + if((msg = pp.getString("info")) != null) + info(msg); + else if((msg = pp.getString("error")) != null) + error(msg); + final Dialog dialog = new Dialog("dialog"); dialog.setModal(true); dialog.setAutoOpen(false); @@ -122,6 +128,7 @@ public class AdminProjectClassSettingsPage extends AbstractAdminSettingsPage { deletedProjectClass.detach(); target.addComponent(activeWmc); target.addComponent(deletedWmc); + info("Level activated"); } }; item.add(undeleteLink); diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.html b/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.html index c473bdab7b..9f38ffb0e8 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.html +++ b/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.html @@ -4,14 +4,15 @@ <body> <wicket:panel> <form wicket:id="projectClassForm"> - <!-- Fix max lengths --> + + <!-- Fix max lengths --> <table> <tr> - <td>Code: <input wicket:id="code" type="text" maxlength="32" /> + <td>Code: <input wicket:id="code" type="text" maxlength="50" /> </td> </tr> <tr> - <td>Name: <input wicket:id="name" type="text" maxlength="32" /> + <td>Name: <input wicket:id="name" type="text" maxlength="50" /> </td> </tr> <tr> @@ -22,10 +23,11 @@ </td> </tr> <tr> - <td><input wicket:id="createButton" type="submit" - value="Create" /></td> + <td><input wicket:id="createButton" type="submit" value="Save" /> + </td> <td><input wicket:id="deleteButton" type="submit" - value="Delete" /></td> + value="Inactivate" /> + </td> </tr> </table> </form> diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.java index b43d48fb0c..630192ef2d 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.java +++ b/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.java @@ -1,5 +1,6 @@ package se.su.dsv.scipro.admin.panels; +import org.apache.wicket.PageParameters; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextArea; @@ -21,16 +22,17 @@ public class AdminProjectClassPanel extends Panel { private static final long serialVersionUID = 1L; - public AdminProjectClassPanel(String id) { + public AdminProjectClassPanel(final String id) { super(id); Model<ProjectClass> model = new Model<ProjectClass>(new ProjectClass()); - add(new ProjectClassSettingsForm("projectClassForm", model)); + add(new ProjectClassSettingsForm("projectClassForm", model, false)); } public AdminProjectClassPanel(String id, IModel<ProjectClass> model) { super(id); - add(new ProjectClassSettingsForm("projectClassForm", model)); + + add(new ProjectClassSettingsForm("projectClassForm", model, true)); } private class ProjectClassSettingsForm extends Form<Void>{ @@ -39,37 +41,50 @@ public class AdminProjectClassPanel extends Panel { IModel<ProjectClass> projectClassModel; - public ProjectClassSettingsForm(String id, final IModel<ProjectClass> model) { + public ProjectClassSettingsForm(String id, final IModel<ProjectClass> model, boolean enabledDeleteButton) { super(id); + + final PageParameters pp = new PageParameters(); + setRedirect(true); + projectClassModel = model; add(new TextField<ProjectClass>("code", new PropertyModel<ProjectClass>(projectClassModel, "code"))); add(new TextField<ProjectClass>("name", new PropertyModel<ProjectClass>(projectClassModel, "name"))); add(new TextArea<ProjectClass>("description", new PropertyModel<ProjectClass>(projectClassModel, "description"))); - + Button createButton = new Button("createButton"){ private static final long serialVersionUID = 1L; @Override public void onSubmit(){ + ProjectClass duplicateCheck = projectClassDao.getProjectClass(projectClassModel.getObject().getCode()); + System.out.println("duplicate " + duplicateCheck); + if (duplicateCheck != null){ + String msg = "Level already exists"; + pp.add("error", msg); + setResponsePage(AdminProjectClassSettingsPage.class, pp); + return; + } ProjectClass pc = projectClassDao.save(projectClassModel.getObject()); projectClassModel.setObject(pc); - setRedirect(true); - setResponsePage(AdminProjectClassSettingsPage.class); + pp.add("info", "New level created"); + setResponsePage(AdminProjectClassSettingsPage.class, pp); } }; add(createButton); - + Button deleteButton = new Button("deleteButton"){ private static final long serialVersionUID = 1L; @Override public void onSubmit(){ projectClassModel.getObject().setDeleted(true); projectClassDao.save(projectClassModel.getObject()); - setRedirect(true); - setResponsePage(AdminProjectClassSettingsPage.class); + pp.add("info", "Level inactivated"); + setResponsePage(AdminProjectClassSettingsPage.class, pp); } }; add(deleteButton); + deleteButton.setEnabled(enabledDeleteButton); } } From cfe5ff3e7a51332182fd3f928214eb1dcb39504d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20H=C3=B6jvall?= <hojvall@dsv.su.se> Date: Mon, 4 Jul 2011 12:11:45 +0200 Subject: [PATCH 5/9] Fixed bug where message Already exists was shown when editing --- .../AdminProjectClassSettingsPage.java | 1 - .../admin/panels/AdminProjectClassPanel.java | 33 +++++++++++-------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java index a55e2cd398..368ebfc123 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java +++ b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java @@ -19,7 +19,6 @@ import org.odlabs.wiquery.ui.dialog.Dialog; import se.su.dsv.scipro.admin.pages.AbstractAdminSettingsPage; import se.su.dsv.scipro.admin.panels.AdminProjectClassPanel; import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao; - import se.su.dsv.scipro.data.dataobjects.ProjectClass; public class AdminProjectClassSettingsPage extends AbstractAdminSettingsPage { diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.java index 630192ef2d..c083732e8b 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.java +++ b/src/main/java/se/su/dsv/scipro/admin/panels/AdminProjectClassPanel.java @@ -41,9 +41,9 @@ public class AdminProjectClassPanel extends Panel { IModel<ProjectClass> projectClassModel; - public ProjectClassSettingsForm(String id, final IModel<ProjectClass> model, boolean enabledDeleteButton) { + public ProjectClassSettingsForm(String id, final IModel<ProjectClass> model, final boolean editMode) { super(id); - + final PageParameters pp = new PageParameters(); setRedirect(true); @@ -57,18 +57,25 @@ public class AdminProjectClassPanel extends Panel { private static final long serialVersionUID = 1L; @Override public void onSubmit(){ - ProjectClass duplicateCheck = projectClassDao.getProjectClass(projectClassModel.getObject().getCode()); - System.out.println("duplicate " + duplicateCheck); - if (duplicateCheck != null){ - String msg = "Level already exists"; - pp.add("error", msg); + + if (editMode) { + pp.add("info", "Level edited"); + ProjectClass pc = projectClassDao.save(projectClassModel.getObject()); + projectClassModel.setObject(pc); + setResponsePage(AdminProjectClassSettingsPage.class, pp); + } else { + ProjectClass duplicateCheck = projectClassDao.getProjectClass(projectClassModel.getObject().getCode()); + if (duplicateCheck != null){ + String msg = "Level already exists"; + pp.add("error", msg); + setResponsePage(AdminProjectClassSettingsPage.class, pp); + return; + } + ProjectClass pc = projectClassDao.save(projectClassModel.getObject()); + projectClassModel.setObject(pc); + pp.add("info", "New level created"); setResponsePage(AdminProjectClassSettingsPage.class, pp); - return; } - ProjectClass pc = projectClassDao.save(projectClassModel.getObject()); - projectClassModel.setObject(pc); - pp.add("info", "New level created"); - setResponsePage(AdminProjectClassSettingsPage.class, pp); } }; add(createButton); @@ -84,7 +91,7 @@ public class AdminProjectClassPanel extends Panel { } }; add(deleteButton); - deleteButton.setEnabled(enabledDeleteButton); + deleteButton.setEnabled(editMode); } } From 0ed52dc5d810102330800bb237ff876793986e0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20H=C3=B6jvall?= <hojvall@dsv.su.se> Date: Mon, 4 Jul 2011 13:09:52 +0200 Subject: [PATCH 6/9] Removed unused line --- .../java/se/su/dsv/scipro/data/dataobjects/ProjectClass.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectClass.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectClass.java index 04863505ec..d8fd980fe4 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectClass.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectClass.java @@ -9,7 +9,6 @@ import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Lob; import javax.persistence.OneToOne; -import javax.persistence.PostLoad; import javax.persistence.Table; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; From 5e9d33b9915d94b528e7b1af28baf6e12151abd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20H=C3=B6jvall?= <hojvall@dsv.su.se> Date: Tue, 19 Jul 2011 12:16:24 +0200 Subject: [PATCH 7/9] Worked on some design for edit levels in admin pages --- .../AdminProjectClassSettingsPage.html | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html index 579b984c13..9e85a06391 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html +++ b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html @@ -8,10 +8,12 @@ <div wicket:id="dialog"> <div wicket:id="dialogContent"></div> </div> - - <h2>Active</h2> - <a href=# wicket:id="createLink">Create new level</a> - <table> + + <a href=# wicket:id="createLink"><img src="images/icons/add_16x16.png" alt=""/> Create new level</a> + <div class="span-15 last"> + <h3 class="section">Active</h3> + </div> + <table class="rounded-table-top"> <tr> <th>Code</th> <th>Name</th> @@ -25,14 +27,16 @@ <td wicket:id="code"></td> <td wicket:id="name"></td> <td wicket:id="desc"></td> - <td><a href=# wicket:id="editLink">Edit</a> + <td><a href=# wicket:id="editLink"><img src="images/icons/edit_16x16.png" " alt="Edit" title="Edit"/></a> </td> </tr> </tbody> </table> - <h2>Inactive</h2> - <table> + <div class="span-15 last"> + <h3 class="section">Inactive</h3> + </div> + <table class="rounded-table-top"> <tr> <th>Code</th> <th>Name</th> From c7b8d1a9d18822975b88932049cec8ef2fa6b6bb Mon Sep 17 00:00:00 2001 From: joha-asc <aschan.johan@gmail.com> Date: Thu, 21 Jul 2011 16:30:10 +0200 Subject: [PATCH 8/9] commentthread --- .../dao/jpa/TestCommentThreadDaoJPA.java | 111 ------------------ 1 file changed, 111 deletions(-) delete mode 100644 src/test/java/se/su/dsv/scipro/dao/jpa/TestCommentThreadDaoJPA.java diff --git a/src/test/java/se/su/dsv/scipro/dao/jpa/TestCommentThreadDaoJPA.java b/src/test/java/se/su/dsv/scipro/dao/jpa/TestCommentThreadDaoJPA.java deleted file mode 100644 index a7ad4ab9c4..0000000000 --- a/src/test/java/se/su/dsv/scipro/dao/jpa/TestCommentThreadDaoJPA.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * - */ -package se.su.dsv.scipro.dao.jpa; - -import java.util.SortedSet; -import java.util.TreeSet; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.annotation.Rollback; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.transaction.annotation.Transactional; - -import se.su.dsv.scipro.data.dao.interfaces.CommentDao; -import se.su.dsv.scipro.data.dao.interfaces.CommentThreadDao; -import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao; -import se.su.dsv.scipro.data.dao.interfaces.ProjectDao; -import se.su.dsv.scipro.data.dao.interfaces.UserDao; -import se.su.dsv.scipro.data.dataobjects.Comment; -import se.su.dsv.scipro.data.dataobjects.CommentThread; -import se.su.dsv.scipro.data.dataobjects.Project; -import se.su.dsv.scipro.data.dataobjects.ProjectClass; -import se.su.dsv.scipro.data.dataobjects.User; - - -/** - * @author Johan Aschan - aschan@dsv.su.se - * - */ - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration -public class TestCommentThreadDaoJPA { - - @Autowired - private CommentDao commentDao; - - @Autowired - private CommentThreadDao commentThreadDao; - - @Autowired - private ProjectDao projectDao; - - @Autowired - private ProjectClassDao projectClassDao; - @Autowired - private UserDao userDao; - - private Project project1; - private Comment comment1, comment2, comment3; - private SortedSet<Comment> comments = new TreeSet<Comment>(); - private CommentThread commentThread; - private User user; - - @Before - public void startTransaction() { - ProjectClass projectClass = new ProjectClass(ProjectClass.BACHELOR,"Bachelor","Bachelor degree thesis project"); - projectClass = projectClassDao.save(projectClass); - project1 = new Project(); - project1.setProjectClass(projectClass); - project1.setTitle("Project 1"); - project1 = projectDao.save(project1); - - user = new User(); - user.setFirstName("Pelle"); - user = userDao.save(user); - - commentThread = new CommentThread(project1); - commentThread = commentThreadDao.save(commentThread); - - comment1 = new Comment(user,commentThread); - comment1 = commentDao.save(comment1); - - - comment2 = new Comment(user,commentThread); - comment2 = commentDao.save(comment2); - - - comment3 = new Comment(user,commentThread); - comment3 = commentDao.save(comment3); - - comments.add(comment1); - comments.add(comment2); - comments.add(comment3); - - commentThread.setComments(comments); - commentThread = commentThreadDao.save(commentThread); - - } - - @Test - @Transactional - @Rollback - public void testGetCommentThreadByClassAndId() { - CommentThread commentThreadNew = commentThreadDao.getCommentThread(project1); - Assert.assertEquals(commentThread, commentThreadNew); - } - - @Test - @Transactional - @Rollback - public void testGetCommentThreadSize() { - int commentThreadSize = commentThreadDao.getCommentThreadSize(project1); - Assert.assertEquals(3, commentThreadSize); - } -} From ff8d5d09db7ef02e87d7a51748fe7ee780d0d8c1 Mon Sep 17 00:00:00 2001 From: joha-asc <aschan.johan@gmail.com> Date: Thu, 21 Jul 2011 16:31:14 +0200 Subject: [PATCH 9/9] commentthread --- .../dao/jpa/TestCommentThreadDaoJPA.java | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 src/test/java/se/su/dsv/scipro/dao/jpa/TestCommentThreadDaoJPA.java diff --git a/src/test/java/se/su/dsv/scipro/dao/jpa/TestCommentThreadDaoJPA.java b/src/test/java/se/su/dsv/scipro/dao/jpa/TestCommentThreadDaoJPA.java new file mode 100644 index 0000000000..a7ad4ab9c4 --- /dev/null +++ b/src/test/java/se/su/dsv/scipro/dao/jpa/TestCommentThreadDaoJPA.java @@ -0,0 +1,111 @@ +/** + * + */ +package se.su.dsv.scipro.dao.jpa; + +import java.util.SortedSet; +import java.util.TreeSet; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +import se.su.dsv.scipro.data.dao.interfaces.CommentDao; +import se.su.dsv.scipro.data.dao.interfaces.CommentThreadDao; +import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao; +import se.su.dsv.scipro.data.dao.interfaces.ProjectDao; +import se.su.dsv.scipro.data.dao.interfaces.UserDao; +import se.su.dsv.scipro.data.dataobjects.Comment; +import se.su.dsv.scipro.data.dataobjects.CommentThread; +import se.su.dsv.scipro.data.dataobjects.Project; +import se.su.dsv.scipro.data.dataobjects.ProjectClass; +import se.su.dsv.scipro.data.dataobjects.User; + + +/** + * @author Johan Aschan - aschan@dsv.su.se + * + */ + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +public class TestCommentThreadDaoJPA { + + @Autowired + private CommentDao commentDao; + + @Autowired + private CommentThreadDao commentThreadDao; + + @Autowired + private ProjectDao projectDao; + + @Autowired + private ProjectClassDao projectClassDao; + @Autowired + private UserDao userDao; + + private Project project1; + private Comment comment1, comment2, comment3; + private SortedSet<Comment> comments = new TreeSet<Comment>(); + private CommentThread commentThread; + private User user; + + @Before + public void startTransaction() { + ProjectClass projectClass = new ProjectClass(ProjectClass.BACHELOR,"Bachelor","Bachelor degree thesis project"); + projectClass = projectClassDao.save(projectClass); + project1 = new Project(); + project1.setProjectClass(projectClass); + project1.setTitle("Project 1"); + project1 = projectDao.save(project1); + + user = new User(); + user.setFirstName("Pelle"); + user = userDao.save(user); + + commentThread = new CommentThread(project1); + commentThread = commentThreadDao.save(commentThread); + + comment1 = new Comment(user,commentThread); + comment1 = commentDao.save(comment1); + + + comment2 = new Comment(user,commentThread); + comment2 = commentDao.save(comment2); + + + comment3 = new Comment(user,commentThread); + comment3 = commentDao.save(comment3); + + comments.add(comment1); + comments.add(comment2); + comments.add(comment3); + + commentThread.setComments(comments); + commentThread = commentThreadDao.save(commentThread); + + } + + @Test + @Transactional + @Rollback + public void testGetCommentThreadByClassAndId() { + CommentThread commentThreadNew = commentThreadDao.getCommentThread(project1); + Assert.assertEquals(commentThread, commentThreadNew); + } + + @Test + @Transactional + @Rollback + public void testGetCommentThreadSize() { + int commentThreadSize = commentThreadDao.getCommentThreadSize(project1); + Assert.assertEquals(3, commentThreadSize); + } +}