Overdue filter: Add simple filter for overdue in UI

Signed-off-by: Marcel Mager (INST-IOT/ESB) <Marcel.Mager@bosch-si.com>
This commit is contained in:
Marcel Mager (INST-IOT/ESB)
2016-09-07 11:29:01 +02:00
parent 1d69026184
commit 2433742abf
23 changed files with 1328 additions and 183 deletions

View File

@@ -279,29 +279,33 @@ public class JpaTargetManagement implements TargetManagement {
@Override
public Slice<Target> findTargetByFilters(final Pageable pageable, final Collection<TargetUpdateStatus> status,
final String searchText, final Long installedOrAssignedDistributionSetId,
final Boolean overdueState, final String searchText, final Long installedOrAssignedDistributionSetId,
final Boolean selectTargetWithNoTag, final String... tagNames) {
final List<Specification<JpaTarget>> specList = buildSpecificationList(status, searchText,
final List<Specification<JpaTarget>> specList = buildSpecificationList(status, overdueState, searchText,
installedOrAssignedDistributionSetId, selectTargetWithNoTag, true, tagNames);
return findByCriteriaAPI(pageable, specList);
}
@Override
public Long countTargetByFilters(final Collection<TargetUpdateStatus> status, final String searchText,
final Long installedOrAssignedDistributionSetId, final Boolean selectTargetWithNoTag,
final String... tagNames) {
final List<Specification<JpaTarget>> specList = buildSpecificationList(status, searchText,
public Long countTargetByFilters(final Collection<TargetUpdateStatus> status, final Boolean overdueState,
final String searchText, final Long installedOrAssignedDistributionSetId,
final Boolean selectTargetWithNoTag, final String... tagNames) {
final List<Specification<JpaTarget>> specList = buildSpecificationList(status, overdueState, searchText,
installedOrAssignedDistributionSetId, selectTargetWithNoTag, true, tagNames);
return countByCriteriaAPI(specList);
}
private static List<Specification<JpaTarget>> buildSpecificationList(final Collection<TargetUpdateStatus> status,
final String searchText, final Long installedOrAssignedDistributionSetId,
final Boolean overdueState, final String searchText, final Long installedOrAssignedDistributionSetId,
final Boolean selectTargetWithNoTag, final boolean fetch, final String... tagNames) {
final List<Specification<JpaTarget>> specList = new ArrayList<>();
if (status != null && !status.isEmpty()) {
specList.add(TargetSpecifications.hasTargetUpdateStatus(status, fetch));
}
if (overdueState != null) {
specList.add(
TargetSpecifications.isOverdue(new VirtualPropertyMakroResolver().calculateOverdueTimestamp()));
}
if (installedOrAssignedDistributionSetId != null) {
specList.add(
TargetSpecifications.hasInstalledOrAssignedDistributionSet(installedOrAssignedDistributionSetId));
@@ -425,7 +429,8 @@ public class JpaTargetManagement implements TargetManagement {
@Override
public Slice<Target> findTargetsAllOrderByLinkedDistributionSet(final Pageable pageable,
final Long orderByDistributionId, final Long filterByDistributionId,
final Collection<TargetUpdateStatus> filterByStatus, final String filterBySearchText,
final Collection<TargetUpdateStatus> filterByStatus, final Boolean overdueState,
final String filterBySearchText,
final Boolean selectTargetWithNoTag, final String... filterByTagNames) {
final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
final CriteriaQuery<JpaTarget> query = cb.createQuery(JpaTarget.class);
@@ -449,7 +454,7 @@ public class JpaTargetManagement implements TargetManagement {
// build the specifications and then to predicates necessary by the
// given filters
final Predicate[] specificationsForMultiSelect = specificationsToPredicate(
buildSpecificationList(filterByStatus, filterBySearchText, filterByDistributionId,
buildSpecificationList(filterByStatus, overdueState, filterBySearchText, filterByDistributionId,
selectTargetWithNoTag, true, filterByTagNames),
targetRoot, query, cb);
@@ -506,7 +511,8 @@ public class JpaTargetManagement implements TargetManagement {
@Override
public List<TargetIdName> findAllTargetIdsByFilters(final Pageable pageRequest,
final Collection<TargetUpdateStatus> filterByStatus, final String filterBySearchText,
final Collection<TargetUpdateStatus> filterByStatus, final Boolean overdueState,
final String filterBySearchText,
final Long installedOrAssignedDistributionSetId, final Boolean selectTargetWithNoTag,
final String... filterByTagNames) {
final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
@@ -523,7 +529,8 @@ public class JpaTargetManagement implements TargetManagement {
targetRoot.get(JpaTarget_.controllerId), targetRoot.get(JpaTarget_.name), targetRoot.get(sortProperty));
final Predicate[] specificationsForMultiSelect = specificationsToPredicate(
buildSpecificationList(filterByStatus, filterBySearchText, installedOrAssignedDistributionSetId,
buildSpecificationList(filterByStatus, overdueState, filterBySearchText,
installedOrAssignedDistributionSetId,
selectTargetWithNoTag, false, filterByTagNames),
targetRoot, multiselect, cb);

View File

@@ -48,13 +48,18 @@ public class VirtualPropertyMakroResolver extends StrLookup<String> {
if ("now_ts".equals(rhs.toLowerCase())) {
resolved = String.valueOf(Instant.now().toEpochMilli());
} else if ("overdue_ts".equals(rhs.toLowerCase())) {
resolved = String.valueOf(Instant.now().toEpochMilli() //
- getDurationForKey(TenantConfigurationKey.POLLING_TIME_INTERVAL).toMillis() //
- getDurationForKey(TenantConfigurationKey.POLLING_OVERDUE_TIME_INTERVAL).toMillis());
resolved = String.valueOf(calculateOverdueTimestamp());
}
return resolved;
}
public long calculateOverdueTimestamp() {
long overdueTs = Instant.now().toEpochMilli() //
- getDurationForKey(TenantConfigurationKey.POLLING_TIME_INTERVAL).toMillis() //
- getDurationForKey(TenantConfigurationKey.POLLING_OVERDUE_TIME_INTERVAL).toMillis();
return overdueTs;
}
private Duration getDurationForKey(TenantConfigurationKey key) {
return DurationHelper.formattedStringToDuration(getRawStringForKey(key));
}

View File

@@ -86,7 +86,7 @@ public final class TargetSpecifications {
/**
* {@link Specification} for retrieving {@link Target}s by "equal to given
* {@link TargetUpdateStatus}".
*
*
* @param updateStatus
* to be filtered on
* @param fetch
@@ -110,10 +110,34 @@ public final class TargetSpecifications {
};
}
/**
* {@link Specification} for retrieving {@link Target}s that are overdue. A
* target is overdue if it did not respond during the configured
* intervals:<br>
* <em>poll_itvl + overdue_itvl</em>
*
* @param overdueTimestamp
* the calculated timestamp to compare with the last respond of a
* target (lastTargetQuery).<br>
* The <code>overdueTimestamp</code> has to be calculated with
* the following expression:<br>
* <em>overdueTimestamp = nowTimestamp - poll_itvl -
* overdue_itvl</em>
*
* @return the {@link Target} {@link Specification}
*/
public static Specification<JpaTarget> isOverdue(final long overdueTimestamp) {
return (targetRoot, query, cb) -> {
final Join<JpaTarget, JpaTargetInfo> targetInfoJoin = targetRoot.join(JpaTarget_.targetInfo);
return cb.lessThanOrEqualTo(
targetInfoJoin.get(JpaTargetInfo_.lastTargetQuery), overdueTimestamp);
};
}
/**
* {@link Specification} for retrieving {@link Target}s by
* "like controllerId or like description or like ip address".
*
*
* @param searchText
* to be filtered on
* @return the {@link Target} {@link Specification}
@@ -129,7 +153,7 @@ public final class TargetSpecifications {
/**
* {@link Specification} for retrieving {@link Target}s by
* "like controllerId".
*
*
* @param distributionId
* to be filtered on
* @return the {@link Target} {@link Specification}
@@ -166,7 +190,7 @@ public final class TargetSpecifications {
/**
* {@link Specification} for retrieving {@link Target}s by
* "has no tag names"or "has at least on of the given tag names".
*
*
* @param tagNames
* to be filtered on
* @param selectTargetWithNoTag
@@ -199,7 +223,7 @@ public final class TargetSpecifications {
/**
* {@link Specification} for retrieving {@link Target}s by assigned
* distribution set.
*
*
* @param distributionSetId
* the ID of the distribution set which must be assigned
* @return the {@link Target} {@link Specification}
@@ -213,7 +237,7 @@ public final class TargetSpecifications {
/**
* {@link Specification} for retrieving {@link Target}s by assigned
* distribution set.
*
*
* @param distributionSetId
* the ID of the distribution set which must be assigned
* @return the {@link Target} {@link Specification}