/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.node.useralerts;
import java.lang.ref.WeakReference;
import java.text.DateFormat;
import java.util.Date;
import freenet.clients.fcp.FCPMessage;
import freenet.clients.fcp.TextFeedMessage;
import freenet.l10n.NodeL10n;
import freenet.node.DarknetPeerNode;
import freenet.node.PeerNode;
import freenet.support.HTMLNode;
// Node To Node Text Message User Alert
public class N2NTMUserAlert extends AbstractUserAlert {
private final WeakReference<PeerNode> peerRef;
private final String messageText;
private final int fileNumber;
private final long composedTime;
private final long sentTime;
private final long receivedTime;
private String sourceNodeName;
private String sourcePeer;
public N2NTMUserAlert(DarknetPeerNode sourcePeerNode,
String message, int fileNumber, long composedTime, long sentTime,
long receivedTime) {
super(true, null, null, null, null, UserAlert.MINOR, true, null, true, null);
this.messageText = message;
this.fileNumber = fileNumber;
this.composedTime = composedTime;
this.sentTime = sentTime;
this.receivedTime = receivedTime;
peerRef = sourcePeerNode.getWeakRef();
sourceNodeName = sourcePeerNode.getName();
sourcePeer = sourcePeerNode.getPeer().toString();
}
@Override
public String getTitle() {
return l10n("title", new String[] { "number", "peername", "peer" },
new String[] { Integer.toString(fileNumber),
sourceNodeName,
sourcePeer });
}
@Override
public String getText() {
return l10n("header", new String[] { "from", "composed", "sent",
"received" }, new String[] { sourceNodeName,
DateFormat.getInstance().format(new Date(composedTime)),
DateFormat.getInstance().format(new Date(sentTime)),
DateFormat.getInstance().format(new Date(receivedTime)) })
+ ": " + messageText;
}
@Override
public String getShortText() {
return l10n("headerShort", "from", sourceNodeName);
}
@Override
public HTMLNode getHTMLText() {
HTMLNode alertNode = new HTMLNode("div");
alertNode.addChild("p", l10n("header", new String[] { "from",
"composed", "sent", "received" }, new String[] {
sourceNodeName,
DateFormat.getInstance().format(new Date(composedTime)),
DateFormat.getInstance().format(new Date(sentTime)),
DateFormat.getInstance().format(new Date(receivedTime)) }));
String[] lines = messageText.split("\n");
for (int i = 0, c = lines.length; i < c; i++) {
alertNode.addChild("#", lines[i]);
if (i != lines.length - 1)
alertNode.addChild("br");
}
DarknetPeerNode pn = (DarknetPeerNode) peerRef.get();
if(pn != null)
alertNode.addChild("p").addChild("a", "href",
"/send_n2ntm/?peernode_hashcode=" + pn.hashCode(),
l10n("reply"));
return alertNode;
}
@Override
public String dismissButtonText() {
return l10n("delete");
}
private String l10n(String key) {
return NodeL10n.getBase().getString("N2NTMUserAlert." + key);
}
private String l10n(String key, String[] patterns, String[] values) {
return NodeL10n.getBase().getString("N2NTMUserAlert." + key, patterns, values);
}
private String l10n(String key, String pattern, String value) {
return NodeL10n.getBase().getString("N2NTMUserAlert." + key, pattern, value);
}
@Override
public void onDismiss() {
DarknetPeerNode pn = (DarknetPeerNode) peerRef.get();
if(pn != null)
pn.deleteExtraPeerDataFile(fileNumber);
}
@Override
public FCPMessage getFCPMessage() {
return new TextFeedMessage(getTitle(),
getShortText(), getText(), getPriorityClass(), getUpdatedTime(), sourceNodeName,
composedTime, sentTime, receivedTime, messageText);
}
@Override
public boolean isValid() {
DarknetPeerNode pn = (DarknetPeerNode) peerRef.get();
if(pn != null) {
sourceNodeName = pn.getName();
sourcePeer = pn.getPeer().toString();
}
return true;
}
}