![JAR search and dependency download from the Maven repository](/logo.png)
edu.stanford.protege.webprotege.revision.RevisionDetailsExtractor Maven / Gradle / Ivy
The newest version!
package edu.stanford.protege.webprotege.revision;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import edu.stanford.protege.webprotege.axiom.AxiomSubjectProvider;
import edu.stanford.protege.webprotege.change.AddAxiomChange;
import edu.stanford.protege.webprotege.change.OntologyChange;
import edu.stanford.protege.webprotege.change.OntologyChangeVisitorEx;
import edu.stanford.protege.webprotege.change.RemoveAxiomChange;
import org.semanticweb.owlapi.model.HasIRI;
import org.semanticweb.owlapi.model.IRI;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import java.util.Objects;
/**
* Matthew Horridge
* Stanford Center for Biomedical Informatics Research
* 23 Apr 2018
*/
public class RevisionDetailsExtractor {
private final AxiomSubjectProvider axiomSubjectProvider;
@Inject
public RevisionDetailsExtractor(AxiomSubjectProvider axiomSubjectProvider) {
this.axiomSubjectProvider = axiomSubjectProvider;
}
public RevisionDetails extractRevisionDetails(Revision revision) {
ImmutableList.Builder builder = ImmutableList.builder();
ImmutableSet.Builder subjectsBuilder = ImmutableSet.builder();
revision.getChanges().stream()
.filter(OntologyChange::isAxiomChange)
.peek(chg -> {
axiomSubjectProvider.getSubject(chg.getAxiomOrThrow())
.ifPresent(subject -> {
if(subject instanceof IRI) {
subjectsBuilder.add((IRI) subject);
}
else if(subject instanceof HasIRI) {
subjectsBuilder.add(((HasIRI) subject).getIRI());
}
});
})
.map(RevisionDetailsExtractor::toChangeDetails)
.filter(Objects::nonNull)
.forEach(builder::add);
return new RevisionDetails(revision.getRevisionNumber().getValueAsInt(),
revision.getTimestamp(),
revision.getUserId(),
revision.getHighLevelDescription(),
subjectsBuilder.build(),
builder.build());
}
private static RevisionDetails.ChangeDetails toChangeDetails(@Nonnull OntologyChange change) {
return change.accept(MAPPING_VISITOR);
}
private static final OntologyChangeVisitorEx MAPPING_VISITOR = new OntologyChangeVisitorEx<>() {
@Override
public RevisionDetails.ChangeDetails getDefaultReturnValue() {
return null;
}
@Nonnull
@Override
public RevisionDetails.ChangeDetails visit(@Nonnull AddAxiomChange change) {
return new RevisionDetails.ChangeDetails(RevisionDetails.ChangeOperation.ADD, change.getAxiom());
}
@Override
public RevisionDetails.ChangeDetails visit(@Nonnull RemoveAxiomChange change) {
return new RevisionDetails.ChangeDetails(RevisionDetails.ChangeOperation.REMOVE, change.getAxiom());
}
};
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy