Author: scottbw
Date: Tue Mar  9 14:22:40 2010
New Revision: 920890

URL: http://svn.apache.org/viewvc?rev=920890&view=rev
Log:
Added a "flash message" facility that notifies admins when widgets have been 
dropped into the deploy folder, and any errors that occurred, when they visit 
the admin index page. See WOOKIE-70 for more information.

Added:
    incubator/wookie/trunk/src/org/apache/wookie/helpers/FlashMessage.java
Modified:
    incubator/wookie/trunk/WebContent/admin/index.jsp
    incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java

Modified: incubator/wookie/trunk/WebContent/admin/index.jsp
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/WebContent/admin/index.jsp?rev=920890&r1=920889&r2=920890&view=diff
==============================================================================
--- incubator/wookie/trunk/WebContent/admin/index.jsp (original)
+++ incubator/wookie/trunk/WebContent/admin/index.jsp Tue Mar  9 14:22:40 2010
@@ -19,6 +19,8 @@ if (version == null){
        version="";
 }
 %>
+<%@ page import='org.apache.wookie.helpers.FlashMessage' %>
+<% FlashMessage.getInstance().appendFlashMessages(session);%>
 <% String errors = (String)session.getAttribute("error_value");%>
 <% String messages = (String)session.getAttribute("message_value");%>
 <html>

Added: incubator/wookie/trunk/src/org/apache/wookie/helpers/FlashMessage.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/helpers/FlashMessage.java?rev=920890&view=auto
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/helpers/FlashMessage.java 
(added)
+++ incubator/wookie/trunk/src/org/apache/wookie/helpers/FlashMessage.java Tue 
Mar  9 14:22:40 2010
@@ -0,0 +1,113 @@
+/*
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wookie.helpers;
+
+import java.util.ArrayList;
+
+import javax.servlet.http.HttpSession;
+
+/**
+ * A singleton class that collects messages sent by other processes and 
appends them to session messages
+ * displayed in admin views. For example, this is used to notify the user that 
widgets have been dropped into the deploy
+ * folder - either reporting they were added successfully, or reporting the 
error.
+ */
+public class FlashMessage {
+
+       private static FlashMessage _instance;
+       private static ArrayList<Message> _messages;
+       
+       public static FlashMessage getInstance(){
+               if (_instance == null) _instance = new FlashMessage();
+               return _instance;
+       }
+       
+       private FlashMessage(){
+               _messages = new ArrayList<Message>();
+       }
+       
+       /**
+        * Add an information (success) message to the flash message buffer
+        * @param message the message to add
+        */
+       public void message(String message){
+               _messages.add(new Message("message", message));
+       }
+       
+       /**
+        * Add an error message to the flash message buffer.
+        * @param message the message to add
+        */
+       public void error(String message){
+               _messages.add(new Message("error", message));
+       }
+
+       private Message[] getMessages(){
+               return (Message[]) _messages.toArray(new 
Message[_messages.size()]);
+       }
+       
+       private String showErrors(){
+               String messages = "";
+               ArrayList<Message> toRemove = new ArrayList<Message>();
+               for (Message message:getMessages()){
+                       if (message.type.equals("error")){
+                               messages += "<p>"+message.text+"</p>";
+                               toRemove.add(message);
+                       }
+               }
+               _messages.removeAll(toRemove);
+               return messages;
+       }
+       
+       private String showMessages(){
+               String messages = "";
+               ArrayList<Message> toRemove = new ArrayList<Message>();
+               for (Message message:getMessages()){
+                       if (message.type.equals("message")){
+                               messages += "<br/>"+message.text;
+                               toRemove.add(message);
+                       }
+               }
+               _messages.removeAll(toRemove);
+               return messages;
+       }
+       
+       /**
+        * Append any outstanding messages to the session message attributes;
+        * messages are then removed from the buffer and so will not appear 
again
+        */
+       public void appendFlashMessages(HttpSession session){
+               String errors = (String) session.getAttribute("error_value");
+               if (errors == null) errors = "";
+               errors += FlashMessage.getInstance().showErrors();
+               if (errors.equals("")) errors = null;
+               session.setAttribute("error_value", errors);
+               
+               String messages = (String) 
session.getAttribute("message_value");
+               if (messages == null) messages = "";
+               messages += FlashMessage.getInstance().showMessages();
+               if (messages.equals("")) messages = null;
+               session.setAttribute("message_value", messages);
+       }
+       
+       class Message {
+               String type;
+               String text;
+               public Message(String type, String message){
+                       this.type = type;
+                       this.text = message;
+                       
+               }
+       }
+       
+}

Modified: 
incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java?rev=920890&r1=920889&r2=920890&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java 
(original)
+++ incubator/wookie/trunk/src/org/apache/wookie/server/ContextListener.java 
Tue Mar  9 14:22:40 2010
@@ -27,6 +27,7 @@ import org.apache.wookie.Messages;
 import org.apache.wookie.beans.ServerFeature;
 import org.apache.wookie.beans.Widget;
 import org.apache.wookie.feature.FeatureLoader;
+import org.apache.wookie.helpers.FlashMessage;
 import org.apache.wookie.helpers.WidgetFactory;
 import org.apache.wookie.util.WgtWatcher;
 import org.apache.wookie.util.hibernate.DBManagerFactory;
@@ -173,18 +174,27 @@ public class ContextListener implements 
                                                        W3CWidget model = 
fac.parse(upload);
                                                        
if(!Widget.exists(model.getIdentifier())) {
                                                                
WidgetFactory.addNewWidget(model, true);        
-                                                               
_logger.info(model.getLocalName("en") +"' - " + 
localizedMessages.getString("WidgetAdminServlet.19"));
+                                                               String message 
= model.getLocalName("en") +"' - " + 
localizedMessages.getString("WidgetAdminServlet.19");
+                                                               
_logger.info(message);
+                                                               
FlashMessage.getInstance().message(message);
                                                        } else {
-                                                               
_logger.info(model.getLocalName("en") +"' - " + 
localizedMessages.getString("WidgetAdminServlet.20"));
+                                                               String message 
= model.getLocalName("en") +"' - " + 
localizedMessages.getString("WidgetAdminServlet.20");
+                                                               
_logger.info(message);
+                                                               
FlashMessage.getInstance().message(message);
                                                        }
                                                        
dbManager.commitTransaction();
                                                } catch (IOException e) {
-                                                       
_logger.error(f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.1"));
+                                                       String error = 
f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.1");
+                                                       
FlashMessage.getInstance().error(error);
+                                                       _logger.error(error);
                                                } catch 
(BadWidgetZipFileException e) {
-                                                       
_logger.error(f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.2"));
+                                                       String error = 
f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.2");
+                                                       
FlashMessage.getInstance().error(error);
+                                                       _logger.error(error);
                                                } catch (BadManifestException 
e) {
-                                                       e.printStackTrace();
-                                                       
_logger.error(f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.3"));
+                                                       String error = 
f.getName()+":"+localizedMessages.getString("WidgetHotDeploy.3");
+                                                       
FlashMessage.getInstance().error(error);
+                                                       _logger.error(error);
                                                }
                                        }
                                        public void fileRemoved(File f) {


Reply via email to