001    package org.hackystat.projectbrowser.page.trajectory;
002    
003    import java.util.logging.Logger;
004    
005    import org.apache.wicket.Application;
006    import org.apache.wicket.PageParameters;
007    import org.apache.wicket.ajax.AjaxRequestTarget;
008    import org.apache.wicket.behavior.HeaderContributor;
009    import org.apache.wicket.markup.html.basic.MultiLineLabel;
010    import org.apache.wicket.model.PropertyModel;
011    import org.hackystat.projectbrowser.ProjectBrowserApplication;
012    import org.hackystat.projectbrowser.ProjectBrowserSession;
013    import org.hackystat.projectbrowser.page.ProjectBrowserBasePage;
014    import org.hackystat.projectbrowser.page.loadingprocesspanel.LoadingProcessPanel;
015    import org.hackystat.projectbrowser.page.trajectory.datapanel.TrajectoryDataPanel;
016    import org.hackystat.projectbrowser.page.trajectory.dtwpanel.datapanel.TrajectoryDTWDataPanel;
017    import org.hackystat.projectbrowser.page.trajectory.dtwpanel.inputpanel.TrajectoryDTWInputPanel;
018    import org.hackystat.projectbrowser.page.trajectory.inputpanel.TrajectoryInputPanel;
019    
020    /**
021     * Provides a page with Trajectory analyzes.
022     * 
023     * @author Pavel Senin, Philip Johnson, Shaoxuan Zhang
024     * 
025     * 
026     */
027    public class TrajectoryPage extends ProjectBrowserBasePage {
028    
029      /** Support serialization. */
030      private static final long serialVersionUID = 1L;
031      /** Trajectory session to hold up the state. */
032      private TrajectorySession session = ProjectBrowserSession.get().getTrajectorySession();
033      /** the TelemetryInputPanel in this page. */
034      private TrajectoryInputPanel inputPanel;
035      /** the TelemetryDataPanel in this page. */
036      private TrajectoryDataPanel dataPanel;
037      /** the LoadingProcessPanel in this page. */
038      private LoadingProcessPanel loadingProcessPanel;
039    
040      // Some string constants used while logging
041      //
042      private static final String MARK = "[DEBUG] ";
043    
044      /**
045       * Constructs the telemetry page without URL parameters.
046       */
047      public TrajectoryPage() {
048        getLogger().info(MARK + "Trajectory page constructor invoked, hash: " + this.hashCode());
049        
050        add(HeaderContributor.forCss(
051            org.hackystat.projectbrowser.page.trajectory.TrajectoryPage.class, 
052            "trajectorypage.css"));
053        
054        inputPanel = new TrajectoryInputPanel("inputPanel", this);
055        inputPanel.setOutputMarkupId(true);
056        add(inputPanel);
057    
058        dataPanel = new TrajectoryDataPanel("dataPanel", this);
059        dataPanel.setOutputMarkupId(true);
060        add(dataPanel);
061    
062        loadingProcessPanel = new LoadingProcessPanel("loadingProcessPanel", session.getDataModel()) {
063          /** Support serialization. */
064          private static final long serialVersionUID = 1L;
065    
066          @Override
067          protected void onFinished(AjaxRequestTarget target) {
068            setResponsePage(TrajectoryPage.class);
069          }
070        };
071        loadingProcessPanel.setOutputMarkupId(true);
072        add(loadingProcessPanel);
073    
074        this.get("FooterFeedback").setModel(new PropertyModel(session, "feedback"));
075        this.get("FooterFeedback").setOutputMarkupId(true);
076    
077        add(new MultiLineLabel("paramErrorMessage", new PropertyModel(session, "paramErrorMessage")));
078      }
079    
080      /**
081       * Constructs the telemetry page.
082       * 
083       * @param parameters the parameters from URL request.
084       */
085      public TrajectoryPage(PageParameters parameters) {
086        this();
087    
088        boolean isLoadSucceed = session.loadPageParameters(parameters);
089    
090        if (isLoadSucceed) {
091          session.updateDataModel();
092          loadingProcessPanel.start();
093        }
094      }
095    
096      /**
097       * The action to be performed when the user has set the Project and Date fields.
098       */
099      @Override
100      public void onProjectDateSubmit() {
101        loadingProcessPanel.start();
102        // setResponsePage(TelemetryPage.class, session.getPageParameters());
103      }
104    
105      /**
106       * @return the logger that associated to this web application.
107       */
108      private Logger getLogger() {
109        return ((ProjectBrowserApplication) Application.get()).getLogger();
110      }
111    
112      /**
113       * Starts the DTW dialog.
114       */
115      public void goDTW() {
116        TrajectoryDTWInputPanel dtwInputPanel = new TrajectoryDTWInputPanel("inputPanel", this);
117        dtwInputPanel.setOutputMarkupId(true);
118    
119        TrajectoryDTWDataPanel dtwDataPanel = new TrajectoryDTWDataPanel("dataPanel", this);
120        dtwDataPanel.setOutputMarkupId(true);
121    
122        remove(inputPanel);
123        add(dtwInputPanel);
124    
125        remove(dataPanel);
126        add(dtwDataPanel);
127    
128      }
129    }