1 package org.argeo.activities; 2 3 import java.util.Calendar; 4 import java.util.List; 5 6 import javax.jcr.Node; 7 import javax.jcr.NodeIterator; 8 import javax.jcr.RepositoryException; 9 import javax.jcr.Session; 10 11 import org.argeo.connect.AppService; 12 13 /** 14 * Manage activity and tasks concepts in a Connect repository. Implementing 15 * applications should extend and/or override the canonical implementation in 16 * order to provide business specific behaviours. 17 * 18 * The correct instance of this interface is usually acquired through the 19 * peopleService. 20 */ 21 public interface ActivitiesService extends AppService { 22 23 /* ACTIVITIES */ 24 25 /** 26 * Simply configures a simple activity using default manager (the current 27 * logged in user) and default date (now) 28 */ 29 public Node configureActivity(Node activity, String type, String title, String desc, List<Node> relatedTo) 30 throws RepositoryException; 31 32 /** 33 * Creates a new simple activity using the default path 34 * 35 * We use a distinct manager and activity date rather than JCR_CREATED and 36 * JCR_CREATED_BY fields because we cannot force these fields and this is 37 * problematic for instance when importing old activities 38 */ 39 public Node configureActivity(Node activity, String reporterId, String type, String title, String desc, 40 List<Node> relatedTo, Calendar date) throws RepositoryException; 41 42 /** 43 * Returns the default activity English Label if defined. 44 * 45 * It relies on the mixin of this node. If an activity Node is having more 46 * than one "activity type" mixin, the main type as returned by the 47 * {@link AppService#getMainNodeType(Node)} methods will be used. 48 */ 49 public String getActivityLabel(Node activity); 50 51 /** 52 * Retrieves a date to display depending on the node type. 53 * 54 * @param activityNode 55 * an activity or a task 56 * @return 57 */ 58 public Calendar getActivityRelevantDate(Node activityNode); 59 60 /* TASKS */ 61 /** 62 * Creates a new draft task with the minimum information 63 * 64 * @param taskNodeType 65 */ 66 public Node configureTask(Node task, String taskNodeType, String title, String description, String assignedTo) 67 throws RepositoryException; 68 69 /** 70 * Creates a new draft task with the given information. 71 * 72 * @param session 73 * @param taskNodeType 74 * @param reporterId 75 * @param title 76 * @param description 77 * @param assignedTo 78 * @param relatedTo 79 * @param creationDate 80 * @param dueDate 81 * @param wakeUpDate 82 * @return 83 */ 84 public Node configureTask(Node task, String taskNodeType, String reporterId, String title, String description, 85 String assignedTo, List<Node> relatedTo, Calendar creationDate, Calendar dueDate, Calendar wakeUpDate) 86 throws RepositoryException; 87 88 public void setTaskDefaultStatus(Node taskNode, String taskNodeType) throws RepositoryException; 89 90 // public Node createPoll(Node parentNode, String reporterId, String 91 // pollName, String title, String description, 92 // String assignedTo, List<Node> relatedTo, Calendar creationDate, Calendar 93 // dueDate, Calendar wakeUpDate) 94 // throws RepositoryException; 95 96 /** 97 * Retrieves tasks assigned to one of the group that contain the username 98 * retrieved from the current session 99 */ 100 public NodeIterator getMyTasks(Session session, boolean onlyOpenTasks); 101 102 /** 103 * Retrieves tasks assigned to one of the group that contain this username 104 */ 105 public NodeIterator getTasksForUser(Session session, String username, boolean onlyOpenTasks); 106 107 /** Gets the display name of the assigned to group for this task */ 108 public String getAssignedToDisplayName(Node taskNode); 109 110 /** 111 * Updates the status of this task to the new passed status. It is also in 112 * charge of updating other task properties, typically after determining if 113 * the closed status of the task has changed. 114 * 115 * It also enable to keep a cache of modified node if the update triggered 116 * modification or update on other nodes. 117 * 118 * It will return true if anything has changed but *DOES NOT SAVE* the 119 * session 120 */ 121 public boolean updateStatus(String templateId, Node taskNode, String newStatus, List<String> modifiedPaths) 122 throws RepositoryException; 123 124 /** 125 * Determines whether a task has been done. Application should override or 126 * extends this to provide specific behaviour 127 */ 128 public boolean isTaskDone(Node taskNode); 129 130 /** 131 * Determines whether is sleeping. Application should override or extends 132 * this to provide specific behaviour 133 */ 134 public boolean isTaskSleeping(Node taskNode); 135 136 /* MISCELLANEOUS */ 137 }