batch) {
-
- for (String[] strings : batch) {
- execute(strings);
- }
-
- }
-
-
- public class TwoBr {
- public BufferedReader output;
- public BufferedReader error;
- }
-}
diff --git a/src/com/olexyn/ensync/Flow.java b/src/com/olexyn/ensync/Flow.java
deleted file mode 100644
index 1c06c65..0000000
--- a/src/com/olexyn/ensync/Flow.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.olexyn.ensync;
-
-import com.olexyn.ensync.artifacts.SyncDirectory;
-import com.olexyn.ensync.artifacts.SyncMap;
-
-import java.io.File;
-import static com.olexyn.ensync.Main.MAP_OF_SYNCMAPS;
-
-public class Flow implements Runnable {
-
-
- Tools tools = new Tools();
-
-
- private String state;
-
-
- public void run() {
-
-
- while (true) {
-
-
- synchronized (MAP_OF_SYNCMAPS) {
- readOrMakeStateFile();
-
- for (var syncMapEntry : MAP_OF_SYNCMAPS.entrySet()) {
-
-
- for (var SDEntry : syncMapEntry.getValue().syncDirectories.entrySet()) {
-
- SyncDirectory SD = SDEntry.getValue();
-
- state = "READ";
- SD.readFreshState();
-
- SD.listCreated = SD.makeListCreated();
- SD.listDeleted = SD.makeListDeleted();
- SD.listModified = SD.makeListModified();
-
- SD.doCreate();
- SD.doDelete();
- SD.doModify();
-
- SD.writeStateFile(SD.path);
- }
-
-
- }
- }
-
-
- try {
- long pause = 2000;
- System.out.println("Pausing... for "+pause+ "ms.");
- Thread.sleep(pause);
- } catch (InterruptedException ignored) {
-
- }
-
- }
- }
-
-
- public String getState() {
- return state == null ? "NONE" : state;
- }
-
-
- /**
- * For every single SyncDirectory try to read it's StateFile.
- * If the StateFile is missing, then create a StateFile.
- */
- private void readOrMakeStateFile() {
- for (var syncMapEntry : MAP_OF_SYNCMAPS.entrySet()) {
- SyncMap syncMap = syncMapEntry.getValue();
- state = syncMap.toString();
-
- for (var stringSyncDirectoryEntry : syncMap.syncDirectories.entrySet()) {
- SyncDirectory SD = stringSyncDirectoryEntry.getValue();
- String path = SD.path;
- String stateFilePath = tools.stateFilePath(path);
-
- if (new File(stateFilePath).exists()) {
- state = "READ-STATE-FILE-" + SD.readStateFile();
- } else {
- SD.writeStateFile(path);
- }
- }
-
- }
- }
-}
diff --git a/src/com/olexyn/ensync/Main.java b/src/com/olexyn/ensync/Main.java
deleted file mode 100644
index 00ea739..0000000
--- a/src/com/olexyn/ensync/Main.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.olexyn.ensync;
-
-import com.olexyn.ensync.artifacts.SyncMap;
-import com.olexyn.ensync.ui.UI;
-
-import java.util.HashMap;
-
-
-public class Main{
-
-
-
-
-
-
- final public static Thread UI_THREAD = new Thread(new UI(), "ui");
-
- final public static Thread FLOW_THREAD = new Thread(new Flow(), "flow");
-
- final public static HashMap MAP_OF_SYNCMAPS = new HashMap<>();
-
-
-
- public static void main(String[] args) {
-
-
-
-
-
- UI_THREAD.start();
-
- FLOW_THREAD.start();
-
-
-
-
-
-
-
- }
-
-
-
-
-}
diff --git a/src/com/olexyn/ensync/Tools.java b/src/com/olexyn/ensync/Tools.java
deleted file mode 100644
index 042f39d..0000000
--- a/src/com/olexyn/ensync/Tools.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package com.olexyn.ensync;
-
-import com.olexyn.ensync.artifacts.SyncFile;
-
-import java.io.*;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class Tools {
-
- private final Execute x;
-
- public Tools() {
- x = new Execute();
- }
-
-
- /**
- * Convert BufferedReader to String.
- *
- * @param br BufferedReader
- * @return String
- */
- public String brToString(BufferedReader br) {
- StringBuilder sb = new StringBuilder();
- Object[] br_array = br.lines().toArray();
- for (int i = 0; i < br_array.length; i++) {
- sb.append(br_array[i].toString() + "\n");
- }
- return sb.toString();
- }
-
-
- /**
- * Convert BufferedReader to List of Strings.
- *
- * @param br BufferedReader
- * @return List
- */
- public List brToListString(BufferedReader br) {
- List list = new ArrayList<>();
- Object[] br_array = br.lines().toArray();
- for (int i = 0; i < br_array.length; i++) {
- list.add(br_array[i].toString());
- }
- return list;
- }
-
-
- public List fileToLines(File file) {
- String filePath = file.getPath();
- List lines = null;
- try {
- lines = Files.readAllLines(Paths.get(filePath));
- } catch (IOException e) {
- e.printStackTrace();
- }
- return lines;
- }
-
- public String fileToString(File file){
- List lineList = fileToLines(file);
- StringBuilder sb = new StringBuilder();
- for (String line : lineList){
- sb.append(line).append("\n");
- }
- return sb.toString();
- }
-
-
- public Map mapMinus(Map fromA, Map substractB) {
-
- Map difference = new HashMap<>();
- for (Map.Entry entry : fromA.entrySet()) {
- String key = entry.getKey();
-
- if (fromA.containsKey(key) && !substractB.containsKey(key)) {
- SyncFile file = fromA.get(key);
- difference.put(key, file);
- }
-
- }
- return difference;
- }
-
-
- public StringBuilder stringListToSb(List list) {
- StringBuilder sb = new StringBuilder();
-
- for (String line : list) {
- sb.append(line + "\n");
- }
- return sb;
- }
-
- /**
- * Write sb to file at path .
- *
- * @param path String
- * @param sb StringBuilder
- */
- public void writeSbToFile(String path, StringBuilder sb) {
- try {
- BufferedWriter bw = new BufferedWriter(new FileWriter(new File(path)));
- bw.write(sb.toString());
- bw.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
-
- /**
- * Write List of String to file at path .
- *
- * @param path String
- * @param list StringBuilder
- */
- public void writeStringListToFile(String path, List list) {
- File file = new File(path);
- File parent = new File(file.getParent());
- if (!parent.exists()) {
-
- x.execute(new String[]{"mkdir",
- "-p",
- parent.getPath()});
- }
-
-
- try {
- BufferedWriter bw = new BufferedWriter(new FileWriter(new File(path)));
- StringBuilder sb = stringListToSb(list);
- bw.write(sb.toString());
- bw.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- 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
deleted file mode 100644
index acb38c8..0000000
--- a/src/com/olexyn/ensync/artifacts/SyncDirectory.java
+++ /dev/null
@@ -1,362 +0,0 @@
-package com.olexyn.ensync.artifacts;
-
-import com.olexyn.ensync.Execute;
-import com.olexyn.ensync.Tools;
-
-import java.io.File;
-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.
- */
-public class SyncDirectory {
-
- private String flowState;
- private SyncDirectory thisSD = this;
-
-
- private SyncMap syncMap;
- public String path = null;
-
- public Map listCreated = new HashMap<>();
- public Map listDeleted = new HashMap<>();
- public Map listModified = new HashMap<>();
-
-
- Tools tools = new Tools();
- Execute x = new Execute();
-
- /**
- * Create a SyncDirectory from realPath.
- *
- * @see SyncMap
- */
- public SyncDirectory(String path, SyncMap syncMap) {
-
- this.path = path;
- this.syncMap = syncMap;
-
- }
-
-
- /**
- * Get the current state by using the `find` command.
- */
- public Map readFreshState() {
- //NOTE that the SFile().lastModifiedOld is not set here, so it is 0 by default.
- Map filemap = new HashMap<>();
-
- Execute.TwoBr find = x.execute(new String[]{"find",
- path});
-
- List pathList = tools.brToListString(find.output);
-
- for (String filePath : pathList) {
- SyncFile file = new SyncFile(this, filePath);
-
- filemap.put(filePath, file);
- }
-
-
- return filemap;
-
-
- }
-
-
- /**
- * READ the contents of StateFile to Map.
- */
- public Map readStateFile() {
- Map filemap = new HashMap<>();
- List lines = tools.fileToLines(new File(tools.stateFilePath(path)));
-
- for (String line : lines) {
- // this is a predefined format: "modification-time path"
- String modTimeString = line.split(" ")[0];
- long modTime = Long.parseLong(modTimeString);
-
- String sFilePath = line.replace(modTimeString + " ", "");
- SyncFile sfile = new SyncFile(this, sFilePath);
-
- sfile.setTimeModifiedFromStateFile(modTime);
-
- filemap.put(sFilePath, sfile);
- }
-
- return filemap;
-
- }
-
-
- /**
- * Compare the OLD and NEW pools.
- * List is cleared and created each time.
- */
- public Map makeListCreated() {
-
- Map fromA = readFreshState();
- Map substractB = readStateFile();
-
- return tools.mapMinus(fromA, substractB);
- }
-
-
- /**
- * Compare the OLD and NEW pools.
- * List is cleared and created each time.
- */
- public Map makeListDeleted() {
-
- Map fromA = readStateFile();
- Map substractB = readFreshState();
-
- Map listDeleted = tools.mapMinus(fromA, substractB);
-
- Map swap = new HashMap<>();
-
-
- for (var entry : listDeleted.entrySet()) {
-
- String key = entry.getKey();
- String parentKey = entry.getValue().getParent();
-
- if (listDeleted.containsKey(parentKey) || swap.containsKey(parentKey)) {
- swap.put(key, listDeleted.get(key));
- }
- }
-
- return tools.mapMinus(listDeleted, swap);
- }
-
-
- /**
- * Compare the OLD and NEW pools.
- * List is cleared and created each time.
- */
- public Map makeListModified() {
-
- Map listModified = new HashMap<>();
-
- Map stateFileMap = readStateFile();
-
- for (var freshFileEntry : readFreshState().entrySet()) {
-
- String freshFileKey = freshFileEntry.getKey();
- SyncFile freshFile = freshFileEntry.getValue();
-
- if (freshFile.isDirectory()) { continue;} // no need to modify Directories, the Filesystem will do that, if a File changed.
-
- // If KEY exists in OLD , thus FILE was NOT created.
- boolean oldFileExists = stateFileMap.containsKey(freshFileKey);
- boolean fileIsFresher = freshFile.getTimeModified() > freshFile.getTimeModifiedFromStateFile();
-
- if (oldFileExists && fileIsFresher) {
- listModified.put(freshFileKey, freshFile);
- }
- }
- return listModified;
- }
-
-
- /**
- * QUERY state of the filesystem at realPath.
- * WRITE the state of the filesystem to file.
- */
- public void writeStateFile(String path) {
- List outputList = new ArrayList<>();
-
-
- Execute.TwoBr find = x.execute(new String[]{"find",
- path});
-
- List pathList = tools.brToListString(find.output);
-
-
- for (String filePath : pathList) {
- long lastModified = new File(filePath).lastModified();
- outputList.add("" + lastModified + " " + filePath);
- }
-
- tools.writeStringListToFile(tools.stateFilePath(path), outputList);
- }
-
-
- private class Info {
-
- private String thisFilePath;
- private String otherFilePath;
- private String otherParentPath;
- private File otherParentFile;
-
-
- private Info(SyncDirectory thisSD, SyncFile sFile, SyncDirectory otherSD) {
- // Example:
- // syncDirectory /foo
- // otherSyncDirectory /bar
- // createdFile /foo/hello/created-file.gif
- // relativePath /hello/created-file.gif
- String relativePath = sFile.getPath().replace(thisSD.path, "");
- this.thisFilePath = sFile.getPath();
- this.otherFilePath = otherSD.path + relativePath;
- File otherFile = new File(otherFilePath);
-
- this.otherParentPath = otherFile.getParent();
- this.otherParentFile = new File(otherParentPath);
-
-
- }
- }
-
-
- public void doCreate() {
-
- for (var entry : listCreated.entrySet()) {
- SyncFile createdFile = entry.getValue();
-
- for (var otherEntry : syncMap.syncDirectories.entrySet()) {
- SyncDirectory otherSD = otherEntry.getValue();
-
- if (this.equals(otherSD)) { continue; }
-
- Info info = new Info(this, createdFile, otherSD);
-
- writeFile(info, this, createdFile, otherSD);
- }
- }
- }
-
-
- /**
- *
- */
- public void doDelete() {
-
- for (var entry : listDeleted.entrySet()) {
- SyncFile deletedFile = entry.getValue();
-
- for (var otherEntry : syncMap.syncDirectories.entrySet()) {
- SyncDirectory otherSD = otherEntry.getValue();
-
- if (this.equals(otherSD)) { continue; }
-
- Info info = new Info(thisSD, deletedFile, otherSD);
- deleteFile(info, thisSD, deletedFile, otherSD);
-
-
- }
- }
- }
-
- private void deleteFile(Info info, SyncDirectory thisSD, SyncFile thisFile, SyncDirectory otherSD) {
-
- SyncFile otherFile = new SyncFile(otherSD, otherSD.path + thisFile.relativePath);
-
- if (!otherFile.exists()) { return;}
-
- // if the otherFile was created with ensync it will have the == TimeModified.
- long thisFileTimeModified = thisFile.getTimeModified();
- long otherFileTimeModified = otherFile.getTimeModified();
-
- if (thisFile.getTimeModified() >= otherFile.getTimeModified()) {
- List cmd = List.of("rm", "-r", info.otherFilePath);
- x.execute(cmd);
- }
- }
-
-
- public void doModify() {
-
- for (var entry : listModified.entrySet()) {
- SyncFile modifiedFile = entry.getValue();
-
- for (var otherEntry : syncMap.syncDirectories.entrySet()) {
- SyncDirectory otherSD = otherEntry.getValue();
-
- if (this.equals(otherSD)) { continue; }
-
- Info info = new Info(this, modifiedFile, otherSD);
-
- writeFile(info, this, modifiedFile, otherSD);
- }
- }
- }
-
-
- private void writeFile(Info info, SyncDirectory thisSD, SyncFile thisFile, SyncDirectory otherSD) {
-
- SyncFile otherFile = new SyncFile(otherSD, otherSD.path + thisFile.relativePath);
-
-
- if (otherFile.exists() && thisFile.getTimeModified() < otherFile.getTimeModified()) { return;}
-
-
- if (thisFile.isDirectory() && !otherFile.exists()) {
- List cmd = List.of("mkdir", "-p", info.otherFilePath);
- x.execute(cmd);
- return;
- }
-
- if (thisFile.isFile()) {
-
-
- if (!info.otherParentFile.exists()) {
- makeParentChain(otherFile, thisFile);
- // List cmd = List.of("mkdir", "-p", info.otherParentPath);
- //x.execute(cmd);
- }
-
- List cmd = List.of("cp", "-p", info.thisFilePath, info.otherFilePath);
- x.execute(cmd);
- copyModifDate(thisFile.getParentFile(), otherFile.getParentFile());
- }
- }
-
-
- private void makeParentChain(File otherFile, File thisFile) {
- try {
- File otherParent = new File(otherFile.getParent());
- File thisParent = new File(thisFile.getParent());
-
- if (!otherParent.exists()) {
- makeParentChain(otherParent, thisParent);
- makeParentChain(otherFile, thisFile);
-
- } else if (thisFile.isDirectory()) {
-
- List cmd = List.of("mkdir", otherFile.getPath());
- x.execute(cmd);
-
-
- cmd = List.of("stat", "--format", "%y", thisFile.getPath());
-
-
- String mDate = x.execute(cmd).output.readLine();
-
-
- cmd = List.of("touch", "-m", "--date=" + mDate, otherFile.getPath());
- String error = x.execute(cmd).error.readLine();
- int br = 0;
-
-
- }
- } catch (Exception ignored) {}
- }
-
-
- private void copyModifDate(File fromFile, File toFile) {
- try {
- List cmd = List.of("stat", "--format", "%y", fromFile.getPath());
- String mDate = x.execute(cmd).output.readLine();
-
- cmd = List.of("touch", "-m", "--date=" + mDate, toFile.getPath());
- x.execute(cmd);
- } catch (Exception ignored) {}
- }
-
-}
-
-
diff --git a/src/com/olexyn/ensync/artifacts/SyncFile.java b/src/com/olexyn/ensync/artifacts/SyncFile.java
deleted file mode 100644
index 224fc7c..0000000
--- a/src/com/olexyn/ensync/artifacts/SyncFile.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.olexyn.ensync.artifacts;
-
-import java.io.File;
-import java.util.Map;
-
-public class SyncFile extends File {
-
-
- // Very IMPORTANT field. Allows to store lastModified as it is stored in the StateFile.
- public long timeModifiedFromStateFile = 0;
-
- public String relativePath;
- private SyncDirectory sd;
-
-
-
- public SyncFile(SyncDirectory sd , String pathname) {
-
- super(pathname);
- this.sd = sd;
- relativePath = this.getPath().replace(sd.path, "");
- }
-
-
-
-
-
- public void setTimeModifiedFromStateFile(long value){
- timeModifiedFromStateFile = value;
- }
-
-
- public long getTimeModifiedFromStateFile(){
- SyncFile record = sd.readStateFile().get(this.getPath());
-
-
- return record == null ? 0 : record.timeModifiedFromStateFile;
- }
-
-
- /**
- * If File exists on Disk get the TimeModified from there.
- * Else try to read it from StateFile.
- * Else return 0 ( = oldest possible time - a value of 0 can be seen as equal to "never existed").
- * EXAMPLES:
- * If a File was deleted, then the time will be taken from statefile.
- * If a File never existed, it will have time = 0, and thus will always be overwritten.
- */
- public long getTimeModified(){
- if (this.exists()){
- return lastModified();
- }
-
- if (sd.readStateFile().get(this.getPath())!=null){
- return getTimeModifiedFromStateFile();
- }
-
-
- return 0;
- }
-
-
-}
diff --git a/src/com/olexyn/ensync/artifacts/SyncMap.java b/src/com/olexyn/ensync/artifacts/SyncMap.java
deleted file mode 100644
index 1e36c8d..0000000
--- a/src/com/olexyn/ensync/artifacts/SyncMap.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.olexyn.ensync.artifacts;
-
-
-import com.olexyn.ensync.Tools;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 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 Map syncDirectories = new HashMap<>();
-
- Tools tools = new Tools();
-
- /**
- * @see SyncMap
- */
- public SyncMap(String name) {
- this.name = name;
- }
-
- /**
- * Creates a new Syncdirectory.
- * Adds the created SyncDirectory to this SyncMap.
- *
- * @param realPath the path from which the SyncDirectory is created.
- * @see SyncDirectory
- */
- public void addDirectory(String realPath) {
- if (new File(realPath).isDirectory()) {
- syncDirectories.put(realPath, new SyncDirectory(realPath, this));
- }
- }
-
- public void removeDirectory(String realPath) {
- syncDirectories.remove(realPath);
- }
-
-
-}
diff --git a/src/com/olexyn/ensync/artifacts/artifacts.plantuml b/src/com/olexyn/ensync/artifacts/artifacts.plantuml
deleted file mode 100644
index 36c6a39..0000000
--- a/src/com/olexyn/ensync/artifacts/artifacts.plantuml
+++ /dev/null
@@ -1,89 +0,0 @@
-@startuml
-
-title __ARTIFACTS's Class Diagram__\n
-
- namespace com.olexyn.ensync {
- namespace artifacts {
- class com.olexyn.ensync.artifacts.SyncDirectory {
- + listCreated : Map
- + listDeleted : Map
- + listModified : Map
- + path : String
- - flowState : String
- + SyncDirectory()
- + doCreate()
- + doDelete()
- + doModify()
- + makeListCreated()
- + makeListDeleted()
- + makeListModified()
- + readFreshState()
- + readStateFile()
- + writeStateFile()
- - copyModifDate()
- - deleteFile()
- - makeParentChain()
- - writeFile()
- }
- }
- }
-
-
- namespace com.olexyn.ensync {
- namespace artifacts {
- class com.olexyn.ensync.artifacts.SyncDirectory.Info {
- - otherFilePath : String
- - otherParentFile : File
- - otherParentPath : String
- - thisFilePath : String
- - Info()
- }
- }
- }
-
-
- namespace com.olexyn.ensync {
- namespace artifacts {
- class com.olexyn.ensync.artifacts.SyncFile {
- + relativePath : String
- + timeModifiedFromStateFile : long
- + SyncFile()
- + getTimeModified()
- + getTimeModifiedFromStateFile()
- + setTimeModifiedFromStateFile()
- }
- }
- }
-
-
- namespace com.olexyn.ensync {
- namespace artifacts {
- class com.olexyn.ensync.artifacts.SyncMap {
- + name : String
- + syncDirectories : Map
- + SyncMap()
- + addDirectory()
- + removeDirectory()
- }
- }
- }
-
-
- com.olexyn.ensync.artifacts.SyncDirectory o-- com.olexyn.ensync.Tools : tools
- com.olexyn.ensync.artifacts.SyncDirectory o-- com.olexyn.ensync.Execute : x
- com.olexyn.ensync.artifacts.SyncDirectory o-- com.olexyn.ensync.artifacts.SyncMap : syncMap
- com.olexyn.ensync.artifacts.SyncDirectory o-- com.olexyn.ensync.artifacts.SyncDirectory : thisSD
- com.olexyn.ensync.artifacts.SyncDirectory +-down- com.olexyn.ensync.artifacts.SyncDirectory.Info
- com.olexyn.ensync.artifacts.SyncFile -up-|> java.io.File
- com.olexyn.ensync.artifacts.SyncFile o-- com.olexyn.ensync.artifacts.SyncDirectory : sd
- com.olexyn.ensync.artifacts.SyncMap o-- com.olexyn.ensync.Tools : tools
-
-
-right footer
-
-
-PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
-For more information about this tool, please contact philippe.mesmeur@gmail.com
-endfooter
-
-@enduml
diff --git a/src/com/olexyn/ensync/ensync.plantuml b/src/com/olexyn/ensync/ensync.plantuml
deleted file mode 100644
index a2b15aa..0000000
--- a/src/com/olexyn/ensync/ensync.plantuml
+++ /dev/null
@@ -1,70 +0,0 @@
-@startuml
-
-title __ENSYNC's Class Diagram__\n
-
- namespace com.olexyn.ensync {
- class com.olexyn.ensync.Execute {
- + execute()
- + execute()
- + executeBatch()
- }
- }
-
-
- namespace com.olexyn.ensync {
- class com.olexyn.ensync.Execute.TwoBr {
- + error : BufferedReader
- + output : BufferedReader
- }
- }
-
-
- namespace com.olexyn.ensync {
- class com.olexyn.ensync.Flow {
- - state : String
- + getState()
- + run()
- - readOrMakeStateFile()
- }
- }
-
-
- namespace com.olexyn.ensync {
- class com.olexyn.ensync.Main {
- {static} + FLOW_THREAD : Thread
- {static} + MAP_OF_SYNCMAPS : HashMap
- {static} + UI_THREAD : Thread
- {static} + main()
- }
- }
-
-
- namespace com.olexyn.ensync {
- class com.olexyn.ensync.Tools {
- + Tools()
- + brToListString()
- + brToString()
- + fileToLines()
- + mapMinus()
- + stateFilePath()
- + stringListToSb()
- + writeSbToFile()
- + writeStringListToFile()
- }
- }
-
-
- com.olexyn.ensync.Execute +-down- com.olexyn.ensync.Execute.TwoBr
- com.olexyn.ensync.Flow .up.|> java.lang.Runnable
- com.olexyn.ensync.Flow o-- com.olexyn.ensync.Tools : tools
- com.olexyn.ensync.Tools o-- com.olexyn.ensync.Execute : x
-
-
-right footer
-
-
-PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
-For more information about this tool, please contact philippe.mesmeur@gmail.com
-endfooter
-
-@enduml
diff --git a/src/com/olexyn/ensync/saved_directories.xml b/src/com/olexyn/ensync/saved_directories.xml
deleted file mode 100644
index a2f56b5..0000000
--- a/src/com/olexyn/ensync/saved_directories.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
- SyncMap1
-
- SyncDirectory1
- /foo/dir
-
-
- SyncDirectory2
- /bar/dir
-
-
diff --git a/src/com/olexyn/ensync/shell/pipe.sh b/src/com/olexyn/ensync/shell/pipe.sh
deleted file mode 100755
index dc6f96c..0000000
--- a/src/com/olexyn/ensync/shell/pipe.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-a=$1
-b=$2
-$a | $b
-
-# this is a pipe
\ No newline at end of file
diff --git a/src/com/olexyn/ensync/shell/pipe2.sh b/src/com/olexyn/ensync/shell/pipe2.sh
deleted file mode 100755
index 826e21f..0000000
--- a/src/com/olexyn/ensync/shell/pipe2.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-a=$1
-b=$2
-c=$3
-$a | $b | $c
-
-# this is a double pipe
\ No newline at end of file
diff --git a/src/com/olexyn/ensync/shell/toFile.sh b/src/com/olexyn/ensync/shell/toFile.sh
deleted file mode 100755
index 8585b3d..0000000
--- a/src/com/olexyn/ensync/shell/toFile.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-a=$1
-b=$2
-c=$3
-
-$a $b > $c
\ No newline at end of file
diff --git a/src/com/olexyn/ensync/ui/Bridge.java b/src/com/olexyn/ensync/ui/Bridge.java
deleted file mode 100644
index 9bfc0f9..0000000
--- a/src/com/olexyn/ensync/ui/Bridge.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.olexyn.ensync.ui;
-
-
-import com.olexyn.ensync.artifacts.SyncMap;
-
-
-import java.io.File;
-
- import static com.olexyn.ensync.Main.MAP_OF_SYNCMAPS;
-
-/**
- * Connect the Controller and the Flow
- */
-public class Bridge {
-
-
- void newCollection(String collectionName) {
-
- synchronized (MAP_OF_SYNCMAPS) {
- MAP_OF_SYNCMAPS.put(collectionName, new SyncMap(collectionName));
- }
- }
-
-
- void removeCollection(String collectionName) {
- synchronized (MAP_OF_SYNCMAPS) {
- MAP_OF_SYNCMAPS.remove(collectionName);
- }
- }
-
-
- void addDirectory(String collectionName, File diretory) {
- synchronized (MAP_OF_SYNCMAPS) {
- MAP_OF_SYNCMAPS.get(collectionName).addDirectory(diretory.getAbsolutePath());
- }
- //TODO pause syning when adding
- }
-
-
- /**
- * This works, because a directory, which here is an unique ablsolute path,
- * is only supposed to present once across entire SYNC.
- */
- void removeDirectory(String directoryAbsolutePath) {
- //TODO fix ConcurrentModificationException. This will possibly resolve further errors.
- synchronized (MAP_OF_SYNCMAPS) {
- for (var syncMap : MAP_OF_SYNCMAPS.entrySet()) {
- syncMap.getValue().removeDirectory(directoryAbsolutePath);
- }
- }
-
-
- }
-}
diff --git a/src/com/olexyn/ensync/ui/Controller.java b/src/com/olexyn/ensync/ui/Controller.java
deleted file mode 100644
index 55e8504..0000000
--- a/src/com/olexyn/ensync/ui/Controller.java
+++ /dev/null
@@ -1,237 +0,0 @@
-package com.olexyn.ensync.ui;
-
-
-import javafx.fxml.FXML;
-import javafx.fxml.Initializable;
-import javafx.scene.Node;
-import javafx.scene.control.Button;
-import javafx.scene.control.TextField;
-import javafx.scene.layout.GridPane;
-import javafx.scene.text.Text;
-import javafx.stage.DirectoryChooser;
-import javafx.stage.Window;
-
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.ResourceBundle;
-
-/***
- * Controller class for JavaFX. Contains the application logic.
- */
-public class Controller implements Initializable {
-
-
- final static int COLUMN_COUNT = 5; // How many columns should the GridPane have? Adjust if necessary.
- final static Text SPACE = new Text(""); // Placeholder
- int collection_count = 0;
- Bridge bridge = new Bridge();
-
- @FXML
- protected GridPane gridPane;
-
- @Override
- public void initialize(URL url, ResourceBundle resourceBundle) {
-
- Text end = new Text("");
- end.setId("end");
-
- Button newCollectionButton = new Button("New Collection");
- newCollectionButton.setId("newCollectionButton");
- newCollectionButton.setOnAction(event -> { this.newCollection();});
-
- gridPane.add(end, 0, 0);
-
- List nodeList = new ArrayList<>(gridPane.getChildren());
-
- List payload = Arrays.asList(new Text(""), new Text(""), new Text(""), new Text(""), newCollectionButton);
-
-
- insertPayload(nodeList, payload, "end", 0);
- redraw(gridPane, nodeList);
-
-
- }
-
-
- private void newCollection() {
-
-
-
- String collectionName = "name" + collection_count++;
-
- bridge.newCollection(collectionName);
-
-
- TextField collectionStateTextField = new TextField();
- collectionStateTextField.setText("STATE");
- collectionStateTextField.setStyle("-fx-text-fill: green");
- collectionStateTextField.setDisable(true);
- collectionStateTextField.setId("collectionStateTextField-" + collectionName);
-
- Button removeCollectionButton = new Button("Remove Collection");
- removeCollectionButton.setId("removeCollectionButton-" + collectionName);
- removeCollectionButton.setOnAction(event -> { this.removeCollection(collectionName);});
-
- TextField addDirectoryTextField = new TextField();
- addDirectoryTextField.setId("addDirectoryTextField-" + collectionName);
-
- Button addDirectoryButton = new Button("Add Directory");
- addDirectoryButton.setId("addDirectoryButton-" + collectionName);
- addDirectoryButton.setOnAction(event -> { this.addDirectory(collectionName);});
-
-
- List nodeList = new ArrayList<>(gridPane.getChildren());
-
- List payload = new ArrayList<>();
- payload.addAll(Arrays.asList(new Text(""), new Text(""), collectionStateTextField, new Text(""), removeCollectionButton));
- payload.addAll(Arrays.asList(addDirectoryTextField, new Text(""), new Text(""), new Text(""), addDirectoryButton));
-
- insertPayload(nodeList, payload, "newCollectionButton", -4);
- redraw(gridPane, nodeList);
- }
-
-
-
-
- /**
- * For the order & number of Nodes see ui-design.png .
- * Remove the "Remove-Collection-Line" and the consecutive lines until and including the "Add-Directory-Line".
- * The !=null expression protects from Text("") placeholders, who have id==null.
- */
- private void removeCollection(String collectionName) {
-
- bridge.removeCollection(collectionName);
-
- List nodeList = new ArrayList<>(gridPane.getChildren());
-
- here:
- for (Node node : nodeList) {
-
- if (node.getId() != null && node.getId().equals("removeCollectionButton-" + collectionName)) {
- int i = nodeList.indexOf(node) - 4;
- while (i < nodeList.size()) {
- nodeList.remove(i);
-
- if (nodeList.get(i).getId() != null && nodeList.get(i).getId().equals("addDirectoryButton-" + collectionName)) {
- nodeList.remove(i);
- break here;
- }
- }
-
- }
- }
-
- redraw(gridPane, nodeList);
- }
-
-
- /**
- *
- */
- private void addDirectory(String collectionName) {
- // TODO throw error if other collection already contains absollutepath
- Window stage = gridPane.getScene().getWindow();
-
- final DirectoryChooser directoryChooser = new DirectoryChooser();
- directoryChooser.setTitle("Select Directory.");
- directoryChooser.setInitialDirectory(new File(System.getProperty("user.home")));
-
- File directory = directoryChooser.showDialog(stage);
-
- if (directory != null) {
-
- bridge.addDirectory(collectionName, directory);
-
- TextField directoryPathTextField = new TextField();
- directoryPathTextField.setText(directory.getAbsolutePath());
- directoryPathTextField.setDisable(true);
- directoryPathTextField.setId("directoryPathTextField-" + directory.getAbsolutePath());
-
-
-
- TextField directoryStateTextField = new TextField();
- directoryStateTextField.setText("STATE");
- directoryStateTextField.setStyle("-fx-text-fill: green");
- directoryStateTextField.setDisable(true);
- directoryStateTextField.setId("directoryStateTextField-" + directory.getAbsolutePath());
-
- Button removeDirectoryButton = new Button("Remove");
- removeDirectoryButton.setId("removeDirectoryButton-" + directory.getAbsolutePath());
- removeDirectoryButton.setOnAction(event -> { this.removeDirectory(directory.getAbsolutePath());});
-
-
- List nodeList = new ArrayList<>(gridPane.getChildren());
- List payload = Arrays.asList(directoryPathTextField, new Text(""), directoryStateTextField, new Text(""), removeDirectoryButton);
- insertPayload(nodeList, payload, "addDirectoryTextField-" + collectionName, 0);
- redraw(gridPane, nodeList);
- }
-
-
- }
-
-
- /**
- * Find the Node with @param id.
- * Insert the contents of the @param payload starting from the last.
- * This pushes the Node with @param id forward.
- */
- private void insertPayload(List nodeList, List payload, String id, int offset) {
- for (Node node : nodeList) {
-
- if (node.getId() != null && node.getId().equals(id)) {
- int i = nodeList.indexOf(node) + offset;
-
- for (int j = payload.size() - 1; j >= 0; j--) {
- nodeList.add(i, payload.get(j));
- }
- break;
- }
- }
- }
-
-
- /**
- * Clear the gridPane and redraw it with contents of nodeList.
- */
- private void redraw(GridPane gridPane, List nodeList) {
- gridPane.getChildren().clear();
-
- int col = 0, row = 0;
-
- for (Node node : nodeList) {
- if (nodeList.indexOf(node) % COLUMN_COUNT == 0) {
- row++;
- col = 0;
- }
- gridPane.add(node, col, row);
- col++;
- }
- }
-
-
- private void removeDirectory(String directoryAbsolutePath) {
-
- bridge.removeDirectory(directoryAbsolutePath);
-
- List nodeList = new ArrayList<>(gridPane.getChildren());
-
- for (Node node : nodeList) {
-
- if (node.getId() != null && node.getId().equals("removeDirectoryButton-" +directoryAbsolutePath)) {
- int i = nodeList.indexOf(node) - 4;
- for (int j = 0; j < 5; j++) {
- nodeList.remove(i);
- }
- break;
- }
- }
- redraw(gridPane, nodeList);
- }
-
-
-}
-
-
diff --git a/src/com/olexyn/ensync/ui/UI.java b/src/com/olexyn/ensync/ui/UI.java
deleted file mode 100644
index 9df73d6..0000000
--- a/src/com/olexyn/ensync/ui/UI.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.olexyn.ensync.ui;
-
-import javafx.application.Application;
-import javafx.fxml.FXMLLoader;
-import javafx.scene.Parent;
-import javafx.scene.Scene;
-import javafx.stage.Stage;
-
-
-public class UI extends Application implements Runnable {
-
-
-
-
-
- @Override
- public void start(Stage primaryStage) throws Exception {
- Parent root = FXMLLoader.load(getClass().getResource("layout.fxml"));
- Scene scene = new Scene(root, 500, 500);
-
-
-
-
-
- primaryStage.setTitle("EnSync");
- primaryStage.setScene(scene);
- primaryStage.show();
- }
-
-
-
-
- @Override
- public void run() {
- UI.launch();
- }
-}
diff --git a/src/com/olexyn/ensync/ui/layout.fxml b/src/com/olexyn/ensync/ui/layout.fxml
deleted file mode 100644
index 614e320..0000000
--- a/src/com/olexyn/ensync/ui/layout.fxml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/com/olexyn/ensync/ui/ui.plantuml b/src/com/olexyn/ensync/ui/ui.plantuml
deleted file mode 100644
index 2e09370..0000000
--- a/src/com/olexyn/ensync/ui/ui.plantuml
+++ /dev/null
@@ -1,59 +0,0 @@
-@startuml
-
-title __UI's Class Diagram__\n
-
- namespace com.olexyn.ensync {
- namespace ui {
- class com.olexyn.ensync.ui.Bridge {
- ~ addDirectory()
- ~ newCollection()
- ~ removeCollection()
- ~ removeDirectory()
- }
- }
- }
-
-
- namespace com.olexyn.ensync {
- namespace ui {
- class com.olexyn.ensync.ui.Controller {
- # gridPane : GridPane
- {static} ~ COLUMN_COUNT : int
- {static} ~ SPACE : Text
- ~ collection_count : int
- + initialize()
- - addDirectory()
- - insertPayload()
- - newCollection()
- - redraw()
- - removeCollection()
- - removeDirectory()
- }
- }
- }
-
-
- namespace com.olexyn.ensync {
- namespace ui {
- class com.olexyn.ensync.ui.UI {
- + run()
- + start()
- }
- }
- }
-
-
- com.olexyn.ensync.ui.Controller .up.|> javafx.fxml.Initializable
- com.olexyn.ensync.ui.Controller o-- com.olexyn.ensync.ui.Bridge : bridge
- com.olexyn.ensync.ui.UI .up.|> java.lang.Runnable
- com.olexyn.ensync.ui.UI -up-|> javafx.application.Application
-
-
-right footer
-
-
-PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
-For more information about this tool, please contact philippe.mesmeur@gmail.com
-endfooter
-
-@enduml
diff --git a/test/files/FileTest.java b/test/files/FileTest.java
deleted file mode 100644
index 6b07e4d..0000000
--- a/test/files/FileTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package files;
-
-import com.olexyn.ensync.Execute;
-import com.olexyn.ensync.Tools;
-
-public class FileTest {
-
- Execute x = new Execute();
- Tools tools = new Tools();
-
- private static final String PATH = System.getProperty("user.dir");;
-
- public static void main(String... args){
-
-
-
- }
-
- /**
- * Simulates user activity on disk.
- */
- void createFiles() throws InterruptedException {
- StringBuilder sbA = new StringBuilder("a");
- StringBuilder sbB = new StringBuilder("b");
-
- // dv (deleted-void)
- // TODO
-
- // dd
- tools.writeSbToFile(PATH+"/a/dd", sbA);
- Thread.sleep(10);
- tools.writeSbToFile(PATH+"/b/dd", sbB);
- Thread.sleep(10);Thread.sleep(10);
- x.execute(new String[]{"rm", PATH+"/a/dd"});
- Thread.sleep(10);
- x.execute(new String[]{"rm", PATH+"/b/dd"});
- Thread.sleep(10);
-
- // dc
- tools.writeSbToFile(PATH+"/a/dc", sbA);
- Thread.sleep(10);
- x.execute(new String[]{"rm", PATH+"/a/dc"});
- Thread.sleep(10);
- tools.writeSbToFile(PATH+"/b/dc", sbB);
- Thread.sleep(10);
-
- // dm
- tools.writeSbToFile(PATH+"/a/dm", sbA);
- Thread.sleep(10);
- x.execute(new String[]{"rm", PATH+"/a/dm"});
- Thread.sleep(10);
- tools.writeSbToFile(PATH+"/b/dm", sbB);
- Thread.sleep(10);
-
- // dv (deleted-void)
- // TODO
-
- // cd
- // TODO
-
- // cc
- // TODO
-
- // cm
- // TODO
-
- // cv (created-void)
- // TODO
-
- // md
- // TODO
-
- // mc
- // TODO
-
- // mm
- // TODO
-
- }
-
-
- /**
- * Checks if end-state is as desired.
- * @throws Exception otherwise.
- */
- void fileTest() throws Exception {
-
-
-
-
-
-
-
- // Files where the second (= the newer) file was deleted. Thus both files should not exist in the end-state.
- String[] arrayToDelete = {"/a/dd", "/b/dd" , "/a/cd", "/b/cd", "/a/md", "/b/md"};
- for (String path : arrayToDelete){
- if (new TestableFile(path).exists()) throw new Exception();
- }
-
- // Files where the second (= the newer) file was created or modified. Thus both files should contain "b" in the end-state.
- String[] arrayToB = {"/a/dc", "/b/dc" , "/a/dm", "/b/dm", "/a/cc", "/b/cc"};
- for (String path : arrayToB){
- if (!new TestableFile(path).hasContent("b")) throw new Exception();
- }
-
-
-
-
- }
-
-
- // Assertion Exception
-
-
-
-
-
-
-}
diff --git a/test/files/TestableFile.java b/test/files/TestableFile.java
deleted file mode 100644
index f72311d..0000000
--- a/test/files/TestableFile.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package files;
-
-import com.olexyn.ensync.Tools;
-
-import java.io.File;
-
-public class TestableFile extends File {
-
- Tools tools = new Tools();
-
-
- public TestableFile(String pathname) {
- super(pathname);
- }
-
- public boolean hasContent(String s){
-
- String line = tools.fileToLines(this).get(0);
- return line.equals(s);
- }
-}
diff --git a/test/files/files.plantuml b/test/files/files.plantuml
deleted file mode 100644
index c92063f..0000000
--- a/test/files/files.plantuml
+++ /dev/null
@@ -1,14 +0,0 @@
-@startuml
-
-title __FILES's Class Diagram__\n
-
-
-
-right footer
-
-
-PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
-For more information about this tool, please contact philippe.mesmeur@gmail.com
-endfooter
-
-@enduml
diff --git a/test/scenario.md b/test/scenario.md
deleted file mode 100644
index 2c3450c..0000000
--- a/test/scenario.md
+++ /dev/null
@@ -1,26 +0,0 @@
-### Testing Scenario
-Test two configs:
-1. FileOps happen while System is down.
-1. FileOps happen while System is running.
-
-
-
-
-| Symbol | Description|
----|---
-`a` | File `a` in directory `A`
-`b` | File `b` in directory `B`
-`d(x)` | File `x` is deleted.
-`c(x)` | File `x` is created.
-`m(x)` | File `x` is modified.
-
-
-
-
-| `Given` | | `When` | | `Then` | |
----|---|---|---|---|---
-| `A` | `B`| `A` | `B`|`A` | `B`|
-| `a` | | `d(a)` | | | |
-| `a` | `b` | `d(a)` | `d(b)` | | |
-
-
diff --git a/test/test-config.uxf b/test/test-config.uxf
deleted file mode 100644
index 7367943..0000000
--- a/test/test-config.uxf
+++ /dev/null
@@ -1,1585 +0,0 @@
-
-
- 10
-
- UMLObject
-
- 690
- 1930
- 150
- 40
-
- otherDirectory
-
-
-
- UMLObject
-
- 690
- 1890
- 150
- 40
-
- this.Directory
-
-
-
- UMLObject
-
- 780
- 1830
- 90
- 40
-
- Delete
-bg=red
-group=1
-
-
-
- UMLObject
-
- 870
- 1830
- 90
- 40
-
- Create
-bg=green
-group=1
-
-
-
- UMLObject
-
- 960
- 1830
- 90
- 40
-
- Modify
-bg=yellow
-group=1
-
-
-
- UMLState
-
- 850
- 1890
- 70
- 40
-
- File
-bg=red
-group=2
-
-
-
- UMLObject
-
- 690
- 1830
- 90
- 40
-
- Unchanged
-bg=white
-group=1
-
-
-
- UMLState
-
- 930
- 1930
- 60
- 40
-
- File
-group=2
-
-
-
- UMLState
-
- 850
- 1930
- 70
- 40
-
- File
-bg=red
-group=2
-
-
-
- UMLState
-
- 920
- 1890
- 70
- 40
-
- File
-bg=red
-group=2
-
-
-
- UMLState
-
- 1210
- 1890
- 70
- 40
-
- File
-bg=green
-group=3
-
-
-
- UMLState
-
- 1210
- 1930
- 70
- 40
-
- File
-group=3
-
-
-
- UMLState
-
- 1140
- 1930
- 70
- 40
-
- File
-bg=green
-group=3
-
-
-
- UMLState
-
- 1140
- 1890
- 70
- 40
-
- File
-bg=green
-group=3
-
-
-
- UMLState
-
- 1500
- 1890
- 70
- 40
-
- File
-bg=yellow
-group=4
-
-
-
- UMLState
-
- 1500
- 1930
- 70
- 40
-
- File
-group=4
-
-
-
- UMLState
-
- 1430
- 1930
- 70
- 40
-
- File
-bg=yellow
-group=4
-
-
-
- UMLState
-
- 1430
- 1890
- 70
- 40
-
- File
-bg=yellow
-group=4
-
-
-
- UMLState
-
- 990
- 1890
- 70
- 40
-
- File
-bg=red
-group=2
-
-
-
- UMLState
-
- 990
- 1930
- 70
- 40
-
- File
-bg=green
-group=2
-
-
-
- UMLState
-
- 1060
- 1890
- 70
- 40
-
- File
-bg=red
-group=2
-
-
-
- UMLState
-
- 1060
- 1930
- 70
- 40
-
- File
-bg=yellow
-group=2
-
-
-
- UMLState
-
- 1350
- 1890
- 70
- 40
-
- File
-bg=green
-group=3
-
-
-
- UMLState
-
- 1350
- 1930
- 70
- 40
-
- File
-bg=yellow
-group=3
-
-
-
- UMLState
-
- 850
- 1990
- 70
- 40
-
- do
-nothing
-
-
-
- UMLState
-
- 920
- 1990
- 790
- 40
-
- cp if newer
- try: time deletet = last time present in StateFile, else time deleted = 0 (~never existed)
-halign=left
-
-
-
- UMLState
-
- 1280
- 1930
- 70
- 40
-
- File
-bg=red
-group=3
-
-
-
- UMLState
-
- 1280
- 1890
- 70
- 40
-
- File
-bg=green
-group=3
-
-
-
- UMLState
-
- 1570
- 1890
- 70
- 40
-
- File
-bg=yellow
-group=4
-
-
-
- UMLState
-
- 1640
- 1930
- 70
- 40
-
- File
-bg=green
-group=4
-
-
-
- UMLState
-
- 1640
- 1890
- 70
- 40
-
- File
-bg=yellow
-group=4
-
-
-
- UMLState
-
- 1570
- 1930
- 70
- 40
-
- File
-bg=red
-group=4
-
-
-
- UMLObject
-
- 850
- 2060
- 70
- 40
-
- YES
-bg=green
-
-
-
- UMLObject
-
- 1140
- 2060
- 70
- 40
-
- YES
-bg=green
-
-
-
- UMLObject
-
- 1210
- 2060
- 70
- 40
-
- YES
-bg=green
-
-
-
- UMLObject
-
- 920
- 2060
- 70
- 40
-
- YES
-bg=green
-
-
-
- UMLObject
-
- 680
- 2310
- 150
- 40
-
- otherDirectory
-
-
-
- UMLObject
-
- 680
- 2220
- 150
- 40
-
- this.Directory
-
-
-
- UMLState
-
- 1140
- 2220
- 70
- 40
-
- File
-bg=red
-
-
-
- UMLState
-
- 1050
- 2320
- 70
- 40
-
- File
-bg=green
-
-
-
- UMLState
-
- 890
- 2220
- 70
- 40
-
- File
-
-
-
- UMLObject
-
- 1290
- 2220
- 80
- 140
-
- result
-
-
-
- UMLObject
-
- 970
- 2220
- 70
- 140
-
- time
-of
-last
-lool
-
-
-
- UMLState
-
- 1380
- 2320
- 70
- 40
-
- File
-bg=green
-
-
-
- UMLState
-
- 1380
- 2220
- 70
- 40
-
- File
-bg=green
-
-
-
- UMLObject
-
- 690
- 2590
- 150
- 40
-
- otherDirectory
-
-
-
- UMLObject
-
- 690
- 2500
- 150
- 40
-
- this.Directory
-
-
-
- UMLState
-
- 1270
- 2500
- 70
- 40
-
- File
-bg=red
-
-
-
- UMLState
-
- 980
- 2600
- 70
- 40
-
- File
-bg=green
-
-
-
- UMLState
-
- 900
- 2500
- 70
- 40
-
- File
-
-
-
- UMLObject
-
- 1430
- 2500
- 80
- 140
-
- result
-
-
-
- UMLObject
-
- 1070
- 2500
- 70
- 140
-
- time
-of
-last
-lool
-
-
-
- UMLState
-
- 1520
- 2500
- 70
- 40
-
- File
-bg=red
-
-
-
- UMLState
-
- 1520
- 2600
- 70
- 40
-
- File
-bg=red
-
-
-
- UMLObject
-
- 680
- 2150
- 720
- 30
-
- Deleted Files are tracked by their last existance in a StateFile.
-
-
-
- UMLObject
-
- 990
- 2060
- 70
- 40
-
- YES
-bg=green
-
-
-
- UMLObject
-
- 1060
- 2060
- 70
- 40
-
- YES
-bg=green
-
-
-
- UMLState
-
- 1160
- 2500
- 70
- 40
-
- File
-bg=green
-
-
-
- UMLState
-
- 1160
- 2600
- 70
- 40
-
- File
-bg=green
-
-
-
- UMLObject
-
- 1360
- 2500
- 70
- 140
-
- current
-loop
-
-
-
- UMLObject
-
- 1220
- 2220
- 70
- 140
-
- current
-loop
-
-
-
- Relation
-
- 910
- 2190
- 280
- 50
-
- lt=-
- 10.0;30.0;10.0;10.0;260.0;10.0;260.0;30.0
-
-
- Relation
-
- 1180
- 2530
- 140
- 160
-
- lt=<-
-comparison >=
- 10.0;110.0;10.0;140.0;120.0;140.0;120.0;10.0
-
-
- UMLObject
-
- 1280
- 2060
- 70
- 40
-
- RED
-bg=gray
-
-
-
- UMLObject
-
- 1350
- 2060
- 70
- 40
-
- YES
-bg=green
-
-
-
- UMLObject
-
- 1430
- 2060
- 70
- 40
-
- YES
-bg=green
-
-
-
- UMLObject
-
- 1500
- 2060
- 70
- 40
-
- YES
-bg=green
-
-
-
- UMLObject
-
- 1570
- 2060
- 70
- 40
-
- RED
-bg=gray
-
-
-
- UMLObject
-
- 1640
- 2060
- 70
- 40
-
- RED
-bg=gray
-
-
-
- Relation
-
- 910
- 2250
- 200
- 160
-
- lt=<-
-comparison >=
- 10.0;10.0;10.0;140.0;180.0;140.0;180.0;110.0
-
-
- UMLState
-
- 990
- 590
- 40
- 40
-
- A
-bg=red
-
-
-
- UMLState
-
- 1030
- 590
- 40
- 40
-
- B
-bg=green
-
-
-
- UMLState
-
- 1030
- 630
- 40
- 40
-
- B
-bg=yellow
-
-
-
- UMLState
-
- 1030
- 550
- 40
- 40
-
- B
-bg=red
-
-
-
- UMLState
-
- 1070
- 550
- 40
- 40
-
-
-bg=red
-
-
-
- UMLState
-
- 990
- 750
- 40
- 40
-
- A
-bg=green
-
-
-
- UMLState
-
- 1030
- 790
- 40
- 40
-
- B
-bg=green
-
-
-
- UMLState
-
- 1030
- 830
- 40
- 40
-
- B
-bg=yellow
-
-
-
- UMLState
-
- 1030
- 750
- 40
- 40
-
- B
-bg=red
-
-
-
- UMLState
-
- 990
- 950
- 40
- 40
-
- A
-bg=yellow
-
-
-
- UMLState
-
- 1030
- 990
- 40
- 40
-
- B
-bg=green
-
-
-
- UMLState
-
- 1030
- 1030
- 40
- 40
-
- B
-bg=yellow
-
-
-
- UMLState
-
- 1030
- 950
- 40
- 40
-
- B
-bg=red
-
-
-
- UMLState
-
- 990
- 630
- 40
- 40
-
- A
-bg=red
-
-
-
- UMLState
-
- 990
- 550
- 40
- 40
-
- A
-bg=red
-
-
-
- UMLState
-
- 990
- 510
- 40
- 40
-
- A
-bg=red
-
-
-
- UMLState
-
- 1070
- 510
- 40
- 40
-
-
-bg=red
-
-
-
- UMLState
-
- 990
- 830
- 40
- 40
-
- A
-bg=green
-
-
-
- UMLState
-
- 990
- 790
- 40
- 40
-
- A
-bg=green
-
-
-
- UMLState
-
- 990
- 710
- 40
- 40
-
- A
-bg=green
-
-
-
- UMLState
-
- 990
- 1030
- 40
- 40
-
- A
-bg=yellow
-
-
-
- UMLState
-
- 990
- 990
- 40
- 40
-
- A
-bg=yellow
-
-
-
- UMLState
-
- 990
- 910
- 40
- 40
-
- A
-bg=yellow
-
-
-
- UMLState
-
- 1070
- 750
- 40
- 40
-
-
-bg=red
-
-
-
- UMLState
-
- 1070
- 950
- 40
- 40
-
-
-bg=red
-
-
-
- UMLState
-
- 1070
- 590
- 40
- 40
-
- B
-bg=green
-
-
-
- UMLState
-
- 1070
- 790
- 40
- 40
-
- B
-bg=green
-
-
-
- UMLState
-
- 1070
- 990
- 40
- 40
-
- B
-bg=green
-
-
-
- UMLState
-
- 1070
- 630
- 40
- 40
-
- B
-bg=yellow
-
-
-
- UMLState
-
- 1070
- 830
- 40
- 40
-
- B
-bg=yellow
-
-
-
- UMLState
-
- 1070
- 1030
- 40
- 40
-
- B
-bg=yellow
-
-
-
- UMLState
-
- 1070
- 910
- 40
- 40
-
- A
-bg=yellow
-
-
-
- UMLState
-
- 1070
- 710
- 40
- 40
-
- A
-bg=green
-
-
-
- UMLNote
-
- 1100
- 150
- 140
- 70
-
- first a file is deleted
-
-
-
- Relation
-
- 960
- 210
- 160
- 280
-
- lt=.
-
- 50.0;260.0;10.0;120.0;140.0;10.0
-
-
- UMLState
-
- 1030
- 510
- 40
- 40
-
- B
-bg=gray
-
-
-
- UMLState
-
- 990
- 470
- 40
- 40
-
- A
-bg=red
-
-
-
- UMLState
-
- 1070
- 470
- 40
- 40
-
-
-bg=red
-
-
-
- UMLState
-
- 990
- 670
- 40
- 40
-
- A
-bg=green
-
-
-
- UMLState
-
- 1070
- 670
- 40
- 40
-
- A
-bg=green
-
-
-
- UMLState
-
- 1030
- 710
- 40
- 40
-
- B
-bg=gray
-
-
-
- UMLState
-
- 990
- 870
- 40
- 40
-
- A
-bg=yellow
-
-
-
- UMLState
-
- 1070
- 870
- 40
- 40
-
- A
-bg=yellow
-
-
-
- UMLState
-
- 1030
- 910
- 40
- 40
-
- B
-bg=gray
-
-
-
- Relation
-
- 1100
- 490
- 230
- 100
-
- lt=.
-
- 10.0;80.0;210.0;10.0
-
-
- UMLNote
-
- 1040
- 0
- 140
- 70
-
- there is no second file
-
-
-
- Relation
-
- 1100
- 510
- 320
- 120
-
- lt=.
-
- 10.0;100.0;300.0;10.0
-
-
- UMLNote
-
- 1370
- 50
- 410
- 130
-
- TEST-TABLE:
-/here a is the file that is modified first/
-/and b is the file that is modified second/
-*start*
-file name content
-*end*
-file name content
-
-
-
- UMLNote
-
- 1310
- 390
- 80
- 110
-
- *start*
-a dd a
-b dd b
-*end*
-a -
-b -
-
-
-
- UMLNote
-
- 1400
- 410
- 80
- 110
-
- *start*
-a dc a
-b dc b
-*end*
-a dc b
-b dc b
-
-
-
- UMLNote
-
- 1490
- 430
- 80
- 110
-
- *start*
-a dm a
-b dm b
-*end*
-a dm b
-b dm b
-
-
-
- Relation
-
- 1100
- 530
- 410
- 140
-
- lt=.
-
- 10.0;120.0;390.0;10.0
-
-
- UMLNote
-
- 1540
- 620
- 80
- 110
-
- *start*
-a cd a
-b cd b
-*end*
-a -
-b -
-
-
-
- Relation
-
- 1100
- 720
- 460
- 70
-
- lt=.
-
- 10.0;50.0;440.0;10.0
-
-
- UMLNote
-
- 1620
- 860
- 80
- 110
-
- *start*
-a md a
-b md b
-*end*
-a -
-b -
-
-
-
- Relation
-
- 1100
- 950
- 540
- 40
-
- lt=.
-
- 10.0;20.0;520.0;20.0
-
-
- UMLNote
-
- 1630
- 720
- 80
- 110
-
- *start*
-a cc a
-b cc b
-*end*
-a cc b
-b cc b
-
-
-
- Relation
-
- 1100
- 800
- 550
- 50
-
- lt=.
-
- 10.0;10.0;530.0;30.0
-
-