Use Optional for optional attributes

This commit is contained in:
René Pfeuffer
2018-06-01 15:07:35 +02:00
parent c62168274d
commit 71fa5e100c
6 changed files with 55 additions and 24 deletions

View File

@@ -10,6 +10,7 @@ import javax.ws.rs.core.UriInfo;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
@Mapper
public abstract class User2UserDtoMapper {
@@ -35,8 +36,16 @@ public abstract class User2UserDtoMapper {
target.setLinks(links);
}
@Mappings({@Mapping(target = "lastModified"), @Mapping(target = "creationDate")})
@Mapping(target = "creationDate")
Instant mapTime(Long epochMilli) {
return epochMilli == null? null: Instant.ofEpochMilli(epochMilli);
// TODO assert parameter not null
return Instant.ofEpochMilli(epochMilli);
}
@Mapping(target = "lastModified")
Optional<Instant> mapOptionalTime(Long epochMilli) {
return Optional
.ofNullable(epochMilli)
.map(Instant::ofEpochMilli);
}
}

View File

@@ -5,6 +5,7 @@ import lombok.Data;
import javax.xml.bind.annotation.XmlElement;
import java.time.Instant;
import java.util.Map;
import java.util.Optional;
@Data
public class UserDto {
@@ -12,7 +13,7 @@ public class UserDto {
private boolean admin;
private Instant creationDate;
private String displayName;
private Instant lastModified;
private Optional<Instant> lastModified;
private String mail;
private String name;
private String password;

View File

@@ -2,10 +2,14 @@ package sonia.scm.api.v2.resources;
import com.google.inject.Inject;
import org.apache.shiro.authc.credential.PasswordService;
import org.mapstruct.*;
import org.mapstruct.Context;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import sonia.scm.user.User;
import java.time.Instant;
import java.util.Optional;
import static sonia.scm.api.rest.resources.UserResource.DUMMY_PASSWORT;
@@ -31,8 +35,14 @@ public abstract class UserDto2UserMapper {
}
}
@Mappings({@Mapping(target = "lastModified"), @Mapping(target = "creationDate")})
@Mapping(target = "creationDate")
Long mapTime(Instant instant) {
return instant == null? null: instant.toEpochMilli();
// TODO assert parameter not null
return instant.toEpochMilli();
}
@Mapping(target = "lastModified")
Long mapOptionalTime(Optional<Instant> instant) {
return instant.map(Instant::toEpochMilli).orElse(null);
}
}