diff --git a/source/java/org/alfresco/repo/action/scheduled/ScheduledPersistedActionImpl.java b/source/java/org/alfresco/repo/action/scheduled/ScheduledPersistedActionImpl.java new file mode 100644 index 0000000000..99e5ad6d0b --- /dev/null +++ b/source/java/org/alfresco/repo/action/scheduled/ScheduledPersistedActionImpl.java @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.action.scheduled; + +import java.util.Date; + +import org.alfresco.service.cmr.action.Action; +import org.alfresco.service.cmr.action.scheduled.ScheduledPersistedAction; + +/** + * The scheduling wrapper around a persisted + * action, which is to be executed on a + * scheduled basis. + * + * @author Nick Burch + * @since 3.4 + */ +public class ScheduledPersistedActionImpl implements ScheduledPersistedAction +{ + private Action action; + private Date scheduleStart; + private Integer intervalCount; + private IntervalPeriod intervalPeriod; + + public ScheduledPersistedActionImpl(Action action) + { + this.action = action; + } + + + /** Get the action which the schedule applies to */ + public Action getAction() + { + return action; + } + + /** + * Get the first date that the action should be run + * on or after, or null if it should start shortly + * after each startup. + */ + public Date getScheduleStart() + { + return scheduleStart; + } + + /** + * Sets the first date that the action should be + * run on or after. Set to null if the action + * should be run shortly after each startup. + */ + public void setScheduleStart(Date startDate) + { + this.scheduleStart = startDate; + } + + + /** + * How many {@link #getScheduleIntervalPeriod()} periods + * should we wait between executions? + * Will be null if the action isn't scheduled to + * be repeated. + */ + public Integer getScheduleIntervalCount() + { + return intervalCount; + } + + /** + * Sets how many periods should be waited between + * each execution, or null if it shouldn't be + * repeated. + */ + public void setScheduleIntervalCount(Integer count) + { + this.intervalCount = count; + } + + + /** + * How long are {@link #getScheduleIntervalCount()} counts + * measured in? + */ + public IntervalPeriod getScheduleIntervalPeriod() + { + return intervalPeriod; + } + + /** + * Sets the interval period + */ + public void setScheduleIntervalPeriod(IntervalPeriod period) { + this.intervalPeriod = period; + } + + + /** + * Returns the interval in a form like 1D (1 day) + * or 2h (2 hours), or null if a period+count + * hasn't been set + */ + public String getScheduleInterval() + { + if(intervalCount == null || intervalPeriod == null) + { + return null; + } + return intervalCount.toString() + intervalPeriod.getLetter(); + } +} diff --git a/source/java/org/alfresco/repo/action/scheduled/ScheduledPersistedActionServiceImpl.java b/source/java/org/alfresco/repo/action/scheduled/ScheduledPersistedActionServiceImpl.java new file mode 100644 index 0000000000..0c97b45f32 --- /dev/null +++ b/source/java/org/alfresco/repo/action/scheduled/ScheduledPersistedActionServiceImpl.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.action.scheduled; + +import java.util.List; + +import org.alfresco.service.cmr.action.Action; +import org.alfresco.service.cmr.action.scheduled.ScheduledPersistedAction; +import org.alfresco.service.cmr.action.scheduled.ScheduledPersistedActionService; + +/** + * A service which handles the scheduling of the + * execution of persisted actions. + * It handles registering them with the Quartz + * scheduler on repository start, and handles + * the edit, creation and deletion of them. + * + * @author Nick Burch + * @since 3.4 + */ +public interface ScheduledPersistedActionServiceImpl extends ScheduledPersistedActionService { + /** + * Creates a new schedule, for the specified Action. + */ + public ScheduledPersistedAction createSchedule(Action persistedAction); + + /** + * Saves the changes to the schedule to the repository, + * and updates the Scheduler with any changed details. + */ + public void saveSchedule(ScheduledPersistedAction schedule); + + /** + * Removes the schedule for the action, and cancels future + * executions of it. + * The persisted action is unchanged. + */ + public void deleteSchedule(ScheduledPersistedAction schedule); + + /** + * Returns the schedule for the specified action, or + * null if it isn't currently scheduled. + */ + public ScheduledPersistedAction getSchedule(Action persistedAction); + + /** + * Returns all currently scheduled actions. + */ + public List listSchedules(); +} diff --git a/source/java/org/alfresco/repo/action/scheduled/ScheduledPersistedAction.java b/source/java/org/alfresco/service/cmr/action/scheduled/ScheduledPersistedAction.java similarity index 86% rename from source/java/org/alfresco/repo/action/scheduled/ScheduledPersistedAction.java rename to source/java/org/alfresco/service/cmr/action/scheduled/ScheduledPersistedAction.java index c7c9c8fe21..b1b7949aad 100644 --- a/source/java/org/alfresco/repo/action/scheduled/ScheduledPersistedAction.java +++ b/source/java/org/alfresco/service/cmr/action/scheduled/ScheduledPersistedAction.java @@ -16,7 +16,7 @@ * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ -package org.alfresco.repo.action.scheduled; +package org.alfresco.service.cmr.action.scheduled; import java.util.Date; @@ -30,7 +30,8 @@ import org.alfresco.service.cmr.action.Action; * @author Nick Burch * @since 3.4 */ -public interface ScheduledPersistedAction { +public interface ScheduledPersistedAction +{ /** Get the action which the schedule applies to */ public Action getAction(); @@ -85,6 +86,18 @@ public interface ScheduledPersistedAction { public static enum IntervalPeriod { - Month, Week, Day, Hour, Minute + Month ('M'), + Week ('W'), + Day ('D'), + Hour ('h'), + Minute ('m'); + + private final char letter; + IntervalPeriod(char letter) { + this.letter = letter; + } + public char getLetter() { + return letter; + } } } diff --git a/source/java/org/alfresco/repo/action/scheduled/ScheduledPersistedActionService.java b/source/java/org/alfresco/service/cmr/action/scheduled/ScheduledPersistedActionService.java similarity index 95% rename from source/java/org/alfresco/repo/action/scheduled/ScheduledPersistedActionService.java rename to source/java/org/alfresco/service/cmr/action/scheduled/ScheduledPersistedActionService.java index ddc9329786..caf672669b 100644 --- a/source/java/org/alfresco/repo/action/scheduled/ScheduledPersistedActionService.java +++ b/source/java/org/alfresco/service/cmr/action/scheduled/ScheduledPersistedActionService.java @@ -16,7 +16,7 @@ * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ -package org.alfresco.repo.action.scheduled; +package org.alfresco.service.cmr.action.scheduled; import java.util.List; @@ -32,7 +32,8 @@ import org.alfresco.service.cmr.action.Action; * @author Nick Burch * @since 3.4 */ -public interface ScheduledPersistedActionService { +public interface ScheduledPersistedActionService +{ /** * Creates a new schedule, for the specified Action. */