/*
* eXist Open Source Native XML Database
* Copyright (C) 2010 The eXist Project
* http://exist-db.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* $Id$
*/
package org.exist.netedit;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.attribute.FileTime;
import java.util.TimerTask;
import org.apache.commons.httpclient.HttpException;
import org.exist.util.FileUtils;
/**
* @author Evgeny Gazdovsky (gazdovsky@gmail.com)
*/
public class Listener extends TimerTask{
private long lastModified; // time of last file change
private Task task; // listened task
private Path file; // listened file
private NetEditApplet netEdit;
/**
* Create a listener for task
* @param task listened task
* @param netEdit NetEditApplet
*/
public Listener(Task task, NetEditApplet netEdit){
this.netEdit = netEdit;
this.task = task;
this.file = task.getFile();
this.lastModified = FileUtils.lastModifiedQuietly(file).map(FileTime::toMillis).getOrElse(-1l);
}
/**
* Create a listener for task, used for task loaded from FS
* @param task listened task
* @param netEdit NetEditApplet
* @param lastModified time of last task modification, stored in XML description of task
*/
public Listener(Task task, NetEditApplet netEdit, long lastModified){
this.netEdit = netEdit;
this.task = task;
this.file = task.getFile();
this.lastModified = lastModified;
}
private boolean isModified(){
return FileUtils.lastModifiedQuietly(file).map(FileTime::toMillis).getOrElse(-1l) > this.lastModified;
}
/**
* Listen task's file changes, upload file to server
* and store task description on local FS
*/
public void run() {
if (isModified()){
this.lastModified = FileUtils.lastModifiedQuietly(file).map(FileTime::toMillis).getOrElse(-1l);
try {
netEdit.upload(file, task.getUploadTo());
task.store();
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}