Merge pull request #569 from nsacyber/v3_list-page-fix

[#534] List Elements page fix
This commit is contained in:
5B96790E3664F40075A67E6ADF737EDB15B4408DBC91A81228B31537B0CE3E26 2023-08-09 10:35:32 -04:00 committed by GitHub
commit afee8019af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 139 additions and 60 deletions

View File

@ -17,7 +17,6 @@ public interface ReferenceDigestValueRepository extends JpaRepository<ReferenceD
List<ReferenceDigestValue> findByManufacturer(String manufacturer); List<ReferenceDigestValue> findByManufacturer(String manufacturer);
@Query(value = "SELECT * FROM ReferenceDigestValue WHERE baseRimId = '?1' OR supportRimId = '?1'", nativeQuery = true) @Query(value = "SELECT * FROM ReferenceDigestValue WHERE baseRimId = '?1' OR supportRimId = '?1'", nativeQuery = true)
List<ReferenceDigestValue> getValuesByRimId(UUID associatedRimId); List<ReferenceDigestValue> getValuesByRimId(UUID associatedRimId);
@Query(value = "SELECT * FROM ReferenceDigestValue WHERE supportRimId = '?1'", nativeQuery = true)
List<ReferenceDigestValue> findBySupportRimId(UUID supportRimId); List<ReferenceDigestValue> findBySupportRimId(UUID supportRimId);
List<ReferenceDigestValue> findBySupportRimHash(String supportRimHash); List<ReferenceDigestValue> findBySupportRimHash(String supportRimHash);
} }

View File

