package org.bonitasoft.web.rest.server.datastore.bpm.flownode; import java.util.HashMap; import java.util.Map; import org.bonitasoft.engine.search.Order; import org.bonitasoft.web.rest.model.bpm.flownode.ArchivedActivityItem; import org.bonitasoft.web.rest.model.bpm.flownode.ArchivedTaskDefinition; import org.bonitasoft.web.rest.model.bpm.flownode.ArchivedTaskItem; import org.bonitasoft.web.rest.model.bpm.flownode.TaskItem; import org.bonitasoft.web.rest.server.framework.api.DatastoreHasGet; import org.bonitasoft.web.rest.server.framework.api.DatastoreHasSearch; import org.bonitasoft.web.rest.server.framework.search.ItemSearchResult; import org.bonitasoft.web.toolkit.client.common.exception.api.APIItemNotFoundException; import org.bonitasoft.web.toolkit.client.data.APIID; import org.bonitasoft.web.toolkit.client.data.item.IItem; /** * @author Vincent Elcrin */ public class TaskFinder { private final DatastoreHasGet<TaskItem> journal; private final DatastoreHasSearch<ArchivedTaskItem> archives; public TaskFinder(final DatastoreHasGet<TaskItem> journal, final DatastoreHasSearch<ArchivedTaskItem> archives) { this.journal = journal; this.archives = archives; } public IItem find(final APIID taskId) { try { return journal.get(taskId); } catch (final APIItemNotFoundException e) { final Map<String, String> filters = new HashMap<String, String>(); filters.put(ArchivedActivityItem.ATTRIBUTE_SOURCE_OBJECT_ID, taskId.toString()); final ItemSearchResult<ArchivedTaskItem> result = archives.search(0, 1, null, ArchivedActivityItem.ATTRIBUTE_ARCHIVED_DATE + " " + Order.DESC, filters); if (result.getResults().isEmpty()) { throw new APIItemNotFoundException(ArchivedTaskDefinition.TOKEN, taskId); } return result.getResults().get(0); } } }