blob: 3f76ad6a7067d5050d1be814b425db045cafc8a8 [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.wizards.any;
import java.util.ArrayList;
import org.apache.syncope.client.console.panels.search.AnySelectionDirectoryPanel;
import org.apache.syncope.client.console.panels.search.SearchClausePanel;
import org.apache.syncope.client.console.panels.search.SearchUtils;
import org.apache.syncope.client.console.panels.search.UserSearchPanel;
import org.apache.syncope.client.console.panels.search.UserSelectionDirectoryPanel;
import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
import org.apache.syncope.client.console.rest.AnyTypeRestClient;
import org.apache.syncope.client.console.rest.UserRestClient;
import org.apache.syncope.client.lib.SyncopeClient;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.AnyTypeTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.wicket.Component;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.event.IEvent;
import org.apache.wicket.extensions.wizard.WizardStep;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.model.util.ListModel;
public class MergeLinkedAccountsSearchPanel extends WizardStep {
private static final long serialVersionUID = 1221037007528732347L;
private final WebMarkupContainer ownerContainer;
private final UserSearchPanel userSearchPanel;
private final AnyTypeClassRestClient anyTypeClassRestClient = new AnyTypeClassRestClient();
private final AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient();
private final UserSelectionDirectoryPanel userDirectoryPanel;
private final Fragment userSearchFragment;
private final MergeLinkedAccountsWizardModel wizardModel;
public MergeLinkedAccountsSearchPanel(final MergeLinkedAccountsWizardModel model, final PageReference pageRef) {
super();
setOutputMarkupId(true);
this.wizardModel = model;
setTitleModel(new StringResourceModel("mergeLinkedAccounts.searchUser", Model.of(model.getBaseUser())));
ownerContainer = new WebMarkupContainer("ownerContainer");
ownerContainer.setOutputMarkupId(true);
add(ownerContainer);
userSearchFragment = new Fragment("search", "userSearchFragment", this);
userSearchPanel = UserSearchPanel.class.cast(new UserSearchPanel.Builder(
new ListModel<>(new ArrayList<>())).required(false).enableSearch(MergeLinkedAccountsSearchPanel.this).
build("usersearch"));
userSearchFragment.add(userSearchPanel);
AnyTypeTO anyTypeTO = anyTypeRestClient.read(AnyTypeKind.USER.name());
userDirectoryPanel = UserSelectionDirectoryPanel.class.cast(new UserSelectionDirectoryPanel.Builder(
anyTypeClassRestClient.list(anyTypeTO.getClasses()), anyTypeTO.getKey(), pageRef).
build("searchResult"));
userSearchFragment.add(userDirectoryPanel);
ownerContainer.add(userSearchFragment);
}
@Override
public void onEvent(final IEvent<?> event) {
if (event.getPayload() instanceof SearchClausePanel.SearchEvent) {
final AjaxRequestTarget target = SearchClausePanel.SearchEvent.class.cast(event.getPayload()).getTarget();
final String fiql = "username!~" + this.wizardModel.getBaseUser().getUsername() + ';'
+ SearchUtils.buildFIQL(userSearchPanel.getModel().getObject(),
SyncopeClient.getUserSearchConditionBuilder());
userDirectoryPanel.search(fiql, target);
} else if (event.getPayload() instanceof AnySelectionDirectoryPanel.ItemSelection) {
AnySelectionDirectoryPanel.ItemSelection payload =
(AnySelectionDirectoryPanel.ItemSelection) event.getPayload();
final AnyTO sel = payload.getSelection();
this.wizardModel.setMergingUser(new UserRestClient().read(sel.getKey()));
String tableId = ((Component) event.getSource()).
get("container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable").
getMarkupId();
String js = "$('#" + tableId + " tr').removeClass('active');";
js += "$('#" + tableId + " td[title=" + sel.getKey() + "]').parent().addClass('active');";
payload.getTarget().prependJavaScript(js);
}
}
}