RoleMapper.java
package api.mapper;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.mapstruct.Condition;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
import org.mapstruct.Named;
import org.mapstruct.NullValuePropertyMappingStrategy;
import org.springframework.beans.factory.annotation.Autowired;
import api.dtos.RoleDto;
import api.entities.Authority;
import api.entities.Role;
import api.services.AuthorityService;
/**
* {@link RoleMapper}.
*/
@Mapper(componentModel = "spring", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
public abstract class RoleMapper {
@Autowired
private AuthorityService authorityService;
/**
* Convert to DTO.
*
* @param role Role model
* @return {@link RoleDto}
*/
@Mapping(target = "authorityIds", source = "authorities", qualifiedByName = "AuthoritiestoAuthorityIds")
public abstract RoleDto toDto(Role role);
/**
* Convert to entity.
*
* @param roleDto Role DTO
* @return {@link Role}
*/
@Mapping(target = "authorities", source = "authorityIds", qualifiedByName = "AuthorityIdstoAuthorities")
public abstract Role toEntity(RoleDto roleDto);
/**
* Update {@link Role} info with {@link RoleDto}.
*
* @param role Role to update
* @param roleDto Update information
*/
@Mapping(target = "id", ignore = true)
@Mapping(
target = "authorities",
source = "authorityIds",
qualifiedByName = "AuthorityIdstoAuthorities",
conditionQualifiedByName = "notNull"
)
public abstract void update(@MappingTarget Role role, RoleDto roleDto);
/**
* Ensure object is not null.
*
* @param value object
* @return true if object is not null
*/
@Named("notNull")
@Condition
protected boolean notNull(Object value) {
return value != null;
}
/**
* Convert {@link Set} of {@link Authority} to {@link Set} of {@link Integer} ids.
*
* @param authorities {@link Set} of {@link Authority}
* @return {@link Set} of {@link Integer} ids
*/
@Named("AuthoritiestoAuthorityIds")
protected List<Integer> toAuthorityIds(Set<Authority> authorities) {
if (authorities == null) {
return new ArrayList<>();
}
return authorities.stream()
.map(Authority::getId)
.collect(Collectors.toList());
}
/**
* Convert {@link Set} of {@link Integer} ids to {@link Set} of {@link Authority}.
*
* @param ids {@link Set} of {@link Integer} ids
* @return {@link Set} of {@link Authority}
*/
@Named("AuthorityIdstoAuthorities")
protected Set<Authority> toAuthorities(List<Integer> ids) {
if (ids == null) {
return new HashSet<>();
}
return new HashSet<>(authorityService.get(ids));
}
}