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    }