From 43c2e13dc3c16eeb729ef9a26bc2ef40a47f7384 Mon Sep 17 00:00:00 2001 From: Fredrik Norberg <fnorbe@dsv.su.se> Date: Wed, 27 Jul 2011 17:20:13 +0200 Subject: [PATCH 01/14] added the 4th option to traffic lights --- .../checklists/panels/TrafficLightPanel.java | 4 ++++ .../se/su/dsv/scipro/data/enums/StateOfMind.java | 3 ++- src/main/webapp/images/icons/grey_ball_32.png | Bin 0 -> 1081 bytes 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 src/main/webapp/images/icons/grey_ball_32.png diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java index 1aa44102c5..51082c7eb6 100644 --- a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java @@ -64,6 +64,10 @@ public class TrafficLightPanel extends Panel { image = new StaticImage("image", new Model<String>( "images/icons/yellow_ball_32.png")); } + else if (stateOfMind.equals(StateOfMind.NOTAPLICABLE)) { + image = new StaticImage("image", new Model<String>( + "images/icons/grey_ball_32.png")); + } item.add(image); }; }; diff --git a/src/main/java/se/su/dsv/scipro/data/enums/StateOfMind.java b/src/main/java/se/su/dsv/scipro/data/enums/StateOfMind.java index 85f0570407..67842eaf5b 100644 --- a/src/main/java/se/su/dsv/scipro/data/enums/StateOfMind.java +++ b/src/main/java/se/su/dsv/scipro/data/enums/StateOfMind.java @@ -10,7 +10,8 @@ package se.su.dsv.scipro.data.enums; public enum StateOfMind { NEEDHELP(0, "Need Help", "You think you need help to proceed or you are unsure of what to do next.", "som-needhelp"), NEUTRAL(1, "Neutral", "This is the default option and signals that you don't have a clear standpoint on your status but no imminent help is needed.", "som-neutral"), - FINE(2, "Everything is fine", "This means your work proceeds as planned and that no issues regarding the continuation are on the horizon.", "som-fine"); + FINE(2, "Everything is fine", "This means your work proceeds as planned and that no issues regarding the continuation are on the horizon.", "som-fine"), + NOTAPLICABLE(3, "moo", "moo","som-moo"); private int value; private String status; diff --git a/src/main/webapp/images/icons/grey_ball_32.png b/src/main/webapp/images/icons/grey_ball_32.png new file mode 100644 index 0000000000000000000000000000000000000000..a9017f0aa57e508ee1854248ce8ab4877107c403 GIT binary patch literal 1081 zcmV-91jhS`P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipf5 z4+;b6ue8qq00X&6L_t(o!_`;KYZOTo|8-4wM<<h=RmVvrhzHq=jE;<{5xj~2f=BTb z7WV2vSlGKDd*6#kkNyvWcuI$`lMG%K7D9~UXf&u3GwH6b_E7b@s%vKQrJy!E>Z4!1 zkKe2Js>;LfIQF-&cJ>YcEMI>6__#8>!y2%#TECst1`j)1jSEOZhS*^U0R*vZ*1GG# zR^|Tkl{Zhmi2=M@Ta3i~KiHk|kL23PPlEfKe?*O~N5?XNubityIMqXPx&o;u83R0K zTKmf+Af;&mfB^{Jf8^Mnk6OLKp$%wvW*bZ1g${N?mMbp#hDbTnEh)?-kP1UIKOM_< zw%%N7_PeewHb(jNC0ty~m6v=VJfX-B6$PQ0BML(EpXN$BYC9oY!o{_AXZHHO2=JA2 zmB>H;p`e@u+X&d9AOr|{8vzjmNv!%B2`)COb~p+fE0QxW$110mLg6vvoxKNAVR(d2 z6ORG$Q2pBpSrp8?1bV-Ygn)Nzi%9F$5#<EE3%flI9O&(Fpx2VYX}!w3wZ+j8{M$;f zTlT?NQK{V?B?JV&-Nr-3bMmvm)s-MeU}3d>8@pvc_nv5+^25@kwE(bN_6Y?B0C8>b zcOl&<#%}t#!fAXIBQ<Kn`rtus!0J}xe7<20E5zoda7^O0ozgXA?RE2v$$~wr;E*tT zp*?oz0l?FH078k(B#>D~royz00V#mJzykorJF_<-U{Z!!&ndfK+lQk=0K7AM(}yn` z#oB0jObhHWV`H*F2Qy<pD%E_(iY42X3jn@sFns6FhhW76LP|sSDd$O`1k-2QbDM|O zNb6*DWfBhn2-am$v;Q<N$eE=ylf@(UYx{6?_(0U`KUJ!yVhItlLPevhR`QM4sov!f zD!$o-N@ycM<5U#y3R6jz*MTdw?ndE2anE&^Y~i-xNxZg9jlku(&b!=z@ZI!ZxhLZm zyJR1;sW7#EKck&X%856XKYyIV2mpAnaZl}RIqDIOMLa6lRbunF#z>VtJlME5{!X}Z z=>zso|5CV$(V=5sNbGx|dm$m1$pPCy0GN9J5v>>1v3Ej_?RiYcDoCkNki|o_m|E(` zL*uQ@XY&#dDW8rd$M*chOKH^V4cgiI4U~1NxbTyrgGe|b0)VnaJ6pfuUe8OoRzz}h zZfBGC<7cme>RlwvQ=2Q*>60nS^F7ruPE=nCAWe(`GS$jO#_|8HsM&vhl!wV&gj4^0 zgNMn0WBa$L)qDMOJ<WcY$LT@n0Kh?B?)QBG3P9~LWaMsd00000NkvXXu0mjf3Bv$? literal 0 HcmV?d00001 From 532b93f008d8bcaff78339d86b282fb8e219ef15 Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Thu, 28 Jul 2011 15:45:11 +0200 Subject: [PATCH 02/14] Fix of hiding of "Last 12 months" on peer portal page depending on what's currently visible Change-Id: I6b0b25817373bacc2af8e3413fc432955b7d9f4a --- .../java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.html | 2 +- .../java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.html index 721f5125e9..21fac7dd7d 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.html +++ b/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.html @@ -89,7 +89,7 @@ <span class="box-title">Best rated reviewers</span> <div wicket:id="bestRatedPanel" class="append-bottom"></div> </div> - <div> + <div wicket:id="statsTimespanContainer"> <i><span class="small right">Last 12 months</span></i> </div> </div> diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.java b/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.java index 3d70815e37..d4db753c68 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.java +++ b/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.java @@ -221,16 +221,23 @@ public class PeerPortalPanel extends Panel { int displayedReviews = gsettings.getNumberOfLatestReviewsDisplayed(); + boolean showStatsTimespan = false; if(gsettings.isPeerDisplayNumberOfReviewsPerformed()){ add(new MostFrequentReviewersPanel(mostFrequentPanel)); + showStatsTimespan = true; } else { add(new InvisiblePanel(mostFrequentPanel)); } if( gsettings.isPeerRatingsEnabled() ){ add(new WebMarkupContainer(bestRatedContainer).add(new BestRatedReviewersPanel("bestRatedPanel") ) ); + showStatsTimespan = true; } else { add(new InvisiblePanel(bestRatedContainer)); } + WebMarkupContainer statsTimespanContainer = new WebMarkupContainer("statsTimespanContainer"); + statsTimespanContainer.setVisible(showStatsTimespan); + add(statsTimespanContainer); + if(gsettings.isPeerDisplayLatestReviews()) { // Checkbox on the AdminPeerSettingsPage is not visible since it's // not decided what kind of info that should be public for students. From 4bb3c8570776bc64a18b9f2d42fcbfea83887565 Mon Sep 17 00:00:00 2001 From: joha-asc <aschan.johan@gmail.com> Date: Thu, 28 Jul 2011 15:47:19 +0200 Subject: [PATCH 03/14] test fix for board messages --- .../java/se/su/dsv/scipro/dao/jpa/TestBoardMessageDaoJPA.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/se/su/dsv/scipro/dao/jpa/TestBoardMessageDaoJPA.java b/src/test/java/se/su/dsv/scipro/dao/jpa/TestBoardMessageDaoJPA.java index abd9ebcab1..5203a6add4 100644 --- a/src/test/java/se/su/dsv/scipro/dao/jpa/TestBoardMessageDaoJPA.java +++ b/src/test/java/se/su/dsv/scipro/dao/jpa/TestBoardMessageDaoJPA.java @@ -110,7 +110,7 @@ public class TestBoardMessageDaoJPA { messageBoard = new MessageBoard(presenterProject); messageBoard.setTitle("test"); - messageBoard.getBoardMessages().add(boardMessage); + messageBoard.addToBoardMessages(boardMessage); messageBoard = messageBoardDao.save(messageBoard); From 44c9b82b5aab7ab8c3058a0175574294e6d98080 Mon Sep 17 00:00:00 2001 From: Fredrik Norberg <fnorbe@dsv.su.se> Date: Thu, 28 Jul 2011 15:53:56 +0200 Subject: [PATCH 04/14] changed trafficlightpanel to not use stateofmind --- .../admin/pages/AdminProjectPartnerPage.java | 2 +- .../checklists/panels/TrafficLightPanel.html | 45 ++++++++++++++---- .../checklists/panels/TrafficLightPanel.java | 46 +++++++++++-------- .../su/dsv/scipro/data/enums/StateOfMind.java | 3 +- .../dsv/scipro/project/pages/ProjectPage.java | 1 + src/main/webapp/WEB-INF/web.xml | 4 +- 6 files changed, 68 insertions(+), 33 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/AdminProjectPartnerPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/AdminProjectPartnerPage.java index cc47dc9a00..9913aa204e 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/AdminProjectPartnerPage.java +++ b/src/main/java/se/su/dsv/scipro/admin/pages/AdminProjectPartnerPage.java @@ -19,7 +19,7 @@ import se.su.dsv.scipro.security.auth.roles.Roles; * */ -@Authorization(authorizedRoles={Roles.SYSADMIN}) +@Authorization(authorizedRoles={Roles.SYSADMIN, Roles.ADMIN}) public class AdminProjectPartnerPage extends AbstractAdminPage { @SpringBean diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html index a235198823..5bc9e200e2 100644 --- a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html @@ -6,16 +6,41 @@ </head> <body> <wicket:panel> - <div wicket:id="stateOfMindContainer"> - <form wicket:id="form"> - <table wicket:id="group"> - <tr wicket:id="persons"> + <div wicket:id="trafficLightContainer"> + <div wicket:id="group"> + <div wicket:id="lights"> + <table > + <tr > <td><input type="radio" wicket:id="radio" /></td> - <td> <img wicket:id="image"/></td> - </tr> - </table> - </form> - </div> + <td><img wicket:id="image"/></td> + </tr> + <tr> + + </tr> + </table> + </div> + </div> + </div> </wicket:panel> </body> -</html> \ No newline at end of file +</html> +<!-- +<!DOCTYPE html> +<html + xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> +<head> +<meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> +</head> +<body> + <wicket:panel> + <div wicket:id="trafficLightContainer"> + <table wicket:id="group"> + <tr wicket:id="lights"> + <td><input type="radio" wicket:id="radio" /></td> + <td> <img wicket:id="image"/></td> + </tr> + </table> + </div> + </wicket:panel> +</body> +</html> --> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java index 51082c7eb6..35bc079230 100644 --- a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java @@ -1,5 +1,8 @@ package se.su.dsv.scipro.checklists.panels; +import java.util.ArrayList; +import java.util.List; + import org.apache.wicket.AttributeModifier; import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -32,46 +35,53 @@ import edu.emory.mathcs.backport.java.util.Arrays; */ public class TrafficLightPanel extends Panel { - + + private List<TrafficLight> lights; + + enum TrafficLight{ + GREEN, YELLOW, RED, NOT + } private static final long serialVersionUID = 8862892008428526067L; public TrafficLightPanel(String id, WebPage parent) { super(id); - WebMarkupContainer stateOfMindContainer = new WebMarkupContainer( - "stateOfMindContainer"); - add(stateOfMindContainer); + WebMarkupContainer trafficLightContainer = new WebMarkupContainer( + "trafficLightContainer"); + add(trafficLightContainer); + lights = new ArrayList<TrafficLight>(); + lights.add(TrafficLight.GREEN);lights.add(TrafficLight.YELLOW);lights.add(TrafficLight.RED);lights.add(TrafficLight.NOT); + RadioGroup<TrafficLight> group = new RadioGroup<TrafficLight>("group"); + trafficLightContainer.add(group); + - Form<StateOfMind> f = new Form<StateOfMind>("form"); - stateOfMindContainer.add(f); - RadioGroup<StateOfMind> group = new RadioGroup<StateOfMind>("group"); - f.add(group); + ListView<TrafficLight> lightList = new ListView<TrafficLight>("lights", lights) { + + private static final long serialVersionUID = 1L; - ListView<StateOfMind> persons = new ListView<StateOfMind>("persons", - Arrays.asList(StateOfMind.values())) { - protected void populateItem(ListItem<StateOfMind> item) { - StateOfMind stateOfMind = item.getModelObject(); - item.add(new Radio<StateOfMind>("radio", item.getModel())); + protected void populateItem(ListItem<TrafficLight> item) { + TrafficLight trafficLight = item.getModelObject(); + item.add(new Radio<TrafficLight>("radio", item.getModel())); StaticImage image = null; - if (stateOfMind.equals(StateOfMind.FINE)) { + if (trafficLight.equals(TrafficLight.GREEN)) { image = new StaticImage("image", new Model<String>( "images/icons/green_ball_32.png")); - } else if (stateOfMind.equals(StateOfMind.NEEDHELP)) { + } else if (trafficLight.equals(TrafficLight.YELLOW)) { image = new StaticImage("image", new Model<String>( "images/icons/red_ball_32.png")); - } else if (stateOfMind.equals(StateOfMind.NEUTRAL)) { + } else if (trafficLight.equals(TrafficLight.RED)) { image = new StaticImage("image", new Model<String>( "images/icons/yellow_ball_32.png")); } - else if (stateOfMind.equals(StateOfMind.NOTAPLICABLE)) { + else if (trafficLight.equals(TrafficLight.NOT)) { image = new StaticImage("image", new Model<String>( "images/icons/grey_ball_32.png")); } item.add(image); }; }; - group.add(persons); + group.add(lightList); } } diff --git a/src/main/java/se/su/dsv/scipro/data/enums/StateOfMind.java b/src/main/java/se/su/dsv/scipro/data/enums/StateOfMind.java index 67842eaf5b..85f0570407 100644 --- a/src/main/java/se/su/dsv/scipro/data/enums/StateOfMind.java +++ b/src/main/java/se/su/dsv/scipro/data/enums/StateOfMind.java @@ -10,8 +10,7 @@ package se.su.dsv.scipro.data.enums; public enum StateOfMind { NEEDHELP(0, "Need Help", "You think you need help to proceed or you are unsure of what to do next.", "som-needhelp"), NEUTRAL(1, "Neutral", "This is the default option and signals that you don't have a clear standpoint on your status but no imminent help is needed.", "som-neutral"), - FINE(2, "Everything is fine", "This means your work proceeds as planned and that no issues regarding the continuation are on the horizon.", "som-fine"), - NOTAPLICABLE(3, "moo", "moo","som-moo"); + FINE(2, "Everything is fine", "This means your work proceeds as planned and that no issues regarding the continuation are on the horizon.", "som-fine"); private int value; private String status; diff --git a/src/main/java/se/su/dsv/scipro/project/pages/ProjectPage.java b/src/main/java/se/su/dsv/scipro/project/pages/ProjectPage.java index 9dacb4dea1..68ee7374f8 100644 --- a/src/main/java/se/su/dsv/scipro/project/pages/ProjectPage.java +++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectPage.java @@ -27,6 +27,7 @@ public abstract class ProjectPage extends MenuPage implements FilePanelContainer public ProjectPage(PageParameters pp) { Project activeProject = SciProSession.get().getActiveProject(); + User u = SciProSession.get().getUser(); if(activeProject == null && (this.getClass() != NoActiveProjectPage.class && this.getClass() != ProjectPartnerPage.class)){ User user = SciProSession.get().getUser(); diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 7ea6274a27..54e9218c03 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -64,8 +64,8 @@ <!-- Use deployment for production, development for development --> <context-param> <param-name>configuration</param-name> -<!-- <param-value>development</param-value> --> - <param-value>deployment</param-value> + <param-value>development</param-value> + <!-- <param-value>deployment</param-value>--> </context-param> From 8506215602c5295bd58fcc1ea205f4fb6aaebdc2 Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Thu, 28 Jul 2011 16:07:37 +0200 Subject: [PATCH 05/14] Spelling+comments Change-Id: I51065466031338b116ab185722915bae1c45c5cc --- .../scipro/components/AbstractMenuPanel.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/components/AbstractMenuPanel.java b/src/main/java/se/su/dsv/scipro/components/AbstractMenuPanel.java index aa60f5e574..75f046c4e0 100644 --- a/src/main/java/se/su/dsv/scipro/components/AbstractMenuPanel.java +++ b/src/main/java/se/su/dsv/scipro/components/AbstractMenuPanel.java @@ -56,7 +56,7 @@ public abstract class AbstractMenuPanel extends Panel { protected void populateItem( ListItem<MenuItem> item ) { final MenuItem mi = item.getModelObject(); boolean highLightAsCurrentByInterface = false; - Class<?> menuItemInterface = mi.getMenuHilightInterface(); + Class<?> menuItemInterface = mi.getMenuHighlightInterface(); if( menuItemInterface != null ){ for( Class<?> actualPageInterface : containerClass.getInterfaces() ){ if( actualPageInterface.equals(menuItemInterface) ){ @@ -72,7 +72,7 @@ public abstract class AbstractMenuPanel extends Panel { && mi.getTargetClass().getSuperclass() != menuContainerCommonSuperClass ) - ){ + ){ //item.setMarkupId("current"); //item.setOutputMarkupId(true); //Replaced the above because it generates invalid markup if two menus are added to the same page (id no longer unique) @@ -99,7 +99,8 @@ public abstract class AbstractMenuPanel extends Panel { } /** * May not rely on anything in the implementing class's constructor as this will not have been initialized yet. - * Items are rendered from left to right as you might expect, first item in the list will be first tab item on the left. + * Items are rendered from left to right (or top to bottom depending on type of menu) as you might expect, + * the first item in the list will be the first menu item on the left/top. * @return */ protected abstract List<MenuItem> getItemList(); @@ -118,7 +119,7 @@ public abstract class AbstractMenuPanel extends Panel { private Class<? extends Page> targetClass; private PageParameters pp; private String iconName; - private Class<? extends MenuHighlight> menuHilightInterface; + private Class<? extends MenuHighlight> menuHighlightInterface; public MenuItem(final String name, final Class<? extends Page> targetClass) { this(name, targetClass, null, null, null); @@ -148,7 +149,7 @@ public abstract class AbstractMenuPanel extends Panel { public MenuItem(final String name, final Class<? extends Page> targetClass, final Class<? extends MenuHighlight> menuHilightInterface, PageParameters pp, String iconName) { this.name = name; this.targetClass = targetClass; - this.menuHilightInterface = menuHilightInterface; + this.menuHighlightInterface = menuHilightInterface; this.pp = pp; this.iconName = iconName == null ? ImageIcon.ICON_EMPTY : iconName; } @@ -169,13 +170,13 @@ public abstract class AbstractMenuPanel extends Panel { return iconName; } - public MenuItem setMenuHilightInterface(Class<? extends MenuHighlight> menuHilightInterface) { - this.menuHilightInterface = menuHilightInterface; + public MenuItem setMenuHighlightInterface(Class<? extends MenuHighlight> menuHighlightInterface) { + this.menuHighlightInterface = menuHighlightInterface; return this; } - public Class<? extends MenuHighlight> getMenuHilightInterface() { - return menuHilightInterface; + public Class<? extends MenuHighlight> getMenuHighlightInterface() { + return menuHighlightInterface; } From deab4f9271521ce2332c4686cb20368b4e2d05f9 Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Thu, 28 Jul 2011 16:36:50 +0200 Subject: [PATCH 06/14] Fix of broken ui-logic, was impossible to create new final seminar (unless there was one already) Change-Id: Ia190765d0df29c0e730653e724b80e6018522b89 --- .../panels/ProjectFinalSeminarContainerPanel.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarContainerPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarContainerPanel.java index 8a7fa59e52..adcd3edf62 100644 --- a/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarContainerPanel.java +++ b/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarContainerPanel.java @@ -23,22 +23,15 @@ public class ProjectFinalSeminarContainerPanel extends Panel { public ProjectFinalSeminarContainerPanel(final String id, final Project project, final boolean isSupervisorView){ super(id); - final List<FinalSeminar> seminars = finalSeminarDao.findFinalSeminarsByProject(project); + List<FinalSeminar> seminars = finalSeminarDao.findFinalSeminarsByProject(project); - if(isSupervisorView && !seminars.isEmpty() ){ + if(isSupervisorView && seminars.isEmpty() ){ add(new OpponentPanel("addSeminar", project)); } else { add(new EmptyPanel("addSeminar")); } - add(new Label("noSeminarsMessage", "No final seminar has been created for this project"){ - private static final long serialVersionUID = 1L; - - @Override - public boolean isVisible(){ - return seminars.size() == 0; - } - }); + add(new Label("noSeminarsMessage", "No final seminar has been created for this project").setVisible(seminars.isEmpty())); add(new ListView<FinalSeminar>("seminarList", seminars){ private static final long serialVersionUID = 1L; From 42f49be0a4699d2f6bff9be1cf27ea7a63937cab Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Thu, 28 Jul 2011 16:51:51 +0200 Subject: [PATCH 07/14] Fix of menu label Change-Id: I5532e492381c36671c1bb1a6d1043715eb7b8dff --- .../se/su/dsv/scipro/admin/pages/AbstractAdminSettingsPage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c78d650e5e..54746f2ca4 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 @@ -34,7 +34,7 @@ public abstract class AbstractAdminSettingsPage extends AbstractAdminPage { items.add(new MenuItem("Server Environment", AdminServerEnvironmentSettingsPage.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("Level settings", AdminPeerSettingsPage.class)); + items.add(new MenuItem("Peer portal settings", AdminPeerSettingsPage.class)); items.add(new MenuItem("Edit levels", AdminProjectClassSettingsPage.class)); return items; From 242f93fe2cf7ef86f0e6776062bad3120a9ae8be Mon Sep 17 00:00:00 2001 From: Fredrik Norberg <fnorbe@dsv.su.se> Date: Thu, 28 Jul 2011 17:14:22 +0200 Subject: [PATCH 08/14] fixed test failure --- 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 54e9218c03..d1b02a7ae0 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -64,8 +64,8 @@ <!-- Use deployment for production, development for development --> <context-param> <param-name>configuration</param-name> - <param-value>development</param-value> - <!-- <param-value>deployment</param-value>--> + <!--<param-value>development</param-value> --> + <param-value>deployment</param-value> </context-param> From 7fda6144a7b48983ed371ce1877040c42ead9baf Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Thu, 28 Jul 2011 17:32:27 +0200 Subject: [PATCH 09/14] Removal of old incorrectly added javascript code Change-Id: I8e6930381d1b83e44795fe3cdfd38534bd09d4f5 --- src/main/java/se/su/dsv/scipro/basepages/BasePage.html | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/basepages/BasePage.html b/src/main/java/se/su/dsv/scipro/basepages/BasePage.html index a29f83d2cd..c9cbc78e51 100644 --- a/src/main/java/se/su/dsv/scipro/basepages/BasePage.html +++ b/src/main/java/se/su/dsv/scipro/basepages/BasePage.html @@ -25,10 +25,6 @@ <link href='http://fonts.googleapis.com/css?family=Ubuntu:regular,bold' rel='stylesheet' type='text/css' /> --> <!--<link rel="stylesheet" href="css/scipro.css" media="screen,projection" />--> -<!-- <link type="text/css" href="css/smoothness/jquery-ui-1.8.10.custom.css" rel="stylesheet" /> - <script type="text/javascript" src="js/jquery-1.5.2.min.js"></script> - <script type="text/javascript" src="js/jquery-ui-1.8.10.custom.min.js"></script> --> - <script type="text/javascript"> var _gaq = _gaq || []; From ea71229867ce9970e9fc73dff2b83482ba0341af Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Fri, 29 Jul 2011 10:04:41 +0200 Subject: [PATCH 10/14] Bugfix Change-Id: Idd844e32c98e973b30e0f1dd7bc72bb5f63e0b52 --- .../su/dsv/scipro/opponent/panels/ProjectFinalSeminarPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarPanel.java index aaa19fdec7..1f5223261e 100644 --- a/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarPanel.java +++ b/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarPanel.java @@ -221,7 +221,7 @@ public class ProjectFinalSeminarPanel extends Panel { public boolean isVisible() { return !isSupervisorView && seminar.getActiveParticipations().isEmpty() - && seminar.getOppositions().isEmpty() && seminar.getTurnitinId() != null; + && seminar.getOppositions().isEmpty() && seminar.getTurnitinId() == null; } @Override From 45b238d7fe0b86f71c33b4e36cf35a89077eb5df Mon Sep 17 00:00:00 2001 From: joha-asc <aschan.johan@gmail.com> Date: Fri, 29 Jul 2011 10:23:51 +0200 Subject: [PATCH 11/14] removed system out println Change-Id: Ib8c29b473ec14538ef04f7bf2455ea0214cef60f --- .../se/su/dsv/scipro/conference/panels/ConferencePanel.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java b/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java index cf5a5225ff..083e4f8b85 100644 --- a/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java +++ b/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java @@ -92,10 +92,8 @@ public class ConferencePanel extends Panel { webMarkupContainer.setOutputMarkupId(true); webMarkupContainer.add(new PagingNavigator("pagingNavigator", dataView)); add(webMarkupContainer); - if (boardMessageModel != null) { - + if (boardMessageModel != null) { int index = boardMessageDao.getBoardMessageSortOrderIndex(boardMessageModel.getObject()); - System.out.println(index); dataView.setCurrentPage(index/BOARDMESSAGESPERPAGE); } } From 04e4810d681fd311de0a3ea3ea22d8816801affa Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Fri, 29 Jul 2011 10:25:20 +0200 Subject: [PATCH 12/14] Removal of unused css file Change-Id: I92c0fab31151c74194f027d01f9b25a84ddb9396 --- src/main/webapp/styles/global.css | 230 ------------------------------ 1 file changed, 230 deletions(-) delete mode 100644 src/main/webapp/styles/global.css diff --git a/src/main/webapp/styles/global.css b/src/main/webapp/styles/global.css deleted file mode 100644 index f310472cf1..0000000000 --- a/src/main/webapp/styles/global.css +++ /dev/null @@ -1,230 +0,0 @@ -@CHARSET "UTF-8"; - -html, body { - font-family: Calibri, Tahoma, Verdana, sans-serif; - margin: 0 0 0 0; - padding: 0 0 0 0; - font-size: 0.94em; - line-height: 1.5em; - padding-top: 30px; -} - -h1, h2, h3 { - font-family: Cambria, Tahoma, Verdana, sans-serif; -} - -#container { - width: 960px; - margin: auto; -} - -#ajax-loader { - z-index:9999; - position: fixed; - top: 0; - left: 0; - width: 80px; - height: 30px; - background-color: #FFFF80; - border-bottom: 1px solid black; - border-right: 1px solid black; -} - -#veil { - opacity:0.3; - filter:alpha(opacity=50); - position:absolute; - width: 100%; - height: 100%; - z-index:9998; - background-color: white; -} - -#veil-loader { - z-index:9999; - position: absolute; - top: 30%; - left: 45%; - width: 100px; - height: 100px; - background: url(../images/ajax-loader.gif) center no-repeat; -} - -p.inline { - display: inline; -} - -.connectedSortable { - cursor: move; -} - -.float-right { - float:right; -} - -.float-left { - float:left; -} - -td.icon, -span.icon { - padding-left: 20px; - line-height: 20px; /* To center the text vertically with the icon */ -} - -span.floating-icon { - width: 20px; - height: 20px; -} - -td.icon-button, -span.icon-button { - cursor: pointer; -} - -td.icon-user, -span.icon-user { /*The background image*/ - background: url(../images/user.png) no-repeat left center; -} - -td.icon-project, -span.icon-project { /*The background image*/ - background: url(../images/project.png) no-repeat left center; -} - -td.icon-arrowDown, -span.icon-arrowDown { - background: url(../images/icons/arrow-down.png) no-repeat left center; -} - -td.icon-plus, -span.icon-plus { - background: url(../images/icons/add.gif) no-repeat left center; -} - -td.icon-minus, -span.icon-minus { - background: url(../images/icons/minus.gif) no-repeat left center; -} - -td.icon-check, -span.icon-check { - background: url(../images/icons/circle-check.png) no-repeat left center; -} - -td.icon-pencil, -span.icon-pencil { /*The background image*/ - background: url(../images/icons/pencil.png) no-repeat left center; -} - -td.icon-delete, -span.icon-delete { /*The background image*/ - background: url(../images/icons/circle-delete.png) no-repeat left center; -} - -td.icon-zoom-in, -span.icon-zoom-in { /*The background image*/ - background: url(../images/icons/zoom-in.png) no-repeat left center; -} - -.bordered-box { - border: 1px solid #CCE6FF; - padding: 0.5em 0.5em; -} - -.float-left { - float: left; -} - -.float-right { - float: right; -} - -.boxContent { - margin: 0.5em 0.5em; -} - -.boxContent h4 { - border: 1px solid #0099CC; - background-color: #CCE6FF; - padding: 0.3em 0.3em; -} - -.dashboardBox { - border: 1px solid #3300CC; - width: 50em; - min-height: 10em; -} - -.dashboardBox h3 { - border-bottom: 1px solid #3300CC; - background-color: blue; - color: white; - padding: 0.2em; - margin: 0 0; -} - -form.div { - display:block; -} - -form.formRow { - display: inline; -} - -#schedulePlannerCtrlContainer { - border: 1px solid #CCE6FF; -} - -#schedulePlannerCtrlContainer ul { - list-style-type: none; - display: inline; -} - -.scheduleEventList { - margin: 1em 0; -} - -.scheduleEvent { - padding: 0.2em 0.2em; - -webkit-border-radius: 3px; - background-color: #E5F3FF; - border: 1px solid #B3DBFF; -} - -.scheduleEventHeader { - padding: 0.4em 0.2em; -} - -.scheduleEventHeaderBar { - margin-left: 0.5em; -} - -.scheduleEventHeaderBar img { - float:left; - margin-right: 1em; - margin-left: 0.5em; -} - -.scheduleEventHeaderBar span { - display: inline; - margin-left: 0.1em; -} - -.scheduleEventIconbar { - margin: 0.4em 1em; - padding: 0.3em; -} - -.scheduleEventContent { - padding: 0.3em 0.5em; - width: 45em; -} - -.scheduleEventFooter { - margin-top: 1em; -} - -form.dialogForm { - font-size: 0.9em; -} \ No newline at end of file From 0da928464740e2fc8a4027137eed38b176f52463 Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Fri, 29 Jul 2011 13:25:15 +0200 Subject: [PATCH 13/14] Fix of several serious bugs in final seminar file handling and addition of possibility of deletion of all documents related to a final seminar by an admin Change-Id: If75bee176893c36e14c12deee3d17098a83fa260 --- .../FinalSeminarUploadController.java | 12 +- .../FinalSeminarUploadControllerImpl.java | 33 +++-- .../panels/FinalSeminarDetailsPanel.html | 131 +++++++++--------- .../panels/FinalSeminarDetailsPanel.java | 103 +++++++++++--- .../panels/OpponentListViewPanel.html | 1 + .../panels/OpponentListViewPanel.java | 63 +++++---- 6 files changed, 214 insertions(+), 129 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java b/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java index 0c03a098ff..0d2252d6d8 100644 --- a/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java +++ b/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java @@ -6,11 +6,10 @@ import org.apache.wicket.markup.html.form.upload.FileUpload; import se.su.dsv.scipro.data.dataobjects.FinalSeminar; import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition; import se.su.dsv.scipro.data.dataobjects.User; +import se.su.dsv.scipro.repository.util.FileStorageException; public interface FinalSeminarUploadController extends IClusterable { - void deleteSeminarFilesRecursive(FinalSeminar seminar); - void deleteOpponentFiles(FinalSeminarOpposition opp); /** @@ -20,6 +19,15 @@ public interface FinalSeminarUploadController extends IClusterable { * @throws Exception */ FinalSeminar deleteSeminarReport(FinalSeminar seminar) throws Exception; + + /** + * Delete the upload report for the seminar, adminOverrideMode = true means no intentional exceptions will be thrown + * @param seminar + * @param adminOverrideMode + * @return + * @throws Exception + */ + FinalSeminar deleteSeminarReport(FinalSeminar seminar, boolean adminOverrideMode) throws Exception; void storeSeminarDocument(FileUpload upload, User uploader, FinalSeminar seminar) throws Exception; diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java b/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java index c010bb8378..866dbc8ce7 100644 --- a/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java +++ b/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java @@ -78,17 +78,9 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr } private void delete(String path) { - fileRepository.delete(path); } - public void deleteSeminarFilesRecursive(final FinalSeminar seminar) throws FileStorageException { - if (seminar.getDocument() != null) { - //delete(getRepositorySeminarPath(seminar)); Use of deprecated path/method - delete(seminar.getDocument().getPath()); - } - } - public void deleteOpponentFiles(final FinalSeminarOpposition opp) throws FileStorageException { if (opp.getOpponentReport() != null) { //delete(getRepositoryOppositionPath(opp)); Use of deprecated path/method @@ -103,18 +95,31 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr * @return * @throws Exception */ - public FinalSeminar deleteSeminarReport(FinalSeminar seminar) throws Exception { + public FinalSeminar deleteSeminarReport(FinalSeminar seminar) throws Exception{ + return deleteSeminarReport(seminar, false); + } + /** + * Delete the upload report for the seminar, adminOverrideMode = true means no intentional exceptions will be thrown + * @param seminar + * @param adminOverrideMode + * @return + * @throws Exception + */ + public FinalSeminar deleteSeminarReport(FinalSeminar seminar, boolean adminOverrideMode) throws Exception { seminar = finalSeminarDao.reLoad(seminar); - if (!seminar.getOppositions().isEmpty() || !seminar.getActiveParticipations().isEmpty()) { - throw new Exception( - "Cannot delete seminar report, seminar has opponents or active participants"); + if( !adminOverrideMode ){ + if (!seminar.getOppositions().isEmpty() || !seminar.getActiveParticipations().isEmpty()) { + throw new Exception( + "Cannot delete seminar report, seminar has opponents or active participants"); + } } for (CheckPlagiarismEvent cpe : checkPlagiarismEventDao.getWithFileDescription(seminar .getDocument())) { checkPlagiarismEventDao.delete(cpe); } - - fileRepository.delete(seminar.getDocument().getPath()); + if(seminar.getDocument() != null) + if(seminar.getDocument().getPath() != null) + fileRepository.delete(seminar.getDocument().getPath()); seminar.setDocument(null); return finalSeminarDao.save(seminar); } diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.html b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.html index 4dd16f9bd7..9df136e249 100644 --- a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.html +++ b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.html @@ -2,78 +2,73 @@ <html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> <body> - <wicket:panel> - <div wicket:id="titleContainer"> - <strong>Project Title: </strong> <span wicket:id="projectTitle"></span> - <div> - <strong>Room: </strong> <span wicket:id="room"></span> - </div> - </div> - <div class="append-bottom"> - <div> - <strong>Head supervisor:</strong> - </div> - <span wicket:id="headSupervisor"></span> - </div> - <div> - <strong>Author(s): </strong> - <ul class="no-list-style"> - <li wicket:id="authorsList"><span wicket:id="author"></span></li> - </ul> - </div> +<wicket:panel> + <div wicket:id="feedback"></div> + <div wicket:id="titleContainer"><strong>Project Title: </strong> + <span wicket:id="projectTitle"></span> + <div><strong>Room: </strong> <span wicket:id="room"></span></div> + </div> + <div class="append-bottom"> + <div><strong>Head supervisor:</strong></div> + <span wicket:id="headSupervisor"></span></div> + <div><strong>Author(s): </strong> + <ul class="no-list-style"> + <li wicket:id="authorsList"><span wicket:id="author"></span></li> + </ul> + </div> - <div> - <strong>Co-supervisor(s): </strong> - <ul class="no-list-style"> - <li wicket:id="coSupervisorsList"><span - wicket:id="coSupervisor"></span></li> - </ul> - </div> + <div><strong>Co-supervisor(s): </strong> + <ul class="no-list-style"> + <li wicket:id="coSupervisorsList"><span wicket:id="coSupervisor"></span></li> + </ul> + </div> - <div> - <strong>Reviewer(s): </strong> - <ul class="no-list-style"> - <li wicket:id="reviewersList"><span wicket:id="reviewer"></span> - </li> - </ul> - </div> + <div><strong>Reviewer(s): </strong> + <ul class="no-list-style"> + <li wicket:id="reviewersList"><span wicket:id="reviewer"></span> + </li> + </ul> + </div> - <div wicket:id="detailsContainer"> - <div> - <strong>Opponent(s): </strong> - <ul class="no-list-style"> - <li wicket:id="opponentsList"><span wicket:id="opponent"></span> - </li> - </ul> - </div> - - <div> - <strong>Active participant(s): </strong> - <ul class="no-list-style"> - <li wicket:id="activeParticipantsList"><span - wicket:id="activeParticipant"></span></li> - </ul> - </div> - <div> - <strong>Presentation Language: </strong> - <div wicket:id="seminarLanguage"></div> - </div> - <div> - <strong>Thesis/Report Language: </strong> - <div wicket:id="thesisLanguage"></div> - </div> - - <strong>Thesis/Report: </strong> - <div> - <span wicket:id="seminarReportTitle"></span> <span - wicket:id="uploadInfoContainer"> <a href="#" - wicket:id="open"><img - src="images/icons/document-preview_16x16.png" alt="Open/Preview" /> - </a> <a href="#" wicket:id="download"><img - src="images/icons/download_16x16.png" alt="Download" /> </a> </span> - </div> + <div wicket:id="detailsContainer"> + <div><strong>Opponent(s): </strong> + <ul class="no-list-style"> + <li wicket:id="opponentsList"><span wicket:id="opponent"></span> + <div wicket:id="oppositionContainer"><strong>Report:</strong> <span wicket:id="oppositionReportTitle"></span> <a href="#" + wicket:id="open"><img + src="images/icons/document-preview_16x16.png" alt="Open/Preview" /> + </a> <a href="#" wicket:id="download"><img + src="images/icons/download_16x16.png" alt="Download" /> </a> <a href="#" + wicket:id="deleteOppositionReport"><img + src="images/icons/delete_16x16.png" alt="delete" /> </a> </div> - </wicket:panel> + </li> + </ul> + </div> + + <div><strong>Active participant(s): </strong> + <ul class="no-list-style"> + <li wicket:id="activeParticipantsList"><span + wicket:id="activeParticipant"></span></li> + </ul> + </div> + <div><strong>Presentation Language: </strong> + <div wicket:id="seminarLanguage"></div> + </div> + <div><strong>Thesis/Report Language: </strong> + <div wicket:id="thesisLanguage"></div> + </div> + + <strong>Thesis/Report: </strong> + <div><span wicket:id="seminarReportTitle"></span> <span + wicket:id="uploadInfoContainer"> <a href="#" wicket:id="open"><img + src="images/icons/document-preview_16x16.png" alt="Open/Preview" /> </a> + <a href="#" wicket:id="download"><img + src="images/icons/download_16x16.png" alt="Download" /> </a> <a href="#" + wicket:id="deleteSeminarReport"><img + src="images/icons/delete_16x16.png" alt="delete" /> </a> </span></div> + </div> +</wicket:panel> </body> </html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java index 172fa064a5..1e307a63dc 100644 --- a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java +++ b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java @@ -3,16 +3,21 @@ package se.su.dsv.scipro.opponent.panels; import java.util.ArrayList; import java.util.List; +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.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.EmptyPanel; +import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.Model; import org.apache.wicket.spring.injection.annot.SpringBean; +import se.su.dsv.scipro.data.controllers.FinalSeminarUploadController; import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarDao; +import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarOppositionDao; import se.su.dsv.scipro.data.dataobjects.FinalSeminar; import se.su.dsv.scipro.data.dataobjects.FinalSeminarActiveParticipation; import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition; @@ -23,6 +28,9 @@ import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.data.enums.ProjectTeamMemberRoles; import se.su.dsv.scipro.repository.components.FileDownloadLink; import se.su.dsv.scipro.repository.components.FileOpenLink; +import se.su.dsv.scipro.security.auth.MetaDataActionStrategy; +import se.su.dsv.scipro.security.auth.roles.Roles; +import se.su.dsv.scipro.util.JavascriptEventConfirmation; public class FinalSeminarDetailsPanel extends Panel { @@ -30,11 +38,15 @@ public class FinalSeminarDetailsPanel extends Panel { @SpringBean private FinalSeminarDao finalSeminarDao; + @SpringBean + private FinalSeminarOppositionDao finalSeminarOppositionDao; + @SpringBean + private FinalSeminarUploadController finalSeminarUploadController; - public FinalSeminarDetailsPanel(final String id, final FinalSeminar seminar2, - final boolean details) { + public FinalSeminarDetailsPanel(final String id, final FinalSeminar seminar2, final boolean details) { super(id); - + this.setOutputMarkupId(true); + add(new FeedbackPanel("feedback")); final FinalSeminar seminar = finalSeminarDao.reLoad(seminar2); final Project project = seminar.getProject(); WebMarkupContainer titleContainer = new WebMarkupContainer("titleContainer") { @@ -53,8 +65,7 @@ public class FinalSeminarDetailsPanel extends Panel { }); titleContainer.add(new Label("room", seminar.getRoom())); add(titleContainer); - add(new ListView<Student>("authorsList", new ArrayList<Student>( - project.getProjectParticipants())) { + add(new ListView<Student>("authorsList", new ArrayList<Student>(project.getProjectParticipants())) { private static final long serialVersionUID = 1L; @Override @@ -111,41 +122,76 @@ public class FinalSeminarDetailsPanel extends Panel { }; - detailsContainer.add(new ListView<FinalSeminarOpposition>("opponentsList", seminar - .getOppositions()) { + detailsContainer.add(new ListView<FinalSeminarOpposition>("opponentsList", seminar.getOppositions()) { private static final long serialVersionUID = 1L; @Override - protected void populateItem(ListItem<FinalSeminarOpposition> item) { - item.add(item.getModelObject().getOpponent().getUser() - .getDisplayComponent("opponent", true)); + protected void populateItem(final ListItem<FinalSeminarOpposition> item) { + item.add(item.getModelObject().getOpponent().getUser().getDisplayComponent("opponent", true)); + WebMarkupContainer oppCon = new WebMarkupContainer("oppositionContainer"){ + private static final long serialVersionUID = 1L; + + @Override + public boolean isVisible(){ + return item.getModelObject().getOpponentReport() != null; + } + }; + MetaDataActionStrategy.authorize(oppCon, Roles.ADMIN); + item.add(oppCon); + + String reportTitle = ""; + if(item.getModelObject().getOpponentReport() != null) + reportTitle = item.getModelObject().getOpponentReport().getName(); + oppCon.add(new Label("oppositionReportTitle", reportTitle)); + + oppCon.add(new FileDownloadLink("download", item.getModelObject().getOpponentReport())); + oppCon.add(new FileOpenLink("open", item.getModelObject().getOpponentReport())); + oppCon.add(new AjaxLink<Void>("deleteOppositionReport"){ + private static final long serialVersionUID = 1L; + { //Extra safeguard should someone later decide that the surrounding container should be visible to all + MetaDataActionStrategy.authorize(this, Roles.ADMIN); + this.add(new JavascriptEventConfirmation("onclick", "Do you really want to delete this user-uploaded report?")); + } + + @Override + public void onClick(AjaxRequestTarget target) { + try{ + finalSeminarUploadController.deleteOpponentFiles(item.getModelObject()); + FinalSeminarOpposition opp = item.getModelObject(); + opp.setOpponentReport(null); + opp = finalSeminarOppositionDao.save(opp); + item.setModelObject(opp); + info("Opposition report deleted"); + } catch(Exception e){ + e.printStackTrace(); + error("Something went wrong, see log files for stacktrace"); + } + target.addComponent(FinalSeminarDetailsPanel.this); + } + }); add(item); } }); - detailsContainer.add(new ListView<FinalSeminarActiveParticipation>( - "activeParticipantsList", seminar.getActiveParticipations()) { + detailsContainer.add(new ListView<FinalSeminarActiveParticipation>("activeParticipantsList", seminar.getActiveParticipations()) { private static final long serialVersionUID = 1L; @Override protected void populateItem(ListItem<FinalSeminarActiveParticipation> item) { - item.add(item.getModelObject().getUser() - .getDisplayComponent("activeParticipant", true)); + item.add(item.getModelObject().getUser().getDisplayComponent("activeParticipant", true)); add(item); } }); - detailsContainer.add(new Label("seminarLanguage", seminar.getPresentationLanguage() - .toString())); + detailsContainer.add(new Label("seminarLanguage", seminar.getPresentationLanguage().toString())); detailsContainer.add(new Label("thesisLanguage", seminar.getReportLanguage().toString())); detailsContainer.add(new Label("seminarReportTitle", new Model<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { - return seminar.getDocument() == null ? "No thesis/report uploaded" : seminar - .getDocument().getName(); + return seminar.getDocument() == null ? "No thesis/report uploaded" : seminar.getDocument().getName(); } })); @@ -161,6 +207,27 @@ public class FinalSeminarDetailsPanel extends Panel { uploadInfoContainer.add(new FileDownloadLink("download", seminar.getDocument())); uploadInfoContainer.add(new FileOpenLink("open", seminar.getDocument())); + uploadInfoContainer.add(new AjaxLink<Void>("deleteSeminarReport") { + private static final long serialVersionUID = 1L; + { + MetaDataActionStrategy.authorize(this, Roles.ADMIN); + this.add(new JavascriptEventConfirmation("onclick", "Do you really want to delete this user-uploaded report?")); + } + + @Override + public void onClick(AjaxRequestTarget target) { + try { + finalSeminarUploadController.deleteSeminarReport(seminar, true); + seminar.setDocument(null); //Only to repaint the ajax call without the document icons + info("Report deleted"); + } catch (Exception e) { + e.printStackTrace(); + error("Deletion failed"); + } + target.addComponent(FinalSeminarDetailsPanel.this); + } + }); + detailsContainer.add(uploadInfoContainer); add(detailsContainer); diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.html b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.html index e1b8c0eed1..acc47fd40b 100644 --- a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.html +++ b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.html @@ -5,6 +5,7 @@ <wicket:panel> <div class="span-22 prepend-top last"> + <div wicket:id="feedback"></div> <table class="rounded-table seminar-table even-rows"> <tr> <th>Date</th> diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java index 2132c6d34b..b8bca3392b 100644 --- a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java +++ b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java @@ -47,8 +47,8 @@ import se.su.dsv.scipro.opponent.models.OpponentModel; public class OpponentListViewPanel extends Panel { /** - * - */ + * + */ private static final long serialVersionUID = 4988253889884804250L; @SpringBean @@ -76,6 +76,10 @@ public class OpponentListViewPanel extends Panel { super(id); this.adminView = adminView; loadListView(seminarList); + feedbackPanel = new FeedbackPanel("feedback"); + add(feedbackPanel); + this.setOutputMarkupId(true); + editSeminarDialogContainer = new WebMarkupContainer("dialogContainer"); editSeminarDialog = new Dialog("dialog"); editSeminarDialog.setModal(true); @@ -96,7 +100,7 @@ public class OpponentListViewPanel extends Panel { add(contactsSeminarDialog); contactsDialogContainer.setOutputMarkupId(true); contactsDialogContainer.add(contactsSeminarForm = new ContactsSeminarForm( - "contactsSeminarForm")); + "contactsSeminarForm")); contactsSeminarForm.setOutputMarkupId(true); add(linkListView); @@ -125,7 +129,7 @@ public class OpponentListViewPanel extends Panel { User headSupervisor = seminar.getProject().getHeadSupervisor().getUser(); headSupervisorString += headSupervisor.getFirstName() + " " - + headSupervisor.getLastName(); + + headSupervisor.getLastName(); item.add(new Label("headSupervisor", headSupervisorString)); item.add(new Label("projectClass", seminar.getProject().getProjectClass().getName())); @@ -191,20 +195,25 @@ public class OpponentListViewPanel extends Panel { @Override public void onClick(AjaxRequestTarget target) { FinalSeminar seminar2 = finalSeminarDao.reLoad(seminar); - seminarUploadController.deleteSeminarFilesRecursive(seminar2); - for (FinalSeminarActiveParticipation al : seminar2 - .getActiveParticipations()) { - finalSeminarActiveParticipationDao.delete(al); - } + try{ + seminarUploadController.deleteSeminarReport(seminar2, true); + for (FinalSeminarActiveParticipation al : seminar2 + .getActiveParticipations()) { + finalSeminarActiveParticipationDao.delete(al); + } - for (FinalSeminarOpposition fso : seminar2 - .getOppositions()) { - seminarUploadController.deleteOpponentFiles(fso); - finalSeminarOppositionDao.delete(fso); + for (FinalSeminarOpposition fso : seminar2 + .getOppositions()) { + seminarUploadController.deleteOpponentFiles(fso); + finalSeminarOppositionDao.delete(fso); + } + finalSeminarDao.delete(seminar2); + info("Final seminar deleted"); + } catch (Exception e){ + error("Something went wrong, see logs for stacktrace"); + e.printStackTrace(); } - finalSeminarDao.delete(seminar2); - setResponsePage(AdminFinalSeminarPage.class); - + target.addComponent(OpponentListViewPanel.this); } @Override @@ -227,7 +236,7 @@ public class OpponentListViewPanel extends Panel { @Override public CharSequence decorateScript(CharSequence script) { String ret = "if(!confirm('The attendees of this seminar will NOT be notified that the seminar has been deleted, are you sure you wish to delete it?')) return false; " - + script; + + script; return ret; } }; @@ -243,8 +252,8 @@ public class OpponentListViewPanel extends Panel { private class EditSeminarForm extends Form<OpponentModel> { /** - * - */ + * + */ private static final long serialVersionUID = -5004827722926732419L; public EditSeminarForm(String name) { @@ -257,8 +266,8 @@ public class OpponentListViewPanel extends Panel { private class EditForm extends Form<Void> { /** - * - */ + * + */ private static final long serialVersionUID = 5882957818616996808L; public EditForm(String name, final FinalSeminar seminar) { @@ -290,8 +299,8 @@ public class OpponentListViewPanel extends Panel { private class ContactsSeminarForm extends Form<OpponentModel> { /** - * - */ + * + */ private static final long serialVersionUID = -5004827722926732419L; public ContactsSeminarForm(String name) { @@ -306,8 +315,8 @@ public class OpponentListViewPanel extends Panel { private class ContactsForm extends Form<Void> { /** - * - */ + * + */ private static final long serialVersionUID = -8271761600388217566L; public ContactsForm(String name, final FinalSeminar seminar) { @@ -316,8 +325,8 @@ public class OpponentListViewPanel extends Panel { add(new AjaxButton("contacts", new Model<String>("Details")) { /** - * - */ + * + */ private static final long serialVersionUID = 1211337464815824507L; @Override From 169df83554d987cce071b54dc72271a3e803678b Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Fri, 29 Jul 2011 13:54:43 +0200 Subject: [PATCH 14/14] Allow supervisors to view opposition reports, not only admins Change-Id: Ib089d2b7b784828fdb0ab6559ca02f4cf2b60735 --- .../dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java index 1e307a63dc..21d74e01be 100644 --- a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java +++ b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java @@ -136,7 +136,8 @@ public class FinalSeminarDetailsPanel extends Panel { return item.getModelObject().getOpponentReport() != null; } }; - MetaDataActionStrategy.authorize(oppCon, Roles.ADMIN); + //Students are not allowed to view other students opposition reports + MetaDataActionStrategy.authorize(oppCon, Roles.EMPLOYEE); item.add(oppCon); String reportTitle = ""; @@ -148,7 +149,7 @@ public class FinalSeminarDetailsPanel extends Panel { oppCon.add(new FileOpenLink("open", item.getModelObject().getOpponentReport())); oppCon.add(new AjaxLink<Void>("deleteOppositionReport"){ private static final long serialVersionUID = 1L; - { //Extra safeguard should someone later decide that the surrounding container should be visible to all + { MetaDataActionStrategy.authorize(this, Roles.ADMIN); this.add(new JavascriptEventConfirmation("onclick", "Do you really want to delete this user-uploaded report?")); }