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

forklift.deployment.DeploymentWatch Maven / Gradle / Ivy

There is a newer version: 3.7
Show newest version
package forklift.deployment;

import forklift.file.FileScanResult;
import forklift.file.FileScanner;
import forklift.file.FileStatus;
import forklift.properties.PropertiesManager;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * DeploymentWatch ties the file system to the deployment manager. A thread runner will
 * call this watch periodically to determine if any deployments have been created/removed
 * since the last scan.
 * @author mattconroy
 *
 */
public class DeploymentWatch implements Runnable {
    private FileScanner fileScan;
    private DeploymentEvents events;
    private DeploymentManager deploymentManager;
    private PropertiesManager properties;

    public DeploymentWatch(File dir, DeploymentEvents events) {
        this.events = events;

        if (!dir.isDirectory())
            throw new IllegalArgumentException("A directory must be specified to watch");

        fileScan = new FileScanner(dir);
        deploymentManager = new DeploymentManager();
        properties = new PropertiesManager();
    }

    @Override
    public synchronized void run() {
        final List results = fileScan.scan();
        for (FileScanResult result : results) {
            final File file = new File(fileScan.getDir(), result.getFilename());

            boolean jar = file.getName().endsWith(".jar") || file.getName().endsWith(".zip");
            boolean props = file.getName().endsWith(".properties") || file.getName().endsWith(".conf");

            if (result.getStatus() == FileStatus.Removed ||
                result.getStatus() == FileStatus.Modified) {

                if (jar)
                    events.onUndeploy(deploymentManager.unregisterDeployedFile(file));
                else if (props)
                    properties.deregister(file);
            }

            if (result.getStatus() == FileStatus.Added ||
                result.getStatus() == FileStatus.Modified) {
                try {
                    if (jar)
                        events.onDeploy(deploymentManager.registerDeployedFile(file));
                    else if (props)
                        properties.register(file);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * Shutdown all running deployments.
     */
    public synchronized void shutdown() {
        deploymentManager.getAll().stream().forEach(deploy -> events.onUndeploy(deploy));
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy