Collection<JsonArrayEntry> jsonArray = result.get(nodePath.getObjectInstanceId()); if (jsonArray == null) { jsonArray = new ArrayList<>(); result.put(nodePath.getObjectInstanceId(), jsonArray); if (result.isEmpty() && baseName.getObjectInstanceId() != null) { result.put(baseName.getObjectInstanceId(), new ArrayList<JsonArrayEntry>());
/** * The string representation of the path: /{Object ID}/{ObjectInstance ID}/{Resource ID}/{ResourceInstance ID} */ @Override public String toString() { StringBuilder b = new StringBuilder(); b.append("/"); if (getObjectId() != null) { b.append(getObjectId()); if (getObjectInstanceId() != null) { b.append("/").append(getObjectInstanceId()); if (getResourceId() != null) { b.append("/").append(getResourceId()); if (getResourceInstanceId() != null) { b.append("/").append(getResourceInstanceId()); } } } } return b.toString(); }
@Override protected DeleteResponse doDelete(DeleteRequest request) { if (null != instances.remove(request.getPath().getObjectInstanceId())) { return DeleteResponse.success(); } return DeleteResponse.notFound(); }
@Override protected ExecuteResponse doExecute(ExecuteRequest request) { LwM2mPath path = request.getPath(); LwM2mInstanceEnabler instance = instances.get(path.getObjectInstanceId()); if (instance == null) { return ExecuteResponse.notFound(); } return instance.execute(path.getResourceId(), request.getParameters()); }
@Override protected ReadResponse doRead(ServerIdentity identity, ReadRequest request) { LwM2mPath path = request.getPath(); // Manage Object case if (path.isObject()) { List<LwM2mObjectInstance> lwM2mObjectInstances = new ArrayList<>(); for (Entry<Integer, LwM2mInstanceEnabler> entry : instances.entrySet()) { lwM2mObjectInstances.add(getLwM2mObjectInstance(entry.getKey(), entry.getValue(), identity, false)); } return ReadResponse.success(new LwM2mObject(getId(), lwM2mObjectInstances)); } // Manage Instance case LwM2mInstanceEnabler instance = instances.get(path.getObjectInstanceId()); if (instance == null) return ReadResponse.notFound(); if (path.getResourceId() == null) { return ReadResponse.success(getLwM2mObjectInstance(path.getObjectInstanceId(), instance, identity, false)); } // Manage Resource case return instance.read(path.getResourceId()); }
private CreateRequest(ContentFormat format, LwM2mPath target, Integer instanceId, LwM2mResource[] resources) { super(target); // accept only object and object instance path if (target.isRoot()) throw new InvalidRequestException("Create request cannot target root path"); if (!target.isObject() && !target.isObjectInstance()) throw new InvalidRequestException( "Invalid path %s: Create request must not target an object or object instance", target); // validate instance id if (instanceId != null && instanceId == LwM2mObjectInstance.UNDEFINED) { instanceId = null; } if (target.isObjectInstance()) { if (instanceId == null) { instanceId = target.getObjectInstanceId(); } else { if (!instanceId.equals(target.getObjectInstanceId())) { throw new InvalidRequestException("Conflict between path instance id %s and node instance id %s", target, instanceId); } } } if (instanceId != null && instanceId < 0) throw new InvalidRequestException("Invalid instance id %s for path %s ", instanceId, target); // store attributes this.instanceId = instanceId; this.resources = Collections.unmodifiableList(Arrays.asList(resources)); this.contentFormat = format != null ? format : ContentFormat.TLV; // default to TLV }
@Override protected ObserveResponse doObserve(final ServerIdentity identity, final ObserveRequest request) { final LwM2mPath path = request.getPath(); // Manage Object case if (path.isObject()) { List<LwM2mObjectInstance> lwM2mObjectInstances = new ArrayList<>(); for (Entry<Integer, LwM2mInstanceEnabler> entry : instances.entrySet()) { lwM2mObjectInstances.add(getLwM2mObjectInstance(entry.getKey(), entry.getValue(), identity, true)); } return ObserveResponse.success(new LwM2mObject(getId(), lwM2mObjectInstances)); } // Manage Instance case final LwM2mInstanceEnabler instance = instances.get(path.getObjectInstanceId()); if (instance == null) return ObserveResponse.notFound(); if (path.getResourceId() == null) { return ObserveResponse .success(getLwM2mObjectInstance(path.getObjectInstanceId(), instance, identity, true)); } // Manage Resource case return instance.observe(path.getResourceId()); }
private static LwM2mPath extractAndValidateBaseName(JsonRootObject jsonObject, LwM2mPath requestPath) throws CodecException { // Check baseName is valid if (jsonObject.getBaseName() != null && !jsonObject.getBaseName().isEmpty()) { LwM2mPath bnPath = new LwM2mPath(jsonObject.getBaseName()); // check returned base name path is under requested path if (requestPath.getObjectId() != null && bnPath.getObjectId() != null) { if (!bnPath.getObjectId().equals(requestPath.getObjectId())) { throw new CodecException("Basename path [%s] does not match requested path [%s].", bnPath, requestPath); } if (requestPath.getObjectInstanceId() != null && bnPath.getObjectInstanceId() != null) { if (!bnPath.getObjectInstanceId().equals(requestPath.getObjectInstanceId())) { throw new CodecException("Basename path [%s] does not match requested path [%s].", bnPath, requestPath); } if (requestPath.getResourceId() != null && bnPath.getResourceId() != null) { if (!bnPath.getResourceId().equals(requestPath.getResourceId())) { throw new CodecException("Basename path [%s] does not match requested path [%s].", bnPath, requestPath); } } } } return bnPath; } return null; }
/** * Create a Object Link referencing an object instance with the given path. */ public static ObjectLink fromPath(String path) { LwM2mPath lwM2mPath = new LwM2mPath(path); if (lwM2mPath.isRoot()) { return new ObjectLink(); // create null link } else if (lwM2mPath.isObjectInstance()) { return new ObjectLink(lwM2mPath.getObjectId(), lwM2mPath.getObjectInstanceId()); } else { throw new IllegalArgumentException("Invalid path: ObjectLink should reference an object instance"); } }
protected DiscoverResponse doDiscover(DiscoverRequest request) { LwM2mPath path = request.getPath(); if (path.isObject()) { // Manage discover on object Link[] ObjectLinks = LinkFormatHelper.getObjectDescription(this, null); return DiscoverResponse.success(ObjectLinks); } else if (path.isObjectInstance()) { // Manage discover on instance if (!getAvailableInstanceIds().contains(path.getObjectInstanceId())) return DiscoverResponse.notFound(); Link[] instanceLink = LinkFormatHelper.getInstanceDescription(this, path.getObjectInstanceId(), null); return DiscoverResponse.success(instanceLink); } else if (path.isResource()) { // Manage discover on resource if (!getAvailableInstanceIds().contains(path.getObjectInstanceId())) return DiscoverResponse.notFound(); ResourceModel resourceModel = getObjectModel().resources.get(path.getResourceId()); if (resourceModel == null) return DiscoverResponse.notFound(); if (!getAvailableResourceIds(path.getObjectInstanceId()).contains(path.getResourceId())) return DiscoverResponse.notFound(); Link resourceLink = LinkFormatHelper.getResourceDescription(this, path.getObjectInstanceId(), path.getResourceId(), null); return DiscoverResponse.success(new Link[] { resourceLink }); } return DiscoverResponse.badRequest(null); }
if (id == LwM2mId.SECURITY) { LwM2mInstanceEnabler instance = instances.get(request.getPath().getObjectInstanceId()); if (ServersInfoExtractor.isBootstrapServer(instance)) { return BootstrapDeleteResponse.badRequest("bootstrap server can not be deleted"); if (null != instances.remove(request.getPath().getObjectInstanceId())) { return BootstrapDeleteResponse.success(); } else {
private final void setTarget(Request coapRequest, LwM2mPath path) { EndpointContext context = EndpointContextUtil.extractContext(destination); coapRequest.setDestinationContext(context); // root path if (rootPath != null) { for (String rootPathPart : rootPath.split("/")) { if (!StringUtils.isEmpty(rootPathPart)) { coapRequest.getOptions().addUriPath(rootPathPart); } } } // objectId if (path.getObjectId() != null) { coapRequest.getOptions().addUriPath(Integer.toString(path.getObjectId())); } // objectInstanceId if (path.getObjectInstanceId() == null) { if (path.getResourceId() != null) { coapRequest.getOptions().addUriPath("0"); // default instanceId } } else { coapRequest.getOptions().addUriPath(Integer.toString(path.getObjectInstanceId())); } // resourceId if (path.getResourceId() != null) { coapRequest.getOptions().addUriPath(Integer.toString(path.getResourceId())); } }
LwM2mPath resourcePath = new LwM2mPath(nodePath.getObjectId(), nodePath.getObjectInstanceId(), nodePath.getResourceId()); Map<Integer, JsonArrayEntry> multiResource = multiResourceMap.get(resourcePath);
doCreate(new CreateRequest(path.getObjectId(), instanceNode)); } else { doWrite(identity, new WriteRequest(Mode.REPLACE, path.getObjectId(), path.getObjectInstanceId(), instanceNode.getResources().values())); LwM2mInstanceEnabler instanceEnabler = instances.get(path.getObjectInstanceId()); if (instanceEnabler == null) { doCreate(new CreateRequest(path.getObjectId(), instanceNode)); } else { doWrite(identity, new WriteRequest(Mode.REPLACE, request.getContentFormat(), path.getObjectId(), path.getObjectInstanceId(), instanceNode.getResources().values())); LwM2mInstanceEnabler instanceEnabler = instances.get(path.getObjectInstanceId()); if (instanceEnabler == null) { doCreate(new CreateRequest(path.getObjectId(), new LwM2mObjectInstance(path.getObjectInstanceId(), resource))); } else { instanceEnabler.write(path.getResourceId(), resource);
LwM2mInstanceEnabler instance = instances.get(path.getObjectInstanceId()); if (instance == null) return WriteResponse.notFound();
private final void setTarget(Request coapRequest, Client client, LwM2mPath path) { coapRequest.setDestination(client.getAddress()); coapRequest.setDestinationPort(client.getPort()); // root path if (client.getRootPath() != null) { for (String rootPath : client.getRootPath().split("/")) { if (!StringUtils.isEmpty(rootPath)) { coapRequest.getOptions().addUriPath(rootPath); } } } // objectId coapRequest.getOptions().addUriPath(Integer.toString(path.getObjectId())); // objectInstanceId if (path.getObjectInstanceId() == null) { if (path.getResourceId() != null) { coapRequest.getOptions().addUriPath("0"); // default instanceId } } else { coapRequest.getOptions().addUriPath(Integer.toString(path.getObjectInstanceId())); } // resourceId if (path.getResourceId() != null) { coapRequest.getOptions().addUriPath(Integer.toString(path.getResourceId())); } }
if (path.isObjectInstance() && tlvs[0].getIdentifier() != path.getObjectInstanceId()) { throw new CodecException("Id conflict between path [%s] and instance TLV [object instance id=%d]", path, tlvs[0].getIdentifier()); Integer instanceId = path.getObjectInstanceId(); if (instanceId == null) { if (tlvs[0].getIdentifier() != path.getObjectInstanceId()) { throw new CodecException("Id conflict between path [%s] and instance TLV [object instance id=%d]", path, tlvs[0].getIdentifier());