/* * HeadsUp Agile * Copyright 2009-2013 Heads Up Development Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.headsupdev.agile.web.components; import org.apache.wicket.Component; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.Form; import org.headsupdev.agile.api.Project; import org.headsupdev.agile.api.User; import org.headsupdev.agile.storage.HibernateUtil; import org.headsupdev.agile.storage.issues.Issue; import org.headsupdev.agile.storage.issues.Milestone; import org.headsupdev.agile.web.HeadsUpPage; import org.headsupdev.agile.web.HeadsUpSession; import org.headsupdev.agile.web.components.issues.IssuePanelRow; import org.headsupdev.agile.web.components.milestones.MilestoneStatusModifier; import org.apache.wicket.PageParameters; import org.apache.wicket.markup.html.CSSPackageResource; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.Panel; import org.headsupdev.agile.web.model.UserDashboardModel; import java.util.*; /** * Sweet new dashboard for user stats (issues, milestones etc) * <p/> * Created: 11/09/2011 * * @author Andrew Williams * @since 1.0 */ public class UserDashboard extends Panel { private UserDashboardModel model; private HeadsUpPage page; private Button close; public UserDashboard( String id, HeadsUpPage page ) { super( id ); this.page = page; model = new UserDashboardModel( ( (HeadsUpSession) getSession() ).getUser() ); layout(); } public UserDashboard( String id, User user, HeadsUpPage page ) { super( id ); this.page = page; model = new UserDashboardModel( user ); layout(); } private void layout() { add( CSSPackageResource.getHeaderContribution( "resources/org.headsupdev.agile.app.milestones.Milestones/milestone.css" ) ); List<Milestone> userMilestones = model.getMilestones(); add( new ListView<Milestone>( "milestones", userMilestones ) { private Project displayed; @Override protected void populateItem( ListItem<Milestone> listItem ) { final Milestone milestone = (Milestone) HibernateUtil.getCurrentSession().load( Milestone.class, listItem.getModelObject().getInternalId() ); PageParameters params = new PageParameters(); params.add( "project", milestone.getProject().getId() ); params.add( "id", milestone.getName() ); WebMarkupContainer cell = new WebMarkupContainer( "id-cell" ); Link idLink = new BookmarkablePageLink( "id-link", page.getPageClass( "milestones/view" ), params ); idLink.add( new Label( "id-label", milestone.getName() ) ); cell.add( idLink ); listItem.add( cell ); // hide project label if we have already started listing that project's milestones Label label = new Label( "project", milestone.getProject().toString() ); listItem.add( label.setVisible( displayed == null || !displayed.equals( milestone.getProject() ) ) ); displayed = milestone.getProject(); label = new Label( "due", new FormattedDateModel( milestone.getDueDate(), ( (HeadsUpSession) getSession() ).getTimeZone() ) ); label.add( new MilestoneStatusModifier( "due", milestone ) ); listItem.add( label ); listItem.add( new ListView<Issue>( "issuelist", model.getIssuesInMilestone( milestone ) ) { protected void populateItem( ListItem<Issue> listItem ) { Issue issue = listItem.getModelObject(); listItem.add( new IssuePanelRow( "issue", issue, page, true, true, true ) ); } } ); } } ); List<Issue> noMilestone = model.getIssuesInMilestone( null ); add( new ListView<Issue>( "issuelist", noMilestone ) { private Project displayed; protected void populateItem( ListItem<Issue> listItem ) { Issue issue = listItem.getModelObject(); // hide project label if we have already started listing that project's milestones Label label = new Label( "project", issue.getProject().toString() ); listItem.add( label .setVisible( displayed == null || !displayed.equals( issue.getProject() ) )); displayed = issue.getProject(); listItem.add( new IssuePanelRow( "issue", issue, page, true, true, true ) ); } }.setVisible( noMilestone.size() > 0 ) ); Form form = new Form( "dashform" ); close = new Button( "dashclose" ); form.add( close ); add( form ); } public Component getCloseButton() { return close; } }