package io.muoncore.message;
import java.util.UUID;
public class MuonMessageBuilder {
private String id;
private long created = System.currentTimeMillis();
private String targetServiceName;
private String sourceServiceName;
private String protocol;
private String step;
private MuonMessage.Status status = MuonMessage.Status.success;
private byte[] payload;
private String contentType;
private MuonMessage.ChannelOperation channelOperation = MuonMessage.ChannelOperation.normal;
public static MuonMessageBuilder clone(MuonMessage source) {
MuonMessageBuilder builder = new MuonMessageBuilder();
builder.id = source.getId();
builder.sourceServiceName = source.getSourceServiceName();
builder.targetServiceName = source.getTargetServiceName();
builder.protocol = source.getProtocol();
builder.step = source.getStep();
builder.status = source.getStatus();
builder.payload = source.getPayload();
builder.contentType = source.getContentType();
return builder;
}
public static MuonMessageBuilder fromService(String service) {
MuonMessageBuilder builder = new MuonMessageBuilder();
builder.id = UUID.randomUUID().toString();
builder.sourceServiceName = service;
return builder;
}
public MuonMessageBuilder toService(String targetService) {
this.targetServiceName = targetService;
return this;
}
public MuonMessageBuilder protocol(String protocol) {
this.protocol = protocol;
return this;
}
public MuonMessageBuilder step(String step) {
this.step = step;
return this;
}
public MuonMessageBuilder status(MuonMessage.Status status) {
this.status = status;
return this;
}
public MuonMessageBuilder payload(byte[] payload) {
this.payload = payload;
return this;
}
public MuonMessageBuilder contentType(String contentType) {
this.contentType = contentType;
return this;
}
public MuonMessageBuilder operation(MuonMessage.ChannelOperation channelOperation) {
this.channelOperation = channelOperation;
return this;
}
public MuonOutboundMessage build() {
return new MuonOutboundMessage(
id, created, targetServiceName, sourceServiceName, protocol, step, status, payload, contentType, channelOperation);
}
public MuonInboundMessage buildInbound() {
return new MuonInboundMessage(
id, created, targetServiceName, sourceServiceName, protocol, step, status, payload, contentType, channelOperation);
}
}