Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

remove custom definitions #433

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
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;
Expand All @@ -39,27 +37,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<String, String> 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<String, String> 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<String, String> getPredefinedDefinitions();
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -42,10 +41,6 @@ public class ScriptExecutionForm {
@RequestParameter("async")
private boolean async;

@Inject
@RequestParameter("define")
private Map<String, String> customDefinitions;

public String getScript() {
return script;
}
Expand All @@ -57,8 +52,4 @@ public ExecutionMode getExecutionMode() {
public boolean isAsync() {
return async;
}

public Map<String, String> getCustomDefinitions() {
return customDefinitions;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
if (annotation != null && type instanceof Class<?>) {
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);
}
return getValue((SlingHttpServletRequest) adaptable, (Class<?>) type, parameterName, annotatedElement);
}
}
return null;
Expand All @@ -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);
}
Expand All @@ -115,17 +111,6 @@ private Object toEnum(Class<?> type, org.apache.sling.api.request.RequestParamet
.orElse(null);
}

private Map<String, String> 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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -71,7 +70,7 @@ public void process(Map<String, Object> 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) {
Expand Down Expand Up @@ -101,14 +100,6 @@ private ExecutionMode getMode(Map<String, Object> properties) {
return result;
}

private Map<String, String> getDefinitions(Map<String, Object> properties) {
Map<String, String> definitions = (Map<String, String>) properties.get(AsyncScriptExecutorImpl.DEFINITIONS);
if (definitions == null) {
definitions = Collections.emptyMap();
}
return definitions;
}

private Script getScript(Map<String, Object> properties, ResourceResolver resolver) {
String scriptSearchPath = (String) properties.get(AsyncScriptExecutorImpl.SCRIPT_PATH);
if (StringUtils.isNotBlank(scriptSearchPath)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, String> getPredefinedDefinitions() {
final Map<String, String> definitions = new HashMap<>();
Map<String, String> definitions = new HashMap<>();

// Modules
definitions.put("Websites", "/libs/wcm/core/content/siteadmin");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,14 @@
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;
import org.apache.sling.api.resource.PersistenceException;
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;

Expand Down Expand Up @@ -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<DefinitionsProvider> definitionsProviders = new CopyOnWriteArraySet<>();
@Reference
private DataSourceInvoker dataSourceInvoker;

private Progress execute(Script script, ExecutionMode mode, Map<String, String> 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");
}
Expand Down Expand Up @@ -139,9 +130,7 @@ private Progress execute(Script script, ExecutionMode mode, Map<String, String>
}, dataSourceInvoker);

try {
Map<String, String> definitions = new HashMap<>();
definitions.putAll(getPredefinedDefinitions());
definitions.putAll(customDefinitions);
Map<String, String> definitions = definitionsProvider.getPredefinedDefinitions();
scriptRunner.execute(script, progress, definitions);
} catch (RuntimeException e) {
progress.addEntry(Status.ERROR, e.getMessage());
Expand All @@ -153,11 +142,11 @@ private Progress execute(Script script, ExecutionMode mode, Map<String, String>
}

@Override
public Progress process(Script script, ExecutionMode mode, Map<String, String> 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());
Expand Down Expand Up @@ -191,13 +180,6 @@ private void updateScriptProperties(Script script, ExecutionMode mode, boolean s
}
}

@Override
public Map<String, String> getPredefinedDefinitions() {
Map<String, String> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, String> customDefinitions, String executor);
String process(Script script, ExecutionMode executionMode, String executor);

ExecutionStatus checkStatus(String id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -58,14 +56,13 @@ public class AsyncScriptExecutorImpl implements AsyncScriptExecutor {
private JobResultsCache jobResultsCache;

@Override
public String process(Script script, ExecutionMode executionMode, Map<String, String> customDefinitions, String executor) {
public String process(Script script, ExecutionMode executionMode, String executor) {
String id = UUID.randomUUID().toString();
Map<String, Object> 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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -38,9 +38,9 @@ public class ReferencesModel {
private final Map<String, String> 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<CommandDescription> getReferences() {
Expand Down
Loading