001 package org.hackystat.projectbrowser.page; 002 003 import java.util.Date; 004 005 import javax.xml.datatype.XMLGregorianCalendar; 006 007 import org.apache.wicket.behavior.HeaderContributor; 008 import org.apache.wicket.markup.html.WebPage; 009 import org.apache.wicket.markup.html.basic.Label; 010 import org.apache.wicket.markup.html.link.BookmarkablePageLink; 011 import org.apache.wicket.markup.html.link.Link; 012 import org.apache.wicket.model.PropertyModel; 013 import org.hackystat.projectbrowser.ProjectBrowserApplication; 014 import org.hackystat.projectbrowser.ProjectBrowserSession; 015 import org.hackystat.projectbrowser.imageurl.ImageUrl; 016 import org.hackystat.projectbrowser.page.crap.CrapPage; 017 import org.hackystat.projectbrowser.page.dailyprojectdata.DailyProjectDataPage; 018 import org.hackystat.projectbrowser.page.projectportfolio.ProjectPortfolioPage; 019 import org.hackystat.projectbrowser.page.projects.ProjectsPage; 020 import org.hackystat.projectbrowser.page.sensordata.SensorDataPage; 021 import org.hackystat.projectbrowser.page.telemetry.TelemetryPage; 022 import org.hackystat.projectbrowser.page.trajectory.TrajectoryPage; 023 import org.hackystat.utilities.tstamp.Tstamp; 024 025 /** 026 * Provides a base class with associated markup that all ProjectBrowser pages (except for signin) 027 * should inherit from. See http://wicket.apache.org/examplemarkupinheritance.html for an 028 * explanation of how this works. 029 * 030 * @author Philip Johnson 031 */ 032 public class ProjectBrowserBasePage extends WebPage { 033 034 /** Support serialization. */ 035 private static final long serialVersionUID = 1L; 036 037 /** The project name this user has selected in the ProjectDate form. */ 038 //protected String projectName = ""; 039 040 /** The date this user has selected in the ProjectDate form. */ 041 protected long date = getDateToday().getTime(); 042 043 /** The project name this user has selected. */ 044 //private Project project = null; 045 046 /** Displays text at the bottom of the screen for user information. */ 047 protected String footerFeedback = ""; 048 049 /** Date format used in date field input. */ 050 public static final String DATA_FORMAT = "yyyy-MM-dd"; 051 052 053 /** 054 * Create the ProjectBrowserBasePage. 055 */ 056 public ProjectBrowserBasePage() { 057 ProjectBrowserApplication app = (ProjectBrowserApplication)getApplication(); 058 add(HeaderContributor.forCss(org.hackystat.projectbrowser.Start.class, 059 "style/boilerplate/screen.css", "screen")); 060 add(HeaderContributor.forCss(org.hackystat.projectbrowser.Start.class, 061 "style/boilerplate/print.css", "print")); 062 add(new Label("title", app.getApplicationName())); 063 add(new ImageUrl("application-logo", app.getApplicationLogo())); 064 add(new Label("application-name", (app.hasApplicationLogo() ? "" : app.getApplicationName()))); 065 066 add(new BookmarkablePageLink("SensorDataPageLink", SensorDataPage.class)); 067 add(new BookmarkablePageLink("ProjectsPageLink", ProjectsPage.class) { 068 private static final long serialVersionUID = 1L; 069 @Override 070 public boolean isVisible() { 071 return ((ProjectBrowserApplication)getApplication()).isPageAvailable("projects"); 072 } 073 }); 074 add(new BookmarkablePageLink("DailyProjectDataPageLink", DailyProjectDataPage.class) { 075 private static final long serialVersionUID = 1L; 076 @Override 077 public boolean isVisible() { 078 return ((ProjectBrowserApplication)getApplication()).isPageAvailable("dailyprojectdata"); 079 } 080 }); 081 add(new BookmarkablePageLink("TelemetryPageLink", TelemetryPage.class) { 082 private static final long serialVersionUID = 1L; 083 @Override 084 public boolean isVisible() { 085 return ((ProjectBrowserApplication)getApplication()).isPageAvailable("telemetry"); 086 } 087 }); 088 add(new BookmarkablePageLink("ProjectPortfolioPageLink", ProjectPortfolioPage.class) { 089 private static final long serialVersionUID = 1L; 090 @Override 091 public boolean isVisible() { 092 return ((ProjectBrowserApplication)getApplication()).isPageAvailable("projectportfolio"); 093 } 094 }); 095 add(new BookmarkablePageLink("TrajectoryPageLink", TrajectoryPage.class) { 096 private static final long serialVersionUID = 1L; 097 @Override 098 public boolean isVisible() { 099 return ((ProjectBrowserApplication)getApplication()).isPageAvailable("trajectory"); 100 } 101 }); 102 add(new BookmarkablePageLink("CrapPageLink", CrapPage.class) { 103 private static final long serialVersionUID = 1L; 104 @Override 105 public boolean isVisible() { 106 return ((ProjectBrowserApplication)getApplication()).isPageAvailable("crap"); 107 } 108 }); 109 110 add(new Link("LogoutLink") { 111 /** Support serialization. */ 112 private static final long serialVersionUID = 1L; 113 /** Go to the home page after invalidating the session. */ 114 @Override 115 public void onClick() { 116 getSession().invalidate(); 117 setResponsePage(getApplication().getHomePage()); 118 } 119 }); 120 add(new Label("FooterFeedback", new PropertyModel(this, "footerFeedback"))); 121 add(new Label("UserEmail", new PropertyModel(ProjectBrowserSession.get(), "userEmail"))); 122 } 123 124 /** 125 * The action to be performed when the user has set the Project and Date fields. 126 */ 127 public void onProjectDateSubmit() { 128 // do nothing in default case. 129 } 130 131 /** 132 * make a Date that represent today, at 0:00:00. 133 * @return the Date object. 134 */ 135 public static final Date getDateToday() { 136 XMLGregorianCalendar time = Tstamp.makeTimestamp(); 137 time.setTime(0, 0, 0); 138 return time.toGregorianCalendar().getTime(); 139 } 140 141 /** 142 * Return yesterday's date. 143 * @return Yesterday. 144 */ 145 public static final Date getDateYesterday() { 146 return getDateBefore(1); 147 } 148 149 /** 150 * make a Date that represent i days ago, at 0:00:00. 151 * @param i how many day before today. 152 * @return the Date object. 153 */ 154 public static final Date getDateBefore(int i) { 155 XMLGregorianCalendar time = Tstamp.makeTimestamp(); 156 time = Tstamp.incrementDays(time, -i); 157 time.setTime(0, 0, 0); 158 return time.toGregorianCalendar().getTime(); 159 } 160 161 /** 162 * @param date the date to set 163 */ 164 public void setDate(Date date) { 165 this.date = date.getTime(); 166 } 167 168 /** 169 * @return the date 170 */ 171 public Date getDate() { 172 return new Date(); 173 } 174 }