From caed3e64b32c29ac081bd5130c0d67f2d2d5ab84 Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Sat, 20 May 2017 16:26:07 +1200 Subject: [PATCH] YOu can now add trips and you can also serialise them. --- .../java/controllers/AddTripController.java | 19 ++++- src/main/java/model/DataManager.java | 24 +++++-- src/main/java/model/Route.java | 10 +++ src/main/java/model/Stop.java | 5 ++ src/main/java/model/Trip.java | 44 ++++++++++-- src/main/java/model/TripStop.java | 22 +++++- .../java/utils/DataManagerSerialiser.java | 68 ++++++++++++++---- .../resources/serialisation/datamanager.json | 1 - src/main/resources/serialisation/trips.json | 1 + .../controllers/AddTripController$1.class | Bin 1896 -> 1896 bytes .../controllers/AddTripController$2.class | Bin 2071 -> 2071 bytes .../controllers/AddTripController.class | Bin 7730 -> 8198 bytes target/classes/model/DataManager.class | Bin 2551 -> 3062 bytes target/classes/model/Route.class | Bin 1706 -> 2377 bytes target/classes/model/Stop.class | Bin 820 -> 1082 bytes target/classes/model/Trip.class | Bin 1676 -> 2953 bytes target/classes/model/TripStop.class | Bin 1157 -> 1677 bytes target/classes/serialisation/datamanager.json | 1 - target/classes/serialisation/rides.json | 2 +- target/classes/serialisation/trips.json | 1 + .../utils/DataManagerSerialiser$1.class | Bin 653 -> 653 bytes .../utils/DataManagerSerialiser$2.class | Bin 653 -> 653 bytes .../utils/DataManagerSerialiser$3.class | Bin 654 -> 654 bytes .../utils/DataManagerSerialiser$4.class | Bin 0 -> 653 bytes .../classes/utils/DataManagerSerialiser.class | Bin 4053 -> 4951 bytes 25 files changed, 167 insertions(+), 31 deletions(-) delete mode 100644 src/main/resources/serialisation/datamanager.json create mode 100644 src/main/resources/serialisation/trips.json delete mode 100644 target/classes/serialisation/datamanager.json create mode 100644 target/classes/serialisation/trips.json create mode 100644 target/classes/utils/DataManagerSerialiser$4.class diff --git a/src/main/java/controllers/AddTripController.java b/src/main/java/controllers/AddTripController.java index 62ca31e..62e7fc3 100644 --- a/src/main/java/controllers/AddTripController.java +++ b/src/main/java/controllers/AddTripController.java @@ -63,17 +63,32 @@ public class AddTripController extends Controller{ sat.isSelected(), sun.isSelected()}; boolean boolReoccur = reoccur.getValue() == "Yes"; String failure = ""; + boolean fail = false; if (stops.size() == 0){ failure += "You have not selected a route.\n"; + fail = true; } if (ride.getValue() == null){ failure += "You must select a ride (vehicle) for this trip.\n"; + fail = true; + } + for (TripStop stop: stops){ + if (stop.getTime().equals("")){ + failure += "You must have all times for stops filled out.\n"; + fail = true; + break; + } } - if (!failure.equals("")) { - Trip trip = new Trip(stops, direction.getValue(), ride.getValue(), days, boolReoccur, endDate.getValue().toString()); + if (!fail) { + String date = ""; + if (endDate.getValue() != null && boolReoccur == true){ + date = endDate.getValue().toString(); + } + Trip trip = new Trip(stops, direction.getValue(), ride.getValue(), days, boolReoccur, date); System.out.println(trip); Optional result = popUp(Alert.AlertType.WARNING, "Warning!", "Crucial Information missing", failure, ButtonSets.YesNo); + parent.getSession().getDataManager().addTrip(trip); if (result.get() == ButtonTypes.No){ System.out.println("My Trips page to show up and impletmeneted");//TODO implement here. //changeScene(SceneCode.MY_TRIPS); diff --git a/src/main/java/model/DataManager.java b/src/main/java/model/DataManager.java index 78e19c1..6014032 100644 --- a/src/main/java/model/DataManager.java +++ b/src/main/java/model/DataManager.java @@ -15,19 +15,17 @@ public class DataManager { private ObservableList rides; private ObservableList stops; private ObservableList routes; + private ObservableList trips; - - public DataManager(List rides, List stops, List routes){ + public DataManager(List rides, List stops, List routes, List trips){ this.rides = FXCollections.observableArrayList(rides); this.stops = FXCollections.observableArrayList(stops); this.routes = FXCollections.observableArrayList(routes); + this.trips = FXCollections.observableArrayList(trips); } public DataManager(){ - this(FXCollections.observableArrayList(), FXCollections.observableArrayList(), FXCollections.observableArrayList()); - /*rides = FXCollections.observableArrayList(); - stops = FXCollections.observableArrayList(); - routes = FXCollections.observableArrayList();*/ + this(FXCollections.observableArrayList(), FXCollections.observableArrayList(), FXCollections.observableArrayList(), FXCollections.observableArrayList()); } public ObservableList getRides() { @@ -74,4 +72,18 @@ public class DataManager { return true; } + public ObservableList getTrips() { + return trips; + } + + public boolean addTrip(Trip trip){ + for (Trip t: trips){ + if (trip.equals(t)){ + return false; + } + } + trips.add(trip); + return true; + } + } diff --git a/src/main/java/model/Route.java b/src/main/java/model/Route.java index a5c4b60..a433124 100644 --- a/src/main/java/model/Route.java +++ b/src/main/java/model/Route.java @@ -46,6 +46,16 @@ public class Route { return true; } + @Override + public Route clone(){ + ObservableList stopObservableList = FXCollections.observableArrayList(); + for (Stop stop: stops){ + stopObservableList.add(stop.clone()); + } + Route route = new Route(this.name, stopObservableList); + return route; + } + public String toString(){ return this.name; } diff --git a/src/main/java/model/Stop.java b/src/main/java/model/Stop.java index 6f947b3..308b311 100644 --- a/src/main/java/model/Stop.java +++ b/src/main/java/model/Stop.java @@ -30,4 +30,9 @@ public class Stop { public String toString(){ return address; } + + @Override + public Stop clone(){ + return new Stop(this.getAddress()); + } } diff --git a/src/main/java/model/Trip.java b/src/main/java/model/Trip.java index e4ef571..adfd320 100644 --- a/src/main/java/model/Trip.java +++ b/src/main/java/model/Trip.java @@ -1,18 +1,23 @@ package model; +import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import java.util.ArrayList; +import java.util.Arrays; + /** * Created by Gondr on 5/04/2017. */ public class Trip { - ObservableList route; - String direction; - Ride ride; - boolean[] days; - boolean reoccur; - String endDate; + protected transient ObservableList route; + private ArrayList serialisedRoute; + protected String direction; + protected Ride ride; + protected boolean[] days; + protected boolean reoccur; + protected String endDate; static int MONDAY = 0; static int TUESDAY = 1; @@ -36,4 +41,31 @@ public class Trip { return tripString; } + public boolean equals(Trip trip){ + if (trip.direction.equals(direction) && ride.equals(trip.ride) && Arrays.equals(trip.days,days) && trip.reoccur == reoccur + && trip.endDate.equals(endDate)){ + for (int i = 0; i < trip.route.size(); i++){ + if (!route.get(i).equals(trip.route.get(i))){ + return false; + } + } + return true; + } + return false; + } + + public void serialise(){ + serialisedRoute = new ArrayList<>(route); + for (TripStop trip: serialisedRoute){ + trip.serialise(); + } + } + + public void deserialise(){ + route = FXCollections.observableArrayList(serialisedRoute); + for (TripStop trip: serialisedRoute){ + trip.deserialise(); + } + } + } diff --git a/src/main/java/model/TripStop.java b/src/main/java/model/TripStop.java index c0be4fe..99f7b65 100644 --- a/src/main/java/model/TripStop.java +++ b/src/main/java/model/TripStop.java @@ -9,8 +9,10 @@ import javafx.collections.ObservableList; */ public class TripStop{ - private StringProperty time; - private StringProperty name; + private transient StringProperty time; + private transient StringProperty name; + private String serialiseTime; + private String serialiseName; public TripStop(String name, String time){ this.name = new SimpleStringProperty(name); @@ -36,4 +38,20 @@ public class TripStop{ public StringProperty nameProperty() { return name; } + + protected boolean equals(TripStop trip){ + if (getTime().equals(trip.getTime()) && getName().equals(trip.getName())){ + return true; + } + return false; + } + + public void serialise(){ + serialiseTime = time.getValue(); + serialiseName = name.getValue(); + } + public void deserialise(){ + time = new SimpleStringProperty(serialiseTime); + name = new SimpleStringProperty(serialiseName); + } } diff --git a/src/main/java/utils/DataManagerSerialiser.java b/src/main/java/utils/DataManagerSerialiser.java index 62d9404..e72f49f 100644 --- a/src/main/java/utils/DataManagerSerialiser.java +++ b/src/main/java/utils/DataManagerSerialiser.java @@ -1,10 +1,7 @@ package utils; import com.google.gson.reflect.TypeToken; -import model.DataManager; -import model.Ride; -import model.Route; -import model.Stop; +import model.*; import java.io.*; import java.lang.reflect.Constructor; @@ -23,17 +20,30 @@ public class DataManagerSerialiser extends Serialiser { } + /** + * serialise DataManger + * @param dataManager + * @return + */ public boolean serialise(DataManager dataManager){ ArrayList rides = new ArrayList<>(dataManager.getRides()); ArrayList stops = new ArrayList<>(dataManager.getStops()); ArrayList routes = new ArrayList<>(dataManager.getRoutes()); + ArrayList trips = new ArrayList<>(dataManager.getTrips()); boolean serialRidesSuccess = serialise(rides, "serialisation/rides.json"); boolean serialStopsSuccess = serialise(stops, "serialisation/stops.json"); - boolean serialRoutesSuccess = serialise(routes, "serialisation/routes.json"); - return (serialRidesSuccess && serialStopsSuccess && serialRoutesSuccess); + boolean serialRoutesSuccess = serialiseRoutes(routes, "serialisation/routes.json"); + boolean serialTripsSuccess = serialiseTrips(trips, "serialisation/trips.json"); + return (serialRidesSuccess && serialStopsSuccess && serialRoutesSuccess && serialTripsSuccess); } - public boolean serialise(ArrayList routes, String filepath){ + /** + * Serialises routes + * @param routes Routes to be serialised + * @param filepath File path to serialise it to. + * @return + */ + public boolean serialiseRoutes(ArrayList routes, String filepath){ for (Route route: routes){ route.serialise(); } @@ -49,6 +59,37 @@ public class DataManagerSerialiser extends Serialiser { return true; } + /** + * Serialises trips + * @param trips Trips to be serialised + * @param filepath File path to serialise it to. + * @return + */ + public boolean serialiseTrips(ArrayList trips, String filepath){ + for (Trip trip: trips){ + trip.serialise(); + } + try{ + String path = getClass().getClassLoader().getResource(filepath).getPath(); + Writer writer = new OutputStreamWriter(new FileOutputStream(path), "UTF-8"); + gson.toJson(trips, writer); + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + /** + * loads the data manager from file + * @return whether the data was loaded properly or not + * @throws IOException No File + * @throws NoSuchMethodException No Method to Write + * @throws IllegalAccessException No access allowed to file + * @throws InvocationTargetException Thread error + * @throws InstantiationException Nothing set + */ public DataManager load() throws IOException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { Reader reader = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("serialisation/rides.json"), "UTF-8"); ArrayList rides = gson.fromJson(reader, new TypeToken>(){}.getType()); @@ -66,12 +107,15 @@ public class DataManagerSerialiser extends Serialiser { route.deserialise(); } -// Constructor c = DataManager.class.getDeclaredConstructor(List.class, List.class, List.class); -// DataManager dataManager = (DataManager) c.newInstance(rides, stops, routes); -// return dataManager; + Reader reader4 = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("serialisation/trips.json"), "UTF-8"); + ArrayList trips = gson.fromJson(reader4, new TypeToken>(){}.getType()); + reader4.close(); + + for (Trip trip: trips){ + trip.deserialise(); + } - return new DataManager(rides, stops, routes); -// return new DataManager(); + return new DataManager(rides, stops, routes, trips); } } diff --git a/src/main/resources/serialisation/datamanager.json b/src/main/resources/serialisation/datamanager.json deleted file mode 100644 index e940b44..0000000 --- a/src/main/resources/serialisation/datamanager.json +++ /dev/null @@ -1 +0,0 @@ -{"rides":[],"stops":[{"address":"a"}],"routes":[]} \ No newline at end of file diff --git a/src/main/resources/serialisation/trips.json b/src/main/resources/serialisation/trips.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/src/main/resources/serialisation/trips.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/target/classes/controllers/AddTripController$1.class b/target/classes/controllers/AddTripController$1.class index aad0f8879b44994df40b754fbb43d6f138c0d1fe..7f6d76d0339a92cb770d3aa1ea793b9a9e31d99a 100644 GIT binary patch delta 41 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 Q{(*nuUz!t_xE*4=4?LI#h5!Hn diff --git a/target/classes/model/DataManager.class b/target/classes/model/DataManager.class index 9487de1f72de45ecac56be34e6af34281eece3e3..cc4e63f8004bd85ceb85f8ec9506ee690263215e 100644 GIT binary patch literal 3062 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 Gy#GH6pALNh diff --git a/target/classes/model/Route.class b/target/classes/model/Route.class index 0441ec84a84a718ff1997254c4ab37f95ab40a62..0c983e9b1b7a6c884db775ab6d7848f34a86b2b1 100644 GIT binary patch literal 2377 zcmbVNT~ixn6n@@h!;)kRlrL>j0cmXrl(f>;N+OC_v>Jjom9~C%Nw%;xWMi`F&|CjS ze}Ll+7j{Nyu`^Du{TcoYXZ(21?y^asmW~&B_q=D%$8*ke&gS>OfBg->1#BcRgoQZz z@qPk}_&}s9I+hZM;X}E6l;Ckyj*rFk6S2xCv5Z0zEBI87&vaZ%pch3^U)S-uSg*=) zL&r@8t!i#s3jO)J<~=i0F{|sDqFcAC>sf_Z!*yy6g$eKFovlpCsZ^|zYdh6OW@W8m z)$f^W6)SHyTw2GA_IlNHn{|def3!y~zv+~%3bQ%2>^%K@8P7H=cEc)*j(LZCP)*ma zWESdm^L~)Y$CK&QABxwNv#Yi{uW&haxVWS7WhYnJoke0Kw7gxl3eC+mtA1T7mVP-U zv$ARuG4Fv=b2n_lJ{DAV&1t$83mfjVyGmy_{zZ7_{PA?IH54$EmG%fit)DwUcsvd zrZ8>bEM^Rx!) zBh&~MAJrM^Qkdi^80HySy!z5l5WAKB1==HY?LZd<5f4FvPcU{bYm>}=%)TJALOP5! zM@xxiq!~wVRni`31WER!6~_qUa47;z89pUWjA0@_Q}6?HdCJi?=UC{>Wulc7)b6Yu zbe?#Iv)>hQJBRZ;CCDa&N!6o*U}_iLKVm4oi#WyjE)owA)3&4A+BQvmnuhsz44h$c zDKZeKkjF)cM4;4~1iZ@A`!Yn;BL`I}ou5Xa~DRn~m{9`2Z!p9yAh2`lz98-9J z5ehvDPtjYLI=hR$JsgkV#!vtJ@dW)sUu5bL29~F#aLuFdB)TZi@^*oxT_mnc?9p4u z;j)J=%{Sx3eTh05#`yrJhB;cuFz1M05VuCke>W1;(1XZd=+W`Ej=4WEMs4=RsLUN^ gqi=yQC1EF(yBIu3W%95y-tnqdtU=*j$`QQxF9-Mb`Tzg` delta 718 zcmZvZ-!5ZO6vn^3d+O-1>7N-@T8g5h{v1Qm@waa<$#{aI1f|KO<5n_>E0^aPL_#Da zB$LU+J&)l*#J5@wGt-N+_S$Q&@AvJs&wcE?z4-9-`wl=JMF$3xA+*7DFon;OP1~4p z5JX-!vkt?Ygn4N#*!W^&;d<{>hgxgZwc7WcgKh65km`)1-=G~GHWm$*uxt=U#QPIS z6yjJh_<)ZFgUA>RVb~yxRfV?w>Snp(eyjedl@%hprNfe2DIILPU)Oib8#V9Dx>&&g ztqt!QfEGNnpF)O0l(|NXAL0JK6E^cWx>!$mkHJi-n|(1@j8VoILhO%H(ZfnVxpJCB zimPPeq3W5qX!J5Sens3GzJ08vsaJH_Y8f~Z7l)^ya~O#_y`hV|&=qH?_p@h#o#JA0 zxf|HO5V(bP&ArAOC&|fE?>NTi@EygM{VrGG1dqtkS3aSoUQNGK2Yoev0Db;aQ*8Y! z&NLA>Mjs(Oi%*OK*(XfHJGQf`+q<-r6?xYwD1`udK(j$?K$WVBu0mM^wW2%6v4V?h2ggDD3jfdr zNRUb(@d11k;!N!%PRasV9?!jV?|Izu?>|3&0eFgS0|jgqk;grQ%Y6eiJkaq_29M-Y z*U=Er?S4OUMXe)+g@D4_0zeOI8=@dEc? zeA;uPH+Iiw#_EKQ?H}5aC*w4!#_v2*nVnO1`J@SlBryhVygQXqsW&b&v1XL1(cBMX z+b2+|o<(XLQ_qN)0xR9vcHY0ThbeI(4iirTdB+a}3S1@8f{aDx*S! zdtorr(PZ2W$C2aid(vf5TG*C@GjRni6Ga#%EUf8xY@&)Mte=y}8q>rEZVHs=(@v-a zYV*{d)OZla-SKc3MzPzUi4e%u<=`{@Q)dfzl)f@-CI$qC0to^Knn0FE?wM=IOX^vq>fG9lo2~E4cd?h!3gl delta 440 zcma)1J5Iwu6r8ulcD&g*#^z@N1d>z~7$ic;6(~4?0})aPgd(EN8IUhRkt#(FkXvvE zYQ(HThJpgE^mg87-ppIn=3a00u~-5)M^D4UZU7f8&9JAjj{_fVABQg|@5MmUet;tb zA2ovr>pnUL3AzIPFu5I$v+L>PNf3?l=R6zdk9XPCU^Kj$7H@KqdXx|-OD1xO18By2 zajIG~!&(T3QDY5t_6!=#w#cxx5KaCTS-$X5-?CZD%A7lo=TNUKD3ZZbgt1w!F(r1t z*9hV-Y4$HUtx&8~*taBI>Lv8I@k`&U^u0VHaJpiOGbg$K@f%n3F*a#Icn5f$ RM1s!(qIv{!76HzRNt>a`A zbvPxbb22+!gFFgi#>C-F6b_0qbH$}3W?al0V$O=05OYqx;G2s(w5YiU^DebO8^ zkDpCu3b~w>aqU9BnCu-XTF$sRlC!$)qMOnXN!z1&(=9nXvE$JvTDwmdvQ{qH@7QB$ zw=kC4!x)Pg(>8N<(aQFf@2*#ok|o#9CEFawobYbjG~fQbF(X;qDTCIqq z{(+9PT1Ad_wD)-PaQ}gUzVddcv#(1%52xGu2l~`BlpZKY2({XI+ufsKF#c%nQV*t4 z4SslN=s}03Bg|<(DJRR_cHZhKogT5Aekq{vQplLOBPPk`+S?4cCu}k>!;2J(yfn;p zofw;OKlK>E=PA&GNFOVeuv;h>P{Y!A(}O`YL|I=dONz`&S!YUSj@c}VSLrU*#Bypj zi4k873(~HcId#|^^B9O!wcuPY~)~fOhw`Ou)F{9~1$;nuqwvZeV z23w?+478%hz?0Zupc$JDY(a~GB%U&`726Cvjm;Y3{iHu8z+xxNVr)Y(R%DwLV`e@Z z%R2VBm5+@~aJz-5Bxq8px_9Ix#jfLmfw%FFj&}{bhl@Hc8F(Kb7&w5-IzE)~BLg4f z6AcUJ_MtrbR70H#Ik)Wu_Gbp-Xfp6QzF_JGzQk7szQ#8O4x>lMw+6n$_Xb{){I+9< zfoH@#E9N;dJH_l0lfn)bY4&oeaQ4nF*K$m^z>Zrhn-6{WuzW@P90_KL*oTW}$>_?v z)~LlG`nZ`ZS-r<8-*{KGT09Txx{AY!XpR@0)26FoXIa{1hQ0U3aFyoDq^GI_dtMsq ztIy6jQg-G0W(lS?_4x46@Q`TIKWg#X`ng!W!>moUhLsBCOrv*^3c0`XrcQ}$!*+$w zhM8_relt9i0G%r9vCi^d^2m6Byjsldt_p_OJZ0%THhV48sVh`I5tTQ$hSdMTRD3?P z&?&6tw<*GJ=t5kQ?tzAlT=}qxf6B75P9PwS#b*KOEj6;e)W{A~Bb$t4SX8P;3RR8N zsv0R*HBzx^q-fPh-Es`^u2$^ky?eO2%~9vLF>wQ0qIn9w#O5jZ6I-SbNHhkf5KPnu zrw~dshNhtZN>4wYr(MVUfz?F0hIz%9*IItL*P)Slu2C6oz+QSBC`U&d_Ho5~yzFHr zdHU3zWa?Kl$u*#6l5J4UB;OGBb8ZlOImV_6W9^)Epp#be8R8j$erL#EV_aLu0mXee!@Xcbxw74sMWuF6*tN#e?~JO z_*UIQtq*@5MNrb_3(`ybGK(W=Z%h1!xuuQ`hEahamCJ7wgJdMVy_wUR~r$Lo<7Z&kFnxGV02zo1vx0i8+ zdTD_}=vDBxdGN}heD|bB f)v8Gvc+E1l)pE+b5w%!>rC7<;Dte{q>qGy)!(f<` delta 703 zcmX|<%T7~K6o&uP)3Q$wyU-gg*WS4*audrX(jqi7-Maz!i6+x zzrTTTRulYNIMh4$CRESY##OecsYXuMl{<|RSCj1H@DNW>mtV5^I#XT+H$);Dq9qoh uwJAi>gh+WI(n&5d7u?}MuArbtOHnt?J{ihokwjaXk)vLo+orfJg6V%4yFZ)& diff --git a/target/classes/model/TripStop.class b/target/classes/model/TripStop.class index 983649d6ce0837f2494ff5d3b152fbc32cab301b..464c3a26b7f9611922f4e7f53356f85b1a6df8b9 100644 GIT binary patch literal 1677 zcma)6TTc^V5ItYJWof(I%1uRXg3t?6<*p!#D8>X)10m73Ev&d$+S)EgU-=jQ2OcyL zNHj4%`=g9!cDH5ACGq9^W@cy3%sKP5fBydX1z-wKV`xQI$L$zGxD!PSCghlm@!PbH z8M$X;jLgNLtnseo%AX*%gJ>)jd|_vm0f*wC)s3 z97W%;9BEFrS^uGkUa3NNUO-DoNOMmCL)1I%(qMhqH}jmhJ$ZKI z)En6i2~fs$$J~1V+${Mlqc!an!bxcm-?jp=*m`llyk)J}qEk~}hkgSicw%5!tQ9#r&}pCxoeItM zo2i3&k=wPl9EIUarmK63q)t^8>euN(aNl7rMWJpX{x{L1Y?z8464kuT6CGLOR-6I-`N&DjkhacGT~0`E&--$B2?n z^cb-(Xr~va7k9mgb{IY+pRlWOv%9Vg2N~m9#sf?TYD@=^Zye)sheugQCWRkzuDn`hx? U`1of@WG(>TUxU9zz!1j&0k8fuSO5S3 literal 1157 zcma)5ZEMp|6n<`-HcOgqUEQX0FRr?mG@Xlrewqj(_^C{xrQpZ3#+s2PAYC{zI`knozIhXk}%5_^GtTV0UJx z=#1f1$t<9 z8Icg$%b-EAOly_00TdKz-?lCxte+^nZC;}I9g2*PWL)|x;VZP(s2v1W2wcSqwy090 z%I=s1x3EeX(UEIwbOc8giV763<92%JQ`-4m#rlTQ1@~ delta 13 UcmeBU?PJ~G%EV|l*^S8q026z049zLb`lbU8cjww5cYMbW3{xTGnn{UE{ur_KfsSN z-a!{G47O?SJSE2sIzukGlX3NkVLKQnQpNr$Pxuwr zJQB7mtmI0@!X6W`CACc2412Yy%zB@}>6n3FC+$eL*dD)8bW#pX$W@<{F5#a; zC$+%fU1}|CNAWlo1b3(1Qf-o>d{;)ACu2*(7eQ!-eq>CfgdfF5`&Qg45hi}`X(W2) zLFiU+&mXy;R_UKu%bx-nC#_&eR+Znga&+9L$x!H;u?@w!Obu`R*^a|hiRwGkp)#@5 z(UnN<%)rHlhfQpGm_g2ii*0J_l&)5r4Ez83X4ssfLCsc%4;WTz^`BaPS*CKbwR#_W z^zIIQ0ahxd-qMVgi&=_!%G$`#1PYCV7qG@FGS7rEDA1mpa1G`tuY9xMVSy0wCu-yY ZMM4>rusDfjEKzi@j1|mJcw~ekjW6(Kr3nB4 literal 0 HcmV?d00001 diff --git a/target/classes/utils/DataManagerSerialiser.class b/target/classes/utils/DataManagerSerialiser.class index ec042656f773b56f15a68849cde3001bb5950dd5..b4b11fded2f71f26a9ff7621e21592affb13444f 100644 GIT binary patch literal 4951 zcmcIoX?PRY6+L5*H1c@ZWb7a)0SpA&*a$FTk%2-DCI;CCY?ByD+d&@N0$Ea}F@bLB zl5}rFm$ao#_l1_yHqcgXaGIt|x}q-Aq=J%4H^8Q4F}bqzJ-Z1c$}EeSj1r+8Q<`i>O zaj~PawmT;Mqe@n8#X8-YOS(=@!+dWxnTg)6B!os|)A@C#xVvxfnS_&dlbJN&9@T3FnqDP-SNHOfbt$<0qw1)Ub8dC6v<6 zXMjmhW$a;Q*3?|F!-F};9-fKFVI^VKhBvpdG-@x6HW?^rFiRNa4NMyNl7R;eT;)W6 zW+Inxx`>*F#TB>dIw_BZ?byN1S7CQqn8HIc|78mg%jhfecmxk=SX2bfmhwc^9$j}b zpGjNj#8+>aS9?^=YlvKDsv6I?J&I#D*h)3>{(KV0EPM@LXAfBT1|GHWO?-r{SF0#1?)hQ>GWJbPT~LuGF0_ zMd20S!te11S>lf*+gZ4F)do@elZ8LyFBblaCsbR^YQb)rb-vxg-z3sml{RTua09DL zC{JowGE2PN_}*-P@qi!~gr~c&o8(}-84BkXvGD-WuuKUQo%Ci%$74N?JC+$P?EnqS zr!~4$DQDD9?N-EJrm}WgCFhK!oP-niMR6?{+ zhm3~R+~MMWjnUD6JV9TGDGt@t`BIR7tS<>u~(^%Z8qlpYBp4Im7#L_Z6 z!&aADE02|lEhIeaLD}F37FEY*5n|z&F+1PuoN?7%fMlqr)yu-7z5=`N#7U+??fKK# zc``39b+I6Y%rH_y+RU4_@%831Ej5gj7KQgBHyV0VG_SwTyl7J^*f@E`aT*$ZNXm~I zuN2X=<3^!3*iu+XNxNK-7ml^lK**;wgk0i>AFvHC6hH@0;{^=ACBQDzMJ5zh4Y+pV5 z_vRy5!RvmE-yA>y8rg6MpF8>1&Rj9^V)f z_V7su+BmAI4dkX!HMF*X>PhH5{y4yKuRjiQ9Mk<5LtX+ct>I7sHJgJiZDCUeMoUBw z*A`%H4z)xA;W-7&-CR>2JdcKY<2)ABht9*QuQ?AxzW}}Z5?9q#w6~y!7T|wV3*X2cM&=h=$FwfK(ph7eO_$;(<6ET zbr-HZ*;2s50_s}}Xei(&mSoY;6e2@ylUN*HGKuHJ^eb4pRvg2e4KPAMZ$9*Y zBVfRJ3QKYZMuHfnvSPrsM?ZBu9!eRkP8Pd}z}Ji~xY;2FdMw1@7r%;5Ul6y1f?RudZYya|nYKKd#1EC*=m=?{_sWh1sjzlQq}QZ(i&4l92;z*AWI wG-3ukF*oc|OwiC`ILn#poeb|RmwE|hRd^}+17vcYj=jIA|J&;SuJL~V11tdeApigX delta 1790 zcmYk7X>=1+7>1uoCb?l4wnAG%DP=E&mQq^^1c54xfV3!^R7D6-k+m!ZagDg)f{G5P z1w>q+E~qS;3RT1v#q|%zAO80EPycgNd~c?Q_BM6tcUULOkK|MDy(zl<_n;iA2;h0amwcg@ruryX0P4jlJGd5{I}Fe&=(M?|pvYNA+&^gJLtR>?a$mPgv-TOlzhgvnjKtd8`)Tao08M} z%ml|75mfobr~gdUN1Ym()xl;zwql$VWiJ;;fLg8N^;Dy~qkAmXfpbzuggUKOPe>vz z{h1)k51p9EBt1DIXtGuXaLS32(B6{Zl0PDwswgly5_PduWkEM<#8XMPz{}CS&J@Pl z=u;SP!!I;#7`GiadR$01pK%aIc8M|#RL)XHFi5&7Q})4J$B=v#3&KoYRVXLdGDUUx z%w;Omh-3wwO1;de0#pk)P2tBfitCw9OhL++AuFyoh0K&?n5DFX|qi>FWjhz%WbyCz+*+FqZ{|=IA_Y?!hSnm?M3~a}1tjsYe zdfYv(oI|)-HI;@eX1PXvpx%>=6oKV>Jz9r5rB25%j|w@DlY1qL#Yz)Z+$NUnfM<(| zq$-}zO$s$GA9jHlm`+a?3gHS7*LR8b)Ya7yEX#9j6|{_7$SzR(me5cy_T?PaXvyo1 z`!_Me(#w==H8jP!Rl5-t;BdRZA#EKhp_}$EbW+yT#f(+dU`xf2d6tPzhBis8!*UGI zG2%Rt22ngR^v~w0w8{$sjRI75Qf>jGa*PfEX;=JpAwqxz8UoTWA(F99QWm1X8jH=5 zjwfTnB;%T9+9XZaJd3T>HPA#dk;_uqe&zR0#x_+X-DJFjsuOA^6nGsyWRKUOs?!`M zh~r73Dy`NhlaY*fO1XQb*Zm^xl=Rvm?$3%oI~^oBURpEzFEBw%Zwh9it=E%#=Znzcxp)TRC v%&Y$Y>r%KZ1+GF>`ASjBYMQx|H41r`;1SkJmoPvjrF6Gfd3e)*N&fl|g|{@R