blob: 65de0f22f1329ebc7bd8a2c2f30057d9bde528a4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.syncope.client.console.panels;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import org.apache.syncope.client.console.commons.ActionTableCheckGroup;
import org.apache.syncope.client.ui.commons.ajax.form.IndicatorAjaxFormChoiceComponentUpdatingBehavior;
import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AjaxFallbackDataTable;
import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.CheckGroupColumn;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.ResourceModel;
public class ActionDataTablePanel<T extends Serializable, S> extends DataTablePanel<T, S> {
private static final long serialVersionUID = -8826989026203543957L;
private static final String CANCEL = "cancel";
private final Form<T> batchForm;
private final ActionsPanel<Serializable> actionPanel;
public ActionDataTablePanel(
final String id,
final List<IColumn<T, S>> columns,
final ISortableDataProvider<T, S> dataProvider,
final int rowsPerPage) {
super(id);
batchForm = new Form<>("groupForm");
add(batchForm);
group = new ActionTableCheckGroup<>("checkgroup", model) {
private static final long serialVersionUID = -8667764190925075389L;
@Override
public boolean isCheckable(final T element) {
return isElementEnabled(element);
}
};
group.add(new IndicatorAjaxFormChoiceComponentUpdatingBehavior() {
private static final long serialVersionUID = -151291731388673682L;
@Override
protected void onUpdate(final AjaxRequestTarget target) {
// triggers AJAX form submit
}
});
batchForm.add(group);
columns.add(0, new CheckGroupColumn<>(group));
dataTable = new AjaxFallbackDataTable<>("dataTable", columns, dataProvider, rowsPerPage, this);
group.add(dataTable);
final WebMarkupContainer actionPanelContainer = new WebMarkupContainer("actionPanelContainer");
batchForm.add(actionPanelContainer);
actionPanel = new ActionsPanel<>("actions", null);
actionPanelContainer.add(actionPanel);
if (dataTable.getRowCount() == 0) {
actionPanelContainer.add(new AttributeModifier("style", "display: none"));
}
batchForm.add(new IndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL)) {
private static final long serialVersionUID = -2341391430136818025L;
@Override
protected void onSubmit(final AjaxRequestTarget target) {
// ignore
}
}.setVisible(false).setEnabled(false));
}
public void addAction(final ActionLink<Serializable> action, final ActionType type, final String entitlements) {
actionPanel.add(action, type, entitlements);
}
public void addCancelButton(final BaseModal<?> modal) {
AjaxButton cancel = new IndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL)) {
private static final long serialVersionUID = -4804368561204623354L;
@Override
protected void onSubmit(final AjaxRequestTarget target) {
modal.close(target);
}
};
cancel.setDefaultFormProcessing(false);
batchForm.addOrReplace(cancel);
}
public Collection<T> getModelObject() {
return group.getModelObject();
}
public boolean isElementEnabled(final T element) {
return true;
}
}