From 79979bb41de50c8975a024f722c83227a9a1ec64 Mon Sep 17 00:00:00 2001
From: Ivan Olexyn <ivan@olexyn.com>
Date: Sun, 17 May 2020 11:23:30 +0200
Subject: [PATCH] ~ cleanup

---
 src/com/olexyn/ensync/Execute.java            |   4 +-
 src/com/olexyn/ensync/Flow.java               |  32 ++---
 src/com/olexyn/ensync/Tools.java              |   3 +
 .../ensync/artifacts/SyncDirectory.java       | 133 ++++++++----------
 src/com/olexyn/ensync/artifacts/SyncFile.java |  19 ++-
 src/com/olexyn/ensync/artifacts/SyncMap.java  |   3 -
 6 files changed, 95 insertions(+), 99 deletions(-)

diff --git a/src/com/olexyn/ensync/Execute.java b/src/com/olexyn/ensync/Execute.java
index 2937bf3..dc4a036 100644
--- a/src/com/olexyn/ensync/Execute.java
+++ b/src/com/olexyn/ensync/Execute.java
@@ -29,8 +29,8 @@ public class Execute {
 
     public void executeBatch(List<String[]> batch){
 
-        for (int i =0; i<batch.size();i++){
-            execute(batch.get(i));
+        for (String[] strings : batch) {
+            execute(strings);
         }
 
     }
diff --git a/src/com/olexyn/ensync/Flow.java b/src/com/olexyn/ensync/Flow.java
index 6f57b20..56659cd 100644
--- a/src/com/olexyn/ensync/Flow.java
+++ b/src/com/olexyn/ensync/Flow.java
@@ -9,7 +9,7 @@ import static com.olexyn.ensync.Main.MAP_OF_SYNCMAPS;
 public class Flow implements Runnable {
 
 
-
+    Tools tools = new Tools();
 
 
     private String state;
@@ -27,22 +27,22 @@ public class Flow implements Runnable {
                 for (var syncMapEntry : MAP_OF_SYNCMAPS.entrySet()) {
 
 
-                    for (var syncDirectoryEntry : syncMapEntry.getValue().syncDirectories.entrySet()) {
+                    for (var SDEntry : syncMapEntry.getValue().syncDirectories.entrySet()) {
 
-                        SyncDirectory syncDirectory = syncDirectoryEntry.getValue();
+                        SyncDirectory SD = SDEntry.getValue();
 
                         state = "READ";
-                        syncDirectory.findState();
+                        SD.findState();
 
-                        syncDirectory.makeListCreated();
-                        syncDirectory.makeListDeleted();
-                        syncDirectory.makeListModified();
+                        SD.makeListCreated();
+                        SD.makeListDeleted();
+                        SD.listModified = SD.makeListModified();
 
-                        syncDirectory.doCreate();
-                        syncDirectory.doDelete();
-                        syncDirectory.doModify();
+                        SD.doCreate();
+                        SD.doDelete();
+                        SD.doModify();
 
-                        syncDirectory.writeStateFile(syncDirectory.path);
+                        SD.writeStateFile(SD.path);
                     }
 
 
@@ -76,14 +76,14 @@ public class Flow implements Runnable {
             state = syncMap.toString();
 
             for (var stringSyncDirectoryEntry : syncMap.syncDirectories.entrySet()) {
-                SyncDirectory syncDirectory = stringSyncDirectoryEntry.getValue();
-                String path = syncDirectory.path;
-                String stateFilePath = syncDirectory.stateFilePath(path);
+                SyncDirectory SD = stringSyncDirectoryEntry.getValue();
+                String path = SD.path;
+                String stateFilePath = tools.stateFilePath(path);
 
                 if (new File(stateFilePath).exists()) {
-                    state = "READ-STATE-FILE-" + syncDirectory.readStateFile();
+                    state = "READ-STATE-FILE-" + SD.readStateFile();
                 } else {
-                    syncDirectory.writeStateFile(path);
+                    SD.writeStateFile(path);
                 }
             }
 
diff --git a/src/com/olexyn/ensync/Tools.java b/src/com/olexyn/ensync/Tools.java
index db4915a..2d795b5 100644
--- a/src/com/olexyn/ensync/Tools.java
+++ b/src/com/olexyn/ensync/Tools.java
@@ -148,4 +148,7 @@ public class Tools {
         }
     }
 
+    public String stateFilePath(String path) {
+        return "/tmp/ensync/state" + path.replace("/", "-");
+    }
 }
diff --git a/src/com/olexyn/ensync/artifacts/SyncDirectory.java b/src/com/olexyn/ensync/artifacts/SyncDirectory.java
index 8fa92fd..d60fc2a 100644
--- a/src/com/olexyn/ensync/artifacts/SyncDirectory.java
+++ b/src/com/olexyn/ensync/artifacts/SyncDirectory.java
@@ -4,7 +4,10 @@ import com.olexyn.ensync.Execute;
 import com.olexyn.ensync.Tools;
 
 import java.io.File;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * A SyncDirectory is an occurrence of a particular directory somewhere across the filesystems.
@@ -30,8 +33,7 @@ public class SyncDirectory {
      *
      * @see SyncMap
      */
-    public SyncDirectory(String path,
-                         SyncMap syncMap) {
+    public SyncDirectory(String path, SyncMap syncMap) {
 
         this.path = path;
         this.syncMap = syncMap;
@@ -39,8 +41,6 @@ public class SyncDirectory {
     }
 
 
-
-
     /**
      * Get the current state by using the `find` command.
      */
@@ -54,7 +54,7 @@ public class SyncDirectory {
         List<String> pathList = tools.brToListString(find.output);
 
         for (String filePath : pathList) {
-            SyncFile file = new SyncFile(filePath);
+            SyncFile file = new SyncFile(this, filePath);
 
             filemap.put(filePath, file);
         }
@@ -71,7 +71,7 @@ public class SyncDirectory {
      */
     public Map<String, SyncFile> readStateFile() {
         Map<String, SyncFile> filemap = new HashMap<>();
-        List<String> lines = tools.fileToLines(new File(stateFilePath(path)));
+        List<String> lines = tools.fileToLines(new File(tools.stateFilePath(path)));
 
         for (String line : lines) {
             // this is a predefined format: "modification-time path"
@@ -79,7 +79,7 @@ public class SyncDirectory {
             long modTime = Long.parseLong(modTimeString);
 
             String sFilePath = line.replace(modTimeString + " ", "");
-            SyncFile sfile = new SyncFile(sFilePath);
+            SyncFile sfile = new SyncFile(this, sFilePath);
 
             sfile.setStateFileTime(modTime);
 
@@ -98,7 +98,6 @@ public class SyncDirectory {
      * @return
      */
     public void makeListCreated() {
-        listCreated = new ArrayList<>();
         Map<String, SyncFile> fromA = findState();
         Map<String, SyncFile> substractB = readStateFile();
 
@@ -106,22 +105,14 @@ public class SyncDirectory {
     }
 
 
-    public String stateFilePath(String path) {
-        return "/tmp/ensync/state" + path.replace("/", "-");
-    }
-
-
     /**
      * Compare the OLD and NEW pools.
      * List is cleared and created each time.
-     *
      */
     public void makeListDeleted() {
-        listDeleted = new ArrayList<>();
         Map<String, SyncFile> fromA = readStateFile();
         Map<String, SyncFile> substractB = findState();
 
-
         listDeleted = tools.mapMinus(fromA, substractB);
     }
 
@@ -129,24 +120,22 @@ public class SyncDirectory {
     /**
      * Compare the OLD and NEW pools.
      * List is cleared and created each time.
-     *
      */
-    public void makeListModified() {
+    public List<SyncFile> makeListModified() {
 
         listModified = new ArrayList<>();
         Map<String, SyncFile> oldMap = readStateFile();
 
-        for (Map.Entry<String, SyncFile> newFileEntry : findState().entrySet()) {
-            // If KEY exists in OLD , thus FILE was NOT created.
-            String newFileKey = newFileEntry.getKey();
+        for (var newFileEntry : findState().entrySet()) {
 
+            String newFileKey = newFileEntry.getKey();
 
+            // If KEY exists in OLD , thus FILE was NOT created.
             if (oldMap.containsKey(newFileKey)) {
 
                 SyncFile newFile = newFileEntry.getValue();
-                long lastModifiedNew = newFile.lastModified();
-
 
+                long lastModifiedNew = newFile.lastModified();
                 long lastModifiedOld = oldMap.get(newFileKey).stateFileTime();
 
                 if (lastModifiedNew > lastModifiedOld) {
@@ -154,7 +143,7 @@ public class SyncDirectory {
                 }
             }
         }
-
+        return listModified;
     }
 
 
@@ -177,26 +166,24 @@ public class SyncDirectory {
             outputList.add("" + lastModified + " " + filePath);
         }
 
-        tools.writeStringListToFile(stateFilePath(path), outputList);
+        tools.writeStringListToFile(tools.stateFilePath(path), outputList);
     }
 
 
     private class Info {
 
-        private String relativePath = null;
-        private String thisFilePath = null;
-        private String otherFilePath = null;
-        private File otherFile = null;
-        private String otherParentPath = null;
-        private File otherParentFile = null;
-        private long thisStateFileTime = 0;
-        private long thisTimeModified = 0;
-        private long otherTimeModified = 0;
+        private String relativePath;
+        private String thisFilePath;
+        private String otherFilePath;
+        private File otherFile;
+        private String otherParentPath;
+        private File otherParentFile;
+        private long thisStateFileTime;
+        private long thisFileTimeModified;
+        private long otherFileTimeModified;
 
 
-        private Info(SyncDirectory thisSD,
-                     SyncFile sFile,
-                     SyncDirectory otherSD) {
+        private Info(SyncDirectory thisSD, SyncFile sFile, SyncDirectory otherSD) {
             // Example:
             //  syncDirectory /foo
             //  otherSyncDirectory /bar
@@ -216,18 +203,18 @@ public class SyncDirectory {
                 // thisFile does not exist in StateFile, a value of 0 can be seen as equal to "never existed".
                 this.thisStateFileTime = 0;
             }
-            this.thisTimeModified = sFile.lastModified();
+            this.thisFileTimeModified = sFile.lastModified();
 
 
             if (otherFile.exists()) {
 
-                this.otherTimeModified = otherFile.lastModified();
+                this.otherFileTimeModified = otherFile.lastModified();
 
             } else {
                 if (otherSD.readStateFile().get(otherFilePath) != null) {
-                    this.otherTimeModified = otherSD.readStateFile().get(otherFilePath).stateFileTime();
+                    this.otherFileTimeModified = otherSD.readStateFile().get(otherFilePath).stateFileTime();
                 } else {
-                    this.otherTimeModified = 0;
+                    this.otherFileTimeModified = 0;
                 }
             }
 
@@ -243,15 +230,14 @@ public class SyncDirectory {
 
             if (createdFile.isFile()) {
 
-                for (Map.Entry<String, SyncDirectory> otherEntry : syncMap.syncDirectories.entrySet()) {
-                    SyncDirectory otherSyncDirectory = otherEntry.getValue();
+                for (var otherEntry : syncMap.syncDirectories.entrySet()) {
+                    SyncDirectory otherSD = otherEntry.getValue();
 
-                    if (!this.equals(otherSyncDirectory)) {
+                    if (this.equals(otherSD)) { continue; }
 
-                        Info info = new Info(this, createdFile, otherSyncDirectory);
+                    Info info = new Info(this, createdFile, otherSD);
 
-                        createFile(info);
-                    }
+                    writeFile(info, this, createdFile, otherSD);
                 }
             }
         }
@@ -265,24 +251,21 @@ public class SyncDirectory {
 
         for (SyncFile deletedFile : listDeleted) {
 
+            for (var otherEntry : syncMap.syncDirectories.entrySet()) {
+                SyncDirectory otherSD = otherEntry.getValue();
 
-            for (Map.Entry<String, SyncDirectory> otherEntry : syncMap.syncDirectories.entrySet()) {
-                SyncDirectory otherSyncDirectory = otherEntry.getValue();
-
-                if (!this.equals(otherSyncDirectory)) {
+                if (this.equals(otherSD)) { continue; }
 
-                    Info info = new Info(this, deletedFile, otherSyncDirectory);
-                    if (info.otherFile.isFile()) {
+                Info info = new Info(this, deletedFile, otherSD);
+                if (info.otherFile.isFile()) {
 
-                        // if the otherFile was created with ensync it will have the == TimeModified.
-                        if (info.thisStateFileTime >= info.otherTimeModified) {
-                            String[] cmd = new String[]{"rm",
-                                                        "-r",
-                                                        info.otherFilePath};
-                            x.execute(cmd);
-                        }
+                    // if the otherFile was created with ensync it will have the == TimeModified.
+                    if (info.thisStateFileTime >= info.otherFileTimeModified) {
+                        String[] cmd = new String[]{"rm",
+                                                    "-r",
+                                                    info.otherFilePath};
+                        x.execute(cmd);
                     }
-
                 }
             }
         }
@@ -295,19 +278,14 @@ public class SyncDirectory {
 
             if (modifiedFile.isFile()) {
 
-                for (Map.Entry<String, SyncDirectory> otherEntry : syncMap.syncDirectories.entrySet()) {
-                    SyncDirectory otherSyncDirectory = otherEntry.getValue();
-
-                    if (!this.equals(otherSyncDirectory)) {
-
-                        Info info = new Info(this, modifiedFile, otherSyncDirectory);
+                for (var otherEntry : syncMap.syncDirectories.entrySet()) {
+                    SyncDirectory otherSD = otherEntry.getValue();
 
+                    if (this.equals(otherSD)) { continue; }
 
-                        createFile(info);
-
-
-                    }
+                    Info info = new Info(this, modifiedFile, otherSD);
 
+                    writeFile(info, this, modifiedFile, otherSD);
 
                 }
             }
@@ -316,8 +294,11 @@ public class SyncDirectory {
     }
 
 
-    private void createFile(Info info) {
-        if (!info.otherFile.exists() || info.thisTimeModified > info.otherTimeModified) {
+    private void writeFile(Info info, SyncDirectory thisSD, SyncFile thisFile, SyncDirectory otherSD) {
+
+        File otherFile = new File(otherSD.path + thisFile.relativePath);
+
+        if (!otherFile.exists() || info.thisFileTimeModified > info.otherFileTimeModified) {
             if (!info.otherParentFile.exists()) {
                 String[] cmd = new String[]{"mkdir",
                                             "-p",
@@ -333,13 +314,11 @@ public class SyncDirectory {
     }
 
 
-    public String flowState(){
+    public String flowState() {
         return flowState == null ? "NONE" : flowState;
     }
 
 
-
-
 }
 
 
diff --git a/src/com/olexyn/ensync/artifacts/SyncFile.java b/src/com/olexyn/ensync/artifacts/SyncFile.java
index 6c3968e..8402aa2 100644
--- a/src/com/olexyn/ensync/artifacts/SyncFile.java
+++ b/src/com/olexyn/ensync/artifacts/SyncFile.java
@@ -8,10 +8,16 @@ public class SyncFile extends File {
     // Very IMPORTANT field. Allows to store lastModified as it is stored in the StateFile.
     private long stateFileTime = 0;
 
+    public String relativePath;
+    private SyncDirectory sd;
 
 
-    public SyncFile(String pathname) {
+
+    public SyncFile(SyncDirectory sd , String pathname) {
+
         super(pathname);
+        this.sd = sd;
+        relativePath = this.getPath().replace(sd.path, "");
     }
 
 
@@ -25,7 +31,18 @@ public class SyncFile extends File {
     }
 
 
+    public long getFileTimeModified(SyncDirectory otherSD){
+        if (this.exists()){
+            return lastModified();
+        }
+
+        if (sd.readStateFile().get(this.getPath())!=null){
 
+        }
+
+
+        return  0;
+    }
 
 
 }
diff --git a/src/com/olexyn/ensync/artifacts/SyncMap.java b/src/com/olexyn/ensync/artifacts/SyncMap.java
index 0b63148..1e36c8d 100644
--- a/src/com/olexyn/ensync/artifacts/SyncMap.java
+++ b/src/com/olexyn/ensync/artifacts/SyncMap.java
@@ -8,14 +8,11 @@ import java.util.HashMap;
 import java.util.Map;
 
 /**
- * What is a SyncMap?
- *
  * A SyncMap is the set of such SyncDirectories. The purpose of the SyncMap is to help syncronize the SyncDirectories.
  */
 public class SyncMap {
 
     public String name;
-    public int syncInterval = 3600;
     public Map<String, SyncDirectory> syncDirectories = new HashMap<>();
 
     Tools tools = new Tools();