package org.zstack.header.notification;
import org.zstack.header.message.APIEvent;
import org.zstack.header.message.APIMessage;
import org.zstack.utils.DebugUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by xing5 on 2017/3/16.
*/
public abstract class ApiNotification {
private List<Inner> inners = new ArrayList<>();
public class Inner {
String content;
Object[] arguments;
String resourceUuid;
String resourceType;
APIMessage message;
APIEvent event;
Boolean success;
Map<String, Object> context = new HashMap<>();
public APIMessage getMessage() {
return message;
}
public APIEvent getEvent() {
return event;
}
public String getContent() {
return content;
}
public Object[] getArguments() {
return arguments;
}
public String getResourceUuid() {
return resourceUuid;
}
public String getResourceType() {
return resourceType;
}
public Boolean getSuccess() {
return success;
}
public Map<String, Object> getContext() {
return context;
}
public Inner(String content, Object[] arguments) {
this.content = content;
this.arguments = arguments;
}
public Inner context(String key, Object value) {
context.put(key, value);
return this;
}
public Inner resource(String uuid, String type) {
resourceUuid = uuid;
resourceType = type;
return this;
}
public Inner messageAndEvent(APIMessage msg, APIEvent evt) {
message = msg;
event = evt;
success = evt.isSuccess();
return this;
}
public void done() {
DebugUtils.Assert(success != null, "you must call successOrNot() before done()");
inners.add(this);
}
}
protected Inner ntfy(String content, Object...args) {
return new Inner(content, args);
}
public abstract void after(APIEvent evt);
public void before() {
}
public List<Inner> getInners() {
return inners;
}
public void setInners(List<Inner> inners) {
this.inners = inners;
}
}