diff --git a/application-engine/src/main/java/com/netgrif/application/engine/importer/service/Importer.java b/application-engine/src/main/java/com/netgrif/application/engine/importer/service/Importer.java index b52ee3581b..524ab8c4b3 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/importer/service/Importer.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/importer/service/Importer.java @@ -54,6 +54,8 @@ import java.nio.file.Path; import java.util.*; import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; @Slf4j @@ -67,6 +69,8 @@ public class Importer { public static final String DEFAULT_FIELD_TEMPLATE = "material"; public static final String DEFAULT_FIELD_APPEARANCE = "outline"; public static final String DEFAULT_FIELD_ALIGNMENT = null; + public static final String PLUGIN_STRING_REGEX = "(?<=\\bPlugin\\.)[^.]+"; + public static final Pattern PLUGIN_STRING_PATTERN = Pattern.compile(PLUGIN_STRING_REGEX); @Getter protected Document document; @@ -222,6 +226,7 @@ protected Optional createPetriNet() throws MissingPetriNetMetaDataExce resolveCaseEvents(document.getCaseEvents()); evaluateFunctions(); actions.forEach(this::evaluateActions); + net.setPluginDependencies(extractPluginDependencies()); if (document.getCaseName() != null && document.getCaseName().isDynamic()) { net.setDefaultCaseNameExpression(new Expression(document.getCaseName().getValue())); @@ -1343,4 +1348,15 @@ protected Map buildTagsMap(List tagsList) { } return tags; } + + protected Set extractPluginDependencies() { + HashSet plugins = new HashSet<>(); + for (Action action: this.actions.values()) { + Matcher matcher = PLUGIN_STRING_PATTERN.matcher(action.getDefinition()); + while (matcher.find()) { + plugins.add(matcher.group(0)); + } + } + return plugins; + } } diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/PetriNet.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/PetriNet.java index a8b2fa447c..a3254a8171 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/PetriNet.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/PetriNet.java @@ -134,6 +134,10 @@ public abstract class PetriNet extends PetriNetObject { @Setter private Map tags; + @Getter + @Setter + private Set pluginDependencies; + public PetriNet() { this._id = new ObjectId(); this.identifier = "Default"; @@ -157,6 +161,7 @@ public PetriNet() { userRefs = new HashMap<>(); functions = new LinkedList<>(); tags = new HashMap<>(); + pluginDependencies = new HashSet<>(); } public PetriNet(PetriNet petriNet) { @@ -192,6 +197,10 @@ public PetriNet(PetriNet petriNet) { this.defaultRoleEnabled = petriNet.isDefaultRoleEnabled(); this.anonymousRoleEnabled = petriNet.isAnonymousRoleEnabled(); this.author = petriNet.getAuthor(); + Set sourcePlugins = petriNet.getPluginDependencies(); + this.pluginDependencies = sourcePlugins != null + ? new HashSet<>(sourcePlugins) + : new HashSet<>(); initializeArcs(); }