View Javadoc
1   package org.argeo.connect;
2   
3   import javax.jcr.Node;
4   import javax.jcr.RepositoryException;
5   import javax.jcr.Session;
6   
7   /** Minimal interface that a Connect AppService must implement */
8   public interface AppService {
9   	// final static Log log = LogFactory.getLog(AppService.class);
10  
11  	/** Returns the current App name */
12  	public String getAppBaseName();
13  
14  	public Node publishEntity(Node parent, String nodeType, Node srcNode, boolean removeSrcNode)
15  			throws RepositoryException;
16  
17  	/**
18  	 * Try to save and optionally publish a business object after applying context
19  	 * specific rules and special behaviours (typically cache updates).
20  	 * 
21  	 * @return the entity that has been saved (and optionally published): note that
22  	 *         in some cases (typically, the first save of a draft node in the
23  	 *         business sub tree) the returned node is not the same as the one that
24  	 *         has been passed
25  	 * @param entity
26  	 * @param publish
27  	 *            also publishes the corresponding node
28  	 * @throws PeopleException
29  	 *             If one of the rule defined for this type is not respected. Use
30  	 *             getMessage to display to the user if needed
31  	 */
32  	public Node saveEntity(Node entity, boolean publish);
33  
34  	/**
35  	 * Computes the App specific relative path for a known type based on properties
36  	 * of the passed node
37  	 */
38  	public String getDefaultRelPath(Node entity) throws RepositoryException;
39  
40  	/**
41  	 * Computes the App specific relative path for this known node type based on the
42  	 * passed id
43  	 * 
44  	 * @param session
45  	 *            TODO
46  	 */
47  	public String getDefaultRelPath(Session session, String nodeType, String id);
48  
49  	/**
50  	 * Returns a display name that is app specific and that depends on one or more
51  	 * of the entity properties. The user can always set a flag to force the value
52  	 * to something else.
53  	 * 
54  	 * The Display name is usually stored in the JCR_TITLE property.
55  	 */
56  	public String getDisplayName(Node entity);
57  
58  	/**
59  	 * Returns (after creation if necessary) the base parent for draft nodes of this
60  	 * application
61  	 */
62  	public Node getDraftParent(Session session) throws RepositoryException;
63  
64  	/**
65  	 * Convenience method to create a Node with given mixin under the current logged
66  	 * in user home. Creates a UUID and set the connect:uid properties. The session
67  	 * is not saved.
68  	 */
69  	public Node createDraftEntity(Session session, String mainMixin) throws RepositoryException;
70  
71  	/**
72  	 * Simply checks if the passed entity has a primary or mixin type that is known
73  	 * and thus can be managed by the this App
74  	 */
75  	public boolean isKnownType(Node entity);
76  
77  	/**
78  	 * Simply checks if the passed type is known and thus can be managed by the this
79  	 * App. It might be a primary or mixin type
80  	 */
81  	public boolean isKnownType(String nodeType);
82  
83  	/**
84  	 * Searches the workspace corresponding to the passed session. It returns the
85  	 * corresponding entity or null if none has been found. This UID is
86  	 * implementation specific and is not a JCR Identifier.
87  	 * 
88  	 * It will throw a PeopleException if more than one item with this ID has been
89  	 * found
90  	 * 
91  	 * @param session
92  	 * @param parentPath
93  	 *            can be null or empty
94  	 * @param uid
95  	 *            the implementation specific UID of the searched entity
96  	 */
97  	public Node getEntityByUid(Session session, String parentPath, String uid);
98  
99  	//
100 	// CANONICAL DEFAULTS
101 	//
102 
103 	/**
104 	 * Returns the App specific main type of a node, that can be its primary type or
105 	 * one of its mixin, typically for the People App.
106 	 */
107 	default public String getMainNodeType(Node node) {
108 		return null;
109 	}
110 
111 	default public String getBaseRelPath(String nodeType) {
112 		return getAppBaseName();
113 	}
114 
115 	default public Node publishEntity(Node parent, String nodeType, Node srcNode) throws RepositoryException {
116 		return publishEntity(parent, nodeType, srcNode, true);
117 	}
118 
119 	/**
120 	 * Draft implementation of an i18n mechanism to retrieve labels given a key
121 	 */
122 	default public String getLabel(String key, String... innerNames) {
123 		return key;
124 	}
125 
126 }