BCFService.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. /**
  2. * BCFService.js
  3. *
  4. * @author realor
  5. */
  6. import { Service } from './Service.js'
  7. import { ServiceManager } from './ServiceManager.js'
  8. import { WebUtils } from '../utils/WebUtils.js'
  9. class BCFService extends Service {
  10. constructor(name, description = null, url = null, username = null, password = null) {
  11. super(name, description, url, username, password)
  12. }
  13. getProjects(onCompleted, onError) {
  14. this.invoke('GET', 'projects', null, onCompleted, onError)
  15. }
  16. getProject(projectId, onCompleted, onError) {
  17. this.invoke('GET', 'projects/' + projectId, null, onCompleted, onError)
  18. }
  19. updateProject(projectId, project, onCompleted, onError) {
  20. this.invoke('PUT', 'projects/' + projectId, project, onCompleted, onError)
  21. }
  22. getExtensions(projectId, onCompleted, onError) {
  23. this.invoke('GET', 'projects/' + projectId + '/extensions', null, onCompleted, onError)
  24. }
  25. updateExtensions(projectId, extensions, onCompleted, onError) {
  26. this.invoke('PUT', 'projects/' + projectId + '/extensions', extensions, onCompleted, onError)
  27. }
  28. getTopics(projectId, filter, onCompleted, onError) {
  29. let status = filter.status
  30. let priority = filter.priority
  31. let assignedTo = filter.assignedTo
  32. let filters = []
  33. if (status) {
  34. filters.push("topic_status eq '" + status + "'")
  35. }
  36. if (priority) {
  37. filters.push("priority eq '" + priority + "'")
  38. }
  39. if (assignedTo) {
  40. filters.push("assigned_to eq '" + assignedTo + "'")
  41. }
  42. let filterText = filters.length > 0 ? filters.join(' and ') : ''
  43. let orderBy = 'creation_date,index'
  44. let query = ''
  45. if (filterText.length > 0 || orderBy.length > 0) {
  46. query = '?'
  47. if (filterText) {
  48. query += '$filter=' + filterText
  49. if (orderBy) query += '&'
  50. }
  51. if (orderBy) query += '$orderBy=' + orderBy
  52. }
  53. this.invoke('GET', 'projects/' + projectId + '/topics' + query, null, onCompleted, onError)
  54. }
  55. getTopic(projectId, topicGuid, onCompleted, onError) {
  56. this.invoke('GET', 'projects/' + projectId + '/topics/' + topicGuid, null, onCompleted, onError)
  57. }
  58. createTopic(projectId, topic, onCompleted, onError) {
  59. this.invoke('POST', 'projects/' + projectId + '/topics', topic, onCompleted, onError)
  60. }
  61. updateTopic(projectId, topicGuid, topic, onCompleted, onError) {
  62. this.invoke('PUT', 'projects/' + projectId + '/topics/' + topicGuid, topic, onCompleted, onError)
  63. }
  64. deleteTopic(projectId, topicGuid, onCompleted, onError) {
  65. this.invoke('DELETE', 'projects/' + projectId + '/topics/' + topicGuid, null, onCompleted, onError)
  66. }
  67. getViewpoints(projectId, topicGuid, onCompleted, onError) {
  68. this.invoke('GET', 'projects/' + projectId + '/topics/' + topicGuid + '/viewpoints', null, onCompleted, onError)
  69. }
  70. getViewpoint(projectId, topicGuid, viewpointGuid, onCompleted, onError) {
  71. this.invoke('GET', 'projects/' + projectId + '/topics/' + topicGuid + '/viewpoints/' + viewpointGuid, null, onCompleted, onError)
  72. }
  73. createViewpoint(projectId, topicGuid, viewpoint, onCompleted, onError) {
  74. this.invoke('POST', 'projects/' + projectId + '/topics/' + topicGuid + '/viewpoints', viewpoint, onCompleted, onError)
  75. }
  76. deleteViewpoint(projectId, topicGuid, viewpointGuid, onCompleted, onError) {
  77. this.invoke('DELETE', 'projects/' + projectId + '/topics/' + topicGuid + '/viewpoints/' + viewpointGuid, null, onCompleted, onError)
  78. }
  79. getComments(projectId, topicGuid, onCompleted, onError) {
  80. this.invoke('GET', 'projects/' + projectId + '/topics/' + topicGuid + '/comments', null, onCompleted, onError)
  81. }
  82. getComment(projectId, topicGuid, commentGuid, onCompleted, onError) {
  83. this.invoke('GET', 'projects/' + projectId + '/topics/' + topicGuid + '/comments/' + commentGuid, null, onCompleted, onError)
  84. }
  85. createComment(projectId, topicGuid, comment, onCompleted, onError) {
  86. this.invoke('POST', 'projects/' + projectId + '/topics/' + topicGuid + '/comments', comment, onCompleted, onError)
  87. }
  88. updateComment(projectId, topicGuid, commentGuid, comment, onCompleted, onError) {
  89. this.invoke('PUT', 'projects/' + projectId + '/topics/' + topicGuid + '/comments/' + commentGuid, comment, onCompleted, onError)
  90. }
  91. deleteComment(projectId, topicGuid, commentGuid, onCompleted, onError) {
  92. this.invoke('DELETE', 'projects/' + projectId + '/topics/' + topicGuid + '/comments/' + commentGuid, null, onCompleted, onError)
  93. }
  94. getDocumentReferences(projectId, topicGuid, onCompleted, onError) {
  95. this.invoke('GET', 'projects/' + projectId + '/topics/' + topicGuid + '/document_references', null, onCompleted, onError)
  96. }
  97. createDocumentReference(projectId, topicGuid, docRef, onCompleted, onError) {
  98. this.invoke('POST', 'projects/' + projectId + '/topics/' + topicGuid + '/document_references', docRef, onCompleted, onError)
  99. }
  100. updateDocumentReference(projectId, topicGuid, docRefGuid, docRef, onCompleted, onError) {
  101. this.invoke('PUT', 'projects/' + projectId + '/topics/' + topicGuid + '/document_references/' + docRefGuid, docRef, onCompleted, onError)
  102. }
  103. deleteDocumentReference(projectId, topicGuid, docRefGuid, onCompleted, onError) {
  104. this.invoke('DELETE', 'projects/' + projectId + '/topics/' + topicGuid + '/document_references/' + docRefGuid, null, onCompleted, onError)
  105. }
  106. invoke(method, path, data, onCompleted, onError) {
  107. const request = new XMLHttpRequest()
  108. if (onError) {
  109. request.onerror = error => {
  110. onError({ code: 0, message: 'Connection error' })
  111. }
  112. }
  113. if (onCompleted)
  114. request.onload = () => {
  115. if (request.status === 200) {
  116. if (request.response) {
  117. try {
  118. onCompleted(JSON.parse(request.responseText))
  119. } catch (ex) {
  120. if (onError) onError({ code: 0, message: ex })
  121. }
  122. } else {
  123. onCompleted()
  124. }
  125. } else {
  126. let error
  127. try {
  128. error = JSON.parse(request.responseText)
  129. } catch (ex) {
  130. error = { code: request.status, message: 'Error ' + request.status }
  131. }
  132. if (onError) onError(error)
  133. }
  134. }
  135. request.open(method, this.url + '/bcf/2.1/' + path)
  136. request.setRequestHeader('Content-Type', 'application/json')
  137. WebUtils.setBasicAuthorization(request, this.username, this.password)
  138. if (data) {
  139. request.send(JSON.stringify(data))
  140. } else {
  141. request.send()
  142. }
  143. }
  144. }
  145. ServiceManager.addClass(BCFService)
  146. export { BCFService }