package diskCacheV111.services.space;
import java.io.Serializable;
import java.util.Date;
import diskCacheV111.util.AccessLatency;
import diskCacheV111.util.RetentionPolicy;
public class Space implements Serializable {
private static final long serialVersionUID = -1935368561781812540L;
private final long id;
private String voGroup;
private String voRole;
private RetentionPolicy retentionPolicy;
private AccessLatency accessLatency;
private long linkGroupId;
private long sizeInBytes;
private final long usedSizeInBytes;
private final long allocatedSpaceInBytes;
private long creationTime;
private Long expirationTime;
private String description;
private SpaceState state;
public Space(
long id,
String voGroup,
String voRole,
RetentionPolicy retentionPolicy,
AccessLatency accessLatency,
long linkGroupId,
long sizeInBytes,
long creationTime,
Long expirationTime,
String description,
SpaceState state,
long used,
long allocated)
{
this.id = id;
this.voGroup = voGroup;
this.voRole = voRole;
this.retentionPolicy = retentionPolicy;
this.accessLatency = accessLatency;
this.linkGroupId = linkGroupId;
this.sizeInBytes = sizeInBytes;
this.creationTime = creationTime;
this.expirationTime = expirationTime;
this.description = description;
this.state = state;
this.usedSizeInBytes = used;
this.allocatedSpaceInBytes = allocated;
}
public long getId() {
return id;
}
public long getLinkGroupId() {
return linkGroupId;
}
public void setLinkGroupId(long linkGroupId) {
this.linkGroupId = linkGroupId;
}
public long getSizeInBytes() {
return sizeInBytes;
}
public void setSizeInBytes(long sizeInBytes) {
long usedSpace = getUsedSizeInBytes() + getAllocatedSpaceInBytes();
if (sizeInBytes < usedSpace) {
throw new IllegalStateException(
"Cannot downsize space reservation below " + usedSpace + " bytes, release files first.");
}
this.sizeInBytes = sizeInBytes;
}
public long getCreationTime() {
return creationTime;
}
public void setCreationTime(long creationTime) {
this.creationTime = creationTime;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public SpaceState getState() {
return state;
}
public void setState(SpaceState state) {
if (this.state.isFinal()) {
throw new IllegalStateException(
"Change from " + this.state + " to " + state + " is not allowed.");
}
this.state = state;
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(id).append(' ');
sb.append("voGroup:").append(voGroup).append(' ');
sb.append("voRole:").append(voRole).append(' ');
sb.append("retentionPolicy:").append(retentionPolicy.toString()).append(' ');
sb.append("accessLatency:").append(accessLatency.toString()).append(' ');
sb.append("linkGroupId:").append(linkGroupId).append(' ');
sb.append("size:").append(sizeInBytes).append(' ');
sb.append("created:").append(new Date(creationTime)).append(' ');
sb.append("lifetime:").append(expirationTime == null ? -1 : expirationTime - creationTime).append("ms ");
sb.append("expiration:").append(expirationTime == null ? "NEVER" : new Date(expirationTime)).append(' ');
sb.append("description:").append(description).append(' ');
sb.append("state:").append(state).append(' ');
sb.append("used:").append(usedSizeInBytes).append(' ');
sb.append("allocated:").append(allocatedSpaceInBytes).append(' ');
return sb.toString();
}
public String getVoGroup() {
return voGroup;
}
public void setVoGroup(String voGroup) {
this.voGroup = voGroup;
}
public String getVoRole() {
return voRole;
}
public void setVoRole(String voRole) {
this.voRole = voRole;
}
public RetentionPolicy getRetentionPolicy() {
return retentionPolicy;
}
public void setRetentionPolicy(RetentionPolicy retentionPolicy) {
this.retentionPolicy = retentionPolicy;
}
public AccessLatency getAccessLatency() {
return accessLatency;
}
public void setAccessLatency(AccessLatency accessLatency) {
this.accessLatency = accessLatency;
}
public long getUsedSizeInBytes() {
return usedSizeInBytes;
}
public long getAllocatedSpaceInBytes() {
return allocatedSpaceInBytes;
}
public long getAvailableSpaceInBytes() {
return sizeInBytes-usedSizeInBytes-allocatedSpaceInBytes;
}
public Long getExpirationTime() {
return expirationTime;
}
public void setExpirationTime(Long expirationTime)
{
this.expirationTime = expirationTime;
}
}