private void mergeEdge(Graph graph1, Edge edge2) { Edge edge1 = graph1.getEdge(edge2.getId()); if (edge1 == null) { Vertex outVertex1 = graph1.getVertex(edge2.getVertex(Direction.OUT).getId()); Vertex outVertex2 = graph1.getVertex(edge2.getVertex(Direction.IN).getId()); edge1 = graph1.addEdge(edge2.getId(), outVertex1, outVertex2, edge2.getLabel()); for (String key2 : edge2.getPropertyKeys()) { edge1.setProperty(key2,edge2.getProperty(key2)); } } else { Set<String> keys1 = edge1.getPropertyKeys(); Set<String> keys2 = edge2.getPropertyKeys(); for (String key2 : keys2) { if (keys1.contains(key2)) { MergeConflictResolver conflictResolver = getEdgeConflictResolver(key2); Object merge = conflictResolver.resolveConflict(edge1.getProperty(key2), edge2.getProperty(key2)); edge1.setProperty(key2, merge); } else { edge1.setProperty(key2, edge2.getProperty(key2)); } } } }
private void migrateContainer(Vertex nodeContainer) { Iterator<Edge> it = nodeContainer.getEdges(OUT, "HAS_LANGUAGE").iterator(); if (!it.hasNext()) { // We skip containers which have no language set. Those need to be cleaned using the consistency check. return; } Edge languageEdge = it.next(); String languageTag = languageEdge .getVertex(IN).getProperty("languageTag"); nodeContainer.setProperty("languageTag", languageTag); languageEdge.remove(); }
private void migrateProperty(Edge edge, String label, String oldPropertyKey, String newPropertyKey) { String value = edge.getProperty(oldPropertyKey); edge.removeProperty(oldPropertyKey); if (value != null) { edge.setProperty(newPropertyKey, value); } }
for (Edge edge : vertex.getEdges(Direction.OUT)) { for (String key : edge.getPropertyKeys()) { if (!edgeKeyTypes.containsKey(key)) { edgeKeyTypes.put(key, GraphMLWriter.getStringType(edge.getProperty(key))); writer.writeAttribute(GraphMLTokens.ID, edge.getId().toString()); writer.writeAttribute(GraphMLTokens.SOURCE, edge.getVertex(Direction.OUT).getId().toString()); writer.writeAttribute(GraphMLTokens.TARGET, edge.getVertex(Direction.IN).getId().toString()); writer.writeAttribute(GraphMLTokens.LABEL, edge.getLabel()); } else { writer.writeStartElement(GraphMLTokens.DATA); writer.writeAttribute(GraphMLTokens.KEY, this.edgeLabelKey); writer.writeCharacters(edge.getLabel()); writer.writeEndElement(); keys.addAll(edge.getPropertyKeys()); Collections.sort(keys); writer.writeStartElement(GraphMLTokens.DATA); writer.writeAttribute(GraphMLTokens.KEY, key); Object value = edge.getProperty(key); if (null != value) { writer.writeCharacters(value.toString()); writer.writeAttribute(GraphMLTokens.ID, edge.getId().toString()); writer.writeAttribute(GraphMLTokens.SOURCE, edge.getVertex(Direction.OUT).getId().toString()); writer.writeAttribute(GraphMLTokens.TARGET, edge.getVertex(Direction.IN).getId().toString()); writer.writeAttribute(GraphMLTokens.LABEL, edge.getLabel());
containerEdge.setProperty("branchUuid", branchUuid); containerEdge.setProperty("edgeType", "I"); Vertex fieldContainer = containerEdge.getVertex(Direction.IN); draftEdge.setProperty("ferma_type", "GraphFieldContainerEdgeImpl"); draftEdge.setProperty("branchUuid", branchUuid); draftEdge.setProperty("edgeType", "D"); draftEdge.setProperty("languageTag", containerEdge.getProperty("languageTag")); fieldContainer.addEdge("HAS_EDITOR", editorEdge.getVertex(Direction.IN)); Edge newEdge = publishedContainer.addEdge(edge.getLabel(), edge.getVertex(Direction.IN)); for (String key : edge.getPropertyKeys()) { newEdge.setProperty(key, edge.getProperty(key)); if ("HAS_FIELD_CONTAINER".equals(edge.getLabel())) { continue; Edge newEdge = edge.getVertex(Direction.OUT).addEdge(edge.getLabel(), publishedContainer); for (String key : edge.getPropertyKeys()) { newEdge.setProperty(key, edge.getProperty(key)); publishedEdge.setProperty("ferma_type", "GraphFieldContainerEdgeImpl"); publishedEdge.setProperty("languageTag", containerEdge.getProperty("languageTag")); publishedEdge.setProperty("branchUuid", branchUuid); publishedEdge.setProperty("edgeType", "P"); editorEdge.remove();
for (Edge inE : fromV.getEdges(Direction.IN)) { Vertex out = inE.getVertex(OUT); Edge e = out.addEdge(inE.getLabel(), toV); for (String key : inE.getPropertyKeys()) { e.setProperty(key, inE.getProperty(key)); for (Edge outE : fromV.getEdges(Direction.OUT)) { Vertex in = outE.getVertex(IN); Edge e = toV.addEdge(outE.getLabel(), in); for (String key : outE.getPropertyKeys()) { e.setProperty(key, outE.getProperty(key));
/** * Copy the vertex/edges of one graph over to another graph. * The id of the elements in the from graph are attempted to be used in the to graph. * This method only works for graphs where the user can control the element ids. * * @param from the graph to copy from * @param to the graph to copy to */ public static void copyGraph(final Graph from, final Graph to) { for (final Vertex fromVertex : from.getVertices()) { final Vertex toVertex = to.addVertex(fromVertex.getId()); ElementHelper.copyProperties(fromVertex, toVertex); } for (final Edge fromEdge : from.getEdges()) { final Vertex outVertex = to.getVertex(fromEdge.getVertex(Direction.OUT).getId()); final Vertex inVertex = to.getVertex(fromEdge.getVertex(Direction.IN).getId()); final Edge toEdge = to.addEdge(fromEdge.getId(), outVertex, inVertex, fromEdge.getLabel()); ElementHelper.copyProperties(fromEdge, toEdge); } } }
@Override public void copyTo(ModelGraph target) { final List<String> classPropertyKeys = Arrays.asList(ClassVertex.PROPERTY_NAME, ClassVertex.PROPERTY_URI); // Copy all vertices for (Vertex fromVertex : getVertices()) { Vertex toVertex; final Set<String> propertyKeys = fromVertex.getPropertyKeys(); // If this vertex is a meta-class vertex: rebuild the meta-classes index if (propertyKeys.containsAll(classPropertyKeys)) { final ClassBean bean = ClassVertex.from(((IdVertex<?>) fromVertex).getBaseElement(), this).toBean(); toVertex = ClassVertex.create(target, bean); propertyKeys.removeAll(classPropertyKeys); } else { toVertex = target.addVertex(fromVertex.getId()); } // Copy all remaining properties copyProperties(fromVertex, toVertex, propertyKeys); } // Copy all edges for (Edge fromEdge : getEdges()) { Vertex outVertex = target.getVertex(fromEdge.getVertex(Direction.OUT).getId()); Vertex inVertex = target.getVertex(fromEdge.getVertex(Direction.IN).getId()); Edge toEdge = target.addEdge(fromEdge.getId(), outVertex, inVertex, fromEdge.getLabel()); // Copy all properties copyProperties(fromEdge, toEdge, fromEdge.getPropertyKeys()); } }
@Override public Boolean compute(Edge edge) { String type = edge.getVertex(Direction.OUT).getProperty(Constants.ENTITY_TYPE_PROPERTY_KEY); VertexWrapper v = new TermVertexWrapper(edge.getVertex(Direction.IN)); return edge.getLabel().startsWith(type) && v.getPropertyKeys().contains("available_as_tag"); } }));
public Double transform(final Edge edge) { Object object = edge.getProperty(this.weightKey); if (object instanceof Number) { Double weight = ((Number) object).doubleValue(); if (this.invert) weight = 1.0d / weight; if (this.normalize) { return weight / JungHelper.totalWeight(edge.getVertex(Direction.OUT).getEdges(Direction.OUT), this.weightKey); } else { return weight; } } else { return 0.0d; } } }
private GraphmlEdge edgeToGraphmlEdge(Edge edge){ GraphmlEdge graphmlEdge = new GraphmlEdge(edge.getId().toString(),edge.getId().toString()); Map<String, String> graphmlEdgeData = new HashMap<>(); Vertex vertexIn = edge.getVertex(Direction.IN); graphmlEdge.setFromNode(vertexIn.getId().toString()); Vertex vertexOut = edge.getVertex(Direction.OUT); graphmlEdge.setToNode(vertexOut.getId().toString()); Set<String> keys = edge.getPropertyKeys(); for (String key : keys) { graphmlEdgeData.put(key,edge.getProperty(key)); } graphmlEdge.setGraphmlEdgeData(graphmlEdgeData); return graphmlEdge; }
for (Vertex vertex : graph.getVertices()) { BbopNode bbopNode = new BbopNode(); bbopNode.setId(getCurieOrIri(vertex)); getFirst(TinkerGraphUtil.getProperties(vertex, NodeProperties.LABEL, String.class), null); bbopNode.setLbl(label); for (String key : vertex.getPropertyKeys()) { if (IGNORED_PROPERTY_KEYS.contains(key)) { continue; for (Edge edge : graph.getEdges()) { BbopEdge bbopEdge = new BbopEdge(); Vertex subject = edge.getVertex(Direction.OUT); Vertex object = edge.getVertex(Direction.IN); bbopEdge.setSub(getCurieOrIri(subject)); bbopEdge.setObj(getCurieOrIri(object)); bbopEdge.setPred(edge.getLabel()); for (String key : edge.getPropertyKeys()) { if (IGNORED_PROPERTY_KEYS_FOR_EDGES.contains(key)) { continue;
Edge addEdge(Edge edge) { Edge newEdge = graph.getEdge(edge.getId()); if (null == newEdge) { Vertex outVertex = addNode(edge.getVertex(Direction.OUT)); Vertex inVertex = addNode(edge.getVertex(Direction.IN)); String label = edge.getLabel(); newEdge = graph.addEdge(edge.getId(), outVertex, inVertex, label); copyProperties(edge, edge); } return newEdge; }
checkPositionIndex(index, size, "Invalid remove index"); Iterable<Edge> edges = vertex.query() .labels(referenceName) .direction(Direction.OUT) int position = edge.getProperty(POSITION); if (position == index) { Vertex referencedVertex = edge.getVertex(Direction.IN); old = reifyVertex(referencedVertex); edge.remove(); if (reference.isContainment()) { for (Edge conEdge : referencedVertex.getEdges(Direction.OUT, CONTAINER)) { conEdge.remove(); edge.setProperty(POSITION, position - 1);
protected void deleteCascaded(Vertex v, Set<String> deletedIds) { for (Vertex child : v.getVertices(Direction.IN, EDGE_LABEL_HAS_PARENT)) { deleteCascaded(child, deletedIds); } // The edges connected to removed vertices are dropped automatically, // some of them might have models attached to them (only ORE for now). // `Vertex.getEdges()` requires we specify the edge_labels to get, // we want to check all of them for PROP_URI presence. for (Edge e : v.getEdges(Direction.BOTH, ItemIdType.ORE.name())) { //(Direction.BOTH, new String[]{}) String edgeURI = e.getProperty(eu.agrosense.shared.model.AgroEntity.PROP_URI); if (edgeURI != null) { deletedIds.add(edgeURI); } } v.remove(); deletedIds.add(v.<String>getProperty(eu.agrosense.shared.model.AgroEntity.PROP_URI)); }
/** * Updates the containment identified by its {@code name} between the {@code parentVertex} and the {@code * childVertex}. * * @param localName the name of the property identifying the reference (parent -> child) * @param parentVertex the parent vertex * @param childVertex the child vertex */ private static void updateContainment(final String localName, final Vertex parentVertex, final Vertex childVertex) { for (Edge edge : childVertex.getEdges(Direction.OUT, CONTAINER)) { edge.remove(); } Edge edge = childVertex.addEdge(CONTAINER, parentVertex); edge.setProperty(CONTAINING_FEATURE, localName); }