diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.html b/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.html index 27c3803811..815340b389 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.html +++ b/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.html @@ -6,7 +6,21 @@ </head> <body> <wicket:extend> - <div wicket:id="cCLPanel"></div> + + <div class="span-22 last"> + <!-- Left column --> + <div class="span-10 colborder"> + <div class="span-10 last"> + <div wicket:id="cCLPanel"></div> + </div> + </div> + <!-- Right column --> + <div class="span-10 last"> + <div class="span-10 last"> + <div wicket:id="listCLPanel"></div> + </div> + </div> + </div> </wicket:extend> </body> diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.java index f9d2db1f21..0148b8c6f4 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.java +++ b/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.java @@ -9,6 +9,7 @@ import org.apache.wicket.model.PropertyModel; import org.apache.wicket.spring.injection.annot.SpringBean; import se.su.dsv.scipro.checklists.panels.CreateCheckListTemplatePanel; +import se.su.dsv.scipro.checklists.panels.ListCheckListTemplatePanel; import se.su.dsv.scipro.data.dao.interfaces.GeneralSystemSettingsDao; import se.su.dsv.scipro.data.dataobjects.GeneralSystemSettings; import se.su.dsv.scipro.project.panels.ProjectPartnerPanel; @@ -29,6 +30,7 @@ public class AdminCheckListPage extends AbstractAdminPage { public AdminCheckListPage(PageParameters pp) { super(pp); add(new CreateCheckListTemplatePanel("cCLPanel")); + add(new ListCheckListTemplatePanel("listCLPanel")); } } diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.java index f100f19bd9..5e72d75a4d 100644 --- a/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.java +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.java @@ -133,7 +133,6 @@ public class CreateCheckListTemplatePanel extends Panel { question = ""; target.addComponent(questionField); target.addComponent(container); - System.out.println("mooooo"); } }; @@ -145,7 +144,6 @@ public class CreateCheckListTemplatePanel extends Panel { form.add(addQuestionForm); form.add(save); add(form); - //add(addQuestionLink); }; diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListPanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListPanel.java new file mode 100644 index 0000000000..38bc18914f --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListPanel.java @@ -0,0 +1,66 @@ +package se.su.dsv.scipro.checklists.panels; + +import java.util.List; + +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; + +import se.su.dsv.scipro.data.dao.interfaces.CheckListDao; +import se.su.dsv.scipro.data.dataobjects.CheckList; +import se.su.dsv.scipro.data.dataobjects.Project; +import se.su.dsv.scipro.data.enums.CheckListRole; + +/** + * @author Fredrik Norberg fnorbe@dsv.su.se + * + */ + +public class ListCheckListPanel extends Panel { + + private List<CheckList> checkLists; + private CheckListRole role; + private CheckListDao checkListDao; + private Project project; + + + private static final long serialVersionUID = 1L; + + public ListCheckListPanel(String id, CheckListRole role, final Project project) { + super(id); + this.role = role; + checkLists = checkListDao.findCheckLists(project, role); + + IModel<List<CheckList>> checkListModel = new LoadableDetachableModel<List<CheckList>>() { + + private static final long serialVersionUID = 1L; + + @Override + protected List<CheckList> load() { + return project.getCheckLists(); + + } + }; + + final WebMarkupContainer container = new WebMarkupContainer("container"); + container.setOutputMarkupId(true); + ListView<CheckList> checkLists = new ListView<CheckList>("checkLists", checkListModel) { + + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem<CheckList> item) { + Label listName = new Label("listName", item.getModel().getObject().getName()); + item.add(listName); + + } + }; + + container.add(checkLists); + } + +} diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListTemplatePanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListTemplatePanel.java new file mode 100644 index 0000000000..268c615bad --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListTemplatePanel.java @@ -0,0 +1,67 @@ +package se.su.dsv.scipro.checklists.panels; + +import java.util.List; + +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.spring.injection.annot.SpringBean; + +import se.su.dsv.scipro.data.dao.interfaces.CheckListTemplateDao; +import se.su.dsv.scipro.data.dataobjects.CheckListTemplate; + + +/** + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ + +public class ListCheckListTemplatePanel extends Panel{ + + @SpringBean + private CheckListTemplateDao checkListTemplateDao; + + private static final long serialVersionUID = 1L; + + public ListCheckListTemplatePanel(String id) { + super(id); + + IModel<List<CheckListTemplate>> checkListTemplateModel = new LoadableDetachableModel<List<CheckListTemplate>>() { + + private static final long serialVersionUID = 1L; + + @Override + protected List<CheckListTemplate> load() { + return checkListTemplateDao.findAll(); + + } + }; + + + final WebMarkupContainer container = new WebMarkupContainer("container"); + container.setOutputMarkupId(true); + ListView<CheckListTemplate> checkListTemplates = new ListView<CheckListTemplate>("checkListTemplates", checkListTemplateModel) { + + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem<CheckListTemplate> item) { + Label templateName = new Label("templateName", new PropertyModel<String>(item.getModel(),"name")); + Label templateOwner = new Label("templateOwner", new PropertyModel<String>(item.getModel(), "owner")); + item.add(templateName); + item.add(templateOwner); + + } + }; + + container.add(checkListTemplates); + } + +} + + diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/ViewCheckListPanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/ViewCheckListPanel.java index 3dab763499..777a44d6a7 100644 --- a/src/main/java/se/su/dsv/scipro/checklists/panels/ViewCheckListPanel.java +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/ViewCheckListPanel.java @@ -40,7 +40,7 @@ public class ViewCheckListPanel extends Panel { public ViewCheckListPanel(String id){ super(id); - List<CheckList> checkLists = checkListDao.findCheckLists(SciProSession.get() + /* List<CheckList> checkLists = checkListDao.findCheckLists(SciProSession.get() .getActiveProject());{ if (checkLists.size() < 1) { CheckList checkList = new CheckList("Test", SciProSession.get().getActiveProject()); @@ -48,13 +48,12 @@ public class ViewCheckListPanel extends Panel { checkListQuestion = checkListQuestionDao.save(checkListQuestion); checkList.getQuestions().add(checkListQuestion); checkList = checkListDao.save(checkList); + } ListView<CheckList> checkListsListView = new ListView<CheckList>("checkLists", checkLists) { - /** - * - */ + private static final long serialVersionUID = 1L; @Override @@ -104,7 +103,7 @@ public class ViewCheckListPanel extends Panel { }; add(checkListsListView); - }; + };*/ } } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java index 4c5058033e..4e0117545c 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java @@ -4,8 +4,11 @@ import java.util.List; import se.su.dsv.scipro.data.dataobjects.CheckList; import se.su.dsv.scipro.data.dataobjects.Project; +import se.su.dsv.scipro.data.enums.CheckListRole; public interface CheckListDao extends Dao<CheckList> { - public List<CheckList> findCheckLists(final Project project); + public List<CheckList> findCheckLists(final Project project, CheckListRole role); + //use this if a dataview is necesary + //public int countCheckLists (final CheckList cl, Project project); } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java index 94994e3311..7241462343 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java @@ -1,6 +1,7 @@ package se.su.dsv.scipro.data.dao.jpa; import java.util.ArrayList; +import java.util.Date; import java.util.List; import javax.persistence.EntityManager; @@ -9,12 +10,16 @@ import javax.persistence.PersistenceException; import javax.persistence.TypedQuery; import org.hibernate.ejb.QueryHints; +import org.joda.time.DateTime; import org.springframework.orm.jpa.JpaCallback; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; import se.su.dsv.scipro.data.dao.interfaces.CheckListDao; import se.su.dsv.scipro.data.dataobjects.CheckList; import se.su.dsv.scipro.data.dataobjects.Project; +import se.su.dsv.scipro.data.dataobjects.ProjectClass; +import se.su.dsv.scipro.data.enums.CheckListRole; /** * @@ -29,7 +34,7 @@ public class CheckListDaoJPAImp extends AbstractDaoJPAImp<CheckList> implements super(CheckList.class); } - public List<CheckList> findCheckLists(final Project project) { + public List<CheckList> findCheckLists(final Project project, CheckListRole role) { return getJpaTemplate().execute(new JpaCallback<List<CheckList>>() { public List<CheckList> doInJpa(EntityManager em) throws PersistenceException { String q = "select s " + "from CheckList s " + "where s.project = :project"; @@ -47,4 +52,23 @@ public class CheckListDaoJPAImp extends AbstractDaoJPAImp<CheckList> implements }); } + //use this if a dataview is necesary + /*@Override + @Transactional(readOnly = true) + public int countCheckLists(final CheckList cl,final Project project) { + return getJpaTemplate().execute(new JpaCallback<Integer>() { + + @Override + public Integer doInJpa(EntityManager em) + throws PersistenceException { + String q = "SELECT COUNT(cl) from CheckList cl WHERE cl.project = :p" ; + TypedQuery<Long> query = em.createQuery(q, + Long.class); + query.setHint(QueryHints.HINT_CACHEABLE, "true"); + query.setParameter("p", project); + + return (query.getSingleResult()).intValue(); + } + }); + }*/ } diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/Project.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/Project.java index 455ff5a680..a97b96ccfa 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/Project.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/Project.java @@ -1,6 +1,8 @@ package se.su.dsv.scipro.data.dataobjects; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import java.util.SortedSet; import java.util.TreeSet; @@ -41,6 +43,7 @@ public class Project extends DomainObject implements Comparable<Project>, Iconiz private static final long serialVersionUID = 9071570648984376188L; public static final String PP_PROJECT_ID = "pid"; + @Id @GeneratedValue @@ -82,6 +85,10 @@ public class Project extends DomainObject implements Comparable<Project>, Iconiz private String statusMessage = ""; private Date daisyStartDate; + + @OneToMany(targetEntity=CheckList.class, cascade=CascadeType.ALL, orphanRemoval=true) + @Sort(type=SortType.NATURAL) //Required by hibernate + private List<CheckList> checkLists = new ArrayList<CheckList>(); public Project() {} @@ -208,6 +215,18 @@ public class Project extends DomainObject implements Comparable<Project>, Iconiz public void setStatusMessage(String statusMessage) { this.statusMessage = statusMessage; } + + public List<CheckList> getCheckLists() { + return checkLists; + } + + public void setCheckLists(List<CheckList> checkLists) { + this.checkLists = checkLists; + } + + public void addCheckList(CheckList cl){ + checkLists.add(cl); + } @Override public int hashCode() { @@ -268,6 +287,5 @@ public class Project extends DomainObject implements Comparable<Project>, Iconiz final public String getCommentKey() { return Project.class.getCanonicalName().toString(); } - - + } diff --git a/src/main/java/se/su/dsv/scipro/data/enums/CheckListRole.java b/src/main/java/se/su/dsv/scipro/data/enums/CheckListRole.java new file mode 100644 index 0000000000..06cbbf71bf --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/enums/CheckListRole.java @@ -0,0 +1,7 @@ +package se.su.dsv.scipro.data.enums; + +public enum CheckListRole { + AUTHOR, + SUPERVISOR, + ADMIN +} diff --git a/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.java b/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.java index ad39c2dbc3..8fbc7f753c 100644 --- a/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.java +++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.java @@ -2,6 +2,9 @@ package se.su.dsv.scipro.project.pages; import org.apache.wicket.PageParameters; +import se.su.dsv.scipro.SciProSession; +import se.su.dsv.scipro.checklists.panels.ListCheckListPanel; +import se.su.dsv.scipro.data.enums.CheckListRole; import se.su.dsv.scipro.security.auth.Authorization; import se.su.dsv.scipro.security.auth.roles.Roles; @@ -10,11 +13,13 @@ import se.su.dsv.scipro.security.auth.roles.Roles; * */ -@Authorization(authorizedRoles={Roles.SYSADMIN}) //TODO Hidden for initial deployment +@Authorization(authorizedRoles={Roles.SYSADMIN}) public class ProjectChecklistPage extends ProjectPage { public ProjectChecklistPage(PageParameters pp) { super(pp); + add(new ListCheckListPanel("listCheckListPanel", CheckListRole.AUTHOR, + SciProSession.get().getActiveProject())); //add(new TrafficLightPanel("trafficLightPanel")); //add(new CreateCheckListTemplatePanel("createCheckList")); } diff --git a/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.html b/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.html index 2195675938..5ac372575a 100644 --- a/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.html +++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.html @@ -7,7 +7,6 @@ <div class="span-22 last"> <div wicket:id=feedback></div> <!-- Left column --> - <div class="span-10 colborder"> <div class="span-10 last"> <h5 class="peer-title">Look for project partner</h5> 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 2f738710b4..83ffa48803 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 @@ -59,7 +59,6 @@ public class ProjectPartnerPage extends ProjectPage { private DataView<ProjectPartner> dataView; private WebMarkupContainer wmc; - private IModel<List<ProjectPartner>> listModel; private RadioChoice<ProjectClass> degreeChoice; private RadioChoice<ProjectClass> showChoice; @@ -76,7 +75,7 @@ public class ProjectPartnerPage extends ProjectPage { settings = generalSystemSettingsDao.getGeneralSystemSettingsInstance(); choices = new ArrayList<ProjectClass>(); - days = settings.getProjectPartnerDaysToLive(); + setDays(settings.getProjectPartnerDaysToLive()); ProjectClass bachelor = projectClassDao.getProjectClass(ProjectClass.BACHELOR); choices.add(bachelor); choices.add(projectClassDao.getProjectClass(ProjectClass.MASTER)); @@ -142,7 +141,6 @@ public class ProjectPartnerPage extends ProjectPage { private void loadListView(ProjectPartnerDataProvider projectPartnerDataProvider){ dataView = new DataView<ProjectPartner>("list", projectPartnerDataProvider, 5 ){ - //wmc.add(new ListView<ProjectPartner>("list", new PropertyModel<List<ProjectPartner>>(this, "ProjectPartnerDao.getProjectPartner")){ @@ -160,5 +158,13 @@ public class ProjectPartnerPage extends ProjectPage { } }; } + + public int getDays() { + return days; + } + + public void setDays(int days) { + this.days = days; + } } diff --git a/src/main/resources/applicationContext.xml b/src/main/resources/applicationContext.xml index 78cb9aa86b..14ed77e032 100644 --- a/src/main/resources/applicationContext.xml +++ b/src/main/resources/applicationContext.xml @@ -38,6 +38,10 @@ "projectClassDao" "projectScheduleDao" "projectFollowerDao" + "checkListDao" + "checkListQuestion" + "checkListTemplate" + "checkListAnswer" "stringResourceDao" "fileDescriptionDao" "projectEventTemplateDao"