001    /**
002     * Copyright 2005-2012 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.kew.api.document;
017    
018    import org.joda.time.DateTime;
019    import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
020    import org.kuali.rice.core.api.exception.RiceIllegalStateException;
021    import org.kuali.rice.core.api.util.jaxb.DateTimeAdapter;
022    import org.kuali.rice.core.api.util.jaxb.MapStringStringAdapter;
023    import org.kuali.rice.kew.api.KewApiConstants;
024    import org.kuali.rice.kew.api.action.ActionRequest;
025    import org.kuali.rice.kew.api.action.ActionTaken;
026    import org.kuali.rice.kew.api.document.search.DocumentSearchCriteria;
027    import org.kuali.rice.kew.api.document.search.DocumentSearchResults;
028    import org.kuali.rice.kew.api.document.node.RouteNodeInstance;
029    
030    import javax.jws.WebMethod;
031    import javax.jws.WebParam;
032    import javax.jws.WebResult;
033    import javax.jws.WebService;
034    import javax.jws.soap.SOAPBinding;
035    import javax.xml.bind.annotation.XmlElement;
036    import javax.xml.bind.annotation.XmlElementWrapper;
037    import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
038    import java.math.BigDecimal;
039    import java.util.List;
040    import java.util.Map;
041    
042    /**
043     * TODO ... annotate for JAX-WS! 
044     * 
045     * @author Kuali Rice Team (rice.collab@kuali.org)
046     */
047    @WebService(name = "workflowDocumentService", targetNamespace = KewApiConstants.Namespaces.KEW_NAMESPACE_2_0)
048    @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
049    public interface WorkflowDocumentService {
050    
051        /**
052         * Gets a {@link Document} from a documentId.
053         *
054         * <p>
055         *   This method will return null if the Document does not exist.
056         * </p>
057         *
058         * @param documentId the unique id of the document to return
059         * @return the document with the passed in id value
060         * @throws RiceIllegalArgumentException if {@code documentId} is null
061         */
062        @WebMethod(operationName = "getDocument")
063        @WebResult(name = "document")
064            Document getDocument(@WebParam(name = "documentId") String documentId) throws RiceIllegalArgumentException;
065    
066        /**
067         * Returns a boolean depending on if a {@link Document} exists with the specified documentId
068         *
069         * <p>
070         *   This method will return false if the responsibility does not exist.
071         * </p>
072         *
073         * @param documentId the unique id of the document to check for existence
074         * @return boolean value representative of whether the document exists
075         * @throws RiceIllegalArgumentException if {@code documentId} is null
076         */
077        @WebMethod(operationName = "doesDocumentExist")
078        @WebResult(name = "document")
079            boolean doesDocumentExist(@WebParam(name = "documentId") String documentId)
080                throws RiceIllegalArgumentException;
081    
082        /**
083         * Gets {@link DocumentContent} from a documentId.
084         *
085         * <p>
086         *   This method will return null if the document does not exist.
087         * </p>
088         *
089         * @param documentId the unique id of the document content to return
090         * @return the documentContent with the passed in id value
091         * @throws RiceIllegalArgumentException if {@code documentId} is null
092         */
093        @WebMethod(operationName = "getDocumentContent")
094        @WebResult(name = "documentContent")
095            DocumentContent getDocumentContent(@WebParam(name = "documentId") String documentId)
096                throws RiceIllegalArgumentException;
097    
098        /**
099         * Gets a list of root ActionRequests for a given documentId
100         *
101         * @param documentId the unique id of a document
102         *
103         * @return the list of root ActionRequests for a given documentId
104         *
105         * @throws RiceIllegalArgumentException if {@code documentId} is null
106         */
107        @WebMethod(operationName = "getRootActionRequests")
108        @XmlElementWrapper(name = "rootActionRequests", required = true)
109        @XmlElement(name = "rootActionRequest", required = false)
110        @WebResult(name = "rootActionRequests")
111            List<ActionRequest> getRootActionRequests(@WebParam(name = "documentId") String documentId)
112                throws RiceIllegalArgumentException;
113    
114        /**
115         * Gets a list of ActionRequests for a given documentId, nodeName and principalId
116         *
117         * @param documentId the unique id of a document
118         * @param nodeName the name of a RouteNode
119         * @param principalId the unique id of a principal
120         *
121         * @return the list of ActionRequests for a given documentId, nodeName, and principalId
122         *
123         * @throws RiceIllegalArgumentException if {@code documentId} is null
124         */
125        @WebMethod(operationName = "getActionRequestsForPrincipalAtNode")
126        @XmlElementWrapper(name = "actionRequests", required = true)
127        @XmlElement(name = "actionRequests", required = false)
128        @WebResult(name = "actionRequests")
129            List<ActionRequest> getActionRequestsForPrincipalAtNode(@WebParam(name = "documentId") String documentId,
130                @WebParam(name = "nodeName") String nodeName, @WebParam(name = "principalId") String principalId)
131                throws RiceIllegalArgumentException;
132    
133        /**
134         * Gets a list of past {@link ActionTaken} of a {@link Document} with the given documentId
135         *
136         * @param documentId the unique id of a document
137         *
138         * @return the list of past ActionTakens for a given documentId
139         *
140         * @throws RiceIllegalArgumentException if {@code documentId} is null
141         */
142        @WebMethod(operationName = "getActionRequests")
143        @XmlElementWrapper(name = "actionsTaken", required = true)
144        @XmlElement(name = "actionTaken", required = false)
145        @WebResult(name = "actionsTaken")
146            List<ActionTaken> getActionsTaken(@WebParam(name = "documentId") String documentId)
147                throws RiceIllegalArgumentException;
148    
149    
150        /**
151         * Gets a {@link DocumentDetail} of a {@link Document} with the given documentTypeName and appId
152         *
153         * @param documentTypeName the name of the DocumentType
154         * @param appId the unique id of the application
155         *
156         * @return a {@link DocumentDetail} for with the given documentTypeName and appId
157         *
158         * @throws RiceIllegalArgumentException if {@code documentTypeName} is null
159         * @throws RiceIllegalArgumentException if {@code appId} is null
160         */
161        @WebMethod(operationName = "getDocumentDetailByAppId")
162        @WebResult(name = "documentDetail")
163        DocumentDetail getDocumentDetailByAppId(@WebParam(name = "documentTypeName") String documentTypeName,
164                                                @WebParam(name = "appId") String appId)
165                throws RiceIllegalArgumentException;
166    
167        /**
168         * Gets a {@link DocumentDetail} of a {@link Document} with the given documentId
169         *
170         * @param documentId the unique id of the Document
171         *
172         * @return a {@link DocumentDetail} for with the given documentId
173         *
174         * @throws RiceIllegalArgumentException if {@code documentId} is null
175         */
176        @WebMethod(operationName = "getDocumentDetail")
177        @WebResult(name = "documentDetail")
178            DocumentDetail getDocumentDetail(@WebParam(name = "documentId") String documentId);
179    
180    
181        /**
182         * Gets a {@link RouteNodeInstance} with the given nodeInstanceId
183         *
184         * @param routeNodeInstanceId the unique id of the {@link RouteNodeInstance}
185         *
186         * @return a {@link DocumentDetail} for with the given documentId
187         *
188         * @throws RiceIllegalArgumentException if {@code nodeInstanceId} is null
189         */
190        @WebMethod(operationName = "getRouteNodeInstance")
191        @WebResult(name = "routeNodeInstance")
192            RouteNodeInstance getRouteNodeInstance(@WebParam(name = "routeNodeInstanceId") String routeNodeInstanceId)
193                throws RiceIllegalArgumentException;
194    
195        /**
196         * Gets a value application document id of a {@link Document} with the given documentId
197         *
198         * @param documentId the unique id of the Document
199         *
200         * @return the value of the applicationDocumentId for the {@link Document} with the given documentId
201         *
202         * @throws RiceIllegalArgumentException if {@code documentId} is null
203         */
204        @WebMethod(operationName = "getApplicationDocumentId")
205        @WebResult(name = "applicationDocumentId")
206            String getApplicationDocumentId(@WebParam(name = "documentId") String documentId)
207                throws RiceIllegalArgumentException;
208    
209        /**
210         * Executes a search for workflow documents using the given criteria and as the principal with the given id.  Since
211         * documents can define security which permits access to view certain search results, the given principal id will
212         * be used when evaluating which documents should be filtered from the results because of lack of access.
213         *
214         * @param principalId the id of the principal to execute the search as, if this value is non-null then security
215         * filtering will be executed against the results, if it is null then no filtering will be performed
216         * @param criteria the criteria to use when executing the search
217         *
218         * @return the results of the search, this will never be null but may contain an empty list of results
219         *
220         * @throws RiceIllegalArgumentException if the given criteria is null
221         */
222        @WebMethod(operationName = "documentSearch")
223        @WebResult(name = "documentSearchResults")
224        DocumentSearchResults documentSearch(
225                @WebParam(name = "principalId") String principalId,
226                @WebParam(name = "criteria") DocumentSearchCriteria criteria)
227            throws RiceIllegalArgumentException;
228    
229        /**
230         * Gets a list of all {@link RouteNodeInstance} for a {@link Document} with the given documentId
231         *
232         * @param documentId the unique id of a Document
233         *
234         * @return the list of {@link RouteNodeInstance}s for the {@link Document} with the given documentId
235         *
236         * @throws RiceIllegalArgumentException if {@code documentId} is null
237         */
238        @WebMethod(operationName = "getRouteNodeInstances")
239        @XmlElementWrapper(name = "routeNodeInstances", required = true)
240        @XmlElement(name = "routeNodeInstance", required = false)
241        @WebResult(name = "routeNodeInstances")
242            List<RouteNodeInstance> getRouteNodeInstances(@WebParam(name = "documentId") String documentId)
243                throws RiceIllegalArgumentException;
244    
245        /**
246         * Gets a list of active {@link RouteNodeInstance} for a {@link Document} with the given documentId
247         *
248         * @param documentId the unique id of a Document
249         *
250         * @return the list of active {@link RouteNodeInstance}s for the {@link Document} with the given documentId
251         *
252         * @throws RiceIllegalArgumentException if {@code documentId} is null
253         */
254        @WebMethod(operationName = "getActiveRouteNodeInstances")
255        @XmlElementWrapper(name = "routeNodeInstances", required = true)
256        @XmlElement(name = "routeNodeInstance", required = false)
257        @WebResult(name = "routeNodeInstances")
258            List<RouteNodeInstance> getActiveRouteNodeInstances(@WebParam(name = "documentId") String documentId)
259                throws RiceIllegalArgumentException;
260    
261        /**
262         * Gets a list of terminal {@link RouteNodeInstance}s for a {@link Document} with the given documentId
263         *
264         * @param documentId the unique id of a Document
265         *
266         * @return the list of terminal {@link RouteNodeInstance}s for the {@link Document} with the given documentId
267         *
268         * @throws RiceIllegalArgumentException if {@code documentId} is null
269         */
270        @WebMethod(operationName = "getTerminalRouteNodeInstances")
271        @XmlElementWrapper(name = "routeNodeInstances", required = true)
272        @XmlElement(name = "routeNodeInstance", required = false)
273        @WebResult(name = "routeNodeInstances")
274            List<RouteNodeInstance> getTerminalRouteNodeInstances(@WebParam(name = "documentId") String documentId)
275                throws RiceIllegalArgumentException;
276    
277        /**
278         * Gets a list of current {@link RouteNodeInstance}s for a {@link Document} with the given documentId
279         *
280         * @param documentId the unique id of a Document
281         *
282         * @return the list of current {@link RouteNodeInstance}s for the {@link Document} with the given documentId
283         *
284         * @throws RiceIllegalArgumentException if {@code documentId} is null
285         */
286        @WebMethod(operationName = "getCurrentRouteNodeInstances")
287        @XmlElementWrapper(name = "routeNodeInstances", required = true)
288        @XmlElement(name = "routeNodeInstance", required = false)
289        @WebResult(name = "routeNodeInstances")
290            List<RouteNodeInstance> getCurrentRouteNodeInstances(@WebParam(name = "documentId") String documentId)
291                throws RiceIllegalArgumentException;
292    
293        /**
294         * Gets a list of all previous {@link RouteNodeInstance}'s node names for a {@link Document} with the given documentId
295         *
296         * @param documentId the unique id of a Document
297         *
298         * @return the list of all previous {@link RouteNodeInstance}'s node names for the {@link Document} with the
299         * given documentId
300         *
301         * @throws RiceIllegalArgumentException if {@code documentId} is null
302         */
303        @WebMethod(operationName = "getPreviousRouteNodeNames")
304        @XmlElementWrapper(name = "previousRouteNodeNames", required = true)
305        @XmlElement(name = "previousRouteNodeName", required = false)
306        @WebResult(name = "previousRouteNodeNames")
307            List<String> getPreviousRouteNodeNames(@WebParam(name = "documentId") String documentId)
308                throws RiceIllegalArgumentException;
309    
310            /**
311         * Gets the status value for a {@link Document} with the given documentId
312         *
313         * @param documentId the unique id of a Document
314         *
315         * @return the current status of the {@link Document} with the
316         * given documentId
317         *
318         * @throws RiceIllegalArgumentException if {@code documentId} is null
319         */
320        @WebMethod(operationName = "getDocumentStatus")
321        @WebResult(name = "documentStatus")
322            DocumentStatus getDocumentStatus(@WebParam(name = "documentId") String documentId)
323                throws RiceIllegalArgumentException;
324    
325    
326        /**
327         * Gets a list of principalId values for a {@link Document} with the given documentId
328         * and action request code that have pending action requests
329         *
330         * @param actionRequestedCd code for the pending action requested
331         * @param documentId the unique id of a Document
332         *
333         * @return a list of principalIds for the {@link Document} with the
334         * given parameters and have a pending action request
335         *
336         * @throws RiceIllegalArgumentException if {@code documentId} is null
337         * @throws RiceIllegalArgumentException if {@code actionRequestCd} is null
338         */
339        @WebMethod(operationName = "getPrincipalIdsWithPendingActionRequestByActionRequestedAndDocId")
340        @XmlElementWrapper(name = "principalIds", required = true)
341        @XmlElement(name = "principalId", required = false)
342        @WebResult(name = "principalIds")
343            List<String> getPrincipalIdsWithPendingActionRequestByActionRequestedAndDocId(
344                        @WebParam(name = "actionRequestedCd") String actionRequestedCd,
345                                @WebParam(name = "documentId") String documentId)
346                throws RiceIllegalArgumentException;
347    
348    
349        /**
350         * Gets the {@link Document} initiator's principalId with the given documentId
351         *
352         * @param documentId the unique id of a Document
353         *
354         * @return the {@link Document} initiator's principalId
355         *
356         * @throws RiceIllegalArgumentException if {@code documentId} is null
357         */
358        @WebMethod(operationName = "getDocumentInitiatorPrincipalId")
359        @WebResult(name = "principalId")
360            String getDocumentInitiatorPrincipalId(@WebParam(name = "documentId") String documentId)
361                throws RiceIllegalArgumentException;
362    
363        /**
364         * Gets the {@link Document}'s 'routed by' principalId with the given documentId
365         * Returns null if the document is not found
366         *
367         * @param documentId the unique id of a Document
368         *
369         * @return the {@link Document}'s 'routed by' principalId
370         *
371         * @throws RiceIllegalArgumentException if {@code documentId} is null
372         */
373        @WebMethod(operationName = "getRoutedByPrincipalIdByDocumentId")
374        @WebResult(name = "principalId")
375            String getRoutedByPrincipalIdByDocumentId(@WebParam(name = "documentId") String documentId)
376                throws RiceIllegalArgumentException;
377    
378        /**
379         * Does a direct search for searchableAttributes without going through the document search
380         * This returns a list of String values for String searchableAttributes
381         *
382         * @param documentId the unique id of a Document
383         * @param key the searchableAttributes key value
384         *
385         * @return a list of String values for the {@link Document} with the
386         * given documentId and searchable attribute key
387         *
388         * @throws RiceIllegalArgumentException if {@code documentId} is null
389         * @throws RiceIllegalArgumentException if {@code key} is null
390         */
391        @WebMethod(operationName = "getSearchableAttributeStringValuesByKey")
392        @XmlElementWrapper(name = "searchableAttributeStringValues", required = true)
393        @XmlElement(name = "searchableAttributeStringValue", required = false)
394        @WebResult(name = "searchableAttributeStringValues")
395            List<String> getSearchableAttributeStringValuesByKey(@WebParam(name = "documentId") String documentId,
396                                                                         @WebParam(name = "key") String key)
397                throws RiceIllegalArgumentException;
398    
399            /**
400         * Does a direct search for searchableAttributes without going through the document search
401         * This returns a list of DateTime values for date/time searchableAttributes
402         *
403         * @param documentId the unique id of a Document
404         * @param key the searchableAttributes key value
405         *
406         * @return a list of DateTime values for the {@link Document} with the
407         * given documentId and searchable attribute key
408         *
409         * @throws RiceIllegalArgumentException if {@code documentId} is null
410         * @throws RiceIllegalArgumentException if {@code key} is null
411         */
412        @WebMethod(operationName = "getSearchableAttributeDateTimeValuesByKey")
413        @XmlElementWrapper(name = "searchableAttributeDateTimeValues", required = true)
414        @XmlElement(name = "searchableAttributeDateTimeValue", required = false)
415        @WebResult(name = "searchableAttributeDateTimeValues")
416            @XmlJavaTypeAdapter(value = DateTimeAdapter.class)
417            List<DateTime> getSearchableAttributeDateTimeValuesByKey(@WebParam(name = "documentId") String documentId,
418                                                                             @WebParam(name = "key") String key)
419                throws RiceIllegalArgumentException;
420    
421            /**
422         * Does a direct search for searchableAttributes without going through the document search
423         * This returns a list of BigDecimal values for decimal searchableAttributes
424         *
425         * @param documentId the unique id of a Document
426         * @param key the searchableAttributes key value
427         *
428         * @return a list of BigDecimal values for the {@link Document} with the
429         * given documentId and searchable attribute key
430         *
431         * @throws RiceIllegalArgumentException if {@code documentId} is null
432         * @throws RiceIllegalArgumentException if {@code key} is null
433         */
434        @WebMethod(operationName = "getSearchableAttributeFloatValuesByKey")
435        @XmlElementWrapper(name = "searchableAttributeBigDecimalValues", required = true)
436        @XmlElement(name = "searchableAttributeBigDecimalValue", required = false)
437        @WebResult(name = "searchableAttributeBigDecimalValues")
438            List<BigDecimal> getSearchableAttributeFloatValuesByKey(@WebParam(name = "documentId") String documentId,
439                                                                            @WebParam(name = "key") String key)
440                throws RiceIllegalArgumentException;
441    
442            /**
443         * Does a direct search for searchableAttributes without going through the document search
444         * This returns a list of Long values for long searchableAttributes
445         *
446         * @param documentId the unique id of a Document
447         * @param key the searchableAttributes key value
448         *
449         * @return a list of BigDecimal values for the {@link Document} with the
450         * given documentId and searchable attribute key
451         *
452         * @throws RiceIllegalArgumentException if {@code documentId} is null
453         * @throws RiceIllegalArgumentException if {@code key} is null
454         */
455        @WebMethod(operationName = "getSearchableAttributeLongValuesByKey")
456        @XmlElementWrapper(name = "searchableAttributeLongValues", required = true)
457        @XmlElement(name = "searchableAttributeLongValue", required = false)
458        @WebResult(name = "searchableAttributeLongValues")
459            List<Long> getSearchableAttributeLongValuesByKey(@WebParam(name = "documentId") String documentId,
460                                                                     @WebParam(name = "key") String key)
461                throws RiceIllegalArgumentException;
462    
463        /**
464         * Gets a list of DocumentStatusTransitions for the {@link Document} with the given documentId
465         *
466         * @param documentId the unique id of a Document
467         *
468         * @return a list of DocumentStatusTransitions for the {@link Document} with the
469         * given documentId
470         *
471         * @throws RiceIllegalArgumentException if {@code documentId} is null
472         */
473        @WebMethod(operationName = "getDocumentStatusTransitionHistory")
474        @XmlElementWrapper(name = "documentStatusTransitions", required = true)
475        @XmlElement(name = "documentStatusTransition", required = false)
476        @WebResult(name = "documentStatusTransitions")
477            List<DocumentStatusTransition> getDocumentStatusTransitionHistory(@WebParam(name = "documentId") String documentId)
478                throws RiceIllegalArgumentException;
479    
480    
481        /**
482         * Saves the passed in {@link DocumentLink}.  If the {@link DocumentLink}'s id field is created.  This method
483         * actually creates two different links in the database (one from the document being
484             * linked to the target and vice-versa).  If the links already exist, then the call is ignored.
485         *
486         * @param documentLink the unique id of a Document
487         *
488         * @return the newly saved {@link DocumentLink}
489         *
490         * @throws RiceIllegalArgumentException if {@code documentLink} is null
491         * @throws RiceIllegalArgumentException if {@code documentLink}'s is id value is populated
492         */
493        @WebMethod(operationName = "addDocumentLink")
494        @WebResult(name = "documentLink")
495            DocumentLink addDocumentLink(@WebParam(name = "documentLink") DocumentLink documentLink) throws RiceIllegalArgumentException;
496    
497        /**
498         * Removes the  {@link DocumentLink} with the given documentLinkId.
499         *
500         * @param documentLinkId the unique id of a Document
501         *
502         * @return the deleted {@link DocumentLink}
503         *
504         * @throws RiceIllegalArgumentException if {@code documentLink} is null
505         * @throws RiceIllegalStateException if no DocumentLink with the passed in{@code documentLink} exist
506         */
507        @WebMethod(operationName = "deleteDocumentLink")
508        @WebResult(name = "documentLink")
509            DocumentLink deleteDocumentLink(@WebParam(name = "documentLinkId") String documentLinkId) throws RiceIllegalArgumentException;
510    
511    
512        /**
513         * Removes all {@link DocumentLink}s for the given {@link Document} with the given originatingDocumentId.
514         *
515         * @param originatingDocumentId the unique id of the originating Document of the document links to delete
516         *
517         * @return a list of the deleted {@link DocumentLink}s
518         *
519         * @throws RiceIllegalArgumentException if {@code documentLink} is null
520         */
521        @WebMethod(operationName = "deleteDocumentLinksByDocumentId")
522        @XmlElementWrapper(name = "documentLinks", required = true)
523        @XmlElement(name = "documentLink", required = false)
524        @WebResult(name = "documentLinks")
525        List<DocumentLink> deleteDocumentLinksByDocumentId(@WebParam(name = "originatingDocumentId") String originatingDocumentId) throws RiceIllegalArgumentException;
526    
527        /**
528         * Gets a list of all {@link DocumentLink}s for outgoing links from the {@link Document} with the given documentId.
529         *
530         * @param originatingDocumentId the unique id of the originating Document of the document links to retrieve
531         *
532         * @return a list of the outgoing {@link DocumentLink}s for the originating document
533         *
534         * @throws RiceIllegalArgumentException if {@code originatingDocumentId} is null
535         */
536        @WebMethod(operationName = "getOutgoingDocumentLinks")
537        @XmlElementWrapper(name = "documentLinks", required = true)
538        @XmlElement(name = "documentLink", required = false)
539        @WebResult(name = "documentLinks")
540        List<DocumentLink> getOutgoingDocumentLinks(@WebParam(name = "originatingDocumentId") String originatingDocumentId) throws RiceIllegalArgumentException;
541    
542        /**
543         * Gets a list of all {@link DocumentLink}s for incoming links from the {@link Document} with the given documentId.
544         *
545         * @param originatingDocumentId the unique id of the incoming Document of the document links to retrieve
546         *
547         * @return a list of the outgoing {@link DocumentLink}s for the incoming document
548         *
549         * @throws RiceIllegalArgumentException if {@code originatingDocumentId} is null
550         */
551        @WebMethod(operationName = "getIncomingDocumentLinks")
552        @XmlElementWrapper(name = "documentLinks", required = true)
553        @XmlElement(name = "documentLink", required = false)
554        @WebResult(name = "documentLinks")
555        List<DocumentLink> getIncomingDocumentLinks(@WebParam(name = "originatingDocumentId") String originatingDocumentId) throws RiceIllegalArgumentException;
556    
557        /**
558         * Gets the {@link DocumentLink} for  with the given documentLinkId.
559         *
560         * @param documentLinkId the unique id of the {@link DocumentLink} to retrieve
561         *
562         * @return a {@link DocumentLink} with the passed in documentLinkId
563         *
564         * @throws RiceIllegalArgumentException if {@code documentLinkId} is null
565         */
566        @WebMethod(operationName = "getDocumentLink")
567        @WebResult(name = "documentLinks")
568        DocumentLink getDocumentLink(@WebParam(name = "documentLinkId") String documentLinkId) throws RiceIllegalArgumentException;
569    
570    }