/**
* Copyright (C) 2012 BonitaSoft S.A.
* BonitaSoft, 32 rue Gustave Eiffel - 38000 Grenoble
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2.0 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.bonitasoft.test.toolkit;
import java.util.List;
import org.bonitasoft.engine.api.ProcessAPI;
import org.bonitasoft.engine.api.TenantAPIAccessor;
import org.bonitasoft.engine.bpm.flownode.ActivityInstanceCriterion;
import org.bonitasoft.engine.bpm.flownode.HumanTaskInstance;
import org.bonitasoft.engine.exception.SearchException;
import org.bonitasoft.engine.search.SearchOptions;
import org.bonitasoft.engine.search.SearchOptionsBuilder;
import org.bonitasoft.engine.session.APISession;
import org.bonitasoft.engine.session.InvalidSessionException;
import org.bonitasoft.test.toolkit.exception.TestToolkitException;
import org.bonitasoft.test.toolkit.organization.TestToolkitCtx;
/**
* @author Vincent Elcrin
*
*/
public final class TestToolkitUtils {
private static class Util {
private static TestToolkitUtils instance;
public static TestToolkitUtils getInstance() {
if (instance == null) {
instance = new TestToolkitUtils();
}
return instance;
}
}
private TestToolkitUtils() {
}
/**
* Singleton
*/
public static TestToolkitUtils getInstance() {
return Util.getInstance();
}
private ProcessAPI getProcessAPI(final APISession apiSession) {
ProcessAPI processAPI = null;
try {
processAPI = TenantAPIAccessor.getProcessAPI(apiSession);
} catch (Exception e) {
throw new TestToolkitException("Can't get process API.", e);
}
return processAPI;
}
// ////////////////////////////////////////////////////////////////////////////
// / Search
// ////////////////////////////////////////////////////////////////////////////
/**
* Search pending tasks for user defined by the api session
*
* @param apiSession
* @param pageIndex
* @param numberOfResults
* @return
*/
public List<HumanTaskInstance> searchPendingTasksForUser(final APISession apiSession, int pageIndex, int numberOfResults) {
final ProcessAPI processAPI = getProcessAPI(apiSession);
SearchOptionsBuilder searchBuilder = new SearchOptionsBuilder(pageIndex, numberOfResults);
SearchOptions searchOptions = searchBuilder.done();
List<HumanTaskInstance> result;
try {
result = processAPI.searchPendingTasksForUser(apiSession.getUserId(), searchOptions)
.getResult();
} catch (Exception e) {
throw new TestToolkitException("Can't search pending tasks for user.", e);
}
return result;
}
/**
* Search pending tasks for the initiator
*
* @param pageIndex
* @param numberOfResults
* @return
*/
public List<HumanTaskInstance> searchPendingTasksForUser(int pageIndex, int numberOfResults) {
return searchPendingTasksForUser(TestToolkitCtx.getInstance().getInitiator().getSession(), pageIndex, numberOfResults);
}
/**
* Get tasks assigned to the user defined by api session
*
* @param apiSession
* @param pageIndex
* @param numberPerPage
* @param criterion
* @return
*/
public List<HumanTaskInstance> getAssignedHumanTaskInstances(final APISession apiSession, int pageIndex, int numberPerPage,
ActivityInstanceCriterion criterion) {
final ProcessAPI processAPI = getProcessAPI(apiSession);
List<HumanTaskInstance> result;
try {
result = processAPI.getAssignedHumanTaskInstances(apiSession.getUserId(), pageIndex, numberPerPage,
criterion);
} catch (Exception e) {
throw new TestToolkitException("Can't search task assigned to <" + apiSession.getUserId() + ">", e);
}
return result;
}
/**
* Get tasks assigned to the initiator
*
* @param pageIndex
* @param numberPerPage
* @param criterion
* @return
*/
public List<HumanTaskInstance> getAssignedHumanTaskInstances(int pageIndex, int numberPerPage,
ActivityInstanceCriterion criterion) {
return getAssignedHumanTaskInstances(TestToolkitCtx.getInstance().getInitiator().getSession(), pageIndex, numberPerPage, criterion);
}
}