Merge branch 'develop' into unit_testing
* develop: Redesigned UpcomingEventsPanel daily commit Worked on some design for edit levels in admin pages Removed unused line Fixed bug where message Already exists was shown when editing Added info printing and a duplicate check when creating a new project class Added a undelete function in admin projectclass settings Added panels in for editing and deleting panels Added new page Level settings to Admin->Settings page. Used to add/edit project classes
This commit is contained in:
commit
0593938ade
src/main
java/se/su/dsv/scipro
webapp
@ -10,9 +10,10 @@ 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.admin.pages.settings.AdminServerEnvironmentSettingsPage;
|
||||
|
||||
import se.su.dsv.scipro.components.AbstractMenuPanel;
|
||||
import se.su.dsv.scipro.icons.ImageIcon;
|
||||
import se.su.dsv.scipro.security.auth.Authorization;
|
||||
import se.su.dsv.scipro.security.auth.roles.Roles;
|
||||
|
||||
@ -32,8 +33,10 @@ public abstract class AbstractAdminSettingsPage extends AbstractAdminPage {
|
||||
items.add(new MenuItem("General settings", AdminGeneralSettingsPage.class));
|
||||
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("Peer settings", AdminPeerSettingsPage.class /*,ImageIcon.ICON_SETTINGS */));
|
||||
items.add(new MenuItem("Final seminar project level settings", AdminFinalSeminarSettingsPerProjectClassPage.class));
|
||||
items.add(new MenuItem("Level settings", AdminPeerSettingsPage.class));
|
||||
items.add(new MenuItem("Edit levels", AdminProjectClassSettingsPage.class));
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
|
60
src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html
Normal file
60
src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.html
Normal file
@ -0,0 +1,60 @@
|
||||
<!DOCTYPE html>
|
||||
<html
|
||||
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>
|
||||
|
||||
<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>
|
||||
<th>Description</th>
|
||||
<th>Edit</th>
|
||||
</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"><img src="images/icons/edit_16x16.png" " alt="Edit" title="Edit"/></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="span-15 last">
|
||||
<h3 class="section">Inactive</h3>
|
||||
</div>
|
||||
<table class="rounded-table-top">
|
||||
<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">Activate</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</wicket:extend>
|
||||
</body>
|
||||
</html>
|
154
src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java
Normal file
154
src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminProjectClassSettingsPage.java
Normal file
@ -0,0 +1,154 @@
|
||||
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;
|
||||
|
||||
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);
|
||||
|
||||
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);
|
||||
dialog.add(new EmptyPanel("dialogContent"));
|
||||
|
||||
dialog.setWidth(500);
|
||||
dialog.setHeight(360);
|
||||
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 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;
|
||||
|
||||
@Override
|
||||
protected void populateItem(ListItem<ProjectClass> item) {
|
||||
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);
|
||||
}
|
||||
|
||||
};
|
||||
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);
|
||||
info("Level activated");
|
||||
}
|
||||
};
|
||||
item.add(undeleteLink);
|
||||
}
|
||||
|
||||
};
|
||||
deletedWmc.add(listViewDeleted);
|
||||
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
<!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="50" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Name: <input wicket:id="name" type="text" maxlength="50" />
|
||||
</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="Save" />
|
||||
</td>
|
||||
<td><input wicket:id="deleteButton" type="submit"
|
||||
value="Inactivate" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
</wicket:panel>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,98 @@
|
||||
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;
|
||||
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(final String id) {
|
||||
super(id);
|
||||
|
||||
Model<ProjectClass> model = new Model<ProjectClass>(new ProjectClass());
|
||||
add(new ProjectClassSettingsForm("projectClassForm", model, false));
|
||||
}
|
||||
|
||||
public AdminProjectClassPanel(String id, IModel<ProjectClass> model) {
|
||||
super(id);
|
||||
|
||||
add(new ProjectClassSettingsForm("projectClassForm", model, true));
|
||||
}
|
||||
|
||||
private class ProjectClassSettingsForm extends Form<Void>{
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
IModel<ProjectClass> projectClassModel;
|
||||
|
||||
public ProjectClassSettingsForm(String id, final IModel<ProjectClass> model, final boolean editMode) {
|
||||
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(){
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
};
|
||||
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());
|
||||
pp.add("info", "Level inactivated");
|
||||
setResponsePage(AdminProjectClassSettingsPage.class, pp);
|
||||
}
|
||||
};
|
||||
add(deleteButton);
|
||||
deleteButton.setEnabled(editMode);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
|
||||
}
|
||||
|
@ -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){
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,45 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
|
||||
<body>
|
||||
<wicket:panel>
|
||||
<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>
|
||||
<a href="#" wicket:id="eventPageLink"><span wicket:id="statusIcon"></span></a>
|
||||
</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>
|
@ -0,0 +1,186 @@
|
||||
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.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.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 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);
|
||||
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();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
eventPageLink.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();
|
||||
}
|
@ -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
|
||||
|
@ -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>
|
||||
|
||||
|
||||
|
@ -1042,4 +1042,14 @@ div.wicket-aa ul li.selected {
|
||||
background-color: #dedeff;
|
||||
padding: 0px;
|
||||
margin:0;
|
||||
}
|
||||
}
|
||||
|
||||
.month{
|
||||
font-size: 1em;
|
||||
font-style: strong;
|
||||
}
|
||||
|
||||
.event-title{
|
||||
font-size: 1.4em;
|
||||
font-style: strong;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user