You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2013/12/31 11:31:14 UTC
svn commit: r1554395 -
/syncope/branches/1_1_X/console/src/main/java/org/apache/syncope/console/pages/panels/AjaxDataTablePanel.java
Author: fmartelli
Date: Tue Dec 31 10:31:14 2013
New Revision: 1554395
URL: http://svn.apache.org/r1554395
Log:
Fixes SYNCOPE-465 on the branch
Modified:
syncope/branches/1_1_X/console/src/main/java/org/apache/syncope/console/pages/panels/AjaxDataTablePanel.java
Modified: syncope/branches/1_1_X/console/src/main/java/org/apache/syncope/console/pages/panels/AjaxDataTablePanel.java
URL: http://svn.apache.org/viewvc/syncope/branches/1_1_X/console/src/main/java/org/apache/syncope/console/pages/panels/AjaxDataTablePanel.java?rev=1554395&r1=1554394&r2=1554395&view=diff
==============================================================================
--- syncope/branches/1_1_X/console/src/main/java/org/apache/syncope/console/pages/panels/AjaxDataTablePanel.java (original)
+++ syncope/branches/1_1_X/console/src/main/java/org/apache/syncope/console/pages/panels/AjaxDataTablePanel.java Tue Dec 31 10:31:14 2013
@@ -20,7 +20,10 @@ package org.apache.syncope.console.pages
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import org.apache.syncope.console.commons.Constants;
import org.apache.syncope.console.pages.AbstractBasePage;
import org.apache.syncope.console.pages.BulkActionModalPage;
@@ -29,6 +32,7 @@ import org.apache.syncope.console.rest.B
import org.apache.syncope.console.wicket.ajax.markup.html.ClearIndicatingAjaxButton;
import org.apache.syncope.console.wicket.extensions.markup.html.repeater.data.table.CheckGroupColumn;
import org.apache.syncope.console.wicket.markup.html.form.ActionLink;
+import org.apache.wicket.Component;
import org.apache.wicket.Page;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -36,12 +40,15 @@ import org.apache.wicket.ajax.form.AjaxF
import org.apache.wicket.event.Broadcast;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
+import org.apache.wicket.extensions.markup.html.repeater.data.grid.DataGridView;
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.form.CheckGroup;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.IModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,13 +59,15 @@ public class AjaxDataTablePanel<T, S> ex
/**
* Logger.
*/
- private static final Logger LOG = LoggerFactory.getLogger(AjaxDataTablePanel.class);
+ protected static final Logger LOG = LoggerFactory.getLogger(AjaxDataTablePanel.class);
private final CheckGroup<T> group;
- private final Form bulkActionForm;
+ private final Form<?> bulkActionForm;
- private final AjaxFallbackDefaultDataTable<T, S> dataTable;
+ protected final AjaxFallbackDefaultDataTable<T, S> dataTable;
+
+ protected IModel<Collection<T>> model;
public AjaxDataTablePanel(
final String id,
@@ -73,6 +82,31 @@ public class AjaxDataTablePanel<T, S> ex
super(id);
+ model = new IModel<Collection<T>>() {
+
+ private static final long serialVersionUID = 4886729136344643465L;
+
+ private Collection<T> values = new HashSet<T>();
+
+ @Override
+ public Collection<T> getObject() {
+ // Someone or something call this method to change the model: this is not the right behavior.
+ // Return a copy of the model object in order to avoid SYNCOPE-465
+ return new HashSet<T>(values);
+ }
+
+ @Override
+ public void setObject(final Collection<T> selected) {
+ final Collection<T> all = getGroupModelObjects();
+ values.removeAll(all);
+ values.addAll(selected);
+ }
+
+ @Override
+ public void detach() {
+ }
+ };
+
final ModalWindow bulkModalWin = new ModalWindow("bulkModal");
bulkModalWin.setCssClassName(ModalWindow.CSS_CLASS_GRAY);
bulkModalWin.setInitialHeight(600);
@@ -111,7 +145,7 @@ public class AjaxDataTablePanel<T, S> ex
bulkActionForm = new Form("groupForm");
fragment.add(bulkActionForm);
- group = new CheckGroup<T>("checkgroup", new ArrayList<T>());
+ group = new CheckGroup<T>("checkgroup", model);
group.add(new AjaxFormChoiceComponentUpdatingBehavior() {
private static final long serialVersionUID = -151291731388673682L;
@@ -119,7 +153,6 @@ public class AjaxDataTablePanel<T, S> ex
@Override
protected void onUpdate(final AjaxRequestTarget target) {
}
-
});
bulkActionForm.add(group);
@@ -174,4 +207,19 @@ public class AjaxDataTablePanel<T, S> ex
public void setItemsPerPage(final int resourcePaginatorRows) {
dataTable.setItemsPerPage(resourcePaginatorRows);
}
+
+ protected Collection<T> getGroupModelObjects() {
+ final Set<T> res = new HashSet<T>();
+
+ final Component rows = group.get("dataTable:body:rows");
+ if (rows instanceof DataGridView) {
+ @SuppressWarnings("unchecked")
+ final Iterator<Item<T>> iter = ((DataGridView<T>) rows).getItems();
+
+ while (iter.hasNext()) {
+ res.add(iter.next().getModelObject());
+ }
+ }
+ return res;
+ }
}