diff --git a/app/aem/api/src/main/java/com/cognifide/apm/api/scripts/LaunchMode.java b/app/aem/api/src/main/java/com/cognifide/apm/api/scripts/LaunchMode.java index 1a9f90b4a..88eafaf37 100644 --- a/app/aem/api/src/main/java/com/cognifide/apm/api/scripts/LaunchMode.java +++ b/app/aem/api/src/main/java/com/cognifide/apm/api/scripts/LaunchMode.java @@ -35,6 +35,11 @@ public enum LaunchMode { */ ON_SCHEDULE, + /** + * Executed on CRON expression + */ + ON_CRON_EXPRESSION, + /** * Executed always on bundle start */ diff --git a/app/aem/api/src/main/java/com/cognifide/apm/api/scripts/Script.java b/app/aem/api/src/main/java/com/cognifide/apm/api/scripts/Script.java index fac23ca13..68e0ecb84 100644 --- a/app/aem/api/src/main/java/com/cognifide/apm/api/scripts/Script.java +++ b/app/aem/api/src/main/java/com/cognifide/apm/api/scripts/Script.java @@ -50,6 +50,11 @@ public interface Script { */ Date getLaunchSchedule(); + /** + * Get CRON expression + */ + String getCronExpression(); + /** * Get last execution date */ diff --git a/app/aem/api/src/main/java/com/cognifide/apm/api/scripts/TransientScript.java b/app/aem/api/src/main/java/com/cognifide/apm/api/scripts/TransientScript.java index 9da0b72bf..cfd84bd77 100644 --- a/app/aem/api/src/main/java/com/cognifide/apm/api/scripts/TransientScript.java +++ b/app/aem/api/src/main/java/com/cognifide/apm/api/scripts/TransientScript.java @@ -82,6 +82,11 @@ public Date getLaunchSchedule() { return null; } + @Override + public String getCronExpression() { + return null; + } + @Override public Date getLastExecuted() { return null; diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/launchers/ApmInstallService.java b/app/aem/core/src/main/java/com/cognifide/apm/core/launchers/ApmInstallService.java new file mode 100644 index 000000000..b94b85330 --- /dev/null +++ b/app/aem/core/src/main/java/com/cognifide/apm/core/launchers/ApmInstallService.java @@ -0,0 +1,61 @@ +/*- + * ========================LICENSE_START================================= + * AEM Permission Management + * %% + * Copyright (C) 2013 Wunderman Thompson Technology + * %% + * 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. + * =========================LICENSE_END================================== + */ +package com.cognifide.apm.core.launchers; + +import com.cognifide.apm.api.scripts.Script; +import com.cognifide.apm.api.services.ScriptFinder; +import com.cognifide.apm.api.services.ScriptManager; +import com.cognifide.apm.core.services.ResourceResolverProvider; +import com.cognifide.apm.core.utils.RuntimeUtils; +import com.cognifide.apm.core.utils.sling.SlingHelper; +import java.util.Collections; + +public class ApmInstallService extends AbstractLauncher implements Runnable { + + private final String scriptPath; + + private final ResourceResolverProvider resolverProvider; + + private final ScriptManager scriptManager; + + private final ScriptFinder scriptFinder; + + public ApmInstallService(String scriptPath, ResourceResolverProvider resolverProvider, ScriptManager scriptManager, ScriptFinder scriptFinder) { + this.scriptPath = scriptPath; + this.resolverProvider = resolverProvider; + this.scriptManager = scriptManager; + this.scriptFinder = scriptFinder; + } + + @Override + public void run() { + SlingHelper.operateTraced(resolverProvider, resolver -> { + if (RuntimeUtils.isMutableContentInstance(resolver)) { + Script script = scriptFinder.find(scriptPath, resolver); + processScripts(Collections.singletonList(script), resolver); + } + }); + } + + @Override + protected ScriptManager getScriptManager() { + return scriptManager; + } +} diff --git a/app/aem/core/src/main/java/com/cognifide/apm/core/launchers/ScheduledScriptLauncher.java b/app/aem/core/src/main/java/com/cognifide/apm/core/launchers/ScheduledScriptLauncher.java deleted file mode 100644 index 85b213ffc..000000000 --- a/app/aem/core/src/main/java/com/cognifide/apm/core/launchers/ScheduledScriptLauncher.java +++ /dev/null @@ -1,100 +0,0 @@ -/*- - * ========================LICENSE_START================================= - * AEM Permission Management - * %% - * Copyright (C) 2013 Wunderman Thompson Technology - * %% - * 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. - * =========================LICENSE_END================================== - */ -package com.cognifide.apm.core.launchers; - -import static com.cognifide.apm.core.scripts.ScriptFilters.onSchedule; - -import com.cognifide.apm.api.scripts.LaunchEnvironment; -import com.cognifide.apm.api.scripts.Script; -import com.cognifide.apm.api.services.RunModesProvider; -import com.cognifide.apm.api.services.ScriptFinder; -import com.cognifide.apm.api.services.ScriptManager; -import com.cognifide.apm.core.Property; -import com.cognifide.apm.core.launchers.ScheduledScriptLauncher.ScheduleExecutorConfiguration; -import com.cognifide.apm.core.services.ResourceResolverProvider; -import com.cognifide.apm.core.utils.sling.SlingHelper; -import java.util.Date; -import java.util.List; -import org.apache.sling.api.resource.PersistenceException; -import org.apache.sling.api.resource.ResourceResolver; -import org.osgi.service.component.annotations.Activate; -import org.osgi.service.component.annotations.Component; -import org.osgi.service.component.annotations.Modified; -import org.osgi.service.component.annotations.Reference; -import org.osgi.service.metatype.annotations.AttributeDefinition; -import org.osgi.service.metatype.annotations.Designate; -import org.osgi.service.metatype.annotations.ObjectClassDefinition; - -@Component( - property = { - Property.DESCRIPTION + "APM Launches scheduled scripts", - Property.VENDOR, - Property.SCHEDULER + "0 * * * * ?" - } -) -@Designate(ocd = ScheduleExecutorConfiguration.class) -public class ScheduledScriptLauncher extends AbstractLauncher implements Runnable { - - @Reference - private ScriptManager scriptManager; - - @Reference - private ScriptFinder scriptFinder; - - @Reference - private RunModesProvider runModesProvider; - - @Reference - private ResourceResolverProvider resolverProvider; - - private boolean enabled = true; - - @Activate - @Modified - public void activate(ScheduleExecutorConfiguration config) { - enabled = !config.disableScheduleExecutor(); - } - - @Override - public void run() { - if (enabled) { - SlingHelper.operateTraced(resolverProvider, this::runScheduled); - } - } - - private void runScheduled(ResourceResolver resolver) throws PersistenceException { - LaunchEnvironment environment = LaunchEnvironment.of(runModesProvider); - List