67 lines
2.0 KiB
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());
|
|
}
|
|
}
|