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    }