ItemModelAssembler.java
1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.srh.api.hypermedia;
import com.srh.api.controller.*;
import com.srh.api.dto.resource.ItemDto;
import com.srh.api.model.TypeItem;
import org.springframework.data.domain.Pageable;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;
import org.springframework.hateoas.server.RepresentationModelAssembler;
import org.springframework.stereotype.Component;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
@Component
public class ItemModelAssembler implements RepresentationModelAssembler<ItemDto, EntityModel<ItemDto>> {
@Override
public EntityModel<ItemDto> toModel(ItemDto itemDto) {
EntityModel<ItemDto> itemEntityModel = new EntityModel<>(itemDto,
linkTo(methodOn(ItemController.class).find(itemDto.getId())).withSelfRel(),
linkTo(ItemController.class).withRel("itens"),
linkTo(methodOn(ProjectController.class).find(itemDto.getProject().getId())).withRel("project"),
linkTo(methodOn(ItemAttributeController.class).listAttributesByItem(itemDto.getId(), Pageable.unpaged()))
.withRel("attributes"),
linkTo(methodOn(ItemTagController.class).listTagsByItem(itemDto.getId(), Pageable.unpaged())).withRel("tags"),
linkTo(methodOn(ItemController.class).listRecommendationsByItem(itemDto.getId(), Pageable.unpaged()))
.withRel("recommendations")
);
if (itemDto.getTypeItem() != null) {
itemEntityModel.add(buildTypeItemLink(itemDto.getTypeItem()));
}
return itemEntityModel;
}
private Link buildTypeItemLink(TypeItem typeItem) {
return linkTo(methodOn(TypeItemController.class).find(typeItem.getId())).withRel("typeitem");
}
}