package org.dcache.webadmin.view.beans; import com.google.common.collect.ComparisonChain; import com.google.common.collect.Ordering; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.Serializable; import diskCacheV111.pools.PoolV2Mode; import org.dcache.webadmin.view.util.DiskSpaceUnit; /** * Bean for the PoolUsage Page. Contains information concerning pools like * total space, name, domain etc. * @author jans */ public class PoolSpaceBean implements Comparable<PoolSpaceBean>, Serializable { private static final Float ROUNDING_FACTOR = 10F; private static final Logger _log = LoggerFactory.getLogger(PoolSpaceBean.class); private static final long serialVersionUID = -2932451489426746640L; private String _name = ""; private String _domainName = ""; private boolean _enabled; private PoolV2Mode _poolMode = new PoolV2Mode(); private boolean _selected; private long _freeSpace; private long _preciousSpace; private long _totalSpace; private long _removableSpace; private long _usedSpace; private float _percentagePrecious; private float _percentageFree; private float _percentagePinned; private float _percentageRemovable; private DiskSpaceUnit _displayUnit = DiskSpaceUnit.MIBIBYTES; private boolean pending = false; public PoolSpaceBean() { calculatePercentages(); _log.debug("poolBean created"); } private void calculatePercentages() { // didn't take care for the case of // sum(usedSpace + freeSpace) > totalSpace // if pool has zero total space all are set to zero but free to 100% if (_totalSpace == 0) { setPercentagesForEmptyPool(); } else { _percentagePrecious = calculatePercentage(_preciousSpace, _totalSpace); _percentageFree = calculatePercentage(_freeSpace, _totalSpace); _percentageRemovable = calculatePercentage(_removableSpace, _totalSpace); _percentagePinned = 100F - _percentagePrecious - _percentageFree - _percentageRemovable; } } private void setPercentagesForEmptyPool() { _percentagePinned = 0; _percentageRemovable = 0; _percentagePrecious = 0; _percentageFree = 100; } private float calculatePercentage(float absoluteValue, float total) { float unrounded = absoluteValue / total * 100; return roundPercentage(unrounded); } private float roundPercentage(float percentage) { return Math.round((percentage * ROUNDING_FACTOR)) / ROUNDING_FACTOR; } public void addPoolSpace(PoolSpaceBean poolToAdd) { if (poolToAdd == null) { throw new IllegalArgumentException(); } _totalSpace += poolToAdd._totalSpace; _freeSpace += poolToAdd._freeSpace; _preciousSpace += poolToAdd._preciousSpace; _usedSpace += poolToAdd._usedSpace; _removableSpace += poolToAdd._removableSpace; calculatePercentages(); } public void setName(String name) { _name = name; } public String getName() { return _name; } public void setEnabled(boolean enabled) { _enabled = enabled; } public boolean isEnabled() { return _enabled; } public boolean isStatePending() { return pending; } public void setStatePending(boolean pending) { this.pending = pending; } public float getPercentageFree() { return _percentageFree; } public float getPercentagePrecious() { return _percentagePrecious; } public float getPercentagePinned() { return _percentagePinned; } public float getPercentageRemovable() { return _percentageRemovable; } public long getUsedSpace() { return DiskSpaceUnit.BYTES.convert(_usedSpace, _displayUnit); } public void setUsedSpace(long usedSpace) { _usedSpace = usedSpace; calculatePercentages(); } public long getTotalSpace() { return DiskSpaceUnit.BYTES.convert(_totalSpace, _displayUnit); } public void setTotalSpace(long totalSpace) { _totalSpace = totalSpace; calculatePercentages(); } public long getPreciousSpace() { return DiskSpaceUnit.BYTES.convert(_preciousSpace, _displayUnit); } public void setPreciousSpace(long preciousSpace) { _preciousSpace = preciousSpace; calculatePercentages(); } public long getFreeSpace() { return DiskSpaceUnit.BYTES.convert(_freeSpace, _displayUnit); } public void setFreeSpace(long freeSpace) { _freeSpace = freeSpace; calculatePercentages(); } public long getRemovableSpace() { return DiskSpaceUnit.BYTES.convert(_removableSpace, _displayUnit); } public void setRemovableSpace(long removableSpace) { _removableSpace = removableSpace; calculatePercentages(); } public String getDomainName() { return _domainName; } public void setDomainName(String domainName) { _domainName = domainName; } public boolean isSelected() { return _selected; } public void setSelected(boolean selected) { _selected = selected; } public PoolV2Mode getPoolMode() { return _poolMode; } public void setPoolMode(PoolV2Mode poolMode) { _poolMode = poolMode; } @Override public int compareTo(PoolSpaceBean other) { return ComparisonChain.start() .compare(getName(), other.getName(), Ordering.natural().nullsLast()) .result(); } @Override public int hashCode() { return _name.hashCode(); } /** * only considering the names, since pools are well-known cells and have to * have a unique name */ @Override public boolean equals(Object testObject) { if (this == testObject) { return true; } if (!(testObject instanceof PoolSpaceBean)) { return false; } PoolSpaceBean otherPoolBean = (PoolSpaceBean) testObject; if (!(otherPoolBean._name.equals(_name))) { return false; } return true; } }