All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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