001    package org.hackystat.projectbrowser.page.projectportfolio.inputpanel;
002    
003    import org.apache.wicket.extensions.markup.html.form.DateTextField;
004    import org.apache.wicket.extensions.yui.calendar.DatePicker;
005    import org.apache.wicket.markup.html.form.Button;
006    import org.apache.wicket.markup.html.form.CheckBoxMultipleChoice;
007    import org.apache.wicket.markup.html.form.DropDownChoice;
008    import org.apache.wicket.markup.html.form.Form;
009    import org.apache.wicket.model.PropertyModel;
010    import org.hackystat.projectbrowser.ProjectBrowserSession;
011    import org.hackystat.projectbrowser.ProjectChoiceRenderer;
012    import org.hackystat.projectbrowser.page.ProjectBrowserBasePage;
013    import org.hackystat.projectbrowser.page.projectportfolio.ProjectPortfolioPage;
014    import org.hackystat.projectbrowser.page.projectportfolio.ProjectPortfolioSession;
015    
016    /**
017     * Input panel for Project Portfolio.
018     * Including start/end date, project, granularity.
019     * @author Shaoxuan Zhang
020     */
021    public class ProjectPortfolioInputForm extends Form {
022    
023      /** Support serialization. */
024      public static final long serialVersionUID = 1L;
025      /** The page containing this form. */
026      private final ProjectPortfolioPage page;
027      /** ProjectPortfolioSession that holds page state for Project Portfolio. */
028      private ProjectPortfolioSession session = 
029        ProjectBrowserSession.get().getProjectPortfolioSession();
030    
031      /**
032       * Create this form, supplying the wicket:id.
033       * 
034       * @param id The wicket:id.
035       * @param p the page this form is attached to.
036       */
037      public ProjectPortfolioInputForm(String id, ProjectPortfolioPage p) {
038        super(id);
039        this.page = p;
040    
041        //set Project to Default if null
042        if (session.getSelectedProjects().isEmpty()) {
043          session.getSelectedProjects().add(ProjectBrowserSession.get().getDefaultProject());
044        }
045        // Now create the drop-down menu for projects. 
046        CheckBoxMultipleChoice projectMenu = 
047          new CheckBoxMultipleChoice ("projectMenu", 
048              new PropertyModel(session, "selectedProjects"),
049              new PropertyModel(ProjectBrowserSession.get(), "projectList"),
050              new ProjectChoiceRenderer()) {
051          /** Support serialization. */
052          public static final long serialVersionUID = 1L;
053          @Override
054          public boolean isEnabled() {
055            return getIsEnable();
056          }
057        };
058        projectMenu.setRequired(true);
059        add(projectMenu);
060    
061        //StartDateTextField
062        DateTextField startDateTextField = 
063          new DateTextField("startDateTextField", new PropertyModel(session, "startDate"), 
064              ProjectBrowserBasePage.DATA_FORMAT) {
065          /** Support serialization. */
066          public static final long serialVersionUID = 1L;
067          @Override
068          public boolean isEnabled() {
069            return getIsEnable();
070          }
071        };
072        startDateTextField.add(new DatePicker());
073        startDateTextField.setRequired(true);
074        add(startDateTextField);
075        
076        //EndDateTextField
077        DateTextField endDateTextField = 
078          new DateTextField("endDateTextField", new PropertyModel(session, "endDate"), 
079              ProjectBrowserBasePage.DATA_FORMAT) {
080          /** Support serialization. */
081          public static final long serialVersionUID = 1L;
082          @Override
083          public boolean isEnabled() {
084            return getIsEnable();
085          }
086        };
087        endDateTextField.add(new DatePicker());
088        endDateTextField.setRequired(true);
089        add(endDateTextField);
090        
091        //granularity
092        add(new DropDownChoice("granularity", 
093                               new PropertyModel(session, "granularity"), 
094                               session.getGranularities()) {
095          /** Support serialization. */
096          public static final long serialVersionUID = 1L;
097          @Override
098          public boolean isEnabled() {
099            return getIsEnable();
100          }
101        });
102        
103        Button configurationButton = 
104          new Button("configuration", new PropertyModel(this, "labelMessage")) {
105          /** Support serialization. */
106          private static final long serialVersionUID = 0L;
107          @Override
108          public void onSubmit() {
109            page.setConfigurationPanelVisible(!page.isConfigurationPanelVisible());
110          }
111          @Override
112          public boolean isEnabled() {
113            return getIsEnable() && !page.isConfigurationPanelVisible();
114          }
115        };
116        //configurationButton.add(new Label("label", new PropertyModel(this, "labelMessage")));
117        add(configurationButton);
118    
119        Button submitButton = new Button("submit") {
120          /** Support serialization. */
121          public static final long serialVersionUID = 1L;
122          @Override
123          public void onSubmit() {
124            if (page.isConfigurationPanelVisible()) {
125              page.setConfigurationPanelVisible(false);
126            }
127            session.updateDataModel();
128            page.onProjectDateSubmit();
129          }
130          @Override
131          public boolean isEnabled() {
132            return getIsEnable() && !page.isConfigurationPanelVisible();
133          }
134        };
135        add(submitButton);
136      }
137    
138      /**
139       * @return the configuration label message
140       */
141      public String getLabelMessage() {
142        /*
143        String labelMessage;
144        if (page.isConfigurationPanelVisible()) {
145          labelMessage = "Hide Configuration";
146        }
147        else {
148          labelMessage = "Show Configuration";
149        }
150        return labelMessage;
151        */
152        return "Show Configuration";
153      }
154      
155      /**
156       * @return true if the form is enabled.
157       */
158      protected boolean getIsEnable() {
159        return !session.getDataModel().isInProcess();
160      }
161      
162    }