001 package org.hackystat.projectbrowser.page.dailyprojectdata; 002 003 import org.apache.wicket.PageParameters; 004 import org.apache.wicket.behavior.HeaderContributor; 005 import org.apache.wicket.markup.html.basic.MultiLineLabel; 006 import org.apache.wicket.markup.html.link.BookmarkablePageLink; 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.dailyprojectdata.build.BuildPanel; 011 import org.hackystat.projectbrowser.page.dailyprojectdata.commit.CommitPanel; 012 import org.hackystat.projectbrowser.page.dailyprojectdata.complexity.ComplexityPanel; 013 import org.hackystat.projectbrowser.page.dailyprojectdata.coupling.CouplingPanel; 014 import org.hackystat.projectbrowser.page.dailyprojectdata.coverage.CoveragePanel; 015 import org.hackystat.projectbrowser.page.dailyprojectdata.devtime.DevTimePanel; 016 import org.hackystat.projectbrowser.page.dailyprojectdata.filemetric.FileMetricPanel; 017 import org.hackystat.projectbrowser.page.dailyprojectdata.inputpanel.DpdInputPanel; 018 import org.hackystat.projectbrowser.page.dailyprojectdata.issue.IssuePanel; 019 import org.hackystat.projectbrowser.page.dailyprojectdata.unittest.UnitTestPanel; 020 021 /** 022 * Provides a page with DailyProjectData analysis. 023 * @author Philip Johnson 024 * @author Shaoxuan Zhang 025 */ 026 public class DailyProjectDataPage extends ProjectBrowserBasePage { 027 028 /** Support serialization. */ 029 private static final long serialVersionUID = 1L; 030 /** Daily project data session to hold the state. */ 031 private DailyProjectDataSession session = 032 ProjectBrowserSession.get().getDailyProjectDataSession(); 033 /** The wicket id for the input panel. */ 034 private static final String dpdInputPanelId = "dpdInputPanel"; 035 /** The wicket id for the data panel. */ 036 private static final String dpdDataPanelId = "dpdDataPanel"; 037 038 /** 039 * Creates the DPD page. 040 */ 041 public DailyProjectDataPage() { 042 043 add(HeaderContributor.forCss( 044 org.hackystat.projectbrowser.page.dailyprojectdata.DailyProjectDataPage.class, 045 "dailyprojectdata.css")); 046 add(new DpdInputPanel(dpdInputPanelId, this)); 047 if ("Coverage".equals(session.getAnalysis())) { 048 add(new CoveragePanel(dpdDataPanelId)); 049 } 050 else if ("UnitTest".equals(session.getAnalysis())) { 051 add(new UnitTestPanel(dpdDataPanelId)); 052 } 053 else if ("Coupling".equals(session.getAnalysis())) { 054 add(new CouplingPanel(dpdDataPanelId)); 055 } 056 else if ("Complexity".equals(session.getAnalysis())) { 057 add(new ComplexityPanel(dpdDataPanelId)); 058 } 059 else if ("Build".equals(session.getAnalysis())) { 060 add(new BuildPanel(dpdDataPanelId)); 061 } 062 else if ("DevTime".equals(session.getAnalysis())) { 063 add(new DevTimePanel(dpdDataPanelId)); 064 } 065 else if ("FileMetric".equals(session.getAnalysis())) { 066 add(new FileMetricPanel(dpdDataPanelId)); 067 } 068 else if ("Commit".equals(session.getAnalysis())) { 069 add(new CommitPanel(dpdDataPanelId)); 070 } 071 else if ("Issue".equals(session.getAnalysis())) { 072 add(new IssuePanel(dpdDataPanelId)); 073 } 074 075 BookmarkablePageLink restLink = new BookmarkablePageLink("restLink", DailyProjectDataPage.class, 076 session.getPageParameters()); 077 restLink.setVisible(false); 078 //add(restLink); 079 080 add(new MultiLineLabel("paramErrorMessage", new PropertyModel(session, "paramErrorMessage"))); 081 082 this.get("FooterFeedback").setModel(new PropertyModel(session, "feedback")); 083 } 084 085 /** 086 * Constructs the telemetry page. 087 * @param parameters the parameters from URL request. 088 */ 089 public DailyProjectDataPage(PageParameters parameters) { 090 this(); 091 boolean isLoadSucceed = session.loadPageParameters(parameters); 092 093 if (isLoadSucceed) { 094 updateDataPanel(); 095 } 096 } 097 098 /** 099 * Update the data panel. 100 * We will (1) clear all of our data models; (2) update the appropriate data model based upon 101 * the user's settings; and (3) set the data panel. 102 */ 103 private void updateDataPanel() { 104 // Get rid of all prior state. 105 session.clearDataModels(); 106 // Update a single model depending upon the user's settings. 107 if ("Coverage".equals(session.getAnalysis())) { 108 session.getCoverageDataModel().update(); 109 this.replace(new CoveragePanel(dpdDataPanelId)); 110 } 111 else if ("UnitTest".equals(session.getAnalysis())) { 112 session.getUnitTestDataModel().update(); 113 this.replace(new UnitTestPanel(dpdDataPanelId)); 114 } 115 else if ("Coupling".equals(session.getAnalysis())) { 116 session.getCouplingDataModel().update(); 117 this.replace(new CouplingPanel(dpdDataPanelId)); 118 } 119 else if ("Complexity".equals(session.getAnalysis())) { 120 session.getComplexityDataModel().update(); 121 this.replace(new ComplexityPanel(dpdDataPanelId)); 122 } 123 else if ("Build".equals(session.getAnalysis())) { 124 session.getBuildDataModel().update(); 125 this.replace(new BuildPanel(dpdDataPanelId)); 126 } 127 else if ("DevTime".equals(session.getAnalysis())) { 128 session.getDevTimeDataModel().update(); 129 this.replace(new DevTimePanel(dpdDataPanelId)); 130 } 131 else if ("FileMetric".equals(session.getAnalysis())) { 132 session.getFileMetricDataModel().update(); 133 this.replace(new FileMetricPanel(dpdDataPanelId)); 134 } 135 else if ("Commit".equals(session.getAnalysis())) { 136 session.getCommitDataModel().update(); 137 this.replace(new CommitPanel(dpdDataPanelId)); 138 } 139 else if ("Issue".equals(session.getAnalysis())) { 140 session.getIssueDataModel().update(); 141 this.replace(new IssuePanel(dpdDataPanelId)); 142 } 143 /* 144 this.replace(new BookmarkablePageLink("restLink", DailyProjectDataPage.class, 145 session.getPageParameters())); 146 */ 147 } 148 149 /** 150 * The action to be performed when the user has set the Project and Date fields. 151 */ 152 @Override 153 public void onProjectDateSubmit() { 154 this.updateDataPanel(); 155 } 156 }