@SuppressWarnings("unchecked") public <TT> IdRef<TT> getAncestorId(int ancestor) { IdRef<?> ancestorId = this; for (int i = 0; i <= ancestor; i++) { ancestorId = ancestorId.getParentId(); } return (IdRef<TT>) ancestorId; }
public static String getSinkGroupUri(IdRef<?> sinkId) { IdRef<?> sinkGroupId = sinkId; while (sinkGroupId.getParentId() != null) { sinkGroupId = sinkGroupId.getParentId(); } return sinkGroupId.getUri(); }
public boolean isAncestorId(IdRef<?> childId) { IdRef<?> currentId = childId; while (currentId.getParentId() != null) { if (currentId.getParentId().getClazz().equals(this.getClazz())) { return this.equals(currentId.getParentId()); } currentId = currentId.getParentId(); } return false; }
private static void validateParentId(IdRef<?> id, String path) { Class<?> parentClazz = id.getParentClazz(); if (parentClazz == null) { return; } if (id.getParentId() == null) { throw new RuntimeException("Invalid parent structure for id: " + path); } if (!parentClazz.equals(id.getParentId().getClazz())) { throw new RuntimeException("Invalid parent structure for id: " + path); } }
private void destroySinkMarkers(List<? extends IdRef<?>> markerIds) { for (IdRef<?> id : markerIds) { if (!id.getParentId().getClazz().equals(sourceClazz)) { continue; } r.destroy(id); } }
private static boolean isAncestor(IdRef<?> id, IdRef<?> parentId) { if (parentId == null) { return true; } IdRef<?> currentParentId = id.getParentId(); while (currentParentId != null) { if (currentParentId.equals(parentId)) { return true; } currentParentId = currentParentId.getParentId(); } return false; }
public QueryBuilder<T> whereById(String operator, IdRef<?> id) { return from(id.getParentId()).where(model.getIdField().getName(), operator, id); }
private static Key convertWithinRightNamespace(Repository r, Class<?> clazz, IdRef<?> id) { r.namespace().set(clazz); try { Key parent = id.getParentId() == null ? null : toKey(r, id.getParentId()); String kind = KindResolver.getKindFromClass(id.getClazz()); return createKey(id, parent, kind); } finally { r.namespace().reset(); } }
private static Key convertWithinRightNamespace(Repository r, Class<?> clazz, IdRef<?> id) { r.namespace().set(clazz); try { Key parent = id.getParentId() == null ? null : toKey(r, id.getParentId()); String kind = KindResolver.getKindFromClass(id.getClazz()); return createKey(id, parent, kind); } finally { r.namespace().reset(); } }
private Object fetchOrCreateSink(IdRef<?> sinkId) { try { return sinkId.fetch(); } catch (NoResultException e) { try { Object sink = sinkId.getClazz().newInstance(); ObjectHolder objectHolder = new ObjectHolder(sink); objectHolder.setId(sinkId); if (sinkId.getParentClazz() != null) { objectHolder.setParentId(sinkId.getParentId()); } return sink; } catch (InstantiationException | IllegalAccessException e1) { throw new RuntimeException(e); } } }
private IdRef<?> forceParentIdInObjectIfNecessary(Object object, IdRef<?> idInObject) { ObjectHolder objectHolder = new ObjectHolder(object); if (objectHolder.getModel().getParentClazz() == null) { return null; } IdRef<?> parentId = objectHolder.getParentId(); if (parentId != null) { return parentId; } if (idInObject != null) { objectHolder.setParentId(idInObject.getParentId()); return idInObject.getParentId(); } if (id != null) { objectHolder.setParentId(id); return id; } return null; }
private SinkMarker getSinkMarkerFromCache(IdRef<SinkMarker> sinkMarkerId) { SinkMarker sinkMarker = sinkMarkerCache.get(sinkMarkerId).get(); if (sinkMarker == null) { sinkMarker = new SinkMarker(); sinkMarker.setId(sinkMarkerId); sinkMarker.setParentId(sinkMarkerId.getParentId()); sinkMarker.setVersion(0L); sinkMarker.setPresent(false); sinkMarkerCache.put(sinkMarkerId, new FutureObject<>(sinkMarker)); } return sinkMarker; }
@Test public void testParseGrandchildId() { IdRef<Grandchild> grandchildId = IdRef.parse(yawp, GET, "/parents/a/children/b/grandchildren/c"); IdRef<Child> childId = grandchildId.getParentId(); IdRef<Parent> parentId = childId.getParentId(); assertIdRef(parentId, Parent.class, "a"); assertIdRef(childId, Child.class, "b"); assertIdRef(grandchildId, Grandchild.class, "c"); }
@Test public void testParseGrandchildId() { IdRef<Grandchild> grandchildId = IdRef.parse(yawp, GET, "/parents/1/children/2/grandchildren/3"); IdRef<Child> childId = grandchildId.getParentId(); IdRef<Parent> parentId = childId.getParentId(); assertIdRef(parentId, Parent.class, 1l); assertIdRef(childId, Child.class, 2l); assertIdRef(grandchildId, Grandchild.class, 3l); }
if (parentIdInObject != null && !parentIdInObject.equals(idInObject.getParentId())) { return false;
@Test public void testParseChildId() { IdRef<Child> childId = IdRef.parse(yawp, GET, "/parents/a/children/b"); IdRef<Parent> parentId = childId.getParentId(); assertIdRef(parentId, Parent.class, "a"); assertIdRef(childId, Child.class, "b"); }
@Test public void testParseChildId() { IdRef<Child> childId = IdRef.parse(yawp, GET, "/parents/1/children/2"); IdRef<Parent> parentId = childId.getParentId(); assertIdRef(parentId, Parent.class, 1l); assertIdRef(childId, Child.class, 2l); }
private Object advanceAncestorSequenceIfNecessary() { if (isObjectAcenstor()) { advanceToTheRightAncestor(); } if (!isParentRef()) { return object; } IdRef<?> parentId = objectHolder.getParentId(); nextRef(); while (isParentRef()) { parentId = parentId.getParentId(); nextRef(); } return parentId.fetch(); }
@Test public void testGlobalQueryFromParent() { saveGrandchild("xpto1", child); saveGrandchild("xpto2", child); Parent parentX = saveParent(); saveGrandchild("xpto1", saveChild(parentX)); String json = get(uri("/parents/%s/grandchildren", parent), params("q", "{ where: ['name', '=', 'xpto1' ] }")); List<Grandchild> grandchildren = fromList(json, Grandchild.class); assertEquals(1, grandchildren.size()); assertEquals("xpto1", grandchildren.get(0).getName()); assertEquals(parent.getId(), grandchildren.get(0).getChildId().getParentId()); String jsonX = get(uri("/parents/%s/grandchildren", parentX), params("q", "{ where: ['name', '=', 'xpto1' ] }")); List<Grandchild> grandchildrenX = fromList(jsonX, Grandchild.class); assertEquals(1, grandchildrenX.size()); assertEquals("xpto1", grandchildrenX.get(0).getName()); assertEquals(parentX.getId(), grandchildrenX.get(0).getChildId().getParentId()); } }