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

edu.stanford.protege.webprotege.mansyntax.ManchesterSyntaxChangeGenerator Maven / Gradle / Ivy

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



import edu.stanford.protege.webprotege.change.*;
import edu.stanford.protege.webprotege.common.ChangeRequestId;
import edu.stanford.protege.webprotege.entity.OWLEntityData;
import edu.stanford.protege.webprotege.frame.HasFreshEntities;
import edu.stanford.protege.webprotege.frame.ManchesterSyntaxFrameParseError;
import edu.stanford.protege.webprotege.owlapi.RenameMap;
import org.semanticweb.owlapi.manchestersyntax.renderer.ParserException;
import org.semanticweb.owlapi.util.OntologyAxiomPair;

import javax.annotation.Nonnull;
import javax.inject.Inject;
import java.util.List;
import java.util.Optional;
import java.util.Set;

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

/**
 * @author Matthew Horridge, Stanford University, Bio-Medical Informatics Research Group, Date: 25/03/2014
 */

public class ManchesterSyntaxChangeGenerator implements ChangeListGenerator> {

    private final ManchesterSyntaxFrameParser parser;

    private final OntologyAxiomPairChangeGenerator changeGenerator;

    private final OWLEntityData subject;

    private final String from;

    private final String to;

    @Nonnull
    private final String commitMessage;

    private final HasFreshEntities hasFreshEntities;

    private final ReverseEngineeredChangeDescriptionGeneratorFactory factory;

    private final ChangeRequestId changeRequestId;


    /**
     * Generates a list of ontology changes to convert one piece of Manchester Syntax to another piece.
     *
     * @param subject
     * @param from The from piece of syntax.  Not {@code null}.
     * @param to The to piece of syntax.  Not {@code null}.
     * @param commitMessage The commit message.  Can be empty.
     * @param changeRequestId
     * @throws ParserException If there was a problem parsing either {@code from} or {@code to}.
     */
    @Inject
    public ManchesterSyntaxChangeGenerator(@Nonnull ManchesterSyntaxFrameParser parser,
                                           OntologyAxiomPairChangeGenerator changeGenerator,
                                           @Nonnull ReverseEngineeredChangeDescriptionGeneratorFactory factory,
                                           @Nonnull OWLEntityData subject,
                                           @Nonnull String from,
                                           @Nonnull String to,
                                           @Nonnull String commitMessage,
                                           @Nonnull HasFreshEntities hasFreshEntities,
                                           @Nonnull ChangeRequestId changeRequestId) {
        this.parser = parser;
        this.changeGenerator = changeGenerator;
        this.subject = subject;
        this.from = checkNotNull(from);
        this.to = checkNotNull(to);
        this.commitMessage = commitMessage;
        this.hasFreshEntities = checkNotNull(hasFreshEntities);
        this.factory = factory;
        this.changeRequestId = changeRequestId;
    }

    @Override
    public ChangeRequestId getChangeRequestId() {
        return changeRequestId;
    }

    @Override
    public OntologyChangeList> generateChanges(ChangeGenerationContext context) {
        OntologyChangeList.Builder> builder = OntologyChangeList.builder();
        Optional error;
        try {
            List changes = generateChanges();
            error = Optional.empty();
            builder.addAll(changes);
        } catch (ParserException e) {
            ManchesterSyntaxFrameParseError parseError = ManchesterSyntaxFrameParser.getParseError(e);
            error = Optional.of(parseError);
        }
        return builder.build(error);
    }

    @Override
    public Optional getRenamedResult(Optional result, RenameMap renameMap) {
        return result;
    }


    private List generateChanges() throws ParserException {
        Set toPairs = getOntologyAxiomPairs(to, hasFreshEntities);
        Set fromPairs = getOntologyAxiomPairs(from, hasFreshEntities);
        return changeGenerator.generateChanges(fromPairs, toPairs);
    }

    private Set getOntologyAxiomPairs(String rendering, HasFreshEntities hasFreshEntities) throws ParserException {
        return parser.parse(rendering, hasFreshEntities);
    }

    @Nonnull
    @Override
    public String getMessage(ChangeApplicationResult> result) {
        String changeDescription = "Edited description of " + subject.getBrowserText() + ".";
        if(!commitMessage.isEmpty()) {
            changeDescription += "\n" + commitMessage;
        }
        return changeDescription;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy