source: trunk/www/views/sessions/list_sessions.jsp @ 5952

Last change on this file since 5952 was 5952, checked in by Nicklas Nordborg, 10 years ago

References #1655: GUI improvements

List page in the View menu

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 12.5 KB
Line 
1<%-- $Id: list_sessions.jsp 5952 2012-02-10 12:27:27Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Johan Enell
5
6  This file is part of BASE - BioArray Software Environment.
7  Available at http://base.thep.lu.se/
8
9  BASE is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License
11  as published by the Free Software Foundation; either version 3
12  of the License, or (at your option) any later version.
13
14  BASE is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with BASE. If not, see <http://www.gnu.org/licenses/>.
21  ------------------------------------------------------------------
22
23  @author Nicklas
24  @version 2.0
25--%>
26<%@ page pageEncoding="UTF-8" session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.DbControl"
29  import="net.sf.basedb.core.Item"
30  import="net.sf.basedb.core.Session"
31  import="net.sf.basedb.core.User"
32  import="net.sf.basedb.core.ItemQuery"
33  import="net.sf.basedb.core.Include"
34  import="net.sf.basedb.core.ItemResultIterator"
35  import="net.sf.basedb.core.ItemResultList"
36  import="net.sf.basedb.core.ItemContext"
37  import="net.sf.basedb.core.Permission"
38  import="net.sf.basedb.core.PluginDefinition"
39  import="net.sf.basedb.core.PermissionDeniedException"
40  import="net.sf.basedb.core.query.Hql"
41  import="net.sf.basedb.core.query.Restrictions"
42  import="net.sf.basedb.core.query.Expressions"
43  import="net.sf.basedb.core.plugin.GuiContext"
44  import="net.sf.basedb.core.plugin.Plugin"
45  import="net.sf.basedb.util.Enumeration"
46  import="net.sf.basedb.clients.web.Base"
47  import="net.sf.basedb.clients.web.ModeInfo"
48  import="net.sf.basedb.clients.web.PermissionUtil"
49  import="net.sf.basedb.clients.web.util.HTML"
50  import="net.sf.basedb.util.Values"
51  import="net.sf.basedb.util.formatter.Formatter"
52  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
53  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
54  import="net.sf.basedb.clients.web.extensions.JspContext"
55  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
56  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
57  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
58  import="java.util.List"
59  import="java.util.Map"
60  import="java.util.Date"
61%>
62<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
63<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
64<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
65<%!
66  private static final Item itemType = Item.SESSION;
67  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
68%>
69<%
70final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
71final String ID = sc.getId();
72final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
73final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
74
75final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
76final String callback = request.getParameter("callback");
77final String title = mode.generateTitle("session", "sessions");
78final DbControl dc = sc.newDbControl();
79ItemResultIterator<Session> sessions = null;
80try
81{
82  final User user = cc.getInclude().contains(Include.OTHERS) ? 
83    null : User.getById(dc, sc.getLoggedInUserId());
84
85  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
86  try
87  {
88    final ItemQuery<Session> query = Base.getConfiguredQuery(dc, cc, true, Session.getQuery(user), mode);
89    sessions = query.iterate(dc);
90  }
91  catch (Throwable t)
92  {
93    cc.setMessage(t.getMessage());
94  }
95  int numListed = 0;
96  Formatter<Date> dateTimeFormatter = FormatterFactory.getDateTimeFormatter(sc);
97  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
98  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
99  %>
100  <base:page title="<%=title==null ? "Sessions" : title%>" type="<%=mode.getPageType()%>">
101  <base:head scripts="menu.js,table.js" styles="menu.css,table.css,toolbar.css">
102    <ext:scripts context="<%=jspContext%>" />
103    <ext:stylesheets context="<%=jspContext%>" />
104    <script language="JavaScript">
105    var submitPage = 'index.jsp';
106    var formId = 'sessions';
107    function viewItem(itemId)
108    {
109      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
110    }
111    function itemOnClick(evt, itemId)
112    {
113      viewItem(itemId);
114    }
115    function configureColumns()
116    {
117      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
118    }
119    function runPlugin(cmd)
120    {
121      Table.submitToPopup(formId, cmd, 750, 500);
122    }
123    function returnSelected()
124    {
125      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
126      window.close();
127    }
128    function presetOnChange()
129    {
130      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
131    }
132    </script>
133  </base:head>
134 
135  <base:body>
136    <h1><%=title==null ? "Sessions" : title%></h1>
137    <div class="content">
138    <tbl:table 
139      id="sessions" 
140      columns="<%=cc.getSetting("columns")%>"
141      sortby="<%=cc.getSortProperty()%>" 
142      direction="<%=cc.getSortDirection()%>"
143      action="index.jsp"
144      sc="<%=sc%>"
145      item="<%=itemType%>"
146      subclass="fulltable"
147      >
148      <tbl:hidden 
149        name="mode" 
150        value="<%=mode.getName()%>" 
151      />
152      <tbl:hidden 
153        name="callback" 
154        value="<%=callback%>" 
155        skip="<%=callback == null%>" 
156      />
157      <tbl:columndef 
158        id="id"
159        clazz="uniquecol"
160        property="id"
161        datatype="int"
162        title="ID"
163        sortable="true"
164        filterable="true"
165        exportable="true"
166      />
167      <tbl:columndef 
168        id="loginTime"
169        property="loginTime"
170        datatype="timestamp"
171        title="Login time"
172        sortable="true" 
173        filterable="true"
174        exportable="true"
175        show="always" 
176      />
177      <tbl:columndef 
178        id="logoutTime"
179        property="logoutTime"
180        datatype="timestamp"
181        title="Logout time"
182        sortable="true" 
183        filterable="true"
184        exportable="true"
185        formatter="<%=dateTimeFormatter%>"
186      />
187      <tbl:columndef 
188        id="impersonated"
189        property="impersonated"
190        datatype="boolean"
191        title="Impersonated"
192        sortable="true" 
193        filterable="true"
194        exportable="true"
195      />
196      <tbl:columndef 
197        id="client"
198        property="client.name"
199        datatype="string"
200        title="Client application" 
201        sortable="true" 
202        filterable="true" 
203        exportable="true"
204      />
205      <tbl:columndef 
206        id="remoteId"
207        property="remoteId"
208        datatype="string"
209        title="Remote ID" 
210        sortable="true" 
211        filterable="true" 
212        exportable="true"
213      />
214      <tbl:columndef 
215        id="comment"
216        property="loginComment"
217        datatype="string"
218        title="Comment" 
219        sortable="true" 
220        filterable="true" 
221        exportable="true"
222      />
223      <tbl:columndef 
224        id="user"
225        property="user.name"
226        datatype="string"
227        title="User" 
228        sortable="true" 
229        filterable="true" 
230        exportable="true"
231      />
232      <tbl:columndef
233        id="permission"
234        title="Permission"
235      />
236      <div class="panelgroup bottomborder">
237        <tbl:toolbar
238          subclass="bottomborder"
239          visible="<%=mode.hasToolbar()%>"
240          >
241          <tbl:button 
242            image="columns.png" 
243            onclick="configureColumns()" 
244            title="Columns&hellip;" 
245            tooltip="Show, hide and re-order columns" 
246          />
247          <tbl:button 
248            image="export.png" 
249            onclick="runPlugin('ExportItems')" 
250            title="Export&hellip;" 
251            tooltip="Export data" 
252            visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
253          />
254          <tbl:button 
255            image="runplugin.png" 
256            onclick="runPlugin('RunListPlugin')" 
257            title="Run plugin&hellip;" 
258            tooltip="Run a plugin" 
259            visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
260          />
261          <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
262            wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
263        </tbl:toolbar>
264        <tbl:panel>
265          <tbl:presetselector 
266            onchange="presetOnChange()"
267          />
268          <tbl:navigator
269            page="<%=cc.getPage()%>" 
270            rowsperpage="<%=cc.getRowsPerPage()%>" 
271            totalrows="<%=sessions == null ? 0 : sessions.getTotalCount()%>" 
272            visible="<%=mode.hasNavigator()%>"
273          />
274        </tbl:panel>
275      </div>
276      <tbl:data>
277        <tbl:headers>
278          <tbl:headerrow>
279            <tbl:header colspan="3" />
280            <tbl:columnheaders />
281          </tbl:headerrow>
282          <tbl:headerrow>
283            <tbl:header subclass="index" />
284            <tbl:header 
285              subclass="check" 
286              visible="<%=mode.hasCheck()%>"
287              ><base:icon 
288                image="check_uncheck.png" 
289                tooltip="Check/uncheck all" 
290                onclick="Forms.checkUncheck(document.forms[formId])" 
291              /></tbl:header>
292            <tbl:header 
293              subclass="check" 
294              visible="<%=mode.hasRadio()%>"
295              />
296            <tbl:header 
297              subclass="icons" 
298              visible="<%=mode.hasIcons()%>"
299              />
300            <tbl:propertyfilter />
301          </tbl:headerrow>
302        </tbl:headers>
303        <tbl:rows>
304          <%
305          if (cc.getMessage() != null)
306          {
307            %>
308            <tbl:panel clazz="messagepanel">
309              <div class="messagecontainer error"><%=cc.getMessage()%></div>
310            </tbl:panel>
311            <%
312            cc.setMessage(null);
313          }
314          int index = cc.getPage()*cc.getRowsPerPage();
315          int selectedItemId = cc.getId();
316          if (sessions != null)
317          {
318            String tooltip = mode.isSelectionMode() ?
319              "Select this item" : "View this item";
320            while (sessions.hasNext())
321            {
322              Session item = sessions.next();
323              int itemId = item.getId();
324              String name = "TODO";
325              index++;
326              numListed++;
327              %>
328              <tbl:row>
329                <tbl:header 
330                  clazz="index"
331                  ><%=index%></tbl:header>
332                <tbl:header 
333                  clazz="check" 
334                  visible="<%=mode.hasCheck()%>"
335                  ><input 
336                    type="checkbox" 
337                    name="<%=itemId%>" 
338                    value="<%=itemId%>" 
339                    title="<%=name%>" 
340                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
341                  ></tbl:header>
342                <tbl:header 
343                  clazz="check" 
344                  visible="<%=mode.hasRadio()%>"
345                  ><input 
346                    type="radio" 
347                    name="item_id" 
348                    value="<%=itemId%>" 
349                    title="<%=name%>" 
350                    <%=selectedItemId == itemId ? "checked" : ""%>
351                  ></tbl:header>
352                <tbl:header 
353                  clazz="icons" 
354                  visible="<%=mode.hasIcons()%>"
355                  >&nbsp;</tbl:header>
356                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
357                <tbl:cell column="loginTime"><div class="link" onclick="itemOnClick(event, <%=itemId%>)" 
358                  title="<%=tooltip%>"><%=dateTimeFormatter.format(item.getLoginTime())%></div></tbl:cell>
359                <tbl:cell column="logoutTime" value="<%=item.getLogoutTime()%>" />
360                <tbl:cell column="impersonated"><%=item.getImpersonated()%></tbl:cell>
361                <tbl:cell column="remoteId"><%=HTML.encodeTags(item.getRemoteId())%></tbl:cell>
362                <tbl:cell column="comment"><%=HTML.encodeTags(item.getLoginComment())%></tbl:cell>
363                <tbl:cell column="user"
364                  ><base:propertyvalue 
365                    item="<%=item%>" 
366                    property="user"
367                    enableEditLink="<%=mode.hasEditLink()%>" 
368                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
369                  /></tbl:cell>
370                <tbl:cell column="client"
371                  ><base:propertyvalue 
372                    item="<%=item%>" 
373                    property="client"
374                    enableEditLink="<%=mode.hasEditLink()%>" 
375                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
376                  /></tbl:cell>
377                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
378            </tbl:row>
379            <%
380            }
381          }
382          if (numListed == 0)
383          {
384            %>
385            <tbl:panel clazz="messagepanel">
386              <div class="messagecontainer note">
387              <%=sessions == null || sessions.getTotalCount() == 0 ? "No sessions were found" : "No sessions on this page. Please select another page!" %>
388              </div>
389            </tbl:panel>
390            <%
391          }
392          %>
393        </tbl:rows>
394      </tbl:data>
395    </tbl:table>
396    </div>
397   
398    <base:buttongroup subclass="dialogbuttons">
399      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
400      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
401      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
402    </base:buttongroup>
403   
404  </base:body>
405  </base:page>
406  <%
407}
408finally
409{
410  if (sessions != null) sessions.close();
411  if (dc != null) dc.close();
412}
413%>
Note: See TracBrowser for help on using the repository browser.