/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
// www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////
package org.projectforge.web.calendar;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.joda.time.DateMidnight;
import org.projectforge.user.PFUserDO;
import org.projectforge.user.UserDao;
import org.projectforge.user.UserGroupCache;
import org.projectforge.web.wicket.AbstractStandardForm;
import org.projectforge.web.wicket.WicketUtils;
import org.projectforge.web.wicket.bootstrap.GridBuilder;
import org.projectforge.web.wicket.bootstrap.GridSize;
import org.projectforge.web.wicket.components.DateTimePanel;
import org.projectforge.web.wicket.components.JodaDatePanel;
import org.projectforge.web.wicket.flowlayout.ButtonGroupPanel;
import org.projectforge.web.wicket.flowlayout.CheckBoxButton;
import org.projectforge.web.wicket.flowlayout.DivPanel;
import org.projectforge.web.wicket.flowlayout.DivTextPanel;
import org.projectforge.web.wicket.flowlayout.FieldsetPanel;
import org.projectforge.web.wicket.flowlayout.IconButtonPanel;
import org.projectforge.web.wicket.flowlayout.IconType;
public class CalendarForm extends AbstractStandardForm<CalendarFilter, CalendarPage>
{
private static final long serialVersionUID = -145923669780937370L;
@SpringBean(name = "userGroupCache")
private UserGroupCache userGroupCache;
@SpringBean(name = "userDao")
protected UserDao userDao;
protected ICalendarFilter filter;
private JodaDatePanel currentDatePanel;
private Label durationLabel;
protected ButtonGroupPanel buttonGroupPanel;
protected FieldsetPanel fieldset;
protected CalendarPageSupport createCalendarPageSupport()
{
final CalendarPageSupport calendarPageSupport = new CalendarPageSupport(parentPage);
return calendarPageSupport;
}
@SuppressWarnings("serial")
@Override
protected void init()
{
super.init();
gridBuilder.newSplitPanel(GridSize.SPAN8);
fieldset = gridBuilder.newFieldset(getString("label.options"));
final CalendarPageSupport calendarPageSupport = createCalendarPageSupport();
calendarPageSupport.addUserSelectPanel(fieldset, new PropertyModel<PFUserDO>(this, "timesheetsUser"), true);
currentDatePanel = new JodaDatePanel(fieldset.newChildId(), new PropertyModel<DateMidnight>(filter, "startDate")).setAutosubmit(true);
currentDatePanel.getDateField().setOutputMarkupId(true);
fieldset.add(currentDatePanel);
final DropDownChoice<Integer> firstHourDropDownChoice = new DropDownChoice<Integer>(fieldset.getDropDownChoiceId(),
new PropertyModel<Integer>(filter, "firstHour"), DateTimePanel.getHourOfDayRenderer().getValues(),
DateTimePanel.getHourOfDayRenderer()) {
/**
* @see org.apache.wicket.markup.html.form.DropDownChoice#wantOnSelectionChangedNotifications()
*/
@Override
protected boolean wantOnSelectionChangedNotifications()
{
return true;
}
};
firstHourDropDownChoice.setNullValid(false);
firstHourDropDownChoice.setRequired(true);
WicketUtils.addTooltip(firstHourDropDownChoice, getString("calendar.option.firstHour.tooltip"));
fieldset.add(firstHourDropDownChoice);
final DivPanel checkBoxPanel = fieldset.addNewCheckBoxButtonDiv();
calendarPageSupport.addOptions(checkBoxPanel, true, filter);
checkBoxPanel.add(new CheckBoxButton(checkBoxPanel.newChildId(), new PropertyModel<Boolean>(filter, "slot30"),
getString("calendar.option.slot30"), true).setTooltip(getString("calendar.option.slot30.tooltip")));
buttonGroupPanel = new ButtonGroupPanel(fieldset.newChildId());
fieldset.add(buttonGroupPanel);
{
final IconButtonPanel refreshButtonPanel = new IconButtonPanel(buttonGroupPanel.newChildId(), IconType.REFRESH,
getRefreshIconTooltip()) {
/**
* @see org.projectforge.web.wicket.flowlayout.IconButtonPanel#onSubmit()
*/
@Override
protected void onSubmit()
{
parentPage.refresh();
setResponsePage(getPage().getClass(), getPage().getPageParameters());
}
};
buttonGroupPanel.addButton(refreshButtonPanel);
setDefaultButton(refreshButtonPanel.getButton());
}
gridBuilder.newSplitPanel(GridSize.SPAN4);
final FieldsetPanel fs = gridBuilder.newFieldset(getString("timesheet.duration")).suppressLabelForWarning();
final DivTextPanel durationPanel = new DivTextPanel(fs.newChildId(), new Label(DivTextPanel.WICKET_ID, new Model<String>() {
@Override
public String getObject()
{
return parentPage.calendarPanel.getTotalTimesheetDuration();
}
}));
durationLabel = durationPanel.getLabel4Ajax();
fs.add(durationPanel);
onAfterInit(gridBuilder);
}
protected String getRefreshIconTooltip()
{
return getString("refresh");
}
/**
* Hook method where child implementations could place their logic
*
* @param gridBuilder
*/
protected void onAfterInit(final GridBuilder gridBuilder)
{
// by default nothing happens here
}
public CalendarForm(final CalendarPage parentPage)
{
super(parentPage);
}
public ICalendarFilter getFilter()
{
return filter;
}
protected void setFilter(final ICalendarFilter filter)
{
this.filter = filter;
}
public PFUserDO getTimesheetsUser()
{
final Integer userId = getFilter().getTimesheetUserId();
return userId != null ? userGroupCache.getUser(userId) : null;
}
public void setTimesheetsUser(final PFUserDO user)
{
if (user == null) {
getFilter().setTimesheetUserId(null);
} else {
getFilter().setTimesheetUserId(user.getId());
}
}
/**
* @return the currentDatePanel
*/
public JodaDatePanel getCurrentDatePanel()
{
return currentDatePanel;
}
/**
* @return the durationLabel
*/
public Label getDurationLabel()
{
return durationLabel;
}
}