@@ -2,8 +2,9 @@ package org.codeoverflow.chatoverflow.ui.web.rest.plugin
2
2
3
3
import org .codeoverflow .chatoverflow .api .io
4
4
import org .codeoverflow .chatoverflow .api .plugin .configuration
5
+ import org .codeoverflow .chatoverflow .configuration .ConfigurationService
5
6
import org .codeoverflow .chatoverflow .ui .web .JsonServlet
6
- import org .codeoverflow .chatoverflow .ui .web .rest .DTOs .{ PluginInstance , PluginInstanceRef , Requirement , ResultMessage }
7
+ import org .codeoverflow .chatoverflow .ui .web .rest .DTOs ._
7
8
import org .scalatra .swagger .Swagger
8
9
9
10
import scala .collection .JavaConverters ._
@@ -24,16 +25,74 @@ class PluginInstanceController(implicit val swagger: Swagger) extends JsonServle
24
25
25
26
get(" /:instanceName/requirements" , operation(getRequirements)) {
26
27
val instanceName = params(" instanceName" )
27
- val pluginInstance = chatOverflow.pluginInstanceRegistry.getPluginInstance(instanceName)
28
- val requirements = pluginInstance.get.getRequirements.getRequirementMap
29
28
val returnSeq = ListBuffer [Requirement ]()
29
+ val pluginInstance = chatOverflow.pluginInstanceRegistry.getPluginInstance(instanceName)
30
30
31
- requirements.forEach((uniqueRequirementID, requirement) => returnSeq += Requirement (uniqueRequirementID,
32
- requirement.getName, requirement.isOptional, requirement.isSet,
33
- requirement.asInstanceOf [configuration.Requirement [io.Serializable ]].get().serialize(),
34
- requirement.getTargetType.getName))
31
+ if (pluginInstance.isEmpty) {
32
+ returnSeq
33
+
34
+ } else {
35
+ val requirements = pluginInstance.get.getRequirements.getRequirementMap
36
+
37
+ requirements.forEach((uniqueRequirementID, requirement) =>
38
+ returnSeq += createRequirement(uniqueRequirementID, requirement))
39
+
40
+ returnSeq.toList
41
+ }
42
+ }
43
+
44
+ get(" /:instanceName/requirements/:requirementID" , operation(getRequirement)) {
45
+ val instanceName = params(" instanceName" )
46
+ val requirementID = params(" requirementID" )
47
+
48
+ val pluginInstance = chatOverflow.pluginInstanceRegistry.getPluginInstance(instanceName)
49
+
50
+ if (pluginInstance.isEmpty) {
51
+ Requirement (" " , " " , isOptional = false , isSet = false , " " , " " )
52
+ } else {
53
+ val requirement = pluginInstance.get.getRequirements.getRequirementById(requirementID)
54
+
55
+ if (! requirement.isPresent) {
56
+ Requirement (" " , " " , isOptional = false , isSet = false , " " , " " )
57
+ } else {
58
+ createRequirement(requirementID, requirement.get)
59
+ }
60
+ }
61
+ }
62
+
63
+ put(" /:instanceName/requirements/:requirementID" , operation(putRequirement)) {
64
+ parsedAs[RequirementInfo ] {
65
+ case RequirementInfo (targetType, value) =>
66
+ val instanceName = params(" instanceName" )
67
+ val requirementID = params(" requirementID" )
68
+
69
+ if (! chatOverflow.isLoaded) {
70
+ ResultMessage (success = false , " Framework not loaded." )
71
+
72
+ } else {
73
+ val pluginInstance = chatOverflow.pluginInstanceRegistry.getPluginInstance(instanceName)
74
+
75
+ if (pluginInstance.isEmpty) {
76
+ ResultMessage (success = false , " Plugin instance not found." )
77
+
78
+ } else if (pluginInstance.get.isRunning) {
79
+ ResultMessage (success = false , " Plugin is running." )
80
+
81
+ } else if (! pluginInstance.get.getRequirements.getRequirementById(requirementID).isPresent) {
82
+ ResultMessage (success = false , " Requirement not found." )
83
+ } else {
84
+
85
+ if (! ConfigurationService .fulfillRequirementByDeserializing(instanceName, requirementID, targetType,
86
+ value, chatOverflow.pluginInstanceRegistry, chatOverflow.typeRegistry)) {
35
87
36
- returnSeq.toList
88
+ ResultMessage (success = false , " Unable to set requirement." )
89
+ } else {
90
+ chatOverflow.save()
91
+ ResultMessage (success = true )
92
+ }
93
+ }
94
+ }
95
+ }
37
96
}
38
97
39
98
get(" /:instanceName/log" , operation(getLog)) {
@@ -102,9 +161,29 @@ class PluginInstanceController(implicit val swagger: Swagger) extends JsonServle
102
161
}
103
162
}
104
163
105
- private def pluginInstanceToDTO (pluginInstance : org.codeoverflow.chatoverflow.instance.PluginInstance ) = {
164
+ private def pluginInstanceToDTO (pluginInstance : org.codeoverflow.chatoverflow.instance.PluginInstance )
165
+
166
+ = {
106
167
PluginInstance (pluginInstance.instanceName, pluginInstance.getPluginTypeName,
107
168
pluginInstance.getPluginTypeAuthor, pluginInstance.isRunning,
108
169
pluginInstance.getRequirements.getRequirementMap.keySet().asScala.toList)
109
170
}
171
+
172
+ private def createRequirement (requirementID : String , requirement : configuration.Requirement [_ <: io.Serializable ]): Requirement
173
+
174
+ = {
175
+ Requirement (requirementID,
176
+ requirement.getName, requirement.isOptional, requirement.isSet,
177
+ {
178
+ // Can be null if the requirement was freshly created in this run
179
+ val requirementContent = requirement.asInstanceOf [configuration.Requirement [io.Serializable ]].get()
180
+
181
+ if (requirementContent == null ) {
182
+ " "
183
+ } else {
184
+ requirementContent.serialize()
185
+ }
186
+ },
187
+ requirement.getTargetType.getName)
188
+ }
110
189
}
0 commit comments