You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wookie.apache.org by sc...@apache.org on 2010/03/09 15:22:41 UTC

svn commit: r920890 - in /incubator/wookie/trunk: WebContent/admin/index.jsp src/org/apache/wookie/helpers/FlashMessage.java src/org/apache/wookie/server/ContextListener.java

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) {