diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetService.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetService.java index 40c90ca20c..882821231a 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetService.java @@ -5,6 +5,7 @@ import com.netgrif.application.engine.objects.auth.domain.ActorTransformer; import com.netgrif.application.engine.configuration.properties.CacheConfigurationProperties; import com.netgrif.application.engine.files.minio.StorageConfigurationProperties; +import com.netgrif.application.engine.objects.event.events.petrinet.ProcessEvent; import com.netgrif.application.engine.objects.petrinet.domain.PetriNet; import com.netgrif.application.engine.objects.petrinet.domain.PetriNetSearch; import com.netgrif.application.engine.objects.petrinet.domain.Transition; @@ -60,6 +61,7 @@ import java.io.InputStream; import java.nio.file.Path; import java.util.*; +import java.util.function.Consumer; import java.util.stream.Collectors; import static com.netgrif.application.engine.petrinet.service.interfaces.IPetriNetService.transformToReference; @@ -208,8 +210,7 @@ public ImportPetriNetEventOutcome importPetriNet(InputStream xmlFile, VersionTyp xmlCopy.close(); log.info("Petri net " + newProcess.getTitle() + " (" + newProcess.getInitials() + " v" + newProcess.getVersion() + ") imported successfully and saved in a folder: " + savedPath.toString()); - outcome.setOutcomes(eventService.runActions(newProcess.getPreUploadActions(), null, Optional.empty(), params)); - publisher.publishEvent(new ProcessDeployEvent(outcome, EventPhase.PRE)); + runActionAndPublishEvent(outcome, null, newProcess.getPreUploadActions(), params, new ProcessDeployEvent(outcome, EventPhase.PRE)); if (processToMakeNonDefault != null) { doSaveInternal(processToMakeNonDefault); @@ -217,12 +218,31 @@ public ImportPetriNetEventOutcome importPetriNet(InputStream xmlFile, VersionTyp Optional saveProcessOpt = doSaveInternal(newProcess); functionCacheService.cachePetriNetFunctions(newProcess); - outcome.setOutcomes(eventService.runActions(newProcess.getPostUploadActions(), null, Optional.empty(), params)); - outcome.setNet(saveProcessOpt.orElseThrow()); - publisher.publishEvent(new ProcessDeployEvent(outcome, EventPhase.POST)); + runActionAndPublishEvent(outcome, saveProcessOpt.orElseThrow(), newProcess.getPostUploadActions(), params, new ProcessDeployEvent(outcome, EventPhase.POST)); + return outcome; } + + /** + * Executes a list of actions associated with a Petri net and publishes a corresponding event after execution. + * + *

This method is responsible for running the specified actions using the event service, updating the + * provided {@link ImportPetriNetEventOutcome} instance with the outcomes of the executed actions, + * setting the processed Petri net, and publishing the given event through the application event publisher.

+ * + * @param outcome the {@link ImportPetriNetEventOutcome} instance where the results of the action executions are stored + * @param saveProcess the Petri net that has been processed and potentially saved + * @param actions a list of {@link Action}s to be executed + * @param params a map of key-value pairs containing execution parameters for the actions + * @param event the {@link ProcessEvent} associated with the execution and used for event publication + */ + protected void runActionAndPublishEvent(ImportPetriNetEventOutcome outcome, PetriNet saveProcess, List actions, Map params, ProcessEvent event) { + outcome.setOutcomes(eventService.runActions(actions, null, Optional.empty(), params)); + outcome.setNet(saveProcess); + publisher.publishEvent(event); + } + /** * Validates the version of an importing process. This method can update 'newProces': initialize version, * initialize default version attribute. This method can also update the current default version of the process if needed. diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java index da2ef6f24e..84d9ca8b62 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java @@ -208,7 +208,7 @@ public List findAllByIds(Collection collection) @Override public List saveAll(Collection entities) { return StreamSupport.stream(entities.spliterator(), false).map(processRole -> { - if (!processRole.isGlobal() || processRoleRepository.findByImportId(processRole.getImportId()).isEmpty()) { + if (!processRole.isGlobal() || findAllByImportId(processRole.getImportId(), Pageable.ofSize(1)).isEmpty()) { return processRoleRepository.save(processRole); } return null; diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/configuration/AbstractMongoIndexesConfigurator.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/configuration/AbstractMongoIndexesConfigurator.java index 98e3acbd65..cf1fba160b 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/configuration/AbstractMongoIndexesConfigurator.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/configuration/AbstractMongoIndexesConfigurator.java @@ -51,7 +51,7 @@ public void resolveIndexes(String collectionName, Class collectionType) { } addAnnotatedFields(collectionType, indexDefinitions); addConfiguredFields(collectionType, indexDefinitions); - indexDefinitions.forEach(indexOps::ensureIndex); + indexDefinitions.forEach(indexOps::createIndex); } private void addAnnotatedFields(Class collectionType, List indexDefinitions) {