diff --git a/src/core/de.evoal.core.arff/scripts/run-convert-arff.sh b/src/core/de.evoal.core.arff/scripts/run-convert-arff.sh new file mode 100755 index 0000000000000000000000000000000000000000..e46d4aa7b02ce66e9a61ce567ff45b16bf571d7b --- /dev/null +++ b/src/core/de.evoal.core.arff/scripts/run-convert-arff.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +source $( cd -- "$(dirname $0)/" >/dev/null 2>&1 ; pwd -P)/paths.env + +if [ "$#" -ne 4 ]; then + echo "Usage: $0 <execution-folder> <input.arff> <specification.ddl> <output.json>" + exit 1 +fi + +cd $1 + +set -x +java -Dorg.jboss.logging.provider=slf4j\ + --module-path "${EVOALPATH}/modules/:$PLUGIN_PATHS" \ + --add-modules ALL-MODULE-PATH \ + --add-opens java.base/java.lang=guice \ + -m de.evoal.core/de.evoal.core.main.Evoal \ + -Bcore:main=convert-arff-to-json \ + -Barff:input=$2 \ + -Barff:ddl-specification=$3 \ + -Barff:output=$4 diff --git a/src/core/de.evoal.core.arff/src/main/java/de/evoal/core/arff/io/ArffPropertiesReader.java b/src/core/de.evoal.core.arff/src/main/java/de/evoal/core/arff/io/ArffPropertiesReader.java index 9c8ec368d5b605513e47c963418fcec917481321..17e147aecc1f1c68b5aef259cda9acf019f67522 100644 --- a/src/core/de.evoal.core.arff/src/main/java/de/evoal/core/arff/io/ArffPropertiesReader.java +++ b/src/core/de.evoal.core.arff/src/main/java/de/evoal/core/arff/io/ArffPropertiesReader.java @@ -15,6 +15,7 @@ import weka.core.converters.ConverterUtils; import javax.enterprise.context.Dependent; import javax.inject.Named; import java.io.File; +import java.util.Arrays; @Slf4j @Dependent @@ -77,6 +78,10 @@ public class ArffPropertiesReader implements PropertiesReader { if(RepresentationType.REAL.equals(rType)) { toProperties = (instance, template, builder) -> { + if(instance.isMissing(index)) { + return decoratee.apply(instance, template, builder); + } + // add current specification to builder and let the chain complete it builder.add(pSpec); final Properties properties = decoratee.apply(instance, template, builder); @@ -87,6 +92,10 @@ public class ArffPropertiesReader implements PropertiesReader { }; } else if(RepresentationType.INTEGER.equals(rType)) { toProperties = (instance, template, builder) -> { + if(instance.isMissing(index)) { + return decoratee.apply(instance, template, builder); + } + // add current specification to builder and let the chain complete it builder.add(pSpec); final Properties properties = decoratee.apply(instance, template, builder); diff --git a/src/core/de.evoal.core.arff/src/main/java/de/evoal/core/arff/main/ConvertArff.java b/src/core/de.evoal.core.arff/src/main/java/de/evoal/core/arff/main/ConvertArff.java index 5bd4243c8c66092fdbad57108ff0f5e07e50477a..2fbded416dcd40971ed98c048b94ec06bdc1ec2d 100644 --- a/src/core/de.evoal.core.arff/src/main/java/de/evoal/core/arff/main/ConvertArff.java +++ b/src/core/de.evoal.core.arff/src/main/java/de/evoal/core/arff/main/ConvertArff.java @@ -10,6 +10,7 @@ import de.evoal.core.api.properties.io.PropertiesWriter; import de.evoal.core.arff.cdi.ArffBlackboardEntry; import de.evoal.languages.model.ddl.DataDescriptionModel; import de.evoal.languages.model.ddl.dsl.DataDescriptionLanguageStandaloneSetup; +import de.evoal.languages.model.ddl.impl.DdlPackageImpl; import lombok.extern.slf4j.Slf4j; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; @@ -73,6 +74,8 @@ public class ConvertArff implements MainClass { } // init EMF + Xtext + DdlPackageImpl.init(); + DataDescriptionLanguageStandaloneSetup.doSetup(); final Injector dlInjector = new DataDescriptionLanguageStandaloneSetup().createInjectorAndDoEMFRegistration(); final XtextResourceSet resourceSet = dlInjector.getInstance(XtextResourceSet.class); diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/api/properties/PropertiesSpecification.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/api/properties/PropertiesSpecification.java index 15a41c26fec277710257ae697ba39a83ed5170ec..27ab8b942306977aae336530a7e8b73c88666b28 100644 --- a/src/core/de.evoal.core/src/main/java/de/evoal/core/api/properties/PropertiesSpecification.java +++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/api/properties/PropertiesSpecification.java @@ -2,6 +2,7 @@ package de.evoal.core.api.properties; import de.evoal.languages.model.ddl.DataDescription; import org.apache.commons.math3.util.Pair; +import org.slf4j.LoggerFactory; import java.util.*; import java.util.stream.Collectors; @@ -40,8 +41,9 @@ public class PropertiesSpecification { } public Builder add(final PropertySpecification specification) { - if (!properties.contains(specification)) { + if(!properties.contains(specification)) { properties.add(specification); + orderedProperties.add(specification); } return this;