From 5711f03b44666593c70894ec175eef8afa1d6cbc Mon Sep 17 00:00:00 2001 From: Ivan Olexyn Date: Sat, 18 Jan 2020 18:06:17 +0100 Subject: [PATCH] Add Flow States. --- src/com/olexyn/ensync/Main.java | 48 +- .../olexyn/ensync/artifacts/StateFile.java | 29 + .../ensync/artifacts/SyncDirectory.java | 115 +++- .../olexyn/ensync/artifacts/SyncEntity.java | 3 +- src/com/olexyn/ensync/class-diagram.uxf | 51 ++ src/com/olexyn/ensync/flow.png | Bin 0 -> 55334 bytes .../ensync/{handle-deletes.uxf => flow.uxf} | 616 ++++++++---------- src/com/olexyn/ensync/handle-deletes.png | Bin 27909 -> 0 bytes 8 files changed, 452 insertions(+), 410 deletions(-) create mode 100644 src/com/olexyn/ensync/artifacts/StateFile.java create mode 100644 src/com/olexyn/ensync/class-diagram.uxf create mode 100644 src/com/olexyn/ensync/flow.png rename src/com/olexyn/ensync/{handle-deletes.uxf => flow.uxf} (53%) delete mode 100644 src/com/olexyn/ensync/handle-deletes.png diff --git a/src/com/olexyn/ensync/Main.java b/src/com/olexyn/ensync/Main.java index b8b9203..1bf8a43 100644 --- a/src/com/olexyn/ensync/Main.java +++ b/src/com/olexyn/ensync/Main.java @@ -3,7 +3,6 @@ package com.olexyn.ensync; import com.olexyn.ensync.artifacts.SyncDirectory; import com.olexyn.ensync.artifacts.SyncEntity; -import java.io.File; import java.util.*; public class Main { @@ -34,53 +33,10 @@ public class Main { syncDirectory.updatePoolNew(); // - for (File createdFile : syncDirectory.getListCreated()) { - for (Map.Entry otherEntry : syncEntity.syncDirectories.entrySet()) { - SyncDirectory otherSyncDirectory = otherEntry.getValue(); - - if (!syncDirectory.equals(otherSyncDirectory)){ - // Example: - // syncDirectory /foo - // otherSyncDirectory /bar - // createdFile /foo/hello/created-file.gif - // relativePath /hello/created-file.gif - String relativePath = createdFile.getPath().replace(syncDirectory.realPath, ""); - String targetPath = otherSyncDirectory.realPath + relativePath; - String targetParentPath = new File(targetPath).getParent(); - if (!new File(targetParentPath).exists()){ - String[] cmd = new String[]{"mkdir", - "-p", - targetParentPath}; - x.execute(cmd); - } - - String[] cmd = new String[]{"cp", - createdFile.getPath(), - otherSyncDirectory.realPath + relativePath}; - x.execute(cmd); - } - } - - } - // - for (File deletedFile : syncDirectory.getListDeleted()) { - - for (Map.Entry otherEntry : syncEntity.syncDirectories.entrySet()) { - SyncDirectory otherSyncDirectory = otherEntry.getValue(); - - if (!syncDirectory.equals(otherSyncDirectory)){ - String relativePath = deletedFile.getPath().replace(syncDirectory.realPath, ""); - String[] cmd = new String[]{"rm", "-r", - otherSyncDirectory.realPath + relativePath}; - x.execute(cmd); - } - } - - } + syncDirectory.doSyncOps(); - // // WARNING: // Be very carefull when to update the StateFileOld @@ -88,7 +44,7 @@ public class Main { // -> create newFile -> update StateFileNew-> getListCreated contains newFile -> addToMapCreated -> create copies as needed -> updateStateFileOld -> OK // -> create newFile -> update StateFileOld -> getListDeletd contains newFile -> VERY BAD // - syncDirectory.updateStateFileBoth(); + syncDirectory.updateStateFileOld(); syncDirectory.updatePoolBoth(); diff --git a/src/com/olexyn/ensync/artifacts/StateFile.java b/src/com/olexyn/ensync/artifacts/StateFile.java new file mode 100644 index 0000000..3a0fef7 --- /dev/null +++ b/src/com/olexyn/ensync/artifacts/StateFile.java @@ -0,0 +1,29 @@ +package com.olexyn.ensync.artifacts; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +public class StateFile { + + private final String[] types = new String[]{ "OLD" , "NEW"}; + + public String stateFilePath; + public File stateFileOld; + private Map poolOld = new HashMap<>(); + + + public StateFile(){ + + } + + + + + public void update(){ + + } + + + +} diff --git a/src/com/olexyn/ensync/artifacts/SyncDirectory.java b/src/com/olexyn/ensync/artifacts/SyncDirectory.java index 8967730..3bae22d 100644 --- a/src/com/olexyn/ensync/artifacts/SyncDirectory.java +++ b/src/com/olexyn/ensync/artifacts/SyncDirectory.java @@ -1,12 +1,10 @@ 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; +import java.util.*; public class SyncDirectory { @@ -20,9 +18,15 @@ public class SyncDirectory { private Map poolNew = new HashMap<>(); private List listCreated = new ArrayList<>(); private List listDeleted = new ArrayList<>(); + private SyncEntity syncEntity; + private String state = null; + +// For an explanation of what the STATES mean, see the flow.png + private final List STATES = new ArrayList<>(Arrays.asList( "NEW-1", "LIST-1" , "LIST-2" , "SYNC-1" , "NEW-2", "OLD-1")); Tools tools = new Tools(); + Execute x = new Execute(); /** * Create a SyncDirectory from realPath. @@ -30,7 +34,9 @@ public class SyncDirectory { * @param realPath * @see SyncEntity */ - public SyncDirectory(String realPath) { + public SyncDirectory(String realPath, SyncEntity syncEntity) { + + this.realPath = realPath; stateFileBasePath = "/tmp/find" + this.realPath.replace("/", "-"); stateFileOldPath = stateFileBasePath + "-old"; @@ -39,6 +45,7 @@ public class SyncDirectory { stateFileNew = getStateFileNew(); poolOld = getPoolOld(); poolNew = getPoolNew(); + this.syncEntity = syncEntity; } @@ -61,9 +68,13 @@ public class SyncDirectory { * WRITE a new StateFileNew to Disk. This is IMPORTANT in order to make sure that StateFileOld is NEVER newer than StateFileNew.

* WRITE a new StateFileOld to Disk. */ - public void updateStateFileBoth() { + public void updateStateFileOld() { // - tools.generateStateFile(realPath, stateFileNewPath); + if (state.equals(STATES.get(4))){ + state = STATES.get(5); + } else { + return ; + } tools.generateStateFile(realPath, stateFileOldPath); } @@ -81,7 +92,19 @@ public class SyncDirectory { */ public void updateStateFileNew() { // + if (state == null || state.equals(STATES.get(5))){ + state = STATES.get(0); + }else if (state.equals(STATES.get(3))){ + state = STATES.get(4); + } else { + return; + } + + + tools.generateStateFile(realPath, stateFileNewPath); + + } @@ -118,17 +141,89 @@ public class SyncDirectory { } public List getListCreated() { - - listCreated = tools.mapMinus(getPoolNew(), getPoolOld()); + if (state.equals(STATES.get(0))){ + state = STATES.get(1); + } else { + return null; + } + updateListCreated(); return listCreated; } - public List getListDeleted() { + public void updateListCreated(){ + if (state.equals("")) + listCreated = tools.mapMinus(getPoolNew(), getPoolOld()); + } + public List getListDeleted() { + if (state.equals(STATES.get(1))){ + state = STATES.get(2); + } else { + return null; + } listDeleted = tools.mapMinus(getPoolOld(), getPoolNew()); return listDeleted; } + public void doSyncOps(){ + + if (state.equals(STATES.get(2))){ + state = STATES.get(3); + } else { + return ; + } + + + + + + + for (File createdFile : this.getListCreated()) { + for (Map.Entry otherEntry : syncEntity.syncDirectories.entrySet()) { + SyncDirectory otherSyncDirectory = otherEntry.getValue(); + + if (!this.equals(otherSyncDirectory)){ + // Example: + // syncDirectory /foo + // otherSyncDirectory /bar + // createdFile /foo/hello/created-file.gif + // relativePath /hello/created-file.gif + String relativePath = createdFile.getPath().replace(this.realPath, ""); + String targetPath = otherSyncDirectory.realPath + relativePath; + String targetParentPath = new File(targetPath).getParent(); + if (!new File(targetParentPath).exists()){ + String[] cmd = new String[]{"mkdir", + "-p", + targetParentPath}; + x.execute(cmd); + } + + String[] cmd = new String[]{"cp", + createdFile.getPath(), + otherSyncDirectory.realPath + relativePath}; + x.execute(cmd); + } + } + + } + + // + for (File deletedFile : this.getListDeleted()) { + + for (Map.Entry otherEntry : syncEntity.syncDirectories.entrySet()) { + SyncDirectory otherSyncDirectory = otherEntry.getValue(); + + if (!this.equals(otherSyncDirectory)){ + String relativePath = deletedFile.getPath().replace(this.realPath, ""); + String[] cmd = new String[]{"rm", "-r", + otherSyncDirectory.realPath + relativePath}; + x.execute(cmd); + } + } + + } + } + } diff --git a/src/com/olexyn/ensync/artifacts/SyncEntity.java b/src/com/olexyn/ensync/artifacts/SyncEntity.java index d26acae..55c2dcc 100644 --- a/src/com/olexyn/ensync/artifacts/SyncEntity.java +++ b/src/com/olexyn/ensync/artifacts/SyncEntity.java @@ -25,7 +25,6 @@ public class SyncEntity { */ public SyncEntity(String name) { this.name = name; - } /** @@ -38,7 +37,7 @@ public class SyncEntity { */ public void addDirectory(String realPath) { if (new File(realPath).isDirectory()) { - syncDirectories.put(realPath, new SyncDirectory(realPath)); + syncDirectories.put(realPath, new SyncDirectory(realPath, this)); } } diff --git a/src/com/olexyn/ensync/class-diagram.uxf b/src/com/olexyn/ensync/class-diagram.uxf new file mode 100644 index 0000000..b794b23 --- /dev/null +++ b/src/com/olexyn/ensync/class-diagram.uxf @@ -0,0 +1,51 @@ + + + 10 + + UMLClass + + 20 + 20 + 340 + 50 + + SyncEntity +-- +Map<SyncDirectory> directories +halign=left + + + + UMLClass + + 520 + 110 + 230 + 200 + + SyncDirectory + +-- +String realPath +String stateFileBasePath +File stateFileOld +File stateFileNew +Map<String,File> poolOld +Map<String,File> poolNew +List<String> listCreated +List<String> listDeleted +halign=left + + + + Relation + + 350 + 50 + 190 + 90 + + lt=<- + 170.0;70.0;10.0;10.0 + + diff --git a/src/com/olexyn/ensync/flow.png b/src/com/olexyn/ensync/flow.png new file mode 100644 index 0000000000000000000000000000000000000000..4106764f25348e6c73b4ad953522d17f544c2333 GIT binary patch literal 55334 zcmd>mXH=BSvi2B3P(Vd;GJuF8A~`D}h-3kgEP~`Hk{Je-U;t4N5fBhma!!L}$x4(c zIZ2R=FoYq@R|A7b&)#?4weH{V&sqCOPjz*5clA?MPrXl+6=e>Q(2*bzh(og1q;4P( zdvp+pz2AvQ5?EERhm?H*D&aKUp=re7I*&9BoZpVig5h@D{C-$W~FD^-2>N1iR>+pb+B z>ZRV5thAK!5BFce;$F~AQmXd`E6(&yu6>HEJ?oMojzTllltn_tE9Bz{0|?b>cgG(Ap{RbQ`mYfj5Rif@g`YtXmmoGoyBcsbPZ!>RtciCLYo*Pk0OYD8= zl?ZCH@Vb{j9pA<3OV6^iv*~RLUq(^y_T)KC@_=2yqW#=j)M2{2CMH~3*){861|k;9 z-QSX7Aj~*AKBhZdE(tCDu9{S0W@4wk(pzDeA9Zzpj;QY1V+u zRXbsX;YJ8jL{mIA{`m1Dr&jibG4Wa9`{PZC>Sx8{C=d*fm5HT3d6QBnzBN%qMOIW- zQ&UpTafKnajo`GozDjSMcbt>6{_QR%BIQQ_)zh`t;1bh)e8y8LoRvE>I#$ zKRat67@oq(yD+4?%a$FEUFl<|eWlUFaOO_-9Ygq@fD`KX|H+^uMQ8KySChX^Gez8} zGP4gM`FMdE5#u*kcK+;Z%zg^VwLDVjmuf$wanRhg85XUQ4Nf9d2&ITdJYF&LFY1=)oXG)2^RT^D4cOy=O;mwn~xI{&QS{d}E%(#^I;u<6fx9}*#%A4D*vX3; zs(A9|%^Tcm6z-den%`O_mq#?xs-N>f1mv~y?ucz3hfzOX7Ca1g677|j~n;)7+ zFT8&B3T{z+d0Y)zs`Pbg>r`ah)8RR=P{#Jz?`L&u;kG*_)>Q`9(eAOO7;c zL4o1n1#ZjMn7FPyyZ29he94&|-DXqgSAxp+iw5w+vhIqZb|DTc;7_Brt2QcbuJpkk zb3N}s@Lc9=@uJZWhfy0HsGsT_^4ZqCT5H_FT*)P>rbV?0`SGjBwI#FuRGm*Zu4aI; zn?ptCEBM6pnS}011-oN^#!=7S$#tC8I#!dJl~w(mvB0c_P3%~Teu+3M>(w>w^`A

DI`Zhxwev&AaoREVj-X9_w?4*R%w4aGXoX< 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 literal 0 HcmV?d00001 diff --git a/src/com/olexyn/ensync/handle-deletes.uxf b/src/com/olexyn/ensync/flow.uxf similarity index 53% rename from src/com/olexyn/ensync/handle-deletes.uxf rename to src/com/olexyn/ensync/flow.uxf index 1382bbd..48099b8 100644 --- a/src/com/olexyn/ensync/handle-deletes.uxf +++ b/src/com/olexyn/ensync/flow.uxf @@ -4,585 +4,497 @@ UMLClass - 250 - 120 - 140 - 40 + 1350 + 1220 + 130 + 60 - File System -halign=left + StateFileOld +bg=yellow +halign=left +group=1 - - Relation - - 310 - 150 - 160 - 280 - - lt=<- - 140.0;260.0;10.0;10.0 - UMLClass - 100 - 580 - 120 - 60 + 1480 + 1220 + 130 + 30 - Collection of -Accepted -State Files -halign=left + StateFileNew +bg=green +halign=left +group=1 - UMLState + UMLClass - 370 - 410 - 170 - 40 + 1480 + 1250 + 130 + 30 - User initiates a -File System update. -halign=left + ListDeleted +halign=left +group=1 - Relation + UMLClass - 210 - 590 - 180 + 1350 + 1040 + 130 30 - lt=. - 10.0;10.0;160.0;10.0 + StateFileOld +bg=yellow +halign=left +group=2 + - UMLState + UMLClass - 370 - 570 - 150 + 1480 + 1040 + 130 60 - Check if a newer -State File -is available -halign=left + StateFileNew +bg=green +halign=left +group=2 - UMLState + UMLClass - 80 - 240 - 170 - 40 + 1350 + 1070 + 130 + 30 - Update State File -from File System -halign=left + ListCreated +halign=left +group=2 - UMLClass + UMLState - 100 - 500 - 130 + 1090 + 870 + 120 40 - Last Accepted -State File -bg=green + update +StateFileNew halign=left - UMLClass + UMLState - 100 - 320 - 130 + 1090 + 1060 + 120 40 - Current -State File -bg=yellow + get +ListCreated halign=left UMLState - 80 - 410 - 160 + 1090 + 1240 + 120 40 - Accept State File + get +ListDeleted +halign=left Relation - 430 - 440 - 40 - 150 - - lt=<- - 10.0;130.0;20.0;10.0 - - - Relation - - 150 - 350 + 1130 + 990 30 - 80 + 90 lt=<- - 10.0;60.0;10.0;10.0 + 10.0;70.0;10.0;10.0 Relation - 310 - 620 - 150 - 120 + 1120 + 1170 + 50 + 90 - lt=<- -[YES] - 10.0;100.0;130.0;10.0 + lt=<- + 30.0;70.0;10.0;10.0 UMLState - 240 - 720 - 170 - 60 + 1090 + 1380 + 120 + 40 - Update File System -according to newest -State File + do +SyncOps +halign=left +style=wordwrap Relation - 150 - 440 - 30 + 1140 + 1320 + 60 80 lt=<- - 10.0;60.0;10.0;10.0 - - - Relation - - 150 - 150 - 190 - 110 - - lt=<- - 10.0;90.0;170.0;10.0 + 40.0;60.0;10.0;10.0 Relation - 150 - 270 - 30 - 70 + 1120 + 1090 + 50 + 90 lt=<- - 10.0;50.0;10.0;10.0 - - - Relation - - 150 - 530 - 30 - 70 - - lt=. - 10.0;10.0;10.0;50.0 + 10.0;70.0;30.0;10.0 UMLClass - 860 - 0 - 340 - 50 + 840 + 840 + 820 + 1090 - SyncEntity --- -Map<SyncDirectory> directories -halign=left + For Each SyncDirectory +halign=left +layer=-1 UMLClass - 1300 - 90 - 230 - 200 - - SyncDirectory - --- -String realPath -String stateFileBasePath -File stateFileOld -File stateFileNew -Map<String,File> poolOld -Map<String,File> poolNew -List<String> listCreated -List<String> listDeleted -halign=left + 1340 + 1030 + 280 + 80 + + +halign=left +layer=-1 +group=2 Relation - 1190 - 30 - 130 - 90 - - lt=<- - 110.0;70.0;10.0;10.0 - - - UMLClass - - 1620 - 740 - 130 - 60 + 1200 + 1240 + 160 + 40 - StateFileOld -bg=yellow -halign=left - + lt=. + 140.0;10.0;10.0;20.0 - UMLClass + Relation - 1750 - 740 - 130 - 30 + 1150 + 800 + 30 + 90 - StateFileNew -bg=green -halign=left - + lt=<- + 10.0;70.0;10.0;10.0 - UMLClass + UMLSpecialState - 1750 - 770 - 130 - 30 + 1150 + 790 + 20 + 20 - ListDeleted -halign=left + type=initial - UMLClass + UMLSpecialState - 1620 - 820 - 130 - 30 + 1150 + 1970 + 20 + 20 - StateFileOld -bg=yellow -halign=left + type=final - UMLClass + Relation - 1750 - 820 - 130 - 60 + 1130 + 1500 + 50 + 90 - StateFileNew -bg=green -halign=left - + lt=<- + 30.0;70.0;10.0;10.0 - UMLClass + Relation - 1620 - 850 - 130 - 30 + 1150 + 1900 + 30 + 90 - ListCreated -halign=left - + lt=<- + 10.0;70.0;10.0;10.0 UMLState - 1220 - 650 - 170 - 60 + 1070 + 1720 + 120 + 50 update -StateFileNew +StateFileOld +halign=left +style=wordwrap UMLState - 1190 - 770 - 120 - 40 + 1100 + 1160 + 150 + 20 - get -ListCreated + State 1 : LIST-1 +bg=orange UMLState - 1310 - 770 + 1070 + 1570 120 40 - get -ListDeleted + update +StateFileNew +halign=left +style=wordwrap - Relation - - 1230 - 700 - 90 - 90 - - lt=<- - 10.0;70.0;70.0;10.0 - - - Relation + UMLState - 1310 - 700 - 80 - 90 + 1110 + 1490 + 160 + 20 - lt=<- - 60.0;70.0;10.0;10.0 + State 3 : SYNC-1 +bg=orange + UMLState - 1190 - 850 - 120 - 40 + 1110 + 1640 + 150 + 20 - add to -MapCreated + State 4 : NEW-2 +bg=orange UMLState - 1310 - 850 - 120 - 40 + 1110 + 980 + 140 + 20 - add to -MapDeleted + State 0 : NEW-1 +bg=orange - Relation + UMLState - 1360 - 800 - 30 - 70 + 1120 + 1790 + 140 + 20 - lt=<- - 10.0;50.0;10.0;10.0 + State 5 : OLD-1 +bg=orange + Relation - 1240 - 800 - 30 - 70 + 1130 + 1650 + 40 + 90 lt=<- - 10.0;50.0;10.0;10.0 + 20.0;70.0;10.0;10.0 - UMLState + UMLSpecialState - 1230 - 970 - 170 - 60 + 1140 + 1870 + 40 + 40 - Perform -File Operations -for Sycronization + type=decision Relation - 1310 - 880 - 80 - 110 + 1150 + 1800 + 30 + 90 lt=<- - 10.0;90.0;60.0;10.0 + 10.0;70.0;10.0;10.0 Relation - 1240 + 920 880 - 100 - 110 + 240 + 1030 lt=<- - 80.0;90.0;10.0;10.0 + 170.0;10.0;20.0;260.0;10.0;1010.0;220.0;1010.0 - UMLClass + Relation - 1020 - 610 - 440 - 320 + 1130 + 900 + 40 + 100 - For Each SyncDirectory -halign=left -layer=-1 - + lt=<- + 10.0;80.0;20.0;10.0 UMLClass - 1600 - 720 - 300 - 180 + 1340 + 1210 + 280 + 80 halign=left -layer=-1 +layer=-1 +group=1 Relation - 1420 - 780 - 200 - 50 + 1200 + 1060 + 160 + 40 lt=. - 180.0;30.0;10.0;10.0 + 10.0;20.0;140.0;10.0 - Relation - - 1280 - 580 - 40 - 90 - - lt=<- - 10.0;70.0;20.0;10.0 - - - UMLSpecialState + UMLState - 1290 - 570 - 20 + 1120 + 1310 + 160 20 - type=initial + State 2 : LIST-2 +bg=orange - UMLSpecialState + Relation - 1300 - 1200 - 20 - 20 + 1140 + 1270 + 30 + 60 - type=final - + lt=<- + 10.0;40.0;10.0;10.0 Relation - 1300 - 1020 - 30 - 80 + 1140 + 1760 + 40 + 50 lt=<- - 10.0;60.0;10.0;10.0 + 20.0;30.0;10.0;10.0 Relation - 1290 - 1130 - 40 - 90 + 1110 + 1600 + 50 + 60 lt=<- - 20.0;70.0;10.0;10.0 + 30.0;40.0;10.0;10.0 - UMLState + Relation - 1220 - 1080 - 170 - 60 + 1130 + 1410 + 60 + 100 - update -StateFileBoth - + lt=<- + 10.0;80.0;40.0;10.0 diff --git a/src/com/olexyn/ensync/handle-deletes.png b/src/com/olexyn/ensync/handle-deletes.png deleted file mode 100644 index 4bc2151d4231c312c71dc8001abaf1b898f901b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27909 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%0ALXr^ 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