/* * Copyright (c) 2012-2015 iWave Software LLC * All Rights Reserved */ package com.emc.sa.service.vipr.tasks; import com.emc.vipr.client.Task; public abstract class LongRunningTask<T> extends ViPRExecutionTask<Task<T>> { private boolean waitFor; private long timeout = -1; public boolean isWaitFor() { return waitFor; } public void setWaitFor(boolean waitFor) { this.waitFor = waitFor; } public long getTimeout() { return timeout; } public void setTimeout(long timeout) { this.timeout = timeout; } @Override public final Task<T> executeTask() throws Exception { Task<T> task = doExecute(); addOrderIdTag(task.getTaskResource().getId()); if (waitFor) { info("Waiting for task to complete: %s on resource: %s", task.getOpId(), task.getResourceId()); task.waitFor(timeout); } return task; } protected abstract Task<T> doExecute() throws Exception; }