001    package org.hackystat.projectbrowser.authentication;
002    
003    import java.util.ArrayList;
004    import java.util.List;
005    
006    import org.apache.wicket.behavior.HeaderContributor;
007    import org.apache.wicket.markup.html.WebPage;
008    import org.apache.wicket.markup.html.basic.Label;
009    import org.hackystat.dailyprojectdata.client.DailyProjectDataClient;
010    import org.hackystat.projectbrowser.ProjectBrowserApplication;
011    import org.hackystat.projectbrowser.imageurl.ImageUrl;
012    import org.hackystat.sensorbase.client.SensorBaseClient;
013    import org.hackystat.telemetry.service.client.TelemetryClient;
014    
015    /**
016     * Provides a signin page for either logging in with a previous username and password, or 
017     * else registering with the system. 
018     * 
019     * @author Philip Johnson
020     */
021    public class SigninPage extends WebPage {
022      
023      /** Support serialization. */
024      private static final long serialVersionUID = 1L;
025    
026      /**
027       * Create the SigninPage. 
028       */
029      public SigninPage() {
030        ProjectBrowserApplication app = (ProjectBrowserApplication)getApplication();
031        add(HeaderContributor.forCss(org.hackystat.projectbrowser.Start.class, 
032            "style/boilerplate/screen.css", "screen"));
033        add(HeaderContributor.forCss(org.hackystat.projectbrowser.Start.class, 
034            "style/boilerplate/print.css", "print"));
035        add(new Label("title", app.getApplicationName()));
036        add(new ImageUrl("application-logo", app.getApplicationLogo()));
037        add(new Label("application-name", (app.hasApplicationLogo() ? "" : app.getApplicationName())));
038        add(new SigninForm("signinForm"));
039        add(new RegisterForm("registerForm"));
040        List<String> serviceInfo = getServiceInfo();
041        add(new Label("available", serviceInfo.get(0)));
042        add(new Label("notAvailable", serviceInfo.get(1)));
043      }
044      
045      /**
046       * Returns a list containing two strings.  The first string indicates the services that 
047       * were contacted successfully.  The second string indicates the services that were not
048       * contacted successfully. 
049       * @return A list of two strings indicating service availability. 
050       */
051      private List<String> getServiceInfo() {
052        List<String> serviceInfo = new ArrayList<String>();
053        StringBuffer available = new StringBuffer(20);
054        StringBuffer notAvailable = new StringBuffer(22);
055        available.append("Available services: ");
056        notAvailable.append("Unavailable services: ");
057        
058        ProjectBrowserApplication app = (ProjectBrowserApplication)getApplication();
059        String sensorbase = app.getSensorBaseHost();
060        if (SensorBaseClient.isHost(sensorbase)) {
061          available.append(sensorbase);
062        }
063        else {
064          notAvailable.append(sensorbase);
065        }
066        String dpd = app.getDailyProjectDataHost();
067        if (DailyProjectDataClient.isHost(dpd)) {
068          available.append(' ').append(dpd);
069        }
070        else {
071          notAvailable.append(' ').append(dpd);
072        }
073        String telemetry = app.getTelemetryHost();
074        if (TelemetryClient.isHost(telemetry)) {
075          available.append(' ').append(telemetry);
076        }
077        else {
078          notAvailable.append(' ').append(telemetry);
079        }
080        String availableString = ((available.length() > 20) ?
081            available.toString() : "");
082        String notAvailableString = ((notAvailable.length() > 22) ?
083            notAvailable.toString() : "");
084            
085        serviceInfo.add(availableString);
086        serviceInfo.add(notAvailableString);
087        return serviceInfo;
088      }
089    }