public IdRef<SinkMarker> createSinkMarkerId() { IdRef<?> sourceId = payload.getSourceId(); IdRef<?> sinkId = payload.getSinkId(); IdRef<SinkMarker> sinkMarkerId; if (sourceId.getId() != null) { sinkMarkerId = IdRef.create(yawp(), SinkMarker.class, sourceId.getId()); sinkMarkerId.setParentId(sinkId.createChildId(sourceId.getClazz(), sourceId.getId())); } else { sinkMarkerId = IdRef.create(yawp(), SinkMarker.class, sourceId.getName()); sinkMarkerId.setParentId(sinkId.createChildId(sourceId.getClazz(), sourceId.getName())); } return sinkMarkerId; }
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; }
public static <T> List<IdRef<T>> parse(Class<T> clazz, Repository r, List<String> uris) { ArrayList<IdRef<T>> ids = new ArrayList<>(); for (String uri : uris) { ids.add(parse(clazz, r, uri)); } return ids; }
public <TT> IdRef<TT> createChildId(Class<TT> clazz, Long id) { IdRef<TT> idRef = new IdRef<>(r, clazz, id); idRef.setParentId(this); return idRef; }
public static String getSinkGroupUri(IdRef<?> sinkId) { IdRef<?> sinkGroupId = sinkId; while (sinkGroupId.getParentId() != null) { sinkGroupId = sinkGroupId.getParentId(); } return sinkGroupId.getUri(); }
@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"); }
private void destroySinkMarkers(List<? extends IdRef<?>> markerIds) { for (IdRef<?> id : markerIds) { if (!id.getParentId().getClazz().equals(sourceClazz)) { continue; } r.destroy(id); } }
public static <TT> List<IdRef<TT>> create(Repository r, Class<TT> clazz, Long... ids) { List<IdRef<TT>> idRefs = new ArrayList<>(); for (int i = 0; i < ids.length; i++) { idRefs.add(create(r, clazz, ids[i])); } return idRefs; }
@SuppressWarnings("unchecked") public static <TT> IdRef<TT> parse(Repository r, HttpVerb verb, String path) { if (StringUtils.isBlank(path)) { return null; } String[] parts = path.substring(1).split("/"); if (parts.length < 2) { return null; } IdRef<TT> lastIdRef = null; for (int i = 0; i < parts.length; i += 2) { if (isActionOrCollection(r, verb, parts, i)) { break; } String endpointPath = "/" + parts[i]; IdRef<TT> currentIdRef; if (!isString(parts[i + 1])) { Long asLong = Long.valueOf(parts[i + 1]); currentIdRef = (IdRef<TT>) create(r, getIdRefClazz(r, endpointPath), asLong); } else { String asString = parts[i + 1]; currentIdRef = (IdRef<TT>) create(r, getIdRefClazz(r, endpointPath), asString); } currentIdRef.setParentId(lastIdRef); lastIdRef = currentIdRef; validateParentId(currentIdRef, path); } return lastIdRef; }
if (parentIdInObject != null && id != null && !parentIdInObject.equals(id)) { return false; if (parentIdInObject != null && !parentIdInObject.equals(idInObject.getParentId())) { return false; if (!idInObject.getClazz().equals(endpointClazz)) { return false; if (id.equals(idInObject)) { continue; if (!id.isAncestorId(idInObject)) { 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); } }
/** * Force re-fetch from datastore (ignore request cache!) * * @return the entity fetched */ public T refetch() { return fetch(clazz); }
public void setSinkUri(IdRef<?> sinkId) { this.sinkUri = sinkId.getUri(); this.sinkId = null; }
private boolean beginTransactionForPipesOnDestroy(IdRef<?> id) { Class<?> endpointClazz = id.getClazz(); if (!RepositoryPipes.isPipeSource(this, endpointClazz)) { return false; } return beginTransactionForPipes(); }
@Test public void testAncestor() { IdRef<Object> id = IdRef.parse(yawp, GET, "/parents/1/children/2/grandchildren/3"); assertEquals(Child.class, id.getAncestorId(0).getClazz()); assertEquals(Parent.class, id.getAncestorId(1).getClazz()); }
private static Key createKey(IdRef<?> id, Key parent, String kind) { if (id.isShuffled()) { return createShuffledKey(id, parent, kind); } if (id.getId() == null) { return KeyFactory.createKey(parent, kind, id.getName()); } return KeyFactory.createKey(parent, kind, id.getId()); }
public static IdRef<?> toIdRef(Repository r, Key key, ObjectModel model) { Class<?> objectClass = model.getClazz(); IdRef<?> idRef; if (model.isIdShuffled()) { idRef = getIdRefFromShuffledKey(r, key, objectClass); } else if (key.getName() != null) { idRef = IdRef.create(r, objectClass, key.getName()); } else { idRef = IdRef.create(r, objectClass, key.getId()); } if (key.getParent() != null) { idRef.setParentId(toIdRef(r, key.getParent(), createParentModel(r, key))); } return idRef; }
private IdRef<SourceMarker> createSourceMarkerId(ObjectHolder objectHolder) { IdRef<?> objectId = objectHolder.getId(); if (objectId.getId() != null) { return objectId.createChildId(SourceMarker.class, objectId.getId()); } return objectId.createChildId(SourceMarker.class, objectId.getName()); }
@Test public void testGetString() { assertEquals("/parents/1", IdRef.parse(yawp, GET, "/parents/1").toString()); assertEquals("/parents/1/children/2", IdRef.parse(yawp, GET, "/parents/1/children/2").toString()); assertEquals("/parents/1/children/2/grandchildren/3", IdRef.parse(yawp, GET, "/parents/1/children/2/grandchildren/3").toString()); }