All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.stanford.protege.webprotege.events.EntityHierarchyChangedEventProxy Maven / Gradle / Ivy

The newest version!
package edu.stanford.protege.webprotege.events;



import com.google.common.collect.ImmutableList;
import edu.stanford.protege.webprotege.common.EventId;
import edu.stanford.protege.webprotege.entity.EntityNode;
import edu.stanford.protege.webprotege.entity.EntityNodeRenderer;
import edu.stanford.protege.webprotege.common.ProjectEvent;
import edu.stanford.protege.webprotege.hierarchy.*;
import edu.stanford.protege.webprotege.common.ProjectId;
import org.semanticweb.owlapi.model.OWLEntity;

import javax.annotation.Nonnull;

/**
 * Matthew Horridge
 * Stanford Center for Biomedical Informatics Research
 * 2020-11-05
 */
public class EntityHierarchyChangedEventProxy implements HighLevelProjectEventProxy {

    @Nonnull
    private final GraphModelChangedEvent graphModelChangedEvent;

    @Nonnull
    private final GraphNodeRenderer renderer;

    @Nonnull
    private final EntityNodeRenderer entityNodeRenderer;

    @Nonnull
    private final HierarchyProvider hierarchyProvider;

    @Nonnull
    private final ProjectId projectId;

    @Nonnull
    private final HierarchyId hierarchyId;


    public EntityHierarchyChangedEventProxy(@Nonnull GraphModelChangedEvent graphModelChangedEvent,
                                            @Nonnull GraphNodeRenderer renderer,
                                            @Nonnull EntityNodeRenderer entityNodeRenderer,
                                            @Nonnull HierarchyProvider classHierarchyProvider,
                                            @Nonnull ProjectId projectId,
                                            @Nonnull HierarchyId hierarchyId) {
        this.graphModelChangedEvent = (GraphModelChangedEvent) graphModelChangedEvent;
        this.renderer = renderer;
        this.entityNodeRenderer = entityNodeRenderer;
        this.hierarchyProvider = (HierarchyProvider) classHierarchyProvider;
        this.projectId = projectId;
        this.hierarchyId = hierarchyId;
    }

    @Nonnull
    @Override
    public ProjectEvent asProjectEvent() {
        var mappedChanges = ImmutableList.>builder();
        graphModelChangedEvent.getChanges()
             .forEach(chg -> chg.accept(new GraphModelChangeVisitor() {
                 @Override
                 public void visit(AddRootNode addRootNode) {
                     var entity = addRootNode.getNode().getUserObject();
                     var mappedChg = new AddRootNode<>(
                             renderer.toGraphNode(entity, hierarchyProvider));
                     mappedChanges.add(mappedChg);
                 }

                 @Override
                 public void visit(RemoveRootNode removeRootNode) {
                     var entity = removeRootNode.getNode().getUserObject();
                     var mappedChg = new RemoveRootNode<>(
                             renderer.toGraphNode(entity, hierarchyProvider));
                     mappedChanges.add(mappedChg);
                 }

                 @Override
                 public void visit(AddEdge addEdge) {
                     var pred = addEdge.getPredecessor().getUserObject();
                     var succ = addEdge.getSuccessor().getUserObject();
                     var mappedChg = new AddEdge<>(
                                new GraphEdge<>(
                                        renderer.toGraphNode(pred, hierarchyProvider),
                                        renderer.toGraphNode(succ, hierarchyProvider)
                                )
                             );
                     mappedChanges.add(mappedChg);
                 }

                 @Override
                 public void visit(RemoveEdge removeEdge) {
                     var pred = removeEdge.getPredecessor().getUserObject();
                     var succ = removeEdge.getSuccessor().getUserObject();
                     var mappedChg = new RemoveEdge<>(
                             new GraphEdge<>(
                                     renderer.toGraphNode(pred, hierarchyProvider),
                                     renderer.toGraphNode(succ, hierarchyProvider)
                             )
                     );
                     mappedChanges.add(mappedChg);
                 }

                 @Override
                 public void visit(UpdateUserObject updateUserObject) {
                     var entity = updateUserObject.getUserObject();
                     var mappedChg = new UpdateUserObject<>(entityNodeRenderer.render(entity));
                     mappedChanges.add(mappedChg);
                 }
             }));
        var mappedEvent = GraphModelChangedEvent.create(mappedChanges.build());
        return new EntityHierarchyChangedEvent(EventId.generate(), projectId, hierarchyId, mappedEvent);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy