5555public class CaDoodleFile {
5656 public static final String NO_NAME = "NoName" ;
5757 @ Expose (serialize = true , deserialize = true )
58- private ArrayList <ICaDoodleOpperation > opperations = new ArrayList <ICaDoodleOpperation >();
58+ private ArrayList <AbstractCaDoodleFileAccepter > opperations = new ArrayList <AbstractCaDoodleFileAccepter >();
5959 @ Expose (serialize = true , deserialize = true )
6060 private int currentIndex = 0 ;
6161 @ Expose (serialize = true , deserialize = true )
@@ -65,24 +65,23 @@ public class CaDoodleFile {
6565 @ Expose (serialize = true , deserialize = true )
6666 private TransformNR rulerLocation = new TransformNR ();
6767 @ Expose (serialize = true , deserialize = true )
68+
69+ // Non Serialised private variables
6870 private TransformNR workplane = new TransformNR ();
69- @ Expose (serialize = false , deserialize = false )
7071 private File selfInternal ;
7172// @Expose (serialize = false, deserialize = false)
7273// private List<CSG> currentState = new ArrayList<CSG>();
73- @ Expose (serialize = false , deserialize = false )
7474 private double percentInitialized = 0 ;
75- @ Expose (serialize = false , deserialize = false )
76- private HashMap <ICaDoodleOpperation , List <CSG >> cache = new HashMap <ICaDoodleOpperation , List <CSG >>();
75+ private final HashMap <AbstractCaDoodleFileAccepter , List <CSG >> cache = new HashMap <AbstractCaDoodleFileAccepter , List <CSG >>();
7776 private static Type TT_CaDoodleFile = new TypeToken <CaDoodleFile >() {
7877 }.getType ();
7978 private static Gson gson = new GsonBuilder ().disableHtmlEscaping ().setPrettyPrinting ()
8079 .excludeFieldsWithoutExposeAnnotation ().registerTypeAdapterFactory (new ICaDoodleOperationAdapterFactory ())
8180 .create ();
82- private ArrayList <ICaDoodleStateUpdate > listeners = new ArrayList <ICaDoodleStateUpdate >();
81+ private final ArrayList <ICaDoodleStateUpdate > listeners = new ArrayList <ICaDoodleStateUpdate >();
8382 private final ArrayList <Thread > opperationRunner = new ArrayList <Thread >();
8483 private boolean regenerating ;
85- private CopyOnWriteArrayList <ICaDoodleOpperation > toProcess = new CopyOnWriteArrayList <ICaDoodleOpperation >();
84+ private final CopyOnWriteArrayList <AbstractCaDoodleFileAccepter > toProcess = new CopyOnWriteArrayList <AbstractCaDoodleFileAccepter >();
8685 private javafx .scene .image .WritableImage img ;
8786 private boolean initializing ;
8887 private static HashMap <String , VitaminBomManager > bomManagers = new HashMap <>();
@@ -100,18 +99,20 @@ public void renderSplashFrame(int percent, String message) {
10099 private boolean timelineOpen = false ;
101100
102101 public void close () {
102+ //new Exception("CaDoodle File Closed here").printStackTrace();
103+ for (AbstractCaDoodleFileAccepter op :getOpperations ()) {
104+ op .setCaDoodleFile (null );
105+ }
103106 for (ICaDoodleOpperation op : cache .keySet ()) {
104107 cache .get (op ).clear ();
105108 }
106109 cache .clear ();
107- cache = null ;
108110 clearListeners ();
109- listeners = null ;
110111 toProcess .clear ();
111- toProcess = null ;
112112 img = null ;
113113 for (Thread t : opperationRunner )
114114 t .interrupt ();
115+
115116 }
116117
117118 public CaDoodleFile clearListeners () {
@@ -158,7 +159,7 @@ public void initialize() {
158159 if (indexStarting > opperations .size ())
159160 indexStarting = opperations .size ();
160161 for (int i = 0 ; i < getOpperations ().size (); i ++) {
161- ICaDoodleOpperation op = getOpperations ().get (i );
162+ AbstractCaDoodleFileAccepter op = getOpperations ().get (i );
162163 if (op == null )
163164 continue ;
164165 setPercentInitialized (((double ) i ) / (double ) getOpperations ().size ());
@@ -245,6 +246,8 @@ public Thread regenerateFrom(ICaDoodleOpperation source) {
245246// .printStackTrace();
246247 }
247248 Thread t = null ;
249+ CaDoodleFile cf = this ;
250+
248251 t = new Thread () {
249252 public void run () {
250253 this .setName ("Regeneration Threads" );
@@ -270,11 +273,12 @@ public void run() {
270273 setPercentInitialized (((double ) getCurrentIndex ()) / size );
271274 // com.neuronrobotics.sdk.common.Log.error("Regenerating "+currentIndex);
272275 int currentIndex2 = getCurrentIndex () - 1 ;
273- ICaDoodleOpperation op = getOpperations ().get (currentIndex2 );
276+ AbstractCaDoodleFileAccepter op = getOpperations ().get (currentIndex2 );
274277 getSaveUpdate ().renderSplashFrame (percent ,
275278 "Regenerating " + op .getType () + " " + currentIndex2 );
276279 getTimelineImageFile (op ).delete ();
277280 try {
281+ op .setCaDoodleFile (cf );
278282 List <CSG > process = op .process (getPreviouState ());
279283 storeResultInCache (op , process );
280284 setCurrentState (op , process );
@@ -318,6 +322,7 @@ public Thread regenerateCurrent() {
318322 }
319323 fireRegenerateStart ();
320324 Thread t = null ;
325+ CaDoodleFile cf = this ;
321326 t = new Thread () {
322327 public void run () {
323328 timeOfLastUpdate = System .currentTimeMillis ();
@@ -326,8 +331,9 @@ public void run() {
326331
327332 this .setName ("regenerateCurrent Thread" );
328333
329- ICaDoodleOpperation op = getCurrentOpperation ();
334+ AbstractCaDoodleFileAccepter op = getCurrentOpperation ();
330335 TickToc .tic ("Start regenerate" );
336+ op .setCaDoodleFile (cf );
331337 List <CSG > process = op .process (getPreviouState ());
332338 TickToc .tic ("Finish regenerate" );
333339 int currentIndex2 = getCurrentIndex ();
@@ -350,7 +356,8 @@ public void run() {
350356
351357 }
352358
353- private void process (ICaDoodleOpperation op ) {
359+ private void process (AbstractCaDoodleFileAccepter op ) {
360+ op .setCaDoodleFile (this );
354361 List <CSG > process = op .process (getCurrentState ());
355362 int currentIndex2 = getCurrentIndex ();
356363 storeResultInCache (op , process );
@@ -377,7 +384,7 @@ public boolean isOperationRunning() {
377384 return false ;
378385 }
379386
380- public Thread addOpperation (ICaDoodleOpperation o ) throws CadoodleConcurrencyException {
387+ public Thread addOpperation (AbstractCaDoodleFileAccepter o ) throws CadoodleConcurrencyException {
381388 if (o == null )
382389 throw new NullPointerException ();
383390 toProcess .add (o );
@@ -393,7 +400,7 @@ public void run() {
393400 while (toProcess .size () > 0 ) {
394401 result = OperationResult .APPEND ;
395402 this .setName ("addOpperation Thread " + toProcess .size ());
396- ICaDoodleOpperation op = toProcess .remove (0 );
403+ AbstractCaDoodleFileAccepter op = toProcess .remove (0 );
397404 if (getCurrentIndex () != getOpperations ().size ()) {
398405 try {
399406 fireRegenerateStart ();
@@ -578,9 +585,9 @@ private OperationResult pruneForward(ICaDoodleOpperation op) throws Exception {
578585 imageCache .delete ();
579586 }
580587 if (res == OperationResult .PRUNE ) {
581- List <ICaDoodleOpperation > subList = (List <ICaDoodleOpperation >) getOpperations ().subList (0 ,
588+ List <AbstractCaDoodleFileAccepter > subList = (List <AbstractCaDoodleFileAccepter >) getOpperations ().subList (0 ,
582589 getCurrentIndex ());
583- ArrayList <ICaDoodleOpperation > newList = new ArrayList <ICaDoodleOpperation >();
590+ ArrayList <AbstractCaDoodleFileAccepter > newList = new ArrayList <AbstractCaDoodleFileAccepter >();
584591 newList .addAll (subList );
585592 setOpperations (newList );
586593 com .neuronrobotics .sdk .common .Log .error ("Pruning forward here!" );
@@ -589,7 +596,7 @@ private OperationResult pruneForward(ICaDoodleOpperation op) throws Exception {
589596 return res ;
590597 }
591598
592- private void storeResultInCache (ICaDoodleOpperation op , List <CSG > process ) {
599+ private void storeResultInCache (AbstractCaDoodleFileAccepter op , List <CSG > process ) {
593600 ArrayList <CSG > cachedCopy = new ArrayList <CSG >();
594601 HashSet <String > names = new HashSet <>();
595602 for (CSG c : process ) {
@@ -678,7 +685,7 @@ private void updateCurrentFromCache() {
678685 setCurrentState (key , getCurrentState ());
679686 }
680687
681- public ICaDoodleOpperation getCurrentOpperation () {
688+ public AbstractCaDoodleFileAccepter getCurrentOpperation () {
682689 if (getCurrentIndex () == 0 )
683690 return null ;
684691 return getOpperations ().get (getCurrentIndex () - 1 );
@@ -1039,11 +1046,11 @@ public static CaDoodleFile fromFile(File f, ICaDoodleStateUpdate listener, boole
10391046 return file ;
10401047 }
10411048
1042- public ArrayList <ICaDoodleOpperation > getOpperations () {
1049+ public ArrayList <AbstractCaDoodleFileAccepter > getOpperations () {
10431050 return opperations ;
10441051 }
10451052
1046- public void setOpperations (ArrayList <ICaDoodleOpperation > opperations ) {
1053+ public void setOpperations (ArrayList <AbstractCaDoodleFileAccepter > opperations ) {
10471054 this .opperations = opperations ;
10481055 currentIndex = opperations .size ();
10491056 }
0 commit comments