Skip to content

Commit

Permalink
Add javadoc har logo, refactor Tuple, introduce PureStatic
Browse files Browse the repository at this point in the history
  • Loading branch information
minborg committed Jul 25, 2015
1 parent 32e7f33 commit cec162b
Show file tree
Hide file tree
Showing 53 changed files with 1,434 additions and 527 deletions.
12 changes: 8 additions & 4 deletions pom.xml
Expand Up @@ -210,6 +210,10 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.3</version> <version>2.10.3</version>
<configuration>
<!-- <verbose>true</verbose>-->
<docfilessubdirs>true</docfilessubdirs>
</configuration>
<executions> <executions>
<execution> <execution>
<id>attach-javadocs</id> <id>attach-javadocs</id>
Expand All @@ -221,7 +225,7 @@
</plugin> </plugin>


<!-- http://maven.apache.org/plugins/maven-pdf-plugin/usage.html--> <!-- http://maven.apache.org/plugins/maven-pdf-plugin/usage.html-->
<!-- <plugin> <!-- <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pdf-plugin</artifactId> <artifactId>maven-pdf-plugin</artifactId>
<version>1.3</version> <version>1.3</version>
Expand Down Expand Up @@ -259,7 +263,7 @@
</build> </build>


<!-- Make sure that the Log4J API and Log4J Core versionw stay in sync--> <!-- Make sure that the Log4J API and Log4J Core versionw stay in sync-->
<!-- <dependencyManagement> <!-- <dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.apache.logging.log4j</groupId> <groupId>org.apache.logging.log4j</groupId>
Expand Down Expand Up @@ -320,7 +324,7 @@
2015-01-05 2015-01-05
permin permin
--> -->
<!-- <dependency> <!-- <dependency>
<groupId>org.apache.logging.log4j</groupId> <groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId> <artifactId>log4j-api</artifactId>
<version>2.1</version> <version>2.1</version>
Expand All @@ -332,7 +336,7 @@
2015-01-05 2015-01-05
permin permin
--> -->
<!-- <dependency> <!-- <dependency>
<groupId>org.apache.logging.log4j</groupId> <groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId> <artifactId>log4j-core</artifactId>
<version>2.1</version> <version>2.1</version>
Expand Down
Expand Up @@ -127,7 +127,7 @@ private Method defaultReadEntity(File file) {


columns().forEachOrdered(c -> { columns().forEachOrdered(c -> {


final JavaTypeMapping mapping = mapperComponent.apply(dbms().getType(), c.getMapping()); final JavaTypeMapping<?> mapping = mapperComponent.apply(dbms().getType(), c.getMapping());
final StringBuilder sb = new StringBuilder() final StringBuilder sb = new StringBuilder()
.append("builder.set") .append("builder.set")
.append(typeName(c)) .append(typeName(c))
Expand Down
Expand Up @@ -31,6 +31,7 @@
import com.speedment.core.db.impl.SqlFunction; import com.speedment.core.db.impl.SqlFunction;
import com.speedment.core.platform.Platform; import com.speedment.core.platform.Platform;
import com.speedment.core.platform.component.DbmsHandlerComponent; import com.speedment.core.platform.component.DbmsHandlerComponent;
import com.speedment.core.platform.component.JavaTypeMapperComponent;
import com.speedment.core.runtime.typemapping.StandardJavaTypeMapping; import com.speedment.core.runtime.typemapping.StandardJavaTypeMapping;
import com.speedment.logging.Logger; import com.speedment.logging.Logger;
import com.speedment.logging.LoggerManager; import com.speedment.logging.LoggerManager;
Expand Down Expand Up @@ -155,7 +156,15 @@ public Optional<ENTITY> persist(ENTITY entity, Consumer<MetaResult<ENTITY>> list
.filter(Column::isAutoincrement) .filter(Column::isAutoincrement)
.forEachOrdered(column -> { .forEachOrdered(column -> {
// Cast from Long to the column target type // Cast from Long to the column target type
final Object val = StandardJavaTypeMapping.parse(column.getMapping(), l.get(cnt.getAndIncrement()));
final Object val = Platform.get()
.get(JavaTypeMapperComponent.class)
.apply(column.getMapping())
.parse(
l.get(cnt.getAndIncrement())
);

//final Object val = StandardJavaTypeMappingOld.parse(column.getMapping(), l.get(cnt.getAndIncrement()));
set(builder, column, val); set(builder, column, val);
}); });
} }
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/speedment/core/platform/Platform.java
Expand Up @@ -29,6 +29,8 @@
import com.speedment.core.platform.component.impl.SqlTypeMapperComponentImpl; import com.speedment.core.platform.component.impl.SqlTypeMapperComponentImpl;


/** /**
* <img src="{@docRoot}/doc-files/hare.png" alt="Hare">
*
* The {@code Platform} class acts as a generic holder of different system * The {@code Platform} class acts as a generic holder of different system
* {@link Component Components}. Using its pluggable architecture, one can * {@link Component Components}. Using its pluggable architecture, one can
* replace existing default implementations of existing Components or plug in * replace existing default implementations of existing Components or plug in
Expand Down
Expand Up @@ -18,7 +18,6 @@


import com.speedment.core.config.model.parameters.DbmsType; import com.speedment.core.config.model.parameters.DbmsType;
import com.speedment.core.runtime.typemapping.JavaTypeMapping; import com.speedment.core.runtime.typemapping.JavaTypeMapping;
import java.util.function.BiFunction;


/** /**
* The JavaTypeMapperComponent provides a mapping from a certain DbmsType and * The JavaTypeMapperComponent provides a mapping from a certain DbmsType and
Expand All @@ -28,23 +27,33 @@
* @author pemi * @author pemi
* @since 2.0 * @since 2.0
*/ */
public interface JavaTypeMapperComponent extends Component, BiFunction<DbmsType, Class<?>, JavaTypeMapping> { public interface JavaTypeMapperComponent extends Component {


@Override @Override
default Class<JavaTypeMapperComponent> getComponentClass() { default Class<JavaTypeMapperComponent> getComponentClass() {
return JavaTypeMapperComponent.class; return JavaTypeMapperComponent.class;
} }


/** /**
* Applies and returns the JavaTypeMapping that corresponds to the DbmsType * Gets the mapping from the javaClass to the JavaTypeMapping. If a specific
* and the Java Class. * mapping for the given DbmsType is present, that mapping is selected over
* the general mapping for any DbmsType.
* *
* @param dbmsType to apply * @param <T> the java class type to map
* @param clazz to apply * @param dbmsType the Dbms type
* @return the JavaTypeMapping that corresponds to the DbmsType and the Java * @param javaClass the java class to map
* Class * @return the mapping
*/ */
@Override <T> JavaTypeMapping<T> apply(DbmsType dbmsType, Class<T> javaClass);
public JavaTypeMapping apply(DbmsType dbmsType, Class<?> clazz);
/**
* Gets the mapping from the javaClass to the JavaTypeMapping. The mapping
* will not consider DbmsType specific mappings.
*
* @param <T> the java class type to map
* @param javaClass the java class to map
* @return the mapping
*/
<T> JavaTypeMapping<T> apply(Class<T> javaClass);


} }
Expand Up @@ -20,46 +20,80 @@
import com.speedment.core.platform.component.JavaTypeMapperComponent; import com.speedment.core.platform.component.JavaTypeMapperComponent;
import com.speedment.core.runtime.typemapping.JavaTypeMapping; import com.speedment.core.runtime.typemapping.JavaTypeMapping;
import com.speedment.core.runtime.typemapping.StandardJavaTypeMapping; import com.speedment.core.runtime.typemapping.StandardJavaTypeMapping;
import com.speedment.util.tuple.Tuple2;
import com.speedment.util.tuple.Tuples;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Stream; import java.util.stream.Stream;


public class JavaTypeMapperComponentImpl implements JavaTypeMapperComponent { public class JavaTypeMapperComponentImpl implements JavaTypeMapperComponent {


private final Map<Class<?>, JavaTypeMapping> map; private final Map<Class<?>, JavaTypeMapping<?>> map;
private final Map<DbmsType, Map<Class<?>, JavaTypeMapping>> dbmsTypeMap; private final Map<DbmsType, Map<Class<?>, JavaTypeMapping<?>>> dbmsTypeMap;


public JavaTypeMapperComponentImpl() { public JavaTypeMapperComponentImpl() {
map = new ConcurrentHashMap<>(); map = newConcurrentMap();
dbmsTypeMap = new ConcurrentHashMap<>(); dbmsTypeMap = newConcurrentMap();
Stream.of(StandardJavaTypeMapping.values()).forEach(m -> { StandardJavaTypeMapping.stream().forEach(this::put);
put(m);
});
} }


public JavaTypeMapping put(JavaTypeMapping item) { public JavaTypeMapping<?> put(JavaTypeMapping<?> item) {
return map.put(item.getJavaClass(), item); return map.put(item.getJavaClass(), item);
} }


public JavaTypeMapping put(DbmsType dbmsType, JavaTypeMapping item) { public JavaTypeMapping<?> put(DbmsType dbmsType, JavaTypeMapping<?> item) {
return dbmsTypeMap.computeIfAbsent(dbmsType, k -> new ConcurrentHashMap<>()).put(item.getJavaClass(), item); return dbmsTypeMap.computeIfAbsent(dbmsType, k -> new ConcurrentHashMap<>()).put(item.getJavaClass(), item);
} }


@Override
public <T> JavaTypeMapping<T> apply(DbmsType dbmsType, Class<T> javaClass) {
return getFromMapOrThrow(dbmsTypeMap.getOrDefault(dbmsType, map), javaClass, () -> dbmsType + ", " + javaClass.getName());
}

@Override
public <T> JavaTypeMapping<T> apply(Class<T> javaClass) {
return getFromMapOrThrow(map, javaClass, javaClass::getName);
}

@SuppressWarnings("unchecked")
private <T> JavaTypeMapping<T> getFromMapOrThrow(Map<Class<?>, JavaTypeMapping<?>> map, Class<T> javaClass, Supplier<String> throwMessageSupplier) {
return Optional.ofNullable((JavaTypeMapping<T>) map.get(javaClass))
.orElseThrow(() -> new NullPointerException("The " + JavaTypeMapperComponent.class.getSimpleName() + " does not have a mapping for " + throwMessageSupplier.get()));
}

private <K, V> Map<K, V> newConcurrentMap() {
return new ConcurrentHashMap<>();
}

/** /**
* Gets the mapping from the javaClass to the JavaTypeMapping. If a specific * Returns a {@link Stream} of the current mappings that are registered with
* mapping for the given DbmsType is present, that mapping is selected over * this class. Mappings that are not associated to any particular DbmsType
* the general mapping for any DbmsType. * will have their {@code Optional<DbmsType>} set to
* {@code Optional.empty()} whereas specific DbmsType mappings will have the
* {@code Optional<DbmsType>} field set accordingly.
* *
* @param dbmsType the Dbms type * @return a {@link Stream} of the current mappings that are registered with
* @param javaClass the java class to map * this class
* @return the mapping
*/ */
@Override public Stream<Tuple2<Optional<DbmsType>, JavaTypeMapping<?>>> stream() {
public JavaTypeMapping apply(DbmsType dbmsType, Class<?> javaClass) {
return Optional.ofNullable(
dbmsTypeMap.getOrDefault(dbmsType, map).get(javaClass))
.orElseThrow(() -> new NullPointerException("The "+JavaTypeMapperComponent.class.getSimpleName()+" does not have a mapping for " + dbmsType + ", " + javaClass)); final Stream<Tuple2<Optional<DbmsType>, JavaTypeMapping<?>>> s0 = map.values().stream().map(v -> Tuples.of(Optional.empty(), v));

final Stream.Builder<Stream<Tuple2<Optional<DbmsType>, JavaTypeMapping<?>>>> sb = Stream.builder();
sb.add(s0);

dbmsTypeMap.entrySet().stream().forEach(e -> {
final DbmsType dbmsType = e.getKey();
Stream<Tuple2<Optional<DbmsType>, JavaTypeMapping<?>>> sn = e.getValue().values().stream().map(v -> Tuples.of(Optional.of(dbmsType), v));
sb.add(sn);
});

return sb.build().flatMap(Function.identity());
} }


} }
Expand Up @@ -17,11 +17,20 @@
package com.speedment.core.runtime; package com.speedment.core.runtime;


/** /**
* This interface defines how a Speedment application can obtain its
* configuration meta data. For example, in a form of a groovy file
* *
* @author pemi * @author pemi
* @since 2.0
*/ */
public abstract interface ApplicationMetadata { public abstract interface ApplicationMetadata {


/**
* Returns the meta data as a String that shall be used to build up the
* complete Project meta data.
*
* @return the meta data
*/
String getMetadata(); String getMetadata();


} }

0 comments on commit cec162b

Please sign in to comment.