/*
* 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 = this.beanService.getBean(DefaultFileMonitor.class);
fileMonitor.setRecursive(true);
fileMonitor.addFile(dirToWatchFO);
fileMonitor.start();
this.fileMonitors.add(fileMonitor);
}
@Override
public void shutdown() {
for(DefaultFileMonitor fm: this.fileMonitors) {
fm.stop();
fm = null;
}
}
@Override
public boolean isPieFileModifiedByUs(PieFile file) {
return this.modifiedFiles.contains(file);
}
}