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; +}