/*
* Copyright (c) 2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.systemservices.impl.resource;
import java.util.concurrent.LinkedBlockingQueue;
/**
* This util tracks status of object that has a queue.
*
* @author luoq1
*
*/
public class StatusQueueRecord {
public static final int STATUS_READY = 0; // Initial state
public static final int STATUS_ACTIVE = 1;// In progress
public static final int STATUS_CLEARED = 2;// Cleared
public static final int STATUS_FINISHED = 3;// Done - No longer
public static final int STATUS_DISABLED = 4;// Disabled, special condition
public static final int STATUS_UNKNOWN = -1;
private String id;
private Object target;
private final LinkedBlockingQueue<Object> queue;
private int status;
private String description;
public StatusQueueRecord(String i, Object o, int st, int size) {
setId(i);
setTarget(o);
setStatus(st);
queue = new LinkedBlockingQueue<Object>();
}
public String getId() {
return id;
}
private void setId(String id) {
this.id = id;
}
public Object getTarget() {
return target;
}
public synchronized void setTarget(Object target) {
this.target = target;
}
public synchronized int getStatus() {
return status;
}
public synchronized void setStatus(int status) {
this.status = status;
}
public synchronized String getDescription() {
return description;
}
public synchronized void setDescription(String description) {
this.description = description;
}
public boolean isActive() {
return (getStatus() == STATUS_ACTIVE);
}
public boolean isFinished() {
return (getStatus() == STATUS_FINISHED);
}
public boolean isReady() {
return (getStatus() == STATUS_READY);
}
public boolean isDisabled() {
return (getStatus() == STATUS_DISABLED);
}
public boolean isClear() {
return (getStatus() == STATUS_CLEARED);
}
public LinkedBlockingQueue<Object> getQueue() {
return queue;
}
public void addRecord(Object entry) {
queue.add(entry);
}
public Object getNextRecord() {
return queue.remove();
}
public boolean isEmpty() {
return (isClear() || isReady());
}
public boolean isFull() {
return (queue.remainingCapacity() == 0);
}
}