class ConfigurationModel : ItemViewModel() { val configurationName = bind { item?.configurationNameProperty() } val isMontereyRequired = bind { item?.isMontereyRequiredProperty() } val cxxiBaseArchive = bind { item?.cxxiBaseArchiveProperty() } val montereyArchive = bind { item?.montereyArchiveProperty() } val jreHome = bind { item?.jreHomeProperty() } // Validation rules prevent committing an unbuildable configuration val buildable get() = { dirty.not() } // has this config been built and is ready to use? val ready get() = { // always check build and output directories cxxiBaseOkay.invalidate() montereyInstallOkay.invalidate() outDirOkay.invalidate() dirty.not().and(cxxiBaseOkay).and(montereyInstallOkay).and(outDirOkay) } private val cxxiBaseOkay = booleanBinding(configurationName, configurationName) { val preferences = find() val path = "${preferences.cxxiModelsLocation.value}/${value}/cxxi" val result = File(path).exists() result } private val outDirOkay = booleanBinding(configurationName, configurationName) { val preferences = find() val path = "${preferences.toolboxProjectsLocation.value}/${value}/OUTPUT" val result = File(path).exists() result } private val montereyInstallOkay = booleanBinding(configurationName, configurationName) { val preferences = find() val path = "${preferences.cxxiModelsLocation.value}/${value}/cxxi/lib/monterey-extensions.jar" val result = if (isMontereyRequired.value) File(path).exists() else true result } }