org.pieShare.pieShareApp.service.fileService.fileListenerService.ApacheFileWatcherService.java Source code

Java tutorial

Introduction

Here is the source code for org.pieShare.pieShareApp.service.fileService.fileListenerService.ApacheFileWatcherService.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.pieShare.pieShareApp.service.fileService.fileListenerService;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.VFS;
import org.apache.commons.vfs2.impl.DefaultFileMonitor;
import org.pieShare.pieShareApp.model.PieShareAppBeanNames;
import org.pieShare.pieShareApp.model.PieShareConfiguration;
import org.pieShare.pieShareApp.model.PieUser;
import org.pieShare.pieShareApp.model.message.FileListRequestMessage;
import org.pieShare.pieShareApp.model.pieFile.PieFile;
import org.pieShare.pieShareApp.service.fileService.fileListenerService.api.IFileListenerService;
import org.pieShare.pieShareApp.service.fileService.fileListenerService.api.IFileWatcherService;
import org.pieShare.pieTools.piePlate.service.cluster.api.IClusterManagementService;
import org.pieShare.pieTools.piePlate.service.cluster.event.ClusterAddedEvent;
import org.pieShare.pieTools.piePlate.service.cluster.event.IClusterAddedListener;
import org.pieShare.pieTools.piePlate.service.cluster.exception.ClusterManagmentServiceException;
import org.pieShare.pieTools.pieUtilities.service.beanService.IBeanService;
import org.pieShare.pieTools.pieUtilities.service.pieLogger.PieLogger;
import org.pieShare.pieTools.pieUtilities.service.shutDownService.api.IShutdownableService;

/**
 *
 * @author Richard
 */
public class ApacheFileWatcherService implements IFileWatcherService {

    private IBeanService beanService;

    private List<DefaultFileMonitor> fileMonitors;
    //todo: does the part with modified files belong in here or maybe even into the listener?
    //if into the listener: how will changes be propageted to the right listener?
    private List<PieFile> modifiedFiles;

    public void setBeanService(IBeanService beanService) {
        this.beanService = beanService;
    }

    public void init() {
        this.fileMonitors = new ArrayList();
        this.modifiedFiles = Collections.synchronizedList(new ArrayList<>());
    }

    @Override
    public void addPieFileToModifiedList(PieFile pieFile) {
        this.modifiedFiles.add(pieFile);
    }

    @Override
    public boolean removePieFileFromModifiedList(PieFile file) {
        return this.modifiedFiles.remove(file);
    }

    @Override
    public void watchDir(File file) throws IOException {

        FileSystemManager fileSystemManager = VFS.getManager();
        FileObject dirToWatchFO = null;
        dirToWatchFO = fileSystemManager.resolveFile(file.getAbsolutePath());

        IFileListenerService fileListener = this.beanService.getBean(ApacheDefaultFileListener.class);
        DefaultFileMonitor fileMonitor = new DefaultFileMonitor(fileListener);

        fileMonitor.setRecursive(true);
        fileMonitor.addFile(dirToWatchFO);
        fileMonitor.start();

        this.fileMonitors.add(fileMonitor);
    }

    @Override
    public void shutdown() {
        for (DefaultFileMonitor fm : this.fileMonitors) {
            fm.stop();
        }
    }

    @Override
    public boolean isPieFileModifiedByUs(PieFile file) {
        return this.modifiedFiles.contains(file);
    }
}