Commit a4e3049c279cb46f3181f6b2b1c8d507796039ae

Authored by nickAS21
1 parent a9481012

Lwm2m: content format for observe fx bug

@@ -236,6 +236,12 @@ public class LwM2mClient implements Cloneable { @@ -236,6 +236,12 @@ public class LwM2mClient implements Cloneable {
236 .getResourceModel(pathIds.getObjectId(), pathIds.getResourceId()) : null; 236 .getResourceModel(pathIds.getObjectId(), pathIds.getResourceId()) : null;
237 } 237 }
238 238
  239 + public boolean isResourceMultiInstances(String pathIdVer, LwM2mModelProvider modelProvider) {
  240 + ResourceModel resourceModel = getResourceModel(pathIdVer, modelProvider);
  241 + return resourceModel.multiple;
  242 +
  243 + }
  244 +
239 public ObjectModel getObjectModel(String pathIdVer, LwM2mModelProvider modelProvider) { 245 public ObjectModel getObjectModel(String pathIdVer, LwM2mModelProvider modelProvider) {
240 LwM2mPath pathIds = new LwM2mPath(fromVersionedIdToObjectId(pathIdVer)); 246 LwM2mPath pathIds = new LwM2mPath(fromVersionedIdToObjectId(pathIdVer));
241 String verSupportedObject = registration.getSupportedObject().get(pathIds.getObjectId()); 247 String verSupportedObject = registration.getSupportedObject().get(pathIds.getObjectId());
@@ -273,7 +279,6 @@ public class LwM2mClient implements Cloneable { @@ -273,7 +279,6 @@ public class LwM2mClient implements Cloneable {
273 } 279 }
274 280
275 public String resourceToString(LwM2mResource lwM2mResource) { 281 public String resourceToString(LwM2mResource lwM2mResource) {
276 -  
277 return lwM2mResource.isMultiInstances() ? lwM2mResource.getInstances().toString() : lwM2mResource.getValue().toString(); 282 return lwM2mResource.isMultiInstances() ? lwM2mResource.getInstances().toString() : lwM2mResource.getValue().toString();
278 } 283 }
279 284
@@ -48,6 +48,7 @@ import org.eclipse.leshan.core.response.WriteAttributesResponse; @@ -48,6 +48,7 @@ import org.eclipse.leshan.core.response.WriteAttributesResponse;
48 import org.eclipse.leshan.core.response.WriteCompositeResponse; 48 import org.eclipse.leshan.core.response.WriteCompositeResponse;
49 import org.eclipse.leshan.core.response.WriteResponse; 49 import org.eclipse.leshan.core.response.WriteResponse;
50 import org.eclipse.leshan.core.util.Hex; 50 import org.eclipse.leshan.core.util.Hex;
  51 +import org.eclipse.leshan.server.model.LwM2mModelProvider;
51 import org.eclipse.leshan.server.registration.Registration; 52 import org.eclipse.leshan.server.registration.Registration;
52 import org.springframework.stereotype.Service; 53 import org.springframework.stereotype.Service;
53 import org.thingsboard.common.util.JacksonUtil; 54 import org.thingsboard.common.util.JacksonUtil;
@@ -119,7 +120,7 @@ public class DefaultLwM2mDownlinkMsgHandler extends LwM2MExecutorAwareService im @@ -119,7 +120,7 @@ public class DefaultLwM2mDownlinkMsgHandler extends LwM2MExecutorAwareService im
119 @Override 120 @Override
120 public void sendReadRequest(LwM2mClient client, TbLwM2MReadRequest request, DownlinkRequestCallback<ReadRequest, ReadResponse> callback) { 121 public void sendReadRequest(LwM2mClient client, TbLwM2MReadRequest request, DownlinkRequestCallback<ReadRequest, ReadResponse> callback) {
121 validateVersionedId(client, request); 122 validateVersionedId(client, request);
122 - ReadRequest downlink = new ReadRequest(getRequestContentFormat(client, request), request.getObjectId()); 123 + ReadRequest downlink = new ReadRequest(getRequestContentFormat(client, request, this.config.getModelProvider()), request.getObjectId());
123 sendRequest(client, downlink, request.getTimeout(), callback); 124 sendRequest(client, downlink, request.getTimeout(), callback);
124 } 125 }
125 126
@@ -155,7 +156,7 @@ public class DefaultLwM2mDownlinkMsgHandler extends LwM2MExecutorAwareService im @@ -155,7 +156,7 @@ public class DefaultLwM2mDownlinkMsgHandler extends LwM2MExecutorAwareService im
155 Set<Observation> observations = context.getServer().getObservationService().getObservations(client.getRegistration()); 156 Set<Observation> observations = context.getServer().getObservationService().getObservations(client.getRegistration());
156 if (observations.stream().noneMatch(observation -> observation.getPath().equals(resultIds))) { 157 if (observations.stream().noneMatch(observation -> observation.getPath().equals(resultIds))) {
157 ObserveRequest downlink; 158 ObserveRequest downlink;
158 - ContentFormat contentFormat = getRequestContentFormat(client, request); 159 + ContentFormat contentFormat = getRequestContentFormat(client, request, this.config.getModelProvider());
159 if (resultIds.isResource()) { 160 if (resultIds.isResource()) {
160 downlink = new ObserveRequest(contentFormat, resultIds.getObjectId(), resultIds.getObjectInstanceId(), resultIds.getResourceId()); 161 downlink = new ObserveRequest(contentFormat, resultIds.getObjectId(), resultIds.getObjectInstanceId(), resultIds.getResourceId());
161 } else if (resultIds.isObjectInstance()) { 162 } else if (resultIds.isObjectInstance()) {
@@ -457,16 +458,23 @@ public class DefaultLwM2mDownlinkMsgHandler extends LwM2MExecutorAwareService im @@ -457,16 +458,23 @@ public class DefaultLwM2mDownlinkMsgHandler extends LwM2MExecutorAwareService im
457 throw new CodecException("Invalid ResourceModel_Type for %s ContentFormat.", type); 458 throw new CodecException("Invalid ResourceModel_Type for %s ContentFormat.", type);
458 } 459 }
459 460
460 - private static ContentFormat getRequestContentFormat(LwM2mClient client, HasContentFormat request) { 461 + private static ContentFormat getRequestContentFormat(LwM2mClient client, HasContentFormat request, LwM2mModelProvider modelProvider) {
461 if (request.getRequestContentFormat() != null) { 462 if (request.getRequestContentFormat() != null) {
462 return request.getRequestContentFormat(); 463 return request.getRequestContentFormat();
463 } else { 464 } else {
464 - String versionedId = fromVersionedIdToObjectId(((TbLwM2MReadRequest) request).getVersionedId());  
465 - if (versionedId != null && (new LwM2mPath(versionedId).isObject() || new LwM2mPath(versionedId).isObjectInstance())) {  
466 - return ContentFormat.DEFAULT;  
467 - } else { 465 + String versionedId = null;
  466 + if (request instanceof TbLwM2MReadRequest) {
  467 + versionedId = ((TbLwM2MReadRequest) request).getVersionedId();
  468 + } else if (request instanceof TbLwM2MObserveRequest) {
  469 + versionedId = ((TbLwM2MObserveRequest) request).getVersionedId();
  470 + }
  471 + String id = fromVersionedIdToObjectId(versionedId);
  472 + if (id != null && !client.isResourceMultiInstances(versionedId, modelProvider)) {
468 return client.getDefaultContentFormat(); 473 return client.getDefaultContentFormat();
469 } 474 }
  475 + else {
  476 + return ContentFormat.DEFAULT;
  477 + }
470 } 478 }
471 } 479 }
472 } 480 }