Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Get all classes in ontology #67

Merged
merged 18 commits into from
Feb 4, 2025
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ MAINTAINER protege.stanford.edu
EXPOSE 7770
ARG JAR_FILE
COPY target/${JAR_FILE} webprotege-backend-service.jar
ENTRYPOINT ["java","-jar","/webprotege-backend-service.jar"]
ENTRYPOINT ["sh", "-c", "java $JVM_ENV -jar /webprotege-backend-service.jar"]
Original file line number Diff line number Diff line change
Expand Up @@ -299,13 +299,6 @@ ProjectDetailsRepository getProjectDetailsRepository(MongoTemplate mongoTemplate
return new ProjectDetailsRepository(mongoTemplate, objectMapper);
}

@Singleton
@Bean
ProjectBranchRepository getProjectBranchRepository(MongoTemplate mongoTemplate,
ObjectMapper objectMapper) {
return new ProjectBranchRepository(mongoTemplate, objectMapper);
}

@Singleton
@Bean
ProjectRevisionRepository projectRevisionRepository(MongoTemplate mongoTemplate, ObjectMapper objectMapper) {
Expand Down Expand Up @@ -585,8 +578,8 @@ CommandExecutor<PrepareBackupFilesForUseRequest, PrepareBackupFilesForUseRespons
}

