Browse Source

added hasData for firmware

pull/4380/head
YevhenBondarenko 5 years ago
parent
commit
8860eef1ba
  1. 2
      application/src/main/data/upgrade/3.2.2/schema_update.sql
  2. 2
      application/src/main/java/org/thingsboard/server/controller/BaseController.java
  3. 25
      application/src/main/java/org/thingsboard/server/controller/FirmwareController.java
  4. 2
      common/dao-api/src/main/java/org/thingsboard/server/dao/firmware/FirmwareService.java
  5. 1
      common/data/src/main/java/org/thingsboard/server/common/data/FirmwareInfo.java
  6. 2
      common/data/src/main/java/org/thingsboard/server/common/data/id/EntityIdFactory.java
  7. 7
      dao/src/main/java/org/thingsboard/server/dao/firmware/BaseFirmwareService.java
  8. 2
      dao/src/main/java/org/thingsboard/server/dao/firmware/FirmwareInfoDao.java
  9. 1
      dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java
  10. 1
      dao/src/main/java/org/thingsboard/server/dao/model/sql/FirmwareEntity.java
  11. 18
      dao/src/main/java/org/thingsboard/server/dao/model/sql/FirmwareInfoEntity.java
  12. 22
      dao/src/main/java/org/thingsboard/server/dao/sql/firmware/FirmwareInfoRepository.java
  13. 25
      dao/src/main/java/org/thingsboard/server/dao/sql/firmware/JpaFirmwareInfoDao.java
  14. 50
      dao/src/test/java/org/thingsboard/server/dao/service/BaseFirmwareServiceTest.java

2
application/src/main/data/upgrade/3.2.2/schema_update.sql

