Files
pcinv/src/main/java/be/seeseepuff/pcinv/meta/CapacityInfo.java

67 lines
2.0 KiB
Java

package be.seeseepuff.pcinv.meta;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.Arrays;
import java.util.Comparator;
/**
* Represents a capacity in bytes, with various units for display.
* This class is used to encapsulate the capacity information and provide
* a way to represent it in different units.
*/
@Getter
@RequiredArgsConstructor
public class CapacityInfo {
private final long capacity;
private final CapacityUnit idealUnit;
public static CapacityInfo of(long capacity, CapacityUnit idealUnit) {
return new CapacityInfo(capacity, idealUnit);
}
public static CapacityInfo of(long capacity) {
return of(capacity, idealUnitForCapacity(capacity, CapacityUnit.values()));
}
public static CapacityInfo ofSI(long capacity) {
return of(capacity, idealUnitForCapacity(capacity, CapacityUnit.SI_UNITS));
}
public static CapacityInfo ofIEC(long capacity) {
return of(capacity, idealUnitForCapacity(capacity, CapacityUnit.IEC_UNITS));
}
public static CapacityInfo of(long capacity, boolean iec, boolean si) {
if (iec && !si) {
return ofIEC(capacity);
} else if (si && !iec) {
return ofSI(capacity);
} else {
return of(capacity);
}
}
public static CapacityUnit idealUnitForCapacity(long capacity, CapacityUnit[] units) {
if (capacity <= 0) {
return CapacityUnit.BYTES; // Default to bytes for non-positive capacities
}
return Arrays.stream(units)
.sorted(Comparator.comparing(CapacityUnit::getBytes).reversed())
.filter(unit -> capacity % unit.getBytes() == 0)
.findFirst()
.orElse(CapacityUnit.BYTES);
}
public long getCapacityInUnit() {
return capacity / idealUnit.getBytes();
}
@Override
public String toString() {
return String.format("%d %s", capacity / idealUnit.getBytes(), idealUnit.getDisplayName());
}
}