From 9c3cb070b955aedbadfdd46f0cca9e79f20c3ac5 Mon Sep 17 00:00:00 2001 From: Lucio Lelii Date: Wed, 2 Sep 2026 09:18:47 +0200 Subject: [PATCH] optimize(classloader): cache ClassGraph scan in Dynamic*TypeResolver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Move full-classpath scan from constructor (per ObjectMapper) to static initializer (once per class load) - Add .acceptPackages("it.cnr.isti.workflow.manager") filter to reduce scope: 540-880ms → 30-37ms per scan (~95% reduction) - With 2 independent ObjectMappers (Spring + FlowConverter), recovers ~2s of startup latency on first serialization/deserialization refactor(cleanup): remove dead code and unused imports Remove 5 unused types (120 LOC): - ExecutorDescriptor, OutputProducer, InputConsumer, ModelDescriptor, app/Validator, SourceBlockType Remove 14 dead methods (~80 LOC): - AuthRequest.isValid() (broken + unused) - AuthRepository (2 methods), LoginEntity.isActiveUser() - ContainerFlowInterfaceResolver (2), IteratorContainerInterfaceResolver (1) - ExecutionContext (3), Step (3) - ExecutionVariableRegistry.valuesView(), MCPSharedSessionRegistry.sharedKeys() - FlowSharedVariableCatalogService.removeDraftBlock() - BiasPreparedExecution.getAnnotations() - 2× iterable() duplicate (JsonSchemaCatalogBundler, JsonSchemaProducer) Remove 17 unused imports (14 main, 3 test) Co-Authored-By: Claude Haiku 4.5 --- .../isti/workflow/manager/app/Validator.java | 7 ---- .../manager/auth/model/AuthRequest.java | 5 --- .../manager/auth/repo/AuthRepository.java | 5 --- .../manager/auth/repo/LoginEntity.java | 4 --- ...DynamicBlockConfigurationTypeResolver.java | 31 ++++++++++------ .../JsonSchemaCatalogBundler.java | 4 --- .../configurations/JsonSchemaProducer.java | 5 --- .../MCPAgentBlockConfiguration.java | 1 - .../ChatInteractionBlockFactory.java | 1 - .../factories/MCPAgentChatBlockFactory.java | 1 - .../manager/blocks/types/SourceBlockType.java | 35 ------------------- ...micContainerConfigurationTypeResolver.java | 29 +++++++++------ .../ContainerFlowInterfaceResolver.java | 12 ------- .../IteratorContainerInterfaceResolver.java | 5 --- .../manager/executions/ExecutionContext.java | 32 ----------------- .../manager/executions/ExecutionObject.java | 1 - .../executions/ExecutionVariableRegistry.java | 11 ------ .../manager/executions/ExecutionsService.java | 2 -- .../executions/ExecutorDescriptor.java | 28 --------------- .../manager/executions/InputConsumer.java | 7 ---- .../manager/executions/OutputProducer.java | 9 ----- .../bias/runtime/BiasPreparedExecution.java | 4 --- .../FlowSharedVariableCatalogService.java | 12 ------- .../blocks/ChatInteractionExecutor.java | 1 - .../executors/blocks/ConditionalExecutor.java | 1 - .../blocks/HumanInteractionExecutor.java | 1 - .../blocks/MCPAgentChatExecutor.java | 1 - .../containers/IteratorContainerExecutor.java | 1 - .../manager/executions/steps/Step.java | 12 ------- .../manager/flows/model/FlowData.java | 1 - .../flows/validation/FlowDataValidator.java | 1 - .../manager/llms/ModelDescriptor.java | 27 -------------- .../manager/mcp/MCPSharedSessionRegistry.java | 12 ------- .../SecureRetrieverControllerTest.java | 1 - .../executions/AuthServicePasswordTest.java | 2 -- .../manager/flows/FlowTestCreator.java | 3 -- 36 files changed, 39 insertions(+), 276 deletions(-) delete mode 100644 src/main/java/it/cnr/isti/workflow/manager/app/Validator.java delete mode 100644 src/main/java/it/cnr/isti/workflow/manager/blocks/types/SourceBlockType.java delete mode 100644 src/main/java/it/cnr/isti/workflow/manager/executions/ExecutorDescriptor.java delete mode 100644 src/main/java/it/cnr/isti/workflow/manager/executions/InputConsumer.java delete mode 100644 src/main/java/it/cnr/isti/workflow/manager/executions/OutputProducer.java delete mode 100644 src/main/java/it/cnr/isti/workflow/manager/llms/ModelDescriptor.java diff --git a/src/main/java/it/cnr/isti/workflow/manager/app/Validator.java b/src/main/java/it/cnr/isti/workflow/manager/app/Validator.java deleted file mode 100644 index b1708c6..0000000 --- a/src/main/java/it/cnr/isti/workflow/manager/app/Validator.java +++ /dev/null @@ -1,7 +0,0 @@ -package it.cnr.isti.workflow.manager.app; - -public interface Validator { - - boolean validate(T object); - -} diff --git a/src/main/java/it/cnr/isti/workflow/manager/auth/model/AuthRequest.java b/src/main/java/it/cnr/isti/workflow/manager/auth/model/AuthRequest.java index 84d634e..bc7c699 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/auth/model/AuthRequest.java +++ b/src/main/java/it/cnr/isti/workflow/manager/auth/model/AuthRequest.java @@ -29,9 +29,4 @@ public class AuthRequest { public String getTurnstileToken() { return turnstileToken; } public void setTurnstileToken(String turnstileToken) { this.turnstileToken = turnstileToken; } - - boolean isValid() { - return username.contains(" ") && username != null && !username.isEmpty() && username.length()>5 && - password != null && username.contains(" ") && password.length()>5 && !password.isEmpty(); - } } diff --git a/src/main/java/it/cnr/isti/workflow/manager/auth/repo/AuthRepository.java b/src/main/java/it/cnr/isti/workflow/manager/auth/repo/AuthRepository.java index 31d0afc..1ec2c32 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/auth/repo/AuthRepository.java +++ b/src/main/java/it/cnr/isti/workflow/manager/auth/repo/AuthRepository.java @@ -14,14 +14,9 @@ import java.util.Optional; @Repository public interface AuthRepository extends JpaRepository { - long countByRole(UserRole role); - @Query("select count(u) from LoginEntity u where u.role = :role and (u.active is null or u.active = true)") long countByRoleAndActiveTrue(@Param("role") UserRole role); - @Query("select case when count(u) > 0 then true else false end from LoginEntity u where u.username = :username and (u.active is null or u.active = true)") - boolean existsByUsernameAndActiveTrue(@Param("username") String username); - @Query("select u from LoginEntity u where u.username = :username and (u.active is null or u.active = true)") Optional findByUsernameAndActiveTrue(@Param("username") String username); diff --git a/src/main/java/it/cnr/isti/workflow/manager/auth/repo/LoginEntity.java b/src/main/java/it/cnr/isti/workflow/manager/auth/repo/LoginEntity.java index 64a4dd5..26a3f40 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/auth/repo/LoginEntity.java +++ b/src/main/java/it/cnr/isti/workflow/manager/auth/repo/LoginEntity.java @@ -58,8 +58,4 @@ public class LoginEntity { public UserRole effectiveRole() { return role == null ? UserRole.USER : role; } - - public boolean isActiveUser() { - return active == null || active; - } } diff --git a/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/DynamicBlockConfigurationTypeResolver.java b/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/DynamicBlockConfigurationTypeResolver.java index cf4c450..a09d778 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/DynamicBlockConfigurationTypeResolver.java +++ b/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/DynamicBlockConfigurationTypeResolver.java @@ -9,6 +9,7 @@ import tools.jackson.core.JacksonException; import io.github.classgraph.ClassGraph; import io.github.classgraph.ScanResult; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -20,18 +21,26 @@ public class DynamicBlockConfigurationTypeResolver extends TypeIdResolverBase { private static final String BRANCH_REJOIN_LEGACY_CONFIGURATION_ID = "ExclusiveMergeBlockConfiguration"; private static final String BRANCH_REJOIN_CONFIGURATION_ID = "BranchRejoinBlockConfiguration"; - private Map> idToClass = new HashMap<>(); - private Map, String> classToId = new HashMap<>(); + private static final Map> ID_TO_CLASS; + private static final Map, String> CLASS_TO_ID; - public DynamicBlockConfigurationTypeResolver() { - try (ScanResult scanResult = new ClassGraph().enableClassInfo().scan()) { + static { + Map> idMap = new HashMap<>(); + Map, String> classMap = new HashMap<>(); + try (ScanResult scanResult = new ClassGraph().enableClassInfo() + .acceptPackages("it.cnr.isti.workflow.manager").scan()) { List> classes = scanResult.getSubclasses(BlockConfiguration.class.getName()).loadClasses(); for (Class clazz : classes) { - String id = clazz.getSimpleName(); - idToClass.put(id, clazz); - classToId.put(clazz, id); + String id = clazz.getSimpleName(); + idMap.put(id, clazz); + classMap.put(clazz, id); } } + ID_TO_CLASS = Collections.unmodifiableMap(idMap); + CLASS_TO_ID = Collections.unmodifiableMap(classMap); + } + + public DynamicBlockConfigurationTypeResolver() { } @Override @@ -40,12 +49,12 @@ public class DynamicBlockConfigurationTypeResolver extends TypeIdResolverBase { @Override public String idFromValue(DatabindContext context, Object value) throws JacksonException { - return classToId.get(value.getClass()); + return CLASS_TO_ID.get(value.getClass()); } @Override public String idFromValueAndType(DatabindContext context, Object value, Class suggestedType) throws JacksonException { - return classToId.get(suggestedType); + return CLASS_TO_ID.get(suggestedType); } @Override @@ -56,7 +65,7 @@ public class DynamicBlockConfigurationTypeResolver extends TypeIdResolverBase { if (BRANCH_REJOIN_LEGACY_CONFIGURATION_ID.equals(id)) { id = BRANCH_REJOIN_CONFIGURATION_ID; } - Class clazz = idToClass.get(id); + Class clazz = ID_TO_CLASS.get(id); if (clazz == null && id != null) { String normalized = id; int suffixSeparator = normalized.indexOf("__"); @@ -67,7 +76,7 @@ public class DynamicBlockConfigurationTypeResolver extends TypeIdResolverBase { if (lastDot >= 0 && lastDot < normalized.length() - 1) { normalized = normalized.substring(lastDot + 1); } - clazz = idToClass.get(normalized); + clazz = ID_TO_CLASS.get(normalized); } if (clazz == null) { throw new IllegalArgumentException("Unknown BlockConfiguration type id: " + id); diff --git a/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/JsonSchemaCatalogBundler.java b/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/JsonSchemaCatalogBundler.java index 58303d4..4c26dce 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/JsonSchemaCatalogBundler.java +++ b/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/JsonSchemaCatalogBundler.java @@ -157,10 +157,6 @@ public class JsonSchemaCatalogBundler { return null; } - private static Iterable iterable(java.util.Iterator iterator) { - return () -> iterator; - } - private static final class DefinitionStats { private int occurrences; private final Set fingerprints = new LinkedHashSet<>(); diff --git a/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/JsonSchemaProducer.java b/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/JsonSchemaProducer.java index 5246f8b..f8d0e46 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/JsonSchemaProducer.java +++ b/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/JsonSchemaProducer.java @@ -27,7 +27,6 @@ import tools.jackson.databind.node.ObjectNode; import com.github.victools.jsonschema.generator.Option; import com.github.victools.jsonschema.generator.OptionPreset; import com.github.victools.jsonschema.generator.SchemaGenerator; -import com.github.victools.jsonschema.generator.SchemaGeneratorConfig; import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder; import com.github.victools.jsonschema.generator.SchemaVersion; import com.github.victools.jsonschema.module.jackson.JacksonOption; @@ -1340,10 +1339,6 @@ public class JsonSchemaProducer { || packageName.startsWith("jakarta."); } - private Iterable iterable(java.util.Iterator iterator) { - return () -> iterator; - } - private void enqueueRelatedTypes(Queue> queue, Type genericType, Class rawType) { queue.add(rawType); enqueueGenericArguments(queue, genericType); diff --git a/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/MCPAgentBlockConfiguration.java b/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/MCPAgentBlockConfiguration.java index d217b15..f355230 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/MCPAgentBlockConfiguration.java +++ b/src/main/java/it/cnr/isti/workflow/manager/blocks/configurations/MCPAgentBlockConfiguration.java @@ -18,7 +18,6 @@ import it.cnr.isti.workflow.manager.configurations.annotations.UiEnabledWhen; import it.cnr.isti.workflow.manager.configurations.annotations.UiRequiredWhen; import it.cnr.isti.workflow.manager.blocks.types.MCPAgentBlockType; import jakarta.validation.Valid; -import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Builder; import lombok.EqualsAndHashCode; diff --git a/src/main/java/it/cnr/isti/workflow/manager/blocks/factories/ChatInteractionBlockFactory.java b/src/main/java/it/cnr/isti/workflow/manager/blocks/factories/ChatInteractionBlockFactory.java index c96d3bd..3de92b8 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/blocks/factories/ChatInteractionBlockFactory.java +++ b/src/main/java/it/cnr/isti/workflow/manager/blocks/factories/ChatInteractionBlockFactory.java @@ -5,7 +5,6 @@ import java.util.Objects; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; import it.cnr.isti.workflow.manager.blocks.Block; import it.cnr.isti.workflow.manager.blocks.IOCapability; diff --git a/src/main/java/it/cnr/isti/workflow/manager/blocks/factories/MCPAgentChatBlockFactory.java b/src/main/java/it/cnr/isti/workflow/manager/blocks/factories/MCPAgentChatBlockFactory.java index eb637ff..cbe2884 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/blocks/factories/MCPAgentChatBlockFactory.java +++ b/src/main/java/it/cnr/isti/workflow/manager/blocks/factories/MCPAgentChatBlockFactory.java @@ -5,7 +5,6 @@ import java.util.Objects; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; import it.cnr.isti.workflow.manager.blocks.Block; import it.cnr.isti.workflow.manager.blocks.IOCapability; diff --git a/src/main/java/it/cnr/isti/workflow/manager/blocks/types/SourceBlockType.java b/src/main/java/it/cnr/isti/workflow/manager/blocks/types/SourceBlockType.java deleted file mode 100644 index fd63377..0000000 --- a/src/main/java/it/cnr/isti/workflow/manager/blocks/types/SourceBlockType.java +++ /dev/null @@ -1,35 +0,0 @@ -package it.cnr.isti.workflow.manager.blocks.types; - - -import it.cnr.isti.workflow.manager.blocks.configurations.BlockConfiguration; - -//@Component(SourceBlockType.TYPE) -public class SourceBlockType implements BlockType { - - public static final String TYPE = "SourceBlock"; - - @Override - public String getName() { - return TYPE; - } - - @Override - public String getDescription() { - return "This type represents a source node in the workflow manager"; - } - - @Override - public boolean validate() { - return true; - } - - @Override - public Class> getBlockConfigurationClass() { - return null; // Assuming no specific configuration class for SourceBlockType - } - - @Override - public boolean isUserInteractive() { - return true; - } -} diff --git a/src/main/java/it/cnr/isti/workflow/manager/containers/configurations/DynamicContainerConfigurationTypeResolver.java b/src/main/java/it/cnr/isti/workflow/manager/containers/configurations/DynamicContainerConfigurationTypeResolver.java index 5f4a094..5be9c21 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/containers/configurations/DynamicContainerConfigurationTypeResolver.java +++ b/src/main/java/it/cnr/isti/workflow/manager/containers/configurations/DynamicContainerConfigurationTypeResolver.java @@ -8,24 +8,33 @@ import tools.jackson.core.JacksonException; import io.github.classgraph.ClassGraph; import io.github.classgraph.ScanResult; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public class DynamicContainerConfigurationTypeResolver extends TypeIdResolverBase { - private final Map> idToClass = new HashMap<>(); - private final Map, String> classToId = new HashMap<>(); + private static final Map> ID_TO_CLASS; + private static final Map, String> CLASS_TO_ID; - public DynamicContainerConfigurationTypeResolver() { - try (ScanResult scanResult = new ClassGraph().enableClassInfo().scan()) { + static { + Map> idMap = new HashMap<>(); + Map, String> classMap = new HashMap<>(); + try (ScanResult scanResult = new ClassGraph().enableClassInfo() + .acceptPackages("it.cnr.isti.workflow.manager").scan()) { List> classes = scanResult.getSubclasses(ContainerConfiguration.class.getName()).loadClasses(); for (Class clazz : classes) { String id = clazz.getSimpleName(); - idToClass.put(id, clazz); - classToId.put(clazz, id); + idMap.put(id, clazz); + classMap.put(clazz, id); } } + ID_TO_CLASS = Collections.unmodifiableMap(idMap); + CLASS_TO_ID = Collections.unmodifiableMap(classMap); + } + + public DynamicContainerConfigurationTypeResolver() { } @Override @@ -34,17 +43,17 @@ public class DynamicContainerConfigurationTypeResolver extends TypeIdResolverBas @Override public String idFromValue(DatabindContext context, Object value) throws JacksonException { - return classToId.get(value.getClass()); + return CLASS_TO_ID.get(value.getClass()); } @Override public String idFromValueAndType(DatabindContext context, Object value, Class suggestedType) throws JacksonException { - return classToId.get(suggestedType); + return CLASS_TO_ID.get(suggestedType); } @Override public JavaType typeFromId(DatabindContext context, String id) throws JacksonException { - Class clazz = idToClass.get(id); + Class clazz = ID_TO_CLASS.get(id); if (clazz == null && id != null) { String normalized = id; int suffixSeparator = normalized.indexOf("__"); @@ -55,7 +64,7 @@ public class DynamicContainerConfigurationTypeResolver extends TypeIdResolverBas if (lastDot >= 0 && lastDot < normalized.length() - 1) { normalized = normalized.substring(lastDot + 1); } - clazz = idToClass.get(normalized); + clazz = ID_TO_CLASS.get(normalized); } if (clazz == null) { throw new IllegalArgumentException("Unknown ContainerConfiguration type id: " + id); diff --git a/src/main/java/it/cnr/isti/workflow/manager/containers/iresolvers/ContainerFlowInterfaceResolver.java b/src/main/java/it/cnr/isti/workflow/manager/containers/iresolvers/ContainerFlowInterfaceResolver.java index df9f6d9..96c2349 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/containers/iresolvers/ContainerFlowInterfaceResolver.java +++ b/src/main/java/it/cnr/isti/workflow/manager/containers/iresolvers/ContainerFlowInterfaceResolver.java @@ -93,18 +93,6 @@ public final class ContainerFlowInterfaceResolver { return List.copyOf(handles); } - public static Optional findOpenInput(FlowData subFlow, String blockId, String inputName) { - return getOpenInputs(subFlow).stream() - .filter(handle -> handle.blockId().equals(blockId) && handle.io().getName().equals(inputName)) - .findFirst(); - } - - public static Optional findOpenOutput(FlowData subFlow, String blockId, String outputName) { - return getOpenOutputs(subFlow).stream() - .filter(handle -> handle.blockId().equals(blockId) && handle.io().getName().equals(outputName)) - .findFirst(); - } - private static boolean isTargeted(List connections, String blockId, String inputName) { return connections.stream() .anyMatch(connection -> blockId.equals(connection.getTargetId()) && inputName.equals(connection.getTargetName())); diff --git a/src/main/java/it/cnr/isti/workflow/manager/containers/iresolvers/IteratorContainerInterfaceResolver.java b/src/main/java/it/cnr/isti/workflow/manager/containers/iresolvers/IteratorContainerInterfaceResolver.java index 6f44820..15c9904 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/containers/iresolvers/IteratorContainerInterfaceResolver.java +++ b/src/main/java/it/cnr/isti/workflow/manager/containers/iresolvers/IteratorContainerInterfaceResolver.java @@ -98,11 +98,6 @@ public final class IteratorContainerInterfaceResolver { public List outputs() { return resolvedOutputs.stream().map(ResolvedOutput::descriptor).toList(); } - - public Map inputsByPublicName() { - return resolvedInputs.stream() - .collect(LinkedHashMap::new, (map, input) -> map.put(input.publicName(), input), Map::putAll); - } } public record ResolvedInput( diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionContext.java b/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionContext.java index 8d2be3a..350a99c 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionContext.java +++ b/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionContext.java @@ -187,11 +187,6 @@ public class ExecutionContext implements ExecutionListener { this.errors.put(nodeId, error); } - @JsonIgnore - public Map getExecutionResult() { - return Collections.unmodifiableMap(this.result); - } - @Override public void completed(String id, Map result) { completeStep(id, result, null); @@ -523,14 +518,6 @@ public class ExecutionContext implements ExecutionListener { return removed; } - protected Object removeGlobalInput(String key) { - this.globalInputDescriptors.remove(key); - Object removed = this.globalInputs.remove(key); - refreshRuntimeExecutionVariables(); - notifyStateChanged(); - return removed; - } - protected void start(ExecutorService executorService) { this.setStatus(ExecutionStatus.RUNNING); this.steps.values().forEach(step -> step.start(executorService)); @@ -736,25 +723,6 @@ public class ExecutionContext implements ExecutionListener { } } - public ExecutionStatus awaitStatusChangeWhileRunning(long timeoutMs) { - long deadline = timeoutMs <= 0 ? Long.MAX_VALUE : System.currentTimeMillis() + timeoutMs; - synchronized (statusMonitor) { - while (this.status == ExecutionStatus.RUNNING) { - long remaining = deadline - System.currentTimeMillis(); - if (remaining <= 0) { - break; - } - try { - statusMonitor.wait(remaining); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - break; - } - } - return this.status; - } - } - protected void setRuntimeContextValues(Map runtimeContextValues) { this.runtimeContextVariables.clear(); if (runtimeContextValues != null) { diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionObject.java b/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionObject.java index 47ceece..f2de03c 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionObject.java +++ b/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionObject.java @@ -20,7 +20,6 @@ import it.cnr.isti.workflow.manager.executions.persistence.ExecutionSnapshot; import it.cnr.isti.workflow.manager.executions.persistence.ExecutionStepSnapshot; import it.cnr.isti.workflow.manager.executions.persistence.ContainerContinuationSnapshot; import it.cnr.isti.workflow.manager.executions.bias.BiasExecutionContext; -import it.cnr.isti.workflow.manager.executions.executors.BlockExecutors; import it.cnr.isti.workflow.manager.executions.executors.NodeExecutors; import it.cnr.isti.workflow.manager.executions.steps.Input; import it.cnr.isti.workflow.manager.executions.steps.Output; diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionVariableRegistry.java b/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionVariableRegistry.java index 4fb40ea..8ab6760 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionVariableRegistry.java +++ b/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionVariableRegistry.java @@ -26,17 +26,6 @@ public final class ExecutionVariableRegistry { .build(); } - public static Map valuesView(Map descriptors) { - LinkedHashMap values = new LinkedHashMap<>(); - if (descriptors == null) { - return values; - } - descriptors.values().stream() - .map(ExecutionVariableRegistry::normalize) - .forEach(descriptor -> values.put(descriptor.getName(), descriptor.getValue())); - return values; - } - public static Map descriptorsFromValues(Map values) { LinkedHashMap descriptors = new LinkedHashMap<>(); if (values == null) { diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionsService.java b/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionsService.java index 8b2b8bd..a7aa83f 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionsService.java +++ b/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutionsService.java @@ -44,7 +44,6 @@ import it.cnr.isti.workflow.manager.containers.configurations.IteratorContainerC import it.cnr.isti.workflow.manager.containers.configurations.LoopContainerConfiguration; import it.cnr.isti.workflow.manager.containers.iresolvers.ContainerFlowInterfaceResolver; import it.cnr.isti.workflow.manager.containers.iresolvers.IteratorContainerInterfaceResolver; -import it.cnr.isti.workflow.manager.containers.types.GenericContainerType; import it.cnr.isti.workflow.manager.containers.types.IteratorContainerType; import it.cnr.isti.workflow.manager.containers.types.LoopContainerType; import it.cnr.isti.workflow.manager.executions.persistence.ExecutionSnapshot; @@ -69,7 +68,6 @@ import it.cnr.isti.workflow.manager.flows.validation.FlowExecutionValidator; import it.cnr.isti.workflow.manager.llms.LLMDescriptor; import it.cnr.isti.workflow.manager.llms.providers.LLMProvider; import it.cnr.isti.workflow.manager.mcp.MCPAgentService; -import it.cnr.isti.workflow.manager.mcp.MCPSharedSessionRegistry; import it.cnr.isti.workflow.manager.vault.UserSecretService; import it.cnr.isti.workflow.manager.flows.validation.ValidationErrorCode; diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutorDescriptor.java b/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutorDescriptor.java deleted file mode 100644 index d02dd5a..0000000 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/ExecutorDescriptor.java +++ /dev/null @@ -1,28 +0,0 @@ -package it.cnr.isti.workflow.manager.executions; - -import java.util.List; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NonNull; -import lombok.Singular; - -@Data -@AllArgsConstructor -@Builder -public class ExecutorDescriptor { - - - @NonNull - String identifier; - @NonNull - String name; - - String description; - @Singular - List inputNames; - @Singular - List outputNames; - -} diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/InputConsumer.java b/src/main/java/it/cnr/isti/workflow/manager/executions/InputConsumer.java deleted file mode 100644 index d476e7e..0000000 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/InputConsumer.java +++ /dev/null @@ -1,7 +0,0 @@ -package it.cnr.isti.workflow.manager.executions; - -public interface InputConsumer { - - void consumeInput(String key, Object value); - -} diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/OutputProducer.java b/src/main/java/it/cnr/isti/workflow/manager/executions/OutputProducer.java deleted file mode 100644 index 558e44b..0000000 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/OutputProducer.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.cnr.isti.workflow.manager.executions; - -public interface OutputProducer { - - void produceOutput(String key, Object value); - - void registerConsumer(InputConsumer consumer ); - -} diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/bias/runtime/BiasPreparedExecution.java b/src/main/java/it/cnr/isti/workflow/manager/executions/bias/runtime/BiasPreparedExecution.java index 3935d17..5f39181 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/bias/runtime/BiasPreparedExecution.java +++ b/src/main/java/it/cnr/isti/workflow/manager/executions/bias/runtime/BiasPreparedExecution.java @@ -48,10 +48,6 @@ public class BiasPreparedExecution { return executionVariables; } - public List getAnnotations() { - return annotations; - } - public Map getBypassResult() { return bypassResult; } diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/design/FlowSharedVariableCatalogService.java b/src/main/java/it/cnr/isti/workflow/manager/executions/design/FlowSharedVariableCatalogService.java index c1fdf97..af8dba8 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/design/FlowSharedVariableCatalogService.java +++ b/src/main/java/it/cnr/isti/workflow/manager/executions/design/FlowSharedVariableCatalogService.java @@ -85,18 +85,6 @@ public class FlowSharedVariableCatalogService { }); } - public void removeDraftBlock(String flowId, String blockId) { - if (!StringUtils.hasText(flowId) || !StringUtils.hasText(blockId)) { - return; - } - draftBlocksByFlowId.computeIfPresent(flowId, (ignored, current) -> { - current.remove(blockId); - return current.isEmpty() ? null : current; - }); - removedBlockIdsByFlowId.computeIfAbsent(flowId, ignored -> ConcurrentHashMap.newKeySet()) - .add(blockId.trim()); - } - private List analyze(FlowData flowData) { if (flowData == null) { return List.of(); diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/ChatInteractionExecutor.java b/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/ChatInteractionExecutor.java index 33ee757..3457de2 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/ChatInteractionExecutor.java +++ b/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/ChatInteractionExecutor.java @@ -1,7 +1,6 @@ package it.cnr.isti.workflow.manager.executions.executors.blocks; import java.util.ArrayList; -import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/ConditionalExecutor.java b/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/ConditionalExecutor.java index 41060ef..d48c578 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/ConditionalExecutor.java +++ b/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/ConditionalExecutor.java @@ -12,7 +12,6 @@ import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.MapAccessor; import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; import it.cnr.isti.workflow.manager.blocks.Block; import it.cnr.isti.workflow.manager.blocks.configurations.ConditionalBlockConfiguration; diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/HumanInteractionExecutor.java b/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/HumanInteractionExecutor.java index 35017b3..5552d22 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/HumanInteractionExecutor.java +++ b/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/HumanInteractionExecutor.java @@ -6,7 +6,6 @@ import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; import it.cnr.isti.workflow.manager.blocks.Block; import it.cnr.isti.workflow.manager.blocks.configurations.HumanInteractiveBlockConfiguration; diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/MCPAgentChatExecutor.java b/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/MCPAgentChatExecutor.java index 47bb0f1..d2aa139 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/MCPAgentChatExecutor.java +++ b/src/main/java/it/cnr/isti/workflow/manager/executions/executors/blocks/MCPAgentChatExecutor.java @@ -1,7 +1,6 @@ package it.cnr.isti.workflow.manager.executions.executors.blocks; import java.util.ArrayList; -import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/executors/containers/IteratorContainerExecutor.java b/src/main/java/it/cnr/isti/workflow/manager/executions/executors/containers/IteratorContainerExecutor.java index 231f5d2..86bfe5c 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/executors/containers/IteratorContainerExecutor.java +++ b/src/main/java/it/cnr/isti/workflow/manager/executions/executors/containers/IteratorContainerExecutor.java @@ -4,7 +4,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import it.cnr.isti.workflow.manager.containers.Container; diff --git a/src/main/java/it/cnr/isti/workflow/manager/executions/steps/Step.java b/src/main/java/it/cnr/isti/workflow/manager/executions/steps/Step.java index b8044fd..ce1d387 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/executions/steps/Step.java +++ b/src/main/java/it/cnr/isti/workflow/manager/executions/steps/Step.java @@ -341,14 +341,6 @@ public class Step implements InputListener { return !this.dependencyIds.isEmpty() ? this.satisfiedDependencyIds.containsAll(this.dependencyIds) : true; } - public synchronized boolean hasDependencies() { - return !this.dependencyIds.isEmpty(); - } - - public synchronized boolean areInputsSatisfied() { - return this.inputs.stream().allMatch(Input::isSet); - } - public synchronized List> getDependentSteps() { return List.copyOf(this.dependentSteps); } @@ -453,10 +445,6 @@ public class Step implements InputListener { return this.containerContinuation == null ? null : this.containerContinuation.copy(); } - public synchronized void clearContainerContinuation() { - this.containerContinuation = null; - } - public synchronized void completeSuspendedContainer(NodeExecutionResult executionResult) { if (this.status != StepStatus.WAITING_FOR_SUBFLOW) { return; diff --git a/src/main/java/it/cnr/isti/workflow/manager/flows/model/FlowData.java b/src/main/java/it/cnr/isti/workflow/manager/flows/model/FlowData.java index 2bce1bf..29d19cf 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/flows/model/FlowData.java +++ b/src/main/java/it/cnr/isti/workflow/manager/flows/model/FlowData.java @@ -12,7 +12,6 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import lombok.NonNull; import lombok.Singular; @Data diff --git a/src/main/java/it/cnr/isti/workflow/manager/flows/validation/FlowDataValidator.java b/src/main/java/it/cnr/isti/workflow/manager/flows/validation/FlowDataValidator.java index 17ecaa0..76c55ed 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/flows/validation/FlowDataValidator.java +++ b/src/main/java/it/cnr/isti/workflow/manager/flows/validation/FlowDataValidator.java @@ -17,7 +17,6 @@ import it.cnr.isti.workflow.manager.blocks.configurations.EndBlockConfiguration; import it.cnr.isti.workflow.manager.blocks.configurations.BranchRejoinBlockConfiguration; import it.cnr.isti.workflow.manager.blocks.factories.BlockFactory; import it.cnr.isti.workflow.manager.blocks.factories.ConditionalBlockFactory; -import it.cnr.isti.workflow.manager.blocks.factories.SwitchBlockFactory; import it.cnr.isti.workflow.manager.blocks.types.ConditionalBlockType; import it.cnr.isti.workflow.manager.blocks.types.BranchRejoinBlockType; import it.cnr.isti.workflow.manager.blocks.types.HumanDecisionBlockType; diff --git a/src/main/java/it/cnr/isti/workflow/manager/llms/ModelDescriptor.java b/src/main/java/it/cnr/isti/workflow/manager/llms/ModelDescriptor.java deleted file mode 100644 index 844139e..0000000 --- a/src/main/java/it/cnr/isti/workflow/manager/llms/ModelDescriptor.java +++ /dev/null @@ -1,27 +0,0 @@ -package it.cnr.isti.workflow.manager.llms; - -import java.util.List; -import java.util.Map; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; - -@Data -@AllArgsConstructor -@Builder -public class ModelDescriptor { - - private String id; - private String name; - private String provider; - private String modelVersion; - private String apiUrl; - private String apiType; - private String accessMethod; - private List modality; - private int contextLength; - private Map customProperties; - - // Getters/setters/constructors -} diff --git a/src/main/java/it/cnr/isti/workflow/manager/mcp/MCPSharedSessionRegistry.java b/src/main/java/it/cnr/isti/workflow/manager/mcp/MCPSharedSessionRegistry.java index b2867f9..b857925 100644 --- a/src/main/java/it/cnr/isti/workflow/manager/mcp/MCPSharedSessionRegistry.java +++ b/src/main/java/it/cnr/isti/workflow/manager/mcp/MCPSharedSessionRegistry.java @@ -56,16 +56,4 @@ public final class MCPSharedSessionRegistry { public static boolean isManagedSharedSession(Map descriptors, String key) { return getSessionDescriptor(descriptors, key) != null; } - - public static Set sharedKeys(Map descriptors) { - if (descriptors == null || descriptors.isEmpty()) { - return Set.of(); - } - LinkedHashSet keys = new LinkedHashSet<>(); - descriptors.values().stream() - .map(ExecutionVariableRegistry::normalize) - .filter(descriptor -> descriptor.getKind() == ExecutionVariableKind.MCP_SESSION) - .forEach(descriptor -> keys.add(descriptor.getName())); - return Set.copyOf(keys); - } } diff --git a/src/test/java/it/cnr/isti/workflow/manager/controllers/SecureRetrieverControllerTest.java b/src/test/java/it/cnr/isti/workflow/manager/controllers/SecureRetrieverControllerTest.java index c979bc8..36e8f25 100644 --- a/src/test/java/it/cnr/isti/workflow/manager/controllers/SecureRetrieverControllerTest.java +++ b/src/test/java/it/cnr/isti/workflow/manager/controllers/SecureRetrieverControllerTest.java @@ -1,6 +1,5 @@ package it.cnr.isti.workflow.manager.controllers; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/src/test/java/it/cnr/isti/workflow/manager/executions/AuthServicePasswordTest.java b/src/test/java/it/cnr/isti/workflow/manager/executions/AuthServicePasswordTest.java index 407f700..a30316d 100644 --- a/src/test/java/it/cnr/isti/workflow/manager/executions/AuthServicePasswordTest.java +++ b/src/test/java/it/cnr/isti/workflow/manager/executions/AuthServicePasswordTest.java @@ -1,8 +1,6 @@ package it.cnr.isti.workflow.manager.executions; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/test/java/it/cnr/isti/workflow/manager/flows/FlowTestCreator.java b/src/test/java/it/cnr/isti/workflow/manager/flows/FlowTestCreator.java index ad08ceb..25d9595 100644 --- a/src/test/java/it/cnr/isti/workflow/manager/flows/FlowTestCreator.java +++ b/src/test/java/it/cnr/isti/workflow/manager/flows/FlowTestCreator.java @@ -1,8 +1,6 @@ package it.cnr.isti.workflow.manager.flows; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.context.annotation.Import; import org.springframework.stereotype.Service; import it.cnr.isti.workflow.manager.blocks.Block; @@ -12,7 +10,6 @@ import it.cnr.isti.workflow.manager.blocks.factories.HumanInteractiveBlockFactor import it.cnr.isti.workflow.manager.blocks.factories.LLMBlockFactory; import it.cnr.isti.workflow.manager.blocks.types.HumanInteractionBlockType; import it.cnr.isti.workflow.manager.blocks.types.LLMBlockType; -import it.cnr.isti.workflow.manager.blocks.types.SourceBlockType; import it.cnr.isti.workflow.manager.flows.model.Connection; import it.cnr.isti.workflow.manager.flows.model.Flow; import it.cnr.isti.workflow.manager.llms.LLMDescriptor;