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

edu.stanford.protege.webprotege.viz.GetEntityGraphActionHandler Maven / Gradle / Ivy

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

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Stopwatch;
import edu.stanford.protege.webprotege.access.AccessManager;
import edu.stanford.protege.webprotege.dispatch.AbstractProjectActionHandler;
import edu.stanford.protege.webprotege.ipc.ExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.annotation.Nonnull;
import javax.inject.Inject;
import java.util.concurrent.TimeUnit;

import static com.google.common.base.Preconditions.checkNotNull;

/**
 * Matthew Horridge
 * Stanford Center for Biomedical Informatics Research
 * 11 Oct 2018
 */
public class GetEntityGraphActionHandler extends AbstractProjectActionHandler {

    private static final Logger logger = LoggerFactory.getLogger(GetEntityGraphActionHandler.class);

    @Nonnull
    private final EntityGraphBuilderFactory graphBuilderFactory;

    @Nonnull
    private final EdgeMatcherFactory edgeMatcherFactory;

    @Nonnull
    private final EntityGraphSettingsRepository entityGraphSettingsRepository;

    @Nonnull
    private final ObjectMapper objectMapper;

    @Inject
    public GetEntityGraphActionHandler(@Nonnull AccessManager accessManager,
                                       @Nonnull EntityGraphBuilderFactory graphBuilderFactory,
                                       @Nonnull EdgeMatcherFactory edgeMatcherFactory,
                                       @Nonnull EntityGraphSettingsRepository entityGraphSettingsRepository,
                                       @Nonnull ObjectMapper objectMapper) {
        super(accessManager);
        this.graphBuilderFactory = checkNotNull(graphBuilderFactory);
        this.edgeMatcherFactory = checkNotNull(edgeMatcherFactory);
        this.entityGraphSettingsRepository = checkNotNull(entityGraphSettingsRepository);
        this.objectMapper = objectMapper;
    }

    @Nonnull
    @Override
    public Class getActionClass() {
        return GetEntityGraphAction.class;
    }

    @Nonnull
    @Override
    public GetEntityGraphResult execute(@Nonnull GetEntityGraphAction action, @Nonnull ExecutionContext executionContext) {
        Stopwatch stopwatch = Stopwatch.createStarted();
        var projectId = action.projectId();
        var userId = executionContext.userId();
        logger.info("Getting entity graph settings for " + userId);
        var projectUserSettings = entityGraphSettingsRepository.getSettingsForUserOrProjectDefault(projectId, userId);
        var entityGraphSettings = projectUserSettings.getSettings();
        var criteria = projectUserSettings.getSettings()
                                          .getCombinedActiveFilterCriteria();
        var edgeMatcher = edgeMatcherFactory.createMatcher(criteria.simplify());
        try {
            logger.info("Criteria: " + objectMapper.writeValueAsString(criteria));
            logger.info("Simplified Criteria: " + objectMapper.writeValueAsString(criteria.simplify()));
        } catch(JsonProcessingException e) {
            e.printStackTrace();
        }

        var graph = graphBuilderFactory.create(edgeMatcher)
                                       .createGraph(action.entity());
        stopwatch.stop();
        logger.debug("Created entity graph [{} nodes; edges {}] in {} ms",
                    graph.getNodes().size(),
                    graph.getEdges().size(),
                    stopwatch.elapsed(TimeUnit.MILLISECONDS));
        return new GetEntityGraphResult(graph, entityGraphSettings);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy