type = (typeSingular == null) ? type : typeSingular;
id2 = StringUtils.isBlank(id2) ? params.getFirst(Config._ID) : id2;
type2 = StringUtils.isBlank(type2) ? params.getFirst(Config._TYPE) : type2;
ParaObject pobj = Utils.toObject(type);
pobj.setId(id);
pobj = dao.read(app.getAppIdentifier(), pobj.getId());
Pager pager = new Pager();
pager.setPage(NumberUtils.toLong(params.getFirst("page"), 0));
pager.setSortby(params.getFirst("sort"));
pager.setDesc(Boolean.parseBoolean(params.containsKey("desc") ? params.getFirst("desc") : "true"));
pager.setLimit(NumberUtils.toInt(params.getFirst("limit"), pager.getLimit()));
String childrenOnly = params.getFirst("childrenonly");
if (pobj != null) {
if (POST.equals(ctx.getMethod())) {
if (id2 != null) {
String linkid = pobj.link(id2);
if (linkid == null) {
return RestUtils.getStatusResponse(Response.Status.BAD_REQUEST,
"Failed to create link.");
} else {
return Response.ok(linkid).build();
}
} else {
return RestUtils.getStatusResponse(Response.Status.BAD_REQUEST,
"Parameters 'type' and 'id' are missing.");
}
} else if (GET.equals(ctx.getMethod())) {
Map<String, Object> result = new HashMap<String, Object>();
if (type2 != null) {
if (id2 != null) {
return Response.ok(pobj.isLinked(type2, id2)).build();
} else {
List<ParaObject> items = new ArrayList<ParaObject>();
if (childrenOnly == null) {
if (params.containsKey("count")) {
pager.setCount(pobj.countLinks(type2));
} else {
items = pobj.getLinkedObjects(type2, pager);
}
} else {
if (params.containsKey("count")) {
pager.setCount(pobj.countChildren(type2));
} else {
if (params.containsKey("field") && params.containsKey("term")) {
items = pobj.getChildren(type2, params.getFirst("field"),
params.getFirst("term"), pager);
} else {
items = pobj.getChildren(type2, pager);
}
}
}
result.put("items", items);
result.put("totalHits", pager.getCount());
return Response.ok(result).build();
}
} else {
return RestUtils.getStatusResponse(Response.Status.BAD_REQUEST,
"Parameter 'type' is missing.");
}
} else if (DELETE.equals(ctx.getMethod())) {
if (type2 == null && id2 == null) {
pobj.unlinkAll();
} else if (type2 != null) {
if (id2 != null) {
pobj.unlink(type2, id2);
} else if (childrenOnly != null) {
pobj.deleteChildren(type2);
}
}
return Response.ok().build();
}
}