diff --git a/li.strolch.service/src/main/java/li/strolch/execution/ArchiveExecutedActivitiesJob.java b/li.strolch.service/src/main/java/li/strolch/execution/ArchiveExecutedActivitiesJob.java new file mode 100644 index 000000000..23808ada3 --- /dev/null +++ b/li.strolch.service/src/main/java/li/strolch/execution/ArchiveExecutedActivitiesJob.java @@ -0,0 +1,35 @@ +package li.strolch.execution; + +import java.util.concurrent.TimeUnit; + +import li.strolch.agent.api.StrolchAgent; +import li.strolch.job.JobMode; +import li.strolch.job.StrolchJob; +import li.strolch.model.State; +import li.strolch.persistence.api.StrolchTransaction; +import li.strolch.privilege.model.PrivilegeContext; + +public class ArchiveExecutedActivitiesJob extends StrolchJob { + + public ArchiveExecutedActivitiesJob(StrolchAgent agent) { + super(agent, JobMode.Manual, 0, TimeUnit.MINUTES, 0, TimeUnit.MINUTES); + } + + public ArchiveExecutedActivitiesJob(StrolchAgent agent, JobMode jobMode, long initialDelay, TimeUnit initialDelayTimeUnit, long delay, + TimeUnit delayTimeUnit) { + super(agent, jobMode, initialDelay, initialDelayTimeUnit, delay, delayTimeUnit); + } + + @Override + protected void execute(PrivilegeContext ctx) { + + ExecutionHandler executionHandler = getComponent(ExecutionHandler.class); + + try (StrolchTransaction tx = openTx(ctx.getCertificate())) { + tx.streamActivities().forEach(activity -> { + if (activity.getState() == State.EXECUTED) + executionHandler.archiveActivity(tx.getRealmName(), activity.getLocator()); + }); + } + } +}