package freenet.node.useralerts;
import java.util.Iterator;
import java.util.Map;
import freenet.clients.fcp.FCPMessage;
import freenet.clients.fcp.FeedMessage;
import freenet.support.HTMLNode;
public abstract class StoringUserEvent<T extends StoringUserEvent<T>> extends AbstractUserEvent {
protected final Map<String, T> events;
protected StoringUserEvent(Map<String, T> events) {
this.events = events;
}
protected StoringUserEvent(Type eventType, boolean userCanDismiss, String title, String text,
String shortText, HTMLNode htmlText, short priorityClass,
boolean valid, String dismissButtonText,
boolean shouldUnregisterOnDismiss, Object userIdentifier, Map<String, T> events) {
super(eventType, userCanDismiss, title, text, shortText, htmlText, priorityClass,
valid, dismissButtonText, shouldUnregisterOnDismiss,
userIdentifier);
this.events = events;
}
public abstract String getEventText();
public abstract HTMLNode getEventHTMLText();
@Override
public HTMLNode getHTMLText() {
HTMLNode text = new HTMLNode("div");
synchronized(events) {
for(StoringUserEvent<T> event : events.values()) {
text.addChild(event.getEventHTMLText());
}
}
return text;
}
@Override
public FCPMessage getFCPMessage() {
return new FeedMessage(getEventText(), getEventText(), getEventText(), getPriorityClass(), getUpdatedTime());
}
@Override
public void onDismiss() {
synchronized(events) {
for(Iterator<T> iter = events.values().iterator(); iter.hasNext();) {
T event = iter.next();
event.onEventDismiss();
iter.remove();
}
}
}
@Override
public boolean isValid() {
boolean valid;
synchronized(events) {
valid = !events.isEmpty();
}
return valid;
}
public abstract void onEventDismiss();
}