package org.jooby.hbm;
import java.net.URISyntaxException;
import javax.persistence.EntityManager;
import org.jooby.hbm.data.Member;
import org.jooby.test.ServerFeature;
import org.junit.Test;
import com.typesafe.config.ConfigFactory;
import com.typesafe.config.ConfigValueFactory;
public class HbmParamConverterFeature extends ServerFeature {
{
use(ConfigFactory.empty()
.withValue("db", ConfigValueFactory.fromAnyRef("mem")));
use(new Hbm().classes(Member.class));
use("*", Hbm.openSessionInView());
parser((type, ctx) -> {
if (type.getRawType() == Member.class) {
return ctx.param(values -> {
EntityManager em = ctx.require(EntityManager.class);
Member member = em.find(Member.class, Integer.parseInt(values.get(0)));
return member;
});
}
return ctx.next();
});
get("/members/:member", req -> req.param("member").to(Member.class));
get("/members", req -> req.param("member").to(Member.class));
post("/members", req -> {
Member member = req.params().to(Member.class);
EntityManager em = req.require(EntityManager.class);
em.persist(member);
return member;
});
}
@Test
public void hbm() throws URISyntaxException, Exception {
// create member
request()
.post("/members")
.form()
.add("id", 1)
.add("name", "pedro")
.expect("pedro(1)");
request()
.get("/members/1")
.expect("pedro(1)");
request()
.get("/members?member=1")
.expect("pedro(1)");
}
}