From dba39b48b45177759d47e32afff556103ea6b109 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per-=C3=85ke=20Minborg?= Date: Mon, 11 Jan 2016 13:52:41 -0800 Subject: [PATCH] Fix remaining test bugs --- pom.xml | 4 + .../core/code/DefaultJavaClassTranslator.java | 1 - .../internal/core/code/MainGenerator.java | 6 +- .../internal/core/config/BaseDocument.java | 4 +- .../SpeedmentApplicationLifecycle.java | 101 +++++++++--------- .../util/document/DocumentTranscoder.java | 2 +- .../internal/util/document/DocumentUtil.java | 2 +- .../code/model/java/MainGeneratorTest.java | 15 ++- .../core/code/model/java/SimpleModelTest.java | 37 +++++-- .../java/entity/EntityTranslatorTest.java | 12 ++- 10 files changed, 111 insertions(+), 73 deletions(-) diff --git a/pom.xml b/pom.xml index 751932e2be..d96e5faaa5 100644 --- a/pom.xml +++ b/pom.xml @@ -84,6 +84,10 @@ Maria Sparenberg (GitHub:marylla) Europe/Berlin + + Anton Johansson (GitHub:anton-johansson) + Europe/Stockholm + diff --git a/src/main/java/com/speedment/internal/core/code/DefaultJavaClassTranslator.java b/src/main/java/com/speedment/internal/core/code/DefaultJavaClassTranslator.java index 9fb6f8ae4a..3e6b139682 100644 --- a/src/main/java/com/speedment/internal/core/code/DefaultJavaClassTranslator.java +++ b/src/main/java/com/speedment/internal/core/code/DefaultJavaClassTranslator.java @@ -37,7 +37,6 @@ import com.speedment.config.db.Dbms; import com.speedment.config.Document; import com.speedment.config.db.ForeignKey; -import com.speedment.config.db.ForeignKeyColumn; import com.speedment.config.db.Index; import com.speedment.config.db.Project; import com.speedment.config.db.Schema; diff --git a/src/main/java/com/speedment/internal/core/code/MainGenerator.java b/src/main/java/com/speedment/internal/core/code/MainGenerator.java index e508fdc778..12f6fd25f2 100644 --- a/src/main/java/com/speedment/internal/core/code/MainGenerator.java +++ b/src/main/java/com/speedment/internal/core/code/MainGenerator.java @@ -33,7 +33,6 @@ import com.speedment.event.BeforeGenerate; import com.speedment.internal.logging.Logger; import com.speedment.internal.logging.LoggerManager; -import static com.speedment.internal.util.document.DocumentDbUtil.traverseOver; import com.speedment.internal.util.Statistics; import java.io.IOException; @@ -49,7 +48,6 @@ import java.util.function.Consumer; import java.util.stream.Collectors; import static java.util.stream.Collectors.toList; -import static java.util.Objects.requireNonNull; import static com.speedment.internal.util.document.DocumentDbUtil.traverseOver; import static java.util.Objects.requireNonNull; @@ -57,7 +55,7 @@ * * @author pemi */ -public final class MainGenerator implements Consumer { +public class MainGenerator implements Consumer { private final static Logger LOGGER = LoggerManager.getLogger(MainGenerator.class); private final AtomicInteger fileCounter = new AtomicInteger(0); @@ -113,7 +111,7 @@ public int getFilesCreated() { return fileCounter.get(); } - public static void writeToFile(Project project, Meta meta, AtomicInteger fileCounter) { + protected void writeToFile(Project project, Meta meta, AtomicInteger fileCounter) { requireNonNull(meta); final String fname = project.getPackageLocation() diff --git a/src/main/java/com/speedment/internal/core/config/BaseDocument.java b/src/main/java/com/speedment/internal/core/config/BaseDocument.java index 7281febc13..9ac296a945 100644 --- a/src/main/java/com/speedment/internal/core/config/BaseDocument.java +++ b/src/main/java/com/speedment/internal/core/config/BaseDocument.java @@ -45,8 +45,8 @@ public BaseDocument(Map data) { } public BaseDocument(Document parent, Map data) { - this.parent = parent; - this.config = data; + this.parent = requireNonNull(parent); + this.config = requireNonNull(data); } @Override diff --git a/src/main/java/com/speedment/internal/core/runtime/SpeedmentApplicationLifecycle.java b/src/main/java/com/speedment/internal/core/runtime/SpeedmentApplicationLifecycle.java index 19eee34823..f5204dcb6f 100644 --- a/src/main/java/com/speedment/internal/core/runtime/SpeedmentApplicationLifecycle.java +++ b/src/main/java/com/speedment/internal/core/runtime/SpeedmentApplicationLifecycle.java @@ -30,6 +30,7 @@ import com.speedment.internal.util.document.DocumentTranscoder; import com.speedment.config.db.Schema; import com.speedment.config.db.trait.HasEnabled; +import com.speedment.config.db.trait.HasName; import com.speedment.internal.core.config.db.immutable.ImmutableProject; import com.speedment.internal.logging.Logger; import com.speedment.internal.logging.LoggerManager; @@ -116,7 +117,7 @@ public T with(final Class type, final Strin * @return this instance */ public T with(final Class type, final Consumer consumer) { - requireNonNulls(type, consumer); + requireNonNulls(type, consumer); // @SuppressWarnings("unchecked") // final Consumer consumerCasted = (Consumer) requireNonNull(consumer); withsAll.add(Tuples.of(type, consumer)); @@ -133,7 +134,7 @@ public T with(final Class type, final Consu */ public T withPassword(final String password) { // password nullable - with(Dbms.class, d -> d.setPassword(password)); + with(Dbms.class, dbms -> speedment.getPasswordComponent().put(dbms, password)); return self(); } @@ -148,7 +149,7 @@ public T withPassword(final String password) { */ public T withPassword(final String dbmsName, final String password) { // password nullable - with(Dbms.class, dbmsName, d -> d.setPassword(password)); + with(Dbms.class, dbmsName, dbms -> speedment.getPasswordComponent().put(dbms, password)); return self(); } @@ -242,9 +243,9 @@ public T withPort(final String dbmsName, final int port) { * schema name will then be applied after the configuration has been read * and after the System properties have been applied. *

- * This method is useful for multi-tenant projects where there are several + * This method is useful for multi-tenant projects where there are several * identical schemas separated only by their names. - * + * * @param schemaName to use for all schemas this project * @return this instance */ @@ -259,9 +260,9 @@ public T withSchema(final String schemaName) { * schema name will then be applied after the configuration has been read * and after the System properties have been applied. *

- * This method is useful for multi-tenant projects where there are several + * This method is useful for multi-tenant projects where there are several * identical schemas separated only by their names. - * + * * @param oldSchemaName the current name of a schema * @param schemaName to use for the named schema * @return this instance @@ -325,17 +326,19 @@ protected void onStop() { * Builds up the complete Project meta data tree. */ protected void loadAndSetProject() { - try { - final Optional oPath = getConfigPath(); - final Project project; - if (oPath.isPresent()) { - project = DocumentTranscoder.load(oPath.get()); - } else { - project = DocumentTranscoder.load(getSpeedmentApplicationMetadata().getMetadata()); - } - - // Apply overridden values from the system properties (if any) - //final Function> traverser = n -> n.asParent().map(p -> p.stream()).orElse(Stream.empty()).map(c -> (Node) c); + final Optional oPath = getConfigPath(); + final Project project; + if (oPath.isPresent()) { + project = DocumentTranscoder.load(oPath.get()); + } else { + project = DocumentTranscoder.load(getSpeedmentApplicationMetadata().getMetadata()); + } + + // Apply overridden values from the system properties (if any) + //final Function> traverser = n -> n.asParent().map(p -> p.stream()).orElse(Stream.empty()).map(c -> (Node) c); + + /* + DocumentUtil.traverseOver(project) // Trees.traverse(project, traverser, Trees.TraversalOrder.DEPTH_FIRST_PRE) .forEach((Document node) -> { @@ -364,36 +367,36 @@ protected void loadAndSetProject() { ); }); - // Apply overidden item (if any) for all ConfigEntities of a given class - withsAll.forEach(t2 -> { - final Class clazz = t2.get0(); - final Consumer consumer = t2.get1(); - traverseOver(project) - .filter(c -> clazz.isAssignableFrom(c.getClass())) - .map(Document.class::cast) - .forEachOrdered(consumer::accept); - }); - - // Apply a named overidden item (if any) for all ConfigEntities of a given class - withsNamed.forEach(t3 -> { - final Class clazz = t3.get0(); - final String name = t3.get1(); - - @SuppressWarnings("unchecked") - final Consumer consumer = (Consumer) t3.get2(); - - project.traverse() - .filter(c -> clazz.isAssignableFrom(c.getClass())) - .map(Node.class::cast) - .filter(c -> name.equals(c.getRelativeName(Project.class))) - .forEachOrdered(consumer::accept); - }); - - speedment.getProjectComponent().setProject(project); - - } catch (IOException ioe) { - throw new SpeedmentException("Failed to read config file", ioe); - } + */ + // Apply overidden item (if any) for all ConfigEntities of a given class + withsAll.forEach(t2 -> { + final Class clazz = t2.get0(); + @SuppressWarnings("unchecked") + final Consumer consumer = (Consumer) t2.get1(); + traverseOver(project) + .filter(c -> clazz.isAssignableFrom(c.getClass())) + .map(Document.class::cast) + .forEachOrdered(consumer::accept); + }); + + // Apply a named overidden item (if any) for all ConfigEntities of a given class + withsNamed.forEach(t3 -> { + final Class clazz = t3.get0(); + final String name = t3.get1(); + + @SuppressWarnings("unchecked") + final Consumer consumer = (Consumer) t3.get2(); + + traverseOver(project) + .filter(c -> clazz.isAssignableFrom(c.getClass())) + .filter(HasName.class::isInstance) + .map(d -> (Document & HasName) d) + .filter(c -> name.equals(relativeName(c, Project.class))) + .forEachOrdered(consumer::accept); + }); + + speedment.getProjectComponent().setProject(project); + } protected void put(Manager manager) { @@ -457,7 +460,7 @@ public Speedment build() { } // Replace the metadata model with an immutable version (potentially much faster) final Project project = speedment.getProjectComponent().getProject(); - final Project immutableProject = new ImmutableProject(project); + final Project immutableProject = ImmutableProject.wrap(project); speedment.getProjectComponent().setProject(immutableProject); // return speedment; diff --git a/src/main/java/com/speedment/internal/util/document/DocumentTranscoder.java b/src/main/java/com/speedment/internal/util/document/DocumentTranscoder.java index 80ac1f3dd6..98e6742adb 100644 --- a/src/main/java/com/speedment/internal/util/document/DocumentTranscoder.java +++ b/src/main/java/com/speedment/internal/util/document/DocumentTranscoder.java @@ -34,7 +34,7 @@ @Api(version = "2.3") public final class DocumentTranscoder { - public static final String ROOT = "project"; + public static final String ROOT = "config"; public static String save(Project project) throws SpeedmentException { final Gson gson = new Gson(); diff --git a/src/main/java/com/speedment/internal/util/document/DocumentUtil.java b/src/main/java/com/speedment/internal/util/document/DocumentUtil.java index 5b7cd07b30..42f34f9538 100644 --- a/src/main/java/com/speedment/internal/util/document/DocumentUtil.java +++ b/src/main/java/com/speedment/internal/util/document/DocumentUtil.java @@ -83,7 +83,7 @@ public static Map newDocument(Document document, String key) { public static String relativeName(D document, final Class from, Function nameMapper) { requireNonNulls(document, from, nameMapper); - final StringJoiner sj = new StringJoiner(".", "", ".").setEmptyValue(""); + final StringJoiner sj = new StringJoiner(".").setEmptyValue(""); final List ancestors = document.ancestors()/*.map(p -> (Parent) p)*/.collect(toList()); boolean add = false; for (final Document parent : ancestors) { diff --git a/src/test/java/com/speedment/internal/core/code/model/java/MainGeneratorTest.java b/src/test/java/com/speedment/internal/core/code/model/java/MainGeneratorTest.java index 09d100f32b..86231ee8aa 100644 --- a/src/test/java/com/speedment/internal/core/code/model/java/MainGeneratorTest.java +++ b/src/test/java/com/speedment/internal/core/code/model/java/MainGeneratorTest.java @@ -16,8 +16,11 @@ */ package com.speedment.internal.core.code.model.java; +import com.speedment.config.db.Project; +import com.speedment.internal.codegen.base.Meta; +import com.speedment.internal.codegen.lang.models.File; import com.speedment.internal.core.code.MainGenerator; -import org.junit.Ignore; +import java.util.concurrent.atomic.AtomicInteger; import org.junit.Test; /** @@ -31,7 +34,15 @@ public class MainGeneratorTest extends SimpleModelTest { public void testAccept() { System.out.println("accept"); - final MainGenerator instance = new MainGenerator(speedment); + final MainGenerator instance = new MainGenerator(speedment) { + + @Override + protected void writeToFile(Project project, Meta meta, AtomicInteger fileCounter) { + System.out.println("Processing "+meta.getModel().getName()); + // Do nothing on file... + } + + }; instance.accept(project); } diff --git a/src/test/java/com/speedment/internal/core/code/model/java/SimpleModelTest.java b/src/test/java/com/speedment/internal/core/code/model/java/SimpleModelTest.java index fd806cb4c0..0c78a300b9 100644 --- a/src/test/java/com/speedment/internal/core/code/model/java/SimpleModelTest.java +++ b/src/test/java/com/speedment/internal/core/code/model/java/SimpleModelTest.java @@ -29,8 +29,14 @@ import com.speedment.config.db.Project; import com.speedment.config.db.Schema; import com.speedment.config.db.Table; +import com.speedment.config.db.mapper.TypeMapper; +import com.speedment.config.db.parameters.DbmsType; +import com.speedment.config.db.trait.HasName; +import static com.speedment.internal.codegen.util.Formatting.indent; +import com.speedment.internal.core.config.dbms.MySqlDbmsType; +import com.speedment.internal.core.config.dbms.StandardDbmsType; +import com.speedment.internal.core.config.mapper.identity.StringIdentityMapper; import com.speedment.internal.core.platform.SpeedmentFactory; -import static java.util.stream.Collectors.joining; import java.util.stream.Stream; import org.junit.Before; import static java.util.stream.Collectors.joining; @@ -57,11 +63,19 @@ private String quote(String s) { } private String name(String s) { - return quote("name") + " : " + quote(s); + return quote(HasName.NAME) + " : " + quote(s); + } + + private String typeMapper(Class tmc) { + return quote(Column.TYPE_MAPPER) + " : " + quote(tmc.getName()); + } + + private String dbTypeName(String dbmsTypeName) { + return quote(Dbms.TYPE_NAME) + " : " + quote(dbmsTypeName); } private String array(String name, String... s) { - return quote(name) + " : [\n" + Stream.of(s).collect(joining(",\n")) + "\n]"; + return quote(name) + " : [\n" + indent(Stream.of(s).collect(joining(",\n"))) + "\n]"; } private String objectWithKey(String name, String... s) { @@ -69,11 +83,11 @@ private String objectWithKey(String name, String... s) { } private String object(String... s) { - return "{\n" + Stream.of(s).collect(joining(",\n")) + "\n}"; + return "{\n" + indent(Stream.of(s).collect(joining(",\n"))) + "\n}"; } @Before - public void setUp() { + public void simpleModelTestSetUp() { final String json = "{" + objectWithKey(DocumentTranscoder.ROOT, @@ -81,6 +95,7 @@ public void setUp() { array(Project.DBMSES, object( name("myDbms"), + dbTypeName(StandardDbmsType.defaultType().getName()), array(Dbms.SCHEMAS, object( name("mySchema"), @@ -89,7 +104,8 @@ public void setUp() { name(TABLE_NAME), array(Table.COLUMNS, object( - name(COLUMN_NAME) + name(COLUMN_NAME), + typeMapper(StringIdentityMapper.class) ) ), array(Table.PRIMARY_KEY_COLUMNS, @@ -104,15 +120,14 @@ public void setUp() { ) ) ) - +"}"; + + "}"; System.out.println(json); - + project = DocumentTranscoder.load(json); - + System.out.println(project); - - + speedment = SpeedmentFactory.newSpeedmentInstance(); // project = new ProjectImpl(speedment); // dbms = project.addNewDbms(); diff --git a/src/test/java/com/speedment/internal/core/code/model/java/entity/EntityTranslatorTest.java b/src/test/java/com/speedment/internal/core/code/model/java/entity/EntityTranslatorTest.java index a9d3765bc5..220609ce54 100644 --- a/src/test/java/com/speedment/internal/core/code/model/java/entity/EntityTranslatorTest.java +++ b/src/test/java/com/speedment/internal/core/code/model/java/entity/EntityTranslatorTest.java @@ -16,6 +16,7 @@ */ package com.speedment.internal.core.code.model.java.entity; +import com.speedment.config.Document; import com.speedment.internal.core.code.entity.EntityTranslator; import com.speedment.internal.codegen.base.Generator; import com.speedment.internal.codegen.java.JavaGenerator; @@ -40,8 +41,9 @@ public void testApply() { final Generator cg = new JavaGenerator(); final Table table2 = traverseOver(project, Table.class) - .filter(e -> TABLE_NAME.equals(e.getName())) - .findAny().get(); + .peek(this::print) + .filter(e -> TABLE_NAME.equals(e.getName())) + .findAny().get(); final EntityTranslator instance = new EntityTranslator(speedment, cg, table2); final File file = instance.get(); @@ -52,4 +54,10 @@ public void testApply() { System.out.println(code.get()); } + + private void print(Document d) { + System.out.println(d); + } + + }