Search in sources :

Example 1 with AnnotationProperty

use of de.catma.repository.git.graph.NodeType.AnnotationProperty in project catma by forTEXT.

the class GraphWriter method addTagReferences.

void addTagReferences(String revisionHash, Vertex collectionV, List<TagReference> tagReferences) {
    final ArrayListMultimap<TagInstance, Range> tagInstancesAndRanges = ArrayListMultimap.create();
    tagReferences.forEach(tagReference -> {
        tagInstancesAndRanges.put(tagReference.getTagInstance(), tagReference.getRange());
    });
    Map<String, Vertex> tagNodesById = new HashMap<>();
    Set<String> availablePropertyDefIds = new HashSet<>();
    for (TagInstance ti : tagInstancesAndRanges.keySet()) {
        List<Range> ranges = tagInstancesAndRanges.get(ti);
        List<Integer> flatRanges = ranges.stream().sorted().flatMap(range -> Stream.of(range.getStartPoint(), range.getEndPoint())).collect(Collectors.toList());
        if (ti.getAuthor() == null) {
            ti.setAuthor(user.getIdentifier());
        }
        String tagsetId = ti.getTagsetId();
        String tagId = ti.getTagDefinitionId();
        Vertex tagInstanceV = graph.addVertex(nt(TagInstance));
        tagInstanceV.property("tagInstanceId", ti.getUuid());
        tagInstanceV.property("author", ti.getAuthor());
        tagInstanceV.property("timestamp", ti.getTimestamp());
        tagInstanceV.property("ranges", flatRanges);
        collectionV.addEdge(rt(hasInstance), tagInstanceV);
        Vertex tagV = tagNodesById.get(tagId);
        GraphTraversalSource g = graph.traversal();
        if (tagV == null) {
            GraphTraversal<Vertex, Vertex> traversal = g.V().has(nt(ProjectRevision), "revisionHash", revisionHash).outE(rt(hasTagset)).inV().has(nt(Tagset), "tagsetId", tagsetId).outE(rt(hasTag)).inV().has(nt(Tag), "tagId", tagId);
            if (traversal.hasNext()) {
                tagV = traversal.next();
                tagNodesById.put(tagId, tagV);
            }
        }
        if (tagV != null) {
            // usually the Tag should always be present,
            // because we delete stale Annotations when loading the Collection from git
            // if we hit an orphan Annotation at this stage it gets ignored
            // until the next sync might bring the corresponding Tag
            tagV.addEdge(rt(hasInstance), tagInstanceV);
            for (Property property : ti.getUserDefinedProperties()) {
                if (availablePropertyDefIds.contains(property.getPropertyDefinitionId()) || g.V(tagV).outE(rt(hasProperty)).inV().has(nt(Property), "uuid", property.getPropertyDefinitionId()).hasNext()) {
                    Vertex annoPropertyV = graph.addVertex(nt(AnnotationProperty));
                    annoPropertyV.property("uuid", property.getPropertyDefinitionId());
                    annoPropertyV.property("values", property.getPropertyValueList());
                    tagInstanceV.addEdge(rt(hasProperty), annoPropertyV);
                    availablePropertyDefIds.add(property.getPropertyDefinitionId());
                }
            }
        }
    }
}
Also used : Term(de.catma.repository.git.graph.NodeType.Term) ArrayListMultimap(com.google.common.collect.ArrayListMultimap) Graph(org.apache.tinkerpop.gremlin.structure.Graph) RelationType.rt(de.catma.repository.git.graph.RelationType.rt) MarkupCollection(de.catma.repository.git.graph.NodeType.MarkupCollection) Tagset(de.catma.repository.git.graph.NodeType.Tagset) FileInfoProvider(de.catma.repository.git.graph.FileInfoProvider) Gson(com.google.gson.Gson) Map(java.util.Map) TagInstance(de.catma.repository.git.graph.NodeType.TagInstance) RelationType.hasProperty(de.catma.repository.git.graph.RelationType.hasProperty) Path(java.nio.file.Path) RelationType.hasInstance(de.catma.repository.git.graph.RelationType.hasInstance) Tag(de.catma.repository.git.graph.NodeType.Tag) Property(de.catma.repository.git.graph.NodeType.Property) Set(java.util.Set) TagInstance(de.catma.tag.TagInstance) Vertex(org.apache.tinkerpop.gremlin.structure.Vertex) Logger(java.util.logging.Logger) Collectors(java.util.stream.Collectors) SourceDocumentInfo(de.catma.document.source.SourceDocumentInfo) ProjectReference(de.catma.project.ProjectReference) TagReference(de.catma.document.annotation.TagReference) ProjectRevision(de.catma.repository.git.graph.NodeType.ProjectRevision) List(java.util.List) Stream(java.util.stream.Stream) TagDefinition(de.catma.tag.TagDefinition) RelationType.hasPosition(de.catma.repository.git.graph.RelationType.hasPosition) RelationType.isPartOf(de.catma.repository.git.graph.RelationType.isPartOf) GraphTraversalSource(org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource) Range(de.catma.document.Range) PropertyDefinition(de.catma.tag.PropertyDefinition) HashMap(java.util.HashMap) User(de.catma.user.User) Level(java.util.logging.Level) HashSet(java.util.HashSet) SourceDocument(de.catma.repository.git.graph.NodeType.SourceDocument) RelationType.hasParent(de.catma.repository.git.graph.RelationType.hasParent) NodeType.nt(de.catma.repository.git.graph.NodeType.nt) TagsetDefinition(de.catma.tag.TagsetDefinition) AnnotationProperty(de.catma.repository.git.graph.NodeType.AnnotationProperty) RelationType.isAdjacentTo(de.catma.repository.git.graph.RelationType.isAdjacentTo) RelationType.hasTagset(de.catma.repository.git.graph.RelationType.hasTagset) Property(de.catma.tag.Property) RelationType.hasDocument(de.catma.repository.git.graph.RelationType.hasDocument) AnnotationCollectionReference(de.catma.document.annotation.AnnotationCollectionReference) RelationType.hasTag(de.catma.repository.git.graph.RelationType.hasTag) FileUtils(org.apache.commons.io.FileUtils) SourceDocument(de.catma.document.source.SourceDocument) AnnotationCollection(de.catma.document.annotation.AnnotationCollection) GraphTraversal(org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal) Position(de.catma.repository.git.graph.NodeType.Position) RelationType.hasCollection(de.catma.repository.git.graph.RelationType.hasCollection) Vertex(org.apache.tinkerpop.gremlin.structure.Vertex) HashMap(java.util.HashMap) Range(de.catma.document.Range) GraphTraversalSource(org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource) TagInstance(de.catma.repository.git.graph.NodeType.TagInstance) TagInstance(de.catma.tag.TagInstance) RelationType.hasProperty(de.catma.repository.git.graph.RelationType.hasProperty) Property(de.catma.repository.git.graph.NodeType.Property) AnnotationProperty(de.catma.repository.git.graph.NodeType.AnnotationProperty) Property(de.catma.tag.Property) HashSet(java.util.HashSet)

