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
*
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* 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.resource.TbResourceService;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
@ -600,17 +599,16 @@ public class DefaultTransportApiService implements TransportApiService {
builder.setType(otaPackageInfo.getType().name());
builder.setTitle(otaPackageInfo.getTitle());
builder.setVersion(otaPackageInfo.getVersion());
File file = otaPackageService.getOtaDataFile(otaPackageInfo.getTenantId(), otaPackageId);
builder.setFileName(file.getAbsolutePath());
builder.setFileName(otaPackageInfo.getFileName());
builder.setContentType(otaPackageInfo.getContentType());
// if (!otaPackageDataCache.has(otaPackageId.toString())) {
// OtaPackage otaPackage = otaPackageService.findOtaPackageById(tenantId, otaPackageId);
// try {
// otaPackageDataCache.put(otaPackageId.toString(), otaPackage.getData().readAllBytes());
// } catch (IOException e) {
// log.error("Failed to cache ota package with id {}",otaPackage.getId(), e);
// }
// }
if (!otaPackageDataCache.has(otaPackageId.toString())) {
OtaPackage otaPackage = otaPackageService.findOtaPackageById(tenantId, otaPackageId);
try {
otaPackageDataCache.put(otaPackageId.toString(), otaPackage.getData().readAllBytes());
} catch (IOException 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;
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.OtaPackageInfo;
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 java.io.File;
import java.io.InputStream;
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.ApiParam;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
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.HttpStatus;
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 javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileInputStream;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
@ -510,25 +505,15 @@ public class DeviceApiController implements TbTransportService {
}
@Override
@SneakyThrows
public void onSuccess(TransportProtos.GetOtaPackageResponseMsg otaPackageResponseMsg) {
if (!TransportProtos.ResponseStatus.SUCCESS.equals(otaPackageResponseMsg.getResponseStatus())) {
responseWriter.setResult(new ResponseEntity<>(HttpStatus.NOT_FOUND));
} else if (title.equals(otaPackageResponseMsg.getTitle()) && version.equals(otaPackageResponseMsg.getVersion())) {
// String otaPackageId = new UUID(otaPackageResponseMsg.getOtaPackageIdMSB(), otaPackageResponseMsg.getOtaPackageIdLSB()).toString();
File file = new File(otaPackageResponseMsg.getFileName());
Resource resource = null;
if(chuckSize!=0){
FileInputStream fileInputStream = new FileInputStream(file);
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()))
String otaPackageId = new UUID(otaPackageResponseMsg.getOtaPackageIdMSB(), otaPackageResponseMsg.getOtaPackageIdLSB()).toString();
ByteArrayResource resource = new ByteArrayResource(transportContext.getOtaPackageDataCache().get(otaPackageId, chuckSize, chuck));
ResponseEntity<ByteArrayResource> response = ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + otaPackageResponseMsg.getFileName())
.header("x-filename", otaPackageResponseMsg.getFileName())
.contentLength(resource.contentLength())
.contentType(parseMediaType(otaPackageResponseMsg.getContentType()))
.body(resource);
@ -538,10 +523,6 @@ public class DeviceApiController implements TbTransportService {
}
}
private String getFileName(String fileName) {
return new File(fileName).getName();
}
@Override
public void onError(Throwable e) {
log.warn("Failed to process request", e);
@ -625,7 +606,7 @@ public class DeviceApiController implements TbTransportService {
@Override
public void onDeviceDeleted(DeviceId deviceId) {
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));
}

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

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

Loading…
Cancel
Save