/*
* 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.Date;
import java.util.List;
import org.apache.syncope.common.lib.to.AbstractTaskTO;
import org.apache.syncope.common.lib.to.BulkAction;
import org.apache.syncope.common.lib.to.BulkActionResult;
import org.apache.syncope.common.lib.to.NotificationTaskTO;
import org.apache.syncope.common.lib.to.PropagationTaskTO;
import org.apache.syncope.common.lib.to.PushTaskTO;
import org.apache.syncope.common.lib.to.SchedTaskTO;
import org.apache.syncope.common.lib.to.PullTaskTO;
import org.apache.syncope.common.lib.to.ExecTO;
import org.apache.syncope.common.lib.to.JobTO;
import org.apache.syncope.common.lib.to.PagedResult;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.JobAction;
import org.apache.syncope.common.lib.types.TaskType;
import org.apache.syncope.common.rest.api.beans.ExecuteQuery;
import org.apache.syncope.common.rest.api.beans.ExecQuery;
import org.apache.syncope.common.rest.api.beans.TaskQuery;
import org.apache.syncope.common.rest.api.service.TaskService;
import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
/**
* Console client for invoking Rest Tasks services.
*/
public class TaskRestClient extends BaseRestClient implements ExecutionRestClient {
private static final long serialVersionUID = 6284485820911028843L;
public List<JobTO> listJobs() {
return getService(TaskService.class).listJobs();
}
public void actionJob(final String refKey, final JobAction jobAction) {
getService(TaskService.class).actionJob(refKey, jobAction);
}
public int count(final TaskType kind) {
return getService(TaskService.class).list(
new TaskQuery.Builder(kind).page(1).size(1).build()).getTotalCount();
}
public int count(final String resource, final TaskType kind) {
return getService(TaskService.class).list(
new TaskQuery.Builder(kind).resource(resource).page(1).size(1).build()).getTotalCount();
}
public int count(final AnyTypeKind anyTypeKind, final String entityKey, final TaskType kind) {
return getService(TaskService.class).list(
new TaskQuery.Builder(kind).anyTypeKind(anyTypeKind).entityKey(entityKey).page(1).size(1).build()).
getTotalCount();
}
@Override
public int countExecutions(final String taskKey) {
return getService(TaskService.class).
listExecutions(new ExecQuery.Builder().key(taskKey).page(1).size(1).build()).getTotalCount();
}
public List<PropagationTaskTO> listPropagationTasks(
final String resource, final int page, final int size, final SortParam<String> sort) {
return getService(TaskService.class).
<PropagationTaskTO>list(new TaskQuery.Builder(TaskType.PROPAGATION).
resource(resource).
page(page).size(size).
orderBy(toOrderBy(sort)).build()).
getResult();
}
public List<PropagationTaskTO> listPropagationTasks(
final AnyTypeKind anyTypeKind, final String entityKey,
final int page, final int size, final SortParam<String> sort) {
return getService(TaskService.class).
<PropagationTaskTO>list(new TaskQuery.Builder(TaskType.PROPAGATION).
anyTypeKind(anyTypeKind).entityKey(entityKey).
page(page).size(size).
orderBy(toOrderBy(sort)).build()).
getResult();
}
public List<NotificationTaskTO> listNotificationTasks(
final String notification,
final AnyTypeKind anyTypeKind,
final String entityKey,
final int page,
final int size,
final SortParam<String> sort) {
TaskQuery.Builder builder = new TaskQuery.Builder(TaskType.NOTIFICATION);
if (notification != null) {
builder.notification(notification);
}
if (anyTypeKind != null) {
builder.anyTypeKind(anyTypeKind);
}
if (entityKey != null) {
builder.entityKey(entityKey);
}
PagedResult<NotificationTaskTO> list = getService(TaskService.class).
list(builder.page(page).size(size).orderBy(toOrderBy(sort)).build());
return list.getResult();
}
@SuppressWarnings("unchecked")
public <T extends AbstractTaskTO> List<T> list(
final Class<T> reference, final int page, final int size, final SortParam<String> sort) {
return (List<T>) getService(TaskService.class).
list(new TaskQuery.Builder(getTaskType(reference)).page(page).size(size).
orderBy(toOrderBy(sort)).build()).
getResult();
}
@SuppressWarnings("unchecked")
public <T extends AbstractTaskTO> List<T> list(
final String resource,
final Class<T> reference,
final int page,
final int size,
final SortParam<String> sort) {
return (List<T>) getService(TaskService.class).
list(new TaskQuery.Builder(getTaskType(reference)).page(page).size(size).resource(resource).
orderBy(toOrderBy(sort)).build()).
getResult();
}
@Override
public List<ExecTO> listExecutions(
final String taskKey, final int page, final int size, final SortParam<String> sort) {
return getService(TaskService.class).
listExecutions(new ExecQuery.Builder().key(taskKey).page(page).size(size).
orderBy(toOrderBy(sort)).build()).getResult();
}
private TaskType getTaskType(final Class<?> reference) {
TaskType result = null;
if (PropagationTaskTO.class.equals(reference)) {
result = TaskType.PROPAGATION;
} else if (NotificationTaskTO.class.equals(reference)) {
result = TaskType.NOTIFICATION;
} else if (SchedTaskTO.class.equals(reference)) {
result = TaskType.SCHEDULED;
} else if (PullTaskTO.class.equals(reference)) {
result = TaskType.PULL;
} else if (PushTaskTO.class.equals(reference)) {
result = TaskType.PUSH;
}
return result;
}
public PropagationTaskTO readPropagationTask(final String taskKey) {
return getService(TaskService.class).read(taskKey, false);
}
public NotificationTaskTO readNotificationTask(final String taskKey) {
return getService(TaskService.class).read(taskKey, false);
}
public <T extends SchedTaskTO> T readSchedTask(final Class<T> reference, final String taskKey) {
return getService(TaskService.class).read(taskKey, false);
}
public void delete(final String taskKey, final Class<? extends AbstractTaskTO> taskToClass) {
getService(TaskService.class).delete(taskKey);
}
@Override
public void startExecution(final String taskKey, final Date start) {
startExecution(taskKey, start, false);
}
public void startExecution(final String taskKey, final Date start, final boolean dryRun) {
getService(TaskService.class).execute(
new ExecuteQuery.Builder().key(taskKey).startAt(start).dryRun(dryRun).build());
}
@Override
public void deleteExecution(final String taskExecKey) {
getService(TaskService.class).deleteExecution(taskExecKey);
}
@Override
public List<ExecTO> listRecentExecutions(final int max) {
return getService(TaskService.class).listRecentExecutions(max);
}
public void create(final SchedTaskTO taskTO) {
getService(TaskService.class).create(taskTO);
}
public void update(final SchedTaskTO taskTO) {
getService(TaskService.class).update(taskTO);
}
public BulkActionResult bulkAction(final BulkAction action) {
return getService(TaskService.class).bulk(action);
}
}