Showing
7 changed files
with
115 additions
and
8 deletions
@@ -182,6 +182,7 @@ public abstract class BaseController { | @@ -182,6 +182,7 @@ public abstract class BaseController { | ||
182 | public static final String RULE_CHAIN_ID_PARAM_DESCRIPTION = "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'"; | 182 | public static final String RULE_CHAIN_ID_PARAM_DESCRIPTION = "A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'"; |
183 | public static final String WIDGET_BUNDLE_ID_PARAM_DESCRIPTION = "A string value representing the widget bundle id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'"; | 183 | public static final String WIDGET_BUNDLE_ID_PARAM_DESCRIPTION = "A string value representing the widget bundle id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'"; |
184 | public static final String WIDGET_TYPE_ID_PARAM_DESCRIPTION = "A string value representing the widget type id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'"; | 184 | public static final String WIDGET_TYPE_ID_PARAM_DESCRIPTION = "A string value representing the widget type id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'"; |
185 | + public static final String RESOURCE_ID_PARAM_DESCRIPTION = "A string value representing the resource id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'"; | ||
185 | 186 | ||
186 | 187 | ||
187 | protected static final String SYSTEM_AUTHORITY_PARAGRAPH = "\n\nAvailable for users with 'SYS_ADMIN' authority."; | 188 | protected static final String SYSTEM_AUTHORITY_PARAGRAPH = "\n\nAvailable for users with 'SYS_ADMIN' authority."; |
@@ -248,6 +249,12 @@ public abstract class BaseController { | @@ -248,6 +249,12 @@ public abstract class BaseController { | ||
248 | protected static final String OTA_PACKAGE_CHECKSUM_ALGORITHM_ALLOWABLE_VALUES = "MD5, SHA256, SHA384, SHA512, CRC32, MURMUR3_32, MURMUR3_128"; | 249 | protected static final String OTA_PACKAGE_CHECKSUM_ALGORITHM_ALLOWABLE_VALUES = "MD5, SHA256, SHA384, SHA512, CRC32, MURMUR3_32, MURMUR3_128"; |
249 | protected static final String OTA_PACKAGE_TEXT_SEARCH_DESCRIPTION = "The case insensitive 'startsWith' filter based on the ota package title."; | 250 | protected static final String OTA_PACKAGE_TEXT_SEARCH_DESCRIPTION = "The case insensitive 'startsWith' filter based on the ota package title."; |
250 | protected static final String OTA_PACKAGE_SORT_PROPERTY_ALLOWABLE_VALUES = "createdTime, type, title, version, tag, url, fileName, dataSize, checksum"; | 251 | protected static final String OTA_PACKAGE_SORT_PROPERTY_ALLOWABLE_VALUES = "createdTime, type, title, version, tag, url, fileName, dataSize, checksum"; |
252 | + protected static final String RESOURCE_INFO_DESCRIPTION = "Resource Info is a lightweight object that includes main information about the Resource excluding the heavyweight data. "; | ||
253 | + protected static final String RESOURCE_DESCRIPTION = "Resource is a heavyweight object that includes main information about the Resource and also data. "; | ||
254 | + protected static final String RESOURCE_TEXT_SEARCH_DESCRIPTION = "The case insensitive 'startsWith' filter based on the resource title."; | ||
255 | + protected static final String RESOURCE_SORT_PROPERTY_ALLOWABLE_VALUES = "createdTime, title, resourceType, tenantId"; | ||
256 | + protected static final String LWM2M_OBJECT_DESCRIPTION = "LwM2M Object is a object that includes information about the LwM2M model which can be used in transport configuration for the LwM2M device profile. "; | ||
257 | + protected static final String LWM2M_OBJECT_SORT_PROPERTY_ALLOWABLE_VALUES = "id, name"; | ||
251 | 258 | ||
252 | protected static final String DEVICE_NAME_DESCRIPTION = "A string value representing the Device name."; | 259 | protected static final String DEVICE_NAME_DESCRIPTION = "A string value representing the Device name."; |
253 | protected static final String ASSET_NAME_DESCRIPTION = "A string value representing the Asset name."; | 260 | protected static final String ASSET_NAME_DESCRIPTION = "A string value representing the Asset name."; |
@@ -15,6 +15,8 @@ | @@ -15,6 +15,8 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.controller; | 16 | package org.thingsboard.server.controller; |
17 | 17 | ||
18 | +import io.swagger.annotations.ApiOperation; | ||
19 | +import io.swagger.annotations.ApiParam; | ||
18 | import lombok.extern.slf4j.Slf4j; | 20 | import lombok.extern.slf4j.Slf4j; |
19 | import org.springframework.core.io.ByteArrayResource; | 21 | import org.springframework.core.io.ByteArrayResource; |
20 | import org.springframework.http.HttpHeaders; | 22 | import org.springframework.http.HttpHeaders; |
@@ -53,10 +55,12 @@ public class TbResourceController extends BaseController { | @@ -53,10 +55,12 @@ public class TbResourceController extends BaseController { | ||
53 | 55 | ||
54 | public static final String RESOURCE_ID = "resourceId"; | 56 | public static final String RESOURCE_ID = "resourceId"; |
55 | 57 | ||
58 | + @ApiOperation(value = "Download Resource (downloadResource)", notes = "Download Resource based on the provided Resource Id." + SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH) | ||
56 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") | 59 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") |
57 | @RequestMapping(value = "/resource/{resourceId}/download", method = RequestMethod.GET) | 60 | @RequestMapping(value = "/resource/{resourceId}/download", method = RequestMethod.GET) |
58 | @ResponseBody | 61 | @ResponseBody |
59 | - public ResponseEntity<org.springframework.core.io.Resource> downloadResource(@PathVariable(RESOURCE_ID) String strResourceId) throws ThingsboardException { | 62 | + public ResponseEntity<org.springframework.core.io.Resource> downloadResource(@ApiParam(value = RESOURCE_ID_PARAM_DESCRIPTION) |
63 | + @PathVariable(RESOURCE_ID) String strResourceId) throws ThingsboardException { | ||
60 | checkParameter(RESOURCE_ID, strResourceId); | 64 | checkParameter(RESOURCE_ID, strResourceId); |
61 | try { | 65 | try { |
62 | TbResourceId resourceId = new TbResourceId(toUUID(strResourceId)); | 66 | TbResourceId resourceId = new TbResourceId(toUUID(strResourceId)); |
@@ -74,10 +78,15 @@ public class TbResourceController extends BaseController { | @@ -74,10 +78,15 @@ public class TbResourceController extends BaseController { | ||
74 | } | 78 | } |
75 | } | 79 | } |
76 | 80 | ||
81 | + @ApiOperation(value = "Get Resource Info (getResourceInfoById)", | ||
82 | + notes = "Fetch the Resource Info object based on the provided Resource Id. " + | ||
83 | + RESOURCE_INFO_DESCRIPTION + SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH, | ||
84 | + produces = "application/json") | ||
77 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") | 85 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") |
78 | @RequestMapping(value = "/resource/info/{resourceId}", method = RequestMethod.GET) | 86 | @RequestMapping(value = "/resource/info/{resourceId}", method = RequestMethod.GET) |
79 | @ResponseBody | 87 | @ResponseBody |
80 | - public TbResourceInfo getResourceInfoById(@PathVariable(RESOURCE_ID) String strResourceId) throws ThingsboardException { | 88 | + public TbResourceInfo getResourceInfoById(@ApiParam(value = RESOURCE_ID_PARAM_DESCRIPTION) |
89 | + @PathVariable(RESOURCE_ID) String strResourceId) throws ThingsboardException { | ||
81 | checkParameter(RESOURCE_ID, strResourceId); | 90 | checkParameter(RESOURCE_ID, strResourceId); |
82 | try { | 91 | try { |
83 | TbResourceId resourceId = new TbResourceId(toUUID(strResourceId)); | 92 | TbResourceId resourceId = new TbResourceId(toUUID(strResourceId)); |
@@ -87,10 +96,15 @@ public class TbResourceController extends BaseController { | @@ -87,10 +96,15 @@ public class TbResourceController extends BaseController { | ||
87 | } | 96 | } |
88 | } | 97 | } |
89 | 98 | ||
99 | + @ApiOperation(value = "Get Resource (getResourceById)", | ||
100 | + notes = "Fetch the Resource object based on the provided Resource Id. " + | ||
101 | + RESOURCE_DESCRIPTION + SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH, | ||
102 | + produces = "application/json") | ||
90 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") | 103 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") |
91 | @RequestMapping(value = "/resource/{resourceId}", method = RequestMethod.GET) | 104 | @RequestMapping(value = "/resource/{resourceId}", method = RequestMethod.GET) |
92 | @ResponseBody | 105 | @ResponseBody |
93 | - public TbResource getResourceById(@PathVariable(RESOURCE_ID) String strResourceId) throws ThingsboardException { | 106 | + public TbResource getResourceById(@ApiParam(value = RESOURCE_ID_PARAM_DESCRIPTION) |
107 | + @PathVariable(RESOURCE_ID) String strResourceId) throws ThingsboardException { | ||
94 | checkParameter(RESOURCE_ID, strResourceId); | 108 | checkParameter(RESOURCE_ID, strResourceId); |
95 | try { | 109 | try { |
96 | TbResourceId resourceId = new TbResourceId(toUUID(strResourceId)); | 110 | TbResourceId resourceId = new TbResourceId(toUUID(strResourceId)); |
@@ -100,10 +114,19 @@ public class TbResourceController extends BaseController { | @@ -100,10 +114,19 @@ public class TbResourceController extends BaseController { | ||
100 | } | 114 | } |
101 | } | 115 | } |
102 | 116 | ||
117 | + @ApiOperation(value = "Create Or Update Resource (saveResource)", | ||
118 | + notes = "Create or update the Resource. When creating the Resource, platform generates Resource id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address). " + | ||
119 | + "The newly created Resource id will be present in the response. " + | ||
120 | + "Specify existing Resource id to update the Resource. " + | ||
121 | + "Referencing non-existing Resource Id will cause 'Not Found' error. " + | ||
122 | + "\n\nResource combination of the title with the key is unique in the scope of tenant. " + SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH, | ||
123 | + produces = "application/json", | ||
124 | + consumes = "application/json") | ||
103 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") | 125 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") |
104 | @RequestMapping(value = "/resource", method = RequestMethod.POST) | 126 | @RequestMapping(value = "/resource", method = RequestMethod.POST) |
105 | @ResponseBody | 127 | @ResponseBody |
106 | - public TbResource saveResource(@RequestBody TbResource resource) throws ThingsboardException { | 128 | + public TbResource saveResource(@ApiParam(value = "A JSON value representing the Resource.") |
129 | + @RequestBody TbResource resource) throws ThingsboardException { | ||
107 | boolean created = resource.getId() == null; | 130 | boolean created = resource.getId() == null; |
108 | try { | 131 | try { |
109 | resource.setTenantId(getTenantId()); | 132 | resource.setTenantId(getTenantId()); |
@@ -120,13 +143,22 @@ public class TbResourceController extends BaseController { | @@ -120,13 +143,22 @@ public class TbResourceController extends BaseController { | ||
120 | } | 143 | } |
121 | } | 144 | } |
122 | 145 | ||
146 | + @ApiOperation(value = "Get Resource Infos (getResources)", | ||
147 | + notes = "Returns a page of Resource Info objects owned by tenant or sysadmin. " + | ||
148 | + PAGE_DATA_PARAMETERS + RESOURCE_INFO_DESCRIPTION + SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH, | ||
149 | + produces = "application/json") | ||
123 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") | 150 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") |
124 | @RequestMapping(value = "/resource", method = RequestMethod.GET) | 151 | @RequestMapping(value = "/resource", method = RequestMethod.GET) |
125 | @ResponseBody | 152 | @ResponseBody |
126 | - public PageData<TbResourceInfo> getResources(@RequestParam int pageSize, | 153 | + public PageData<TbResourceInfo> getResources(@ApiParam(value = PAGE_SIZE_DESCRIPTION, required = true) |
154 | + @RequestParam int pageSize, | ||
155 | + @ApiParam(value = PAGE_NUMBER_DESCRIPTION, required = true) | ||
127 | @RequestParam int page, | 156 | @RequestParam int page, |
157 | + @ApiParam(value = RESOURCE_TEXT_SEARCH_DESCRIPTION) | ||
128 | @RequestParam(required = false) String textSearch, | 158 | @RequestParam(required = false) String textSearch, |
159 | + @ApiParam(value = SORT_PROPERTY_DESCRIPTION, allowableValues = RESOURCE_SORT_PROPERTY_ALLOWABLE_VALUES) | ||
129 | @RequestParam(required = false) String sortProperty, | 160 | @RequestParam(required = false) String sortProperty, |
161 | + @ApiParam(value = SORT_ORDER_DESCRIPTION, allowableValues = SORT_ORDER_ALLOWABLE_VALUES) | ||
130 | @RequestParam(required = false) String sortOrder) throws ThingsboardException { | 162 | @RequestParam(required = false) String sortOrder) throws ThingsboardException { |
131 | try { | 163 | try { |
132 | PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder); | 164 | PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder); |
@@ -140,13 +172,22 @@ public class TbResourceController extends BaseController { | @@ -140,13 +172,22 @@ public class TbResourceController extends BaseController { | ||
140 | } | 172 | } |
141 | } | 173 | } |
142 | 174 | ||
175 | + @ApiOperation(value = "Get LwM2M Objects (getLwm2mListObjectsPage)", | ||
176 | + notes = "Returns a page of LwM2M objects parsed from Resources with type 'LWM2M_MODEL' owned by tenant or sysadmin. " + | ||
177 | + PAGE_DATA_PARAMETERS + LWM2M_OBJECT_DESCRIPTION + TENANT_AUTHORITY_PARAGRAPH, | ||
178 | + produces = "application/json") | ||
143 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") | 179 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") |
144 | @RequestMapping(value = "/resource/lwm2m/page", method = RequestMethod.GET) | 180 | @RequestMapping(value = "/resource/lwm2m/page", method = RequestMethod.GET) |
145 | @ResponseBody | 181 | @ResponseBody |
146 | - public List<LwM2mObject> getLwm2mListObjectsPage(@RequestParam int pageSize, | 182 | + public List<LwM2mObject> getLwm2mListObjectsPage(@ApiParam(value = PAGE_SIZE_DESCRIPTION, required = true) |
183 | + @RequestParam int pageSize, | ||
184 | + @ApiParam(value = PAGE_NUMBER_DESCRIPTION, required = true) | ||
147 | @RequestParam int page, | 185 | @RequestParam int page, |
186 | + @ApiParam(value = RESOURCE_TEXT_SEARCH_DESCRIPTION) | ||
148 | @RequestParam(required = false) String textSearch, | 187 | @RequestParam(required = false) String textSearch, |
188 | + @ApiParam(value = SORT_PROPERTY_DESCRIPTION, allowableValues = LWM2M_OBJECT_SORT_PROPERTY_ALLOWABLE_VALUES) | ||
149 | @RequestParam(required = false) String sortProperty, | 189 | @RequestParam(required = false) String sortProperty, |
190 | + @ApiParam(value = SORT_ORDER_DESCRIPTION, allowableValues = SORT_ORDER_ALLOWABLE_VALUES) | ||
150 | @RequestParam(required = false) String sortOrder) throws ThingsboardException { | 191 | @RequestParam(required = false) String sortOrder) throws ThingsboardException { |
151 | try { | 192 | try { |
152 | PageLink pageLink = new PageLink(pageSize, page, textSearch); | 193 | PageLink pageLink = new PageLink(pageSize, page, textSearch); |
@@ -156,11 +197,18 @@ public class TbResourceController extends BaseController { | @@ -156,11 +197,18 @@ public class TbResourceController extends BaseController { | ||
156 | } | 197 | } |
157 | } | 198 | } |
158 | 199 | ||
200 | + @ApiOperation(value = "Get LwM2M Objects (getLwm2mListObjects)", | ||
201 | + notes = "Returns a page of LwM2M objects parsed from Resources with type 'LWM2M_MODEL' owned by tenant or sysadmin. " + | ||
202 | + "You can specify parameters to filter the results. " + LWM2M_OBJECT_DESCRIPTION + TENANT_AUTHORITY_PARAGRAPH, | ||
203 | + produces = "application/json") | ||
159 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") | 204 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") |
160 | @RequestMapping(value = "/resource/lwm2m", method = RequestMethod.GET) | 205 | @RequestMapping(value = "/resource/lwm2m", method = RequestMethod.GET) |
161 | @ResponseBody | 206 | @ResponseBody |
162 | - public List<LwM2mObject> getLwm2mListObjects(@RequestParam String sortOrder, | 207 | + public List<LwM2mObject> getLwm2mListObjects(@ApiParam(value = SORT_ORDER_DESCRIPTION, allowableValues = SORT_ORDER_ALLOWABLE_VALUES, required = true) |
208 | + @RequestParam String sortOrder, | ||
209 | + @ApiParam(value = SORT_PROPERTY_DESCRIPTION, allowableValues = LWM2M_OBJECT_SORT_PROPERTY_ALLOWABLE_VALUES, required = true) | ||
163 | @RequestParam String sortProperty, | 210 | @RequestParam String sortProperty, |
211 | + @ApiParam(value = "LwM2M Object ids.", required = true) | ||
164 | @RequestParam(required = false) String[] objectIds) throws ThingsboardException { | 212 | @RequestParam(required = false) String[] objectIds) throws ThingsboardException { |
165 | try { | 213 | try { |
166 | return checkNotNull(resourceService.findLwM2mObject(getTenantId(), sortOrder, sortProperty, objectIds)); | 214 | return checkNotNull(resourceService.findLwM2mObject(getTenantId(), sortOrder, sortProperty, objectIds)); |
@@ -169,10 +217,13 @@ public class TbResourceController extends BaseController { | @@ -169,10 +217,13 @@ public class TbResourceController extends BaseController { | ||
169 | } | 217 | } |
170 | } | 218 | } |
171 | 219 | ||
220 | + @ApiOperation(value = "Delete Resource (deleteResource)", | ||
221 | + notes = "Deletes the Resource. Referencing non-existing Resource Id will cause an error." + SYSTEM_OR_TENANT_AUTHORITY_PARAGRAPH) | ||
172 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") | 222 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") |
173 | @RequestMapping(value = "/resource/{resourceId}", method = RequestMethod.DELETE) | 223 | @RequestMapping(value = "/resource/{resourceId}", method = RequestMethod.DELETE) |
174 | @ResponseBody | 224 | @ResponseBody |
175 | - public void deleteResource(@PathVariable("resourceId") String strResourceId) throws ThingsboardException { | 225 | + public void deleteResource(@ApiParam(value = RESOURCE_ID_PARAM_DESCRIPTION) |
226 | + @PathVariable("resourceId") String strResourceId) throws ThingsboardException { | ||
176 | checkParameter(RESOURCE_ID, strResourceId); | 227 | checkParameter(RESOURCE_ID, strResourceId); |
177 | try { | 228 | try { |
178 | TbResourceId resourceId = new TbResourceId(toUUID(strResourceId)); | 229 | TbResourceId resourceId = new TbResourceId(toUUID(strResourceId)); |
@@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.common.data; | 16 | package org.thingsboard.server.common.data; |
17 | 17 | ||
18 | +import io.swagger.annotations.ApiModelProperty; | ||
18 | import lombok.Data; | 19 | import lombok.Data; |
19 | import lombok.EqualsAndHashCode; | 20 | import lombok.EqualsAndHashCode; |
20 | import lombok.extern.slf4j.Slf4j; | 21 | import lombok.extern.slf4j.Slf4j; |
@@ -29,8 +30,10 @@ public class TbResource extends TbResourceInfo { | @@ -29,8 +30,10 @@ public class TbResource extends TbResourceInfo { | ||
29 | private static final long serialVersionUID = 7379609705527272306L; | 30 | private static final long serialVersionUID = 7379609705527272306L; |
30 | 31 | ||
31 | @NoXss | 32 | @NoXss |
33 | + @ApiModelProperty(position = 8, value = "Resource file name.", example = "19.xml", readOnly = true) | ||
32 | private String fileName; | 34 | private String fileName; |
33 | 35 | ||
36 | + @ApiModelProperty(position = 9, value = "Resource data.", example = "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLQpGSUxFIElORk9STUFUSU9OCgpPTUEgUGVybWFuZW50IERvY3VtZW50CiAgIEZpbGU6IE9NQS1TVVAtTHdNMk1fQmluYXJ5QXBwRGF0YUNvbnRhaW5lci1WMV8wXzEtMjAxOTAyMjEtQQogICBUeXBlOiB4bWwKClB1YmxpYyBSZWFjaGFibGUgSW5mb3JtYXRpb24KICAgUGF0aDogaHR0cDovL3d3dy5vcGVubW9iaWxlYWxsaWFuY2Uub3JnL3RlY2gvcHJvZmlsZXMKICAgTmFtZTogTHdNMk1fQmluYXJ5QXBwRGF0YUNvbnRhaW5lci12MV8wXzEueG1sCgpOT1JNQVRJVkUgSU5GT1JNQVRJT04KCiAgSW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmaWxlIGNhbiBiZSBmb3VuZCBpbiB0aGUgbGF0ZXN0IHJldmlzaW9uIG9mCgogIE9NQS1UUy1MV00yTV9CaW5hcnlBcHBEYXRhQ29udGFpbmVyLVYxXzBfMQoKICBUaGlzIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5tb2JpbGVhbGxpYW5jZS5vcmcvCgogIFNlbmQgY29tbWVudHMgdG8gaHR0cHM6Ly9naXRodWIuY29tL09wZW5Nb2JpbGVBbGxpYW5jZS9PTUFfTHdNMk1fZm9yX0RldmVsb3BlcnMvaXNzdWVzCgpDSEFOR0UgSElTVE9SWQoKMTUwNjIwMTggU3RhdHVzIGNoYW5nZWQgdG8gQXBwcm92ZWQgYnkgRE0sIERvYyBSZWYgIyBPTUEtRE0mU0UtMjAxOC0wMDYxLUlOUF9MV00yTV9BUFBEQVRBX1YxXzBfRVJQX2Zvcl9maW5hbF9BcHByb3ZhbAoyMTAyMjAxOSBTdGF0dXMgY2hhbmdlZCB0byBBcHByb3ZlZCBieSBJUFNPLCBEb2MgUmVmICMgT01BLUlQU08tMjAxOS0wMDI1LUlOUF9Md00yTV9PYmplY3RfQXBwX0RhdGFfQ29udGFpbmVyXzFfMF8xX2Zvcl9GaW5hbF9BcHByb3ZhbAoKTEVHQUwgRElTQ0xBSU1FUgoKQ29weXJpZ2h0IDIwMTkgT3BlbiBNb2JpbGUgQWxsaWFuY2UuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodApub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cm5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwpjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwoiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVApMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwpGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULApJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLApCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCkxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCkFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQpQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KClRoZSBhYm92ZSBsaWNlbnNlIGlzIHVzZWQgYXMgYSBsaWNlbnNlIHVuZGVyIGNvcHlyaWdodCBvbmx5LiBQbGVhc2UKcmVmZXJlbmNlIHRoZSBPTUEgSVBSIFBvbGljeSBmb3IgcGF0ZW50IGxpY2Vuc2luZyB0ZXJtczoKaHR0cHM6Ly93d3cub21hc3BlY3dvcmtzLm9yZy9hYm91dC9pbnRlbGxlY3R1YWwtcHJvcGVydHktcmlnaHRzLwoKLS0+CjxMV00yTSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iaHR0cDovL29wZW5tb2JpbGVhbGxpYW5jZS5vcmcvdGVjaC9wcm9maWxlcy9MV00yTS54c2QiPgoJPE9iamVjdCBPYmplY3RUeXBlPSJNT0RlZmluaXRpb24iPgoJCTxOYW1lPkJpbmFyeUFwcERhdGFDb250YWluZXI8L05hbWU+CgkJPERlc2NyaXB0aW9uMT48IVtDREFUQVtUaGlzIEx3TTJNIE9iamVjdHMgcHJvdmlkZXMgdGhlIGFwcGxpY2F0aW9uIHNlcnZpY2UgZGF0YSByZWxhdGVkIHRvIGEgTHdNMk0gU2VydmVyLCBlZy4gV2F0ZXIgbWV0ZXIgZGF0YS4gClRoZXJlIGFyZSBzZXZlcmFsIG1ldGhvZHMgdG8gY3JlYXRlIGluc3RhbmNlIHRvIGluZGljYXRlIHRoZSBtZXNzYWdlIGRpcmVjdGlvbiBiYXNlZCBvbiB0aGUgbmVnb3RpYXRpb24gYmV0d2VlbiBBcHBsaWNhdGlvbiBhbmQgTHdNMk0uIFRoZSBDbGllbnQgYW5kIFNlcnZlciBzaG91bGQgbmVnb3RpYXRlIHRoZSBpbnN0YW5jZShzKSB1c2VkIHRvIGV4Y2hhbmdlIHRoZSBkYXRhLiBGb3IgZXhhbXBsZToKIC0gVXNpbmcgYSBzaW5nbGUgaW5zdGFuY2UgZm9yIGJvdGggZGlyZWN0aW9ucyBjb21tdW5pY2F0aW9uLCBmcm9tIENsaWVudCB0byBTZXJ2ZXIgYW5kIGZyb20gU2VydmVyIHRvIENsaWVudC4KIC0gVXNpbmcgYW4gaW5zdGFuY2UgZm9yIGNvbW11bmljYXRpb24gZnJvbSBDbGllbnQgdG8gU2VydmVyIGFuZCBhbm90aGVyIG9uZSBmb3IgY29tbXVuaWNhdGlvbiBmcm9tIFNlcnZlciB0byBDbGllbnQKIC0gVXNpbmcgc2V2ZXJhbCBpbnN0YW5jZXMKXV0+PC9EZXNjcmlwdGlvbjE+CgkJPE9iamVjdElEPjE5PC9PYmplY3RJRD4KCQk8T2JqZWN0VVJOPnVybjpvbWE6bHdtMm06b21hOjE5PC9PYmplY3RVUk4+CgkJPExXTTJNVmVyc2lvbj4xLjA8L0xXTTJNVmVyc2lvbj4KCQk8T2JqZWN0VmVyc2lvbj4xLjA8L09iamVjdFZlcnNpb24+CgkJPE11bHRpcGxlSW5zdGFuY2VzPk11bHRpcGxlPC9NdWx0aXBsZUluc3RhbmNlcz4KCQk8TWFuZGF0b3J5Pk9wdGlvbmFsPC9NYW5kYXRvcnk+CgkJPFJlc291cmNlcz4KCQkJPEl0ZW0gSUQ9IjAiPjxOYW1lPkRhdGE8L05hbWU+CgkJCQk8T3BlcmF0aW9ucz5SVzwvT3BlcmF0aW9ucz4KCQkJCTxNdWx0aXBsZUluc3RhbmNlcz5NdWx0aXBsZTwvTXVsdGlwbGVJbnN0YW5jZXM+CgkJCQk8TWFuZGF0b3J5Pk1hbmRhdG9yeTwvTWFuZGF0b3J5PgoJCQkJPFR5cGU+T3BhcXVlPC9UeXBlPgoJCQkJPFJhbmdlRW51bWVyYXRpb24gLz4KCQkJCTxVbml0cyAvPgoJCQkJPERlc2NyaXB0aW9uPjwhW0NEQVRBW0luZGljYXRlcyB0aGUgYXBwbGljYXRpb24gZGF0YSBjb250ZW50Ll1dPjwvRGVzY3JpcHRpb24+CgkJCTwvSXRlbT4KCQkJPEl0ZW0gSUQ9IjEiPjxOYW1lPkRhdGEgUHJpb3JpdHk8L05hbWU+CgkJCQk8T3BlcmF0aW9ucz5SVzwvT3BlcmF0aW9ucz4KCQkJCTxNdWx0aXBsZUluc3RhbmNlcz5TaW5nbGU8L011bHRpcGxlSW5zdGFuY2VzPgoJCQkJPE1hbmRhdG9yeT5PcHRpb25hbDwvTWFuZGF0b3J5PgoJCQkJPFR5cGU+SW50ZWdlcjwvVHlwZT4KCQkJCTxSYW5nZUVudW1lcmF0aW9uPjEgYnl0ZXM8L1JhbmdlRW51bWVyYXRpb24+CgkJCQk8VW5pdHMgLz4KCQkJCTxEZXNjcmlwdGlvbj48IVtDREFUQVtJbmRpY2F0ZXMgdGhlIEFwcGxpY2F0aW9uIGRhdGEgcHJpb3JpdHk6CjA6SW1tZWRpYXRlCjE6QmVzdEVmZm9ydAoyOkxhdGVzdAozLTEwMDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCjEwMS0yNTQ6IFByb3ByaWV0YXJ5IG1vZGUuXV0+PC9EZXNjcmlwdGlvbj4KCQkJPC9JdGVtPgoJCQk8SXRlbSBJRD0iMiI+PE5hbWU+RGF0YSBDcmVhdGlvbiBUaW1lPC9OYW1lPgoJCQkJPE9wZXJhdGlvbnM+Ulc8L09wZXJhdGlvbnM+CgkJCQk8TXVsdGlwbGVJbnN0YW5jZXM+U2luZ2xlPC9NdWx0aXBsZUluc3RhbmNlcz4KCQkJCTxNYW5kYXRvcnk+T3B0aW9uYWw8L01hbmRhdG9yeT4KCQkJCTxUeXBlPlRpbWU8L1R5cGU+CgkJCQk8UmFuZ2VFbnVtZXJhdGlvbiAvPgoJCQkJPFVuaXRzIC8+CgkJCQk8RGVzY3JpcHRpb24+PCFbQ0RBVEFbSW5kaWNhdGVzIHRoZSBEYXRhIGluc3RhbmNlIGNyZWF0aW9uIHRpbWVzdGFtcC5dXT48L0Rlc2NyaXB0aW9uPgoJCQk8L0l0ZW0+CgkJCTxJdGVtIElEPSIzIj48TmFtZT5EYXRhIERlc2NyaXB0aW9uPC9OYW1lPgoJCQkJPE9wZXJhdGlvbnM+Ulc8L09wZXJhdGlvbnM+CgkJCQk8TXVsdGlwbGVJbnN0YW5jZXM+U2luZ2xlPC9NdWx0aXBsZUluc3RhbmNlcz4KCQkJCTxNYW5kYXRvcnk+T3B0aW9uYWw8L01hbmRhdG9yeT4KCQkJCTxUeXBlPlN0cmluZzwvVHlwZT4KCQkJCTxSYW5nZUVudW1lcmF0aW9uPjMyIGJ5dGVzPC9SYW5nZUVudW1lcmF0aW9uPgoJCQkJPFVuaXRzIC8+CgkJCQk8RGVzY3JpcHRpb24+PCFbQ0RBVEFbSW5kaWNhdGVzIHRoZSBkYXRhIGRlc2NyaXB0aW9uLgplLmcuICJtZXRlciByZWFkaW5nIi5dXT48L0Rlc2NyaXB0aW9uPgoJCQk8L0l0ZW0+CgkJCTxJdGVtIElEPSI0Ij48TmFtZT5EYXRhIEZvcm1hdDwvTmFtZT4KCQkJCTxPcGVyYXRpb25zPlJXPC9PcGVyYXRpb25zPgoJCQkJPE11bHRpcGxlSW5zdGFuY2VzPlNpbmdsZTwvTXVsdGlwbGVJbnN0YW5jZXM+CgkJCQk8TWFuZGF0b3J5Pk9wdGlvbmFsPC9NYW5kYXRvcnk+CgkJCQk8VHlwZT5TdHJpbmc8L1R5cGU+CgkJCQk8UmFuZ2VFbnVtZXJhdGlvbj4zMiBieXRlczwvUmFuZ2VFbnVtZXJhdGlvbj4KCQkJCTxVbml0cyAvPgoJCQkJPERlc2NyaXB0aW9uPjwhW0NEQVRBW0luZGljYXRlcyB0aGUgZm9ybWF0IG9mIHRoZSBBcHBsaWNhdGlvbiBEYXRhLgplLmcuIFlHLU1ldGVyLVdhdGVyLVJlYWRpbmcKVVRGOC1zdHJpbmcKXV0+PC9EZXNjcmlwdGlvbj4KCQkJPC9JdGVtPgoJCQk8SXRlbSBJRD0iNSI+PE5hbWU+QXBwIElEPC9OYW1lPgoJCQkJPE9wZXJhdGlvbnM+Ulc8L09wZXJhdGlvbnM+CgkJCQk8TXVsdGlwbGVJbnN0YW5jZXM+U2luZ2xlPC9NdWx0aXBsZUluc3RhbmNlcz4KCQkJCTxNYW5kYXRvcnk+T3B0aW9uYWw8L01hbmRhdG9yeT4KCQkJCTxUeXBlPkludGVnZXI8L1R5cGU+CgkJCQk8UmFuZ2VFbnVtZXJhdGlvbj4yIGJ5dGVzPC9SYW5nZUVudW1lcmF0aW9uPgoJCQkJPFVuaXRzIC8+CgkJCQk8RGVzY3JpcHRpb24+PCFbQ0RBVEFbSW5kaWNhdGVzIHRoZSBkZXN0aW5hdGlvbiBBcHBsaWNhdGlvbiBJRC5dXT48L0Rlc2NyaXB0aW9uPgoJCQk8L0l0ZW0+PC9SZXNvdXJjZXM+CgkJPERlc2NyaXB0aW9uMj48IVtDREFUQVtdXT48L0Rlc2NyaXB0aW9uMj4KCTwvT2JqZWN0Pgo8L0xXTTJNPgo=", readOnly = true) | ||
34 | private String data; | 37 | private String data; |
35 | 38 | ||
36 | public TbResource() { | 39 | public TbResource() { |
@@ -16,6 +16,8 @@ | @@ -16,6 +16,8 @@ | ||
16 | package org.thingsboard.server.common.data; | 16 | package org.thingsboard.server.common.data; |
17 | 17 | ||
18 | import com.fasterxml.jackson.annotation.JsonIgnore; | 18 | import com.fasterxml.jackson.annotation.JsonIgnore; |
19 | +import io.swagger.annotations.ApiModel; | ||
20 | +import io.swagger.annotations.ApiModelProperty; | ||
19 | import lombok.Data; | 21 | import lombok.Data; |
20 | import lombok.EqualsAndHashCode; | 22 | import lombok.EqualsAndHashCode; |
21 | import lombok.extern.slf4j.Slf4j; | 23 | import lombok.extern.slf4j.Slf4j; |
@@ -23,6 +25,7 @@ import org.thingsboard.server.common.data.id.TbResourceId; | @@ -23,6 +25,7 @@ import org.thingsboard.server.common.data.id.TbResourceId; | ||
23 | import org.thingsboard.server.common.data.id.TenantId; | 25 | import org.thingsboard.server.common.data.id.TenantId; |
24 | import org.thingsboard.server.common.data.validation.NoXss; | 26 | import org.thingsboard.server.common.data.validation.NoXss; |
25 | 27 | ||
28 | +@ApiModel | ||
26 | @Slf4j | 29 | @Slf4j |
27 | @Data | 30 | @Data |
28 | @EqualsAndHashCode(callSuper = true) | 31 | @EqualsAndHashCode(callSuper = true) |
@@ -30,11 +33,16 @@ public class TbResourceInfo extends SearchTextBased<TbResourceId> implements Has | @@ -30,11 +33,16 @@ public class TbResourceInfo extends SearchTextBased<TbResourceId> implements Has | ||
30 | 33 | ||
31 | private static final long serialVersionUID = 7282664529021651736L; | 34 | private static final long serialVersionUID = 7282664529021651736L; |
32 | 35 | ||
36 | + @ApiModelProperty(position = 3, value = "JSON object with Tenant Id. Tenant Id of the resource can't be changed.", readOnly = true) | ||
33 | private TenantId tenantId; | 37 | private TenantId tenantId; |
34 | @NoXss | 38 | @NoXss |
39 | + @ApiModelProperty(position = 4, value = "Resource title.", example = "BinaryAppDataContainer id=19 v1.0") | ||
35 | private String title; | 40 | private String title; |
41 | + @ApiModelProperty(position = 5, value = "Resource type.", example = "LWM2M_MODEL", readOnly = true) | ||
36 | private ResourceType resourceType; | 42 | private ResourceType resourceType; |
43 | + @ApiModelProperty(position = 6, value = "Resource key.", example = "19_1.0", readOnly = true) | ||
37 | private String resourceKey; | 44 | private String resourceKey; |
45 | + @ApiModelProperty(position = 7, value = "Resource search text.", example = "19_1.0:binaryappdatacontainer", readOnly = true) | ||
38 | private String searchText; | 46 | private String searchText; |
39 | 47 | ||
40 | public TbResourceInfo() { | 48 | public TbResourceInfo() { |
@@ -54,6 +62,21 @@ public class TbResourceInfo extends SearchTextBased<TbResourceId> implements Has | @@ -54,6 +62,21 @@ public class TbResourceInfo extends SearchTextBased<TbResourceId> implements Has | ||
54 | this.searchText = resourceInfo.getSearchText(); | 62 | this.searchText = resourceInfo.getSearchText(); |
55 | } | 63 | } |
56 | 64 | ||
65 | + @ApiModelProperty(position = 1, value = "JSON object with the Resource Id. " + | ||
66 | + "Specify this field to update the Resource. " + | ||
67 | + "Referencing non-existing Resource Id will cause error. " + | ||
68 | + "Omit this field to create new Resource." ) | ||
69 | + @Override | ||
70 | + public TbResourceId getId() { | ||
71 | + return super.getId(); | ||
72 | + } | ||
73 | + | ||
74 | + @ApiModelProperty(position = 2, value = "Timestamp of the resource creation, in milliseconds", example = "1609459200000", readOnly = true) | ||
75 | + @Override | ||
76 | + public long getCreatedTime() { | ||
77 | + return super.getCreatedTime(); | ||
78 | + } | ||
79 | + | ||
57 | @Override | 80 | @Override |
58 | @JsonIgnore | 81 | @JsonIgnore |
59 | public String getName() { | 82 | public String getName() { |
@@ -15,11 +15,16 @@ | @@ -15,11 +15,16 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.common.data.lwm2m; | 16 | package org.thingsboard.server.common.data.lwm2m; |
17 | 17 | ||
18 | +import io.swagger.annotations.ApiModel; | ||
19 | +import io.swagger.annotations.ApiModelProperty; | ||
18 | import lombok.Data; | 20 | import lombok.Data; |
19 | 21 | ||
22 | +@ApiModel | ||
20 | @Data | 23 | @Data |
21 | public class LwM2mInstance { | 24 | public class LwM2mInstance { |
25 | + @ApiModelProperty(position = 1, value = "LwM2M Instance id.", example = "0") | ||
22 | int id; | 26 | int id; |
27 | + @ApiModelProperty(position = 2, value = "LwM2M Resource observe.") | ||
23 | LwM2mResourceObserve[] resources; | 28 | LwM2mResourceObserve[] resources; |
24 | 29 | ||
25 | } | 30 | } |
@@ -15,14 +15,23 @@ | @@ -15,14 +15,23 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.common.data.lwm2m; | 16 | package org.thingsboard.server.common.data.lwm2m; |
17 | 17 | ||
18 | +import io.swagger.annotations.ApiModel; | ||
19 | +import io.swagger.annotations.ApiModelProperty; | ||
18 | import lombok.Data; | 20 | import lombok.Data; |
19 | 21 | ||
22 | +@ApiModel | ||
20 | @Data | 23 | @Data |
21 | public class LwM2mObject { | 24 | public class LwM2mObject { |
25 | + @ApiModelProperty(position = 1, value = "LwM2M Object id.", example = "19") | ||
22 | int id; | 26 | int id; |
27 | + @ApiModelProperty(position = 2, value = "LwM2M Object key id.", example = "19_1.0") | ||
23 | String keyId; | 28 | String keyId; |
29 | + @ApiModelProperty(position = 3, value = "LwM2M Object name.", example = "BinaryAppDataContainer") | ||
24 | String name; | 30 | String name; |
31 | + @ApiModelProperty(position = 4, value = "LwM2M Object multiple.", example = "true") | ||
25 | boolean multiple; | 32 | boolean multiple; |
33 | + @ApiModelProperty(position = 5, value = "LwM2M Object mandatory.", example = "false") | ||
26 | boolean mandatory; | 34 | boolean mandatory; |
35 | + @ApiModelProperty(position = 6, value = "LwM2M Object instances.") | ||
27 | LwM2mInstance [] instances; | 36 | LwM2mInstance [] instances; |
28 | } | 37 | } |
@@ -15,19 +15,28 @@ | @@ -15,19 +15,28 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.common.data.lwm2m; | 16 | package org.thingsboard.server.common.data.lwm2m; |
17 | 17 | ||
18 | +import io.swagger.annotations.ApiModel; | ||
19 | +import io.swagger.annotations.ApiModelProperty; | ||
18 | import lombok.AllArgsConstructor; | 20 | import lombok.AllArgsConstructor; |
19 | import lombok.Data; | 21 | import lombok.Data; |
20 | 22 | ||
21 | import java.util.stream.Stream; | 23 | import java.util.stream.Stream; |
22 | 24 | ||
25 | +@ApiModel | ||
23 | @Data | 26 | @Data |
24 | @AllArgsConstructor | 27 | @AllArgsConstructor |
25 | public class LwM2mResourceObserve { | 28 | public class LwM2mResourceObserve { |
29 | + @ApiModelProperty(position = 1, value = "LwM2M Resource Observe id.", example = "0") | ||
26 | int id; | 30 | int id; |
31 | + @ApiModelProperty(position = 2, value = "LwM2M Resource Observe name.", example = "Data") | ||
27 | String name; | 32 | String name; |
33 | + @ApiModelProperty(position = 3, value = "LwM2M Resource Observe observe.", example = "false") | ||
28 | boolean observe; | 34 | boolean observe; |
35 | + @ApiModelProperty(position = 4, value = "LwM2M Resource Observe attribute.", example = "false") | ||
29 | boolean attribute; | 36 | boolean attribute; |
37 | + @ApiModelProperty(position = 5, value = "LwM2M Resource Observe telemetry.", example = "false") | ||
30 | boolean telemetry; | 38 | boolean telemetry; |
39 | + @ApiModelProperty(position = 6, value = "LwM2M Resource Observe key name.", example = "data") | ||
31 | String keyName; | 40 | String keyName; |
32 | 41 | ||
33 | public LwM2mResourceObserve(int id, String name, boolean observe, boolean attribute, boolean telemetry) { | 42 | public LwM2mResourceObserve(int id, String name, boolean observe, boolean attribute, boolean telemetry) { |