@Bean
CommandExecutor<CreateProjectSmallFilesRequest, CreateProjectSmallFilesResponse> executorForCreateProjectSmallFiles() {
return new CommandExecutorImpl<>(CreateProjectSmallFilesResponse.class);
CommandExecutor<CreateNewReproducibleProjectRequest, CreateNewReproducibleProjectResponse> executorForCreateProjectSmallFiles() {
return new CommandExecutorImpl<>(CreateNewReproducibleProjectResponse.class);
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1066,6 +1066,11 @@ GetEntityChildrenActionHandler getEntityChildrenActionHandler(AccessManager p1,
return new GetEntityChildrenActionHandler(p1,p2,p3,p4);
}


@Bean
GetAllOwlClassesActionHandler getAllOwlClassesActionHandler(AccessManager p1, ProjectAxiomsSignatureIndex p2) {
return new GetAllOwlClassesActionHandler(p1, p2);
}
@Bean
FilterExistingEntitiesActionHandler filterExistingEntitiesActionHandler(AccessManager p1,
ClassHierarchyProvider p2) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@

import javax.annotation.*;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.*;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
Expand Down Expand Up @@ -55,6 +53,7 @@ public class EntityFormRepositoryImpl implements EntityFormRepository {
private final Lock readLock = readWriteLock.readLock();

private final Lock writeLock = readWriteLock.writeLock();
Map<FormId, FormDescriptor> formDescriptorCache = new HashMap<>();

private final static Logger LOGGER = LoggerFactory.getLogger(EntityFormRepositoryImpl.class);

Expand All @@ -70,6 +69,7 @@ public void deleteFormDescriptor(@Nonnull ProjectId projectId, @Nonnull FormId f
writeLock.lock();
var query = new Document(PROJECT_ID, projectId.id()).append(FORM__FORM_ID, formId.getId());
getCollection().findOneAndDelete(query);
formDescriptorCache.remove(formId);
} finally {
writeLock.unlock();
}
Expand Down Expand Up @@ -99,6 +99,7 @@ var record = FormDescriptorRecord.get(projectId, formDescriptor, ordinal);
var filter = getProjectIdFormIdFilter(projectId, formDescriptor.getFormId());
getCollection()
.findOneAndReplace(filter, document, new FindOneAndReplaceOptions().upsert(true));
formDescriptorCache.remove(formDescriptor.getFormId());
}
} finally {
writeLock.unlock();
Expand Down Expand Up @@ -143,6 +144,7 @@ public void setProjectFormDescriptors(@Nonnull ProjectId projectId, @Nonnull Lis
var record = FormDescriptorRecord.get(projectId, formDescriptor, ordinal);
var recordDocument = objectMapper.convertValue(record, Document.class);
docs.add(recordDocument);
formDescriptorCache.remove(formDescriptor.getFormId());
}
}
collection.deleteMany(new Document(PROJECT_ID, projectId.id()));
Expand All @@ -162,6 +164,9 @@ public MongoCollection<Document> getCollection() {

@Override
public Optional<FormDescriptor> findFormDescriptor(@Nonnull ProjectId projectId, @Nonnull FormId formId) {
if(formDescriptorCache.get(formId) != null) {
return Optional.of(formDescriptorCache.get(formId));
}
try {
readLock.lock();
Bson filter = getProjectIdFormIdFilter(projectId, formId);
Expand All @@ -173,6 +178,7 @@ public Optional<FormDescriptor> findFormDescriptor(@Nonnull ProjectId projectId,
}
else {
var formRecord = objectMapper.convertValue(foundFormDocument, FormDescriptorRecord.class);
formDescriptorCache.put(formRecord.getFormDescriptor().getFormId(), formRecord.getFormDescriptor());
return Optional.of(formRecord.getFormDescriptor());
}
} finally {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ protected CreateClassesFromApiResult createActionResult(ChangeApplicationResult<
return new CreateClassesFromApiResult(
action.changeRequestId(),
action.projectId(),
newClass.toStringID()
newClass.getIRI().toString()
);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package edu.stanford.protege.webprotege.icd.actions;

import edu.stanford.protege.webprotege.common.ProjectId;
import edu.stanford.protege.webprotege.common.ProjectRequest;

public record GetAllOwlClassesAction(ProjectId projectId) implements ProjectRequest<GetAllOwlClassesResult> {
public final static String CHANNEL = "webprotege.entities.GetAllOwlClasses";


@Override
public String getChannel() {
return CHANNEL;
}

@Override
public ProjectId projectId(){
return projectId;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package edu.stanford.protege.webprotege.icd.actions;

import edu.stanford.protege.webprotege.access.AccessManager;
import edu.stanford.protege.webprotege.dispatch.AbstractProjectActionHandler;
import edu.stanford.protege.webprotege.index.ProjectAxiomsSignatureIndex;
import edu.stanford.protege.webprotege.ipc.ExecutionContext;
import org.jetbrains.annotations.NotNull;
import org.semanticweb.owlapi.model.EntityType;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLNamedObject;

import javax.inject.Inject;
import java.util.List;

public class GetAllOwlClassesActionHandler extends AbstractProjectActionHandler<GetAllOwlClassesAction, GetAllOwlClassesResult> {

private final ProjectAxiomsSignatureIndex projectAxiomsSignatureIndex;

@Inject
public GetAllOwlClassesActionHandler(@NotNull AccessManager accessManager, ProjectAxiomsSignatureIndex projectAxiomsSignatureIndex) {
super(accessManager);
this.projectAxiomsSignatureIndex = projectAxiomsSignatureIndex;
}

@NotNull
@Override
public Class<GetAllOwlClassesAction> getActionClass() {
return GetAllOwlClassesAction.class;
}

@NotNull
@Override
public GetAllOwlClassesResult execute(@NotNull GetAllOwlClassesAction action, @NotNull ExecutionContext executionContext) {
List<IRI> allClasses = projectAxiomsSignatureIndex.getProjectAxiomsSignature(EntityType.CLASS).map(OWLNamedObject::getIRI).toList();
return new GetAllOwlClassesResult(allClasses);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package edu.stanford.protege.webprotege.icd.actions;


import edu.stanford.protege.webprotege.api.ActionExecutor;
import edu.stanford.protege.webprotege.ipc.CommandHandler;
import edu.stanford.protege.webprotege.ipc.ExecutionContext;
import edu.stanford.protege.webprotege.ipc.WebProtegeHandler;
import reactor.core.publisher.Mono;

import javax.annotation.Nonnull;

@WebProtegeHandler
public class GetAllOwlClassesCommandHandler implements CommandHandler<GetAllOwlClassesAction, GetAllOwlClassesResult> {

private final ActionExecutor executor;

public GetAllOwlClassesCommandHandler(ActionExecutor executor) {
this.executor = executor;
}

@Nonnull
@Override
public String getChannelName() {
return GetAllOwlClassesAction.CHANNEL;
}

@Override
public Class<GetAllOwlClassesAction> getRequestClass() {
return GetAllOwlClassesAction.class;
}

@Override
public Mono<GetAllOwlClassesResult> handleRequest(GetAllOwlClassesAction request,
ExecutionContext executionContext) {
return executor.executeRequest(request, executionContext);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package edu.stanford.protege.webprotege.icd.actions;


import com.fasterxml.jackson.annotation.JsonTypeName;
import edu.stanford.protege.webprotege.dispatch.Result;
import org.semanticweb.owlapi.model.IRI;

import java.util.List;

@JsonTypeName(GetAllOwlClassesAction.CHANNEL)
public record GetAllOwlClassesResult(List<IRI> owlClassList) implements Result {
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,10 @@
import edu.stanford.protege.webprotege.ipc.ExecutionContext;
import edu.stanford.protege.webprotege.renderer.RenderingManager;
import org.jetbrains.annotations.NotNull;
import org.semanticweb.owlapi.model.OWLClass;
import uk.ac.manchester.cs.owl.owlapi.OWLClassImpl;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@JsonTypeName("webprotege.entities.GetClassAncestors")
public class GetClassAncestorsActionHandler extends AbstractProjectActionHandler<GetClassAncestorsAction, GetClassAncestorsResult> {
Expand All @@ -38,19 +36,16 @@ public Class<GetClassAncestorsAction> getActionClass() {
@NotNull
@Override
public GetClassAncestorsResult execute(@NotNull GetClassAncestorsAction action, @NotNull ExecutionContext executionContext) {
AncestorHierarchyNode<OWLClass> classTree = classHierarchyProvider.getAncestorsTree(new OWLClassImpl(action.classIri()));

AncestorHierarchyNode<OWLEntityData> entityDataTree = mapToEntityData(classTree);
return new GetClassAncestorsResult(entityDataTree);
}

private AncestorHierarchyNode<OWLEntityData> mapToEntityData(AncestorHierarchyNode<OWLClass> ancestorHierarchyNode) {
List<AncestorHierarchyNode<OWLEntityData>> ancestors = classHierarchyProvider.getParents(new OWLClassImpl(action.classIri())).stream().map(owlCLass -> {
OWLEntityData entityData = renderingManager.getRendering(owlCLass);
AncestorHierarchyNode<OWLEntityData> resp = new AncestorHierarchyNode<>();
resp.setNode(entityData);
return resp;
}).toList();
AncestorHierarchyNode<OWLEntityData> response = new AncestorHierarchyNode<>();
response.setNode(renderingManager.getRendering(ancestorHierarchyNode.getNode()));
response.setChildren(new ArrayList<>());
for(AncestorHierarchyNode<OWLClass> child: ancestorHierarchyNode.getChildren()) {
response.getChildren().add(mapToEntityData(child));
}
return response;
response.setNode(renderingManager.getRendering(new OWLClassImpl(action.classIri())));
response.setChildren(ancestors);
return new GetClassAncestorsResult(response);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
import com.fasterxml.jackson.annotation.*;
import edu.stanford.protege.webprotege.common.*;

import static edu.stanford.protege.webprotege.icd.projects.CreateProjectSmallFilesRequest.CHANNEL;
import static edu.stanford.protege.webprotege.icd.projects.CreateNewReproducibleProjectRequest.CHANNEL;

@JsonTypeName(CHANNEL)
public record CreateProjectSmallFilesRequest(
@JsonProperty("projectId") ProjectId projectId
)implements Request<CreateProjectSmallFilesResponse> {
public static final String CHANNEL = "icatx.versioning.CreateProjectSmallFiles";
public record CreateNewReproducibleProjectRequest(
@JsonProperty("projectId") ProjectId projectId,
@JsonProperty("branch") String branch
)implements Request<CreateNewReproducibleProjectResponse> {
public static final String CHANNEL = "icatx.versioning.CreateNewReproducibleProjectRequest";

@Override
public String getChannel() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import com.fasterxml.jackson.annotation.JsonTypeName;
import edu.stanford.protege.webprotege.dispatch.Result;

import static edu.stanford.protege.webprotege.icd.projects.CreateProjectSmallFilesRequest.CHANNEL;
import static edu.stanford.protege.webprotege.icd.projects.CreateNewReproducibleProjectRequest.CHANNEL;

@JsonTypeName(CHANNEL)
public record CreateProjectSmallFilesResponse() implements Result {
public record CreateNewReproducibleProjectResponse() implements Result {
}

This file was deleted.

Loading
Loading