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