@ -37,7 +37,7 @@ CREATE TABLE IF NOT EXISTS firmware (
content_type varchar(255),
checksum_algorithm varchar(32),
checksum varchar(1020),
data binary,
data bytea,
additional_info varchar,
search_text varchar(255),
CONSTRAINT firmware_tenant_title_version_unq_key UNIQUE (tenant_id, title, version)

2
application/src/main/java/org/thingsboard/server/controller/BaseController.java

@ -717,7 +717,7 @@ public abstract class BaseController {
validateId(firmwareId, "Incorrect firmwareId " + firmwareId);
Firmware firmware = firmwareService.findFirmwareById(getCurrentUser().getTenantId(), firmwareId);
checkNotNull(firmware);
accessControlService.checkPermission(getCurrentUser(), Resource.TB_RESOURCE, operation, firmwareId, firmware);
accessControlService.checkPermission(getCurrentUser(), Resource.FIRMWARE, operation, firmwareId, firmware);
return firmware;
} catch (Exception e) {
throw handleException(e, false);

25
application/src/main/java/org/thingsboard/server/controller/FirmwareController.java

@ -98,7 +98,8 @@ public class FirmwareController extends BaseController {
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN')")
@RequestMapping(value = "/firmware", method = RequestMethod.POST)
@ResponseBody
public FirmwareInfo saveFirmwareInfo(@RequestParam("title") FirmwareInfo firmwareInfo) throws ThingsboardException {
public FirmwareInfo saveFirmwareInfo(@RequestBody FirmwareInfo firmwareInfo) throws ThingsboardException {
firmwareInfo.setTenantId(getTenantId());
checkEntity(firmwareInfo.getId(), firmwareInfo, Resource.FIRMWARE);
try {
return firmwareService.saveFirmwareInfo(firmwareInfo);
@ -112,7 +113,7 @@ public class FirmwareController extends BaseController {
@ResponseBody
public Firmware saveFirmwareData(@PathVariable(FIRMWARE_ID) String strFirmwareId,
@RequestParam String checksum,
@RequestParam String checksumAlgorithm,
@RequestParam(required = false) String checksumAlgorithm,
@RequestBody MultipartFile firmwareFile) throws ThingsboardException {
checkParameter(FIRMWARE_ID, strFirmwareId);
checkParameter("checksum", checksum);
@ -123,6 +124,7 @@ public class FirmwareController extends BaseController {
Firmware firmware = new Firmware(firmwareId);
firmware.setCreatedTime(info.getCreatedTime());
firmware.setTenantId(getTenantId());
firmware.setTitle(info.getTitle());
firmware.setVersion(info.getVersion());
firmware.setAdditionalInfo(info.getAdditionalInfo());
@ -138,7 +140,7 @@ public class FirmwareController extends BaseController {
}
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN')")
@RequestMapping(value = "/firmware", method = RequestMethod.GET)
@RequestMapping(value = "/firmwares", method = RequestMethod.GET)
@ResponseBody
public PageData<FirmwareInfo> getFirmwares(@RequestParam int pageSize,
@RequestParam int page,
@ -153,6 +155,23 @@ public class FirmwareController extends BaseController {
}
}
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN')")
@RequestMapping(value = "/firmwares/{hasData}", method = RequestMethod.GET)
@ResponseBody
public PageData<FirmwareInfo> getFirmwares(@PathVariable("hasData") boolean hasData,
@RequestParam int pageSize,
@RequestParam int page,
@RequestParam(required = false) String textSearch,
@RequestParam(required = false) String sortProperty,
@RequestParam(required = false) String sortOrder) throws ThingsboardException {
try {
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
return checkNotNull(firmwareService.findTenantFirmwaresByTenantIdAndHasData(getTenantId(), hasData, pageLink));
} catch (Exception e) {
throw handleException(e);
}
}
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN')")
@RequestMapping(value = "/firmware/{firmwareId}", method = RequestMethod.DELETE)
@ResponseBody

2
common/dao-api/src/main/java/org/thingsboard/server/dao/firmware/FirmwareService.java

@ -34,6 +34,8 @@ public interface FirmwareService {
PageData<FirmwareInfo> findTenantFirmwaresByTenantId(TenantId tenantId, PageLink pageLink);
PageData<FirmwareInfo> findTenantFirmwaresByTenantIdAndHasData(TenantId tenantId, boolean hasData, PageLink pageLink);
void deleteFirmware(TenantId tenantId, FirmwareId firmwareId);
void deleteFirmwaresByTenantId(TenantId tenantId);

1
common/data/src/main/java/org/thingsboard/server/common/data/FirmwareInfo.java

@ -31,6 +31,7 @@ public class FirmwareInfo extends SearchTextBasedWithAdditionalInfo<FirmwareId>
private TenantId tenantId;
private String title;
private String version;
private boolean hasData;
public FirmwareInfo() {
super();

2
common/data/src/main/java/org/thingsboard/server/common/data/id/EntityIdFactory.java

@ -70,6 +70,8 @@ public class EntityIdFactory {
return new ApiUsageStateId(uuid);
case TB_RESOURCE:
return new TbResourceId(uuid);
case FIRMWARE:
return new FirmwareId(uuid);
}
throw new IllegalArgumentException("EntityType " + type + " is not supported!");
}

7
dao/src/main/java/org/thingsboard/server/dao/firmware/BaseFirmwareService.java

@ -109,6 +109,13 @@ public class BaseFirmwareService implements FirmwareService {
return firmwareInfoDao.findFirmwareInfoByTenantId(tenantId, pageLink);
}
@Override
public PageData<FirmwareInfo> findTenantFirmwaresByTenantIdAndHasData(TenantId tenantId, boolean hasData, PageLink pageLink) {
log.trace("Executing findTenantFirmwaresByTenantIdAndHasData, tenantId [{}], hasData [{}] pageLink [{}]", tenantId, hasData, pageLink);
validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
validatePageLink(pageLink);
return firmwareInfoDao.findFirmwareInfoByTenantIdAndHasData(tenantId, hasData, pageLink); }
@Override
public void deleteFirmware(TenantId tenantId, FirmwareId firmwareId) {
log.trace("Executing deleteFirmware [{}]", firmwareId);

2
dao/src/main/java/org/thingsboard/server/dao/firmware/FirmwareInfoDao.java

@ -27,4 +27,6 @@ public interface FirmwareInfoDao extends Dao<FirmwareInfo> {
PageData<FirmwareInfo> findFirmwareInfoByTenantId(TenantId tenantId, PageLink pageLink);
PageData<FirmwareInfo> findFirmwareInfoByTenantIdAndHasData(TenantId tenantId, boolean hasData, PageLink pageLink);
}

1
dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java

@ -482,6 +482,7 @@ public class ModelConstants {
public static final String FIRMWARE_CHECKSUM_COLUMN = "checksum";
public static final String FIRMWARE_DATA_COLUMN = "data";
public static final String FIRMWARE_ADDITIONAL_INFO_COLUMN = ADDITIONAL_INFO_PROPERTY;
public static final String FIRMWARE_HAS_DATA_PROPERTY = "has_data";
/**

1
dao/src/main/java/org/thingsboard/server/dao/model/sql/FirmwareEntity.java

@ -124,6 +124,7 @@ public class FirmwareEntity extends BaseSqlEntity<Firmware> implements SearchTex
firmware.setChecksum(checksum);
if (data != null) {
firmware.setData(ByteBuffer.wrap(data));
firmware.setHasData(true);
}
firmware.setAdditionalInfo(additionalInfo);
return firmware;

18
dao/src/main/java/org/thingsboard/server/dao/model/sql/FirmwareInfoEntity.java

@ -20,6 +20,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.FirmwareInfo;
import org.thingsboard.server.common.data.id.FirmwareId;
import org.thingsboard.server.common.data.id.TenantId;
@ -31,8 +32,10 @@ import org.thingsboard.server.dao.util.mapping.JsonStringType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.UUID;
import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_HAS_DATA_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_TABLE_NAME;
import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_TENANT_ID_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_TITLE_COLUMN;
@ -62,6 +65,10 @@ public class FirmwareInfoEntity extends BaseSqlEntity<FirmwareInfo> implements S
@Column(name = SEARCH_TEXT_PROPERTY)
private String searchText;
// @Column(name = FIRMWARE_HAS_DATA_PROPERTY, insertable = false, updatable = false)
@Transient
private boolean hasData;
public FirmwareInfoEntity() {
super();
}
@ -75,6 +82,16 @@ public class FirmwareInfoEntity extends BaseSqlEntity<FirmwareInfo> implements S
this.additionalInfo = firmware.getAdditionalInfo();
}
public FirmwareInfoEntity(UUID id, long createdTime, UUID tenantId, String title, String version, Object additionalInfo, boolean hasData) {
this.id = id;
this.createdTime = createdTime;
this.tenantId = tenantId;
this.title = title;
this.version = version;
this.hasData = hasData;
this.additionalInfo = JacksonUtil.convertValue(additionalInfo, JsonNode.class);
}
@Override
public String getSearchTextSource() {
return title;
@ -93,6 +110,7 @@ public class FirmwareInfoEntity extends BaseSqlEntity<FirmwareInfo> implements S
firmware.setTitle(title);
firmware.setVersion(version);
firmware.setAdditionalInfo(additionalInfo);
firmware.setHasData(hasData);
return firmware;
}
}

22
dao/src/main/java/org/thingsboard/server/dao/sql/firmware/FirmwareInfoRepository.java

@ -25,10 +25,22 @@ import org.thingsboard.server.dao.model.sql.FirmwareInfoEntity;
import java.util.UUID;
public interface FirmwareInfoRepository extends CrudRepository<FirmwareInfoEntity, UUID> {
@Query("SELECT fi FROM FirmwareInfoEntity fi WHERE " +
"fi.tenantId = :tenantId " +
"AND LOWER(fi.searchText) LIKE LOWER(CONCAT(:searchText, '%'))")
@Query("SELECT new FirmwareInfoEntity(f.id, f.createdTime, f.tenantId, f.title, f.version, f.additionalInfo, f.data IS NOT NULL) FROM FirmwareEntity f WHERE " +
"f.tenantId = :tenantId " +
"AND LOWER(f.searchText) LIKE LOWER(CONCAT(:searchText, '%'))")
Page<FirmwareInfoEntity> findAllByTenantId(@Param("tenantId") UUID tenantId,
@Param("searchText") String searchText,
Pageable pageable);
@Param("searchText") String searchText,
Pageable pageable);
@Query("SELECT new FirmwareInfoEntity(f.id, f.createdTime, f.tenantId, f.title, f.version, f.additionalInfo, f.data IS NOT NULL) FROM FirmwareEntity f WHERE " +
"f.tenantId = :tenantId " +
"AND ((f.data IS NOT NULL AND :hasData = true) OR (f.data IS NULL AND :hasData = false ))" +
"AND LOWER(f.searchText) LIKE LOWER(CONCAT(:searchText, '%'))")
Page<FirmwareInfoEntity> findAllByTenantIdAndHasData(@Param("tenantId") UUID tenantId,
@Param("hasData") boolean hasData,
@Param("searchText") String searchText,
Pageable pageable);
@Query("SELECT new FirmwareInfoEntity(f.id, f.createdTime, f.tenantId, f.title, f.version, f.additionalInfo, f.data IS NOT NULL) FROM FirmwareEntity f WHERE f.id = :id")
FirmwareInfoEntity findFirmwareInfoById(@Param("id") UUID id);
}

25
dao/src/main/java/org/thingsboard/server/dao/sql/firmware/JpaFirmwareInfoDao.java

@ -48,6 +48,21 @@ public class JpaFirmwareInfoDao extends JpaAbstractSearchTextDao<FirmwareInfoEnt
return firmwareInfoRepository;
}
@Override
public FirmwareInfo findById(TenantId tenantId, UUID id) {
return DaoUtil.getData(firmwareInfoRepository.findFirmwareInfoById(id));
}
@Override
public FirmwareInfo save(TenantId tenantId, FirmwareInfo firmwareInfo) {
FirmwareInfo savedFirmware = super.save(tenantId, firmwareInfo);
if (firmwareInfo.getId() == null) {
return savedFirmware;
} else {
return findById(tenantId, savedFirmware.getId().getId());
}
}
@Override
public PageData<FirmwareInfo> findFirmwareInfoByTenantId(TenantId tenantId, PageLink pageLink) {
return DaoUtil.toPageData(firmwareInfoRepository
@ -56,4 +71,14 @@ public class JpaFirmwareInfoDao extends JpaAbstractSearchTextDao<FirmwareInfoEnt
Objects.toString(pageLink.getTextSearch(), ""),
DaoUtil.toPageable(pageLink)));
}
@Override
public PageData<FirmwareInfo> findFirmwareInfoByTenantIdAndHasData(TenantId tenantId, boolean hasData, PageLink pageLink) {
return DaoUtil.toPageData(firmwareInfoRepository
.findAllByTenantIdAndHasData(
tenantId.getId(),
hasData,
Objects.toString(pageLink.getTextSearch(), ""),
DaoUtil.toPageable(pageLink)));
}
}

50
dao/src/test/java/org/thingsboard/server/dao/service/BaseFirmwareServiceTest.java

@ -127,7 +127,9 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
Firmware foundFirmware = firmwareService.findFirmwareById(tenantId, firmware.getId());
firmware.setAdditionalInfo(JacksonUtil.newObjectNode());
Assert.assertEquals(foundFirmware.getTitle(), firmware.getTitle());
Assert.assertTrue(foundFirmware.isHasData());
firmwareService.deleteFirmware(tenantId, savedFirmwareInfo.getId());
}
@ -367,7 +369,10 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
firmware.setChecksumAlgorithm(CHECKSUM_ALGORITHM);
firmware.setChecksum(CHECKSUM);
firmware.setData(DATA);
firmwares.add(new FirmwareInfo(firmwareService.saveFirmware(firmware)));
FirmwareInfo info = new FirmwareInfo(firmwareService.saveFirmware(firmware));
info.setHasData(true);
firmwares.add(info);
}
List<FirmwareInfo> loadedFirmwares = new ArrayList<>();
@ -394,4 +399,47 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
Assert.assertTrue(pageData.getData().isEmpty());
}
@Test
public void testFindTenantFirmwaresByTenantIdAndHasData() {
List<FirmwareInfo> firmwares = new ArrayList<>();
for (int i = 0; i < 165; i++) {
Firmware firmware = new Firmware();
firmware.setTenantId(tenantId);
firmware.setTitle(TITLE);
firmware.setVersion(VERSION + i);
firmware.setFileName(FILE_NAME);
firmware.setContentType(CONTENT_TYPE);
firmware.setChecksumAlgorithm(CHECKSUM_ALGORITHM);
firmware.setChecksum(CHECKSUM);
firmware.setData(DATA);
FirmwareInfo info = new FirmwareInfo(firmwareService.saveFirmware(firmware));
info.setHasData(true);
firmwares.add(info);
}
List<FirmwareInfo> loadedFirmwares = new ArrayList<>();
PageLink pageLink = new PageLink(16);
PageData<FirmwareInfo> pageData;
do {
pageData = firmwareService.findTenantFirmwaresByTenantIdAndHasData(tenantId, true, pageLink);
loadedFirmwares.addAll(pageData.getData());
if (pageData.hasNext()) {
pageLink = pageLink.nextPageLink();
}
} while (pageData.hasNext());
Collections.sort(firmwares, idComparator);
Collections.sort(loadedFirmwares, idComparator);
Assert.assertEquals(firmwares, loadedFirmwares);
firmwareService.deleteFirmwaresByTenantId(tenantId);
pageLink = new PageLink(31);
pageData = firmwareService.findTenantFirmwaresByTenantId(tenantId, pageLink);
Assert.assertFalse(pageData.hasNext());
Assert.assertTrue(pageData.getData().isEmpty());
}
}

Loading…
Cancel
Save