/*
* Copyright 2012 LinkedIn Corp.
*
* Licensed 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 azkaban.execapp.event;
import azkaban.executor.Status;
publicclassBlockingStatus{
privatestaticfinallong WAIT_TIME = 5 * 60 * 1000;
privatefinalint execId;
privatefinal String jobId;
private Status status;
publicBlockingStatus(finalint execId, final String jobId, final Status initialStatus){
this.execId = execId;
this.jobId = jobId;
this.status = initialStatus;
}
public Status blockOnFinishedStatus(){
if (this.status == null) {
returnnull;
}
while (!Status.isStatusFinished(this.status)) {
synchronized (this) {
try {
this.wait(WAIT_TIME);
} catch (final InterruptedException e) {
}
}
}
returnthis.status;
}
public Status viewStatus(){
returnthis.status;
}
publicvoidunblock(){
synchronized (this) {
this.notifyAll();
}
}
publicvoidchangeStatus(final Status status){
synchronized (this) {
this.status = status;
if (Status.isStatusFinished(status)) {
unblock();
}
}
}
publicintgetExecId(){
returnthis.execId;
}
public String getJobId(){
returnthis.jobId;
}
}