
step.core.references.ReferenceFinderServices Maven / Gradle / Ivy
package step.core.references;
import io.swagger.v3.oas.annotations.tags.Tag;
import step.core.accessors.AbstractOrganizableObject;
import step.core.deployment.AbstractStepServices;
import step.framework.server.security.Secured;
import step.core.entities.EntityDependencyTreeVisitor;
import step.core.entities.EntityManager;
import step.core.objectenricher.ObjectPredicate;
import step.core.plans.Plan;
import step.core.plans.PlanAccessor;
import step.functions.Function;
import step.functions.accessor.FunctionAccessor;
import step.resources.Resource;
import jakarta.annotation.PostConstruct;
import jakarta.inject.Singleton;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Singleton
@Path("references")
@Tag(name = "References")
public class ReferenceFinderServices extends AbstractStepServices {
private EntityManager entityManager;
@PostConstruct
public void init() throws Exception {
super.init();
entityManager = getContext().getEntityManager();
}
// Uncomment for easier debugging (poor man's Unit Test), URL will be http://localhost:8080/rest/references/findReferencesDebug
/*
@GET
@Path("/findReferencesDebug")
@Produces(MediaType.APPLICATION_JSON)
public List findReferencesTest() {
List result = new ArrayList<>();
result.addAll(findReferences(new FindReferencesRequest(PLAN_NAME, "TestXXX")));
// result.addAll(findReferences(new FindReferencesRequest(PLAN_ID, "6195001c0a98d92da8a57830")));
result.addAll(findReferences(new FindReferencesRequest(KEYWORD_NAME, "UnitTest")));
// result.addAll(findReferences(new FindReferencesRequest(KEYWORD_ID, "60cca3488b81b227a5fe92d9")));
return result;
}
//*/
@Path("/findReferences")
@POST
@Secured
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public List findReferences(FindReferencesRequest request) {
if (request.searchType == null) {
throw new IllegalArgumentException("A valid searchType must be provided");
}
if (request.searchValue == null || request.searchValue.trim().isEmpty()) {
throw new IllegalArgumentException("A non-empty searchValue must be provided");
}
List results = new ArrayList<>();
PlanAccessor planAccessor = (PlanAccessor) entityManager.getEntityByName(EntityManager.plans).getAccessor();
// Find composite keywords containing requested usages; composite KWs are really just plans in disguise :-)
FunctionAccessor functionAccessor = (FunctionAccessor) entityManager.getEntityByName(EntityManager.functions).getAccessor();
try (Stream functionStream = functionAccessor.streamLazy()) {
functionStream.forEach(function -> {
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy