001 package org.hackystat.projectbrowser.page.projectportfolio; 002 003 import org.apache.wicket.PageParameters; 004 import org.apache.wicket.ajax.AjaxRequestTarget; 005 import org.apache.wicket.behavior.HeaderContributor; 006 import org.apache.wicket.markup.html.basic.MultiLineLabel; 007 import org.apache.wicket.markup.html.panel.FeedbackPanel; 008 import org.apache.wicket.model.PropertyModel; 009 import org.hackystat.projectbrowser.ProjectBrowserSession; 010 import org.hackystat.projectbrowser.page.ProjectBrowserBasePage; 011 import org.hackystat.projectbrowser.page.loadingprocesspanel.LoadingProcessPanel; 012 import org.hackystat.projectbrowser.page.projectportfolio.configurationpanel. 013 ProjectPortfolioConfigurationPanel; 014 import org.hackystat.projectbrowser.page.projectportfolio.detailspanel.ProjectPortfolioDetailsPanel; 015 import org.hackystat.projectbrowser.page.projectportfolio.inputpanel.ProjectPortfolioInputPanel; 016 017 /** 018 * Provides a page with Project Portfolio. 019 * @author Shaoxuan Zhang 020 */ 021 public class ProjectPortfolioPage extends ProjectBrowserBasePage { 022 023 /** For serialization. */ 024 private static final long serialVersionUID = 1L; 025 /** ProjectPortfolio session to hold up the state. */ 026 private ProjectPortfolioSession session = 027 ProjectBrowserSession.get().getProjectPortfolioSession(); 028 /** the LoadingProcessPanel in this page. */ 029 private LoadingProcessPanel loadingProcessPanel; 030 /** the ProjectPortfolioConfigurationPanel in this page. */ 031 private ProjectPortfolioConfigurationPanel configurationPanel; 032 033 /** 034 * Construct the page. 035 */ 036 public ProjectPortfolioPage () { 037 super(); 038 //[0] add portfolio specified css. 039 add(HeaderContributor.forCss(ProjectPortfolioPage.class, "portfolio.css")); 040 041 add(new FeedbackPanel("feedback")); 042 043 session.initializeDataModel(); 044 045 configurationPanel = new ProjectPortfolioConfigurationPanel("configurationPanel", 046 session.getDataModel()); 047 configurationPanel.setOutputMarkupId(true); 048 configurationPanel.setVisible(false); 049 add(configurationPanel); 050 051 ProjectPortfolioInputPanel inputPanel = new ProjectPortfolioInputPanel("inputPanel", this); 052 inputPanel.setOutputMarkupId(true); 053 add(inputPanel); 054 055 ProjectPortfolioDetailsPanel detailsPanel = new ProjectPortfolioDetailsPanel("detailPanel"); 056 detailsPanel.setOutputMarkupId(true); 057 add(detailsPanel); 058 059 loadingProcessPanel = new LoadingProcessPanel("loadingProcessPanel", session.getDataModel()) { 060 /** Support serialization. */ 061 private static final long serialVersionUID = 1L; 062 @Override 063 protected void onFinished(AjaxRequestTarget target) { 064 setResponsePage(ProjectPortfolioPage.class); 065 } 066 }; 067 loadingProcessPanel.setOutputMarkupId(true); 068 add(loadingProcessPanel); 069 070 071 this.get("FooterFeedback").setModel(new PropertyModel(session, "feedback")); 072 this.get("FooterFeedback").setOutputMarkupId(true); 073 074 add(new MultiLineLabel("paramErrorMessage", new PropertyModel(session, "paramErrorMessage"))); 075 } 076 077 /** 078 * Constructs the telemetry page. 079 * @param parameters the parameters from URL request. 080 */ 081 public ProjectPortfolioPage(PageParameters parameters) { 082 this(); 083 boolean isLoadSucceed = session.loadPageParameters(parameters); 084 085 if (isLoadSucceed) { 086 session.updateDataModel(); 087 loadingProcessPanel.start(); 088 } 089 } 090 091 /** 092 * @return true if ConfigurationPanel is visible. 093 */ 094 public boolean isConfigurationPanelVisible() { 095 return configurationPanel.isVisible(); 096 } 097 098 /** 099 * @param visible the visible boolean to set. 100 */ 101 public void setConfigurationPanelVisible(boolean visible) { 102 configurationPanel.setVisible(visible); 103 } 104 105 /** 106 * The action to be performed when the user has set the Project and Date fields. 107 */ 108 @Override 109 public void onProjectDateSubmit() { 110 loadingProcessPanel.start(); 111 setResponsePage(ProjectPortfolioPage.class); 112 } 113 }