All pastes #586594 Raw Edit

Someone

public text v1 · immutable
#586594 ·published 2007-06-23 23:17 UTC
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();
        }
    }

  
}