// Path: cnctools/src/main/java/com/rvantwisk/cnctools/data/tools/BallMill.java
// public class BallMill extends Toolbase {
// 
//     private final DimensionProperty diameter = new DimensionProperty();
// 
//     public BallMill() {
//     }
// 
//     public BallMill(DimensionProperty diameter) {
//         this.diameter.set(diameter);
//     }
// 
//     public DimensionProperty diameterProperty() {
//         return diameter;
//     }
// 
// }
// 
// Path: cnctools/src/main/java/com/rvantwisk/cnctools/data/tools/EndMill.java
// public class EndMill extends Toolbase {
// 
//     private final DimensionProperty diameter = new DimensionProperty();
// 
//     public EndMill() {
//     }
// 
//     public EndMill(DimensionProperty diameter) {
//         this.diameter.set(diameter);
//     }
// 
//     public DimensionProperty diameterProperty() {
//         return diameter;
//     }
// }


import com.dooapp.xstreamfx.*;
import com.rvantwisk.cnctools.data.*;
import com.rvantwisk.cnctools.data.tools.BallMill;
import com.rvantwisk.cnctools.data.tools.EndMill;
import com.sun.javafx.collections.ObservableListWrapper;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.XppDomDriver;
import javafx.beans.property.*;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.ArrayList;
        xStream.registerConverter(new BooleanPropertyConverter(xStream.getMapper()));
//        xStream.registerConverter(new ObjectPropertyConverter(xStream.getMapper()));
        xStream.registerConverter(new DoublePropertyConverter(xStream.getMapper()));
        xStream.registerConverter(new LongPropertyConverter(xStream.getMapper()));
        xStream.registerConverter(new IntegerPropertyConverter(xStream.getMapper()));
//        xStream.registerConverter(new ObservableListConverter(xStream.getMapper()));

//        xStream.registerConverter(new ConverterWrapper(lookupTypeConverter(xStream, List.class), ObservableListWrapper.class));
//        xStream.registerConverter(new ConverterWrapper(lookupTypeConverter(xStream, List.class), ObservableList.class));
//        xStream.registerConverter(new ConverterWrapper(lookupTypeConverter(xStream, Map.class), ObservableMap.class));


        xStream.omitField(ObservableListWrapper.class, "listenerHelper");

    //    FXConverters.configure(xstream);

        // JavaFX aliases
        xStream.alias("IntProp", SimpleIntegerProperty.class);
        xStream.alias("StrProp", SimpleStringProperty.class);
        xStream.alias("DblProp", SimpleDoubleProperty.class);
        xStream.alias("Boolprop", SimpleBooleanProperty.class);
        xStream.alias("ObjProp", SimpleObjectProperty.class);
        xStream.alias("LongProp", SimpleLongProperty.class);
        xStream.alias("OListWrapper", ObservableListWrapper.class);

        // Program properties aliases
        xStream.alias("Task", TaskRunnable.class);
        xStream.alias("Project", Project.class);
        xStream.alias("StockToolParameter", StockToolParameter.class);
        xStream.alias("EndMill", EndMill.class);
// Path: cnctools/src/main/java/com/rvantwisk/cnctools/data/tools/BallMill.java
// public class BallMill extends Toolbase {
// 
//     private final DimensionProperty diameter = new DimensionProperty();
// 
//     public BallMill() {
//     }
// 
//     public BallMill(DimensionProperty diameter) {
//         this.diameter.set(diameter);
//     }
// 
//     public DimensionProperty diameterProperty() {
//         return diameter;
//     }
// 
// }
// 
// Path: cnctools/src/main/java/com/rvantwisk/cnctools/data/tools/EndMill.java
// public class EndMill extends Toolbase {
// 
//     private final DimensionProperty diameter = new DimensionProperty();
// 
//     public EndMill() {
//     }
// 
//     public EndMill(DimensionProperty diameter) {
//         this.diameter.set(diameter);
//     }
// 
//     public DimensionProperty diameterProperty() {
//         return diameter;
//     }
// }


// Path: cnctools/src/main/java/com/rvantwisk/cnctools/misc/ProjectModel.java
import com.dooapp.xstreamfx.*;
import com.rvantwisk.cnctools.data.*;
import com.rvantwisk.cnctools.data.tools.BallMill;
import com.rvantwisk.cnctools.data.tools.EndMill;
import com.sun.javafx.collections.ObservableListWrapper;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.XppDomDriver;
import javafx.beans.property.*;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.ArrayList;

        xStream.registerConverter(new BooleanPropertyConverter(xStream.getMapper()));
//        xStream.registerConverter(new ObjectPropertyConverter(xStream.getMapper()));
        xStream.registerConverter(new DoublePropertyConverter(xStream.getMapper()));
        xStream.registerConverter(new LongPropertyConverter(xStream.getMapper()));
        xStream.registerConverter(new IntegerPropertyConverter(xStream.getMapper()));
//        xStream.registerConverter(new ObservableListConverter(xStream.getMapper()));

//        xStream.registerConverter(new ConverterWrapper(lookupTypeConverter(xStream, List.class), ObservableListWrapper.class));
//        xStream.registerConverter(new ConverterWrapper(lookupTypeConverter(xStream, List.class), ObservableList.class));
//        xStream.registerConverter(new ConverterWrapper(lookupTypeConverter(xStream, Map.class), ObservableMap.class));


        xStream.omitField(ObservableListWrapper.class, "listenerHelper");

    //    FXConverters.configure(xstream);

        // JavaFX aliases
        xStream.alias("IntProp", SimpleIntegerProperty.class);
        xStream.alias("StrProp", SimpleStringProperty.class);
        xStream.alias("DblProp", SimpleDoubleProperty.class);
        xStream.alias("Boolprop", SimpleBooleanProperty.class);
        xStream.alias("ObjProp", SimpleObjectProperty.class);
        xStream.alias("LongProp", SimpleLongProperty.class);
        xStream.alias("OListWrapper", ObservableListWrapper.class);

        // Program properties aliases
        xStream.alias("Task", TaskRunnable.class);
        xStream.alias("Project", Project.class);
        xStream.alias("StockToolParameter", StockToolParameter.class);
        xStream.alias("EndMill", EndMill.class);
        xStream.alias("BallMill", BallMill.class);