prometeu-studio/prometeu-packer/src/main/java/p/packer/events/PackerOperationEventEmitter.java

50 lines
1.7 KiB
Java

package p.packer.events;
import p.packer.api.PackerProjectContext;
import p.packer.api.events.PackerEvent;
import p.packer.api.events.PackerEventKind;
import p.packer.api.events.PackerEventSink;
import p.packer.api.events.PackerProgress;
import java.time.Instant;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
public final class PackerOperationEventEmitter {
private final PackerProjectContext project;
private final PackerEventSink sink;
private final String operationId;
private long sequence;
public PackerOperationEventEmitter(PackerProjectContext project, PackerEventSink sink) {
this(project, sink, UUID.randomUUID().toString());
}
public PackerOperationEventEmitter(PackerProjectContext project, PackerEventSink sink, String operationId) {
this.project = Objects.requireNonNull(project, "project");
this.sink = Objects.requireNonNull(sink, "sink");
this.operationId = Objects.requireNonNull(operationId, "operationId").trim();
}
public String operationId() {
return operationId;
}
public void emit(PackerEventKind kind, String summary, List<String> affectedAssets) {
emit(kind, summary, null, affectedAssets);
}
public void emit(PackerEventKind kind, String summary, PackerProgress progress, List<String> affectedAssets) {
sink.publish(new PackerEvent(
project.projectId(),
operationId,
sequence++,
Objects.requireNonNull(kind, "kind"),
Instant.now(),
Objects.requireNonNull(summary, "summary"),
progress,
affectedAssets == null ? List.of() : List.copyOf(affectedAssets)));
}
}