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 ac6580d2545082f349e4336a5b806e7e5c1a959c..d30a2b9668f95f3d1382a6cddac6907e56123323 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 @@ -104,6 +104,20 @@ public class ArffPropertiesReader implements PropertiesReader { properties.put(pSpec, (int)instance.toDoubleArray()[index]); return properties; }; + } else if(RepresentationType.STRING.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); + + // set value and return + properties.put(pSpec, instance.stringValue(index)); + return properties; + }; } else { throw new RuntimeException("Not yet supported: " + rType); } diff --git a/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/ArffPropertiesReaderTest.java b/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/ArffPropertiesReaderTest.java index 9663299824f9e19878c4197da39e8406925c74cc..6d543b367c3b4e7db90b528f1f737c55e57a7740 100644 --- a/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/ArffPropertiesReaderTest.java +++ b/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/ArffPropertiesReaderTest.java @@ -1,10 +1,14 @@ package de.evoal.core.arff; +import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; +import de.evoal.core.api.properties.PropertySpecification; import de.evoal.core.api.properties.io.PropertiesReader; import de.evoal.core.api.utils.EvoalIOException; +import de.evoal.core.arff.io.ArffPropertiesReader; import de.evoal.core.arff.utils.LanguageUtils; import de.evoal.core.arff.utils.ResourceUtils; +import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.ddl.DataDescriptionModel; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -21,14 +25,52 @@ public class ArffPropertiesReaderTest { final Path temporary = Files.createTempDirectory("evoal"); final File temporaryFolder = temporary.toFile(); ResourceUtils.unpack(getClass().getClassLoader(), temporaryFolder, "simple/input.arff", "simple/specification.ddl"); -// final DataDescriptionModel model = LanguageUtils.load(new File(temporaryFolder, "simple/specification.ddl"), DataDescriptionModel.class); -// final PropertiesSpecification specification = toSpecification(model); + final File toLoad = new File(temporaryFolder, "simple/specification.ddl"); + final DataDescriptionModel model = LanguageUtils.load(toLoad, DataDescriptionModel.class); + final PropertiesSpecification specification = toSpecification(model); -// final PropertiesReader testee = new ArffPropertiesReader() -// .init(new File(temporaryFolder, "input.arff"), specification); + final PropertiesReader testee = new ArffPropertiesReader() + .init(new File(temporaryFolder, "simple/input.arff"), specification); -// Assertions.assertTrue(testee.hasNext()); + { + Assertions.assertTrue(testee.hasNext()); + final Properties p = testee.next(); + Assertions.assertEquals(5.1, p.get(new PropertySpecification("sepallength", null))); + Assertions.assertEquals(3.5, p.get(new PropertySpecification("sepalwidth", null))); + Assertions.assertEquals(1.4, p.get(new PropertySpecification("petallength", null))); + Assertions.assertEquals(0.2, p.get(new PropertySpecification("petalwidth", null))); + Assertions.assertEquals("Iris-setosa", p.get(new PropertySpecification("class", null))); + } + { + Assertions.assertTrue(testee.hasNext()); + final Properties p = testee.next(); + Assertions.assertEquals(4.9, p.get(new PropertySpecification("sepallength", null))); + Assertions.assertEquals(3.0, p.get(new PropertySpecification("sepalwidth", null))); + Assertions.assertEquals(1.4, p.get(new PropertySpecification("petallength", null))); + Assertions.assertEquals(0.2, p.get(new PropertySpecification("petalwidth", null))); + Assertions.assertEquals("Iris-setosa", p.get(new PropertySpecification("class", null))); + } + { + Assertions.assertTrue(testee.hasNext()); + final Properties p = testee.next(); + Assertions.assertEquals(4.7, p.get(new PropertySpecification("sepallength", null))); + Assertions.assertEquals(3.2, p.get(new PropertySpecification("sepalwidth", null))); + Assertions.assertEquals(1.3, p.get(new PropertySpecification("petallength", null))); + Assertions.assertEquals(0.2, p.get(new PropertySpecification("petalwidth", null))); + Assertions.assertEquals("Iris-setosa", p.get(new PropertySpecification("class", null))); + } + { + Assertions.assertTrue(testee.hasNext()); + final Properties p = testee.next(); + Assertions.assertEquals(4.6, p.get(new PropertySpecification("sepallength", null))); + Assertions.assertEquals(3.1, p.get(new PropertySpecification("sepalwidth", null))); + Assertions.assertEquals(1.5, p.get(new PropertySpecification("petallength", null))); + Assertions.assertEquals(0.2, p.get(new PropertySpecification("petalwidth", null))); + Assertions.assertEquals("Iris-setosa", p.get(new PropertySpecification("class", null))); + } + + Assertions.assertFalse(testee.hasNext()); } private PropertiesSpecification toSpecification(final DataDescriptionModel model) { diff --git a/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/utils/LanguageUtils.java b/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/utils/LanguageUtils.java index 1d1bd18da57630d423058debb6304a51243ab63d..367a2db48138977b6513f7ee4858888fea1c7247 100644 --- a/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/utils/LanguageUtils.java +++ b/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/utils/LanguageUtils.java @@ -27,11 +27,12 @@ public class LanguageUtils { public static <T extends EObject> T load(final @NonNull File path, final Class<T> cl) { loadPackages(); - final URI modelURI = URI.createPlatformResourceURI(path.toString(), true); + final URI modelURI = URI.createFileURI(path.toString()); return load(modelURI, cl); } private static void loadPackages() { + DdlPackage.eINSTANCE.getName(); DataDescriptionLanguageStandaloneSetup.doSetup(); } diff --git a/src/core/de.evoal.core.arff/src/test/resources/simple/input.arff b/src/core/de.evoal.core.arff/src/test/resources/simple/input.arff index 5d36ac62ca67243a4f2be8bb0ca4dba73daa1aaa..5a6239eb28ec90ea566d7e480c23b20489df8142 100644 --- a/src/core/de.evoal.core.arff/src/test/resources/simple/input.arff +++ b/src/core/de.evoal.core.arff/src/test/resources/simple/input.arff @@ -17,10 +17,4 @@ 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosa -4.6,3.1,1.5,0.2,Iris-setosa -5.0,3.6,1.4,0.2,Iris-setosa -5.4,3.9,1.7,0.4,Iris-setosa -4.6,3.4,1.4,0.3,Iris-setosa -5.0,3.4,1.5,0.2,Iris-setosa -4.4,2.9,1.4,0.2,Iris-setosa -4.9,3.1,1.5,0.1,Iris-setosa \ No newline at end of file +4.6,3.1,1.5,0.2,Iris-setosa \ No newline at end of file diff --git a/src/core/de.evoal.core.arff/src/test/resources/simple/specification.ddl b/src/core/de.evoal.core.arff/src/test/resources/simple/specification.ddl index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..03c350f9f601b575d2caedf3994fa04ac4059703 100644 --- a/src/core/de.evoal.core.arff/src/test/resources/simple/specification.ddl +++ b/src/core/de.evoal.core.arff/src/test/resources/simple/specification.ddl @@ -0,0 +1,6 @@ +data: + cardinal real 'sepallength'; + cardinal real 'sepalwidth'; + cardinal real 'petallength'; + cardinal real 'petalwidth'; + nominal string 'class'; \ No newline at end of file diff --git a/src/core/de.evoal.core.main/pom.xml b/src/core/de.evoal.core.main/pom.xml index 9cbf74e5916ea6a270f3c0cf2cddc8fe7f4eb019..d9962933e1db1fcd72818273543ef04ef7043086 100644 --- a/src/core/de.evoal.core.main/pom.xml +++ b/src/core/de.evoal.core.main/pom.xml @@ -335,8 +335,8 @@ <arg>io.jenetics.base/io.jenetics.internal.util=de.evoal.core.main</arg> <arg>--add-exports</arg> <arg>io.jenetics.base/io.jenetics.internal.collection=de.evoal.core.main</arg> - <arg>--add-exports</arg> - <arg>org.eclipse.xtext.util/org.eclipse.xtext.util=de.evoal.core.main</arg> + <!--<arg>- -add-exports</arg> + <arg>org.eclipse.xtext.util/org.eclipse.xtext.util=de.evoal.core.main</arg>--> </compilerArgs> <forceJavacCompilerUse>true</forceJavacCompilerUse> </configuration> diff --git a/src/core/de.evoal.core.plugin/pom.xml b/src/core/de.evoal.core.plugin/pom.xml index d1f4ebb3441deafbabd59c1355cf447d84d4381b..1ed2b04c43c708c5306069be6c1868ad6a8924c9 100644 --- a/src/core/de.evoal.core.plugin/pom.xml +++ b/src/core/de.evoal.core.plugin/pom.xml @@ -92,14 +92,7 @@ <dependency> <groupId>org.eclipse.xtext</groupId> <artifactId>org.eclipse.xtext</artifactId> - <version>2.29.0</version> - <scope>provided</scope> - </dependency> - - <dependency> - <groupId>org.eclipse.xtext</groupId> - <artifactId>org.eclipse.xtext.util</artifactId> - <version>2.29.0</version> + <version>2.29.1</version> <scope>provided</scope> </dependency> diff --git a/src/core/de.evoal.releng.parent/pom.xml b/src/core/de.evoal.releng.parent/pom.xml index 5b25f12a7e65bf621f50e4c6d4e8595f62f05e0a..3b204f2df557066bc204550f8bf4fa59f26b5c58 100644 --- a/src/core/de.evoal.releng.parent/pom.xml +++ b/src/core/de.evoal.releng.parent/pom.xml @@ -127,7 +127,7 @@ <dependency> <groupId>org.eclipse.xtext</groupId> <artifactId>org.eclipse.xtext</artifactId> - <version>2.29.0</version> + <version>2.29.1</version> <scope>provided</scope> </dependency>