View Javadoc
1   /*
2    * Licensed to The Apereo Foundation under one or more contributor license
3    * agreements. See the NOTICE file distributed with this work for additional
4    * information regarding copyright ownership.
5    *
6    *
7    * The Apereo Foundation licenses this file to you under the Educational
8    * Community License, Version 2.0 (the "License"); you may not use this file
9    * except in compliance with the License. You may obtain a copy of the License
10   * at:
11   *
12   *   http://opensource.org/licenses/ecl2.txt
13   *
14   * Unless required by applicable law or agreed to in writing, software
15   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
16   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
17   * License for the specific language governing permissions and limitations under
18   * the License.
19   *
20   */
21  
22  package org.opencastproject.workflow.api;
23  
24  import org.opencastproject.util.NotFoundException;
25  
26  import java.util.Date;
27  import java.util.List;
28  
29  /**
30   * API that defines persistent storage of workflows
31   *
32   */
33  public interface WorkflowServiceDatabase {
34  
35    /**
36     * Gets a single workflow by its identifier.
37     *
38     * @param workflowId
39     *          the series identifier
40     * @return the {@link WorkflowInstance} for this workflow
41     * @throws NotFoundException
42     *           if there is no workflow with this identifier
43     * @throws WorkflowDatabaseException
44     *           if there is a problem communicating with the underlying data store
45     */
46    WorkflowInstance getWorkflow(long workflowId) throws NotFoundException, WorkflowDatabaseException;
47  
48    /**
49     * Gets a single workflow by its identifier
50     *
51     * @param workflowId
52     *          the series identifier
53     * @return the {@link WorkflowInstance} for this workflow
54     * @throws NotFoundException
55     *           if there is no workflow with this identifier
56     * @throws WorkflowDatabaseException
57     *           if there is a problem communicating with the underlying data store
58     */
59    WorkflowInstance getWorkflow(long workflowId, String orgId) throws NotFoundException, WorkflowDatabaseException;
60  
61    /**
62     * Gets workflow instances for current organization.
63     *
64     * @param limit
65     *          max number of workflows to be returned
66     * @param offset
67     *          only return workflows from this point onwards
68     * @return list of all {@link WorkflowInstance}s
69     * @throws WorkflowDatabaseException
70     *           if there is a problem communicating with the underlying data store
71     */
72    List<WorkflowInstance> getWorkflowInstances(int limit, int offset) throws WorkflowDatabaseException;
73  
74    /**
75     * Gets all workflow instances previous to the specified date
76     *
77     * @param state Only returns workflows currently in the given state
78     * @param dateCreated Only returns workflows created prior to the given date
79     * @return list of the {@link WorkflowInstance}s
80     * @throws WorkflowDatabaseException
81     */
82    List<WorkflowInstance> getWorkflowInstancesForCleanup(WorkflowInstance.WorkflowState state, Date dateCreated)
83            throws WorkflowDatabaseException;
84  
85    /**
86     * Gets the amount of workflow instances.
87     *
88     * @param state Only counts workflows currently in the given state
89     * @return Amount of workflow instances
90     * @throws WorkflowDatabaseException
91     */
92    long countWorkflows(WorkflowInstance.WorkflowState state) throws WorkflowDatabaseException;
93  
94    /**
95     * Gets workflow index data for all events.
96     * Selects only workflow id, state, mediapackage id and organization id
97     *
98     * @param limit
99     *          max number of data objects to be returned
100    * @param offset
101    *          only return data from this point onwards
102    * @return list of {@link WorkflowIndexData}s
103    * @throws WorkflowDatabaseException
104    *           if there is a problem communicating with the underlying data store
105    */
106   List<WorkflowIndexData> getWorkflowIndexData(int limit, int offset) throws WorkflowDatabaseException;
107 
108   /**
109    * Returns the number of events workflows have been run on.
110    *
111    * @return the number of latest workflows
112    * @throws WorkflowDatabaseException
113    *           if there is a problem communicating with the underlying data store
114    */
115   int countMediaPackages() throws WorkflowDatabaseException;
116 
117   /**
118    * Gets all workflow instances for a mediapackage.
119    *
120    * @param mediaPackageId
121    *          the media package id
122    * @return list of all {@link WorkflowInstance}s for the given mediapackage id
123    * @throws WorkflowDatabaseException
124    *           if there is a problem communicating with the underlying data store
125    */
126   List<WorkflowInstance> getWorkflowInstancesByMediaPackage(String mediaPackageId) throws WorkflowDatabaseException;
127 
128   /**
129    * Gets all workflow instances that are currently running on the mediapackage.
130    *
131    * @param mediaPackageId
132    *          the mediapackage id
133    * @return list of all {@link WorkflowInstance}s for the given mediapackage id
134    * @throws WorkflowDatabaseException
135    *           if there is a problem communicating with the underlying data store
136    */
137   List<WorkflowInstance> getRunningWorkflowInstancesByMediaPackage(String mediaPackageId)
138           throws WorkflowDatabaseException;
139 
140   /**
141    * Returns true if the media package with the given identifier currently has a workflow running on it.
142    *
143    * @param mediaPackageId
144    *          the media package identifier
145    * @return true, if a workflow is running; false otherwise
146    * @throws WorkflowDatabaseException
147    *           if there is a problem communicating with the underlying data store
148    */
149   boolean mediaPackageHasActiveWorkflows(String mediaPackageId) throws WorkflowDatabaseException;
150 
151   /**
152    * Returns true there are still workflows running that were created by the user with the given identifier.
153    *
154    * @param userId
155    *          the user identifier
156    * @return true, if a workflow is running; false otherwise
157    * @throws WorkflowDatabaseException
158    *           if there is a problem communicating with the underlying data store
159    */
160   boolean userHasActiveWorkflows(String userId) throws WorkflowDatabaseException;
161 
162   /**
163    * Updates a single workflow.
164    *
165    * @param instance
166    *          the workflow instance
167    * @throws WorkflowDatabaseException
168    *           if there is a problem communicating with the underlying data store
169    */
170   void updateInDatabase(WorkflowInstance instance) throws WorkflowDatabaseException;
171 
172   /**
173    * Removes a single workflow.
174    *
175    * @param instance
176    *          the workflow instance
177    * @throws WorkflowDatabaseException
178    *           if there is a problem communicating with the underlying data store
179    */
180   void removeFromDatabase(WorkflowInstance instance) throws WorkflowDatabaseException;
181 }