View Javadoc

1   /**
2    * 2009, Digitalis Informatica. All rights reserved. Distribuicao e Gestao de Informatica, Lda. Estrada de Paco de Arcos
3    * num.9 - Piso -1 2780-666 Paco de Arcos Telefone: (351) 21 4408990 Fax: (351) 21 4408999 http://www.digitalis.pt
4    */
5   
6   package pt.digitalis.dif.utils.extensions.cms;
7   
8   import java.util.List;
9   import java.util.Set;
10  
11  import pt.digitalis.dif.controller.security.objects.IDIFUser;
12  import pt.digitalis.dif.utils.extensions.cms.exception.ContentItemNotFoundException;
13  import pt.digitalis.dif.utils.extensions.cms.exception.ContentItemWithDuplicateNameAndParentNodeException;
14  import pt.digitalis.dif.utils.extensions.cms.exception.ContentManagerException;
15  import pt.digitalis.dif.utils.extensions.cms.exception.InvalidNameException;
16  import pt.digitalis.dif.utils.extensions.cms.exception.InvalidParentNodeException;
17  import pt.digitalis.dif.utils.extensions.cms.exception.InvalidPathException;
18  import pt.digitalis.dif.utils.extensions.cms.exception.NoAccessException;
19  import pt.digitalis.dif.utils.extensions.cms.exception.NodeNotFoundException;
20  import pt.digitalis.dif.utils.extensions.cms.exception.NodeWithDuplicatePathException;
21  import pt.digitalis.dif.utils.extensions.cms.exception.NodeWithNodesException;
22  
23  /**
24   * @author Pedro Viegas <a href="mailto:pviegas@digitalis.pt">pviegas@digitalis.pt</a><br/>
25   * @created Jun 5, 2009
26   */
27  public interface IContentManager {
28  
29      /**
30       * Adds a new content to the repository.<br>
31       * Will assign the ID internally
32       * 
33       * @param content
34       *            the content to add in the repository
35       * @return the updated content
36       * @throws InvalidParentNodeException
37       * @throws NodeNotFoundException
38       * @throws NoAccessException
39       * @throws ContentItemWithDuplicateNameAndParentNodeException
40       * @throws ContentManagerException
41       */
42      public ContentItem addContent(ContentItem content) throws InvalidParentNodeException, NodeNotFoundException,
43              NoAccessException, ContentItemWithDuplicateNameAndParentNodeException, ContentManagerException;
44  
45      /**
46       * Adds a new content to the repository<br>
47       * Will assign the ID internally
48       * 
49       * @param node
50       *            the node to add
51       * @return the added node
52       * @throws InvalidPathException
53       * @throws InvalidNameException
54       * @throws NoAccessException
55       * @throws InvalidParentNodeException
56       * @throws NodeNotFoundException
57       * @throws NodeWithDuplicatePathException
58       * @throws ContentManagerException
59       */
60      public Node addNode(Node node) throws InvalidPathException, InvalidNameException, NoAccessException,
61              InvalidParentNodeException, NodeNotFoundException, NodeWithDuplicatePathException, ContentManagerException;
62  
63      /**
64       * Begins a Content Manager transaction
65       */
66      public void beginTransaction();
67  
68      /**
69       * Commit's a Content Manager transaction
70       */
71      public void commitTransaction();
72  
73      /**
74       * Deletes an existing content from the repository
75       * 
76       * @param id
77       *            the content to delete
78       * @param user
79       *            the user that is deleting the content
80       * @return T if all went well
81       * @throws ContentItemNotFoundException
82       * @throws NodeNotFoundException
83       * @throws NoAccessException
84       * @throws ContentManagerException
85       */
86      public boolean deleteContent(String id, IDIFUser user) throws ContentItemNotFoundException, NodeNotFoundException,
87              NoAccessException, ContentManagerException;
88  
89      /**
90       * Deletes an existing node from the repository
91       * 
92       * @param id
93       *            the node to delete
94       * @param user
95       *            the user that is deleting the node
96       * @return T if all went well
97       * @throws NodeNotFoundException
98       * @throws NoAccessException
99       * @throws NodeWithNodesException
100      * @throws ContentManagerException
101      */
102     public boolean deleteNode(Long id, IDIFUser user) throws NodeNotFoundException, NoAccessException,
103             NodeWithNodesException, ContentManagerException;
104 
105     /**
106      * Deletes an existing node from the repository. <br>
107      * Will launch an exception if the node is not empty
108      * 
109      * @param id
110      *            the node to delete
111      * @param user
112      *            the user that is deleting the node
113      * @param cascadeDelete
114      *            if T will delete all inner nodes and content, if F will launch an exception if the node is not empty
115      * @return T if all went well
116      * @throws NodeNotFoundException
117      * @throws NoAccessException
118      * @throws NodeWithNodesException
119      * @throws ContentManagerException
120      */
121     public boolean deleteNode(Long id, IDIFUser user, boolean cascadeDelete) throws NodeNotFoundException,
122             NoAccessException, NodeWithNodesException, ContentManagerException;
123 
124     /**
125      * Searches content items by description
126      * 
127      * @param description
128      *            the content id
129      * @param user
130      *            the user who's searching
131      * @return the content list
132      * @throws ContentManagerException
133      */
134     public List<ContentItem> getContentByDescription(String description, IDIFUser user) throws ContentManagerException;
135 
136     /**
137      * Searches a content item by it's unique identifier
138      * 
139      * @param id
140      *            the content id
141      * @param user
142      *            the user who's searching
143      * @return the content
144      * @throws ContentItemNotFoundException
145      * @throws NoAccessException
146      * @throws NodeNotFoundException
147      * @throws ContentManagerException
148      */
149     public ContentItem getContentById(String id, IDIFUser user) throws ContentItemNotFoundException, NoAccessException,
150             NodeNotFoundException, ContentManagerException;
151 
152     /**
153      * Searches content items by name
154      * 
155      * @param name
156      *            the content id
157      * @param user
158      *            the user who's searching
159      * @return the content list
160      * @throws ContentManagerException
161      */
162     public List<ContentItem> getContentByName(String name, IDIFUser user) throws ContentManagerException;
163 
164     /**
165      * Searches content items by parent node
166      * 
167      * @param nodeId
168      *            the parent node id
169      * @param user
170      *            the user who's searching
171      * @return the content list
172      * @throws NodeNotFoundException
173      * @throws ContentManagerException
174      */
175     public List<ContentItem> getContentByParentNode(Long nodeId, IDIFUser user) throws NodeNotFoundException,
176             ContentManagerException;
177 
178     /**
179      * Searches content items by name and node path
180      * 
181      * @param nodeFullPath
182      *            the node fullPath from the content will be retrieve
183      * @param name
184      *            the content id
185      * @param user
186      *            the user who's searching
187      * @return the content object
188      * @throws ContentItemNotFoundException
189      * @throws NodeNotFoundException
190      * @throws NoAccessException
191      * @throws ContentManagerException
192      */
193     public ContentItem getContentFromNodePathByName(String nodeFullPath, String name, IDIFUser user)
194             throws ContentItemNotFoundException, NodeNotFoundException, NoAccessException, ContentManagerException;
195 
196     /**
197      * get content item ACL
198      * 
199      * @param id
200      *            the content item ID
201      * @return the ACL
202      * @throws ContentManagerException
203      */
204     public List<ACLEntry> getContentItemACL(String id) throws ContentManagerException;
205 
206     /**
207      * get node ACL
208      * 
209      * @param id
210      *            the node ID
211      * @return the ACL
212      * @throws ContentManagerException
213      */
214     public List<ACLEntry> getNodeACL(Long id) throws ContentManagerException;
215 
216     /**
217      * Searches a node by unique identifier
218      * 
219      * @param id
220      *            the node ID
221      * @param user
222      *            the user who's searching
223      * @return a list of all existing root nodes
224      * @throws NodeNotFoundException
225      * @throws NoAccessException
226      * @throws ContentManagerException
227      */
228     public Node getNodeById(Long id, IDIFUser user) throws NodeNotFoundException, NoAccessException,
229             ContentManagerException;
230 
231     /**
232      * Searches a node by path
233      * 
234      * @param fullPath
235      *            the full path of the node the node ID
236      * @param user
237      *            the user who's searching
238      * @return a list of all existing root nodes
239      * @throws NodeNotFoundException
240      * @throws NoAccessException
241      * @throws ContentManagerException
242      */
243     public Node getNodeByPath(String fullPath, IDIFUser user) throws NodeNotFoundException, NoAccessException,
244             ContentManagerException;
245 
246     /**
247      * Searches nodes by description
248      * 
249      * @param description
250      *            the description of the node to search
251      * @param user
252      *            the user who's searching
253      * @return a list of all existing nodes with the description
254      * @throws ContentManagerException
255      */
256     public List<Node> getNodesByDescription(String description, IDIFUser user) throws ContentManagerException;
257 
258     /**
259      * Searches nodes by description
260      * 
261      * @param basePathToSearch
262      *            the path to search from
263      * @param description
264      *            the name of the node to search
265      * @param user
266      *            the user who's searching
267      * @return a list of all existing nodes with the description
268      * @throws ContentManagerException
269      */
270     public List<Node> getNodesByDescription(String basePathToSearch, String description, IDIFUser user)
271             throws ContentManagerException;
272 
273     /**
274      * Searches nodes by name
275      * 
276      * @param name
277      *            the name of the node to search
278      * @param user
279      *            the user who's searching
280      * @return a list of all existing root nodes. May exist with same name in different parent nodes
281      * @throws ContentManagerException
282      */
283     public List<Node> getNodesByName(String name, IDIFUser user) throws ContentManagerException;
284 
285     /**
286      * Searches nodes by name
287      * 
288      * @param basePathToSearch
289      *            the path to search from
290      * @param name
291      *            the name of the node to search
292      * @param user
293      *            the user who's searching
294      * @return a list of all existing root nodes. May exist with same name in different parent nodes
295      * @throws ContentManagerException
296      */
297     public List<Node> getNodesByName(String basePathToSearch, String name, IDIFUser user)
298             throws ContentManagerException;
299 
300     /**
301      * Searches nodes by parent node
302      * 
303      * @param nodeId
304      *            the parent node id
305      * @param user
306      *            the user who's searching
307      * @return the content list
308      * @throws NodeNotFoundException
309      * @throws ContentManagerException
310      */
311     public List<Node> getNodesByParentNode(Long nodeId, IDIFUser user) throws NodeNotFoundException,
312             ContentManagerException;
313 
314     /**
315      * Searches root nodes that user has access
316      * 
317      * @param user
318      *            the user who's searching
319      * @return a list of all existing root nodes
320      * @throws ContentManagerException
321      */
322     public List<Node> getRootNodes(IDIFUser user) throws ContentManagerException;
323 
324     /**
325      * Grants group access to content item
326      * 
327      * @param contentId
328      *            the id of the content to grant access
329      * @param groupId
330      *            the group to grant access
331      * @return T if access was granted, F otherwise.
332      * @throws ContentItemNotFoundException
333      * @throws ContentManagerException
334      */
335     public boolean grantContentAccessToGroup(String contentId, String groupId) throws ContentManagerException;
336 
337     /**
338      * Grants user access to content item
339      * 
340      * @param contentId
341      *            the id of the content to grant access
342      * @param user
343      *            the group to grant access
344      * @return T if access was granted, F otherwise.
345      * @throws ContentItemNotFoundException
346      * @throws ContentManagerException
347      */
348     public boolean grantContentAccessToUser(String contentId, IDIFUser user) throws ContentItemNotFoundException,
349             ContentManagerException;
350 
351     /**
352      * Grants group access to node
353      * 
354      * @param nodeId
355      *            the id of the node to grant access
356      * @param groupId
357      *            the group to grant access
358      * @return T if access was granted, F otherwise.
359      * @throws NodeNotFoundException
360      * @throws ContentManagerException
361      */
362     public boolean grantNodeAccessToGroup(Long nodeId, String groupId) throws NodeNotFoundException,
363             ContentManagerException;
364 
365     /**
366      * Grants user access to node
367      * 
368      * @param nodeId
369      *            the id of the node to grant access
370      * @param user
371      *            the user to grant access
372      * @return T if access was granted, F otherwise.
373      * @throws NodeNotFoundException
374      * @throws ContentManagerException
375      */
376     public boolean grantNodeAccessToUser(Long nodeId, IDIFUser user) throws NodeNotFoundException,
377             ContentManagerException;
378 
379     /**
380      * Grants user access to node
381      * 
382      * @param nodePath
383      *            the path of the node to grant access
384      * @param user
385      *            the user to grant access
386      * @return T if access was granted, F otherwise.
387      * @throws NodeNotFoundException
388      * @throws ContentManagerException
389      */
390     public boolean grantNodeAccessToUser(String nodePath, IDIFUser user) throws ContentManagerException;
391 
392     /**
393      * Checks if group has access to the content
394      * 
395      * @param contentId
396      *            the id of the content to check access
397      * @param groupId
398      *            the group to check access
399      * @return T if group has access, F otherwise.
400      * @throws ContentItemNotFoundException
401      * @throws NodeNotFoundException
402      * @throws ContentManagerException
403      */
404     public boolean hasContentAccessGroup(String contentId, String groupId) throws ContentItemNotFoundException,
405             NodeNotFoundException, ContentManagerException;
406 
407     /**
408      * Checks if user has access to the content
409      * 
410      * @param content
411      *            the content to check access
412      * @param user
413      *            the user to check access
414      * @return T if user has access, F otherwise.
415      * @throws ContentItemNotFoundException
416      * @throws NodeNotFoundException
417      * @throws ContentManagerException
418      */
419     public boolean hasContentAccessUser(ContentItem content, IDIFUser user) throws ContentItemNotFoundException,
420             NodeNotFoundException, ContentManagerException;
421 
422     /**
423      * Checks if user has access to the content
424      * 
425      * @param contentId
426      *            the id of the content to check access
427      * @param user
428      *            the user to check access
429      * @return T if user has access, F otherwise.
430      * @throws ContentItemNotFoundException
431      * @throws NodeNotFoundException
432      * @throws ContentManagerException
433      */
434     public boolean hasContentAccessUser(String contentId, IDIFUser user) throws ContentItemNotFoundException,
435             NodeNotFoundException, ContentManagerException;
436 
437     /**
438      * Checks if one of the group has access to the node
439      * 
440      * @param nodeId
441      *            the id of the node to check access
442      * @param groups
443      *            the group list to check access
444      * @return T if group has access, F otherwise.
445      * @throws NodeNotFoundException
446      * @throws ContentManagerException
447      */
448     public boolean hasNodeAccessGroups(Long nodeId, Set<String> groups) throws NodeNotFoundException,
449             ContentManagerException;
450 
451     /**
452      * Checks if user has access to the node
453      * 
454      * @param nodeId
455      *            the id of the node to check access
456      * @param user
457      *            the user to check access
458      * @return T if user has access, F otherwise.
459      * @throws NodeNotFoundException
460      * @throws ContentManagerException
461      */
462     public boolean hasNodeAccessUser(Long nodeId, IDIFUser user) throws NodeNotFoundException, ContentManagerException;
463 
464     /**
465      * Moves content to another node
466      * 
467      * @param contentID
468      *            the content ID to move
469      * @param destinationNodeId
470      *            the destination node to move to
471      * @param user
472      *            the user request the move
473      * @return T if all went well
474      * @throws ContentItemNotFoundException
475      * @throws NodeNotFoundException
476      * @throws NoAccessException
477      * @throws ContentManagerException
478      */
479     public boolean moveContent(String contentID, Long destinationNodeId, IDIFUser user)
480             throws ContentItemNotFoundException, NodeNotFoundException, NoAccessException, ContentManagerException;
481 
482     /**
483      * Moves a node to another parent node
484      * 
485      * @param nodeID
486      *            the original node id
487      * @param destinationNodeId
488      *            the destination node id
489      * @param user
490      *            the user requesting the move operation
491      * @return T if all went well
492      * @throws NodeNotFoundException
493      * @throws NoAccessException
494      * @throws ContentManagerException
495      */
496     public boolean moveNode(Long nodeID, Long destinationNodeId, IDIFUser user) throws NodeNotFoundException,
497             NoAccessException, ContentManagerException;
498 
499     /**
500      * Revokes group access to content item
501      * 
502      * @param contentId
503      *            the id of the content to revoke access
504      * @param groupId
505      *            the group to revoke access
506      * @return T if access was revoked, F otherwise.
507      * @throws ContentItemNotFoundException
508      * @throws ContentManagerException
509      */
510     public boolean revokeContentAccessToGroup(String contentId, String groupId) throws ContentItemNotFoundException,
511             ContentManagerException;
512 
513     /**
514      * Revokes user access to content item
515      * 
516      * @param contentId
517      *            the id of the content to revoke access
518      * @param user
519      *            the group to revoke access
520      * @return T if access was revoked, F otherwise.
521      * @throws ContentItemNotFoundException
522      * @throws ContentManagerException
523      */
524     public boolean revokeContentAccessToUser(String contentId, IDIFUser user) throws ContentItemNotFoundException,
525             ContentManagerException;
526 
527     /**
528      * Revokes group access to node
529      * 
530      * @param nodeId
531      *            the id of the node to revoke access
532      * @param groupId
533      *            the group to revoke access
534      * @return T if access was revoked, F otherwise.
535      * @throws NodeNotFoundException
536      * @throws ContentManagerException
537      */
538     public boolean revokeNodeAccessToGroup(Long nodeId, String groupId) throws NodeNotFoundException,
539             ContentManagerException;
540 
541     /**
542      * Revokes user access to node
543      * 
544      * @param nodeId
545      *            the id of the node to revoke access
546      * @param user
547      *            the user to revoke access
548      * @return T if access was revoked, F otherwise.
549      * @throws NodeNotFoundException
550      * @throws ContentManagerException
551      */
552     public boolean revokeNodeAccessToUser(Long nodeId, IDIFUser user) throws NodeNotFoundException,
553             ContentManagerException;
554 
555     /**
556      * Roll back the a Content Manager transaction
557      */
558     public void rollbackTransaction();
559 
560     /**
561      * Updates content in the repository
562      * 
563      * @param content
564      *            the content to update in the repository
565      * @return the updated content
566      * @throws ContentItemNotFoundException
567      * @throws NodeNotFoundException
568      * @throws NoAccessException
569      * @throws ContentItemWithDuplicateNameAndParentNodeException
570      * @throws ContentManagerException
571      */
572     public ContentItem updateContent(ContentItem content) throws ContentItemNotFoundException, NodeNotFoundException,
573             NoAccessException, ContentItemWithDuplicateNameAndParentNodeException, ContentManagerException;
574 
575     /**
576      * Updates content in the repository
577      * 
578      * @param node
579      *            the node to update in the repository
580      * @return the updated content
581      * @throws NodeNotFoundException
582      * @throws NoAccessException
583      * @throws ContentManagerException
584      */
585     public Node updateNode(Node node) throws NodeNotFoundException, NoAccessException, ContentManagerException;
586 
587 }