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 }