/*
* 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.rest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.ws.rs.core.Response;
import org.apache.commons.collections4.ComparatorUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.patch.ResourceDeassociationPatch;
import org.apache.syncope.common.lib.to.BulkActionResult;
import org.apache.syncope.common.lib.to.ConnObjectTO;
import org.apache.syncope.common.lib.to.PagedConnObjectTOResult;
import org.apache.syncope.common.lib.to.ResourceTO;
import org.apache.syncope.common.lib.types.ResourceDeassociationAction;
import org.apache.syncope.common.rest.api.beans.ConnObjectTOListQuery;
import org.apache.syncope.common.rest.api.service.ResourceService;
import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
/**
* Console client for invoking Rest Resources services.
*/
public class ResourceRestClient extends BaseRestClient {
private static final long serialVersionUID = -6898907679835668987L;
public Pair<Boolean, String> check(final ResourceTO resourceTO) {
boolean check = false;
String errorMessage = null;
try {
getService(ResourceService.class).check(resourceTO);
check = true;
} catch (Exception e) {
LOG.error("Connector not found {}", resourceTO.getConnector(), e);
errorMessage = e.getMessage();
}
return Pair.of(check, errorMessage);
}
public ConnObjectTO readConnObject(final String resource, final String anyTypeKey, final String anyKey) {
return getService(ResourceService.class).readConnObject(resource, anyTypeKey, anyKey);
}
public Pair<String, List<ConnObjectTO>> listConnObjects(
final String resource,
final String anyTypeKey,
final int size,
final String pagedResultCookie,
final SortParam<String> sort) {
ConnObjectTOListQuery.Builder builder = new ConnObjectTOListQuery.Builder().
pagedResultsCookie(pagedResultCookie).
size(size).
orderBy(toOrderBy(sort));
final List<ConnObjectTO> result = new ArrayList<>();
String nextPageResultCookie = null;
PagedConnObjectTOResult list;
try {
list = getService(ResourceService.class).listConnObjects(resource, anyTypeKey, builder.build());
result.addAll(list.getResult());
nextPageResultCookie = list.getPagedResultsCookie();
} catch (Exception e) {
LOG.error("While listing objects on {} for any type {}", resource, anyTypeKey, e);
}
return Pair.of(nextPageResultCookie, result);
}
public ResourceTO read(final String name) {
return getService(ResourceService.class).read(name);
}
public List<ResourceTO> list() {
List<ResourceTO> resources = getService(ResourceService.class).list();
Collections.sort(resources, new Comparator<ResourceTO>() {
@Override
public int compare(final ResourceTO o1, final ResourceTO o2) {
return ComparatorUtils.<String>naturalComparator().compare(o1.getKey(), o2.getKey());
}
});
return resources;
}
public ResourceTO create(final ResourceTO resourceTO) {
ResourceService service = getService(ResourceService.class);
Response response = service.create(resourceTO);
return getObject(service, response.getLocation(), ResourceTO.class);
}
public void update(final ResourceTO resourceTO) {
getService(ResourceService.class).update(resourceTO);
}
public void delete(final String name) {
getService(ResourceService.class).delete(name);
}
public BulkActionResult bulkAssociationAction(
final String resourceName, final String anyTypeName,
final ResourceDeassociationAction action, final List<String> anyKeys) {
ResourceDeassociationPatch patch = new ResourceDeassociationPatch();
patch.setKey(resourceName);
patch.setAnyTypeKey(anyTypeName);
patch.setAction(action);
patch.getAnyKyes().addAll(anyKeys);
return getService(ResourceService.class).bulkDeassociation(patch);
}
public void setLatestSyncToken(final String key, final String anyType) {
getService(ResourceService.class).setLatestSyncToken(key, anyType);
}
public void removeSyncToken(final String key, final String anyType) {
getService(ResourceService.class).removeSyncToken(key, anyType);
}
}