Commit ca89a4fc0e2c4c20b9c60bf27ee4f1749aa5744a
1 parent
e755f3f6
Component Descriptor documentation
Showing
2 changed files
with
54 additions
and
6 deletions
... | ... | @@ -15,6 +15,8 @@ |
15 | 15 | */ |
16 | 16 | package org.thingsboard.server.controller; |
17 | 17 | |
18 | +import io.swagger.annotations.ApiOperation; | |
19 | +import io.swagger.annotations.ApiParam; | |
18 | 20 | import org.apache.commons.lang3.StringUtils; |
19 | 21 | import org.springframework.security.access.prepost.PreAuthorize; |
20 | 22 | import org.springframework.web.bind.annotation.PathVariable; |
... | ... | @@ -38,10 +40,20 @@ import java.util.Set; |
38 | 40 | @RequestMapping("/api") |
39 | 41 | public class ComponentDescriptorController extends BaseController { |
40 | 42 | |
43 | + private static final String COMPONENT_DESCRIPTOR_DEFINITION = "Each Component Descriptor represents configuration of specific rule node (e.g. 'Save Timeseries' or 'Send Email'.). " + | |
44 | + "The Component Descriptors are used by the rule chain Web UI to build the configuration forms for the rule nodes. " + | |
45 | + "The Component Descriptors are discovered at runtime by scanning the class path and searching for @RuleNode annotation. " + | |
46 | + "Once discovered, the up to date list of descriptors is persisted to the database."; | |
47 | + | |
48 | + @ApiOperation(value = "Get Component Descriptor (getComponentDescriptorByClazz)", | |
49 | + notes = "Gets the Component Descriptor object using class name from the path parameters. " + | |
50 | + COMPONENT_DESCRIPTOR_DEFINITION) | |
41 | 51 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN','TENANT_ADMIN')") |
42 | 52 | @RequestMapping(value = "/component/{componentDescriptorClazz:.+}", method = RequestMethod.GET) |
43 | 53 | @ResponseBody |
44 | - public ComponentDescriptor getComponentDescriptorByClazz(@PathVariable("componentDescriptorClazz") String strComponentDescriptorClazz) throws ThingsboardException { | |
54 | + public ComponentDescriptor getComponentDescriptorByClazz( | |
55 | + @ApiParam(value = "Component Descriptor class name", required = true) | |
56 | + @PathVariable("componentDescriptorClazz") String strComponentDescriptorClazz) throws ThingsboardException { | |
45 | 57 | checkParameter("strComponentDescriptorClazz", strComponentDescriptorClazz); |
46 | 58 | try { |
47 | 59 | return checkComponentDescriptorByClazz(strComponentDescriptorClazz); |
... | ... | @@ -50,11 +62,17 @@ public class ComponentDescriptorController extends BaseController { |
50 | 62 | } |
51 | 63 | } |
52 | 64 | |
65 | + @ApiOperation(value = "Get Component Descriptors (getComponentDescriptorsByType)", | |
66 | + notes = "Gets the Component Descriptors using rule node type and optional rule chain type request parameters. " + | |
67 | + COMPONENT_DESCRIPTOR_DEFINITION) | |
53 | 68 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN','TENANT_ADMIN')") |
54 | 69 | @RequestMapping(value = "/components/{componentType}", method = RequestMethod.GET) |
55 | 70 | @ResponseBody |
56 | - public List<ComponentDescriptor> getComponentDescriptorsByType(@PathVariable("componentType") String strComponentType, | |
57 | - @RequestParam(value = "ruleChainType", required = false) String strRuleChainType) throws ThingsboardException { | |
71 | + public List<ComponentDescriptor> getComponentDescriptorsByType( | |
72 | + @ApiParam(value = "Type of the Rule Node", allowableValues = "ENRICHMENT,FILTER,TRANSFORMATION,ACTION,EXTERNAL", required = true) | |
73 | + @PathVariable("componentType") String strComponentType, | |
74 | + @ApiParam(value = "Type of the Rule Chain", allowableValues = "CORE,EDGE") | |
75 | + @RequestParam(value = "ruleChainType", required = false) String strRuleChainType) throws ThingsboardException { | |
58 | 76 | checkParameter("componentType", strComponentType); |
59 | 77 | try { |
60 | 78 | return checkComponentDescriptorsByType(ComponentType.valueOf(strComponentType), getRuleChainType(strRuleChainType)); |
... | ... | @@ -63,11 +81,17 @@ public class ComponentDescriptorController extends BaseController { |
63 | 81 | } |
64 | 82 | } |
65 | 83 | |
84 | + @ApiOperation(value = "Get Component Descriptors (getComponentDescriptorsByTypes)", | |
85 | + notes = "Gets the Component Descriptors using coma separated list of rule node types and optional rule chain type request parameters. " + | |
86 | + COMPONENT_DESCRIPTOR_DEFINITION) | |
66 | 87 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN','TENANT_ADMIN')") |
67 | 88 | @RequestMapping(value = "/components", params = {"componentTypes"}, method = RequestMethod.GET) |
68 | 89 | @ResponseBody |
69 | - public List<ComponentDescriptor> getComponentDescriptorsByTypes(@RequestParam("componentTypes") String[] strComponentTypes, | |
70 | - @RequestParam(value = "ruleChainType", required = false) String strRuleChainType) throws ThingsboardException { | |
90 | + public List<ComponentDescriptor> getComponentDescriptorsByTypes( | |
91 | + @ApiParam(value = "List of types of the Rule Nodes, (ENRICHMENT, FILTER, TRANSFORMATION, ACTION or EXTERNAL)", required = true) | |
92 | + @RequestParam("componentTypes") String[] strComponentTypes, | |
93 | + @ApiParam(value = "Type of the Rule Chain", allowableValues = "CORE,EDGE") | |
94 | + @RequestParam(value = "ruleChainType", required = false) String strRuleChainType) throws ThingsboardException { | |
71 | 95 | checkArrayParameter("componentTypes", strComponentTypes); |
72 | 96 | try { |
73 | 97 | Set<ComponentType> componentTypes = new HashSet<>(); | ... | ... |
... | ... | @@ -16,6 +16,8 @@ |
16 | 16 | package org.thingsboard.server.common.data.plugin; |
17 | 17 | |
18 | 18 | import com.fasterxml.jackson.databind.JsonNode; |
19 | +import io.swagger.annotations.ApiModel; | |
20 | +import io.swagger.annotations.ApiModelProperty; | |
19 | 21 | import lombok.*; |
20 | 22 | import org.thingsboard.server.common.data.SearchTextBased; |
21 | 23 | import org.thingsboard.server.common.data.id.ComponentDescriptorId; |
... | ... | @@ -23,16 +25,23 @@ import org.thingsboard.server.common.data.id.ComponentDescriptorId; |
23 | 25 | /** |
24 | 26 | * @author Andrew Shvayka |
25 | 27 | */ |
28 | +@ApiModel | |
26 | 29 | @ToString |
27 | 30 | public class ComponentDescriptor extends SearchTextBased<ComponentDescriptorId> { |
28 | 31 | |
29 | 32 | private static final long serialVersionUID = 1L; |
30 | 33 | |
34 | + @ApiModelProperty(position = 3, value = "Type of the Rule Node", readOnly = true) | |
31 | 35 | @Getter @Setter private ComponentType type; |
36 | + @ApiModelProperty(position = 4, value = "Scope of the Rule Node. Always set to 'TENANT', since no rule chains on the 'SYSTEM' level yet.", readOnly = true, allowableValues = "TENANT", example = "TENANT") | |
32 | 37 | @Getter @Setter private ComponentScope scope; |
38 | + @ApiModelProperty(position = 5, value = "Name of the Rule Node. Taken from the @RuleNode annotation.", readOnly = true, example = "Custom Rule Node") | |
33 | 39 | @Getter @Setter private String name; |
40 | + @ApiModelProperty(position = 6, value = "Full name of the Java class that implements the Rule Engine Node interface.", readOnly = true, example = "com.mycompany.CustomRuleNode") | |
34 | 41 | @Getter @Setter private String clazz; |
42 | + @ApiModelProperty(position = 7, value = "Complex JSON object that represents the Rule Node configuration.", readOnly = true) | |
35 | 43 | @Getter @Setter private transient JsonNode configurationDescriptor; |
44 | + @ApiModelProperty(position = 8, value = "Rule Node Actions. Deprecated. Always null.", readOnly = true) | |
36 | 45 | @Getter @Setter private String actions; |
37 | 46 | |
38 | 47 | public ComponentDescriptor() { |
... | ... | @@ -53,12 +62,26 @@ public class ComponentDescriptor extends SearchTextBased<ComponentDescriptorId> |
53 | 62 | this.actions = plugin.getActions(); |
54 | 63 | } |
55 | 64 | |
65 | + @ApiModelProperty(position = 1, value = "JSON object with the descriptor Id. " + | |
66 | + "Specify existing descriptor id to update the descriptor. " + | |
67 | + "Referencing non-existing descriptor Id will cause error. " + | |
68 | + "Omit this field to create new descriptor." ) | |
69 | + @Override | |
70 | + public ComponentDescriptorId getId() { | |
71 | + return super.getId(); | |
72 | + } | |
73 | + | |
74 | + @ApiModelProperty(position = 2, value = "Timestamp of the descriptor creation, in milliseconds", example = "1609459200000", readOnly = true) | |
75 | + @Override | |
76 | + public long getCreatedTime() { | |
77 | + return super.getCreatedTime(); | |
78 | + } | |
79 | + | |
56 | 80 | @Override |
57 | 81 | public String getSearchText() { |
58 | 82 | return name; |
59 | 83 | } |
60 | 84 | |
61 | - | |
62 | 85 | @Override |
63 | 86 | public boolean equals(Object o) { |
64 | 87 | if (this == o) return true; |
... | ... | @@ -84,4 +107,5 @@ public class ComponentDescriptor extends SearchTextBased<ComponentDescriptorId> |
84 | 107 | result = 31 * result + (actions != null ? actions.hashCode() : 0); |
85 | 108 | return result; |
86 | 109 | } |
110 | + | |
87 | 111 | } | ... | ... |