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