Skip to content

Commit

Permalink
Runtime: Fix more problems with @Injector annotation
Browse files Browse the repository at this point in the history
  • Loading branch information
Emil Forslund committed Jun 20, 2016
1 parent c3b6da5 commit 4471fd4
Show file tree
Hide file tree
Showing 11 changed files with 135 additions and 126 deletions.
Expand Up @@ -33,7 +33,6 @@
import static com.speedment.common.codegen.internal.model.constant.DefaultJavadocTag.AUTHOR;
import static com.speedment.common.codegen.internal.util.Formatting.nl;
import static com.speedment.common.codegen.internal.util.Formatting.shortName;
import static com.speedment.common.codegen.internal.util.Formatting.tab;
import com.speedment.common.codegen.model.Field;
import com.speedment.common.injector.Injector;
import com.speedment.common.injector.annotation.Inject;
Expand All @@ -47,11 +46,10 @@
import static java.util.stream.Collectors.toSet;
import com.speedment.common.mapstream.MapStream;
import com.speedment.runtime.component.InfoComponent;
import com.speedment.runtime.component.ManagerComponent;
import java.util.LinkedList;
import static com.speedment.runtime.internal.util.document.DocumentDbUtil.traverseOver;
import com.speedment.runtime.util.CollectorUtil;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining;

/**
*
Expand Down Expand Up @@ -88,63 +86,46 @@ protected Class makeCodeGenModel(File file) {
.keys()
.collect(toSet());

final List<String> managers = new LinkedList<>();
final List<String> managerImpls = new LinkedList<>();

traverseOver(project, Table.class)
.filter(HasEnabled::test)
.forEachOrdered(t -> {
final TranslatorSupport<Table> support = injector.inject(new TranslatorSupport<>(t));
final Type managerType = support.managerType();
final Type managerImplType = support.managerImplType();

if (ambigousNames.contains(t.getName())) {
managers.add(managerType.getName());
managerImpls.add(managerImplType.getName());
} else {
file.add(Import.of(managerType));
file.add(Import.of(managerImplType));
managers.add(shortName(managerType.getName()));
managerImpls.add(shortName(managerImplType.getName()));
}
});

file.add(Import.of(applicationType()));
file.add(Import.of(applicationImplType()));
file.add(Import.of(Type.of(ManagerComponent.class)));

final Method build = Method.of("build", applicationType())
.public_().add(OVERRIDE)
.add(Field.of("injector", Type.of(Injector.class)))
.add("final " + ManagerComponent.class.getSimpleName() +
" managers = injector.getOrThrow(" + ManagerComponent.class.getSimpleName() +
".class);"
);

managers.stream()
.map(s -> new StringBuilder("managers.put(injector.getOrThrow(").append(s).append(".class));"))
.map(StringBuilder::toString)
.forEachOrdered(build::add);

build.add("return injector.getOrThrow(" + getSupport().typeName(getSupport().projectOrThrow()) + "Application.class);");
.add("return injector.getOrThrow(" + getSupport().typeName(getSupport().projectOrThrow()) + "Application.class);");

final Constructor constr = Constructor.of().protected_();

final StringBuilder constructorBody = new StringBuilder("super(").append(nl());
constructorBody.append(tab()).append(getSupport().typeName(getSupport().projectOrThrow())).append("ApplicationImpl.class,").append(nl());
constructorBody.append(tab()).append("Generated").append(getSupport().typeName(getSupport().projectOrThrow())).append(METADATA + ".class");
final StringBuilder constructorBody = new StringBuilder("super(");
constructorBody.append(getSupport().typeName(getSupport().projectOrThrow())).append("ApplicationImpl.class, ");
constructorBody.append("Generated").append(getSupport().typeName(getSupport().projectOrThrow())).append(METADATA).append(".class);").append(nl());

final String separator = "," + nl() + tab();
final String separator = nl();
if (!managerImpls.isEmpty()) {

constructorBody.append(
managerImpls.stream()
.map(s -> s + ".class")
.collect(CollectorUtil.joinIfNotEmpty(separator, separator, ""))
.map(s -> "withManager(" + s + ".class);")
.collect(joining(separator))
);
}

constructorBody.append(nl()).append(");");
constr.add(constructorBody.toString());

clazz.public_().abstract_()
Expand Down
Expand Up @@ -27,6 +27,7 @@
import com.speedment.tool.internal.component.UserInterfaceComponentImpl;
import static com.speedment.tool.internal.util.ConfigFileHelper.DEFAULT_CONFIG_LOCATION;
import java.io.File;
import java.util.Arrays;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
Expand Down Expand Up @@ -95,6 +96,14 @@ protected final boolean hasConfigFile(File file) {
try {
final Class<?> uncasted = Class.forName(component);

Class<?> temp = uncasted;
while (temp != null) {
System.out.println("Class name: " + temp.getName());
System.out.println("Annotations: " + Arrays.toString(temp.getAnnotations()));
System.out.println("Declared Annotations: " + Arrays.toString(temp.getDeclaredAnnotations()));
temp = temp.getSuperclass();
}

@SuppressWarnings("unchecked")
final Class<Component> casted = (Class<Component>) uncasted;
result.with(casted);
Expand Down
Expand Up @@ -16,7 +16,8 @@
*/
package com.speedment.runtime.internal.config.dbms;

