Skip to content

Commit

Permalink
runtime-v2: hasFlow function (#813)
Browse files Browse the repository at this point in the history
  • Loading branch information
brig authored Oct 9, 2023
1 parent 0c6e705 commit 2534434
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ private static FunctionMapper createFunctionMapper() {
functions.put("evalAsMap", EvalAsMapFunction.getMethod());
functions.put("isDebug", IsDebugFunction.getMethod());
functions.put("throw", ThrowFunction.getMethod());
functions.put("hasFlow", HasFlowFunction.getMethod());
functions.put("uuid", UuidFunction.getMethod());
return new FunctionMapper(functions);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.walmartlabs.concord.runtime.v2.runner.el.functions;

/*-
* *****
* Concord
* -----
* Copyright (C) 2017 - 2023 Walmart Inc.
* -----
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* =====
*/

import com.walmartlabs.concord.runtime.v2.model.ProcessDefinition;
import com.walmartlabs.concord.runtime.v2.model.Profile;
import com.walmartlabs.concord.runtime.v2.runner.el.ThreadLocalEvalContext;
import com.walmartlabs.concord.runtime.v2.sdk.Context;

import java.lang.reflect.Method;

public final class HasFlowFunction {

public static Method getMethod() {
try {
return HasFlowFunction.class.getMethod("hasFlow", String.class);
} catch (Exception e) {
throw new RuntimeException("Method not found");
}
}

public static boolean hasFlow(String name) {
if (name == null || name.trim().isEmpty()) {
return false;
}

Context ctx = ThreadLocalEvalContext.get().context();
if (ctx == null) {
return false;
}

ProcessDefinition pd = ctx.execution().processDefinition();
if (pd.flows().containsKey(name)) {
return true;
}

for (String activeProfile : ctx.processConfiguration().processInfo().activeProfiles()) {
boolean fromProfile = pd.profiles().getOrDefault(activeProfile, Profile.builder().build()).flows().containsKey(name);
if (fromProfile) {
return true;
}
}
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1530,6 +1530,18 @@ public void testArrayEvalSerialize() throws Exception {
assertLog(log, ".*" + Pattern.quote("{dev=dev-cloud1}, {prod=prod-cloud1}, {test=test-cloud1}, {perf=perf-cloud2}, {ci=perf-ci}") + ".*");
}

@Test
public void testHasFlow() throws Exception {
deploy("hasFlow");

save(ProcessConfiguration.builder()
.build());

byte[] log = run();
assertLog(log, ".*123: false.*");
assertLog(log, ".*myFlow: true.*");
}

@Test
public void testUuidFunc() throws Exception {
deploy("uuid");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
flows:
default:
- log: "123: ${hasFlow('123')}"
- log: "myFlow: ${hasFlow('myFlow')}"

myFlow:
- log: "my"

0 comments on commit 2534434

Please sign in to comment.