/////////////////////////////////////////////////////////////////////////////
//
// 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.wicket;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.projectforge.common.ReflectionHelper;
import org.projectforge.web.fibu.ISelectCallerPage;
import org.projectforge.web.wicket.components.PlainLabel;
/**
* Panel for selecting list page entries for editing and selecting for callers.
* @author Kai Reinhard (k.reinhard@micromata.de)
*
*/
@SuppressWarnings("serial")
public class ListSelectActionPanel extends Panel
{
public static final String LABEL_ID = "label";
public static final String LINK_ID = "select";
/**
* Constructor for list view in selection mode.
* @param id component id
* @param model model for contact
* @param caller The calling page.
* @param selectProperty The property (name) of the caller to select.
* @param objectId The id of the object to select on click.
* @param label The label string to show (additional to the row_pointer.png).
*/
public ListSelectActionPanel(final String id, final IModel< ? > model, final ISelectCallerPage caller, final String selectProperty,
final Integer objectId, final String label)
{
this(id, model, caller, selectProperty, objectId, new PlainLabel(LABEL_ID, label));
}
/**
* Constructor for list view in selection mode.
* @param id component id
* @param model model for contact
* @param caller The calling page.
* @param selectProperty The property (name) of the caller to select.
* @param objectId The id of the object to select on click.
* @param label The label to show (additional to the row_pointer.png). The id of the label should be LABEL_ID.
*/
public ListSelectActionPanel(final String id, final IModel< ? > model, final ISelectCallerPage caller, final String selectProperty,
final Integer objectId, final Label label)
{
super(id, model);
setRenderBodyOnly(true);
final Link< ? > link = new Link<Void>("select") {
@Override
public void onClick()
{
WicketUtils.setResponsePage(this, caller);
caller.select(selectProperty, objectId);
};
};
add(link);
add(label);
}
/**
* Constructor for normal list view for selecting one entry to edit.
* @param id component id
* @param model model for contact
* @param editClass The edit page to redirect to.
* @param objectId The id of the object to edit in edit page.
* @param label The label string to show (additional to the row_pointer.png).
* @param params Pairs of params (key, value).
* @see WicketUtils#getPageParameters(String[])
*/
public ListSelectActionPanel(final String id, final IModel< ? > model, final Class< ? extends WebPage> editClass, final Integer objectId,
final WebPage returnToPage, final String label, final String... params)
{
this(id, model, editClass, objectId, returnToPage, new PlainLabel(LABEL_ID, label), params);
}
/**
* Constructor for normal list view for selecting one entry to edit.
* @param id component id
* @param model model for contact
* @param editPageClass The edit page to redirect to.
* @param objectId The id of the object to edit in edit page.
* @param label The label to show (additional to the row_pointer.png). The id of the label should be LABEL_ID.
* @param params Pairs of params (key, value).
* @see WicketUtils#getPageParameters(String[])
*/
public ListSelectActionPanel(final String id, final IModel< ? > model, final Class< ? extends WebPage> editPageClass,
final Integer objectId, final WebPage returnToPage, final Label label, final String... params)
{
super(id, model);
setRenderBodyOnly(true);
final Link< ? > link = new Link<Void>(LINK_ID) {
@Override
public void onClick()
{
final PageParameters pageParams = WicketUtils.getPageParameters(params);
if (objectId != null) {
pageParams.add(AbstractEditPage.PARAMETER_KEY_ID, String.valueOf(objectId));
}
final AbstractSecuredPage editPage = (AbstractSecuredPage) ReflectionHelper.newInstance(editPageClass, PageParameters.class,
pageParams);
if (editPage instanceof AbstractEditPage) {
((AbstractEditPage< ? , ? , ? >) editPage).setReturnToPage(returnToPage);
}
setResponsePage(editPage);
};
};
add(link);
add(label);
}
public ListSelectActionPanel(final String id, final AbstractLink link, final Model<String> label)
{
this(id, link, new Label(LABEL_ID, label));
}
public ListSelectActionPanel(final String id, final AbstractLink link, final Label label)
{
super(id);
add(link);
add(label);
}
}