[SYNCOPE-156] removed every reference to the oldest modal mechanisms
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/1e15b05e Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/1e15b05e Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/1e15b05e Branch: refs/heads/SYNCOPE-156 Commit: 1e15b05e3e3dafa4436edbb6f2585dc68aa855f6 Parents: 2a7cf5a Author: fmartelli <[email protected]> Authored: Thu Oct 1 11:33:23 2015 +0200 Committer: fmartelli <[email protected]> Committed: Thu Oct 1 11:33:23 2015 +0200 ---------------------------------------------------------------------- .../commons/status/ConnObjectWrapper.java | 4 +- .../console/commons/status/StatusBean.java | 3 +- .../console/pages/AbstractStatusModalPage.java | 8 +- .../pages/AnyDisplayAttributesModalPage.java | 15 +- .../client/console/pages/BaseModalPage.java | 63 --- .../console/pages/BulkActionModalPage.java | 23 +- .../pages/BulkActionResultModalPage.java | 13 +- .../pages/DisplayAttributesModalPage.java | 25 +- .../pages/GroupDisplayAttributesModalPage.java | 11 +- .../console/pages/ProvisioningModalPage.java | 27 +- .../client/console/pages/ResultStatusModal.java | 428 +++++++++++++++++++ .../client/console/pages/StatusModalPage.java | 85 ++-- .../pages/UserDisplayAttributesModalPage.java | 13 +- .../panels/AbstractSearchResultPanel.java | 78 +--- .../console/panels/ActionDataTablePanel.java | 6 +- .../console/panels/AjaxDataTablePanel.java | 37 +- .../console/panels/AnySearchResultPanel.java | 82 ++-- .../console/panels/GroupSearchResultPanel.java | 79 ++-- .../client/console/panels/ImagePanel.java | 4 +- .../console/panels/UserSearchResultPanel.java | 102 ++--- .../console/rest/AbstractAnyRestClient.java | 11 + .../console/rest/AnyObjectRestClient.java | 11 +- .../client/console/rest/BaseRestClient.java | 1 - .../client/console/rest/GroupRestClient.java | 8 +- .../client/console/rest/UserRestClient.java | 10 +- .../markup/html/form/BinaryFieldPanel.java | 4 +- .../pages/AbstractStatusModalPage.properties | 4 + .../pages/AbstractStatusModalPage_it.properties | 5 + .../AbstractStatusModalPage_pt_BR.properties | 5 + .../client/console/pages/BaseModalPage.html | 55 --- .../console/pages/BaseModalPage.properties | 20 - .../console/pages/BaseModalPage_it.properties | 20 - .../pages/BaseModalPage_pt_BR.properties | 20 - .../client/console/pages/ResourceModalPage.html | 56 --- .../console/pages/ResourceModalPage.properties | 60 --- .../pages/ResourceModalPage_it.properties | 60 --- .../pages/ResourceModalPage_pt_BR.properties | 60 --- .../client/console/pages/ResultStatusModal.html | 226 ++++++++++ .../console/pages/ResultStatusModal.properties | 26 ++ .../pages/ResultStatusModal_it.properties | 26 ++ .../pages/ResultStatusModal_pt_BR.properties | 26 ++ .../panels/AbstractSearchResultPanel.html | 49 ++- .../panels/AbstractSearchResultPanel.properties | 4 + .../AbstractSearchResultPanel_it.properties | 4 + .../AbstractSearchResultPanel_pt_BR.properties | 14 +- .../client/console/panels/ImagePanel.html | 28 ++ .../ProvisionWizardBuilder$ConnObjectLink.html | 4 +- .../console/pages/CamelRouteModalPage.java | 23 +- 48 files changed, 1114 insertions(+), 832 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java index 199b262..06ccac7 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java @@ -32,9 +32,7 @@ public class ConnObjectWrapper implements Serializable { private final ConnObjectTO connObjectTO; - public ConnObjectWrapper(final AnyTO any, final String resourceName, - final ConnObjectTO connObjectTO) { - + public ConnObjectWrapper(final AnyTO any, final String resourceName, final ConnObjectTO connObjectTO) { this.any = any; this.resourceName = resourceName; this.connObjectTO = connObjectTO; http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java index adb6040..893b8aa 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java @@ -45,8 +45,7 @@ public class StatusBean implements Serializable { public StatusBean(final AnyTO any, final String resourceName) { this.anyKey = any.getKey(); - this.anyName = any instanceof UserTO - ? ((UserTO) any).getUsername() : ((GroupTO) any).getName(); + this.anyName = any instanceof UserTO ? ((UserTO) any).getUsername() : ((GroupTO) any).getName(); this.resourceName = resourceName; } http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractStatusModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractStatusModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractStatusModalPage.java index f5dfbca..f46ec67 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractStatusModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/AbstractStatusModalPage.java @@ -18,13 +18,17 @@ */ package org.apache.syncope.client.console.pages; +import org.apache.syncope.client.console.panels.AbstractModalPanel; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; +import org.apache.wicket.PageReference; import org.apache.wicket.markup.html.panel.Fragment; -public class AbstractStatusModalPage extends BaseModalPage { +public class AbstractStatusModalPage extends AbstractModalPanel { private static final long serialVersionUID = 6633408683036028540L; - public AbstractStatusModalPage() { + public AbstractStatusModalPage(final BaseModal<?> modal, final PageReference pageRef) { + super(modal, pageRef); add(new Fragment("pwdMgtFields", "emptyFragment", this)); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/pages/AnyDisplayAttributesModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/AnyDisplayAttributesModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/AnyDisplayAttributesModalPage.java index 63223a0..b1214f7 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/AnyDisplayAttributesModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/AnyDisplayAttributesModalPage.java @@ -20,23 +20,28 @@ package org.apache.syncope.client.console.pages; import java.util.List; import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; import org.apache.syncope.common.lib.to.AnyObjectTO; +import org.apache.syncope.common.lib.to.AnyTO; import org.apache.wicket.PageReference; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; /** * Modal window with Display user attributes form. + * @param <T> */ @SuppressWarnings({ "unchecked", "rawtypes" }) -public class AnyDisplayAttributesModalPage extends DisplayAttributesModalPage { +public class AnyDisplayAttributesModalPage<T extends AnyTO> extends DisplayAttributesModalPage { private static final long serialVersionUID = 5194630813773543054L; public static final String[] ANY_DEFAULT_SELECTION = { "key" }; - public AnyDisplayAttributesModalPage(final PageReference pageRef, final ModalWindow window, - final List<String> schemaNames, final List<String> dSchemaNames) { - super(pageRef, window, schemaNames, dSchemaNames); + public AnyDisplayAttributesModalPage( + final BaseModal<T> modal, + final PageReference pageRef, + final List<String> schemaNames, + final List<String> dSchemaNames) { + super(modal, pageRef, schemaNames, dSchemaNames); } @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/pages/BaseModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BaseModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BaseModalPage.java deleted file mode 100644 index 6da298a..0000000 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BaseModalPage.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.pages; - -import org.apache.wicket.Component; -import org.apache.wicket.ajax.AjaxEventBehavior; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.attributes.AjaxCallListener; -import org.apache.wicket.ajax.attributes.AjaxRequestAttributes; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; - -/** - * Syncope Modal Window. - */ -public abstract class BaseModalPage extends AbstractBasePage { - - private static final long serialVersionUID = -1443079028368471943L; - - public BaseModalPage() { - super(); - - add(new AjaxEventBehavior("keyup") { - - private static final long serialVersionUID = -7133385027739964990L; - - @Override - protected void onEvent(final AjaxRequestTarget target) { - ModalWindow.closeCurrent(target); - } - - @Override - protected void updateAjaxAttributes(final AjaxRequestAttributes attributes) { - super.updateAjaxAttributes(attributes); - - attributes.getAjaxCallListeners().add(new AjaxCallListener() { - - private static final long serialVersionUID = 7160235486520935153L; - - @Override - public CharSequence getPrecondition(final Component aComponent) { - return " if(Wicket.Event.keyCode(attrs.event) != 27){return false;}"; - } - }); - } - }); - } -} http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java index 5c1d31f..7d98e51 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionModalPage.java @@ -25,15 +25,17 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.panels.AbstractModalPanel; import org.apache.syncope.client.console.rest.BaseRestClient; import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxButton; +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.ActionLinksPanel; import org.apache.syncope.common.lib.to.BulkAction; import org.apache.syncope.common.lib.to.BulkActionResult; +import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; -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.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; @@ -43,12 +45,13 @@ import org.apache.wicket.model.IModel; import org.apache.wicket.model.ResourceModel; import org.springframework.beans.BeanUtils; -public class BulkActionModalPage<T, S> extends BaseModalPage { +public class BulkActionModalPage<T, S> extends AbstractModalPanel { private static final long serialVersionUID = 4114026480146090962L; public BulkActionModalPage( - final ModalWindow window, + final BaseModal<?> modal, + final PageReference pageRef, final Collection<T> items, final List<IColumn<T, S>> columns, final Collection<ActionLink.ActionType> actions, @@ -56,7 +59,7 @@ public class BulkActionModalPage<T, S> extends BaseModalPage { final String keyFieldName, final String pageId) { - super(); + super(modal, pageRef); final SortableDataProvider<T, S> dataProvider = new SortableDataProvider<T, S>() { @@ -86,7 +89,7 @@ public class BulkActionModalPage<T, S> extends BaseModalPage { @SuppressWarnings("rawtypes") final ActionLinksPanel<Serializable> actionPanel - = ActionLinksPanel.builder(getPageReference()).build("actions"); + = ActionLinksPanel.builder(pageRef).build("actions"); add(actionPanel); for (ActionLink.ActionType action : actions) { @@ -129,12 +132,14 @@ public class BulkActionModalPage<T, S> extends BaseModalPage { final BulkActionResult res = (BulkActionResult) bulkActionExecutor.getClass(). getMethod("bulkAction", BulkAction.class).invoke(bulkActionExecutor, bulkAction); - setResponsePage(new BulkActionResultModalPage<>(window, items, columns, res, keyFieldName)); + modal.setContent(new BulkActionResultModalPage<>( + modal, pageRef, items, columns, res, keyFieldName)); + target.add(modal); } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { error(getString(Constants.ERROR) + ": Operation " + bulkAction.getType() + " not supported"); - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } } @@ -144,13 +149,13 @@ public class BulkActionModalPage<T, S> extends BaseModalPage { final Form<Void> form = new Form<>(FORM); add(form); - final AjaxButton cancel = new ClearIndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL), getPageReference()) { + final AjaxButton cancel = new ClearIndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL), pageRef) { private static final long serialVersionUID = -958724007591692537L; @Override protected void onSubmitInternal(final AjaxRequestTarget target, final Form<?> form) { - window.close(target); + modal.close(target); } }; http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java index 98ac15c..00574c4 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BulkActionResultModalPage.java @@ -22,12 +22,14 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; +import org.apache.syncope.client.console.panels.AbstractModalPanel; import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionResultColumn; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; import org.apache.syncope.common.lib.to.BulkActionResult; +import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink; -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.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; @@ -40,18 +42,19 @@ import org.apache.wicket.model.IModel; * @param <T> * @param <S> */ -public class BulkActionResultModalPage<T, S> extends BaseModalPage { +public class BulkActionResultModalPage<T, S> extends AbstractModalPanel { private static final long serialVersionUID = 2646115294319713724L; public BulkActionResultModalPage( - final ModalWindow window, + final BaseModal<?> modal, + final PageReference pageRef, final Collection<T> items, final List<IColumn<T, S>> columns, final BulkActionResult results, final String keyFieldName) { - super(); + super(modal, pageRef); final List<IColumn<T, S>> newColumnList = new ArrayList<>(columns.subList(1, columns.size() - 1)); newColumnList.add(newColumnList.size(), new ActionResultColumn<T, S>(results, keyFieldName)); @@ -88,7 +91,7 @@ public class BulkActionResultModalPage<T, S> extends BaseModalPage { @Override public void onClick(final AjaxRequestTarget target) { - window.close(target); + modal.close(target); } }; http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java index 769cb45..432c510 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/DisplayAttributesModalPage.java @@ -22,12 +22,14 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.syncope.client.console.PreferenceManager; +import org.apache.syncope.client.console.panels.AbstractModalPanel; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; import org.apache.syncope.common.lib.search.SearchableFields; +import org.apache.syncope.common.lib.to.AnyTO; import org.apache.wicket.PageReference; 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.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Check; import org.apache.wicket.markup.html.form.CheckGroup; @@ -44,9 +46,11 @@ import org.apache.wicket.spring.injection.annot.SpringBean; /** * Modal window with Display attributes form. + * + * @param <T> */ @SuppressWarnings({ "unchecked", "rawtypes" }) -public abstract class DisplayAttributesModalPage extends BaseModalPage { +public abstract class DisplayAttributesModalPage<T extends AnyTO> extends AbstractModalPanel { private static final long serialVersionUID = -4274117450918385110L; @@ -64,10 +68,13 @@ public abstract class DisplayAttributesModalPage extends BaseModalPage { private final List<String> selectedDerSchemas; - public DisplayAttributesModalPage(final PageReference pageRef, final ModalWindow window, - final List<String> schemaNames, final List<String> dSchemaNames) { + public DisplayAttributesModalPage( + final BaseModal<T> modal, + final PageReference pageRef, + final List<String> schemaNames, + final List<String> dSchemaNames) { - super(); + super(modal, pageRef); final IModel<List<String>> fnames = new LoadableDetachableModel<List<String>>() { @@ -197,13 +204,13 @@ public abstract class DisplayAttributesModalPage extends BaseModalPage { ((BasePage) pageRef.getPage()).setModalResult(true); - window.close(target); + modal.close(target); } } @Override protected void onError(final AjaxRequestTarget target, final Form<?> form) { - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } }; @@ -215,7 +222,7 @@ public abstract class DisplayAttributesModalPage extends BaseModalPage { @Override protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { - window.close(target); + modal.close(target); } }; @@ -230,7 +237,7 @@ public abstract class DisplayAttributesModalPage extends BaseModalPage { public abstract String getPrefAttributeView(); public abstract String getPrefDerivedAttributeView(); - + public abstract Class getTOClass(); } http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupDisplayAttributesModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupDisplayAttributesModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupDisplayAttributesModalPage.java index 0e5e10f..9b33379 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupDisplayAttributesModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/GroupDisplayAttributesModalPage.java @@ -20,9 +20,9 @@ package org.apache.syncope.client.console.pages; import java.util.List; import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; import org.apache.syncope.common.lib.to.GroupTO; import org.apache.wicket.PageReference; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; /** * Modal window with Display group attributes form. @@ -34,9 +34,12 @@ public class GroupDisplayAttributesModalPage extends DisplayAttributesModalPage public static final String[] GROUP_DEFAULT_SELECTION = { "key", "name" }; - public GroupDisplayAttributesModalPage(final PageReference pageRef, final ModalWindow window, - final List<String> schemaNames, final List<String> dSchemaNames) { - super(pageRef, window, schemaNames, dSchemaNames); + public GroupDisplayAttributesModalPage( + final BaseModal<GroupTO> modal, + final PageReference pageRef, + final List<String> schemaNames, + final List<String> dSchemaNames) { + super(modal, pageRef, schemaNames, dSchemaNames); } @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java index b631210..95ec54f 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/ProvisioningModalPage.java @@ -30,6 +30,7 @@ import org.apache.syncope.client.console.commons.status.ConnObjectWrapper; import org.apache.syncope.client.console.commons.status.StatusBean; import org.apache.syncope.client.console.commons.status.StatusUtils; import org.apache.syncope.client.console.panels.ActionDataTablePanel; +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.lib.SyncopeClient; import org.apache.syncope.common.lib.to.AnyTO; @@ -41,7 +42,6 @@ import org.apache.syncope.common.lib.wrap.AbstractWrappable; import org.apache.syncope.common.lib.wrap.AnyKey; import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; @@ -63,24 +63,18 @@ public class ProvisioningModalPage<T extends AnyTO> extends AbstractStatusModalP private final AnyTypeKind anyTypeKind; - private final PageReference pageRef; - - private final ModalWindow window; - private final StatusUtils statusUtils; private final String realm = "/"; public ProvisioningModalPage( + final BaseModal<?> modal, final PageReference pageRef, - final ModalWindow window, final ResourceTO resourceTO, final AnyTypeKind anyTypeKind) { - super(); + super(modal, pageRef); - this.pageRef = pageRef; - this.window = window; this.resourceTO = resourceTO; this.anyTypeKind = anyTypeKind; @@ -141,7 +135,7 @@ public class ProvisioningModalPage<T extends AnyTO> extends AbstractStatusModalP } catch (Exception e) { LOG.error("Error unlinkink resources", e); error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } } }, ActionLink.ActionType.UNLINK, pageId); @@ -157,7 +151,7 @@ public class ProvisioningModalPage<T extends AnyTO> extends AbstractStatusModalP } catch (Exception e) { LOG.error("Error de-provisioning user", e); error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } } }, ActionLink.ActionType.DEPROVISION, pageId); @@ -173,12 +167,12 @@ public class ProvisioningModalPage<T extends AnyTO> extends AbstractStatusModalP } catch (Exception e) { LOG.error("Error unassigning resources", e); error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } } }, ActionLink.ActionType.UNASSIGN, pageId); - table.addCancelButton(window); + table.addCancelButton(modal); add(table); } @@ -188,7 +182,7 @@ public class ProvisioningModalPage<T extends AnyTO> extends AbstractStatusModalP private static final long serialVersionUID = 4287357360778016173L; public StatusBeanProvider() { - super("accountLink"); + super("connObjectLink"); } @SuppressWarnings("unchecked") @@ -239,14 +233,15 @@ public class ProvisioningModalPage<T extends AnyTO> extends AbstractStatusModalP } if (beans.isEmpty()) { - window.close(target); + modal.close(target); } else { final BulkActionResult res = resourceRestClient.bulkAssociationAction( resourceTO.getKey(), anyTypeKind.name(), type, subjectKeys); ((BasePage) pageRef.getPage()).setModalResult(true); - setResponsePage(new BulkActionResultModalPage<>(window, beans, columns, res, "anyKey")); + target.add(modal.setContent( + new BulkActionResultModalPage<>(modal, pageRef, beans, columns, res, "anyKey"))); } } } http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/pages/ResultStatusModal.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/ResultStatusModal.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/ResultStatusModal.java new file mode 100644 index 0000000..855a61f --- /dev/null +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/ResultStatusModal.java @@ -0,0 +1,428 @@ +/* + * 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.pages; + +import static org.apache.syncope.client.console.commons.status.Status.ACTIVE; +import static org.apache.syncope.client.console.commons.status.Status.SUSPENDED; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.apache.commons.lang3.StringUtils; +import org.apache.syncope.client.console.commons.ConnIdSpecialAttributeName; +import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.commons.Mode; +import org.apache.syncope.client.console.commons.status.Status; +import org.apache.syncope.client.console.commons.status.StatusUtils; +import org.apache.syncope.client.console.panels.AbstractModalPanel; +import org.apache.syncope.client.console.panels.FailureMessageModal; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; +import org.apache.syncope.common.lib.to.AnyTO; +import org.apache.syncope.common.lib.to.AttrTO; +import org.apache.syncope.common.lib.to.ConnObjectTO; +import org.apache.syncope.common.lib.to.PropagationStatus; +import org.apache.syncope.common.lib.to.GroupTO; +import org.apache.syncope.common.lib.to.UserTO; +import org.apache.syncope.common.lib.types.PropagationTaskExecStatus; +import org.apache.wicket.Component; +import org.apache.wicket.PageReference; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxLink; +import org.apache.wicket.behavior.Behavior; +import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink; +import org.apache.wicket.markup.ComponentTag; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.image.Image; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.markup.html.panel.Fragment; +import org.apache.wicket.model.ResourceModel; +import org.apache.wicket.request.resource.ContextRelativeResource; + +/** + * Show user or group status after performing a successful operation. + * + * @param <T> + */ +public final class ResultStatusModal<T extends AnyTO> extends AbstractModalPanel { + + private static final long serialVersionUID = 2646115294319713723L; + + private static final String IMG_PREFIX = "/img/statuses/"; + + private final AnyTO subject; + + private final Mode mode; + + /** + * Status management utilities. + */ + private final StatusUtils statusUtils; + + public static class Builder<T extends AnyTO> implements Serializable { + + private static final long serialVersionUID = 220361441802274899L; + + private Mode mode; + + private AnyTO subject; + + private final BaseModal<T> modal; + + private final PageReference pageRef; + + public Builder( + final BaseModal<T> modal, + final PageReference pageRef, + final AnyTO attributable) { + this.subject = attributable; + this.modal = modal; + this.pageRef = pageRef; + } + + public ResultStatusModal.Builder<T> mode(final Mode mode) { + this.mode = mode; + return this; + } + + public ResultStatusModal<T> build() { + return new ResultStatusModal<T>(modal, pageRef, this); + } + } + + private ResultStatusModal( + final BaseModal<T> modal, + final PageReference pageRef, + final Builder<T> builder) { + super(modal, pageRef); + + this.subject = builder.subject; + statusUtils = new StatusUtils(this.userRestClient); + if (builder.mode == null) { + this.mode = Mode.ADMIN; + } else { + this.mode = builder.mode; + } + + final WebMarkupContainer container = new WebMarkupContainer("container"); + container.setOutputMarkupId(true); + add(container); + + final Fragment fragment = new Fragment("resultFrag", mode == Mode.SELF + ? "userSelfResultFrag" + : "propagationResultFrag", this); + fragment.setOutputMarkupId(true); + container.add(fragment); + + if (mode == Mode.ADMIN) { + // add Syncope propagation status + PropagationStatus syncope = new PropagationStatus(); + syncope.setResource("Syncope"); + syncope.setStatus(PropagationTaskExecStatus.SUCCESS); + + List<PropagationStatus> propagations = new ArrayList<PropagationStatus>(); + propagations.add(syncope); + propagations.addAll(subject.getPropagationStatusTOs()); + + fragment.add(new Label("info", + ((subject instanceof UserTO) && ((UserTO) subject).getUsername() != null) + ? ((UserTO) subject).getUsername() + : ((subject instanceof GroupTO) && ((GroupTO) subject).getName() != null) + ? ((GroupTO) subject).getName() + : String.valueOf(subject.getKey()))); + + final ListView<PropagationStatus> propRes = new ListView<PropagationStatus>("resources", + propagations) { + + private static final long serialVersionUID = -1020475259727720708L; + + @Override + protected void populateItem(final ListItem<PropagationStatus> item) { + final PropagationStatus propTO = (PropagationStatus) item.getDefaultModelObject(); + + final ListView<String> attributes = getConnObjectView(propTO); + + final Fragment attrhead; + if (attributes.getModelObject() == null || attributes.getModelObject().isEmpty()) { + attrhead = new Fragment("attrhead", "emptyAttrHeadFrag", this); + } else { + attrhead = new Fragment("attrhead", "attrHeadFrag", this); + } + + item.add(attrhead); + item.add(attributes); + + attrhead.add(new Label("resource", propTO.getResource())); + + attrhead.add(new Label("propagation", propTO.getStatus() == null + ? "UNDEFINED" : propTO.getStatus().toString())); + + final Image image; + final String alt, title; + + final BaseModal<?> failureWindow = new BaseModal<>("failureWindow"); + + final AjaxLink<?> failureWindowLink = new AjaxLink<Void>("showFailureWindow") { + + private static final long serialVersionUID = -7978723352517770644L; + + @Override + public void onClick(final AjaxRequestTarget target) { + failureWindow.show(target); + } + }; + + switch (propTO.getStatus()) { + + case SUCCESS: + case CREATED: + image = new Image("icon", + new ContextRelativeResource(IMG_PREFIX + Status.ACTIVE.toString() + + Constants.PNG_EXT)); + alt = "success icon"; + title = "success"; + failureWindow.setVisible(false); + failureWindowLink.setEnabled(false); + break; + + default: + image = new Image("icon", + new ContextRelativeResource(IMG_PREFIX + Status.SUSPENDED.toString() + + Constants.PNG_EXT)); + alt = "failure icon"; + title = "failure"; + } + + image.add(new Behavior() { + + private static final long serialVersionUID = 1469628524240283489L; + + @Override + public void onComponentTag(final Component component, final ComponentTag tag) { + tag.put("alt", alt); + tag.put("title", title); + } + }); + final FailureMessageModal executionFailureMessagePage; + if (propTO.getFailureReason() == null) { + executionFailureMessagePage = new FailureMessageModal( + modal, pageRef, StringUtils.EMPTY); + } else { + executionFailureMessagePage = new FailureMessageModal( + modal, pageRef, propTO.getFailureReason()); + } + + failureWindow.setContent(executionFailureMessagePage); + } + }; + fragment.add(propRes); + } + + final AjaxLink<Void> close = new IndicatingAjaxLink<Void>("close") { + + private static final long serialVersionUID = -7978723352517770644L; + + @Override + public void onClick(final AjaxRequestTarget target) { + builder.modal.close(target); + } + }; + container.add(close); + + setOutputMarkupId(true); + } + + /** + * Get remote attributes list view. + * + * @param propTO propagation TO. + * @return list view. + */ + private ListView<String> getConnObjectView(final PropagationStatus propTO) { + final ConnObjectTO before = propTO.getBeforeObj(); + final ConnObjectTO after = propTO.getAfterObj(); + + // sorted in reversed presentation order + final List<String> head = new ArrayList<String>(); + if (subject instanceof UserTO) { + head.add(ConnIdSpecialAttributeName.PASSWORD); + head.add(ConnIdSpecialAttributeName.ENABLE); + } + head.add(ConnIdSpecialAttributeName.UID); + head.add(ConnIdSpecialAttributeName.NAME); + + final Map<String, AttrTO> beforeAttrMap = before == null + ? Collections.<String, AttrTO>emptyMap() + : before.getPlainAttrMap(); + + final Map<String, AttrTO> afterAttrMap = after == null + ? Collections.<String, AttrTO>emptyMap() + : after.getPlainAttrMap(); + + final Set<String> attributes = new HashSet<String>(); + attributes.addAll(beforeAttrMap.keySet()); + attributes.addAll(afterAttrMap.keySet()); + + if (!(subject instanceof UserTO)) { + attributes.remove(ConnIdSpecialAttributeName.PASSWORD); + attributes.remove(ConnIdSpecialAttributeName.ENABLE); + } + + final List<String> profile = new ArrayList<String>(); + profile.addAll(attributes); + profile.removeAll(head); + Collections.sort(profile); + + for (String attr : head) { + if (attributes.contains(attr)) { + profile.add(0, attr); + } + } + + return new ListView<String>("attrs", profile) { + + private static final long serialVersionUID = 4949588177564901031L; + + @Override + protected void populateItem(final ListItem<String> item) { + String name = item.getModelObject(); + + final Fragment beforeValue; + final Fragment afterValue; + if (ConnIdSpecialAttributeName.ENABLE.equals(name)) { + beforeValue = getStatusIcon("beforeValue", propTO.getResource(), before); + afterValue = getStatusIcon("afterValue", propTO.getResource(), after); + } else { + beforeValue = getLabelValue("beforeValue", name, beforeAttrMap); + afterValue = getLabelValue("afterValue", name, afterAttrMap); + } + + item.add(new Label("attrName", new ResourceModel(name, name))); + + item.add(beforeValue); + item.add(afterValue); + } + }; + } + + /** + * Get fragment for attribute value (not remote status). + * + * @param id component id to be replaced with the fragment content. + * @param attrName remote attribute name + * @param attrMap remote attributes map. + * @return fragment. + */ + private Fragment getLabelValue(final String id, final String attrName, final Map<String, AttrTO> attrMap) { + final String value; + + final AttrTO attr = attrMap.get(attrName); + + if (attr == null || attr.getValues() == null || attr.getValues().isEmpty()) { + value = ""; + } else { + if (ConnIdSpecialAttributeName.PASSWORD.equals(attrName)) { + value = "********"; + } else { + value = attr.getValues().size() > 1 + ? attr.getValues().toString() + : attr.getValues().get(0); + } + } + + Component label = new Label("value", value.length() > 50 ? value.substring(0, 50) + "..." : value). + add(new Behavior() { + + private static final long serialVersionUID = 1469628524240283489L; + + @Override + public void onComponentTag(final Component component, final ComponentTag tag) { + tag.put("title", value); + } + }); + + final Fragment frag = new Fragment(id, "attrValueFrag", this); + frag.add(label); + + return frag; + } + + /** + * Get fragment for user status icon. + * + * @param id component id to be replaced with the fragment content + * @param resourceName resource name + * @param objectTO connector object TO + * @return fragment. + */ + private Fragment getStatusIcon(final String id, final String resourceName, final ConnObjectTO objectTO) { + final Image image; + final String alt, title; + switch (statusUtils.getStatusBean( + subject, resourceName, objectTO, this.subject instanceof GroupTO).getStatus()) { + + case ACTIVE: + image = new Image("status", + new ContextRelativeResource(IMG_PREFIX + Status.ACTIVE.toString() + Constants.PNG_EXT)); + alt = "active icon"; + title = "Enabled"; + break; + + case SUSPENDED: + image = new Image("status", + new ContextRelativeResource(IMG_PREFIX + Status.SUSPENDED.toString() + Constants.PNG_EXT)); + alt = "inactive icon"; + title = "Disabled"; + break; + + default: + image = null; + alt = null; + title = null; + } + + final Fragment frag; + if (image == null) { + frag = new Fragment(id, "emptyFrag", this); + } else { + image.add(new Behavior() { + + private static final long serialVersionUID = 1469628524240283489L; + + @Override + public void onComponentTag(final Component component, final ComponentTag tag) { + tag.put("alt", alt); + tag.put("title", title); + tag.put("width", "12px"); + tag.put("height", "12px"); + } + }); + + frag = new Fragment(id, "remoteStatusFrag", this); + frag.add(image); + } + + return frag; + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/pages/StatusModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/StatusModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/StatusModalPage.java index 1357cad..f70c1c5 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/StatusModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/StatusModalPage.java @@ -32,6 +32,7 @@ import org.apache.syncope.client.console.commons.status.StatusBean; import org.apache.syncope.client.console.commons.status.StatusUtils; import org.apache.syncope.client.console.panels.ActionDataTablePanel; import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxButton; +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.AjaxCheckBoxPanel; import org.apache.syncope.common.lib.to.AnyTO; @@ -43,7 +44,6 @@ import org.apache.syncope.common.lib.types.ResourceAssociationAction; import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; @@ -89,32 +89,26 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { private final PasswordTextField confirm; // -------------------------------- - private final PageReference pageRef; - - private final ModalWindow window; - private final ActionDataTablePanel<StatusBean, String> table; private final List<IColumn<StatusBean, String>> columns; public StatusModalPage( + final BaseModal<T> modal, final PageReference pageRef, - final ModalWindow window, final AnyTO attributableTO) { - this(pageRef, window, attributableTO, false); + this(modal, pageRef, attributableTO, false); } public StatusModalPage( + final BaseModal<T> modal, final PageReference pageRef, - final ModalWindow window, final AnyTO anyTO, final boolean statusOnly) { - super(); + super(modal, pageRef); - this.pageRef = pageRef; - this.window = window; this.statusOnly = statusOnly; this.anyTO = anyTO; @@ -152,7 +146,7 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { }); columns.add(new PropertyColumn<StatusBean, String>( - new StringResourceModel("accountLink", this, null), "accountLink", "accountLink")); + new StringResourceModel("connObjectLink", this, null), "connObjectLink", "connObjectLink")); columns.add(new AbstractColumn<StatusBean, String>( new StringResourceModel("status", this, null)) { @@ -236,14 +230,14 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { @Override protected void onSubmitInternal(final AjaxRequestTarget target, final Form<?> form) { // ignore - window.close(target); + modal.close(target); } }.feedbackPanelAutomaticReload(false); pwdMgtForm.add(cancel); - final ClearIndicatingAjaxButton goon = - new ClearIndicatingAjaxButton("continue", new ResourceModel("continue"), pageRef) { + final ClearIndicatingAjaxButton goon = new ClearIndicatingAjaxButton("continue", new ResourceModel("continue"), + pageRef) { private static final long serialVersionUID = -2341391430136818027L; @@ -270,11 +264,11 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { ((BasePage) pageRef.getPage()).setModalResult(true); - window.close(target); + modal.close(target); } catch (Exception e) { LOG.error("Error enabling resources", e); error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } } }, ActionLink.ActionType.REACTIVATE, pageId); @@ -295,11 +289,11 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { ((BasePage) pageRef.getPage()).setModalResult(true); } - window.close(target); + modal.close(target); } catch (Exception e) { LOG.error("Error disabling resources", e); error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } } }, ActionLink.ActionType.SUSPEND, pageId); @@ -324,11 +318,11 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { } ((BasePage) pageRef.getPage()).setModalResult(true); - window.close(target); + modal.close(target); } catch (Exception e) { LOG.error("Error unlinking resources", e); error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } } }, ActionLink.ActionType.UNLINK, pageId); @@ -353,11 +347,11 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { } ((BasePage) pageRef.getPage()).setModalResult(true); - window.close(target); + modal.close(target); } catch (Exception e) { LOG.error("Error linking resources", e); error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } } }, ActionLink.ActionType.LINK, pageId); @@ -383,11 +377,11 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { } ((BasePage) pageRef.getPage()).setModalResult(true); - loadBulkActionResultPage(table.getModelObject(), bulkActionResult); + loadBulkActionResultPage(target, table.getModelObject(), bulkActionResult); } catch (Exception e) { LOG.error("Error de-provisioning user", e); error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } } }, ActionLink.ActionType.DEPROVISION, pageId); @@ -410,11 +404,11 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { new ArrayList<>(table.getModelObject())); ((BasePage) pageRef.getPage()).setModalResult(true); - loadBulkActionResultPage(table.getModelObject(), bulkActionResult); + loadBulkActionResultPage(target, table.getModelObject(), bulkActionResult); } catch (Exception e) { LOG.error("Error provisioning user", e); error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } } } @@ -441,11 +435,11 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { } ((BasePage) pageRef.getPage()).setModalResult(true); - loadBulkActionResultPage(table.getModelObject(), bulkActionResult); + loadBulkActionResultPage(target, table.getModelObject(), bulkActionResult); } catch (Exception e) { LOG.error("Error unassigning resources", e); error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } } }, ActionLink.ActionType.UNASSIGN, pageId); @@ -467,18 +461,18 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { new ArrayList<>(table.getModelObject())); ((BasePage) pageRef.getPage()).setModalResult(true); - loadBulkActionResultPage(table.getModelObject(), bulkActionResult); + loadBulkActionResultPage(target, table.getModelObject(), bulkActionResult); } catch (Exception e) { LOG.error("Error assigning resources", e); error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } } } }.feedbackPanelAutomaticReload(!(anyTO instanceof UserTO)), ActionLink.ActionType.ASSIGN, pageId); } - table.addCancelButton(window); + table.addCancelButton(modal); add(table); } @@ -487,7 +481,7 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { private static final long serialVersionUID = 4586969457669796621L; public AttributableStatusProvider() { - super(statusOnly ? "resourceName" : "accountLink"); + super(statusOnly ? "resourceName" : "connObjectLink"); } @SuppressWarnings("unchecked") @@ -549,8 +543,8 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { final ResourceAssociationAction type, final Collection<StatusBean> selection) { - final ClearIndicatingAjaxButton goon = - new ClearIndicatingAjaxButton("continue", new ResourceModel("continue", "Continue"), pageRef) { + final ClearIndicatingAjaxButton goon = new ClearIndicatingAjaxButton("continue", new ResourceModel("continue", + "Continue"), pageRef) { private static final long serialVersionUID = -2341391430136818027L; @@ -588,16 +582,16 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { ((BasePage) pageRef.getPage()).setModalResult(true); if (bulkActionResult != null) { - loadBulkActionResultPage(selection, bulkActionResult); + loadBulkActionResultPage(target, selection, bulkActionResult); } else { target.add(((BasePage) pageRef.getPage()).getFeedbackPanel()); - window.close(target); + modal.close(target); } } catch (Exception e) { LOG.error("Error provisioning resources", e); error(getString(Constants.ERROR) + ": " + e.getMessage()); - feedbackPanel.refresh(target); + modal.getFeedbackPanel().refresh(target); } } }.feedbackPanelAutomaticReload(false); @@ -612,14 +606,16 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { } private void loadBulkActionResultPage( - final Collection<StatusBean> selection, final BulkActionResult bulkActionResult) { + final AjaxRequestTarget target, + final Collection<StatusBean> selection, + final BulkActionResult bulkActionResult) { final List<String> resources = new ArrayList<String>(selection.size()); for (StatusBean statusBean : selection) { resources.add(statusBean.getResourceName()); } - final List<ConnObjectWrapper> connObjects = - statusUtils.getConnectorObjects(Collections.singletonList(anyTO), resources); + final List<ConnObjectWrapper> connObjects = statusUtils.getConnectorObjects(Collections.singletonList(anyTO), + resources); final List<StatusBean> statusBeans = new ArrayList<StatusBean>(connObjects.size()); @@ -632,11 +628,12 @@ public class StatusModalPage<T extends AnyTO> extends AbstractStatusModalPage { statusBeans.add(statusBean); } - setResponsePage(new BulkActionResultModalPage<StatusBean, String>( - window, + target.add(modal.setContent(new BulkActionResultModalPage<StatusBean, String>( + modal, + pageRef, statusBeans, columns, bulkActionResult, - "resourceName")); + "resourceName"))); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/pages/UserDisplayAttributesModalPage.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/UserDisplayAttributesModalPage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/UserDisplayAttributesModalPage.java index 0eeaa42..2ce0a30 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/pages/UserDisplayAttributesModalPage.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/UserDisplayAttributesModalPage.java @@ -20,9 +20,9 @@ package org.apache.syncope.client.console.pages; import java.util.List; import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; import org.apache.syncope.common.lib.to.UserTO; import org.apache.wicket.PageReference; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; /** * Modal window with Display user attributes form. @@ -33,10 +33,13 @@ public class UserDisplayAttributesModalPage extends DisplayAttributesModalPage { private static final long serialVersionUID = 5194630813773543054L; public static final String[] USER_DEFAULT_SELECTION = { "key", "username", "status" }; - - public UserDisplayAttributesModalPage(final PageReference pageRef, final ModalWindow window, - final List<String> schemaNames, final List<String> dSchemaNames) { - super(pageRef, window, schemaNames, dSchemaNames); + + public UserDisplayAttributesModalPage( + final BaseModal<UserTO> modal, + final PageReference pageRef, + final List<String> schemaNames, + final List<String> dSchemaNames) { + super(modal, pageRef, schemaNames, dSchemaNames); } @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java index 5bda1fd..c55d6bd 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.java @@ -25,6 +25,7 @@ import org.apache.syncope.client.console.commons.AnyDataProvider; import org.apache.syncope.client.console.commons.Constants; import org.apache.syncope.client.console.pages.AbstractBasePage; import org.apache.syncope.client.console.rest.AbstractAnyRestClient; +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.common.lib.to.AnyTO; import org.apache.wicket.PageReference; @@ -44,7 +45,7 @@ import org.apache.wicket.spring.injection.annot.SpringBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class AbstractSearchResultPanel extends Panel implements IEventSource { +public abstract class AbstractSearchResultPanel<T extends AnyTO> extends Panel implements IEventSource { private static final long serialVersionUID = -9170191461250434024L; @@ -54,36 +55,6 @@ public abstract class AbstractSearchResultPanel extends Panel implements IEventS protected static final Logger LOG = LoggerFactory.getLogger(AbstractSearchResultPanel.class); /** - * Edit modal window height. - */ - private static final int EDIT_MODAL_WIN_HEIGHT = 550; - - /** - * Edit modal window width. - */ - private static final int EDIT_MODAL_WIN_WIDTH = 800; - - /** - * Schemas to be shown modal window height. - */ - private static final int DISPLAYATTRS_MODAL_WIN_HEIGHT = 550; - - /** - * Schemas to be shown modal window width. - */ - private static final int DISPLAYATTRS_MODAL_WIN_WIDTH = 550; - - /** - * Schemas to be shown modal window height. - */ - private static final int STATUS_MODAL_WIN_HEIGHT = 500; - - /** - * Schemas to be shown modal window width. - */ - private static final int STATUS_MODAL_WIN_WIDTH = 700; - - /** * Application preferences. */ @SpringBean @@ -128,19 +99,10 @@ public abstract class AbstractSearchResultPanel extends Panel implements IEventS private AnyDataProvider dataProvider; /** - * Modal window to be used for user profile editing. Global visibility is required ... - */ - protected final ModalWindow editmodal = new ModalWindow("editModal"); - - /** - * Modal window to be used for attributes choosing to display in tables. - */ - protected final ModalWindow displaymodal = new ModalWindow("displayModal"); - - /** - * Modal window to be used for user status management. + * Modal window to be used for: user profile editing (Global visibility is required); attributes choosing to + * display in tables; user status management. */ - protected final ModalWindow statusmodal = new ModalWindow("statusModal"); + protected final BaseModal<T> modal = new BaseModal<>("modal"); /** * Owner page. @@ -163,6 +125,8 @@ public abstract class AbstractSearchResultPanel extends Panel implements IEventS super(id); + add(modal); + setOutputMarkupId(true); this.page = (AbstractBasePage) pageRef.getPage(); @@ -173,24 +137,6 @@ public abstract class AbstractSearchResultPanel extends Panel implements IEventS this.restClient = restClient; - editmodal.setCssClassName(ModalWindow.CSS_CLASS_GRAY); - editmodal.setInitialHeight(EDIT_MODAL_WIN_HEIGHT); - editmodal.setInitialWidth(EDIT_MODAL_WIN_WIDTH); - editmodal.setCookieName("edit-modal"); - add(editmodal); - - displaymodal.setCssClassName(ModalWindow.CSS_CLASS_GRAY); - displaymodal.setInitialHeight(DISPLAYATTRS_MODAL_WIN_HEIGHT); - displaymodal.setInitialWidth(DISPLAYATTRS_MODAL_WIN_WIDTH); - displaymodal.setCookieName("display-modal"); - add(displaymodal); - - statusmodal.setCssClassName(ModalWindow.CSS_CLASS_GRAY); - statusmodal.setInitialHeight(STATUS_MODAL_WIN_HEIGHT); - statusmodal.setInitialWidth(STATUS_MODAL_WIN_WIDTH); - statusmodal.setCookieName("status-modal"); - add(statusmodal); - // Container for user search result container = new WebMarkupContainer("container"); container.setOutputMarkupId(true); @@ -236,9 +182,7 @@ public abstract class AbstractSearchResultPanel extends Panel implements IEventS paginatorForm.add(rowsChooser); // --------------------------- - setWindowClosedReloadCallback(statusmodal); - setWindowClosedReloadCallback(editmodal); - setWindowClosedReloadCallback(displaymodal); + setWindowClosedReloadCallback(modal); } public void search(final String fiql, final AjaxRequestTarget target) { @@ -297,13 +241,15 @@ public abstract class AbstractSearchResultPanel extends Panel implements IEventS } } - private void setWindowClosedReloadCallback(final ModalWindow window) { - window.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { + private void setWindowClosedReloadCallback(final BaseModal<?> modal) { + modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { private static final long serialVersionUID = 8804221891699487139L; @Override public void onClose(final AjaxRequestTarget target) { + modal.show(false); + final EventDataWrapper data = new EventDataWrapper(); data.setTarget(target); data.setRows(rows); http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/panels/ActionDataTablePanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ActionDataTablePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ActionDataTablePanel.java index 289cf26..73748c0 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ActionDataTablePanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ActionDataTablePanel.java @@ -25,6 +25,7 @@ import org.apache.syncope.client.console.commons.ActionTableCheckGroup; import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxButton; 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.ActionLinksPanel; @@ -33,7 +34,6 @@ import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior; import org.apache.wicket.ajax.markup.html.form.AjaxButton; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; 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; @@ -121,7 +121,7 @@ public class ActionDataTablePanel<T, S> extends DataTablePanel<T, S> { actionPanel.add(action, type, pageId, enabled); } - public void addCancelButton(final ModalWindow window) { + public void addCancelButton(final BaseModal<?> modal) { final AjaxButton cancel = new ClearIndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL), pageRef) { @@ -129,7 +129,7 @@ public class ActionDataTablePanel<T, S> extends DataTablePanel<T, S> { @Override protected void onSubmitInternal(final AjaxRequestTarget target, final Form<?> form) { - window.close(target); + modal.close(target); } }.feedbackPanelAutomaticReload(false); http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java index b98ba71..5041c6e 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java @@ -25,12 +25,12 @@ import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink; import org.apache.syncope.client.console.panels.AbstractSearchResultPanel.EventDataWrapper; import org.apache.syncope.client.console.pages.AbstractBasePage; import org.apache.syncope.client.console.commons.Constants; +import org.apache.syncope.client.console.pages.BulkActionModalPage; import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.CheckGroupColumn; import org.apache.syncope.client.console.wicket.ajax.markup.html.ClearIndicatingAjaxButton; -import org.apache.syncope.client.console.pages.BulkActionModalPage; import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AjaxFallbackDataTable; +import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; import org.apache.wicket.AttributeModifier; -import org.apache.wicket.Page; import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior; @@ -61,11 +61,7 @@ public class AjaxDataTablePanel<T, S> extends DataTablePanel<T, S> { super(id); - final ModalWindow bulkModalWin = new ModalWindow("bulkModal"); - bulkModalWin.setCssClassName(ModalWindow.CSS_CLASS_GRAY); - bulkModalWin.setInitialHeight(600); - bulkModalWin.setInitialWidth(900); - bulkModalWin.setCookieName("bulk-modal"); + final BaseModal<?> bulkModalWin = new BaseModal("bulkModal"); add(bulkModalWin); bulkModalWin.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { @@ -114,7 +110,7 @@ public class AjaxDataTablePanel<T, S> extends DataTablePanel<T, S> { columns.add(0, new CheckGroupColumn<T, S>(group)); dataTable = new AjaxFallbackDataTable<>("dataTable", columns, dataProvider, rowsPerPage, container); dataTable.add(new AttributeModifier("class", "table table-bordered table-hover dataTable")); - + group.add(dataTable); fragment.add(new ClearIndicatingAjaxButton("bulkActionLink", bulkActionForm, pageRef) { @@ -123,22 +119,15 @@ public class AjaxDataTablePanel<T, S> extends DataTablePanel<T, S> { @Override protected void onSubmitInternal(final AjaxRequestTarget target, final Form<?> form) { - bulkModalWin.setPageCreator(new ModalWindow.PageCreator() { - - private static final long serialVersionUID = -7834632442532690941L; - - @Override - public Page createPage() { - return new BulkActionModalPage<>( - bulkModalWin, - group.getModelObject(), - columns, - actions, - bulkActionExecutor, - itemKeyField, - pageId); - } - }); + bulkModalWin.setContent(new BulkActionModalPage<>( + bulkModalWin, + pageRef, + group.getModelObject(), + columns, + actions, + bulkActionExecutor, + itemKeyField, + pageId)); bulkModalWin.show(target); } http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/panels/AnySearchResultPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnySearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnySearchResultPanel.java index e9b137d..0940698 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnySearchResultPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnySearchResultPanel.java @@ -20,12 +20,14 @@ package org.apache.syncope.client.console.panels; import java.io.Serializable; import java.lang.reflect.Field; +import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import org.apache.syncope.client.console.commons.Constants; import org.apache.syncope.client.console.pages.AnyDisplayAttributesModalPage; +import org.apache.syncope.client.console.pages.BasePage; import org.apache.syncope.client.console.rest.AbstractAnyRestClient; import org.apache.syncope.client.console.rest.AnyObjectRestClient; import org.apache.syncope.client.console.rest.SchemaRestClient; @@ -38,26 +40,22 @@ import org.apache.syncope.common.lib.to.AnyTO; import org.apache.syncope.common.lib.to.AnyTypeClassTO; import org.apache.syncope.common.lib.to.AnyObjectTO; import org.apache.syncope.common.lib.types.SchemaType; -import org.apache.wicket.Page; import org.apache.wicket.PageReference; import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.spring.injection.annot.SpringBean; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.util.ReflectionUtils; -public class AnySearchResultPanel extends AbstractSearchResultPanel { +public class AnySearchResultPanel<T extends AnyTO> extends AbstractSearchResultPanel<T> { private static final long serialVersionUID = -1100228004207271270L; - protected static final Logger LOG = LoggerFactory.getLogger(AnySearchResultPanel.class); - @SpringBean protected SchemaRestClient schemaRestClient; @@ -66,7 +64,7 @@ public class AnySearchResultPanel extends AbstractSearchResultPanel { protected final List<String> dSchemaNames; protected final String pageID = "Any"; - + private final String entitlement = "USER_LIST"; public AnySearchResultPanel(final String type, final String parentId, final boolean filtered, @@ -91,8 +89,7 @@ public class AnySearchResultPanel extends AbstractSearchResultPanel { @Override protected List<IColumn<AnyTO, String>> getColumns() { - final List<IColumn<AnyTO, String>> columns = - new ArrayList<IColumn<AnyTO, String>>(); + final List<IColumn<AnyTO, String>> columns = new ArrayList<IColumn<AnyTO, String>>(); for (String name : prefMan.getList(getRequest(), Constants.PREF_ANY_DETAILS_VIEW)) { final Field field = ReflectionUtils.findField(AnyObjectTO.class, name); @@ -133,7 +130,7 @@ public class AnySearchResultPanel extends AbstractSearchResultPanel { private static final long serialVersionUID = -3503023501954863131L; @Override - public ActionLinksPanel getActions(final String componentId, final IModel<AnyTO> model) { + public ActionLinksPanel<AnyTO> getActions(final String componentId, final IModel<AnyTO> model) { final ActionLinksPanel.Builder<AnyTO> panel = ActionLinksPanel.builder(page.getPageReference()); @@ -143,19 +140,16 @@ public class AnySearchResultPanel extends AbstractSearchResultPanel { @Override public void onClick(final AjaxRequestTarget target, final AnyTO anyTO) { - editmodal.setPageCreator(new ModalWindow.PageCreator() { + final T modelObject = ((AnyObjectRestClient) restClient).<T>read(anyTO.getKey()); - private static final long serialVersionUID = -7834632442532690940L; + final IModel<T> model = new CompoundPropertyModel<>(modelObject); + modal.setFormModel(model); - @Override - public Page createPage() { - // SYNCOPE-294: re-read anyTO before edit - AnyObjectTO anyTO = ((AnyObjectRestClient) restClient).read(model.getObject().getKey()); - return null; - } - }); + // still missing content + target.add(modal); - editmodal.show(target); + modal.header(new Model<String>(MessageFormat.format(getString("any.edit"), anyTO.getKey()))); + modal.show(true); } }, ActionLink.ActionType.EDIT, entitlement).add(new ActionLink<AnyTO>() { @@ -164,34 +158,22 @@ public class AnySearchResultPanel extends AbstractSearchResultPanel { @Override public void onClick(final AjaxRequestTarget target, final AnyTO anyTO) { try { - AnyTO deleteAnyTO = - restClient.delete(model.getObject().getETagValue(), model.getObject().getKey()); - - page.setModalResult(true); - - editmodal.setPageCreator(new ModalWindow.PageCreator() { - - private static final long serialVersionUID = -7834632442532690940L; - - @Override - public Page createPage() { - return null; - } - }); - - editmodal.show(target); - } catch (SyncopeClientException scce) { - error(getString(Constants.OPERATION_ERROR) + ": " + scce.getMessage()); - feedbackPanel.refresh(target); + restClient.delete(model.getObject().getETagValue(), model.getObject().getKey()); + info(getString(Constants.OPERATION_SUCCEEDED)); + target.add(container); + } catch (SyncopeClientException e) { + error(getString(Constants.ERROR) + ": " + e.getMessage()); + LOG.error("While deleting object {}", anyTO.getKey(), e); } + ((BasePage) getPage()).getFeedbackPanel().refresh(target); } }, ActionLink.ActionType.DELETE, entitlement); - return panel.build(componentId); + return panel.build(componentId, model.getObject()); } @Override - public ActionLinksPanel getHeader(final String componentId) { + public ActionLinksPanel<Serializable> getHeader(final String componentId) { final ActionLinksPanel.Builder<Serializable> panel = ActionLinksPanel.builder(page.getPageReference()); panel.add(new ActionLink<Serializable>() { @@ -200,18 +182,12 @@ public class AnySearchResultPanel extends AbstractSearchResultPanel { @Override public void onClick(final AjaxRequestTarget target, final Serializable ignore) { - displaymodal.setPageCreator(new ModalWindow.PageCreator() { - - private static final long serialVersionUID = -7834632442532690940L; - - @Override - public Page createPage() { - return new AnyDisplayAttributesModalPage( - page.getPageReference(), displaymodal, schemaNames, dSchemaNames); - } - }); + // still missing content + target.add(modal.setContent(new AnyDisplayAttributesModalPage<T>( + modal, page.getPageReference(), schemaNames, dSchemaNames))); - displaymodal.show(target); + modal.header(new ResourceModel("any.attr.display", "")); + modal.show(true); } }, ActionLink.ActionType.CHANGE_VIEW, entitlement).add(new ActionLink<Serializable>() {
