commit
dd64b0648f
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -22,6 +22,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
|
|||
* An {@link UpdateEvent} that includes progress information.
|
||||
*
|
||||
* @author Phillip Webb
|
||||
* @author Wolfgang Kronberg
|
||||
* @since 2.3.0
|
||||
*/
|
||||
public abstract class ProgressUpdateEvent extends UpdateEvent {
|
||||
|
@ -67,12 +68,12 @@ public abstract class ProgressUpdateEvent extends UpdateEvent {
|
|||
*/
|
||||
public static class ProgressDetail {
|
||||
|
||||
private final Integer current;
|
||||
private final Long current;
|
||||
|
||||
private final Integer total;
|
||||
private final Long total;
|
||||
|
||||
@JsonCreator
|
||||
public ProgressDetail(Integer current, Integer total) {
|
||||
public ProgressDetail(Long current, Long total) {
|
||||
this.current = current;
|
||||
this.total = total;
|
||||
}
|
||||
|
@ -80,19 +81,42 @@ public abstract class ProgressUpdateEvent extends UpdateEvent {
|
|||
/**
|
||||
* Return the current progress value.
|
||||
* @return the current progress
|
||||
* @deprecated since 3.3.7 for removal in 3.5.0 in favor of
|
||||
* {@link #asPercentage()}
|
||||
*/
|
||||
@Deprecated(since = "3.3.7", forRemoval = true)
|
||||
public int getCurrent() {
|
||||
return this.current;
|
||||
return (int) Long.min(this.current, Integer.MAX_VALUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the total progress possible value.
|
||||
* @return the total progress possible
|
||||
* @deprecated since 3.3.7 for removal in 3.5.0 in favor of
|
||||
* {@link #asPercentage()}
|
||||
*/
|
||||
@Deprecated(since = "3.3.7", forRemoval = true)
|
||||
public int getTotal() {
|
||||
return this.total;
|
||||
return (int) Long.min(this.total, Integer.MAX_VALUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the progress as a percentage.
|
||||
* @return the progress percentage
|
||||
* @since 3.3.7
|
||||
*/
|
||||
public int asPercentage() {
|
||||
int percentage = (int) ((100.0 / this.total) * this.current);
|
||||
return (percentage < 0) ? 0 : Math.min(percentage, 100);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return if the progress detail is considered empty.
|
||||
* @param progressDetail the progress detail to check
|
||||
* @return if the progress detail is empty
|
||||
* @deprecated since 3.3.7 for removal in 3.5.0
|
||||
*/
|
||||
@Deprecated(since = "3.3.7", forRemoval = true)
|
||||
public static boolean isEmpty(ProgressDetail progressDetail) {
|
||||
return progressDetail == null || progressDetail.current == null || progressDetail.total == null;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -89,10 +89,7 @@ public abstract class TotalProgressListener<E extends ImageProgressUpdateEvent>
|
|||
}
|
||||
|
||||
private static int withinPercentageBounds(int value) {
|
||||
if (value < 0) {
|
||||
return 0;
|
||||
}
|
||||
return Math.min(value, 100);
|
||||
return (value < 0) ? 0 : Math.min(value, 100);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -115,8 +112,7 @@ public abstract class TotalProgressListener<E extends ImageProgressUpdateEvent>
|
|||
}
|
||||
|
||||
private int updateProgress(int current, ProgressDetail detail) {
|
||||
int result = withinPercentageBounds((int) ((100.0 / detail.getTotal()) * detail.getCurrent()));
|
||||
return Math.max(result, current);
|
||||
return Math.max(detail.asPercentage(), current);
|
||||
}
|
||||
|
||||
void finish() {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2023 the original author or authors.
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -28,6 +28,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
* @param <E> The event type
|
||||
* @author Phillip Webb
|
||||
* @author Scott Frederick
|
||||
* @author Wolfgang Kronberg
|
||||
*/
|
||||
abstract class ProgressUpdateEventTests<E extends ProgressUpdateEvent> {
|
||||
|
||||
|
@ -38,10 +39,21 @@ abstract class ProgressUpdateEventTests<E extends ProgressUpdateEvent> {
|
|||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("removal")
|
||||
void getProgressDetailsReturnsProgressDetails() {
|
||||
ProgressUpdateEvent event = createEvent();
|
||||
assertThat(event.getProgressDetail().getCurrent()).isOne();
|
||||
assertThat(event.getProgressDetail().getTotal()).isEqualTo(2);
|
||||
assertThat(event.getProgressDetail().asPercentage()).isEqualTo(50);
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("removal")
|
||||
void getProgressDetailsReturnsProgressDetailsForLongNumbers() {
|
||||
ProgressUpdateEvent event = createEvent("status", new ProgressDetail(4000000000L, 8000000000L), "progress");
|
||||
assertThat(event.getProgressDetail().getCurrent()).isEqualTo(Integer.MAX_VALUE);
|
||||
assertThat(event.getProgressDetail().getTotal()).isEqualTo(Integer.MAX_VALUE);
|
||||
assertThat(event.getProgressDetail().asPercentage()).isEqualTo(50);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -51,25 +63,28 @@ abstract class ProgressUpdateEventTests<E extends ProgressUpdateEvent> {
|
|||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("removal")
|
||||
void progressDetailIsEmptyWhenCurrentIsNullReturnsTrue() {
|
||||
ProgressDetail detail = new ProgressDetail(null, 2);
|
||||
ProgressDetail detail = new ProgressDetail(null, 2L);
|
||||
assertThat(ProgressDetail.isEmpty(detail)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("removal")
|
||||
void progressDetailIsEmptyWhenTotalIsNullReturnsTrue() {
|
||||
ProgressDetail detail = new ProgressDetail(1, null);
|
||||
ProgressDetail detail = new ProgressDetail(1L, null);
|
||||
assertThat(ProgressDetail.isEmpty(detail)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("removal")
|
||||
void progressDetailIsEmptyWhenTotalAndCurrentAreNotNullReturnsFalse() {
|
||||
ProgressDetail detail = new ProgressDetail(1, 2);
|
||||
ProgressDetail detail = new ProgressDetail(1L, 2L);
|
||||
assertThat(ProgressDetail.isEmpty(detail)).isFalse();
|
||||
}
|
||||
|
||||
protected E createEvent() {
|
||||
return createEvent("status", new ProgressDetail(1, 2), "progress");
|
||||
return createEvent("status", new ProgressDetail(1L, 2L), "progress");
|
||||
}
|
||||
|
||||
protected abstract E createEvent(String status, ProgressDetail progressDetail, String progress);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -30,6 +30,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
class PullUpdateEventTests extends AbstractJsonTests {
|
||||
|
||||
@Test
|
||||
@SuppressWarnings("removal")
|
||||
void readValueWhenFullDeserializesJson() throws Exception {
|
||||
PullImageUpdateEvent event = getObjectMapper().readValue(getContent("pull-update-full.json"),
|
||||
PullImageUpdateEvent.class);
|
||||
|
@ -37,6 +38,7 @@ class PullUpdateEventTests extends AbstractJsonTests {
|
|||
assertThat(event.getStatus()).isEqualTo("Extracting");
|
||||
assertThat(event.getProgressDetail().getCurrent()).isEqualTo(16);
|
||||
assertThat(event.getProgressDetail().getTotal()).isEqualTo(32);
|
||||
assertThat(event.getProgressDetail().asPercentage()).isEqualTo(50);
|
||||
assertThat(event.getProgress()).isEqualTo("[==================================================>] 32B/32B");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue