package org.mafagafogigante.dungeon.util;
import org.mafagafogigante.dungeon.game.ColoredString;
import org.mafagafogigante.dungeon.game.DungeonString;
import org.mafagafogigante.dungeon.game.Writable;
import org.mafagafogigante.dungeon.io.Converter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* SystemInformation class used to retrieve human readable information about the system on which the application is
* running.
*
* <p>The information is generated at construction time, therefore the caller should not cache objects of this class.
*/
public final class SystemInformation extends Writable {
private final DungeonString information = compileInformation();
private static String getUserString() {
return System.getProperty("user.name");
}
private static String getMemoryInformation() {
Runtime runtime = Runtime.getRuntime();
String used = Converter.bytesToHuman(runtime.totalMemory() - runtime.freeMemory());
String total = Converter.bytesToHuman(runtime.totalMemory());
return "Using " + used + " out of the allocated " + total;
}
private static String getJavaVersionString() {
return "Java version " + System.getProperty("java.version") + " by " + System.getProperty("java.vendor");
}
private static String getOsVersionString() {
String name = System.getProperty("os.name");
String arch = System.getProperty("os.arch");
String version = System.getProperty("os.version");
return String.format("%s (%s) %s", name, arch, version);
}
private DungeonString compileInformation() {
Date currentDate = new Date();
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String time = timeFormat.format(currentDate);
String date = dateFormat.format(currentDate);
DungeonString dungeonString = new DungeonString();
dungeonString.append("User: ", getUserString(), "\n");
dungeonString.append("Time: ", time, "\n");
dungeonString.append("Date: ", date, "\n");
dungeonString.append("Java: ", getJavaVersionString(), "\n");
dungeonString.append("Heap: ", getMemoryInformation(), "\n");
dungeonString.append("OS: ", getOsVersionString());
return dungeonString;
}
@Override
public List<ColoredString> toColoredStringList() {
return information.toColoredStringList();
}
@Override
public String toString() {
return toJavaString();
}
}