Async-Ticket-Test/src/net/horizoncode/tickettest/manager/Ticket.java

57 lines
1.3 KiB
Java

package net.horizoncode.tickettest.manager;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
@Builder(
toBuilder = true,
builderClassName = "InternalTicketBuilder",
builderMethodName = "internalBuilder")
public class Ticket extends CompletableFuture<Boolean> {
@Getter private UUID ticketID;
@Getter private Long timeTicketCreated;
private TicketManager ticketManager;
@Getter @Setter private Runnable onExpire;
void init() {
ticketID = UUID.randomUUID();
}
public void use() {
ticketManager.getTicketSet().add(this);
ticketManager
.getService()
.submit(
() -> {
TimeUnit.MILLISECONDS.sleep(ticketManager.getTicketLifespan());
System.out.println("ticket with UUID: " + getTicketID() + " expired.");
ticketManager.getTicketSet().remove(this);
getOnExpire().run();
return null;
});
}
public static Ticket.Builder builder() {
return new Ticket.Builder();
}
public static class Builder extends InternalTicketBuilder {
Builder() {
super();
}
@Override
public Ticket build() {
Ticket ticket = super.build();
ticket.init();
return ticket;
}
}
}