/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.cluster.execution.internal;
import java.util.concurrent.BlockingQueue;
import de.rcenvironment.components.cluster.common.ClusterComponentConstants;
import de.rcenvironment.core.utils.cluster.ClusterJobInformation.ClusterJobState;
import de.rcenvironment.core.utils.cluster.ClusterJobStateChangeListener;
/**
* Listens for cluster job states (Completed and Unknown) to finish component run.
* @author Doreen Seider
*/
public class ClusterJobFinishListener implements ClusterJobStateChangeListener {
private final BlockingQueue<String> synchronousQueue;
public ClusterJobFinishListener(BlockingQueue<String> synchronousQueue) {
this.synchronousQueue = synchronousQueue;
}
@Override
public boolean onClusterJobStateChanged(ClusterJobState state) {
boolean continueListening = true;
if (state == null) {
try {
synchronousQueue.put(ClusterComponentConstants.CLUSTER_FETCHING_FAILED);
} catch (InterruptedException e) {
throw new RuntimeException("Waiting for job become completed failed", e);
}
continueListening = false;
} else if (state.equals(ClusterJobState.Completed) || state.equals(ClusterJobState.Unknown)) {
try {
synchronousQueue.put(state.name());
} catch (InterruptedException e) {
throw new RuntimeException("Waiting for job become completed failed", e);
}
continueListening = false;
}
return continueListening;
}
}