@ -28,6 +28,10 @@ public abstract class DeviceAssociatedCertificate extends Certificate {
@JdbcTypeCode(java.sql.Types.VARCHAR) @JdbcTypeCode(java.sql.Types.VARCHAR)
@Column @Column
private UUID deviceId; private UUID deviceId;
@Getter
@Setter
@Column
private String deviceName;
/** /**
* Holds the name of the entity 'DEVICE_ID' field. * Holds the name of the entity 'DEVICE_ID' field.

View File

@ -31,6 +31,9 @@ import lombok.extern.log4j.Log4j2;
import org.bouncycastle.util.encoders.DecoderException; import org.bouncycastle.util.encoders.DecoderException;
import org.hibernate.Session; import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
@ -58,9 +61,6 @@ import java.util.UUID;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
//import java.security.cert.CertificateEncodingException;
//import java.security.cert.X509Certificate;
// note uploading base64 certs, old or new having decode issues check ACA channel // note uploading base64 certs, old or new having decode issues check ACA channel
/** /**
@ -220,19 +220,24 @@ public class CertificatePageController extends PageController<NoPageParams> {
} }
}; };
int currentPage = input.getStart() / input.getLength();
Pageable paging = PageRequest.of(currentPage, input.getLength(), Sort.by(orderColumnName));
/**
* Ok I think what I will do is make repositories for each certificate type to I can
* tell it what the type T is.
*/
FilteredRecordsList<Certificate> records = new FilteredRecordsList<>();
// special parsing for platform credential // special parsing for platform credential
// Add the EndorsementCredential for each PlatformCredential based on the // Add the EndorsementCredential for each PlatformCredential based on the
// serial number. (pc.HolderSerialNumber = ec.SerialNumber) // serial number. (pc.HolderSerialNumber = ec.SerialNumber)
if (certificateType.equals(PLATFORMCREDENTIAL)) { if (certificateType.equals(PLATFORMCREDENTIAL)) {
records = OrderedListQueryDataTableAdapter.getOrderedList( // records = OrderedListQueryDataTableAdapter.getOrderedList(
getCertificateClass(certificateType), platformCertificateRepository, // getCertificateClass(certificateType), platformCertificateRepository,
input, orderColumnName, criteriaModifier); // input, orderColumnName, criteriaModifier);
FilteredRecordsList<PlatformCredential> records = new FilteredRecordsList<>();
org.springframework.data.domain.Page<PlatformCredential> pagedResult = this.platformCertificateRepository.findAll(paging);
if (pagedResult.hasContent()) {
records.addAll(pagedResult.getContent());
}
records.setRecordsTotal(input.getLength());
records.setRecordsFiltered(platformCertificateRepository.count());
EndorsementCredential associatedEC; EndorsementCredential associatedEC;
if (!records.isEmpty()) { if (!records.isEmpty()) {
@ -251,18 +256,53 @@ public class CertificatePageController extends PageController<NoPageParams> {
pc.setEndorsementCredential(associatedEC); pc.setEndorsementCredential(associatedEC);
} }
} }
log.debug("Returning list of size: " + records.size());
return new DataTableResponse<>(records, input);
} else if (certificateType.equals(ENDORSEMENTCREDENTIAL)) { } else if (certificateType.equals(ENDORSEMENTCREDENTIAL)) {
records = OrderedListQueryDataTableAdapter.getOrderedList( // records = OrderedListQueryDataTableAdapter.getOrderedList(
getCertificateClass(certificateType), endorsementCredentialRepository, // getCertificateClass(certificateType), endorsementCredentialRepository,
input, orderColumnName, criteriaModifier); // input, orderColumnName, criteriaModifier);
FilteredRecordsList<EndorsementCredential> records = new FilteredRecordsList<>();
org.springframework.data.domain.Page<EndorsementCredential> pagedResult = this.endorsementCredentialRepository.findAll(paging);
if (pagedResult.hasContent()) {
records.addAll(pagedResult.getContent());
}
records.setRecordsTotal(input.getLength());
records.setRecordsFiltered(endorsementCredentialRepository.count());
log.debug("Returning list of size: " + records.size());
return new DataTableResponse<>(records, input);
} else if (certificateType.equals(TRUSTCHAIN)) { } else if (certificateType.equals(TRUSTCHAIN)) {
records = OrderedListQueryDataTableAdapter.getOrderedList( // records = OrderedListQueryDataTableAdapter.getOrderedList(
getCertificateClass(certificateType), caCredentialRepository, // getCertificateClass(certificateType), caCredentialRepository,
input, orderColumnName, criteriaModifier); // input, orderColumnName, criteriaModifier);
FilteredRecordsList<CertificateAuthorityCredential> records = new FilteredRecordsList<>();
org.springframework.data.domain.Page<CertificateAuthorityCredential> pagedResult = this.caCredentialRepository.findAll(paging);
if (pagedResult.hasContent()) {
records.addAll(pagedResult.getContent());
}
records.setRecordsTotal(input.getLength());
records.setRecordsFiltered(caCredentialRepository.count());
log.debug("Returning list of size: " + records.size());
return new DataTableResponse<>(records, input);
} else if (certificateType.equals(ISSUEDCERTIFICATES)) {
FilteredRecordsList<IssuedAttestationCertificate> records = new FilteredRecordsList<>();
org.springframework.data.domain.Page<IssuedAttestationCertificate> pagedResult = this.issuedCertificateRepository.findAll(paging);
if (pagedResult.hasContent()) {
records.addAll(pagedResult.getContent());
}
records.setRecordsTotal(input.getLength());
records.setRecordsFiltered(issuedCertificateRepository.count());
log.debug("Returning list of size: " + records.size());
return new DataTableResponse<>(records, input);
} }
log.debug("Returning list of size: " + records.size()); return new DataTableResponse<Certificate>(new FilteredRecordsList<>(), input);
return new DataTableResponse<>(records, input);
} }
/** /**

View File

@ -20,6 +20,9 @@ import hirs.attestationca.portal.page.PageController;
import hirs.attestationca.portal.page.params.NoPageParams; import hirs.attestationca.portal.page.params.NoPageParams;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
@ -80,16 +83,26 @@ public class DevicePageController extends PageController<NoPageParams> {
log.info("Ordering on column: " + orderColumnName); log.info("Ordering on column: " + orderColumnName);
// get all the devices // get all the devices
FilteredRecordsList<Device> deviceList = FilteredRecordsList<Device> deviceList = new FilteredRecordsList<>();
OrderedListQueryDataTableAdapter.getOrderedList( // OrderedListQueryDataTableAdapter.getOrderedList(
Device.class, // Device.class,
deviceRepository, // deviceRepository,
input, orderColumnName); // input, orderColumnName);
FilteredRecordsList<HashMap<String, Object>> record int currentPage = input.getStart() / input.getLength();
Pageable paging = PageRequest.of(currentPage, input.getLength(), Sort.by(orderColumnName));
org.springframework.data.domain.Page<Device> pagedResult = deviceRepository.findAll(paging);
if (pagedResult.hasContent()) {
deviceList.addAll(pagedResult.getContent());
}
deviceList.setRecordsTotal(input.getLength());
deviceList.setRecordsFiltered(deviceRepository.count());
FilteredRecordsList<HashMap<String, Object>> records
= retrieveDevicesAndAssociatedCertificates(deviceList); = retrieveDevicesAndAssociatedCertificates(deviceList);
return new DataTableResponse<>(record, input); return new DataTableResponse<>(records, input);
} }
/** /**

View File

@ -312,7 +312,7 @@ public class ReferenceManifestDetailsPageController extends PageController<Refer
} }
} }
} catch (NullPointerException e) { } catch (NullPointerException e) {
log.error("Unable to link signing certificate: " + e.getMessage()); log.warn("Unable to link signing certificate: " + e.getMessage());
} }
return data; return data;
} }

View File

@ -28,6 +28,9 @@ import jakarta.validation.Valid;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.hibernate.Session; import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
@ -132,11 +135,24 @@ public class ReferenceManifestPageController extends PageController<NoPageParams
criteriaQuery.select(rimRoot).distinct(true).where(cb.isNull(rimRoot.get(Certificate.ARCHIVE_FIELD))); criteriaQuery.select(rimRoot).distinct(true).where(cb.isNull(rimRoot.get(Certificate.ARCHIVE_FIELD)));
} }
}; };
FilteredRecordsList<ReferenceManifest> records
= OrderedListQueryDataTableAdapter.getOrderedList( log.info("Querying with the following dataTableInput: " + input.toString());
ReferenceManifest.class,
this.referenceManifestRepository, FilteredRecordsList<ReferenceManifest> records = new FilteredRecordsList<>();
input, orderColumnName, criteriaModifier); int currentPage = input.getStart() / input.getLength();
Pageable paging = PageRequest.of(currentPage, input.getLength(), Sort.by(orderColumnName));
org.springframework.data.domain.Page<ReferenceManifest> pagedResult = referenceManifestRepository.findAll(paging);
if (pagedResult.hasContent()) {
records.addAll(pagedResult.getContent());
}
records.setRecordsTotal(input.getLength());
records.setRecordsFiltered(referenceManifestRepository.count());
// FilteredRecordsList<ReferenceManifest> records
// = OrderedListQueryDataTableAdapter.getOrderedList(
// ReferenceManifest.class,
// this.referenceManifestRepository,
// input, orderColumnName, criteriaModifier);
log.debug("Returning list of size: " + records.size()); log.debug("Returning list of size: " + records.size());
return new DataTableResponse<>(records, input); return new DataTableResponse<>(records, input);

View File

@ -106,17 +106,19 @@ public class RimDatabasePageController extends PageController<NoPageParams> {
} }
}; };
log.info("Querying with the following datatableinput: " + input.toString()); log.info("Querying with the following dataTableInput: " + input.toString());
FilteredRecordsList<ReferenceDigestValue> referenceDigestValues = new FilteredRecordsList<>();
Pageable paging = PageRequest.of(input.getStart(), input.getLength(), Sort.by(orderColumnName));
FilteredRecordsList<ReferenceDigestValue> referenceDigestValues = new FilteredRecordsList<>();
int currentPage = input.getStart() / input.getLength();
Pageable paging = PageRequest.of(currentPage, input.getLength(), Sort.by(orderColumnName));
org.springframework.data.domain.Page<ReferenceDigestValue> pagedResult = referenceDigestValueRepository.findAll(paging); org.springframework.data.domain.Page<ReferenceDigestValue> pagedResult = referenceDigestValueRepository.findAll(paging);
if (pagedResult.hasContent()) { if (pagedResult.hasContent()) {
referenceDigestValues.addAll(pagedResult.getContent()); referenceDigestValues.addAll(pagedResult.getContent());
} }
referenceDigestValues.setRecordsTotal(referenceDigestValueRepository.count()); referenceDigestValues.setRecordsTotal(input.getLength());
referenceDigestValues.setRecordsFiltered(input.getLength()); referenceDigestValues.setRecordsFiltered(referenceDigestValueRepository.count());
// FilteredRecordsList<ReferenceDigestValue> referenceDigestValues = // FilteredRecordsList<ReferenceDigestValue> referenceDigestValues =
// OrderedListQueryDataTableAdapter.getOrderedList( // OrderedListQueryDataTableAdapter.getOrderedList(
@ -140,6 +142,7 @@ public class RimDatabasePageController extends PageController<NoPageParams> {
} }
} }
log.debug("Returning list of size: " + referenceDigestValues.size());
return new DataTableResponse<>(referenceDigestValues, input); return new DataTableResponse<>(referenceDigestValues, input);
} }
} }

View File

@ -29,6 +29,9 @@ import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.hibernate.Session; import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
@ -121,23 +124,13 @@ public class ValidationReportsPageController extends PageController<NoPageParams
final DataTableInput input) { final DataTableInput input) {
log.debug("Handling request for summary list: " + input); log.debug("Handling request for summary list: " + input);
// attempt to get the column property based on the order index. // attempt to get the column property based on the order index.
String orderColumnName = input.getOrderColumnName(); String orderColumnName = input.getOrderColumnName();
log.debug("Ordering on column: " + orderColumnName); log.debug("Ordering on column: " + orderColumnName);
// define an alias so the composite object, device, can be used by the // define an alias so the composite object, device, can be used by the
// datatables / query. This is necessary so the device.name property can // datatables / query. This is necessary so the device.name property can
// be used. // be used.
// CriteriaModifier criteriaModifier = new CriteriaModifier() {
// @Override
// public void modify(final Criteria criteria) {
// criteria.add(RowMutationOperations.Restrictions.isNull(Certificate.ARCHIVE_FIELD));
// criteria.createAlias("device", "device");
// }
// };
CriteriaModifier criteriaModifier = new CriteriaModifier() { CriteriaModifier criteriaModifier = new CriteriaModifier() {
@Override @Override
public void modify(final CriteriaQuery criteriaQuery) { public void modify(final CriteriaQuery criteriaQuery) {
@ -149,11 +142,22 @@ public class ValidationReportsPageController extends PageController<NoPageParams
} }
}; };
FilteredRecordsList<SupplyChainValidationSummary> records = FilteredRecordsList<SupplyChainValidationSummary> records = new FilteredRecordsList<>();
OrderedListQueryDataTableAdapter.getOrderedList( int currentPage = input.getStart() / input.getLength();
SupplyChainValidationSummary.class, Pageable paging = PageRequest.of(currentPage, input.getLength(), Sort.by(orderColumnName));
supplyChainValidatorSummaryRepository, input, orderColumnName, org.springframework.data.domain.Page<SupplyChainValidationSummary> pagedResult = supplyChainValidatorSummaryRepository.findAll(paging);
criteriaModifier);
if (pagedResult.hasContent()) {
records.addAll(pagedResult.getContent());
}
records.setRecordsTotal(input.getLength());
records.setRecordsFiltered(supplyChainValidatorSummaryRepository.count());
// FilteredRecordsList<SupplyChainValidationSummary> records =
// OrderedListQueryDataTableAdapter.getOrderedList(
// SupplyChainValidationSummary.class,
// supplyChainValidatorSummaryRepository, input, orderColumnName,
// criteriaModifier);
return new DataTableResponse<>(records, input); return new DataTableResponse<>(records, input);
} }

View File

@ -49,14 +49,14 @@
var url = pagePath +'/list'; var url = pagePath +'/list';
var columns = [ var columns = [
{ {
data: 'device.name', data: 'deviceName',
render: function (data, type, full, meta) { render: function (data, type, full, meta) {
// if there's a device, display its name, otherwise // if there's a device, display its name, otherwise
// display nothing // display nothing
if (full.device) { if (full.device) {
// TODO render a link to a device details page, // TODO render a link to a device details page,
// passing the device.id // passing the device.id
return full.device.name; return full.deviceName;
} }
return ''; return '';
} }

View File

@ -44,14 +44,14 @@
var url = pagePath + '/list'; var url = pagePath + '/list';
var columns = [ var columns = [
{ {
data: 'device.name', data: 'deviceName',
render: function (data, type, full, meta) { render: function (data, type, full, meta) {
// if there's a device, display its name, otherwise // if there's a device, display its name, otherwise
// display nothing // display nothing
if (full.device) { if (full.device) {
// TODO render a link to a device details page, // TODO render a link to a device details page,
// passing the device.id // passing the device.id
return full.device.name; return full.deviceName;
} }
return ''; return '';
} }

View File

@ -54,14 +54,14 @@
var url = pagePath +'/list'; var url = pagePath +'/list';
var columns = [ var columns = [
{ {
data: 'device.name', data: 'deviceName',
render: function (data, type, full, meta) { render: function (data, type, full, meta) {
// if there's a device, display its name, otherwise // if there's a device, display its name, otherwise
// display nothing // display nothing
if (full.device) { if (full.device) {
// TODO render a link to a device details page, // TODO render a link to a device details page,
// passing the device.id // passing the device.id
return full.device.name; return full.deviceName;
} }
return ''; return '';
} }

View File

@ -27,7 +27,7 @@ public final class BouncyCastleUtils {
*/ */
public static boolean x500NameCompare(final String nameValue1, final String nameValue2) { public static boolean x500NameCompare(final String nameValue1, final String nameValue2) {
if (nameValue1 == null || nameValue2 == null) { if (nameValue1 == null || nameValue2 == null) {
log.error("Provided DN string is null."); log.warn("Provided DN string is null.");
return true; return true;
} }