From ea459955e11bb6195330959e7acf851d44008f87 Mon Sep 17 00:00:00 2001 From: marijahorvat171 Date: Fri, 28 Nov 2025 08:34:21 +0100 Subject: [PATCH 1/4] 2815 - add hidden property --- .../components/liferay/build.gradle.kts | 3 -- .../liferay/util/LiferayPropertiesUtils.java | 53 ++++++++++++------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/server/libs/modules/components/liferay/build.gradle.kts b/server/libs/modules/components/liferay/build.gradle.kts index c1219060de4..bf2a7f56ed1 100644 --- a/server/libs/modules/components/liferay/build.gradle.kts +++ b/server/libs/modules/components/liferay/build.gradle.kts @@ -1,5 +1,2 @@ version="1.0" -dependencies { - implementation("com.github.ben-manes.caffeine:caffeine") -} diff --git a/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java b/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java index 156d336225a..3ed745bca15 100644 --- a/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java +++ b/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java @@ -27,9 +27,8 @@ import com.bytechef.component.definition.ActionContext; import com.bytechef.component.definition.ComponentDsl.ModifiableValueProperty; import com.bytechef.component.definition.Context.Http.ResponseType; +import com.bytechef.component.definition.Property; import com.bytechef.component.definition.TypeReference; -import com.github.benmanes.caffeine.cache.Cache; -import com.github.benmanes.caffeine.cache.Caffeine; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -42,23 +41,15 @@ */ public class LiferayPropertiesUtils { - private static final Cache PROPERTIES_CONTAINER_CACHE = - Caffeine.newBuilder() - .expireAfterAccess(10, TimeUnit.MINUTES) - .maximumSize(1000) - .build(); - private LiferayPropertiesUtils() { } public static PropertiesContainer createPropertiesForParameters( String application, String endpoint, ActionContext context) { - String applicationOpenApiUrl = "/o/" + application + "/openapi.json"; - String applicationEndpointCacheKey = application + "/" + endpoint; + String url = "/o/" + application + "/openapi.json"; - return PROPERTIES_CONTAINER_CACHE.get( - applicationEndpointCacheKey, key -> getPropertiesContainer(applicationOpenApiUrl, endpoint, context)); + return getPropertiesContainer(url, endpoint, context); } private static List> extractPropertiesFromSchema( @@ -197,6 +188,24 @@ private static List> extractPropertiesFromSchema( }; } + private static ModifiableValueProperty createHiddenProperty( + List bodyParameters, + List headerParameters, + List pathParameters, + List queryParameters) { + + Map> hiddenMap = Map.of( + "body", bodyParameters, + "header", headerParameters, + "path", pathParameters, + "query", queryParameters + ); + + return array("hiddenProperties") + .hidden(true) + .defaultValue(hiddenMap); + } + private static PropertiesContainer getPropertiesContainer(String url, String endpoint, ActionContext context) { Map body = context.http(http -> http.get(url)) .configuration(responseType(ResponseType.JSON)) @@ -264,13 +273,17 @@ private static PropertiesContainer getPropertiesContainer(String url, String end List pathParameters = new ArrayList<>(); List queryParameters = new ArrayList<>(); - return new PropertiesContainer( - new ArrayList<>( - parameters.stream() - .map(parameterMap -> createProperty( - parameterMap, bodyParameters, headerParameters, pathParameters, queryParameters)) - .filter(Objects::nonNull) - .toList()), - bodyParameters, headerParameters, pathParameters, queryParameters); + List> properties = new ArrayList<> (parameters.stream() + .map(parameterMap -> createProperty( + parameterMap, bodyParameters, headerParameters, pathParameters, queryParameters)) + .filter(Objects::nonNull) + .toList()); + + properties.add(createHiddenProperty(bodyParameters, headerParameters, pathParameters, queryParameters)); + properties.add(string("test") + .hidden(true) + .defaultValue("test")); + + return new PropertiesContainer(properties, bodyParameters, headerParameters, pathParameters, queryParameters); } } From b8fef6233a77904523f3c2cc0e07fe34568a436d Mon Sep 17 00:00:00 2001 From: marijahorvat171 Date: Mon, 1 Dec 2025 09:12:47 +0100 Subject: [PATCH 2/4] 2815 - change array to object type --- .../component/liferay/util/LiferayPropertiesUtils.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java b/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java index 3ed745bca15..c4e4414a670 100644 --- a/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java +++ b/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java @@ -194,14 +194,14 @@ private static List> extractPropertiesFromSchema( List pathParameters, List queryParameters) { - Map> hiddenMap = Map.of( + Map hiddenMap = Map.of( "body", bodyParameters, "header", headerParameters, "path", pathParameters, "query", queryParameters ); - return array("hiddenProperties") + return object("hiddenProperties") .hidden(true) .defaultValue(hiddenMap); } @@ -280,9 +280,6 @@ private static PropertiesContainer getPropertiesContainer(String url, String end .toList()); properties.add(createHiddenProperty(bodyParameters, headerParameters, pathParameters, queryParameters)); - properties.add(string("test") - .hidden(true) - .defaultValue("test")); return new PropertiesContainer(properties, bodyParameters, headerParameters, pathParameters, queryParameters); } From 4358e697e0d3072530e834b40f424baa7a695e40 Mon Sep 17 00:00:00 2001 From: marijahorvat171 Date: Mon, 1 Dec 2025 10:33:42 +0100 Subject: [PATCH 3/4] 2815 - changes after spotlessApply --- .../liferay/util/LiferayPropertiesUtils.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java b/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java index c4e4414a670..497842f1270 100644 --- a/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java +++ b/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java @@ -34,7 +34,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.TimeUnit; /** * @author Marija Horvat @@ -198,8 +197,7 @@ private static List> extractPropertiesFromSchema( "body", bodyParameters, "header", headerParameters, "path", pathParameters, - "query", queryParameters - ); + "query", queryParameters); return object("hiddenProperties") .hidden(true) @@ -273,11 +271,11 @@ private static PropertiesContainer getPropertiesContainer(String url, String end List pathParameters = new ArrayList<>(); List queryParameters = new ArrayList<>(); - List> properties = new ArrayList<> (parameters.stream() - .map(parameterMap -> createProperty( - parameterMap, bodyParameters, headerParameters, pathParameters, queryParameters)) - .filter(Objects::nonNull) - .toList()); + List> properties = new ArrayList<>(parameters.stream() + .map(parameterMap -> createProperty( + parameterMap, bodyParameters, headerParameters, pathParameters, queryParameters)) + .filter(Objects::nonNull) + .toList()); properties.add(createHiddenProperty(bodyParameters, headerParameters, pathParameters, queryParameters)); From 6d3bafaaf6b4e4282ad5da9bbdb267ab1be945c8 Mon Sep 17 00:00:00 2001 From: marijahorvat171 Date: Fri, 12 Dec 2025 15:45:37 +0100 Subject: [PATCH 4/4] 2815 - update headless action --- .../liferay/action/LiferayHeadlessAction.java | 67 ++++++++++++------- .../liferay/constant/LiferayConstants.java | 4 ++ .../liferay/util/LiferayPropertiesUtils.java | 23 ++++--- 3 files changed, 62 insertions(+), 32 deletions(-) diff --git a/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/action/LiferayHeadlessAction.java b/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/action/LiferayHeadlessAction.java index 39e97bab3af..e0b5efa92e7 100644 --- a/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/action/LiferayHeadlessAction.java +++ b/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/action/LiferayHeadlessAction.java @@ -24,7 +24,11 @@ import static com.bytechef.component.liferay.constant.LiferayConstants.APPLICATION; import static com.bytechef.component.liferay.constant.LiferayConstants.BODY; import static com.bytechef.component.liferay.constant.LiferayConstants.ENDPOINT; +import static com.bytechef.component.liferay.constant.LiferayConstants.HEADER; +import static com.bytechef.component.liferay.constant.LiferayConstants.HIDDEN_PROPERTIES; +import static com.bytechef.component.liferay.constant.LiferayConstants.PATH; import static com.bytechef.component.liferay.constant.LiferayConstants.PROPERTIES; +import static com.bytechef.component.liferay.constant.LiferayConstants.QUERY; import com.bytechef.component.definition.ActionContext; import com.bytechef.component.definition.ActionDefinition; @@ -88,11 +92,19 @@ public class LiferayHeadlessAction { .perform(LiferayHeadlessAction::perform); public static Object perform(Parameters inputParameters, Parameters connectionParameters, ActionContext context) { - PropertiesContainer propertiesContainer = LiferayPropertiesUtils.createPropertiesForParameters( - inputParameters.getRequiredString(APPLICATION), inputParameters.getRequiredString(ENDPOINT), - context); + Map properties = inputParameters.getMap(PROPERTIES); + if (properties == null) { + properties = Map.of(); + } + + Map hiddenProperties = (Map) properties.get(HIDDEN_PROPERTIES); + + if (hiddenProperties == null) { + hiddenProperties = Map.of(); + } + String endpoint = inputParameters.getRequiredString(ENDPOINT); String[] endpointParts = endpoint.split(" "); @@ -101,19 +113,18 @@ public static Object perform(Parameters inputParameters, Parameters connectionPa context, endpointParts[0], getEndpointUri( inputParameters, connectionParameters, endpointParts[1], - getParameterValueMap(propertiesContainer.pathParameters(), properties)) - ); + getParameterValueMap((List) hiddenProperties.get(PATH), properties))); Response response = executor.headers( - getParameterValueMap(propertiesContainer.headerParameters(), properties)) + getParameterValueMap((List) hiddenProperties.get(HEADER), properties)) .queryParameters( - getParameterValueMap(propertiesContainer.queryParameters(), properties)) + getParameterValueMap((List) hiddenProperties.get(QUERY), properties)) .configuration( Http.timeout(Duration.ofMillis(inputParameters.getInteger("timeout", 10000)))) .configuration( responseType(ResponseType.JSON)) .body( - getBody(propertiesContainer.bodyParameters(), properties, context)) + getBody((List) hiddenProperties.get(BODY), properties, context)) .execute(); return response.getBody(); @@ -127,11 +138,20 @@ private static String getEndpointUri( String endpointUri = baseUri + "/o/" + inputParameters.getRequiredString(APPLICATION) + applicationEndpoint; - for (Map.Entry entry : pathParameters.entrySet()) { - String key = entry.getKey(); - String value = String.valueOf(entry.getValue()); + if (pathParameters != null) { + for (Map.Entry entry : pathParameters.entrySet()) { + String key = entry.getKey(); + Object rawValue = entry.getValue(); - endpointUri = endpointUri.replace("{" + key + "}", value); + String value; + if (rawValue instanceof List list && !list.isEmpty()) { + value = String.valueOf(list.getFirst()); + } else { + value = String.valueOf(rawValue); + } + + endpointUri = endpointUri.replace("{" + key + "}", value); + } } return endpointUri; } @@ -139,20 +159,23 @@ private static String getEndpointUri( private static Map> getParameterValueMap( List parameterNames, Map properties) { + if (parameterNames == null) { + return Map.of(); + } + return parameterNames .stream() .filter( - properties::containsKey - ).collect( + properties::containsKey) + .collect( Collectors.toMap( - parameterName -> parameterName, - parameterName -> List.of(String.valueOf(properties.get(parameterName)))) - ); + parameterName -> parameterName, + parameterName -> List.of(String.valueOf(properties.get(parameterName))))); } private static Body getBody(List parameterNames, Map properties, Context context) { - if (properties.containsKey("body")) { - return Body.of((List) context.json(json -> json.read((String)properties.get("body")))); + if (properties.containsKey(BODY)) { + return Body.of((List) context.json(json -> json.read((String) properties.get(BODY)))); } return Body.of(parameterNames @@ -161,10 +184,8 @@ private static Body getBody(List parameterNames, Map properti properties::containsKey) .collect( Collectors.toMap( - parameterName -> parameterName, - parameterName -> String.valueOf(properties.get(parameterName))) - ) - ); + parameterName -> parameterName, + parameterName -> String.valueOf(properties.get(parameterName))))); } diff --git a/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/constant/LiferayConstants.java b/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/constant/LiferayConstants.java index 5c299db825c..e14e63707d7 100644 --- a/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/constant/LiferayConstants.java +++ b/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/constant/LiferayConstants.java @@ -33,11 +33,15 @@ public class LiferayConstants { public static final String DISCOVER = "discover"; public static final String ENDPOINT = "endpoint"; public static final String GET = "GET"; + public static final String HEADER = "header"; + public static final String HIDDEN_PROPERTIES = "hiddenProperties"; public static final String METHOD = "method"; public static final String NAME = "name"; + public static final String PATH = "path"; public static final String PARAMETERS = "parameters"; public static final String POST = "POST"; public static final String PROPERTIES = "properties"; + public static final String QUERY = "query"; public static final String SERVICE = "service"; public static final String SERVICES = "services"; public static final String TYPE = "type"; diff --git a/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java b/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java index 497842f1270..a2daef5b84c 100644 --- a/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java +++ b/server/libs/modules/components/liferay/src/main/java/com/bytechef/component/liferay/util/LiferayPropertiesUtils.java @@ -23,6 +23,11 @@ import static com.bytechef.component.definition.ComponentDsl.object; import static com.bytechef.component.definition.ComponentDsl.string; import static com.bytechef.component.definition.Context.Http.responseType; +import static com.bytechef.component.liferay.constant.LiferayConstants.BODY; +import static com.bytechef.component.liferay.constant.LiferayConstants.HEADER; +import static com.bytechef.component.liferay.constant.LiferayConstants.HIDDEN_PROPERTIES; +import static com.bytechef.component.liferay.constant.LiferayConstants.PATH; +import static com.bytechef.component.liferay.constant.LiferayConstants.QUERY; import com.bytechef.component.definition.ActionContext; import com.bytechef.component.definition.ComponentDsl.ModifiableValueProperty; @@ -140,10 +145,10 @@ private static List> extractPropertiesFromSchema( } switch (in) { - case "body" -> bodyParameters.add(name); - case "header" -> headerParameters.add(name); - case "path" -> pathParameters.add(name); - case "query" -> queryParameters.add(name); + case BODY -> bodyParameters.add(name); + case HEADER -> headerParameters.add(name); + case PATH -> pathParameters.add(name); + case QUERY -> queryParameters.add(name); default -> throw new IllegalArgumentException("Unknown parameter type: " + in); } @@ -194,12 +199,12 @@ private static List> extractPropertiesFromSchema( List queryParameters) { Map hiddenMap = Map.of( - "body", bodyParameters, - "header", headerParameters, - "path", pathParameters, - "query", queryParameters); + BODY, bodyParameters, + HEADER, headerParameters, + PATH, pathParameters, + QUERY, queryParameters); - return object("hiddenProperties") + return object(HIDDEN_PROPERTIES) .hidden(true) .defaultValue(hiddenMap); }