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 01/11] 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 02/11] 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 03/11] 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 04/11] 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 05/11] 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 06/11] 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 07/11] 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 ad0ed5b84b4876e7cb338c08dd64b7351d9b6acf Mon Sep 17 00:00:00 2001 From: Fredrik Norberg <fnorbe@dsv.su.se> Date: Thu, 21 Jul 2011 16:54:22 +0200 Subject: [PATCH 08/11] daily commit --- .../project/panels/EventLayoutPanel.html | 46 +++++ .../project/panels/EventLayoutPanel.java | 189 ++++++++++++++++++ .../project/panels/UpcomingEventPanel.java | 4 +- src/main/webapp/WEB-INF/web.xml | 4 +- src/main/webapp/css/scipro.css | 8 +- 5 files changed, 245 insertions(+), 6 deletions(-) create mode 100644 src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.html create mode 100644 src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.java diff --git a/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.html b/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.html new file mode 100644 index 0000000000..d4996967ab --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.html @@ -0,0 +1,46 @@ +<!DOCTYPE html> +<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> +<body> +<wicket:panel> + <div wicket:id="showDetailsIcon" class="left"></div> + <a href="#" class="right" wicket:id="eventPageLink"><img wicket:id="eventPageLinkIcon" /></a><div wicket:id="eventDueDate" class="span-1 left month"></div> + + <div> + <div> + <span wicket:id="eventTitle">Event title here</span> + + <img wicket:id="eventDeleteIcon" class="right" /> + <img wicket:id="eventEditIcon" class="right" /> + + <span class ="right"></span> + <div wicket:id="statusIcon"></div> + </div> + </div> + <p></p> + <div wicket:id="eventDetailsContainer" style="display:none;"> + <div wicket:id="eventDetails"></div> + </div> + <!-- + <div wicket:id="showDetailsIcon" class="left"></div> + <div wicket:id="month" class="span-1 left month"></div> + <img wicket:id="calendarIcon" class="left"> + + <div> + <div> + + <span wicket:id="eventTitle">Event title here</span> + + <img wicket:id="eventDeleteIcon" class="right" /> + <img wicket:id="eventEditIcon" class="right" /> + <a href="#" class="right" wicket:id="eventPageLink"><img wicket:id="eventPageLinkIcon" /></a> + <span wicket:id="eventDueDate" class ="right"></span> + <div wicket:id="statusIcon"></div> + </div> + </div> + <p></p> + <div wicket:id="eventDetailsContainer" style="display:none;"> + <div wicket:id="eventDetails"></div> + </div> --> +</wicket:panel> +</body> +</html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.java b/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.java new file mode 100644 index 0000000000..f02af4e2b3 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.java @@ -0,0 +1,189 @@ +package se.su.dsv.scipro.project.panels; + +import java.util.Date; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.datetime.PatternDateConverter; +import org.apache.wicket.datetime.markup.html.basic.DateLabel; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.link.Link; +import org.apache.wicket.markup.html.panel.EmptyPanel; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.Model; +import org.apache.wicket.spring.injection.annot.SpringBean; +import org.odlabs.wiquery.core.effects.EffectSpeed; + +import se.su.dsv.scipro.SciProSession; +import se.su.dsv.scipro.data.dao.interfaces.EventDao; +import se.su.dsv.scipro.data.dao.interfaces.HandInActivityDao; +import se.su.dsv.scipro.data.dao.interfaces.ProjectDao; +import se.su.dsv.scipro.data.dao.interfaces.RoleDao; +import se.su.dsv.scipro.data.dataobjects.Event; +import se.su.dsv.scipro.data.dataobjects.HandInActivity; +import se.su.dsv.scipro.data.dataobjects.Project; +import se.su.dsv.scipro.data.dataobjects.User; +import se.su.dsv.scipro.icons.ActionIcon; +import se.su.dsv.scipro.icons.AjaxActionIcon; +import se.su.dsv.scipro.icons.ExpandContractActionIcon; +import se.su.dsv.scipro.icons.IconPanel; +import se.su.dsv.scipro.icons.ImageIcon; +import se.su.dsv.scipro.schedule.baseevent.panels.EventScheduleDetailsPanel; +import se.su.dsv.scipro.schedule.calendar.icon.CalendarIconImage; +import se.su.dsv.scipro.util.IAjaxCallback; +import se.su.dsv.scipro.util.JavascriptEventConfirmation; +import se.su.dsv.scipro.util.WiQueryCoreEffectsHelper; + +public abstract class EventLayoutPanel extends Panel { + + private static final long serialVersionUID = 1L; + + @SpringBean + protected EventDao eventDao; + + @SpringBean + protected ProjectDao projectDao; + + @SpringBean + protected RoleDao roleDao; + + @SpringBean + protected HandInActivityDao handInActivityDao; + + public EventLayoutPanel(String id, final Event event, final Project project, final boolean isSupervisorView){ + super(id); + final User user = SciProSession.get().getUser(); + + //add(new CalendarIconImage("calendarIcon", event.getDueDate())); + //add(new DateLabel("month", new Model<Date>(event.getDueDate()), new PatternDateConverter("MMM", false))); + add(new Label("eventTitle", event.getTitle())); + add(new DateLabel("eventDueDate", new Model<Date>(event.getDueDate()), new PatternDateConverter("yyyy-MM-dd HH:mm", false))); + + final WebMarkupContainer eventDetailsContainer = new WebMarkupContainer("eventDetailsContainer"); + eventDetailsContainer.setOutputMarkupId(true); + eventDetailsContainer.add(new EmptyPanel("eventDetails")); + add(eventDetailsContainer); + + final ExpandContractActionIcon showDetailsIcon = new ExpandContractActionIcon("showDetailsIcon"){ + private static final long serialVersionUID = 1L; + + @Override + public void onExpand(AjaxRequestTarget target) { + eventDetailsContainer.replace(new EventScheduleDetailsPanel("eventDetails", event)); + target.addComponent(eventDetailsContainer); + target.appendJavascript(WiQueryCoreEffectsHelper.slideDownJs(eventDetailsContainer, EffectSpeed.FAST)); + } + + @Override + public void onContract(AjaxRequestTarget target) { + target.appendJavascript(WiQueryCoreEffectsHelper.slideUpJs(eventDetailsContainer, EffectSpeed.FAST)); + } + + }; + add(showDetailsIcon); + + Link<Void> eventPageLink = new Link<Void>("eventPageLink"){ + private static final long serialVersionUID = 1L; + + @Override + public void onClick() { + onEventDetailsClick(); + } + }; + + ImageIcon eventPageLinkIcon = new ImageIcon("eventPageLinkIcon", ActionIcon.ICON_DETAILS); + eventPageLink.add(eventPageLinkIcon); + add(eventPageLink); + + add(new AjaxActionIcon("eventEditIcon", AjaxActionIcon.ICON_EDIT){ + private static final long serialVersionUID = 1L; + + @Override + protected void onClick(AjaxRequestTarget target) { + final IAjaxCallback cb = new IAjaxCallback(){ + private static final long serialVersionUID = 1L; + + @Override + public void doCallback(AjaxRequestTarget onSubmitTarget) { + closeDialogAndRefreshListView(onSubmitTarget); + } + }; + + replaceAndOpenDialog(target, event.getCreationPanel("containerContent", cb, isSupervisorView)); + } + + @Override + public boolean isVisible(){ + return eventDao.isEditable(event, user); + } + + }); + + add(new AjaxActionIcon("eventDeleteIcon", AjaxActionIcon.ICON_DELETE){ + private static final long serialVersionUID = 1L; + + @Override + protected void onClick(AjaxRequestTarget target) { + eventDao.lazyDelete(event); + refreshListView(target); + } + + @Override + public boolean isVisible(){ + return eventDao.isDeletable(event, user); + } + + }.add(new JavascriptEventConfirmation("onclick", "Delete " + event.getTitle() + "?"))); + + /*if(event.isRequireHandIn()){ + add(new IconPanel("handInRequiredIcon", ImageIcon.ICON_RED_FLAG){ + private static final long serialVersionUID = 1L; + + @Override + public String getDisplayString() { + return "Hand in required"; + } + }); + } else { + add(new EmptyPanel("handInRequiredIcon")); + }*/ + + String statusIcon = ImageIcon.ICON_EMPTY; + final Model<String> statusMsgModel = new Model<String>(""); + //Check the status + if(eventDao.eventIsDone(event, user, project)) { + statusIcon = ImageIcon.ICON_EVENT_DONE; + statusMsgModel.setObject("Event is done"); + } else if (event.isRequireHandIn()){ + //Ok, event is not done + HandInActivity hia = handInActivityDao.getHandInActivity(event, project); + //if there are hand ins and the event is not done, it must be awaiting feedback + if(hia != null && hia.getHandIns().size() > 0){ + statusMsgModel.setObject("Awaiting supervisor feedback"); + } else { + statusMsgModel.setObject("No hand in uploaded yet"); + } + statusIcon = ImageIcon.ICON_EVENT_ALERT; + } else { + //The event must be upcoming + if(event.getDueDate().getTime() > new Date().getTime()){ + statusMsgModel.setObject("Event upcoming"); + statusIcon = ImageIcon.ICON_EVENT_UPCOMING; + } + } + + add(new IconPanel("statusIcon", statusIcon){ + private static final long serialVersionUID = 1L; + + @Override + public String getDisplayString() { + return statusMsgModel.getObject(); + } + }); + } + + public abstract void replaceAndOpenDialog(AjaxRequestTarget target, Panel replacePanel); + public abstract void refreshListView(AjaxRequestTarget target); + public abstract void closeDialogAndRefreshListView(AjaxRequestTarget target); + public abstract void onEventDetailsClick(); +} diff --git a/src/main/java/se/su/dsv/scipro/project/panels/UpcomingEventPanel.java b/src/main/java/se/su/dsv/scipro/project/panels/UpcomingEventPanel.java index 5e6951d86e..0fa3ef87bb 100644 --- a/src/main/java/se/su/dsv/scipro/project/panels/UpcomingEventPanel.java +++ b/src/main/java/se/su/dsv/scipro/project/panels/UpcomingEventPanel.java @@ -26,8 +26,6 @@ import se.su.dsv.scipro.data.dataobjects.Project; import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.project.pages.ProjectEventPage; import se.su.dsv.scipro.project.pages.ProjectScheduleGeneratorPage; -import se.su.dsv.scipro.project.pages.ProjectSchedulePlannerPage; -import se.su.dsv.scipro.schedule.baseevent.panels.EventSchedulePanel; import se.su.dsv.scipro.util.WiQueryCoreEffectsHelper; public class UpcomingEventPanel extends Panel{ @@ -100,7 +98,7 @@ public class UpcomingEventPanel extends Panel{ @Override protected void populateItem(ListItem<Event> item) { final Event e = item.getModelObject(); - item.add(new EventSchedulePanel("eventPanel", e, project, false){ + item.add(new EventLayoutPanel("eventPanel", e, project, false){ private static final long serialVersionUID = 1L; @Override diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 0a178d1b52..942af29253 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/main/webapp/css/scipro.css b/src/main/webapp/css/scipro.css index bd86a24b31..162221bf61 100644 --- a/src/main/webapp/css/scipro.css +++ b/src/main/webapp/css/scipro.css @@ -1032,4 +1032,10 @@ div.wicket-aa ul li.selected { background-color: #dedeff; padding: 0px; margin:0; -} \ No newline at end of file +} + +.month{ + font-size: 2em; + font-style: strong; + padding:0.2em; +} From a2036ab5ecd2a83a8082c6a9e02e227a1aee1872 Mon Sep 17 00:00:00 2001 From: Fredrik Norberg <fnorbe@dsv.su.se> Date: Fri, 22 Jul 2011 10:39:56 +0200 Subject: [PATCH 09/11] Redesigned UpcomingEventsPanel --- .../scipro/data/dao/jpa/EventDaoJPAImp.java | 1 - .../scipro/data/dataobjects/ProjectEvent.java | 2 +- .../project/pages/ProjectPartnerPage.java | 1 - .../project/panels/EventLayoutPanel.html | 19 +++++++++---------- .../project/panels/EventLayoutPanel.java | 9 +++------ src/main/webapp/css/scipro.css | 10 +++++++--- 6 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/EventDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/EventDaoJPAImp.java index dfb95ea232..ac88008c32 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/EventDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/EventDaoJPAImp.java @@ -64,7 +64,6 @@ public class EventDaoJPAImp extends LazyDeleteAbstractDaoJPAImp<Event> implement events.addAll(d.getEventsByUserAndProject(u, p, fromDate, toDate, limit)); } Collections.sort(events); - System.out.println(events); return events; } diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectEvent.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectEvent.java index 675f2858b3..6eb990fb61 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectEvent.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectEvent.java @@ -67,7 +67,7 @@ public class ProjectEvent extends Event { @Override protected void onFormSubmit(AjaxRequestTarget target) { - System.out.println("On form submitt in event class"); + //System.out.println("On form submitt in event class"); callback.doCallback(target); } diff --git a/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.java b/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.java index 1d41eee02b..2f738710b4 100644 --- a/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.java +++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.java @@ -119,7 +119,6 @@ public class ProjectPartnerPage extends ProjectPage { wmc.add(dataView); wmc.setOutputMarkupId(true); pagingNavigator = new PagingNavigator("navigator", dataView); - System.out.println(dataView.size()); wmc.add(pagingNavigator); add(wmc); diff --git a/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.html b/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.html index d4996967ab..b22216a478 100644 --- a/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.html +++ b/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.html @@ -2,18 +2,17 @@ <html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> <body> <wicket:panel> - <div wicket:id="showDetailsIcon" class="left"></div> - <a href="#" class="right" wicket:id="eventPageLink"><img wicket:id="eventPageLinkIcon" /></a><div wicket:id="eventDueDate" class="span-1 left month"></div> - + <p></p> + <span class="event-title" wicket:id="eventTitle">Event title here</span> <div> + <img wicket:id="eventDeleteIcon" class="right" /> + <img wicket:id="eventEditIcon" class="right" /> + <div> + <div wicket:id="showDetailsIcon" class="left"></div> + <span wicket:id="eventDueDate" class="span-2 left month"></span> <div> - <span wicket:id="eventTitle">Event title here</span> - - <img wicket:id="eventDeleteIcon" class="right" /> - <img wicket:id="eventEditIcon" class="right" /> - - <span class ="right"></span> - <div wicket:id="statusIcon"></div> + <a href="#" wicket:id="eventPageLink"><span wicket:id="statusIcon"></span></a> + </div> </div> </div> <p></p> diff --git a/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.java b/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.java index f02af4e2b3..68e227f1fc 100644 --- a/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.java +++ b/src/main/java/se/su/dsv/scipro/project/panels/EventLayoutPanel.java @@ -23,13 +23,11 @@ import se.su.dsv.scipro.data.dataobjects.Event; import se.su.dsv.scipro.data.dataobjects.HandInActivity; import se.su.dsv.scipro.data.dataobjects.Project; import se.su.dsv.scipro.data.dataobjects.User; -import se.su.dsv.scipro.icons.ActionIcon; import se.su.dsv.scipro.icons.AjaxActionIcon; import se.su.dsv.scipro.icons.ExpandContractActionIcon; import se.su.dsv.scipro.icons.IconPanel; import se.su.dsv.scipro.icons.ImageIcon; import se.su.dsv.scipro.schedule.baseevent.panels.EventScheduleDetailsPanel; -import se.su.dsv.scipro.schedule.calendar.icon.CalendarIconImage; import se.su.dsv.scipro.util.IAjaxCallback; import se.su.dsv.scipro.util.JavascriptEventConfirmation; import se.su.dsv.scipro.util.WiQueryCoreEffectsHelper; @@ -56,8 +54,8 @@ public abstract class EventLayoutPanel extends Panel { //add(new CalendarIconImage("calendarIcon", event.getDueDate())); //add(new DateLabel("month", new Model<Date>(event.getDueDate()), new PatternDateConverter("MMM", false))); - add(new Label("eventTitle", event.getTitle())); add(new DateLabel("eventDueDate", new Model<Date>(event.getDueDate()), new PatternDateConverter("yyyy-MM-dd HH:mm", false))); + add(new Label("eventTitle", event.getTitle())); final WebMarkupContainer eventDetailsContainer = new WebMarkupContainer("eventDetailsContainer"); eventDetailsContainer.setOutputMarkupId(true); @@ -91,8 +89,7 @@ public abstract class EventLayoutPanel extends Panel { } }; - ImageIcon eventPageLinkIcon = new ImageIcon("eventPageLinkIcon", ActionIcon.ICON_DETAILS); - eventPageLink.add(eventPageLinkIcon); + add(eventPageLink); add(new AjaxActionIcon("eventEditIcon", AjaxActionIcon.ICON_EDIT){ @@ -172,7 +169,7 @@ public abstract class EventLayoutPanel extends Panel { } } - add(new IconPanel("statusIcon", statusIcon){ + eventPageLink.add(new IconPanel("statusIcon", statusIcon){ private static final long serialVersionUID = 1L; @Override diff --git a/src/main/webapp/css/scipro.css b/src/main/webapp/css/scipro.css index 162221bf61..cb89b70313 100644 --- a/src/main/webapp/css/scipro.css +++ b/src/main/webapp/css/scipro.css @@ -1035,7 +1035,11 @@ div.wicket-aa ul li.selected { } .month{ - font-size: 2em; - font-style: strong; - padding:0.2em; + font-size: 1em; + font-style: strong; +} + +.event-title{ + font-size: 1.4em; + font-style: strong; } From 0eaf15b39bb061e49f461628901a1df00df08edf Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Fri, 22 Jul 2011 14:09:12 +0200 Subject: [PATCH 10/11] modified unit test for latestreviewers --- .../java/se/su/dsv/scipro/dao/jpa/TestPeerReviewDaoJPA.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/test/java/se/su/dsv/scipro/dao/jpa/TestPeerReviewDaoJPA.java b/src/test/java/se/su/dsv/scipro/dao/jpa/TestPeerReviewDaoJPA.java index 0978026c3e..8044797a28 100644 --- a/src/test/java/se/su/dsv/scipro/dao/jpa/TestPeerReviewDaoJPA.java +++ b/src/test/java/se/su/dsv/scipro/dao/jpa/TestPeerReviewDaoJPA.java @@ -2,6 +2,7 @@ package se.su.dsv.scipro.dao.jpa; import java.util.ArrayList; +import java.util.Date; import java.util.List; import org.junit.Assert; @@ -528,8 +529,10 @@ public class TestPeerReviewDaoJPA { review2.setSubmitted(true); review2 = peerReviewDao.save(review2); + review1.setLastModified(new Date()); + List<PeerReview> sortedByDate = peerReviewDao.findReviewsSortedByDate(); - Assert.assertEquals(review2, sortedByDate.get(0)); + Assert.assertEquals(review1, sortedByDate.get(0)); Assert.assertEquals(2, peerReviewDao.countSubmittedReviews()); } From 7b72b2878c56e80b7c6e8ad411c5cb1bc8603c51 Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Fri, 22 Jul 2011 14:30:38 +0200 Subject: [PATCH 11/11] switched to deployment 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 942af29253..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>