From a196a580d2c42efdc0b85e0f8345e5991d6d2b89 Mon Sep 17 00:00:00 2001 From: Fabian Becker Date: Mon, 7 Dec 2015 11:08:11 +0100 Subject: [PATCH] Up language level to Java 1.8. Fix Population serialization/deserialization closes #38 --- pom.xml | 4 +- src/eva2/gui/JTextoutputFrame.java | 1 + .../optimization/OptimizationParameters.java | 3 +- src/eva2/yaml/BeanSerializer.java | 3 +- src/eva2/yaml/OptimizationConstructor.java | 43 +++++++++++++++++++ 5 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 src/eva2/yaml/OptimizationConstructor.java diff --git a/pom.xml b/pom.xml index 0c68cde5..173f37e9 100644 --- a/pom.xml +++ b/pom.xml @@ -68,8 +68,8 @@ maven-compiler-plugin 2.3.2 - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/src/eva2/gui/JTextoutputFrame.java b/src/eva2/gui/JTextoutputFrame.java index 3b1973d5..33586681 100644 --- a/src/eva2/gui/JTextoutputFrame.java +++ b/src/eva2/gui/JTextoutputFrame.java @@ -80,6 +80,7 @@ public class JTextoutputFrame implements JTextoutputFrameInterface, ActionListen textArea.setCaretPosition(0); textArea.setTabSize(16); textArea.setFont(new Font("Courier New", Font.PLAIN, 12)); + // Limit text output to 2500 Lines ((AbstractDocument)textArea.getDocument()).setDocumentFilter(new LineBufferDocumentFilter(textArea, 2500)); diff --git a/src/eva2/optimization/OptimizationParameters.java b/src/eva2/optimization/OptimizationParameters.java index fef93cbe..daf63d2e 100644 --- a/src/eva2/optimization/OptimizationParameters.java +++ b/src/eva2/optimization/OptimizationParameters.java @@ -7,6 +7,7 @@ import eva2.optimization.strategies.InterfaceOptimizer; import eva2.problems.F1Problem; import eva2.problems.InterfaceOptimizationProblem; import eva2.util.annotation.Description; +import eva2.yaml.OptimizationConstructor; import org.yaml.snakeyaml.Yaml; import java.io.FileInputStream; @@ -45,7 +46,7 @@ public class OptimizationParameters extends AbstractOptimizationParameters imple OptimizationParameters instance = null; try { FileInputStream fileStream = new FileInputStream(yamlFile); - instance = (OptimizationParameters) new Yaml().load(fileStream); + instance = (OptimizationParameters) new Yaml(new OptimizationConstructor()).load(fileStream); } catch (Exception ex) { System.out.println(ex.getStackTrace() + "\n" + ex.getMessage()); LOGGER.log(Level.INFO, "Could not load OptimizationParameters.yml.", ex); diff --git a/src/eva2/yaml/BeanSerializer.java b/src/eva2/yaml/BeanSerializer.java index 4c9dd487..6b66a459 100644 --- a/src/eva2/yaml/BeanSerializer.java +++ b/src/eva2/yaml/BeanSerializer.java @@ -7,6 +7,7 @@ import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.error.YAMLException; import org.yaml.snakeyaml.introspector.Property; import org.yaml.snakeyaml.nodes.Node; +import org.yaml.snakeyaml.nodes.Tag; import org.yaml.snakeyaml.representer.Represent; import org.yaml.snakeyaml.representer.Representer; @@ -39,6 +40,7 @@ public class BeanSerializer { class OptimizationRepresenter extends Representer { public OptimizationRepresenter() { this.representers.put(Population.class, new RepresentPopulation()); + this.addClassTag(Population.class, new Tag("!population")); } @Override @@ -71,7 +73,6 @@ class OptimizationRepresenter extends Representer { private class RepresentPopulation implements Represent { public Node representData(Object data) { try { - return representJavaBean(getProperties(data.getClass()), data); } catch (IntrospectionException var3) { throw new YAMLException(var3); diff --git a/src/eva2/yaml/OptimizationConstructor.java b/src/eva2/yaml/OptimizationConstructor.java new file mode 100644 index 00000000..e61bf536 --- /dev/null +++ b/src/eva2/yaml/OptimizationConstructor.java @@ -0,0 +1,43 @@ +package eva2.yaml; + +import eva2.optimization.operator.distancemetric.InterfaceDistanceMetric; +import eva2.optimization.population.Population; +import eva2.optimization.population.PopulationInitMethod; +import eva2.tools.Pair; +import org.yaml.snakeyaml.constructor.AbstractConstruct; +import org.yaml.snakeyaml.constructor.Constructor; +import org.yaml.snakeyaml.nodes.MappingNode; +import org.yaml.snakeyaml.nodes.Node; +import org.yaml.snakeyaml.nodes.Tag; + +import java.util.ArrayList; +import java.util.Map; + +/** + * Created by fabian on 07/12/15. + */ +public class OptimizationConstructor extends Constructor { + public OptimizationConstructor() { + this.yamlConstructors.put(new Tag("!population"), new ConstructPopulation()); + } + + private class ConstructPopulation extends AbstractConstruct { + + @Override + public Object construct(Node node) { + Population pop = new Population(); + Map values = constructMapping((MappingNode)node); + + pop.setInitAround((Double) values.get("initAround")); + pop.setInitMethod(PopulationInitMethod.valueOf((String) values.get("initMethod"))); + + ArrayList initPos = (ArrayList) values.get("initPos"); + pop.setInitPos(initPos.stream().mapToDouble(Double::doubleValue).toArray()); + + pop.setPopMetric((InterfaceDistanceMetric) values.get("popMetric")); + //pop.setSeedCardinality((Pair) values.get("seedCardinality")); + pop.setTargetSize((Integer) values.get("targetSize")); + return pop; + } + } +}