package org.dcache.webadmin.view.beans;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Ordering;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* Representation of a Pool-Group
* @author jans
*/
public class PoolGroupBean implements Comparable<PoolGroupBean>, Serializable {
private static final long serialVersionUID = -8750211605825234643L;
/** this PoolBeans are a representation of the whole Group - so to say the sum of
* all Pools in this Group
*/
private PoolSpaceBean _poolGroupSpace = new PoolSpaceBean();
private PoolQueueBean _totalMovers = new PoolQueueBean();
private List<CellServicesBean> _cellStatuses;
private List<PoolSpaceBean> _poolSpaces;
private List<PoolQueueBean> _poolQueues;
private List<String> _allPoolQueueNames = new ArrayList<>();
public PoolGroupBean(String name, List<PoolSpaceBean> poolSpaces,
List<PoolQueueBean> poolQueues) {
_poolGroupSpace.setName(name);
_poolSpaces = poolSpaces;
_poolQueues = poolQueues;
calculateGroupValues();
calculateTotalMovers();
}
private void calculateGroupValues() {
_poolGroupSpace.setEnabled(true);
if (_poolSpaces != null) {
for (PoolSpaceBean pool : _poolSpaces) {
_poolGroupSpace.addPoolSpace(pool);
// if one of the pools of the group is disabled the whole group
// counts as disabled
if (!pool.isEnabled()) {
_poolGroupSpace.setEnabled(false);
}
}
}
}
private void calculateTotalMovers() {
_allPoolQueueNames = new ArrayList<>();
if (_poolQueues != null) {
for (PoolQueueBean pool : _poolQueues) {
for (PoolRequestQueue queue : pool.getMoverQueues().values()) {
PoolRequestQueue totalsQueue = _totalMovers.getMoverQueues().
get(queue.getName());
if (totalsQueue != null) {
totalsQueue.addQueue(queue);
} else {
totalsQueue = new PoolRequestQueue(queue.getName(),
queue.getActive(), queue.getMax(), queue.getQueued());
_totalMovers.addRequestQueue(totalsQueue);
_allPoolQueueNames.add(queue.getName());
}
}
}
} else {
_totalMovers = new PoolQueueBean();
}
_totalMovers.setName("Total");
_totalMovers.setDomainName("Total");
}
public String getName() {
return _poolGroupSpace.getName();
}
public void setName(String name) {
_poolGroupSpace.setName(name);
}
public void setEnabled(boolean enabled) {
_poolGroupSpace.setEnabled(enabled);
}
public boolean isEnabled() {
return _poolGroupSpace.isEnabled();
}
public long getUsedSpace() {
return _poolGroupSpace.getUsedSpace();
}
public long getTotalSpace() {
return _poolGroupSpace.getTotalSpace();
}
public long getPreciousSpace() {
return _poolGroupSpace.getPreciousSpace();
}
public long getFreeSpace() {
return _poolGroupSpace.getFreeSpace();
}
public float getPercentageFree() {
return _poolGroupSpace.getPercentageFree();
}
public float getPercentagePrecious() {
return _poolGroupSpace.getPercentagePrecious();
}
public float getPercentageRemovable() {
return _poolGroupSpace.getPercentageRemovable();
}
public float getPercentagePinned() {
return _poolGroupSpace.getPercentagePinned();
}
public List<CellServicesBean> getCellStatuses() {
return _cellStatuses;
}
public void setCellStatuses(List<CellServicesBean> cellStatuses) {
_cellStatuses = cellStatuses;
}
public List<PoolSpaceBean> getPoolSpaces() {
return _poolSpaces;
}
public void setPoolSpaces(List<PoolSpaceBean> pools) {
_poolSpaces = pools;
calculateGroupValues();
}
public List<PoolQueueBean> getPoolQueues() {
return _poolQueues;
}
public void setPoolQueues(List<PoolQueueBean> queues) {
_poolQueues = queues;
calculateTotalMovers();
}
public List<String> getAllPoolQueueNames() {
return _allPoolQueueNames;
}
public PoolQueueBean getTotalMovers() {
return _totalMovers;
}
@Override
public int hashCode() {
return getName().hashCode();
}
@Override
public boolean equals(Object other) {
if (other == this) {
return true;
}
if (!(other instanceof PoolGroupBean)) {
return false;
}
PoolGroupBean otherBean = (PoolGroupBean) other;
return getName().equals(otherBean.getName());
}
@Override
public int compareTo(PoolGroupBean other) {
return ComparisonChain.start()
.compare(getName(), other.getName(),
Ordering.natural().nullsLast())
.result();
}
}