001    package org.hackystat.projectbrowser.page.telemetry;
002    
003    import org.apache.wicket.PageParameters;
004    import org.apache.wicket.ajax.AjaxRequestTarget;
005    import org.apache.wicket.markup.html.basic.MultiLineLabel;
006    import org.apache.wicket.markup.html.panel.FeedbackPanel;
007    import org.apache.wicket.model.PropertyModel;
008    import org.hackystat.projectbrowser.ProjectBrowserSession;
009    import org.hackystat.projectbrowser.page.ProjectBrowserBasePage;
010    import org.hackystat.projectbrowser.page.loadingprocesspanel.LoadingProcessPanel;
011    import org.hackystat.projectbrowser.page.telemetry.datapanel.TelemetryDataPanel;
012    import org.hackystat.projectbrowser.page.telemetry.inputpanel.TelemetryInputPanel;
013    
014    /**
015     * Provides a page with Telemetry analyses. 
016     * @author Philip Johnson
017     * @author Shaoxuan Zhang
018     */
019    public class TelemetryPage extends ProjectBrowserBasePage {
020    
021      /** Support serialization. */
022      private static final long serialVersionUID = 1L;
023      /** Telemetry session to hold up the state. */
024      private TelemetrySession session = ProjectBrowserSession.get().getTelemetrySession();
025      /** the LoadingProcessPanel in this page. */
026      private LoadingProcessPanel loadingProcessPanel;
027      /**
028       * Constructs the telemetry page without URL parameters.
029       */
030      public TelemetryPage() {
031        //session.clearParamErrorMessage();
032        add(new FeedbackPanel("feedback"));
033        
034        TelemetryInputPanel inputPanel = new TelemetryInputPanel("inputPanel", this);
035        inputPanel.setOutputMarkupId(true);
036        add(inputPanel);
037        
038        TelemetryDataPanel dataPanel = new TelemetryDataPanel("dataPanel", session);
039        dataPanel.setOutputMarkupId(true);
040        add(dataPanel);
041        
042        loadingProcessPanel = new LoadingProcessPanel("loadingProcessPanel", session.getDataModel()) {
043          /** Support serialization. */
044          private static final long serialVersionUID = 1L;
045          @Override
046          protected void onFinished(AjaxRequestTarget target) {
047            setResponsePage(TelemetryPage.class);
048          }
049        };
050        loadingProcessPanel.setOutputMarkupId(true);
051        add(loadingProcessPanel);
052        
053        this.get("FooterFeedback").setModel(new PropertyModel(session, "feedback"));
054        this.get("FooterFeedback").setOutputMarkupId(true);
055        
056        add(new MultiLineLabel("paramErrorMessage", new PropertyModel(session, "paramErrorMessage")));
057      }
058    
059      /**
060       * Constructs the telemetry page. 
061       * @param parameters the parameters from URL request.
062       */
063      public TelemetryPage(PageParameters parameters) {
064        this();
065        boolean isLoadSucceed = session.loadPageParameters(parameters);
066    
067        if (isLoadSucceed) {
068          session.updateDataModel();
069          loadingProcessPanel.start();
070        }
071      }
072      
073      /**
074       * The action to be performed when the user has set the Project and Date fields. 
075       */
076      @Override
077      public void onProjectDateSubmit() {
078        loadingProcessPanel.start();
079        setResponsePage(TelemetryPage.class);
080      }
081    }