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

edu.stanford.protege.webprotege.frame.FrameComponentRendererImpl Maven / Gradle / Ivy

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

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import edu.stanford.protege.webprotege.entity.*;
import edu.stanford.protege.webprotege.index.EntitiesInProjectSignatureByIriIndex;
import edu.stanford.protege.webprotege.renderer.RenderingManager;
import org.semanticweb.owlapi.model.*;

import javax.annotation.Nonnull;
import javax.inject.Inject;

import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.ImmutableSet.toImmutableSet;

/**
 * Matthew Horridge
 * Stanford Center for Biomedical Informatics Research
 * 2020-04-01
 */
public class FrameComponentRendererImpl implements FrameComponentRenderer {

    @Nonnull
    private final RenderingManager rm;

    @Nonnull
    private final EntitiesInProjectSignatureByIriIndex entitiesInProjectSignatureByIriIndex;

    private final OWLEntityVisitorEx entityRenderer = new OWLEntityVisitorEx<>() {
        @Nonnull
        @Override
        public OWLEntityData visit(@Nonnull OWLClass cls) {
            return getRendering(cls);
        }

        @Nonnull
        @Override
        public OWLEntityData visit(@Nonnull OWLObjectProperty property) {
            return getRendering(property);
        }

        @Nonnull
        @Override
        public OWLEntityData visit(@Nonnull OWLDataProperty property) {
            return getRendering(property);
        }

        @Nonnull
        @Override
        public OWLEntityData visit(@Nonnull OWLNamedIndividual individual) {
            return getRendering(individual);
        }

        @Nonnull
        @Override
        public OWLEntityData visit(@Nonnull OWLDatatype datatype) {
            return getRendering(datatype);
        }

        @Nonnull
        @Override
        public OWLEntityData visit(@Nonnull OWLAnnotationProperty property) {
            return getRendering(property);
        }
    };

    @Nonnull
    private final EntitiesInProjectSignatureByIriIndex entitiesByIriIndex;

    private final OWLAnnotationValueVisitorEx annotationRenderer = new OWLAnnotationValueVisitorEx<>() {
        @Nonnull
        @Override
        public OWLPrimitiveData visit(@Nonnull IRI iri) {
            return entitiesInProjectSignatureByIriIndex.getEntitiesInSignature(iri)
                                                .sorted()
                                                .findFirst()
                                                .map(entity -> (OWLPrimitiveData) getEntityRendering(entity))
                                                .orElse(IRIData.get(iri, ImmutableMap.of()));
        }

        @Nonnull
        @Override
        public OWLPrimitiveData visit(@Nonnull OWLAnonymousIndividual individual) {
            throw new RuntimeException("Not supported");
        }

        @Nonnull
        @Override
        public OWLPrimitiveData visit(@Nonnull OWLLiteral literal) {
            return OWLLiteralData.get(literal);
        }
    };

    @Inject
    public FrameComponentRendererImpl(@Nonnull RenderingManager rm,
                                      @Nonnull EntitiesInProjectSignatureByIriIndex entitiesInProjectSignatureByIriIndex,
                                      @Nonnull EntitiesInProjectSignatureByIriIndex entitiesByIriIndex) {
        this.rm = checkNotNull(rm);
        this.entitiesInProjectSignatureByIriIndex = entitiesInProjectSignatureByIriIndex;
        this.entitiesByIriIndex = checkNotNull(entitiesByIriIndex);
    }

    @Nonnull
    @Override
    public OWLClassData getRendering(@Nonnull OWLClass cls) {
        return rm.getClassData(cls);
    }

    @Nonnull
    @Override
    public OWLObjectPropertyData getRendering(@Nonnull OWLObjectProperty property) {
        return rm.getObjectPropertyData(property);
    }

    @Nonnull
    @Override
    public OWLDataPropertyData getRendering(@Nonnull OWLDataProperty property) {
        return rm.getDataPropertyData(property);
    }

    @Nonnull
    @Override
    public OWLAnnotationPropertyData getRendering(@Nonnull OWLAnnotationProperty property) {
        return rm.getAnnotationPropertyData(property);
    }

    @Nonnull
    @Override
    public OWLNamedIndividualData getRendering(@Nonnull OWLNamedIndividual individual) {
        return rm.getIndividualData(individual);
    }

    @Nonnull
    @Override
    public OWLDatatypeData getRendering(@Nonnull OWLDatatype datatype) {
        return rm.getDatatypeData(datatype);
    }

    @Nonnull
    @Override
    public OWLLiteralData getRendering(@Nonnull OWLLiteral literal) {
        return OWLLiteralData.get(literal);
    }

    @Nonnull
    @Override
    public OWLPrimitiveData getRendering(@Nonnull OWLAnnotationValue annotationValue) {
        return annotationValue.accept(annotationRenderer);
    }

    @Nonnull
    public OWLEntityData getEntityRendering(@Nonnull OWLEntity entity) {
        return entity.accept(entityRenderer);
    }

    @Nonnull
    @Override
    public ImmutableSet getRendering(@Nonnull IRI iri) {
        return entitiesByIriIndex.getEntitiesInSignature(iri)
                                                .map(this::getEntityRendering)
                                                .collect(toImmutableSet());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy