/////////////////////////////////////////////////////////////////////////////
//
// 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.plugins.teamcal.dialog;
import java.sql.Timestamp;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.projectforge.plugins.teamcal.event.RecurrencyChangeType;
import org.projectforge.plugins.teamcal.event.TeamEvent;
import org.projectforge.plugins.teamcal.event.TeamEventDO;
import org.projectforge.plugins.teamcal.event.TeamEventEditPage;
import org.projectforge.web.dialog.ModalDialog;
import org.projectforge.web.wicket.components.SingleButtonPanel;
import org.projectforge.web.wicket.flowlayout.DivPanel;
import org.projectforge.web.wicket.flowlayout.DivTextPanel;
import de.micromata.wicket.ajax.AjaxCallback;
/**
* Dialog which appears, when a user tries to modify an recurrent event
*
* @author Johannes Unterstein (j.unterstein@micromata.de)
* @author M. Lauterbach (m.lauterbach@micromata.de)
* @author Kai Reinhard (k.reinhard@micromata.de)
*
*/
public class RecurrenceChangeDialog extends ModalDialog
{
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(RecurrenceChangeDialog.class);
private static final long serialVersionUID = 7266725860088619248L;
private TeamEvent event;
private Timestamp newStartDate, newEndDate;
private SingleButtonPanel allFutureEventsButtonPanel;
/**
* @param id
* @param titleModel
*/
public RecurrenceChangeDialog(final String id, final IModel<String> titleModel)
{
super(id);
setTitle(titleModel);
}
@Override
public void init()
{
setCloseButtonLabel(getString("cancel"));
final Form<Void> form = new Form<Void>(getFormId());
init(form);
final DivPanel content = gridBuilder.getPanel();
final DivTextPanel textPanel = new DivTextPanel(content.newChildId(), getString("plugins.teamcal.event.recurrence.change.content"));
content.add(textPanel);
// add all change callback
final AjaxCallback allCallback = new AjaxCallback() {
private static final long serialVersionUID = 7852511931690947544L;
@Override
public void callback(final AjaxRequestTarget target)
{
onChangeAllEventsSelected(target, event);
}
};
appendNewAjaxActionButton(allCallback, getString("plugins.teamcal.event.recurrence.change.all"));
// add future only change callback
final AjaxCallback futureCallback = new AjaxCallback() {
private static final long serialVersionUID = 7852511931690947544L;
@Override
public void callback(final AjaxRequestTarget target)
{
onChangeFutureOnlyEventsSelected(target, event);
}
};
allFutureEventsButtonPanel = appendNewAjaxActionButton(futureCallback, getString("plugins.teamcal.event.recurrence.change.future"));
// add future only change callback
final AjaxCallback singleCallback = new AjaxCallback() {
private static final long serialVersionUID = 7852511931690947544L;
@Override
public void callback(final AjaxRequestTarget target)
{
onChangeSingleEventSelected(target, event);
}
};
appendNewAjaxActionButton(singleCallback, getString("plugins.teamcal.event.recurrence.change.single"));
}
/**
* @see org.projectforge.web.dialog.ModalDialog#open(org.apache.wicket.ajax.AjaxRequestTarget)
*/
@Override
public RecurrenceChangeDialog open(final AjaxRequestTarget target)
{
log.error("Dear developer, please use open(target, eventDo).");
throw new UnsupportedOperationException();
}
public void open(final AjaxRequestTarget target, final TeamEvent event, final Timestamp newStartDate, final Timestamp newEndDate)
{
this.event = event;
this.newStartDate = newStartDate;
this.newEndDate = newEndDate;
if (event instanceof TeamEventDO) {
// All future events are the same as all events, because the user selected the first event:
allFutureEventsButtonPanel.getButton().setVisible(false);
} else {
allFutureEventsButtonPanel.getButton().setVisible(true);
}
addButtonBar(target);
super.open(target);
}
protected void onChangeAllEventsSelected(final AjaxRequestTarget target, final TeamEvent event)
{
onChangeEvents(target, event, RecurrencyChangeType.ALL);
}
protected void onChangeFutureOnlyEventsSelected(final AjaxRequestTarget target, final TeamEvent event)
{
onChangeEvents(target, event, RecurrencyChangeType.ALL_FUTURE);
}
protected void onChangeSingleEventSelected(final AjaxRequestTarget target, final TeamEvent event)
{
onChangeEvents(target, event, RecurrencyChangeType.ONLY_CURRENT);
}
private void onChangeEvents(final AjaxRequestTarget target, final TeamEvent event, final RecurrencyChangeType recurrencyChangeType) {
final TeamEventEditPage teamEventEditPage = new TeamEventEditPage(new PageParameters(), event, newStartDate, newEndDate, recurrencyChangeType);
teamEventEditPage.setReturnToPage(getWebPage());
setResponsePage(teamEventEditPage);
}
}