rendered paste body/*
* parcours.java
*
* Created on 17 juin 2007, 20:24
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package jsaveme.func;
import java.io.File;
import java.io.IOException;
import java.util.*;
//import java.io.*;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import jsaveme.db.entities.Filelisting;
import jsaveme.db.entities.Task;
/**
* @author javapractices.com
* @author Alex Wong
*/
public final class Parcours {
private final static boolean unix = (System.getProperty("os.name").compareTo("Windows")!=0 ? true : false);
private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("JSaveMePU");
private static Task task = null;
/**
* Demonstrate use.
*/
public Parcours() {
}
public static void main (String[] args) {
Task test = new Task(0);
test.setSourceDirectory("/home/remi/Desktop/TEST JSAVEME/SOURCE");
test.setDestinationDirectory("/home/remi/Desktop/TEST JSAVEME/DESTINATION");
List<File> result = parcours (test);
//em.close();
}
public static List<File> parcours (Task t) {
task = t;
parcoursSrc (new File (t.getSourceDirectory()));
return parcoursDest(new File (t.getDestinationDirectory()));
}
private static List<File> parcoursSrc (File current) {
List<File> result = new ArrayList ();
File[] files = current.listFiles();
List<File> ls = Arrays.asList(files);
Iterator li = ls.listIterator();
File file = null;
while (li.hasNext()) {
file = (File)li.next();
// PREFIXLESSPATH
String findPath = file.getPath().replaceFirst(task.getSourceDirectory(), "");
// STDOUT
System.out.println(file.getPath()+"\t"+task.getSourceDirectory()+findPath);
// QUEL MODIFICATION VA ETRE EFFECTUER LORS DE LA SYNCRO SRC -> DEST
File destfile = new File(task.getDestinationDirectory()+findPath);
String updateAction = "no";
if (destfile.exists()) {
if (destfile.lastModified()<file.lastModified()) {
if (!destfile.isDirectory())
updateAction = "cp";
}
} else {
if (!file.isDirectory())
updateAction = "cp";
else
updateAction = "md";
}
if (updateAction.compareTo("no")!=0) {
Filelisting filedb = new Filelisting();
filedb.setIdtask(task.getId());
filedb.setFilename(findPath);
filedb.setFiledate(Long.toString(file.lastModified()));
filedb.setFiletype((file.isDirectory() ? 'd' : 'f'));
filedb.setUpdateaction(updateAction);
persist(filedb);
}
//...
if (file.isDirectory() && !isLink(file)) {
List<File> downlist = parcoursSrc(file);
result.addAll(downlist);
}
}
Collections.sort(result);
return result;
}
private static List<File> parcoursDest (File current) {
List<File> result = new ArrayList ();
File[] files = (File[]) current.listFiles();
List<File> ls = Arrays.asList(files);
Iterator li = ls.listIterator();
File file = null;
while (li.hasNext()) {
file = (File)li.next();
// PREFIXLESSPATH
String findPath = file.getPath().replaceFirst(task.getDestinationDirectory(), "");
// STDOUT
System.out.println(file.getPath()+"\t"+task.getSourceDirectory()+findPath);
// QUEL MODIFICATION VA ETRE EFFECTUER LORS DE LA SYNCRO SRC -> DEST
File srcfile = new File(task.getSourceDirectory()+findPath);
String updateAction = "no";
if (!srcfile.exists())
updateAction = "rm";
if (updateAction.compareTo("no")!=0) {
Filelisting filedb = new Filelisting();
filedb.setIdtask(task.getId());
filedb.setFilename(findPath);
filedb.setFiledate(Long.toString(file.lastModified()));
filedb.setFiletype((file.isDirectory() ? 'd' : 'f'));
filedb.setUpdateaction(updateAction);
persist(filedb);
}
//...
if (file.isDirectory() && !isLink(file)) {
List<File> downlist = parcoursDest(file);
result.addAll(downlist);
}
}
Collections.sort(result);
return result;
}
private static boolean isLink (File file) {
boolean islink = false;
if (file.exists()) {
try {
String can = file.getCanonicalPath();
String abs = file.getAbsolutePath();
islink = (!abs.equals(can)? true : false);
} catch (IOException ex) {
ex.printStackTrace();
}
}
return islink;
}
// PERSISTENCE
private static void persist(Object object) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
try {
em.persist(object);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
em.close();
}
}
}