From 7bceea8fb8d673c10389679c76ff95732fe6ec06 Mon Sep 17 00:00:00 2001 From: Dominik Przybyl Date: Mon, 6 Nov 2023 15:49:03 +0100 Subject: [PATCH 1/5] remove custom definitions --- .../apm/api/services/ScriptManager.java | 26 +----------- .../core/endpoints/DefinitionsServlet.java | 6 +-- .../core/endpoints/ScriptExecutionForm.java | 9 ---- .../endpoints/ScriptExecutionServlet.java | 4 +- .../params/RequestParameterInjector.java | 29 ++++--------- .../core/jobs/ScriptRunnerJobConsumer.java | 23 ++++------ .../scripts/DefaultDefinitionsProvider.java | 4 +- .../apm/core/scripts/ScriptManagerImpl.java | 42 ++++++------------- .../services/async/AsyncScriptExecutor.java | 3 +- .../async/AsyncScriptExecutorImpl.java | 7 +--- .../apm/core/ui/models/ReferencesModel.java | 6 +-- 11 files changed, 41 insertions(+), 118 deletions(-) diff --git a/app/aem/api/src/main/java/com/cognifide/apm/api/services/ScriptManager.java b/app/aem/api/src/main/java/com/cognifide/apm/api/services/ScriptManager.java index dc6886def..d64ea8a7c 100644 --- a/app/aem/api/src/main/java/com/cognifide/apm/api/services/ScriptManager.java +++ b/app/aem/api/src/main/java/com/cognifide/apm/api/services/ScriptManager.java @@ -20,14 +20,13 @@ package com.cognifide.apm.api.services; import com.cognifide.apm.api.scripts.Script; -import java.util.Collections; -import java.util.Map; import javax.jcr.RepositoryException; import org.apache.sling.api.resource.PersistenceException; import org.apache.sling.api.resource.ResourceResolver; public interface ScriptManager { + /** * Fail-safe execution of script in concrete mode (dry run, automatic execution, validation) */ @@ -39,27 +38,6 @@ default ExecutionResult process(Script script, ExecutionMode mode, ResourceResol /** * Fail-safe execution of script in concrete mode (dry run, automatic execution, validation) */ - default ExecutionResult process(Script script, ExecutionMode mode, Map customDefinitions, ResourceResolver resolver) - throws RepositoryException, PersistenceException { - return process(script, mode, customDefinitions, resolver, resolver.getUserID()); - } - - /** - * Fail-safe execution of script in concrete mode (dry run, automatic execution, validation) - */ - default ExecutionResult process(Script script, ExecutionMode mode, ResourceResolver resolver, String executor) - throws RepositoryException, PersistenceException { - return process(script, mode, Collections.emptyMap(), resolver, executor); - } - - /** - * Fail-safe execution of script in concrete mode (dry run, automatic execution, validation) - */ - ExecutionResult process(Script script, ExecutionMode mode, Map customDefinitions, ResourceResolver resolver, String executor) + ExecutionResult process(Script script, ExecutionMode mode, ResourceResolver resolver, String executor) throws RepositoryException, PersistenceException; - - /** - * Get predefined variables accessible in script via syntax: ${definitionName} - */ - Map getPredefinedDefinitions(); } diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/DefinitionsServlet.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/DefinitionsServlet.java index f7f9b3dd8..7de4780af 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/DefinitionsServlet.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/DefinitionsServlet.java @@ -19,7 +19,7 @@ */ package com.cognifide.apm.core.endpoints; -import com.cognifide.apm.api.services.ScriptManager; +import com.cognifide.apm.api.services.DefinitionsProvider; import com.cognifide.apm.core.Property; import com.cognifide.apm.core.utils.ServletUtils; import java.io.IOException; @@ -42,10 +42,10 @@ public class DefinitionsServlet extends SlingAllMethodsServlet { @Reference - private ScriptManager scriptManager; + private DefinitionsProvider definitionsProvider; @Override protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException { - ServletUtils.writeJson(response, scriptManager.getPredefinedDefinitions()); + ServletUtils.writeJson(response, definitionsProvider.getPredefinedDefinitions()); } } diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionForm.java index ca873f710..b974544ca 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionForm.java @@ -22,7 +22,6 @@ import com.cognifide.apm.api.services.ExecutionMode; import com.cognifide.apm.core.endpoints.params.RequestParameter; -import java.util.Map; import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @@ -42,10 +41,6 @@ public class ScriptExecutionForm { @RequestParameter("async") private boolean async; - @Inject - @RequestParameter("define") - private Map customDefinitions; - public String getScript() { return script; } @@ -57,8 +52,4 @@ public ExecutionMode getExecutionMode() { public boolean isAsync() { return async; } - - public Map getCustomDefinitions() { - return customDefinitions; - } } diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionServlet.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionServlet.java index 95606657f..20b30c98c 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionServlet.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionServlet.java @@ -123,13 +123,13 @@ private ResponseEntity executeScript(ScriptExecutionForm form, ResourceResolver } private ResponseEntity asyncExecute(Script script, ScriptExecutionForm form, String executor) { - String id = asyncScriptExecutor.process(script, form.getExecutionMode(), form.getCustomDefinitions(), executor); + String id = asyncScriptExecutor.process(script, form.getExecutionMode(), executor); return ResponseEntity.ok("Script successfully queued for async execution") .addEntry("id", id); } private ResponseEntity syncExecute(Script script, ScriptExecutionForm form, ResourceResolver resourceResolver, String executor) throws PersistenceException, RepositoryException { - ExecutionResult result = scriptManager.process(script, form.getExecutionMode(), form.getCustomDefinitions(), resourceResolver, executor); + ExecutionResult result = scriptManager.process(script, form.getExecutionMode(), resourceResolver, executor); if (result.isSuccess()) { return ResponseEntity.ok("Script successfully executed") .addEntry("output", result.getEntries()); diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java index 3282fdc0c..1a32de70f 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java @@ -24,14 +24,12 @@ import java.io.IOException; import java.io.InputStream; import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.time.OffsetDateTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; -import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.apache.sling.api.SlingHttpServletRequest; @@ -60,13 +58,9 @@ public String getName() { public Object getValue(Object adaptable, String fieldName, Type type, AnnotatedElement annotatedElement, DisposalCallbackRegistry disposalCallbackRegistry) { if (adaptable instanceof SlingHttpServletRequest) { RequestParameter annotation = annotatedElement.getAnnotation(RequestParameter.class); - if (annotation != null) { - String parameterName = annotation.value(); - if (type instanceof ParameterizedType && ((ParameterizedType) type).getRawType() instanceof Class && Map.class.isAssignableFrom((Class) ((ParameterizedType) type).getRawType())) { - return extractParams((SlingHttpServletRequest) adaptable, parameterName); - } else if (type instanceof Class) { - return getValue((SlingHttpServletRequest) adaptable, (Class) type, parameterName, annotatedElement); - } + if (annotation != null && type instanceof Class) { + String parameterName = StringUtils.defaultString(annotation.value(), fieldName); + return getValue((SlingHttpServletRequest) adaptable, (Class) type, parameterName, annotatedElement); } } return null; @@ -92,7 +86,9 @@ private Object getValue(SlingHttpServletRequest request, Class type, String p if (parameterValue.getString().contains(",")) { return parameterValue.getString().split(","); } else { - return Arrays.stream(request.getRequestParameters(parameterName)) + return Optional.ofNullable(request.getRequestParameters(parameterName)) + .map(Arrays::stream) + .orElse(Stream.empty()) .map(org.apache.sling.api.request.RequestParameter::getString) .toArray(String[]::new); } @@ -115,17 +111,6 @@ private Object toEnum(Class type, org.apache.sling.api.request.RequestParamet .orElse(null); } - private Map extractParams(SlingHttpServletRequest request, String prefix) { - return request.getParameterMap() - .entrySet() - .stream() - .filter(entry -> StringUtils.startsWith(entry.getKey(), prefix)) - .collect(Collectors.toMap( - entry -> StringUtils.uncapitalize(StringUtils.removeStart(entry.getKey(), prefix)), - entry -> entry.getValue()[0] - )); - } - private OffsetDateTime toOffsetDateTime(org.apache.sling.api.request.RequestParameter parameterValue) { return OffsetDateTime.parse(parameterValue.getString(), DateTimeFormatter.ISO_OFFSET_DATE_TIME); } diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/jobs/ScriptRunnerJobConsumer.java b/app/aem/core/src/main/java/com/cognifide/apm/core/jobs/ScriptRunnerJobConsumer.java index 6e36f827c..3e819947a 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/jobs/ScriptRunnerJobConsumer.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/jobs/ScriptRunnerJobConsumer.java @@ -29,7 +29,6 @@ import com.cognifide.apm.core.services.ResourceResolverProvider; import com.cognifide.apm.core.services.async.AsyncScriptExecutorImpl; import com.cognifide.apm.core.utils.sling.SlingHelper; -import java.util.Collections; import java.util.Map; import javax.jcr.RepositoryException; import org.apache.commons.lang3.StringUtils; @@ -45,7 +44,7 @@ ) public class ScriptRunnerJobConsumer { - private static final Logger LOG = LoggerFactory.getLogger(ScriptRunnerJobConsumer.class); + private static final Logger LOGGER = LoggerFactory.getLogger(ScriptRunnerJobConsumer.class); @Reference private History history; @@ -63,7 +62,7 @@ public class ScriptRunnerJobConsumer { private ResourceResolverProvider resolverProvider; public void process(Map properties) { - LOG.info("Script runner properties consumer started"); + LOGGER.info("Script runner properties consumer started"); String id = (String) properties.get(AsyncScriptExecutorImpl.ID); ExecutionMode mode = getMode(properties); String userId = getUserId(properties); @@ -71,11 +70,11 @@ public void process(Map properties) { Script script = getScript(properties, resolver); if (script != null && mode != null) { try { - ExecutionResult executionResult = scriptManager.process(script, mode, getDefinitions(properties), resolver, userId); + ExecutionResult executionResult = scriptManager.process(script, mode, resolver, userId); String summaryPath = getSummaryPath(resolver, script, mode); jobResultsCache.put(id, ExecutionSummary.finished(executionResult, summaryPath)); } catch (RepositoryException | PersistenceException e) { - LOG.error("Script manager failed to process script", e); + LOGGER.error("Script manager failed to process script", e); } } }); @@ -96,30 +95,22 @@ private ExecutionMode getMode(Map properties) { if (StringUtils.isNotBlank(modeName)) { result = StringUtils.isEmpty(modeName) ? ExecutionMode.DRY_RUN : ExecutionMode.valueOf(modeName.toUpperCase()); } else { - LOG.error("Mode is null"); + LOGGER.error("Mode is null"); } return result; } - private Map getDefinitions(Map properties) { - Map definitions = (Map) properties.get(AsyncScriptExecutorImpl.DEFINITIONS); - if (definitions == null) { - definitions = Collections.emptyMap(); - } - return definitions; - } - private Script getScript(Map properties, ResourceResolver resolver) { String scriptSearchPath = (String) properties.get(AsyncScriptExecutorImpl.SCRIPT_PATH); if (StringUtils.isNotBlank(scriptSearchPath)) { Script script = scriptFinder.find(scriptSearchPath, resolver); if (script == null) { - LOG.error("Script not found: {}", scriptSearchPath); + LOGGER.error("Script not found: {}", scriptSearchPath); return null; } return script; } else { - LOG.error("Script search path is blank"); + LOGGER.error("Script search path is blank"); return null; } } diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/scripts/DefaultDefinitionsProvider.java b/app/aem/core/src/main/java/com/cognifide/apm/core/scripts/DefaultDefinitionsProvider.java index 8356c8415..cb6a90747 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/scripts/DefaultDefinitionsProvider.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/scripts/DefaultDefinitionsProvider.java @@ -24,12 +24,12 @@ import java.util.Map; import org.osgi.service.component.annotations.Component; -@Component +@Component(service = DefinitionsProvider.class) public class DefaultDefinitionsProvider implements DefinitionsProvider { @Override public Map getPredefinedDefinitions() { - final Map definitions = new HashMap<>(); + Map definitions = new HashMap<>(); // Modules definitions.put("Websites", "/libs/wcm/core/content/siteadmin"); diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/scripts/ScriptManagerImpl.java b/app/aem/core/src/main/java/com/cognifide/apm/core/scripts/ScriptManagerImpl.java index 00881baf8..5493df9fa 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/scripts/ScriptManagerImpl.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/scripts/ScriptManagerImpl.java @@ -48,10 +48,7 @@ import com.cognifide.apm.core.services.version.VersionService; import com.cognifide.apm.core.utils.RuntimeUtils; import java.util.Arrays; -import java.util.HashMap; import java.util.Map; -import java.util.Set; -import java.util.concurrent.CopyOnWriteArraySet; import javax.jcr.RepositoryException; import javax.jcr.Session; import org.apache.jackrabbit.api.JackrabbitSession; @@ -59,8 +56,6 @@ import org.apache.sling.api.resource.ResourceResolver; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; -import org.osgi.service.component.annotations.ReferenceCardinality; -import org.osgi.service.component.annotations.ReferencePolicy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -72,7 +67,7 @@ ) public class ScriptManagerImpl implements ScriptManager { - private static final Logger LOG = LoggerFactory.getLogger(ScriptManagerImpl.class); + private static final Logger LOGGER = LoggerFactory.getLogger(ScriptManagerImpl.class); @Reference private ActionFactory actionFactory; @@ -90,17 +85,13 @@ public class ScriptManagerImpl implements ScriptManager { private History history; @Reference - private DataSourceInvoker dataSourceInvoker; + private DefinitionsProvider definitionsProvider; - @Reference( - cardinality = ReferenceCardinality.MULTIPLE, - policy = ReferencePolicy.DYNAMIC, - service = DefinitionsProvider.class - ) - private final Set definitionsProviders = new CopyOnWriteArraySet<>(); + @Reference + private DataSourceInvoker dataSourceInvoker; - private Progress execute(Script script, ExecutionMode mode, Map customDefinitions, - ResourceResolver resolver, String executor) throws ExecutionException, RepositoryException { + private Progress execute(Script script, ExecutionMode mode, ResourceResolver resolver, String executor) + throws ExecutionException, RepositoryException { if (script == null) { throw new ExecutionException("Script is not specified"); } @@ -111,7 +102,7 @@ private Progress execute(Script script, ExecutionMode mode, Map String path = script.getPath(); - LOG.info(String.format("Script execution started: %s [%s]", path, mode)); + LOGGER.info(String.format("Script execution started: %s [%s]", path, mode)); Progress progress = new ProgressImpl(executor); ActionExecutor actionExecutor = createExecutor(mode, resolver); Context context = actionExecutor.getContext(); @@ -132,16 +123,14 @@ private Progress execute(Script script, ExecutionMode mode, Map } return result.getStatus(); } catch (RepositoryException | ActionCreationException e) { - LOG.error("Error while processing command: {}", commandName, e); + LOGGER.error("Error while processing command: {}", commandName, e); progress.addEntry(Status.ERROR, e.getMessage(), commandName); return Status.ERROR; } }, dataSourceInvoker); try { - Map definitions = new HashMap<>(); - definitions.putAll(getPredefinedDefinitions()); - definitions.putAll(customDefinitions); + Map definitions = definitionsProvider.getPredefinedDefinitions(); scriptRunner.execute(script, progress, definitions); } catch (RuntimeException e) { progress.addEntry(Status.ERROR, e.getMessage()); @@ -153,11 +142,11 @@ private Progress execute(Script script, ExecutionMode mode, Map } @Override - public Progress process(Script script, ExecutionMode mode, Map customDefinitions, - ResourceResolver resolver, String executor) throws RepositoryException, PersistenceException { + public Progress process(Script script, ExecutionMode mode, ResourceResolver resolver, String executor) + throws RepositoryException, PersistenceException { Progress progress; try { - progress = execute(script, mode, customDefinitions, resolver, executor); + progress = execute(script, mode, resolver, executor); } catch (ExecutionException e) { progress = new ProgressImpl(executor); progress.addEntry(Status.ERROR, e.getMessage()); @@ -191,13 +180,6 @@ private void updateScriptProperties(Script script, ExecutionMode mode, boolean s } } - @Override - public Map getPredefinedDefinitions() { - Map predefinedDefinitions = new HashMap<>(); - definitionsProviders.forEach(provider -> predefinedDefinitions.putAll(provider.getPredefinedDefinitions())); - return predefinedDefinitions; - } - private ActionExecutor createExecutor(ExecutionMode mode, ResourceResolver resolver) throws RepositoryException { boolean compositeNodeStore = RuntimeUtils.determineCompositeNodeStore(resolver); Context context = new ContextImpl((JackrabbitSession) resolver.adaptTo(Session.class), compositeNodeStore); diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/services/async/AsyncScriptExecutor.java b/app/aem/core/src/main/java/com/cognifide/apm/core/services/async/AsyncScriptExecutor.java index 2c15006c0..4f6a3b9cb 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/services/async/AsyncScriptExecutor.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/services/async/AsyncScriptExecutor.java @@ -21,11 +21,10 @@ import com.cognifide.apm.api.scripts.Script; import com.cognifide.apm.api.services.ExecutionMode; -import java.util.Map; public interface AsyncScriptExecutor { - String process(Script script, ExecutionMode executionMode, Map customDefinitions, String executor); + String process(Script script, ExecutionMode executionMode, String executor); ExecutionStatus checkStatus(String id); } diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/services/async/AsyncScriptExecutorImpl.java b/app/aem/core/src/main/java/com/cognifide/apm/core/services/async/AsyncScriptExecutorImpl.java index 4f0995385..688a3a909 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/services/async/AsyncScriptExecutorImpl.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/services/async/AsyncScriptExecutorImpl.java @@ -47,8 +47,6 @@ public class AsyncScriptExecutorImpl implements AsyncScriptExecutor { public static final String USER_ID = "userName"; - public static final String DEFINITIONS = "definitions"; - public static final String ID = "id"; @Reference @@ -58,14 +56,13 @@ public class AsyncScriptExecutorImpl implements AsyncScriptExecutor { private JobResultsCache jobResultsCache; @Override - public String process(Script script, ExecutionMode executionMode, Map customDefinitions, String executor) { + public String process(Script script, ExecutionMode executionMode, String executor) { String id = UUID.randomUUID().toString(); Map properties = ImmutableMap.of( ID, id, SCRIPT_PATH, script.getPath(), EXECUTION_MODE, executionMode.toString(), - USER_ID, executor, - DEFINITIONS, customDefinitions + USER_ID, executor ); jobResultsCache.put(id, ExecutionSummary.running()); new Thread(() -> scriptRunnerJobConsumer.process(properties)).start(); diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/ui/models/ReferencesModel.java b/app/aem/core/src/main/java/com/cognifide/apm/core/ui/models/ReferencesModel.java index 8940763ed..3859b58d7 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/ui/models/ReferencesModel.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/ui/models/ReferencesModel.java @@ -20,7 +20,7 @@ package com.cognifide.apm.core.ui.models; -import com.cognifide.apm.api.services.ScriptManager; +import com.cognifide.apm.api.services.DefinitionsProvider; import com.cognifide.apm.core.actions.ActionFactory; import com.cognifide.apm.core.actions.CommandDescription; import java.util.List; @@ -38,9 +38,9 @@ public class ReferencesModel { private final Map definitions; @Inject - public ReferencesModel(@OSGiService ActionFactory actionFactory, @OSGiService ScriptManager scriptManager) { + public ReferencesModel(@OSGiService ActionFactory actionFactory, @OSGiService DefinitionsProvider definitionsProvider) { this.references = actionFactory.getCommandDescriptions(); - this.definitions = scriptManager.getPredefinedDefinitions(); + this.definitions = definitionsProvider.getPredefinedDefinitions(); } public List getReferences() { From b226eb07192f985141cfc374d1e2277c1f3f20ae Mon Sep 17 00:00:00 2001 From: Dominik Przybyl Date: Mon, 6 Nov 2023 19:35:25 +0100 Subject: [PATCH 2/5] remove custom definitions --- .../main/java/com/cognifide/apm/api/services/ScriptManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/aem/api/src/main/java/com/cognifide/apm/api/services/ScriptManager.java b/app/aem/api/src/main/java/com/cognifide/apm/api/services/ScriptManager.java index d64ea8a7c..d2c2b4b08 100644 --- a/app/aem/api/src/main/java/com/cognifide/apm/api/services/ScriptManager.java +++ b/app/aem/api/src/main/java/com/cognifide/apm/api/services/ScriptManager.java @@ -26,7 +26,6 @@ public interface ScriptManager { - /** * Fail-safe execution of script in concrete mode (dry run, automatic execution, validation) */ From 1041f306fd4bcc6802c7329f45a0f16895386f8e Mon Sep 17 00:00:00 2001 From: Dominik Przybyl Date: Wed, 8 Nov 2023 11:00:36 +0100 Subject: [PATCH 3/5] remove custom definitions --- .../apm/core/endpoints/params/RequestParameterInjector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java index 1a32de70f..081427db3 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java @@ -59,7 +59,7 @@ public Object getValue(Object adaptable, String fieldName, Type type, AnnotatedE if (adaptable instanceof SlingHttpServletRequest) { RequestParameter annotation = annotatedElement.getAnnotation(RequestParameter.class); if (annotation != null && type instanceof Class) { - String parameterName = StringUtils.defaultString(annotation.value(), fieldName); + String parameterName = annotation.value(); return getValue((SlingHttpServletRequest) adaptable, (Class) type, parameterName, annotatedElement); } } From dff2a1c83a24b65219a0b5230f8f4ae9dd9e8f46 Mon Sep 17 00:00:00 2001 From: Dominik Przybyl Date: Thu, 9 Nov 2023 11:40:24 +0100 Subject: [PATCH 4/5] refactor RequestParameter annotation --- .../apm/core/crypto/ProtectTextForm.java | 4 +--- .../apm/core/endpoints/ScriptDeleteForm.java | 4 +--- .../apm/core/endpoints/ScriptExecutionForm.java | 10 +++------- .../endpoints/ScriptExecutionStatusForm.java | 4 +--- .../apm/core/endpoints/ScriptMoveForm.java | 10 +++------- .../apm/core/endpoints/ScriptUploadForm.java | 16 ++-------------- .../apm/core/endpoints/ScriptValidationForm.java | 7 ++----- .../core/endpoints/params/RequestParameter.java | 2 +- .../params/RequestParameterInjector.java | 2 +- 9 files changed, 15 insertions(+), 44 deletions(-) diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/crypto/ProtectTextForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/crypto/ProtectTextForm.java index 77ad1a8c7..2da908eb1 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/crypto/ProtectTextForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/crypto/ProtectTextForm.java @@ -21,15 +21,13 @@ package com.cognifide.apm.core.crypto; import com.cognifide.apm.core.endpoints.params.RequestParameter; -import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ProtectTextForm { - @Inject - @RequestParameter(value = "text", optional = false) + @RequestParameter(optional = false) private String text; public String getText() { diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptDeleteForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptDeleteForm.java index b367b4275..7766ed9d2 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptDeleteForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptDeleteForm.java @@ -21,15 +21,13 @@ package com.cognifide.apm.core.endpoints; import com.cognifide.apm.core.endpoints.params.RequestParameter; -import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ScriptDeleteForm { - @Inject - @RequestParameter("paths") + @RequestParameter private String[] paths; public String[] getPaths() { diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionForm.java index b974544ca..18d7a30f3 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionForm.java @@ -22,23 +22,19 @@ import com.cognifide.apm.api.services.ExecutionMode; import com.cognifide.apm.core.endpoints.params.RequestParameter; -import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ScriptExecutionForm { - @Inject - @RequestParameter(value = "script", optional = false) + @RequestParameter(optional = false) private String script; - @Inject - @RequestParameter(value = "executionMode", optional = false) + @RequestParameter(optional = false) private ExecutionMode executionMode; - @Inject - @RequestParameter("async") + @RequestParameter private boolean async; public String getScript() { diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionStatusForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionStatusForm.java index 5009eb818..a0318081f 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionStatusForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionStatusForm.java @@ -21,15 +21,13 @@ package com.cognifide.apm.core.endpoints; import com.cognifide.apm.core.endpoints.params.RequestParameter; -import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ScriptExecutionStatusForm { - @Inject - @RequestParameter(value = "id", optional = false) + @RequestParameter(optional = false) private String id; public String getId() { diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptMoveForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptMoveForm.java index dfb62aa28..1a370cc35 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptMoveForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptMoveForm.java @@ -21,23 +21,19 @@ package com.cognifide.apm.core.endpoints; import com.cognifide.apm.core.endpoints.params.RequestParameter; -import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ScriptMoveForm { - @Inject - @RequestParameter("path") + @RequestParameter private String path; - @Inject - @RequestParameter("dest") + @RequestParameter private String dest; - @Inject - @RequestParameter("rename") + @RequestParameter private String rename; public String getPath() { diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptUploadForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptUploadForm.java index f43e0519a..2121febb0 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptUploadForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptUploadForm.java @@ -28,55 +28,43 @@ import com.cognifide.apm.core.scripts.ScriptNode; import java.io.InputStream; import java.time.OffsetDateTime; -import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ScriptUploadForm { - @Inject - @RequestParameter(value = "file", optional = false) + @RequestParameter(optional = false) private InputStream file; - @Inject @RequestParameter(value = "file", optional = false) @FileName private String fileName; - @Inject - @RequestParameter("overwrite") + @RequestParameter private boolean overwrite; - @Inject @RequestParameter(ScriptNode.APM_SAVE_PATH) private String savePath; - @Inject @RequestParameter(ScriptNode.APM_LAUNCH_ENABLED) private boolean launchEnabled; - @Inject @RequestParameter(ScriptNode.APM_LAUNCH_MODE) private LaunchMode launchMode; - @Inject @RequestParameter(ScriptNode.APM_LAUNCH_ENVIRONMENT) private LaunchEnvironment launchEnvironment; - @Inject @RequestParameter(ScriptNode.APM_LAUNCH_RUN_MODES) private String[] launchRunModes; - @Inject @RequestParameter(ScriptNode.APM_LAUNCH_HOOK) private String launchHook; - @Inject @RequestParameter(ScriptNode.APM_LAUNCH_SCHEDULE) private OffsetDateTime launchSchedule; - @Inject @RequestParameter(ScriptNode.APM_LAUNCH_CRON_EXPRESSION) private String launchCronExpression; diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptValidationForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptValidationForm.java index 5fe509af2..4d192a343 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptValidationForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptValidationForm.java @@ -21,19 +21,16 @@ package com.cognifide.apm.core.endpoints; import com.cognifide.apm.core.endpoints.params.RequestParameter; -import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ScriptValidationForm { - @Inject - @RequestParameter(value = "path", optional = false) + @RequestParameter(optional = false) private String path; - @Inject - @RequestParameter(value = "content", optional = false) + @RequestParameter(optional = false) private String content; public String getPath() { diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameter.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameter.java index 86026dcb0..ab61ae310 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameter.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameter.java @@ -33,7 +33,7 @@ @Source("apm-request-parameter") public @interface RequestParameter { - String value(); + String value() default ""; boolean optional() default true; } diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java index 081427db3..057e3dfd6 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java @@ -59,7 +59,7 @@ public Object getValue(Object adaptable, String fieldName, Type type, AnnotatedE if (adaptable instanceof SlingHttpServletRequest) { RequestParameter annotation = annotatedElement.getAnnotation(RequestParameter.class); if (annotation != null && type instanceof Class) { - String parameterName = annotation.value(); + String parameterName = StringUtils.defaultIfEmpty(annotation.value(), fieldName); return getValue((SlingHttpServletRequest) adaptable, (Class) type, parameterName, annotatedElement); } } From dd19c1c9c086613cde9e768b4dee4d346720e62f Mon Sep 17 00:00:00 2001 From: Dominik Przybyl Date: Sun, 17 Mar 2024 17:36:51 +0100 Subject: [PATCH 5/5] Revert "refactor RequestParameter annotation" This reverts commit dff2a1c83a24b65219a0b5230f8f4ae9dd9e8f46. --- .../apm/core/crypto/ProtectTextForm.java | 4 +++- .../apm/core/endpoints/ScriptDeleteForm.java | 4 +++- .../apm/core/endpoints/ScriptExecutionForm.java | 10 +++++++--- .../endpoints/ScriptExecutionStatusForm.java | 4 +++- .../apm/core/endpoints/ScriptMoveForm.java | 10 +++++++--- .../apm/core/endpoints/ScriptUploadForm.java | 16 ++++++++++++++-- .../apm/core/endpoints/ScriptValidationForm.java | 7 +++++-- .../core/endpoints/params/RequestParameter.java | 2 +- .../params/RequestParameterInjector.java | 2 +- 9 files changed, 44 insertions(+), 15 deletions(-) diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/crypto/ProtectTextForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/crypto/ProtectTextForm.java index 2da908eb1..77ad1a8c7 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/crypto/ProtectTextForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/crypto/ProtectTextForm.java @@ -21,13 +21,15 @@ package com.cognifide.apm.core.crypto; import com.cognifide.apm.core.endpoints.params.RequestParameter; +import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ProtectTextForm { - @RequestParameter(optional = false) + @Inject + @RequestParameter(value = "text", optional = false) private String text; public String getText() { diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptDeleteForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptDeleteForm.java index 7766ed9d2..b367b4275 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptDeleteForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptDeleteForm.java @@ -21,13 +21,15 @@ package com.cognifide.apm.core.endpoints; import com.cognifide.apm.core.endpoints.params.RequestParameter; +import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ScriptDeleteForm { - @RequestParameter + @Inject + @RequestParameter("paths") private String[] paths; public String[] getPaths() { diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionForm.java index 18d7a30f3..b974544ca 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionForm.java @@ -22,19 +22,23 @@ import com.cognifide.apm.api.services.ExecutionMode; import com.cognifide.apm.core.endpoints.params.RequestParameter; +import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ScriptExecutionForm { - @RequestParameter(optional = false) + @Inject + @RequestParameter(value = "script", optional = false) private String script; - @RequestParameter(optional = false) + @Inject + @RequestParameter(value = "executionMode", optional = false) private ExecutionMode executionMode; - @RequestParameter + @Inject + @RequestParameter("async") private boolean async; public String getScript() { diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionStatusForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionStatusForm.java index a0318081f..5009eb818 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionStatusForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptExecutionStatusForm.java @@ -21,13 +21,15 @@ package com.cognifide.apm.core.endpoints; import com.cognifide.apm.core.endpoints.params.RequestParameter; +import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ScriptExecutionStatusForm { - @RequestParameter(optional = false) + @Inject + @RequestParameter(value = "id", optional = false) private String id; public String getId() { diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptMoveForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptMoveForm.java index 1a370cc35..dfb62aa28 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptMoveForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptMoveForm.java @@ -21,19 +21,23 @@ package com.cognifide.apm.core.endpoints; import com.cognifide.apm.core.endpoints.params.RequestParameter; +import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ScriptMoveForm { - @RequestParameter + @Inject + @RequestParameter("path") private String path; - @RequestParameter + @Inject + @RequestParameter("dest") private String dest; - @RequestParameter + @Inject + @RequestParameter("rename") private String rename; public String getPath() { diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptUploadForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptUploadForm.java index 2121febb0..f43e0519a 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptUploadForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptUploadForm.java @@ -28,43 +28,55 @@ import com.cognifide.apm.core.scripts.ScriptNode; import java.io.InputStream; import java.time.OffsetDateTime; +import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ScriptUploadForm { - @RequestParameter(optional = false) + @Inject + @RequestParameter(value = "file", optional = false) private InputStream file; + @Inject @RequestParameter(value = "file", optional = false) @FileName private String fileName; - @RequestParameter + @Inject + @RequestParameter("overwrite") private boolean overwrite; + @Inject @RequestParameter(ScriptNode.APM_SAVE_PATH) private String savePath; + @Inject @RequestParameter(ScriptNode.APM_LAUNCH_ENABLED) private boolean launchEnabled; + @Inject @RequestParameter(ScriptNode.APM_LAUNCH_MODE) private LaunchMode launchMode; + @Inject @RequestParameter(ScriptNode.APM_LAUNCH_ENVIRONMENT) private LaunchEnvironment launchEnvironment; + @Inject @RequestParameter(ScriptNode.APM_LAUNCH_RUN_MODES) private String[] launchRunModes; + @Inject @RequestParameter(ScriptNode.APM_LAUNCH_HOOK) private String launchHook; + @Inject @RequestParameter(ScriptNode.APM_LAUNCH_SCHEDULE) private OffsetDateTime launchSchedule; + @Inject @RequestParameter(ScriptNode.APM_LAUNCH_CRON_EXPRESSION) private String launchCronExpression; diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptValidationForm.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptValidationForm.java index 4d192a343..5fe509af2 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptValidationForm.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/ScriptValidationForm.java @@ -21,16 +21,19 @@ package com.cognifide.apm.core.endpoints; import com.cognifide.apm.core.endpoints.params.RequestParameter; +import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.models.annotations.Model; @Model(adaptables = SlingHttpServletRequest.class) public class ScriptValidationForm { - @RequestParameter(optional = false) + @Inject + @RequestParameter(value = "path", optional = false) private String path; - @RequestParameter(optional = false) + @Inject + @RequestParameter(value = "content", optional = false) private String content; public String getPath() { diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameter.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameter.java index ab61ae310..86026dcb0 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameter.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameter.java @@ -33,7 +33,7 @@ @Source("apm-request-parameter") public @interface RequestParameter { - String value() default ""; + String value(); boolean optional() default true; } diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java index 057e3dfd6..081427db3 100644 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/endpoints/params/RequestParameterInjector.java @@ -59,7 +59,7 @@ public Object getValue(Object adaptable, String fieldName, Type type, AnnotatedE if (adaptable instanceof SlingHttpServletRequest) { RequestParameter annotation = annotatedElement.getAnnotation(RequestParameter.class); if (annotation != null && type instanceof Class) { - String parameterName = StringUtils.defaultIfEmpty(annotation.value(), fieldName); + String parameterName = annotation.value(); return getValue((SlingHttpServletRequest) adaptable, (Class) type, parameterName, annotatedElement); } }