
automately.core.file.VirtualFileService Maven / Gradle / Ivy
package automately.core.file;
import automately.core.file.stores.AmazonS3Store;
import automately.core.services.core.AutomatelyService;
import com.hazelcast.core.IMap;
import io.jcluster.core.Cluster;
import io.jsync.buffer.Buffer;
import io.jsync.json.JsonObject;
/**
* FileConductor is a service that is used to conduct some extra things
* for our VirtualFile API.
*/
public class VirtualFileService extends AutomatelyService {
public static String DEFAULT_STORE = "aws";
/**
* By default this is null. If it is null we will store the data directly.
*/
private static VirtualFileStore fileStore = null;
public static VirtualFileStore getFileStore() {
return fileStore;
}
public static void setFileStore(VirtualFileStore fileStore) {
if (fileStore == null) {
throw new NullPointerException("The fileStore cannot be null!");
}
VirtualFileService.fileStore = fileStore;
}
@Override
public void start(Cluster owner) {
String store = coreConfig().getObject("file", new JsonObject()).getString("store", DEFAULT_STORE);
// TODO Let us change the store type
if (store.equals("aws")) {
VirtualFileService.setFileStore(new AmazonS3Store());
} else {
/*try {
String className = store;
ClassLoader classLoader = getClass().getClassLoader();
Class clazz = classLoader.loadClass(className);
if(clazz != null){
if(DataType.class.isAssignableFrom(clazz)){
Method method = clazz.getMethod("loadJson", JsonObject.class);
Object newInstance = clazz.newInstance();
method.invoke(newInstance, value);
return newInstance;
}
}
} catch (Exception e){
e.printStackTrace();
// TODO through fatal error
}*/
}
// TODO support class
if (fileStore == null) {
owner.logger().fatal("No FileStore was found!");
System.exit(-1);
return;
}
fileStore.initialize(cluster());
owner.logger().info("Initializing the VirtualFileSystem.");
VirtualFileSystem.initialize(owner);
IMap persistentGlobalTmpData = owner.data().persistentMap("global.temp.data");
persistentGlobalTmpData.loadAll(true);
if (!persistentGlobalTmpData.containsKey("checked_empty_files")) {
owner.logger().info("Checking for files with a size of 0 and ensuring they are not empty.");
try {
IMap files = owner.data().persistentMap("files");
for (VirtualFile file : files.values()) {
if (file.size == 0) {
Buffer data = VirtualFileSystem.readFileData(file);
if (data != null) {
file.size = data.length();
}
VirtualFileSystem.putUserFile(file.userToken, file);
}
}
} catch (Exception e) {
e.printStackTrace();
}
persistentGlobalTmpData.put("checked_empty_files", true);
}
}
@Override
public void stop() {
fileStore.stop();
}
@Override
public String name() {
return getClass().getCanonicalName();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy