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 }