View Javadoc
1   package org.itracker.persistence.dao;
2   
3   import org.itracker.model.Issue;
4   import org.itracker.model.IssueSearchQuery;
5   import org.itracker.model.PermissionType;
6   import org.itracker.model.User;
7   
8   import java.util.Date;
9   import java.util.List;
10  import java.util.Map;
11  import java.util.Set;
12  
13  /**
14   * Issue Data Access Object interface.
15   */
16  public interface IssueDAO extends BaseDAO<Issue> {
17  
18      /**
19       * Finds the issue with the given ID.
20       * <p/>
21       * <p>PENDING: should this method throw a NoSuchEntityException
22       * instead of returning null if the issue doesn't exist ? </p>
23       *
24       * @param issueId ID of the issue to retrieve
25       * @return issue with the given ID or <tt>null</tt> if none exits
26       */
27      Issue findByPrimaryKey(Integer issueId);
28  
29      /**
30       * Finds all issues in all projects.
31       * <p/>
32       * <p>PENDING: do we really need to retrieve all issues at once ?
33       * It can cause OutOfMemoryError depending on the DB size!
34       * Consider scrolling through an issues result set in case we really do.
35       * </p>
36       *
37       * @return list of exiting issues, in an unspecified order
38       * @deprecated don't use due to expensive memory use.
39       */
40      List<Issue> findAll();
41  
42      /**
43       * Finds all issues in the given status in all projects.
44       *
45       * @param status status of the issues to return
46       * @return list of issues matching the above filter, in an unspecified order
47       */
48      List<Issue> findByStatus(int status);
49  
50      /**
51       * Finds all issues with a status less than the given one in all projects.
52       *
53       * @param maxExclusiveStatus all issues under this status will be returned
54       * @return list of issues matching the above filter, in an unspecified order
55       */
56      List<Issue> findByStatusLessThan(int maxExclusiveStatus);
57  
58      /**
59       * Finds all issues with a status less than or equal to the given status
60       * in all projects.
61       *
62       * @param maxStatus all issues less that or equal to this status will be returned
63       * @return list of issues matching the above filter, in an unspecified order
64       */
65      List<Issue> findByStatusLessThanEqualTo(int maxStatus);
66  
67      /**
68       * Finds all issues with a status less than or equal to the given status
69       * in active and viewable projects.
70       *
71       * @param maxStatus all issues less that or equal to this status will be returned
72       * @return list of issues matching the above filter, in an unspecified order
73       */
74      List<Issue> findByStatusLessThanEqualToInAvailableProjects(int maxStatus);
75  
76      /**
77       * Finds all issues with the given severity in all projects.
78       *
79       * @param severity severity of the issues to return
80       * @return list of issues matching the above filter, in an unspecified order
81       */
82      List<Issue> findBySeverity(int severity);
83  
84      /**
85       * Finds all issues of the given project.
86       *
87       * @param projectId ID of the project of which to retrieve all issues
88       * @return list of issues in no particular order
89       */
90      List<Issue> findByProject(Integer projectId);
91  
92      /**
93       * Counts the number of issues of the given project.
94       *
95       * @param projectId ID of the project of which to count issues
96       * @return number of issues
97       */
98      Long countByProject(Integer projectId);
99  
100     /**
101      * Finds all issues of the given project with a status lower than
102      * the given one.
103      *
104      * @param projectId          ID of the project of which to retrieve the issues
105      * @param maxExclusiveStatus all issues under this status will be returned
106      * @return list of issues matching the above filter, in an unspecified order
107      */
108     List<Issue> findByProjectAndLowerStatus(Integer projectId,
109                                             int maxExclusiveStatus);
110 
111     /**
112      * Counts the number of issues of the given project with a status
113      * lower than the given one.
114      *
115      * @param projectId          ID of the project of which to count issues
116      * @param maxExclusiveStatus all issues under this status will be counted
117      * @return number of issues
118      */
119     Long countByProjectAndLowerStatus(Integer projectId,
120                                       int maxExclusiveStatus);
121 
122     /**
123      * Finds all issues of the given project with a status higher than
124      * or equal to the given one.
125      *
126      * @param projectId ID of the project of which to retrieve the issues
127      * @param minStatus all issues with this status or above will be returned
128      * @return list of issues matching the above filter, in an unspecified order
129      */
130     List<Issue> findByProjectAndHigherStatus(Integer projectId,
131                                              int minStatus);
132 
133     /**
134      * Counts the number of issues of the given project with a status
135      * higher than or equal to the given one.
136      *
137      * @param projectId ID of the project of which to count issues
138      * @param minStatus all issues with this status or above will be counted
139      * @return number of issues
140      */
141     Long countByProjectAndHigherStatus(Integer projectId, int minStatus);
142 
143     /**
144      * Finds all issues owned by the given user in all projects
145      * and with a status lower than the given one.
146      *
147      * @param ownerId            ID of the user who owns the issues to return
148      * @param maxExclusiveStatus status under which to return issues
149      * @return list of issues matching the above filter, in an unspecified order
150      */
151     List<Issue> findByOwner(Integer ownerId, int maxExclusiveStatus);
152 
153     /**
154      * Finds all issues owned by the given user in all active and viewable
155      * projects and with a status less than the given one.
156      *
157      * @param ownerId            ID of the user who owns the issues to return
158      * @param maxExclusiveStatus status under which to return issues
159      * @return list of issues matching the above filter, in an unspecified order
160      */
161     List<Issue> findByOwnerInAvailableProjects(Integer ownerId,
162                                                int maxExclusiveStatus);
163 
164     /**
165      * Finds all issues without owner with a status less than
166      * or equal to the given one in all projects.
167      *
168      * @param maxStatus maximum status allowed for the issues to return
169      * @return list of issues matching the above filter, in an unspecified order
170      */
171     List<Issue> findUnassignedIssues(int maxStatus);
172 
173     /**
174      * Finds all issues created by the given user in all projects
175      * and with a status less than the given one.
176      *
177      * @param userId             ID of the user who created the issues to return
178      * @param maxExclusiveStatus all issues under this status will be returned
179      * @return list of issues matching the above filter, in an unspecified order
180      */
181     List<Issue> findByCreator(Integer creatorId, int maxExclusiveStatus);
182 
183     /**
184      * Finds all issues created by the given user in all active and viewable
185      * projects and with a status less than the given one.
186      *
187      * @param userId             ID of the user who created the issues to return
188      * @param maxExclusiveStatus all issues under this status will be returned
189      * @return list of issues matching the above filter, in an unspecified order
190      */
191     List<Issue> findByCreatorInAvailableProjects(Integer creatorId,
192                                                  int maxExclusiveStatus);
193 
194     /**
195      * Finds all issues with notifications for the given user in all projects
196      * and with a status less than the given one.
197      * <p/>
198      * <p>Only 1 instance of every issue is returned, even if multiple
199      * notifications exist for an issue. </p>
200      *
201      * @param userId             ID of the user with notifications for the issues to return
202      * @param maxExclusiveStatus all issues under this status will be returned
203      * @return list of issues matching the above filter, in an unspecified order
204      */
205     List<Issue> findByNotification(Integer userId, int maxExclusiveStatus);
206 
207     /**
208      * Finds all issues with notifications for the given user in active
209      * and viewable projects.
210      * <p/>
211      * <p>Only 1 instance of every issue is returned, even if multiple
212      * notifications exist for an issue. </p>
213      *
214      * @param userId             ID of the user with notifications for the issues to return
215      * @param maxExclusiveStatus all issues under this status will be returned
216      * @return list of issues matching the above filter, in an unspecified order
217      */
218     List<Issue> findByNotificationInAvailableProjects(Integer userId,
219                                                       int maxExclusiveStatus);
220 
221     /**
222      * Finds all issues of the component with the given ID.
223      *
224      * @param componentId ID of the component of which to retrieve all issues
225      * @return list of issues in no particular order
226      */
227     List<Issue> findByComponent(Integer componentId);
228 
229     /**
230      * Get the next issues in the project based on ID.
231      * @param issueId the issue ID
232      * @return List of next issues in the project.
233      */
234     List<Issue> findNextIssues(Integer issueId);
235 
236     /**
237      * Get the next issues in the project based on ID.
238      * @param issueId the issue ID
239      * @return List of next issues in the project.
240      */
241     List<Issue> findPreviousIssues(Integer issueId);
242 
243     /**
244      * Count all Issues in database
245      */
246     Long countAllIssues();
247 
248     /**
249      * Counts the number of issues attached to a component.
250      *
251      * @param componentId ID of the component
252      * @return number of issues
253      */
254     Long countByComponent(Integer componentId);
255 
256     /**
257      * Finds all issues of the version with the given ID.
258      *
259      * @param versionId ID of the version of which to retrieve all issues
260      * @return list of issues in no particular order
261      */
262     List<Issue> findByVersion(Integer versionId);
263 
264     /**
265      * Counts the number of issues attached to a version.
266      *
267      * @param versionId ID of the version
268      * @return number of issues
269      */
270     Long countByVersion(Integer versionId);
271 
272     /**
273      * Returns the modification date of the latest modified issue
274      * in the project with the given id.
275      *
276      * @param projectId ID of the project of which to retrieve the issues
277      * @return date of the most recent issue modification for the project.
278      *         <tt>null</tt> if no issue exists in the project
279      */
280     Date latestModificationDate(Integer projectId);
281 
282     /**
283      * Query the list of issues that satisfies the search criteria
284      * specified in <code>queryModel</code>.
285      *
286      * @param queryModel      The search criteria.
287      * @param user            The currently logged-in user.
288      * @param userPermissions Permissions currently inforced. TODO: We could look this up instead of passing this as parameter.
289      */
290     List<Issue> query(IssueSearchQuery queryModel, User user, Map<Integer, Set<PermissionType>> userPermissions);
291 
292     /**
293      * Delete all issues targeted for the specified version.
294      *
295      * @param versionId the version ID.
296      */
297     List<Issue> findByTargetVersion(Integer versionId);
298 
299 
300 }