www/my_base/messages/index.jsp

Code
Comments
Other
Rev Date Author Line
833 28 Jun 05 nicklas 1 <%-- $Id$
833 28 Jun 05 nicklas 2   ------------------------------------------------------------------
3675 16 Aug 07 jari 3   Copyright (C) 2005 Nicklas Nordborg
5425 23 Sep 10 nicklas 4   Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
833 28 Jun 05 nicklas 5
2304 22 May 06 jari 6   This file is part of BASE - BioArray Software Environment.
2304 22 May 06 jari 7   Available at http://base.thep.lu.se/
833 28 Jun 05 nicklas 8
833 28 Jun 05 nicklas 9   BASE is free software; you can redistribute it and/or
833 28 Jun 05 nicklas 10   modify it under the terms of the GNU General Public License
4476 05 Sep 08 jari 11   as published by the Free Software Foundation; either version 3
833 28 Jun 05 nicklas 12   of the License, or (at your option) any later version.
833 28 Jun 05 nicklas 13
833 28 Jun 05 nicklas 14   BASE is distributed in the hope that it will be useful,
833 28 Jun 05 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
833 28 Jun 05 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
833 28 Jun 05 nicklas 17   GNU General Public License for more details.
833 28 Jun 05 nicklas 18
833 28 Jun 05 nicklas 19   You should have received a copy of the GNU General Public License
4511 11 Sep 08 jari 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
833 28 Jun 05 nicklas 21   ------------------------------------------------------------------
1885 02 Feb 06 nicklas 22
833 28 Jun 05 nicklas 23   @author Nicklas
833 28 Jun 05 nicklas 24   @version 2.0
833 28 Jun 05 nicklas 25 --%>
5426 24 Sep 10 nicklas 26 <%@ page pageEncoding="UTF-8" session="false"
833 28 Jun 05 nicklas 27   import="net.sf.basedb.core.SessionControl"
833 28 Jun 05 nicklas 28   import="net.sf.basedb.core.DbControl"
833 28 Jun 05 nicklas 29   import="net.sf.basedb.core.Item"
1885 02 Feb 06 nicklas 30   import="net.sf.basedb.core.Include"
1885 02 Feb 06 nicklas 31   import="net.sf.basedb.core.Message"
833 28 Jun 05 nicklas 32   import="net.sf.basedb.core.User"
1418 07 Oct 05 nicklas 33   import="net.sf.basedb.core.ItemQuery"
1418 07 Oct 05 nicklas 34   import="net.sf.basedb.core.ItemResultIterator"
833 28 Jun 05 nicklas 35   import="net.sf.basedb.core.Permission"
1885 02 Feb 06 nicklas 36   import="net.sf.basedb.core.ItemContext"
1885 02 Feb 06 nicklas 37   import="net.sf.basedb.core.MultiPermissions"
1885 02 Feb 06 nicklas 38   import="net.sf.basedb.core.PermissionDeniedException"
1885 02 Feb 06 nicklas 39   import="net.sf.basedb.core.ItemAlreadyExistsException"
1885 02 Feb 06 nicklas 40   import="net.sf.basedb.util.RemovableUtil"
1885 02 Feb 06 nicklas 41   import="net.sf.basedb.util.ShareableUtil"
833 28 Jun 05 nicklas 42   import="net.sf.basedb.clients.web.Base"
1885 02 Feb 06 nicklas 43   import="net.sf.basedb.clients.web.WebException"
2753 20 Oct 06 nicklas 44   import="net.sf.basedb.util.Values"
833 28 Jun 05 nicklas 45   import="net.sf.basedb.clients.web.util.HTML"
6040 30 Mar 12 nicklas 46   import="net.sf.basedb.core.plugin.GuiContext"
6040 30 Mar 12 nicklas 47   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
6040 30 Mar 12 nicklas 48   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
6040 30 Mar 12 nicklas 49   import="net.sf.basedb.clients.web.extensions.JspContext"
6040 30 Mar 12 nicklas 50   import="net.sf.basedb.clients.web.extensions.list.ListColumnExportRenderer"
7604 25 Feb 19 nicklas 51   import="net.sf.basedb.clients.web.extensions.list.ListColumnAction"
6040 30 Mar 12 nicklas 52   import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
1885 02 Feb 06 nicklas 53   import="java.util.Enumeration"
1885 02 Feb 06 nicklas 54   import="java.util.Set"
1885 02 Feb 06 nicklas 55   import="java.util.HashSet"
1885 02 Feb 06 nicklas 56   import="java.util.List"
1885 02 Feb 06 nicklas 57   import="java.util.ArrayList"
1885 02 Feb 06 nicklas 58   import="java.util.Collections"
833 28 Jun 05 nicklas 59 %>
833 28 Jun 05 nicklas 60 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
833 28 Jun 05 nicklas 61 <%!
7786 02 Mar 20 nicklas 62   private static final ItemContext defaultContext = Base.createDefaultContext("timeSent", "name,from,timeSent,read,description");
1885 02 Feb 06 nicklas 63   private static final Item itemType = Item.MESSAGE;
833 28 Jun 05 nicklas 64 %>
833 28 Jun 05 nicklas 65 <%
1885 02 Feb 06 nicklas 66 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
833 28 Jun 05 nicklas 67 final String ID = sc.getId();
1885 02 Feb 06 nicklas 68 final String cmd = request.getParameter("cmd");
1885 02 Feb 06 nicklas 69 final String root = request.getContextPath()+"/";
1885 02 Feb 06 nicklas 70 final String mode = request.getParameter("mode");
1885 02 Feb 06 nicklas 71 final String callback = request.getParameter("callback");
1885 02 Feb 06 nicklas 72 final String itemId = request.getParameter("item_id");
1885 02 Feb 06 nicklas 73 final String listPage = "list_messages.jsp?ID="+ID
1885 02 Feb 06 nicklas 74   +(mode == null ? "" : "&mode="+mode)
1885 02 Feb 06 nicklas 75   +(callback == null ? "" : "&callback="+callback)
1885 02 Feb 06 nicklas 76   +(itemId == null ? "" : "&item_id="+itemId);
1885 02 Feb 06 nicklas 77 final String viewPage = "view_message.jsp?ID="+ID;
1885 02 Feb 06 nicklas 78 //final String editPage = "edit_job.jsp?ID="+ID;
833 28 Jun 05 nicklas 79
1885 02 Feb 06 nicklas 80 String forward = null;
1885 02 Feb 06 nicklas 81 String redirect = null;
1885 02 Feb 06 nicklas 82 String message = null;
1885 02 Feb 06 nicklas 83 DbControl dc = null;
1885 02 Feb 06 nicklas 84
833 28 Jun 05 nicklas 85 try
833 28 Jun 05 nicklas 86 {
1885 02 Feb 06 nicklas 87   if (cmd == null || "List".equals(cmd))
1885 02 Feb 06 nicklas 88   {
1885 02 Feb 06 nicklas 89     // Display the list page without updatinging the current context
2811 26 Oct 06 nicklas 90     Base.getAndSetCurrentContext(sc, itemType, null, defaultContext, true);
1885 02 Feb 06 nicklas 91     redirect = listPage;
1885 02 Feb 06 nicklas 92   }
1885 02 Feb 06 nicklas 93   else if ("UpdateContext".equals(cmd))
1885 02 Feb 06 nicklas 94   {
1885 02 Feb 06 nicklas 95     // Display the list page after updating the current context from the request parameters
1885 02 Feb 06 nicklas 96     Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1885 02 Feb 06 nicklas 97     redirect = listPage;
1885 02 Feb 06 nicklas 98   }
1885 02 Feb 06 nicklas 99   else if ("LoadContext".equals(cmd))
1885 02 Feb 06 nicklas 100   {
1885 02 Feb 06 nicklas 101     // Display the list page after loading a saved context
1885 02 Feb 06 nicklas 102     int contextId = Values.getInt(request.getParameter("context"));
1885 02 Feb 06 nicklas 103     Base.loadContext(sc, contextId, defaultContext);
1885 02 Feb 06 nicklas 104     redirect = listPage;
1885 02 Feb 06 nicklas 105   }
1885 02 Feb 06 nicklas 106
1885 02 Feb 06 nicklas 107   else if ("ViewItem".equals(cmd))
1885 02 Feb 06 nicklas 108   {
1885 02 Feb 06 nicklas 109     // Display the view page for a single item (opens in a popup)
1885 02 Feb 06 nicklas 110     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1885 02 Feb 06 nicklas 111     forward = viewPage;
1885 02 Feb 06 nicklas 112   }
1885 02 Feb 06 nicklas 113   /*
1885 02 Feb 06 nicklas 114   else if ("EditItem".equals(cmd))
1885 02 Feb 06 nicklas 115   {
1885 02 Feb 06 nicklas 116     // Display the edit page for a single item (should be opened in a popup)
1885 02 Feb 06 nicklas 117     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1885 02 Feb 06 nicklas 118     redirect = editPage;
1885 02 Feb 06 nicklas 119   }
1885 02 Feb 06 nicklas 120   */
1917 06 Feb 06 nicklas 121   else if ("MarkAsRead".equals(cmd))
1917 06 Feb 06 nicklas 122   {
1917 06 Feb 06 nicklas 123     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1917 06 Feb 06 nicklas 124     int numRead = 0;
1917 06 Feb 06 nicklas 125     int numTotal = 0;
7954 12 May 21 nicklas 126     dc = sc.newDbControl(":Mark message as read");
1917 06 Feb 06 nicklas 127     for (int messageId : cc.getSelected())
1917 06 Feb 06 nicklas 128     {
1917 06 Feb 06 nicklas 129       Message m = Message.getById(dc, messageId);
1917 06 Feb 06 nicklas 130       if (!m.isRead())
1917 06 Feb 06 nicklas 131       {
1917 06 Feb 06 nicklas 132         numTotal++;
1917 06 Feb 06 nicklas 133         try
1917 06 Feb 06 nicklas 134         {
1917 06 Feb 06 nicklas 135           m.setRead(true);
1917 06 Feb 06 nicklas 136           numRead++;
1917 06 Feb 06 nicklas 137         }
1917 06 Feb 06 nicklas 138         catch (PermissionDeniedException ex)
1917 06 Feb 06 nicklas 139         {}
1917 06 Feb 06 nicklas 140       }
1917 06 Feb 06 nicklas 141     }
1917 06 Feb 06 nicklas 142     dc.commit();
1917 06 Feb 06 nicklas 143     if (numTotal != numRead)
1917 06 Feb 06 nicklas 144     {
1917 06 Feb 06 nicklas 145       message = (numRead == 0 ? "No" : "Only "+numRead+" of "+numTotal) + " items could be restored, because you have no WRITE permission";
1917 06 Feb 06 nicklas 146     }
6192 31 Oct 12 nicklas 147     redirect = listPage;
1917 06 Feb 06 nicklas 148   }
1885 02 Feb 06 nicklas 149   else if ("DeleteItem".equals(cmd))
1885 02 Feb 06 nicklas 150   {
1885 02 Feb 06 nicklas 151     // Delete a single item and then return to the view page
7954 12 May 21 nicklas 152     dc = sc.newDbControl(":Delete "+itemType);
1885 02 Feb 06 nicklas 153     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1885 02 Feb 06 nicklas 154     RemovableUtil.setRemoved(dc, itemType, Collections.singleton(cc.getId()), true);
1885 02 Feb 06 nicklas 155     dc.commit();
1885 02 Feb 06 nicklas 156     redirect = viewPage;
1885 02 Feb 06 nicklas 157   }
1885 02 Feb 06 nicklas 158   else if ("DeleteItems".equals(cmd))
1885 02 Feb 06 nicklas 159   {
1885 02 Feb 06 nicklas 160     // Delete all selected items on the list page
7954 12 May 21 nicklas 161     dc = sc.newDbControl(":Delete "+itemType);
1885 02 Feb 06 nicklas 162     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1885 02 Feb 06 nicklas 163     int numTotal = cc.getSelected().size();
1885 02 Feb 06 nicklas 164     int numRemoved = RemovableUtil.setRemoved(dc, itemType, cc.getSelected(), true);
1885 02 Feb 06 nicklas 165     dc.commit();
1885 02 Feb 06 nicklas 166     if (numTotal != numRemoved)
833 28 Jun 05 nicklas 167     {
1885 02 Feb 06 nicklas 168       message = (numRemoved == 0 ? "No" : "Only "+numRemoved+" of "+numTotal) + " items could be deleted, because you have no DELETE permission";
833 28 Jun 05 nicklas 169     }
6192 31 Oct 12 nicklas 170     redirect = listPage;
1885 02 Feb 06 nicklas 171   }
1885 02 Feb 06 nicklas 172   else if ("RestoreItem".equals(cmd))
1885 02 Feb 06 nicklas 173   {
1885 02 Feb 06 nicklas 174     // Restore a single item and then return to the view page
7954 12 May 21 nicklas 175     dc = sc.newDbControl(":Restore "+itemType);
1885 02 Feb 06 nicklas 176     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1885 02 Feb 06 nicklas 177     RemovableUtil.setRemoved(dc, itemType, Collections.singleton(cc.getId()), false);
1885 02 Feb 06 nicklas 178     dc.commit();
1885 02 Feb 06 nicklas 179     redirect = viewPage;
1885 02 Feb 06 nicklas 180   }
1885 02 Feb 06 nicklas 181   else if ("RestoreItems".equals(cmd))
1885 02 Feb 06 nicklas 182   {
1885 02 Feb 06 nicklas 183     // Restore all selected items on the list page
7954 12 May 21 nicklas 184     dc = sc.newDbControl(":Restore "+itemType);
1885 02 Feb 06 nicklas 185     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1885 02 Feb 06 nicklas 186     int numTotal = cc.getSelected().size();
1885 02 Feb 06 nicklas 187     int numRemoved = RemovableUtil.setRemoved(dc, itemType, cc.getSelected(), false);
1885 02 Feb 06 nicklas 188     dc.commit();
1885 02 Feb 06 nicklas 189     if (numTotal != numRemoved)
833 28 Jun 05 nicklas 190     {
2528 15 Aug 06 martin 191       message = (numRemoved == 0 ? "No" : "Only "+numRemoved+" of "+numTotal) + " items could be restored, because you have no WRITE permission";
833 28 Jun 05 nicklas 192     }
6192 31 Oct 12 nicklas 193     redirect = listPage;
1885 02 Feb 06 nicklas 194   }
1885 02 Feb 06 nicklas 195   else if ("ExportItems".equals(cmd))
1885 02 Feb 06 nicklas 196   {
1885 02 Feb 06 nicklas 197     // Run an export plugin in a list context
1885 02 Feb 06 nicklas 198     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
7954 12 May 21 nicklas 199     dc = sc.newDbControl(":Export "+itemType);
1885 02 Feb 06 nicklas 200     final User user = User.getById(dc, sc.getLoggedInUserId());
1885 02 Feb 06 nicklas 201     final ItemQuery<Message> query = Message.getQuery(user);
7914 23 Feb 21 nicklas 202     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.list(itemType), null);
7914 23 Feb 21 nicklas 203     cc.configureQuery(dc, query, jspContext, true);
6040 30 Mar 12 nicklas 204     cc.setQuery(query);
7604 25 Feb 19 nicklas 205     ExtensionsInvoker<ListColumnAction<Message,?>> listInvoker = ListColumnUtil.useExtensions(jspContext);
7604 25 Feb 19 nicklas 206     listInvoker.render(new ListColumnExportRenderer<Message>(cc));
5590 16 Mar 11 nicklas 207     dc.close();
1885 02 Feb 06 nicklas 208     redirect = "../../common/export/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=LIST&title=Export+messages";
1885 02 Feb 06 nicklas 209   }
1885 02 Feb 06 nicklas 210   else if ("ExportItem".equals(cmd))
1885 02 Feb 06 nicklas 211   {
1885 02 Feb 06 nicklas 212     // Run an export plugin in single-item context
1885 02 Feb 06 nicklas 213     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1885 02 Feb 06 nicklas 214     redirect = "../../common/export/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=ITEM&title=Export+message";
1885 02 Feb 06 nicklas 215   }
1885 02 Feb 06 nicklas 216   else if ("ImportItems".equals(cmd))
1885 02 Feb 06 nicklas 217   {
1885 02 Feb 06 nicklas 218     // Run an import plugin in a list context
1885 02 Feb 06 nicklas 219     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
7954 12 May 21 nicklas 220     dc = sc.newDbControl(":Import "+itemType);
1885 02 Feb 06 nicklas 221     final User user = User.getById(dc, sc.getLoggedInUserId());
1885 02 Feb 06 nicklas 222     final ItemQuery<Message> query = Message.getQuery(user);
7914 23 Feb 21 nicklas 223     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.list(itemType), null);
7914 23 Feb 21 nicklas 224     cc.configureQuery(dc, query, jspContext, true);
5590 16 Mar 11 nicklas 225     dc.close();
1885 02 Feb 06 nicklas 226     cc.setQuery(query);
1885 02 Feb 06 nicklas 227     redirect = "../../common/import/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=LIST&title=Import+messages";
1885 02 Feb 06 nicklas 228   }
1885 02 Feb 06 nicklas 229   else if ("ImportItem".equals(cmd))
1885 02 Feb 06 nicklas 230   {
1885 02 Feb 06 nicklas 231     // Run an import plugin in single-item context
1885 02 Feb 06 nicklas 232     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1885 02 Feb 06 nicklas 233     redirect = "../../common/import/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=ITEM&title=Import+messge";
1885 02 Feb 06 nicklas 234   }
1885 02 Feb 06 nicklas 235   else if ("RunListPlugin".equals(cmd))
1885 02 Feb 06 nicklas 236   {
1885 02 Feb 06 nicklas 237     // Run another plugin in a list context
1885 02 Feb 06 nicklas 238     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
7954 12 May 21 nicklas 239     dc = sc.newDbControl(":Run plugin "+itemType);
1885 02 Feb 06 nicklas 240     final User user = User.getById(dc, sc.getLoggedInUserId());
1885 02 Feb 06 nicklas 241     final ItemQuery<Message> query = Message.getQuery(user);
7914 23 Feb 21 nicklas 242     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.list(itemType), null);
7914 23 Feb 21 nicklas 243     cc.configureQuery(dc, query, jspContext, true);
5590 16 Mar 11 nicklas 244     dc.close();
1885 02 Feb 06 nicklas 245     cc.setQuery(query);
1885 02 Feb 06 nicklas 246     redirect = "../../common/plugin/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=LIST&main_type=OTHER&title=Run+plugin";
1885 02 Feb 06 nicklas 247   }
1885 02 Feb 06 nicklas 248   else if ("RunPlugin".equals(cmd))
1885 02 Feb 06 nicklas 249   {
1885 02 Feb 06 nicklas 250     // Run another plugin in single-item context
1885 02 Feb 06 nicklas 251     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1885 02 Feb 06 nicklas 252     redirect = "../../common/plugin/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=ITEM&main_type=OTHER&title=Run+plugin";
1885 02 Feb 06 nicklas 253   }
1885 02 Feb 06 nicklas 254   else
1885 02 Feb 06 nicklas 255   {
1885 02 Feb 06 nicklas 256     throw new WebException("popup", "Invalid command", "The command {1} is not recognised as a valid command.", cmd);
1885 02 Feb 06 nicklas 257   }
833 28 Jun 05 nicklas 258 }
833 28 Jun 05 nicklas 259 finally
833 28 Jun 05 nicklas 260 {
833 28 Jun 05 nicklas 261   if (dc != null) dc.close();
833 28 Jun 05 nicklas 262 }
1885 02 Feb 06 nicklas 263
1885 02 Feb 06 nicklas 264 if (forward != null)
1885 02 Feb 06 nicklas 265 {
6192 31 Oct 12 nicklas 266   sc.setSessionSetting("alert-message", message);
1885 02 Feb 06 nicklas 267   pageContext.forward(forward);
1885 02 Feb 06 nicklas 268 }
1885 02 Feb 06 nicklas 269 else if (redirect != null)
1885 02 Feb 06 nicklas 270 {
6192 31 Oct 12 nicklas 271   sc.setSessionSetting("alert-message", message);
1885 02 Feb 06 nicklas 272   response.sendRedirect(redirect);
1885 02 Feb 06 nicklas 273 }
1885 02 Feb 06 nicklas 274 else if (message == null)
1885 02 Feb 06 nicklas 275 {
1885 02 Feb 06 nicklas 276   response.sendRedirect(root + "common/close_popup.jsp?refresh_opener=1&wait=0");
1885 02 Feb 06 nicklas 277 }
1885 02 Feb 06 nicklas 278 else
1885 02 Feb 06 nicklas 279 {
1885 02 Feb 06 nicklas 280   response.sendRedirect(root + "common/close_popup.jsp?refresh_opener=1&message="+HTML.urlEncode(message));
1885 02 Feb 06 nicklas 281 }
1885 02 Feb 06 nicklas 282 %>
1885 02 Feb 06 nicklas 283