Browse Source

conflicts solved, multipart file added

pull/7062/head
AnastasiiaKomar 4 years ago
parent
commit
4d2789b8a1
  1. 28
      application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java
  2. 2
      common/dao-api/src/main/java/org/thingsboard/server/dao/ota/OtaPackageService.java
  3. 31
      common/transport/http/src/main/java/org/thingsboard/server/transport/http/DeviceApiController.java
  4. 18
      dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java

28
application/src/main/java/org/thingsboard/server/service/transport/DefaultTransportApiService.java

@ -1,12 +1,12 @@
/** /**
* Copyright © 2016-2022 The Thingsboard Authors * Copyright © 2016-2022 The Thingsboard Authors
* * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* * <p>
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* * <p>
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ -101,7 +101,6 @@ import org.thingsboard.server.service.executors.DbCallbackExecutorService;
import org.thingsboard.server.service.profile.TbDeviceProfileCache; import org.thingsboard.server.service.profile.TbDeviceProfileCache;
import org.thingsboard.server.service.resource.TbResourceService; import org.thingsboard.server.service.resource.TbResourceService;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@ -600,17 +599,16 @@ public class DefaultTransportApiService implements TransportApiService {
builder.setType(otaPackageInfo.getType().name()); builder.setType(otaPackageInfo.getType().name());
builder.setTitle(otaPackageInfo.getTitle()); builder.setTitle(otaPackageInfo.getTitle());
builder.setVersion(otaPackageInfo.getVersion()); builder.setVersion(otaPackageInfo.getVersion());
File file = otaPackageService.getOtaDataFile(otaPackageInfo.getTenantId(), otaPackageId); builder.setFileName(otaPackageInfo.getFileName());
builder.setFileName(file.getAbsolutePath());
builder.setContentType(otaPackageInfo.getContentType()); builder.setContentType(otaPackageInfo.getContentType());
// if (!otaPackageDataCache.has(otaPackageId.toString())) { if (!otaPackageDataCache.has(otaPackageId.toString())) {
// OtaPackage otaPackage = otaPackageService.findOtaPackageById(tenantId, otaPackageId); OtaPackage otaPackage = otaPackageService.findOtaPackageById(tenantId, otaPackageId);
// try { try {
// otaPackageDataCache.put(otaPackageId.toString(), otaPackage.getData().readAllBytes()); otaPackageDataCache.put(otaPackageId.toString(), otaPackage.getData().readAllBytes());
// } catch (IOException e) { } catch (IOException e) {
// log.error("Failed to cache ota package with id {}",otaPackage.getId(), e); log.error("Failed to cache ota package with id {}",otaPackage.getId(), e);
// } }
// } }
} }
} }

2
common/dao-api/src/main/java/org/thingsboard/server/dao/ota/OtaPackageService.java

@ -16,7 +16,6 @@
package org.thingsboard.server.dao.ota; package org.thingsboard.server.dao.ota;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.thingsboard.server.common.data.OtaPackage; import org.thingsboard.server.common.data.OtaPackage;
import org.thingsboard.server.common.data.OtaPackageInfo; import org.thingsboard.server.common.data.OtaPackageInfo;
import org.thingsboard.server.common.data.id.DeviceProfileId; import org.thingsboard.server.common.data.id.DeviceProfileId;
@ -27,7 +26,6 @@ import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.page.PageLink;
import java.io.File; import java.io.File;
import java.io.InputStream;
public interface OtaPackageService { public interface OtaPackageService {

31
common/transport/http/src/main/java/org/thingsboard/server/transport/http/DeviceApiController.java

@ -20,13 +20,10 @@ import com.google.gson.JsonParser;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@ -68,8 +65,6 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToServerRpcResponseM
import org.thingsboard.server.gen.transport.TransportProtos.ValidateDeviceTokenRequestMsg; import org.thingsboard.server.gen.transport.TransportProtos.ValidateDeviceTokenRequestMsg;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileInputStream;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@ -510,25 +505,15 @@ public class DeviceApiController implements TbTransportService {
} }
@Override @Override
@SneakyThrows
public void onSuccess(TransportProtos.GetOtaPackageResponseMsg otaPackageResponseMsg) { public void onSuccess(TransportProtos.GetOtaPackageResponseMsg otaPackageResponseMsg) {
if (!TransportProtos.ResponseStatus.SUCCESS.equals(otaPackageResponseMsg.getResponseStatus())) { if (!TransportProtos.ResponseStatus.SUCCESS.equals(otaPackageResponseMsg.getResponseStatus())) {
responseWriter.setResult(new ResponseEntity<>(HttpStatus.NOT_FOUND)); responseWriter.setResult(new ResponseEntity<>(HttpStatus.NOT_FOUND));
} else if (title.equals(otaPackageResponseMsg.getTitle()) && version.equals(otaPackageResponseMsg.getVersion())) { } else if (title.equals(otaPackageResponseMsg.getTitle()) && version.equals(otaPackageResponseMsg.getVersion())) {
// String otaPackageId = new UUID(otaPackageResponseMsg.getOtaPackageIdMSB(), otaPackageResponseMsg.getOtaPackageIdLSB()).toString(); String otaPackageId = new UUID(otaPackageResponseMsg.getOtaPackageIdMSB(), otaPackageResponseMsg.getOtaPackageIdLSB()).toString();
File file = new File(otaPackageResponseMsg.getFileName()); ByteArrayResource resource = new ByteArrayResource(transportContext.getOtaPackageDataCache().get(otaPackageId, chuckSize, chuck));
Resource resource = null; ResponseEntity<ByteArrayResource> response = ResponseEntity.ok()
if(chuckSize!=0){ .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + otaPackageResponseMsg.getFileName())
FileInputStream fileInputStream = new FileInputStream(file); .header("x-filename", otaPackageResponseMsg.getFileName())
byte[] bytes = new byte[chuckSize];
fileInputStream.read(bytes, chuck, chuckSize);
resource = new ByteArrayResource(bytes);
} else {
resource= new FileSystemResource(file);
}
ResponseEntity<Resource> response = ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + getFileName(otaPackageResponseMsg.getFileName()))
.header("x-filename", getFileName(otaPackageResponseMsg.getFileName()))
.contentLength(resource.contentLength()) .contentLength(resource.contentLength())
.contentType(parseMediaType(otaPackageResponseMsg.getContentType())) .contentType(parseMediaType(otaPackageResponseMsg.getContentType()))
.body(resource); .body(resource);
@ -538,10 +523,6 @@ public class DeviceApiController implements TbTransportService {
} }
} }
private String getFileName(String fileName) {
return new File(fileName).getName();
}
@Override @Override
public void onError(Throwable e) { public void onError(Throwable e) {
log.warn("Failed to process request", e); log.warn("Failed to process request", e);
@ -625,7 +606,7 @@ public class DeviceApiController implements TbTransportService {
@Override @Override
public void onDeviceDeleted(DeviceId deviceId) { public void onDeviceDeleted(DeviceId deviceId) {
UUID sessionId = new UUID(sessionInfo.getSessionIdMSB(), sessionInfo.getSessionIdLSB()); UUID sessionId = new UUID(sessionInfo.getSessionIdMSB(), sessionInfo.getSessionIdLSB());
log.trace("[{}] Received device deleted notification for device with id: {}",sessionId, deviceId); log.trace("[{}] Received device deleted notification for device with id: {}", sessionId, deviceId);
responseWriter.setResult(new ResponseEntity<>("Device was deleted!", HttpStatus.FORBIDDEN)); responseWriter.setResult(new ResponseEntity<>("Device was deleted!", HttpStatus.FORBIDDEN));
} }

18
dao/src/main/java/org/thingsboard/server/dao/ota/BaseOtaPackageService.java

@ -1,12 +1,12 @@
/** /**
* Copyright © 2016-2022 The Thingsboard Authors * Copyright © 2016-2022 The Thingsboard Authors
* * <p>
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* * <p>
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* * <p>
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ -38,9 +38,9 @@ import org.thingsboard.server.dao.service.DataValidator;
import org.thingsboard.server.dao.service.PaginatedRemover; import org.thingsboard.server.dao.service.PaginatedRemover;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import java.io.*; import java.io.BufferedInputStream;
import java.util.Collections; import java.io.File;
import java.util.List; import java.io.InputStream;
import java.util.Optional; import java.util.Optional;
import static org.thingsboard.server.dao.service.Validator.validateId; import static org.thingsboard.server.dao.service.Validator.validateId;
@ -70,7 +70,7 @@ public class BaseOtaPackageService extends AbstractCachedEntityService<OtaPackag
@Override @Override
public OtaPackageInfo saveOtaPackageInfo(OtaPackageInfo otaPackageInfo, boolean isUrl) { public OtaPackageInfo saveOtaPackageInfo(OtaPackageInfo otaPackageInfo, boolean isUrl) {
log.trace("Executing saveOtaPackageInfo [{}]", otaPackageInfo); log.trace("Executing saveOtaPackageInfo [{}]", otaPackageInfo);
if(isUrl && (StringUtils.isEmpty(otaPackageInfo.getUrl()) || otaPackageInfo.getUrl().trim().length() == 0)) { if (isUrl && (StringUtils.isEmpty(otaPackageInfo.getUrl()) || otaPackageInfo.getUrl().trim().length() == 0)) {
throw new DataValidationException("Ota package URL should be specified!"); throw new DataValidationException("Ota package URL should be specified!");
} }
otaPackageInfoValidator.validate(otaPackageInfo, OtaPackageInfo::getTenantId); otaPackageInfoValidator.validate(otaPackageInfo, OtaPackageInfo::getTenantId);
@ -100,7 +100,7 @@ public class BaseOtaPackageService extends AbstractCachedEntityService<OtaPackag
try { try {
otaPackageValidator.validate(otaPackage, OtaPackageInfo::getTenantId); otaPackageValidator.validate(otaPackage, OtaPackageInfo::getTenantId);
Optional<InputStream> optionalStream = file.getInputStream(); Optional<InputStream> optionalStream = file.getInputStream();
if(optionalStream.isEmpty()){ if (optionalStream.isEmpty()) {
log.error("Failed to get input stream from file {}", file.getFileName()); log.error("Failed to get input stream from file {}", file.getFileName());
throw new RuntimeException("Failed to save ota package file"); throw new RuntimeException("Failed to save ota package file");
} }

Loading…
Cancel
Save