package de.codecentric.moviedatabase.movies.controller;
import static de.codecentric.roca.core.LinkBuilder.linkTo;
import org.springframework.util.Assert;
import de.codecentric.moviedatabase.movies.domain.Movie;
import de.codecentric.roca.core.AbstractResourceAssembler;
import de.codecentric.roca.core.Link;
import de.codecentric.roca.core.Resource;
public class MovieResourceAssembler extends AbstractResourceAssembler<Movie, Resource<Movie>> {
private String actorsBaseUrl;
private String serverContextPath;
public MovieResourceAssembler(String actorsBaseUrl, String serverContextPath) {
super();
this.actorsBaseUrl = actorsBaseUrl;
this.serverContextPath = serverContextPath;
}
@Override
public Resource<Movie> toResource(Movie movie) {
Assert.notNull(movie);
Link selfLink = linkTo(MoviePathFragment.MOVIES).path(movie.getId()).withRel(MovieRelation.SELF);
Link moviesLink = linkTo(MoviePathFragment.MOVIES).withRel(MovieRelation.MOVIES);
Link editLink = linkTo(MoviePathFragment.MOVIES).path(movie.getId()).path(MoviePathFragment.EDIT).withRel(MovieRelation.EDIT);
Link commentsLink = linkTo(MoviePathFragment.MOVIES).path(movie.getId()).path(MoviePathFragment.COMMENTS).withRel(MovieRelation.COMMENTS);
Link tagsLink = linkTo(MoviePathFragment.MOVIES).path(movie.getId()).path(MoviePathFragment.TAGS).withRel(MovieRelation.TAGS);
Link actorsLink = linkTo(actorsBaseUrl).path(MoviePathFragment.ACTORS).requestParam(MovieRequestParameter.SEARCH_STRING, "movie:'"+movie.getId()+"'").withRel(MovieRelation.ACTORS);
Link addActorLink = linkTo(actorsBaseUrl).path(MoviePathFragment.ACTORS).path(MoviePathFragment.NEW).requestParam(MovieRequestParameter.RETURN_URL, serverContextPath+selfLink.getHref()).requestParam(MovieRequestParameter.MOVIE_ID, movie.getId().toString()).withRel(MovieRelation.ADD_ACTOR);
return new Resource<Movie>(movie, selfLink, moviesLink, editLink, commentsLink, tagsLink, actorsLink, addActorLink);
}
}