package com.constellio.app.services.systemProperties;
import java.io.File;
import com.constellio.data.io.services.facades.IOServices;
import com.constellio.model.conf.FoldersLocator;
public class SystemPropertiesServices {
private static final String TEST_FOLDER_NAME = SystemPropertiesServices.class.getName() + "-testFolderName";
final FoldersLocator foldersLocator;
final IOServices ioServices;
public SystemPropertiesServices(FoldersLocator foldersLocator, IOServices ioServices) {
this.foldersLocator = foldersLocator;
this.ioServices = ioServices;
}
public boolean isFreeSpaceInSettingsFolderGreaterOrEqualTo(long spaceInMo) {
return isFreeSpaceLowerThan(this.foldersLocator.getDefaultSettingsFolder(), spaceInMo);
}
public boolean isFreeSpaceInTempFolderLowerThan(double spaceInGig) {
File folder = ioServices.newTemporaryFolder(TEST_FOLDER_NAME);
boolean returnBoolean = isFreeSpaceLowerThan(folder, spaceInGig);
ioServices.deleteQuietly(folder);
return returnBoolean;
}
public boolean isFreeSpaceLowerThan(File existingFile, double spaceInGig){
long availableSpaceInGig = getAvailableSpaceInGig(existingFile);
return availableSpaceInGig < spaceInGig;
}
public long getAvailableSpaceInGig(File existingFile) {
if(!existingFile.exists()){
throw new RuntimeException("File does not exist " + existingFile.getPath());
}
long availableSpaceInBytes = existingFile.getUsableSpace();
return availableSpaceInBytes/1073741824;//1024*1024*1024
}
public boolean isAvailableMemoryLowerThan(long requiredMemoryInMo) {
long freeMemoryInMo = getFreeMemoryInMo();
return freeMemoryInMo < requiredMemoryInMo;
}
public long getFreeMemoryInMo() {
System.gc();
long freeMemoryInBytes = Runtime.getRuntime().freeMemory();
return freeMemoryInBytes/1048576;//1024*1024
}
public double getFileSizeInGig(File file) {
long tlFileSizeInBytes = file.length();
return (double)tlFileSizeInBytes/1073741824;//1024*1024*1024
}
}