Author: bombe
Date: 2007-10-29 10:01:11 +0000 (Mon, 29 Oct 2007)
New Revision: 15633

Modified:
   trunk/freenet/src/freenet/node/useralerts/UserAlertManager.java
Log:
add method to render a single user alert
add method to dismiss a user alert by hashcode

Modified: trunk/freenet/src/freenet/node/useralerts/UserAlertManager.java
===================================================================
--- trunk/freenet/src/freenet/node/useralerts/UserAlertManager.java     
2007-10-29 09:24:33 UTC (rev 15632)
+++ trunk/freenet/src/freenet/node/useralerts/UserAlertManager.java     
2007-10-29 10:01:11 UTC (rev 15633)
@@ -38,6 +38,31 @@
                }
        }

+       /**
+        * Tries to find the user alert with the given hash code and dismisses 
it,
+        * if found.
+        * 
+        * @see #unregister(UserAlert)
+        * @param alertHashCode
+        *            The hash code of the user alert to dismiss
+        */
+       public void dismissAlert(int alertHashCode) {
+               UserAlert[] userAlerts = getAlerts();
+               for (int index = 0, count = userAlerts.length; index < count; 
index++) {
+                       UserAlert userAlert = userAlerts[index];
+                       if (userAlert.hashCode() == alertHashCode) {
+                               if (userAlert.userCanDismiss()) {
+                                       if 
(userAlert.shouldUnregisterOnDismiss()) {
+                                               userAlert.onDismiss();
+                                               unregister(userAlert);
+                                       } else {
+                                               userAlert.isValid(false);
+                                       }
+                               }
+                       }
+               }
+       }
+
        public UserAlert[] getAlerts() {
                UserAlert[] a = null;
                synchronized (alerts) {
@@ -77,27 +102,7 @@
                        if (!alert.isValid())
                                continue;
                        totalNumber++;
-                       HTMLNode alertNode = null;
-                       short level = alert.getPriorityClass();
-                       if (level <= UserAlert.CRITICAL_ERROR)
-                               alertNode = new HTMLNode("div", "class", 
"infobox infobox-error");
-                       else if (level <= UserAlert.ERROR)
-                               alertNode = new HTMLNode("div", "class", 
"infobox infobox-alert");
-                       else if (level <= UserAlert.WARNING)
-                               alertNode = new HTMLNode("div", "class", 
"infobox infobox-warning");
-                       else if (level <= UserAlert.MINOR)
-                               alertNode = new HTMLNode("div", "class", 
"infobox infobox-information");
-
-                       alertsNode.addChild(alertNode);
-                       alertNode.addChild("div", "class", "infobox-header", 
alert.getTitle());
-                       HTMLNode alertContentNode = alertNode.addChild("div", 
"class", "infobox-content");
-                       alertContentNode.addChild(alert.getHTMLText());
-                       if (alert.userCanDismiss()) {
-                               HTMLNode dismissFormNode = 
alertContentNode.addChild("form", new String[] { "action", "method" }, new 
String[] { ".", "post" }).addChild("div");
-                               dismissFormNode.addChild("input", new String[] 
{ "type", "name", "value" }, new String[] { "hidden", "disable", 
String.valueOf(alert.hashCode()) });
-                               dismissFormNode.addChild("input", new String[] 
{ "type", "name", "value" }, new String[] { "hidden", "formPassword", 
core.formPassword });
-                               dismissFormNode.addChild("input", new String[] 
{ "type", "value" }, new String[] { "submit", alert.dismissButtonText() });
-                       }
+                       alertsNode.addChild(renderAlert(alert));
                }
                if (totalNumber == 0) {
                        return new HTMLNode("#", "");
@@ -106,6 +111,39 @@
        }

        /**
+        * Renders the given alert and returns the rendered HTML node.
+        * 
+        * @param userAlert
+        *            The user alert to render
+        * @return The rendered HTML node
+        */
+       public HTMLNode renderAlert(UserAlert userAlert) {
+               HTMLNode userAlertNode = null;
+               short level = userAlert.getPriorityClass();
+               if (level <= UserAlert.CRITICAL_ERROR)
+                       userAlertNode = new HTMLNode("div", "class", "infobox 
infobox-error");
+               else if (level <= UserAlert.ERROR)
+                       userAlertNode = new HTMLNode("div", "class", "infobox 
infobox-alert");
+               else if (level <= UserAlert.WARNING)
+                       userAlertNode = new HTMLNode("div", "class", "infobox 
infobox-warning");
+               else if (level <= UserAlert.MINOR)
+                       userAlertNode = new HTMLNode("div", "class", "infobox 
infobox-information");
+
+               assert userAlertNode != null: "user alert has invalid 
priority!";
+               
+               userAlertNode.addChild("div", "class", "infobox-header", 
userAlert.getTitle());
+               HTMLNode alertContentNode = userAlertNode.addChild("div", 
"class", "infobox-content");
+               alertContentNode.addChild(userAlert.getHTMLText());
+               if (userAlert.userCanDismiss()) {
+                       HTMLNode dismissFormNode = 
alertContentNode.addChild("form", new String[] { "action", "method" }, new 
String[] { ".", "post" }).addChild("div");
+                       dismissFormNode.addChild("input", new String[] { 
"type", "name", "value" }, new String[] { "hidden", "disable", 
String.valueOf(userAlert.hashCode()) });
+                       dismissFormNode.addChild("input", new String[] { 
"type", "name", "value" }, new String[] { "hidden", "formPassword", 
core.formPassword });
+                       dismissFormNode.addChild("input", new String[] { 
"type", "name", "value" }, new String[] { "submit", "dismiss-user-alert", 
userAlert.dismissButtonText() });
+               }
+               return userAlertNode;
+       }
+
+       /**
         * Write the alert summary as HTML to a StringBuffer
         */
        public HTMLNode createSummary() {


Reply via email to