Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ public interface CarMapper {

* Between `java.time.Instant` from Java 8 Date-Time package and `java.util.Date`.

* Between `java.time.LocalDateTime` from Java 8 Date-Time package and `java.time.LocalDate` from the same package.

* Between `java.time.ZonedDateTime` from Java 8 Date-Time package and `java.util.Calendar`.

* Between `java.sql.Date` and `java.util.Date`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import java.sql.Timestamp;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
Expand Down Expand Up @@ -190,6 +191,17 @@ public static String zoneId(ConversionContext conversionContext) {
return typeReferenceName( conversionContext, ZoneId.class );
}

/**
* Name for {@link java.time.LocalDate}.
*
* @param conversionContext Conversion context
*
* @return Name or fully-qualified name.
*/
public static String localDate(ConversionContext conversionContext) {
return typeReferenceName( conversionContext, LocalDate.class );
}

/**
* Name for {@link java.time.LocalDateTime}.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,12 +233,15 @@ private void registerJava8TimeConversions() {
register( Period.class, String.class, new StaticParseToStringConversion() );
register( Duration.class, String.class, new StaticParseToStringConversion() );

// Java 8 to Date
// Java 8 time to Date
register( ZonedDateTime.class, Date.class, new JavaZonedDateTimeToDateConversion() );
register( LocalDateTime.class, Date.class, new JavaLocalDateTimeToDateConversion() );
register( LocalDate.class, Date.class, new JavaLocalDateToDateConversion() );
register( Instant.class, Date.class, new JavaInstantToDateConversion() );

// Java 8 time
register( LocalDateTime.class, LocalDate.class, new JavaLocalDateTimeToLocalDateConversion() );

}

private void registerJavaTimeSqlConversions() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* Copyright MapStruct Authors.
*
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
*/
package org.mapstruct.ap.internal.conversion;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Set;

import org.mapstruct.ap.internal.model.common.ConversionContext;
import org.mapstruct.ap.internal.model.common.Type;
import org.mapstruct.ap.internal.util.Collections;

/**
* SimpleConversion for mapping {@link LocalDateTime} to
* {@link LocalDate} and vice versa.
*/

public class JavaLocalDateTimeToLocalDateConversion extends SimpleConversion {

@Override
protected String getToExpression(ConversionContext conversionContext) {
return "<SOURCE>.toLocalDate()";
}

@Override
protected Set<Type> getToConversionImportTypes(ConversionContext conversionContext) {
return Collections.asSet(
conversionContext.getTypeFactory().getType( LocalDate.class )
);
}

@Override
protected String getFromExpression(ConversionContext conversionContext) {
return "<SOURCE>.atStartOfDay()";
}

@Override
protected Set<Type> getFromConversionImportTypes(ConversionContext conversionContext) {
return Collections.asSet(
conversionContext.getTypeFactory().getType( LocalDateTime.class )
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,21 @@ public void testInstantToDateMapping() {
assertThat( source.getForDateConversionWithInstant() ).isEqualTo( instant );
}

@ProcessorTest
public void testLocalDateTimeToLocalDateMapping() {
LocalDate localDate = LocalDate.of( 2014, 1, 1 );

Source source = new Source();
source.setForLocalDateTimeConversionWithLocalDate( localDate );
Target target = SourceTargetMapper.INSTANCE.sourceToTargetDefaultMapping( source );
LocalDateTime localDateTime = target.getForLocalDateTimeConversionWithLocalDate();
assertThat( localDateTime ).isNotNull();
assertThat( localDateTime ).isEqualTo( LocalDateTime.of( 2014, 1, 1, 0, 0 ) );

source = SourceTargetMapper.INSTANCE.targetToSource( target );
assertThat( source.getForLocalDateTimeConversionWithLocalDate() ).isEqualTo( localDate );
}

@ProcessorTest
@DefaultTimeZone("Australia/Melbourne")
public void testLocalDateTimeToDateMapping() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public class Source {

private Instant forDateConversionWithInstant;

private LocalDate forLocalDateTimeConversionWithLocalDate;

private Instant forInstantConversionWithString;

private Period forPeriodConversionWithString;
Expand Down Expand Up @@ -124,6 +126,14 @@ public void setForDateConversionWithInstant(Instant forDateConversionWithInstant
this.forDateConversionWithInstant = forDateConversionWithInstant;
}

public LocalDate getForLocalDateTimeConversionWithLocalDate() {
return forLocalDateTimeConversionWithLocalDate;
}

public void setForLocalDateTimeConversionWithLocalDate(LocalDate forLocalDateTimeConversionWithLocalDate) {
this.forLocalDateTimeConversionWithLocalDate = forLocalDateTimeConversionWithLocalDate;
}

public Instant getForInstantConversionWithString() {
return forInstantConversionWithString;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
*/
package org.mapstruct.ap.test.conversion.java8time;

import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;

Expand Down Expand Up @@ -33,6 +34,8 @@ public class Target {

private Date forDateConversionWithInstant;

private LocalDateTime forLocalDateTimeConversionWithLocalDate;

private String forInstantConversionWithString;

private String forPeriodConversionWithString;
Expand Down Expand Up @@ -119,6 +122,14 @@ public void setForDateConversionWithInstant(Date forDateConversionWithInstant) {
this.forDateConversionWithInstant = forDateConversionWithInstant;
}

public LocalDateTime getForLocalDateTimeConversionWithLocalDate() {
return forLocalDateTimeConversionWithLocalDate;
}

public void setForLocalDateTimeConversionWithLocalDate(LocalDateTime forLocalDateTimeConversionWithLocalDate) {
this.forLocalDateTimeConversionWithLocalDate = forLocalDateTimeConversionWithLocalDate;
}

public String getForInstantConversionWithString() {
return forInstantConversionWithString;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ public Target sourceToTarget(Source source) {
if ( source.getForDateConversionWithInstant() != null ) {
target.setForDateConversionWithInstant( Date.from( source.getForDateConversionWithInstant() ) );
}
if ( source.getForLocalDateTimeConversionWithLocalDate() != null ) {
target.setForLocalDateTimeConversionWithLocalDate( source.getForLocalDateTimeConversionWithLocalDate().atStartOfDay() );
}
if ( source.getForInstantConversionWithString() != null ) {
target.setForInstantConversionWithString( source.getForInstantConversionWithString().toString() );
}
Expand Down Expand Up @@ -117,6 +120,9 @@ public Target sourceToTargetDefaultMapping(Source source) {
if ( source.getForDateConversionWithInstant() != null ) {
target.setForDateConversionWithInstant( Date.from( source.getForDateConversionWithInstant() ) );
}
if ( source.getForLocalDateTimeConversionWithLocalDate() != null ) {
target.setForLocalDateTimeConversionWithLocalDate( source.getForLocalDateTimeConversionWithLocalDate().atStartOfDay() );
}
if ( source.getForInstantConversionWithString() != null ) {
target.setForInstantConversionWithString( source.getForInstantConversionWithString().toString() );
}
Expand Down Expand Up @@ -166,6 +172,9 @@ public Target sourceToTargetDateTimeMapped(Source source) {
if ( source.getForDateConversionWithInstant() != null ) {
target.setForDateConversionWithInstant( Date.from( source.getForDateConversionWithInstant() ) );
}
if ( source.getForLocalDateTimeConversionWithLocalDate() != null ) {
target.setForLocalDateTimeConversionWithLocalDate( source.getForLocalDateTimeConversionWithLocalDate().atStartOfDay() );
}
if ( source.getForInstantConversionWithString() != null ) {
target.setForInstantConversionWithString( source.getForInstantConversionWithString().toString() );
}
Expand Down Expand Up @@ -215,6 +224,9 @@ public Target sourceToTargetLocalDateTimeMapped(Source source) {
if ( source.getForDateConversionWithInstant() != null ) {
target.setForDateConversionWithInstant( Date.from( source.getForDateConversionWithInstant() ) );
}
if ( source.getForLocalDateTimeConversionWithLocalDate() != null ) {
target.setForLocalDateTimeConversionWithLocalDate( source.getForLocalDateTimeConversionWithLocalDate().atStartOfDay() );
}
if ( source.getForInstantConversionWithString() != null ) {
target.setForInstantConversionWithString( source.getForInstantConversionWithString().toString() );
}
Expand Down Expand Up @@ -264,6 +276,9 @@ public Target sourceToTargetLocalDateMapped(Source source) {
if ( source.getForDateConversionWithInstant() != null ) {
target.setForDateConversionWithInstant( Date.from( source.getForDateConversionWithInstant() ) );
}
if ( source.getForLocalDateTimeConversionWithLocalDate() != null ) {
target.setForLocalDateTimeConversionWithLocalDate( source.getForLocalDateTimeConversionWithLocalDate().atStartOfDay() );
}
if ( source.getForInstantConversionWithString() != null ) {
target.setForInstantConversionWithString( source.getForInstantConversionWithString().toString() );
}
Expand Down Expand Up @@ -313,6 +328,9 @@ public Target sourceToTargetLocalTimeMapped(Source source) {
if ( source.getForDateConversionWithInstant() != null ) {
target.setForDateConversionWithInstant( Date.from( source.getForDateConversionWithInstant() ) );
}
if ( source.getForLocalDateTimeConversionWithLocalDate() != null ) {
target.setForLocalDateTimeConversionWithLocalDate( source.getForLocalDateTimeConversionWithLocalDate().atStartOfDay() );
}
if ( source.getForInstantConversionWithString() != null ) {
target.setForInstantConversionWithString( source.getForInstantConversionWithString().toString() );
}
Expand Down Expand Up @@ -362,6 +380,9 @@ public Source targetToSource(Target target) {
if ( target.getForDateConversionWithInstant() != null ) {
source.setForDateConversionWithInstant( target.getForDateConversionWithInstant().toInstant() );
}
if ( target.getForLocalDateTimeConversionWithLocalDate() != null ) {
source.setForLocalDateTimeConversionWithLocalDate( target.getForLocalDateTimeConversionWithLocalDate().toLocalDate() );
}
if ( target.getForInstantConversionWithString() != null ) {
source.setForInstantConversionWithString( Instant.parse( target.getForInstantConversionWithString() ) );
}
Expand Down Expand Up @@ -411,6 +432,9 @@ public Source targetToSourceDateTimeMapped(Target target) {
if ( target.getForDateConversionWithInstant() != null ) {
source.setForDateConversionWithInstant( target.getForDateConversionWithInstant().toInstant() );
}
if ( target.getForLocalDateTimeConversionWithLocalDate() != null ) {
source.setForLocalDateTimeConversionWithLocalDate( target.getForLocalDateTimeConversionWithLocalDate().toLocalDate() );
}
if ( target.getForInstantConversionWithString() != null ) {
source.setForInstantConversionWithString( Instant.parse( target.getForInstantConversionWithString() ) );
}
Expand Down Expand Up @@ -460,6 +484,9 @@ public Source targetToSourceLocalDateTimeMapped(Target target) {
if ( target.getForDateConversionWithInstant() != null ) {
source.setForDateConversionWithInstant( target.getForDateConversionWithInstant().toInstant() );
}
if ( target.getForLocalDateTimeConversionWithLocalDate() != null ) {
source.setForLocalDateTimeConversionWithLocalDate( target.getForLocalDateTimeConversionWithLocalDate().toLocalDate() );
}
if ( target.getForInstantConversionWithString() != null ) {
source.setForInstantConversionWithString( Instant.parse( target.getForInstantConversionWithString() ) );
}
Expand Down Expand Up @@ -509,6 +536,9 @@ public Source targetToSourceLocalDateMapped(Target target) {
if ( target.getForDateConversionWithInstant() != null ) {
source.setForDateConversionWithInstant( target.getForDateConversionWithInstant().toInstant() );
}
if ( target.getForLocalDateTimeConversionWithLocalDate() != null ) {
source.setForLocalDateTimeConversionWithLocalDate( target.getForLocalDateTimeConversionWithLocalDate().toLocalDate() );
}
if ( target.getForInstantConversionWithString() != null ) {
source.setForInstantConversionWithString( Instant.parse( target.getForInstantConversionWithString() ) );
}
Expand Down Expand Up @@ -558,6 +588,9 @@ public Source targetToSourceLocalTimeMapped(Target target) {
if ( target.getForDateConversionWithInstant() != null ) {
source.setForDateConversionWithInstant( target.getForDateConversionWithInstant().toInstant() );
}
if ( target.getForLocalDateTimeConversionWithLocalDate() != null ) {
source.setForLocalDateTimeConversionWithLocalDate( target.getForLocalDateTimeConversionWithLocalDate().toLocalDate() );
}
if ( target.getForInstantConversionWithString() != null ) {
source.setForInstantConversionWithString( Instant.parse( target.getForInstantConversionWithString() ) );
}
Expand Down Expand Up @@ -607,6 +640,9 @@ public Source targetToSourceDefaultMapping(Target target) {
if ( target.getForDateConversionWithInstant() != null ) {
source.setForDateConversionWithInstant( target.getForDateConversionWithInstant().toInstant() );
}
if ( target.getForLocalDateTimeConversionWithLocalDate() != null ) {
source.setForLocalDateTimeConversionWithLocalDate( target.getForLocalDateTimeConversionWithLocalDate().toLocalDate() );
}
if ( target.getForInstantConversionWithString() != null ) {
source.setForInstantConversionWithString( Instant.parse( target.getForInstantConversionWithString() ) );
}
Expand Down