View Javadoc

1   /**
2    * Copyright 2010 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10   * software distributed under the License is distributed on an "AS IS"
11   * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12   * or implied. See the License for the specific language governing
13   * permissions and limitations under the License.
14   */
15  
16  package org.kuali.student.core.statement.service;
17  
18  import java.util.List;
19  
20  import javax.jws.WebParam;
21  import javax.jws.WebService;
22  import javax.jws.soap.SOAPBinding;
23  
24  import org.kuali.student.core.dictionary.service.DictionaryService;
25  import org.kuali.student.core.dto.StatusInfo;
26  import org.kuali.student.core.exceptions.AlreadyExistsException;
27  import org.kuali.student.core.exceptions.CircularReferenceException;
28  import org.kuali.student.core.exceptions.CircularRelationshipException;
29  import org.kuali.student.core.exceptions.DataValidationErrorException;
30  import org.kuali.student.core.exceptions.DoesNotExistException;
31  import org.kuali.student.core.exceptions.InvalidParameterException;
32  import org.kuali.student.core.exceptions.MissingParameterException;
33  import org.kuali.student.core.exceptions.OperationFailedException;
34  import org.kuali.student.core.exceptions.PermissionDeniedException;
35  import org.kuali.student.core.exceptions.VersionMismatchException;
36  import org.kuali.student.core.search.service.SearchService;
37  import org.kuali.student.core.statement.dto.NlUsageTypeInfo;
38  import org.kuali.student.core.statement.dto.RefStatementRelationInfo;
39  import org.kuali.student.core.statement.dto.RefStatementRelationTypeInfo;
40  import org.kuali.student.core.statement.dto.ReqComponentInfo;
41  import org.kuali.student.core.statement.dto.ReqComponentTypeInfo;
42  import org.kuali.student.core.statement.dto.StatementInfo;
43  import org.kuali.student.core.statement.dto.StatementTreeViewInfo;
44  import org.kuali.student.core.statement.dto.StatementTypeInfo;
45  import org.kuali.student.core.validation.dto.ValidationResultInfo;
46  
47  @WebService(name = "StatementService", targetNamespace = "http://student.kuali.org/wsdl/statement")
48  @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
49  public interface StatementService extends DictionaryService, SearchService {
50  
51  	/**
52  	 * Retrieves the list of base types which can be connected to a document.
53  	 * 
54  	 * @return The list of types which can be connected to a document
55  	 * @throws OperationFailedException Unable to complete request
56  	 */
57  	public List<String> getRefObjectTypes() throws OperationFailedException;
58  
59  	/**
60  	 * Retrieves the list of types for a given base type which can be connected to a document.
61  	 * 
62  	 * @param objectTypeKey Reference Type Identifier
63  	 * @return The list of types for the given base type which can be connected to a document
64  	 * @throws OperationFailedException Unable to complete request
65  	 */
66  	public List<String> getRefObjectSubTypes(@WebParam(name="objectTypeKey")String objectTypeKey) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
67  	
68  	/**
69  	 * Retrieves the list of natural language usage types known by the service.
70  	 * 
71  	 * @return List of natural language usage type information
72  	 * @throws OperationFailedException Unable to complete request
73  	 */
74  	public List<NlUsageTypeInfo> getNlUsageTypes() throws OperationFailedException;
75  
76  	/**
77  	 * Retrieves information about the specified natural language usage type.
78  	 * 
79  	 * @param nlUsageTypeKey Natural language usage type identifier
80  	 * @return Information about a type of natural language usage
81  	 * @throws DoesNotExistException nlUsageType not found
82  	 * @throws InvalidParameterException Invalid nlUsageTypeKey
83  	 * @throws MissingParameterException Missing nlUsageTypeKey
84  	 * @throws OperationFailedException Unable to complete request
85  	 */
86  	public NlUsageTypeInfo getNlUsageType(@WebParam(name="nlUsageTypeKey")String nlUsageTypeKey) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
87  
88  	/**
89  	 * Creates a relationship between a statement and an object.
90  	 * 
91  	 * @param refStatementRelationInfo
92  	 * @return New object statement relationship
93  	 * @throws AlreadyExistsException connection between object and statement already exists
94  	 * @throws DoesNotExistException E.g. cluId, statementId, refStatementRelationType not found
95  	 * @throws InvalidParameterException One or more parameters invalid
96  	 * @throws MissingParameterException One or more parameters not specified
97  	 * @throws OperationFailedException Unable to complete request
98  	 * @throws PermissionDeniedException Authorization failure
99  	 */
100 	public RefStatementRelationInfo createRefStatementRelation(@WebParam(name="refStatementRelationInfo")RefStatementRelationInfo refStatementRelationInfo) throws AlreadyExistsException, DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
101 
102 	/**
103 	 * 	Updates a relationship between an object and statement.
104 	 * 
105 	 * @param refStatementRelationId Identifier of the object statement relationship to be updated
106 	 * @param refStatementRelationInfo Information about the object statement relationship to be updated
107 	 * @return Updated object statement relationship information
108 	 * @throws DataValidationErrorException One or more values invalid for this operation
109 	 * @throws DoesNotExistException refStatementRelation not found
110 	 * @throws InvalidParameterException One or more parameters invalid
111 	 * @throws MissingParameterException One or more parameters missing
112 	 * @throws OperationFailedException Unable to complete request
113 	 * @throws PermissionDeniedException Authorization failure
114 	 * @throws VersionMismatchException The action was attempted on an out of date version.
115 	 */
116 	public RefStatementRelationInfo updateRefStatementRelation(@WebParam(name="refStatementRelationId")String refStatementRelationId, @WebParam(name="refStatementRelationInfo")RefStatementRelationInfo refStatementRelationInfo) throws DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException;
117 
118 	/**
119 	 * Removes a relationship between a statement and an object.
120 	 * 
121 	 * @param refStatementRelationId Object Statement Relationship identifier
122 	 * @return Status
123 	 * @throws DoesNotExistException RefStatementRelation not found
124 	 * @throws InvalidParameterException Invalid refStatementRelationId
125 	 * @throws MissingParameterException RefStatementRelationId not specified
126 	 * @throws OperationFailedException Unable to complete request
127 	 * @throws PermissionDeniedException Authorization failure
128 	 */
129 	public StatusInfo deleteRefStatementRelation(@WebParam(name="refStatementRelationId")String refStatementRelationId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
130 
131 	/**
132 	 * Validates a refStatementRelation. Depending on the value of 
133 	 * validationType, this validation could be limited to tests on just 
134 	 * the current object and its directly contained sub-objects or expanded 
135 	 * to perform all tests related to this object. If an identifier is 
136 	 * present for the relationship (and/or one of its contained sub-objects) 
137 	 * and a record is found for that identifier, the validation checks if 
138 	 * the relationship can be shifted to the new values. If an identifier is 
139 	 * not present or a record cannot be found for the identifier, it is 
140 	 * assumed that the record does not exist and as such, the checks 
141 	 * performed will be much shallower, typically mimicking those performed 
142 	 * by setting the validationType to the current object.
143 	 * 
144 	 * @param validationType Identifier of the extent of validation
145 	 * @param refStatementRelationInfo Object statement relationship information to be tested
146 	 * @return Results from performing the validation
147 	 * @throws DoesNotExistException validationTypeKey not found
148 	 * @throws InvalidParameterException Invalid validationTypeKey, refStatementRelationInfo
149 	 * @throws MissingParameterException Missing validationTypeKey, refStatementRelationInfo
150 	 * @throws OperationFailedException Unable to complete request
151 	 */
152 	public List<ValidationResultInfo> validateRefStatementRelation(@WebParam(name="validationType")String validationType, @WebParam(name="refStatementRelationInfo")RefStatementRelationInfo refStatementRelationInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
153 	
154 	/**
155 	 * Retrieves a object statement relationship by its identifier.
156 	 * 
157 	 * @param refStatementRelationId Object statement relationship identifier
158 	 * @return Object statement relationship information
159 	 * @throws DoesNotExistException RefStatementRelation not found
160 	 * @throws InvalidParameterException Invalid refStatementRelationId
161 	 * @throws MissingParameterException RefStatementRelationId not specified
162 	 * @throws OperationFailedException Unable to complete request
163 	 */
164 	public RefStatementRelationInfo getRefStatementRelation(@WebParam(name="refStatementRelationId")String refStatementRelationId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
165 
166 	/**
167 	 * Retrieves a list of object statement relationships for a particular object.
168 	 * 
169 	 * @param refObjectTypeKey Reference type
170 	 * @param refObjectId Reference identifier
171 	 * @return List of object statement relationships for a particular object
172 	 * @throws DoesNotExistException Object not found
173 	 * @throws InvalidParameterException One or more parameters invalid
174 	 * @throws MissingParameterException One or more parameters not specified
175 	 * @throws OperationFailedException Unable to complete request
176 	 */
177 	public List<RefStatementRelationInfo> getRefStatementRelationsByRef(@WebParam(name="refObjectTypeKey")String refObjectTypeKey, @WebParam(name="refObjectId")String refObjectId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
178 
179 	/**
180 	 * Retrieves a list of object statement relationships for a particular statement.
181 	 * 
182 	 * @param statementId Statement identifier
183 	 * @return List of object statement relationships for a particular statement
184 	 * @throws DoesNotExistException Statement not found
185 	 * @throws InvalidParameterException One or more parameters invalid
186 	 * @throws MissingParameterException One or more parameters not specified
187 	 * @throws OperationFailedException Unable to complete request
188 	 */
189 	public List<RefStatementRelationInfo> getRefStatementRelationsByStatement(@WebParam(name="statementId")String statementId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
190 
191 	/**
192 	 * <p>Translates and retrieves a statement for a specific usuage type 
193 	 * (context) and language into natural language.</p>
194 	 * 
195 	 * <p>If <code>language</code> is null default language is used.</p>
196 	 * 
197 	 * <p>An <code>StatementInfo</code> can either have a list of
198 	 * <code>StatementInfo</code>s as children or a list of
199 	 * <code>ReqComponentInfo</code>s but not both. This means that all leaf 
200 	 * nodes must be <code>ReqComponentInfo</code>s.</p>
201 	 * 
202 	 * @param statementId Statement to translate
203 	 * @param nlUsageTypeKey Natural language usage type key (context)
204 	 * @param language Translation language
205      * @throws DoesNotExistException Statement not found
206      * @throws InvalidParameterException Invalid nlUsageTypeKey 
207      * @throws MissingParameterException Missing statementId or nlUsageTypeKey
208      * @throws OperationFailedException Unable to complete request
209      * @throws VersionMismatchException The action was attempted on an out of date version.
210      */
211     public String getNaturalLanguageForStatement(@WebParam(name="statementId")String statementId, @WebParam(name="nlUsageTypeKey")String nlUsageTypeKey, @WebParam(name="language")String language) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
212 
213     /**
214      * Retrieves the natural language translation for a particular object 
215      * statement relationship in a particular context for a particular language.
216      * 
217      * @param refStatementRelationId Object statement relationship identifier
218      * @param nlUsageTypeKey Context for the natural language translation
219      * @param language Language to use for the natural language translation
220      * @return Natural language translation for a particular object statement relationship in a particular context
221      * @throws DoesNotExistException Object statement relationship not found
222      * @throws InvalidParameterException One or more parameters invalid
223      * @throws MissingParameterException One or more parameters not specified
224      * @throws OperationFailedException Unable to complete request
225      */
226     public String getNaturalLanguageForRefStatementRelation(@WebParam(name="refStatementRelationId")String refStatementRelationId, @WebParam(name="nlUsageTypeKey")String nlUsageTypeKey, @WebParam(name="language")String language) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
227     
228     /**
229 	 * <p>Translates and retrieves a requirement component for a specific 
230 	 * usuage type (context) and language into natural language.</p>
231 	 * 
232 	 * <p>If <code>language</code> is null default language is used.</p>
233 	 * 
234 	 * @param reqComponentId Requirement component to translate
235 	 * @param nlUsageTypeKey Natural language usage type key (context)
236 	 * @param language Translation language
237      * @throws DoesNotExistException ReqComponent not found
238      * @throws InvalidParameterException Invalid nlUsageTypeKey 
239      * @throws MissingParameterException Missing reqComponentId or nlUsageTypeKey
240      * @throws OperationFailedException Unable to complete request
241      * @throws VersionMismatchException The action was attempted on an out of date version.
242      */
243     public String getNaturalLanguageForReqComponent(@WebParam(name="reqComponentId")String reqComponentId, @WebParam(name="nlUsageTypeKey")String nlUsageTypeKey, @WebParam(name="language")String language) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
244 
245     /**
246      * Translates a statement tree view to natural language for a 
247      * particular context in a particular language. This may include 
248      * statements and/or requirement components which have not yet been 
249      * persisted to the service.
250      * 
251      * @param statementTreeViewInfo Statement tree view
252      * @param nlUsageTypeKey Context for the natural language translation
253      * @param language Language to use for the natural language translation
254      * @return Natural language translation for a particular statement in a particular context
255      * @throws InvalidParameterException One or more parameters invalid
256      * @throws MissingParameterException One or more parameters not specified
257      * @throws OperationFailedException Unable to complete request
258      */
259     public String translateStatementTreeViewToNL(@WebParam(name="statementTreeViewInfo")StatementTreeViewInfo statementTreeViewInfo, @WebParam(name="nlUsageTypeKey")String nlUsageTypeKey, @WebParam(name="language")String language) throws InvalidParameterException, MissingParameterException, OperationFailedException;
260 
261     /**
262      * Translates a particular requirement component to natural language for 
263      * a particular context in a given language. This may be used for 
264      * requirement components which have not yet been persisted through 
265      * the service.
266      * 
267      * @param reqComponentInfo Requirement component
268      * @param nlUsageTypeKey Context for the natural language translation
269      * @param language Language to use for the natural language translation
270      * @return Natural language translation for a particular requirement component in a particular context
271      * @throws InvalidParameterException One or more parameters invalid
272      * @throws MissingParameterException One or more parameters not specified
273      * @throws OperationFailedException Unable to complete request
274      */
275     public String translateReqComponentToNL(@WebParam(name="reqComponentInfo")ReqComponentInfo reqComponentInfo, @WebParam(name="nlUsageTypeKey")String nlUsageTypeKey, @WebParam(name="language")String language) throws InvalidParameterException, MissingParameterException, OperationFailedException;
276     
277     /** 
278      * Validates a ReqComponent. Depending on the value of validationType, 
279      * this validation could be limited to tests on just the current object and 
280      * its directly contained sub-objects or expanded to perform all tests 
281      * related to this object. If an identifier is present for the 
282      * organization (and/or one of its contained sub-objects) and a record 
283      * is found for that identifier, the validation checks if the organization 
284      * can be shifted to the new values. If an identifier is not present or 
285      * a record cannot be found for the identifier, it is assumed that the 
286      * record does not exist and as such, the checks performed will be much 
287      * shallower, typically mimicking those performed by setting the 
288      * validationType to the current object.
289      * 
290      * @param validationType identifier of the extent of validation
291      * @param reqComponentInfo reqComponent information to be tested.
292      * @return results from performing the validation
293      * @throws DoesNotExistException validationTypeKey not found
294      * @throws InvalidParameterException invalid validationTypeKey, reqComponentInfo
295      * @throws MissingParameterException missing validationTypeKey, reqComponentInfo
296      * @throws OperationFailedException unable to complete request
297      */
298     public List<ValidationResultInfo> validateReqComponent(@WebParam(name="validationType")String validationType, @WebParam(name="reqComponentInfo")ReqComponentInfo reqComponentInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
299 
300     /** 
301      * Validates a statement. Depending on the value of validationType, 
302      * this validation could be limited to tests on just the current object 
303      * and its directly contained sub-objects or expanded to perform all 
304      * tests related to this object. If an identifier is present for the 
305      * statement (and/or one of its contained sub-objects) and a record is 
306      * found for that identifier, the validation checks if the statement can 
307      * be shifted to the new values. If an identifier is not present or 
308      * a record cannot be found for the identifier, it is assumed that the 
309      * record does not exist and as such, the checks performed will be much 
310      * shallower, typically mimicking those performed by setting the 
311      * validationType to the current object.
312      * 
313      * @param validationType identifier of the extent of validation
314      * @param statementInfo statement information to be tested.
315      * @return results from performing the validation
316      * @throws DoesNotExistException validationTypeKey not found
317      * @throws InvalidParameterException invalid validationTypeKey, statementInfo
318      * @throws MissingParameterException missing validationTypeKey, statementInfo
319      * @throws OperationFailedException unable to complete request
320      */
321     public List<ValidationResultInfo> validateStatement(@WebParam(name="validationType")String validationType, @WebParam(name="statementInfo")StatementInfo statementInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
322 
323     /** 
324      * Retrieves a statement by its identifier
325      * @param  statementId statement identifier
326      * @return statementInfo statement information
327      * @throws DoesNotExistException statement not found
328      * @throws InvalidParameterException invalid statementId
329      * @throws MissingParameterException statementId not specified
330      * @throws OperationFailedException unable to complete request
331      */
332     public StatementInfo getStatement(@WebParam(name="statementId")String statementId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
333     
334     /** 
335      * Retrieves a list of statements of a particular Type
336      * @param statementTypeKey statementType identifier
337      * @return list of statements using the specified type
338      * @throws DoesNotExistException statementTypeKey  not found
339      * @throws InvalidParameterException invalid statementTypeKey 
340      * @throws MissingParameterException statementTypeKey  not specified
341      * @throws OperationFailedException unable to complete request
342      */
343     public List<StatementInfo> getStatementsByType(@WebParam(name="statementTypeKey")String statementTypeKey) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
344 
345     /** 
346      * Retrieves a requirement component by its identifier
347      * @param reqComponentId requirement component identifier
348      * @return reqComponentInfo requirement component information
349      * @throws DoesNotExistException reqComponent not found
350      * @throws InvalidParameterException invalid reqComponentId
351      * @throws MissingParameterException reqComponentId not specified
352      * @throws OperationFailedException unable to complete request
353      */
354     public ReqComponentInfo getReqComponent(@WebParam(name="reqComponentId")String reqComponentId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
355 
356     /** 
357      * Retrieves a list of requirement components of a particular type.
358      * @param reqComponentTypeKey identifier for a type of requirement component
359      * @return reqComponentInfoList A list of requirementComponents
360      * @throws DoesNotExistException reqComponentTypeKey not found
361      * @throws InvalidParameterException invalid reqComponentTypeKey
362      * @throws MissingParameterException reqComponentTypeKey not specified
363      * @throws OperationFailedException unable to complete request
364      */
365     public List<ReqComponentInfo> getReqComponentsByType(@WebParam(name="reqComponentTypeKey")String reqComponentTypeKey) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
366 
367     /** 
368      * Retrieves a list of statements that use a particular requirement component. Note: The reference may not be direct, but through an intermediate object definition (ex. nested statements).
369      * @param reqComponentId requirement component identifier
370      * @return statementInfoList list of statements using the specified requirement component
371      * @throws DoesNotExistException reqComponentId not found
372      * @throws InvalidParameterException invalid reqComponentId
373      * @throws MissingParameterException reqComponentId not specified
374      * @throws OperationFailedException unable to complete request
375      */
376     public List<StatementInfo> getStatementsUsingReqComponent(@WebParam(name="reqComponentId")String reqComponentId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
377 
378     /**
379      * Retrieves a list of child statements that include a particular statement. 
380      * Note: The reference may not be direct, but through an 
381      * intermediate object definition (e.g. nested statements).
382      * 
383      * @param statementId statement identifier
384      * @return List of child statements using the specified statement
385      * @throws DoesNotExistException Statement not found
386      * @throws InvalidParameterException Invalid statementId
387      * @throws MissingParameterException statementId not specified
388      * @throws OperationFailedException Unable to complete request
389      */
390     public List<StatementInfo> getStatementsUsingStatement(@WebParam(name="statementId")String statementId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
391     
392     /** 
393      * Creates a requirement component.
394      * @param reqComponentType identifier of the type of requirement component
395      * @param reqComponentInfo information about the requirement component
396      * @return information about the newly created requirement component
397      * @throws AlreadyExistsException Requirement Component already exists
398      * @throws DataValidationErrorException One or more values invalid for this operation
399      * @throws DoesNotExistException reqComponentType not found
400      * @throws InvalidParameterException invalid reqComponentType, reqComponentInfo
401      * @throws MissingParameterException missing reqComponentType, reqComponentInfo
402      * @throws OperationFailedException unable to complete request
403      * @throws PermissionDeniedException authorization failure
404      */
405     public ReqComponentInfo createReqComponent(@WebParam(name="reqComponentType")String reqComponentType, @WebParam(name="reqComponentInfo")ReqComponentInfo reqComponentInfo) throws AlreadyExistsException, DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
406     
407     /** 
408      * Deletes a requirement component
409      * @param reqComponentId identifier of the requirement component to delete
410      * @return status of the operation (success or failure)
411      * @throws DoesNotExistException reqComponentId not found
412      * @throws InvalidParameterException invalid reqComponentId
413      * @throws MissingParameterException missing reqComponentId
414      * @throws OperationFailedException unable to complete request
415      * @throws PermissionDeniedException authorization failure
416      */
417     public StatusInfo deleteReqComponent(@WebParam(name="reqComponentId")String reqComponentId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
418 
419     /** 
420      * Create a statement.
421      * @param statementType identifier of the type of statement
422      * @param statementInfo information about the statement
423      * @return information about the newly created statement
424      * @throws AlreadyExistsException statement already exists
425      * @throws DataValidationErrorException One or more values invalid for this operation
426      * @throws DoesNotExistException statementType not found
427      * @throws InvalidParameterException invalid statementType, statementInfo
428      * @throws MissingParameterException missing statementType, statementInfo
429      * @throws OperationFailedException unable to complete request
430      * @throws PermissionDeniedException authorization failure
431      */
432     public StatementInfo createStatement(@WebParam(name="statementType")String statementType, @WebParam(name="statementInfo")StatementInfo statementInfo) throws AlreadyExistsException, DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
433 
434     /** 
435      * Updates a statement
436      * @param statementId identifier of the statement to be updated
437      * @param statementInfo information about the statement to be updated
438      * @return the updated statement information
439      * @throws CircularReferenceException included statement references the current statement
440      * @throws DataValidationErrorException One or more values invalid for this operation
441      * @throws DoesNotExistException statement not found
442      * @throws InvalidParameterException invalid statementId, statementInfo
443      * @throws MissingParameterException missing statementId, statementInfo
444      * @throws OperationFailedException unable to complete request
445      * @throws PermissionDeniedException authorization failure
446      * @throws VersionMismatchException The action was attempted on an out of date version.
447      */
448     public StatementInfo updateStatement(@WebParam(name="statementId")String statementId, @WebParam(name="statementInfo")StatementInfo statementInfo) throws CircularReferenceException, DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException;
449 
450     /** 
451      * Deletes a statement
452      * @param statementId identifier of the Statement to delete
453      * @return statusInfo status of the operation (success or failure)
454      * @throws DoesNotExistException statement not found
455      * @throws InvalidParameterException invalid statementId
456      * @throws MissingParameterException missing statementId
457      * @throws OperationFailedException unable to complete request
458      * @throws PermissionDeniedException authorization failure
459      */
460     public StatusInfo deleteStatement(@WebParam(name="statementId")String statementId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
461 
462     /** 
463      * Retrieves information for a specified type of statement
464      * @param statementTypeKey statement type identifier
465      * @return statement type information
466      * @throws DoesNotExistException statementTypeKey not found
467      * @throws InvalidParameterException invalid statementTypeKey
468      * @throws MissingParameterException missing statementTypeKey
469      * @throws OperationFailedException unable to complete request
470      */
471     public StatementTypeInfo getStatementType(@WebParam(name="statementTypeKey")String statementTypeKey) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
472 
473     /**
474      * 	Retrieves the list of all types of statements.
475      * 
476      * @return List of types of statements
477      * @throws OperationFailedException Unable to complete request
478      */
479     public List<StatementTypeInfo> getStatementTypes() throws OperationFailedException;
480 
481     /**
482      * Retrieves the list of statement types which are allowed to be used in 
483      * a statement type. This controls the nesting of statements.
484      * 
485      * @param statementTypeKey Identifier for a type of statement
486      * @return List of statement type
487      * @throws DoesNotExistException statementTypeKey not found
488      * @throws InvalidParameterException Invalid statementTypeKey
489      * @throws MissingParameterException Missing statementTypeKey
490      * @throws OperationFailedException Unable to complete request
491      */
492     public List<String> getStatementTypesForStatementType(@WebParam(name="statementTypeKey")String statementTypeKey) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
493     
494     /** 
495      * Retrieves the list of requirement component types known by this service.
496      * @return list of requirement component types
497      * @throws OperationFailedException unable to complete request
498      */
499     public List<ReqComponentTypeInfo> getReqComponentTypes() throws OperationFailedException;
500 
501     /** 
502      * Retrieves information for a specified fetchReqComponent Types
503      * @param reqComponentTypeKey reqComponent Type Key
504      * @return Requirement component type information
505      * @throws DoesNotExistException reqComponentTypeKey not found
506      * @throws InvalidParameterException invalid reqComponentTypeKey
507      * @throws MissingParameterException missing reqComponentTypeKey
508      * @throws OperationFailedException unable to complete request
509      */
510     public ReqComponentTypeInfo getReqComponentType(@WebParam(name="reqComponentTypeKey")String reqComponentTypeKey) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
511 
512     /** 
513      * Retrieves the list of types of requirement components which are allowed to be used in a type of statement.
514      * @param statementTypeKey identifier for a type of statement
515      * @return list of types of requirement components
516      * @throws DoesNotExistException statementTypeKey not found
517      * @throws InvalidParameterException invalid statementTypeKey
518      * @throws MissingParameterException missing statementTypeKey
519      * @throws OperationFailedException unable to complete request
520      */
521     public List<ReqComponentTypeInfo> getReqComponentTypesForStatementType(@WebParam(name="statementTypeKey")String statementTypeKey) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
522 
523     /**
524      * Retrieves the list of all types of relationships between statements and 
525      * other objects.
526      * 
527      * @return List of object statement relation types
528      * @throws OperationFailedException Unable to complete request
529      */
530     public List<RefStatementRelationTypeInfo> getRefStatementRelationTypes() throws OperationFailedException;
531 
532     /**
533      * Retrieves information for a specified type of relationship between 
534      * a statement and object.
535      * 
536      * @param refStatementRelationTypeKey Object statement relation type identifier
537      * @return Object statement relation type information
538      * @throws DoesNotExistException refStatementRelationTypeKey not found
539      * @throws InvalidParameterException Invalid refStatementRelationTypeKey
540      * @throws MissingParameterException Missing refStatementRelationTypeKey
541      * @throws OperationFailedException Unable to complete request
542      */
543     public RefStatementRelationTypeInfo getRefStatementRelationType(@WebParam(name="refStatementRelationTypeKey")String refStatementRelationTypeKey) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
544 
545     /**
546      * Retrieves the list of statement types which are allowed to be used for 
547      * a specified type of object statement relationship.
548      * 
549      * @param refStatementRelationTypeKey Identifier for a type of object statement relationship
550      * @return List of statement types
551      * @throws DoesNotExistException refStatementRelationTypeKey not found
552      * @throws InvalidParameterException Invalid refStatementRelationTypeKey
553      * @throws MissingParameterException Missing refStatementRelationTypeKey
554      * @throws OperationFailedException Unable to complete request
555      */
556     public List<String> getStatementTypesForRefStatementRelationType(@WebParam(name="refStatementRelationTypeKey")String refStatementRelationTypeKey) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
557 
558     /**
559      * Retrieves the list of types of object statement relationships which 
560      * are allowed to be used for a subtype of object.
561      * 
562      * @param refSubTypeKey Identifier for the subtype of object
563      * @return
564      * @throws DoesNotExistException refSubType not found
565      * @throws InvalidParameterException Invalid refSubTypeKey
566      * @throws MissingParameterException Missing refSubTypeKey
567      * @throws OperationFailedException Unable to complete request
568      */
569     public List<String> getRefStatementRelationTypesForRefObjectSubType(@WebParam(name="refSubTypeKey")String refSubTypeKey) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
570 
571     /** 
572      * Updates a requirement component
573      * @param reqComponentId identifier of the requirement component to be updated
574      * @param reqComponentInfo information about the requirement component to be updated
575      * @return the updated requirement component information
576      * @throws DataValidationErrorException One or more values invalid for this operation
577      * @throws DoesNotExistException Requirement Component not found
578      * @throws InvalidParameterException invalid reqComponentId, reqComponentInfo
579      * @throws MissingParameterException missing reqComponentId, reqComponentInfo
580      * @throws OperationFailedException unable to complete request
581      * @throws PermissionDeniedException authorization failure
582      * @throws VersionMismatchException The action was attempted on an out of date version.
583      */
584     public ReqComponentInfo updateReqComponent(@WebParam(name="reqComponentId")String reqComponentId, @WebParam(name="reqComponentInfo")ReqComponentInfo reqComponentInfo) throws DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException;
585 
586     /**
587      * Retrieves a view of a statement by its identifier with its referenced statements and requirement components expanded
588      * @param statementId statement identifier
589      * @return view of statement information with the referenced statements and requirement components expanded
590      * @throws DoesNotExistException statement not found
591      * @throws InvalidParameterException invalid statementId
592      * @throws MissingParameterException statementId not specified
593      * @throws OperationFailedException unable to complete request
594      */
595     public StatementTreeViewInfo getStatementTreeView(@WebParam(name="statementId")String statementId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
596     
597     /**
598      * Retrieves a view of a statement by its identifier with its referenced statements and requirement components expanded and translated
599      * @param statementId statement identifier
600 	 * @param nlUsageTypeKey Natural language usage type identifier
601 	 * @param language Translation language
602      * @return view of statement information with the referenced statements and requirement components expanded
603      * @throws DoesNotExistException statement not found
604      * @throws InvalidParameterException invalid statementId
605      * @throws MissingParameterException statementId not specified
606      * @throws OperationFailedException unable to complete request
607      */
608     public StatementTreeViewInfo getStatementTreeViewForNlUsageType(final String statementId, final String nlUsageTypeKey, String language) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException;
609     
610     /**
611      * Updates an entire Statement Tree. Fails unless everything can be done. Updates Statements, RequirementComponents and any relations between them. If there are "deletes", the relations are removed, but the object is not deleted unless used no where else
612      * @param statementId identifier of the statement to be updated
613      * @param statementTreeViewInfo The StatementTreeInfo to be updated
614      * @return the updated StatementTree information
615      * @throws CircularRelationshipException    included statement references the current statement
616      * @throws DataValidationErrorException One or more values invalid for this operation
617      * @throws DoesNotExistException Statement not found
618      * @throws InvalidParameterException invalid statementId, statementTreeViewInfo
619      * @throws MissingParameterException missing statementId, statementTreeViewInfo
620      * @throws OperationFailedException unable to complete request
621      * @throws PermissionDeniedException authorization failure
622      * @throws VersionMismatchException The action was attempted on an out of date version.
623      */
624     public StatementTreeViewInfo updateStatementTreeView(@WebParam(name="statementId")String statementId, @WebParam(name="statementTreeViewInfo")StatementTreeViewInfo statementTreeViewInfo) throws CircularReferenceException, DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException;
625 
626 	/**
627 	 * Creates an entire Statement Tree. Fails unless everything can be done. Updates Statements, RequirementComponents and any relations between them. If there are "deletes", the relations are removed, but the object is not deleted unless used no where else 
628 	 * @param statementTreeViewInfo
629 	 * @return Statement tree view
630 	 * @throws CircularReferenceException included statement references the current statement
631 	 * @throws AlreadyExistsException
632 	 * @throws DataValidationErrorException
633 	 * @throws DoesNotExistException
634 	 * @throws InvalidParameterException
635 	 * @throws MissingParameterException
636 	 * @throws OperationFailedException
637 	 * @throws PermissionDeniedException
638 	 */
639 	public StatementTreeViewInfo createStatementTreeView(@WebParam(name="statementTreeViewInfo") StatementTreeViewInfo statementTreeViewInfo) throws CircularReferenceException, AlreadyExistsException, DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
640 	
641 	/**
642 	 * Deletes the entire statement tree
643 	 * @param statementId
644 	 * @return Status of delete
645 	 * @throws DoesNotExistException
646 	 * @throws InvalidParameterException
647 	 * @throws MissingParameterException
648 	 * @throws OperationFailedException
649 	 * @throws PermissionDeniedException
650 	 */
651 	public StatusInfo deleteStatementTreeView(@WebParam(name="statementId") String statementId) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException;
652 
653 }