import com.speedment.common.injector.annotation.Execute;
import static com.speedment.common.injector.State.INITIALIZED;
import com.speedment.common.injector.annotation.ExecuteBefore;
import com.speedment.common.injector.annotation.Inject;
import com.speedment.runtime.component.DbmsHandlerComponent;
import com.speedment.runtime.config.parameter.DbmsType;
Expand All @@ -34,7 +35,7 @@
*/
public abstract class AbstractDbmsType implements DbmsType {

@Execute
@ExecuteBefore(INITIALIZED)
void install(@Inject DbmsHandlerComponent component) {
component.install(this);
}
Expand Down
Expand Up @@ -31,7 +31,6 @@
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toSet;
import java.util.stream.Stream;
import static com.speedment.runtime.db.metadata.TypeInfoMetaData.of;
import com.speedment.runtime.field.predicate.SpeedmentPredicateView;
import com.speedment.runtime.internal.db.postgresql.PostgresqlDbmsMetadataHandler;
import com.speedment.runtime.internal.db.postgresql.PostgresqlDbmsOperationHandler;
Expand Down
Expand Up @@ -16,6 +16,8 @@
*/
package com.speedment.runtime.internal.db;

import static com.speedment.common.injector.State.INITIALIZED;
import com.speedment.common.injector.annotation.ExecuteBefore;
import com.speedment.common.injector.annotation.Inject;
import com.speedment.common.logger.Logger;
import com.speedment.common.logger.LoggerManager;
Expand Down Expand Up @@ -53,7 +55,6 @@
import static com.speedment.runtime.internal.util.CaseInsensitiveMaps.newCaseInsensitiveMap;
import static com.speedment.runtime.internal.util.document.DocumentDbUtil.dbmsTypeOf;
import com.speedment.runtime.internal.util.document.DocumentUtil;
import static com.speedment.runtime.util.NullUtil.requireNonNulls;
import com.speedment.runtime.util.ProgressMeasure;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
Expand All @@ -66,14 +67,12 @@
import java.util.Map;
import java.util.Objects;
import static java.util.Objects.nonNull;
import static java.util.Objects.requireNonNull;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Predicate;
import java.util.function.Supplier;
import com.speedment.common.injector.annotation.IncludeInjectable;
import static com.speedment.runtime.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;

Expand All @@ -83,7 +82,6 @@
* @author Per Minborg
* @since 2.4.0
*/
@IncludeInjectable(JavaTypeMap.class)
public abstract class AbstractDbmsMetadataHandler implements DbmsMetadataHandler {

private final static Logger LOGGER = LoggerManager.getLogger(AbstractDbmsMetadataHandler.class);
Expand All @@ -93,10 +91,19 @@ public abstract class AbstractDbmsMetadataHandler implements DbmsMetadataHandler
private @Inject DbmsHandlerComponent dbmsHandlerComponent;
private @Inject TypeMapperComponent typeMapperComponent;
private @Inject ProjectComponent projectComponent;
private @Inject JavaTypeMap javaTypeMap;
private JavaTypeMap javaTypeMap;

protected AbstractDbmsMetadataHandler() {}

@ExecuteBefore(INITIALIZED)
final void createJavaTypeMap() {
this.javaTypeMap = newJavaTypeMap();
}

protected JavaTypeMap newJavaTypeMap() {
return new JavaTypeMap();
}

@Override
public CompletableFuture<Project> readSchemaMetadata(
Dbms dbms,
Expand Down
Expand Up @@ -138,17 +138,17 @@ protected void execute(Dbms dbms, List<? extends SqlStatement> sqlStatementList)
switch (sqlStatement.getType()) {
case INSERT: {
final SqlInsertStatement s = (SqlInsertStatement) sqlStatement;
handleSqlStatement(conn, s);
handleSqlStatement(dbms, conn, s);
break;
}
case UPDATE: {
final SqlUpdateStatement s = (SqlUpdateStatement) sqlStatement;
handleSqlStatement(conn, s);
handleSqlStatement(dbms, conn, s);
break;
}
case DELETE: {
final SqlDeleteStatement s = (SqlDeleteStatement) sqlStatement;
handleSqlStatement(conn, s);
handleSqlStatement(dbms, conn, s);
break;
}
}
Expand Down Expand Up @@ -202,7 +202,7 @@ protected void execute(Dbms dbms, List<? extends SqlStatement> sqlStatementList)
}
}

protected void handleSqlStatement(final Connection conn, final SqlInsertStatement sqlStatement) throws SQLException {
protected void handleSqlStatement(Dbms dbms, final Connection conn, final SqlInsertStatement sqlStatement) throws SQLException {
try (final PreparedStatement ps = conn.prepareStatement(sqlStatement.getSql(), Statement.RETURN_GENERATED_KEYS)) {
int i = 1;
for (Object o : sqlStatement.getValues()) {
Expand All @@ -218,15 +218,15 @@ protected void handleSqlStatement(final Connection conn, final SqlInsertStatemen
}
}

protected void handleSqlStatement(final Connection conn, final SqlUpdateStatement sqlStatement) throws SQLException {
handleSqlStatementHelper(conn, sqlStatement);
protected void handleSqlStatement(Dbms dbms, final Connection conn, final SqlUpdateStatement sqlStatement) throws SQLException {
handleSqlStatementHelper(dbms, conn, sqlStatement);
}

protected void handleSqlStatement(final Connection conn, final SqlDeleteStatement sqlStatement) throws SQLException {
handleSqlStatementHelper(conn, sqlStatement);
protected void handleSqlStatement(Dbms dbms, final Connection conn, final SqlDeleteStatement sqlStatement) throws SQLException {
handleSqlStatementHelper(dbms, conn, sqlStatement);
}

private void handleSqlStatementHelper(final Connection conn, final SqlStatement sqlStatement) throws SQLException {
private void handleSqlStatementHelper(Dbms dbms, final Connection conn, final SqlStatement sqlStatement) throws SQLException {
try (final PreparedStatement ps = conn.prepareStatement(sqlStatement.getSql(), Statement.NO_GENERATED_KEYS)) {
int i = 1;
for (Object o : sqlStatement.getValues()) {
Expand All @@ -253,26 +253,6 @@ protected String encloseField(Dbms dbms, String fieldName) {
return dbmsTypeOf(dbmsHandlerComponent, dbms).getDatabaseNamingConvention().encloseField(fieldName);
}

// @Override
// public String getDbmsInfoString() throws SQLException {
// try (final Connection conn = connectionPoolComponent.getConnection(dbms)) {
// final DatabaseMetaData md = conn.getMetaData();
// return new StringBuilder()
// .append(md.getDatabaseProductName())
// .append(", ")
// .append(md.getDatabaseProductVersion())
// .append(", ")
// .append(md.getDriverName())
// .append(" ")
// .append(md.getDriverVersion())
// .append(", JDBC version ")
// .append(md.getJDBCMajorVersion())
// .append(".")
// .append(md.getJDBCMinorVersion())
// .toString();
// }
// }

@Override
public Clob createClob(Dbms dbms) throws SQLException {
return applyOnConnection(dbms, Connection::createClob);
Expand Down

0 comments on commit 4471fd4

Please sign in to comment.