blob: 705fa0f876aa0cf6da228781349c0076ca802883 [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.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.syncope.client.console.layout.LinkedAccountForm;
import org.apache.syncope.client.console.layout.LinkedAccountFormLayoutInfo;
import org.apache.syncope.client.console.rest.UserRestClient;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal.ModalEvent;
import org.apache.syncope.client.console.wizards.BaseAjaxWizardBuilder;
import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
import org.apache.syncope.client.ui.commons.wizards.any.EntityWrapper;
import org.apache.syncope.common.lib.Attr;
import org.apache.syncope.common.lib.request.LinkedAccountUR;
import org.apache.syncope.common.lib.request.UserUR;
import org.apache.syncope.common.lib.to.LinkedAccountTO;
import org.apache.syncope.common.lib.to.UserTO;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.wizard.WizardModel;
import org.apache.wicket.model.IModel;
/**
* Accounts wizard builder.
*/
public class LinkedAccountWizardBuilder extends BaseAjaxWizardBuilder<LinkedAccountTO> implements LinkedAccountForm {
private static final long serialVersionUID = -9142332740863374891L;
private final UserRestClient userRestClient = new UserRestClient();
private final IModel<UserTO> model;
protected LinkedAccountFormLayoutInfo formLayoutInfo;
public LinkedAccountWizardBuilder(
final IModel<UserTO> model,
final LinkedAccountFormLayoutInfo formLayoutInfo,
final PageReference pageRef) {
super(new LinkedAccountTO(), pageRef);
this.model = model;
this.formLayoutInfo = formLayoutInfo;
}
@Override
public AjaxWizard<LinkedAccountTO> build(final String id, final AjaxWizard.Mode mode) {
return super.build(id, mode);
}
@Override
protected WizardModel buildModelSteps(final LinkedAccountTO modelObject, final WizardModel wizardModel) {
wizardModel.add(new LinkedAccountDetailsPanel(modelObject));
if (formLayoutInfo.isCredentials()) {
wizardModel.add(new LinkedAccountCredentialsPanel(
new EntityWrapper<>(modelObject), formLayoutInfo.getWhichCredentials()));
}
if (formLayoutInfo.isPlainAttrs()) {
wizardModel.add(new LinkedAccountPlainAttrsPanel(
new EntityWrapper<>(modelObject), model.getObject(), formLayoutInfo.getWhichPlainAttrs()));
}
if (formLayoutInfo.isPrivileges()) {
wizardModel.add(new LinkedAccountPrivilegesPanel(modelObject));
}
return wizardModel;
}
@Override
protected Serializable onApplyInternal(final LinkedAccountTO modelObject) {
fixPlainAttrs(modelObject);
LinkedAccountUR linkedAccountPatch = new LinkedAccountUR.Builder().linkedAccountTO(modelObject).build();
linkedAccountPatch.setLinkedAccountTO(modelObject);
UserUR req = new UserUR();
req.setKey(model.getObject().getKey());
req.getLinkedAccounts().add(linkedAccountPatch);
model.setObject(userRestClient.update(model.getObject().getETagValue(), req).getEntity());
return modelObject;
}
private void fixPlainAttrs(final LinkedAccountTO linkedAccountTO) {
Set<Attr> validAttrs = new HashSet<>(linkedAccountTO.getPlainAttrs().stream().
filter(attr -> !attr.getValues().isEmpty()).
collect(Collectors.toSet()));
linkedAccountTO.getPlainAttrs().clear();
linkedAccountTO.getPlainAttrs().addAll(validAttrs);
}
@Override
protected Serializable getCreateCustomPayloadEvent(final Serializable afterObject, final AjaxRequestTarget target) {
LinkedAccountTO linkedAccountTO = LinkedAccountTO.class.cast(afterObject);
return new CreateEvent(
linkedAccountTO.getConnObjectKeyValue(),
model.getObject(),
target);
}
private static class CreateEvent extends ModalEvent {
private static final long serialVersionUID = 6416834092156281986L;
private final String key;
private final UserTO userTO;
CreateEvent(
final String key,
final UserTO userTO,
final AjaxRequestTarget target) {
super(target);
this.key = key;
this.userTO = userTO;
}
public String getKey() {
return key;
}
public UserTO getUserTO() {
return userTO;
}
}
}