Aggregations

ArrayListMultimap (com.google.common.collect.ArrayListMultimap)1 Gson (com.google.gson.Gson)1 Range (de.catma.document.Range)1 AnnotationCollection (de.catma.document.annotation.AnnotationCollection)1 AnnotationCollectionReference (de.catma.document.annotation.AnnotationCollectionReference)1 TagReference (de.catma.document.annotation.TagReference)1 SourceDocument (de.catma.document.source.SourceDocument)1 SourceDocumentInfo (de.catma.document.source.SourceDocumentInfo)1 ProjectReference (de.catma.project.ProjectReference)1 FileInfoProvider (de.catma.repository.git.graph.FileInfoProvider)1 AnnotationProperty (de.catma.repository.git.graph.NodeType.AnnotationProperty)1 MarkupCollection (de.catma.repository.git.graph.NodeType.MarkupCollection)1 Position (de.catma.repository.git.graph.NodeType.Position)1 ProjectRevision (de.catma.repository.git.graph.NodeType.ProjectRevision)1 Property (de.catma.repository.git.graph.NodeType.Property)1 SourceDocument (de.catma.repository.git.graph.NodeType.SourceDocument)1 Tag (de.catma.repository.git.graph.NodeType.Tag)1 TagInstance (de.catma.repository.git.graph.NodeType.TagInstance)1 Tagset (de.catma.repository.git.graph.NodeType.Tagset)1 Term (de.catma.repository.git.graph.NodeType.Term)1