source: trunk/www/include/menu.jsp @ 5708

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

References #1590: Documentation cleanup

Biomaterials section. Added empty sections for biomaterial lists and bioplate events that hopefully will be written some day. All screen shots must be updated.

Fixed spelling of "bioplate" in a lot of jsp scripts.

Display well coordinates without brackets. A1 instead of [A,1].

Fixed an issue with the regular expression used to link different help texts in the web client.

Reorganized the biomaterial lims menu so that it is consistent with the documentation.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 47.8 KB
Line 
1<%-- $Id: menu.jsp 5708 2011-08-25 12:48:46Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg, Gregory Vincic
4  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson, Gregory Vincic
5  Copyright (C) 2007 Nicklas Nordborg
6
7  This file is part of BASE - BioArray Software Environment.
8  Available at http://base.thep.lu.se/
9
10  BASE is free software; you can redistribute it and/or
11  modify it under the terms of the GNU General Public License
12  as published by the Free Software Foundation; either version 3
13  of the License, or (at your option) any later version.
14
15  BASE is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU General Public License for more details.
19
20  You should have received a copy of the GNU General Public License
21  along with BASE. If not, see <http://www.gnu.org/licenses/>.
22  ------------------------------------------------------------------
23
24  This page is included from the <base:page> taglib to display the
25  meny.
26
27  @param name
28    The name of the menu to display:
29    - standard: The standard menu for a logged in user
30    - login: The menu used on pages where no user is logged in
31    - exception: Used on error pages, does not display a menu at all
32    - auto: Will display either the "standard" or "login" menu
33
34  @author Nicklas
35  @version 2.0
36--%>
37<%@ page pageEncoding="UTF-8" session="false"
38  import="net.sf.basedb.core.SessionControl"
39  import="net.sf.basedb.core.DbControl"
40  import="net.sf.basedb.core.BasicItem"
41  import="net.sf.basedb.core.Nameable"
42  import="net.sf.basedb.core.Permission"
43  import="net.sf.basedb.core.Item"
44  import="net.sf.basedb.core.ItemContext"
45  import="net.sf.basedb.core.User"
46  import="net.sf.basedb.core.Project"
47  import="net.sf.basedb.core.BioAssaySet"
48  import="net.sf.basedb.core.Client"
49  import="net.sf.basedb.core.StringUtil"
50  import="net.sf.basedb.core.ItemQuery"
51  import="net.sf.basedb.core.Include"
52  import="net.sf.basedb.core.ItemResultList"
53  import="net.sf.basedb.core.Type"
54  import="net.sf.basedb.core.query.Orders"
55  import="net.sf.basedb.core.query.Order"
56  import="net.sf.basedb.core.query.Hql"
57  import="net.sf.basedb.core.query.Restrictions"
58  import="net.sf.basedb.core.query.Expressions"
59  import="net.sf.basedb.clients.web.Base"
60  import="net.sf.basedb.clients.web.util.HTML"
61  import="net.sf.basedb.clients.web.resources.Bundle"
62  import="net.sf.basedb.util.Values"
63  import="net.sf.basedb.util.resources.ResourceBundleWrapper"
64  import="net.sf.basedb.util.resources.ResourceBundleFactory"
65  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
66  import="net.sf.basedb.clients.web.extensions.JspContext"
67  import="net.sf.basedb.clients.web.extensions.menu.MenuItemAction"
68  import="net.sf.basedb.util.extensions.Extension"
69  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
70  import="net.sf.basedb.util.extensions.ActionIterator"
71  import="java.util.HashMap"
72  import="java.util.Map"
73  import="java.util.ArrayList"
74  import="java.util.LinkedList"
75  import="java.util.List"
76  import="java.util.Arrays"
77  import="java.util.Iterator"
78  import="java.util.Set"
79  import="java.util.HashSet"
80%>
81<%@ taglib prefix="m" uri="/WEB-INF/menu.tld" %>
82<%
83final SessionControl sc = Base.getSessionControl(pageContext, false);
84final String ID = sc == null ? "" : sc.getId();
85String name = Values.getString(request.getParameter("name"), "login");
86final String root = request.getContextPath()+"/";
87if ("exception".equals(name) && sc != null && sc.isLoggedIn()) name = "standard";
88
89final ResourceBundleWrapper common = ResourceBundleFactory.getResourceBundle(Bundle.COMMON, sc);
90final ResourceBundleWrapper menu = ResourceBundleFactory.getResourceBundle(Bundle.MENU, sc);
91
92if ("login".equals(name))
93{
94}
95else if ("projects".equals(name) && sc != null && sc.isLoggedIn())
96{
97  // Projects menu
98  int activeProjectId = sc.getActiveProjectId();
99  %>
100  <m:menu 
101    id="projects"
102    style="display: none"
103    >
104    <%
105    final DbControl dc = sc.newDbControl();
106    boolean menuSeparatorBeforeDeactivate = true;
107    try
108    {
109      List<Project> projects = new ArrayList<Project>();
110      int lastRecentActiveIndex = 0;
111      // 1. Load the most recently active projects
112      String tmp = sc.getUserClientSetting("projects.recentActive");
113      Set<Integer> recentProjects = new HashSet<Integer>();
114      if (tmp != null)
115      {
116        for (String id : tmp.split(":"))
117        {
118          try
119          {
120            Project p = Project.getById(dc, Values.getInt(id));
121            if (!p.isRemoved())
122            {
123              recentProjects.add(p.getId());
124              projects.add(p);
125              lastRecentActiveIndex++;
126            }
127          }
128          catch (RuntimeException ex)
129          {}
130        }
131      }
132     
133      // 2. Load more projects
134      final ItemContext projectCC = sc.getCurrentContext(Item.PROJECT);
135      final ItemQuery<Project> projectQuery = Project.getQuery();
136      projectQuery.include(Include.MINE, Include.SHARED);
137      projectQuery.restrict(Restrictions.not(Restrictions.in(Hql.property("id"), Expressions.parameter("projects"))));
138      projectQuery.setParameter("projects", recentProjects, Type.INT);
139      Order projectSortOrder = projectCC.getSortOrder();
140      if (projectSortOrder != null) projectQuery.order(projectSortOrder);
141      projectQuery.order(Orders.asc(Hql.property("name")));
142      projectQuery.setCacheResult(true);
143      projects.addAll(projectQuery.list(dc));
144      boolean breakAt15 = projects.size() > 16;
145      int index = 0;
146      String thisIsTheActiveProject = menu.getString("activeproject.tooltip");
147      String thisIsNotTheActiveProject = menu.getString("inactiveproject.tooltip");
148      if (lastRecentActiveIndex > 0)
149      {
150        %>
151        <m:menuitem 
152          title="<%=menu.getString("recentprojects.title")%>" 
153          style="font-weight: bold; color: #000000; background: #e8e8e8;" 
154          enabled="false" 
155        />
156        <m:menuseparator />
157        <%
158      }
159      Set<Integer> shownProjects = new HashSet<Integer>();
160      for (Project p : projects)
161      {
162        if (index == 15 && breakAt15) break;
163        index++;
164        int projectId = p.getId();
165        boolean active = activeProjectId == projectId;
166        String prefix = index <= lastRecentActiveIndex ? index + ". " : "";
167        shownProjects.add(p.getId());
168        String link = active ? 
169          "Menu.openUrl('"+root+"my_base/projects/index.jsp?ID="+ID+"&cmd=ViewItem&item_id=" + projectId + "')" : 
170          "Main.openPopup('"+root+"my_base/projects/set_active.jsp?ID="+ID+"&project_id="+p.getId()+"', 'ActivateProject', 300, 140)";
171        %>
172        <m:menuitem
173          title="<%=prefix + HTML.encodeTags(p.getName())%>"
174          style="<%=active ? "color: #000000; font-weight: bold;" : null %>"
175          onclick="<%=link%>"
176          icon="<%=active ? "checkedmenu.gif" : null%>"
177          tooltip="<%=active ? thisIsTheActiveProject : thisIsNotTheActiveProject%>"
178        />
179        <%
180        if (index == lastRecentActiveIndex)
181        {
182          %>
183          <m:menuseparator />
184          <%
185          menuSeparatorBeforeDeactivate = false;
186        }
187        else
188        {
189          menuSeparatorBeforeDeactivate = true;
190        }
191      }
192      if (breakAt15)
193      {
194        int more = projects.size() - 15;
195        %>
196        <m:menuitem 
197          title="<%="…" + menu.getString("moreprojects.title", Integer.toString(more))%>"
198          onclick="<%="Menu.openUrl('"+root+"my_base/projects/index.jsp?ID="+ID+"&cmd=UpdateContext&tmpfilter:INT:id=<>"+Values.getString(shownProjects, "|", true)+"')"%>"
199          tooltip="<%=menu.getString("moreprojects.tooltip")%>"
200        />
201        <%
202      }
203    }
204    catch (Throwable t)
205    {
206      t.printStackTrace();
207      menuSeparatorBeforeDeactivate = false;
208      %>
209      <m:menuseparator />
210      <m:menuitem 
211        title="<%=menu.getString("projects.error.title")%>" 
212        tooltip="<%=menu.getString("projects.error.tooltip", t.getMessage())%>"
213        enabled="false"
214        icon="error.gif"
215      />
216      <%
217    }
218    finally
219    {
220      if (dc != null) dc.close();
221    }
222    if (menuSeparatorBeforeDeactivate)
223    {
224      %>
225      <m:menuseparator />
226      <%
227    }
228    %>
229    <m:menuitem
230      title="<%="<i>- " + menu.getString("noactiveproject.title") + " -</i>"%>"
231      onclick="<%="Main.openPopup('"+root+"my_base/projects/set_active.jsp?ID="+ID+"', 'ActivateProject', 300, 140)"%>"
232      icon="<%=activeProjectId == 0 ? "checkedmenu.gif" : null%>"
233      enabled="<%=activeProjectId != 0%>"
234      tooltip="<%=menu.getString("noactiveproject.tooltip", activeProjectId == 0)%>"
235    />
236  </m:menu>
237  <%
238}
239else if ("recentItems".equals(name) && sc != null && sc.isLoggedIn())
240{
241  // Recently used items menu
242  String stickyItems = Values.getString(sc.getUserClientSetting("menu.mostRecent"), 
243    "EXPERIMENT:BIOASSAYSET:TRANSFORMATION");
244  boolean loadNames = Values.getBoolean(sc.getUserClientSetting("menu.mostRecent.loadNames"), 
245    true);
246  String recentItems = sc.getUserClientSetting("menu.mostRecent.viewed");
247  DbControl dc = loadNames ? sc.newDbControl() : null;
248  try
249  {
250    %>
251    <m:menu
252      id="mostRecent"
253      style="display: none;"
254      >
255      <%
256      int numItems = 0;
257      // Recently viewed items
258      List<String> recentlyViewed = recentItems == null ? 
259        new ArrayList<String>() : Arrays.asList(recentItems.split(":"));
260      if (recentlyViewed.size() > 0)
261      {
262        %>
263        <m:menuitem 
264          title="<%=menu.getString("recentitems.title")%>" 
265          style="font-weight: bold; color: #000000; background: #e8e8e8;" 
266          enabled="false" 
267        />
268        <m:menuseparator />
269        <%
270        for (String recent : recentlyViewed)
271        {
272          try
273          {
274            String[] tmp = recent.split("=");
275            Item itemType = Item.valueOf(tmp[0]);
276            String itemTextKey = "item." + itemType.name().toLowerCase();
277            String itemText = common.getString(itemTextKey);
278            if (itemText == itemTextKey) itemText = itemType.toString();
279            int itemId = Values.getInt(tmp[1], 0);
280            if (itemId != 0)
281            {
282              String shortName = "";
283              String fullName = "";
284              if (loadNames)
285              {
286                try
287                {
288                  BasicItem item = itemType.getById(dc, itemId);
289                  fullName = ((Nameable)item).getName();
290                  shortName = HTML.encodeTags(StringUtil.trimString(fullName, 35));
291                }
292                catch (Throwable t)
293                {
294                  continue;
295                }
296              }
297              else
298              {
299                fullName = itemText + "; id=" + itemId;
300                shortName = itemText + " (id=" + itemId + ")";
301              }
302              numItems++;
303              %>
304              <m:menuitem
305                title="<%=numItems + ". " + shortName%>"
306                onclick="<%="Main.viewOrEditItem('" + ID + "', '" + itemType.name() + "', " + itemId + ")"%>"
307                tooltip="<%=menu.getString("gotorecentitem.tooltip", fullName, itemText)%>"
308              />
309              <%
310            }
311          }
312          catch (Throwable t)
313          {}
314        }
315      }
316      if (stickyItems != null && stickyItems.length() > 0)
317      {
318        int numSticky = 0;
319        if (numItems > 0)
320        {
321          %>
322          <m:menuseparator />
323          <%
324        }
325        %>
326        <m:menuitem 
327          title="<%=menu.getString("stickyitems.title")%>" 
328          style="font-weight: bold; color: #000000; background: #e8e8e8;" 
329          enabled="false" 
330        />
331        <m:menuseparator />
332        <%
333        // Sticky items
334        for (String recentItem : stickyItems.split(":"))
335        {
336          try
337          {
338            BasicItem item = null;
339            Item itemType = Item.valueOf(recentItem);
340            ItemContext cc = sc.getCurrentContext(itemType);
341            String itemTextKey = "item." + itemType.name().toLowerCase();
342            String itemText = common.getString(itemTextKey);
343            if (itemText == itemTextKey) itemText = itemType.toString();
344            if (cc.getId() != 0)
345            {
346              String shortName = "";
347              String fullName = "";
348              if (loadNames)
349              {
350                try
351                {
352                  item = itemType.getById(dc, cc.getId());
353                  fullName = ((Nameable)item).getName();
354                  shortName = ": " + HTML.encodeTags(StringUtil.trimString(fullName, 30));
355                }
356                catch (Throwable t)
357                {
358                  continue;
359                }
360              }
361              else
362              {
363                fullName = itemText + "; id=" + cc.getId();
364                shortName = " (id=" + cc.getId() + ")";
365              }
366              numItems++;
367              numSticky++;
368              %>
369              <m:menuitem
370                title="<%=itemText + shortName%>"
371                onclick="<%="Main.viewOrEditItem('" + ID + "', '" + itemType.name() + "', " + cc.getId() + ")"%>"
372                tooltip="<%=menu.getString("gotorecentitem.tooltip", fullName, itemText)%>"
373              />
374              <%
375              if (itemType == Item.BIOASSAYSET)
376              {
377                // Add menu for Experiment explorer as well
378                %>
379                <m:menuitem
380                  title="<%=menu.getString("experimentexplorer.title", shortName)%>"
381                  onclick="<%="location.href = '"+root+"views/experiments/explorer/view/index.jsp?ID=" + ID + "&bioassayset_id="+cc.getId()+"'"%>"
382                  tooltip="<%=menu.getString("experimentexplorer.tooltip")%>"
383                  visible="<%=item == null || ((BioAssaySet)item).getNumSpots() > 0 %>"
384                />
385                <%
386              }
387            }
388          }
389          catch (Throwable t)
390          {}
391        }
392        if (numSticky == 0)
393        {
394          %>
395          <m:menuitem 
396            title="<%="<i>- " + menu.getString("nostickyitems.title") + " -</i>"%>"
397            enabled="false"
398          />
399          <%
400        }
401      }
402      %>
403      <m:menuseparator />
404      <m:menuitem 
405        title="<%=menu.getString("recentoptions.title") + "…"%>" 
406        onclick="<%="Main.openPopup('"+root+"my_base/user/preferences.jsp?ID="+ID+"&page=mostRecent', 'Preferences', 500, 400);"%>"
407        tooltip="<%=menu.getString("recentoptions.tooltip")%>" 
408      />
409    </m:menu>
410    <%
411  }
412  finally
413  {
414    if (dc != null) dc.close();
415  }
416}
417else if ("standard".equals(name))
418{
419  final DbControl dc = sc.newDbControl();
420  StringBuilder fillText = new StringBuilder();
421  try
422  {
423    Project activeProject = sc.getActiveProjectId() == 0 ? null : Project.getById(dc, sc.getActiveProjectId());
424    if (activeProject == null)
425    {
426      fillText.append("<img src=\""+root+"images/no_active_project.gif\" border=\"0\">&nbsp;");
427      fillText.append("<a href=\"javascript:void(0)\" style=\"color:#FF0000;\" title=\"" + menu.getString("menu.projects.tooltip.0") + "\"");
428    }
429    else
430    {
431      fillText.append("<img src=\""+root+"images/project.gif\" border=\"0\">&nbsp;");
432      fillText.append("<a href=\"javascript:void(0)\" title=\"" + menu.getString("menu.projects.tooltip.1") + "\"");
433    }
434   
435    fillText.append(" onclick=\"Menu.toggleTopMenu(document.getElementById('projects'), event.clientX-50, event.clientY); event.cancelBubble = true;\">");
436    fillText.append(activeProject == null ? "<i>- " + menu.getString("noactiveproject.title") + " -</i>" : HTML.encodeTags(activeProject.getName()));
437    fillText.append(" <img src=\""+root+"images/sort_asc.gif\" border=\"0\"></a><span class=\"menuseparator\">&nbsp;&nbsp;</span>");
438   
439    fillText.append("<a href=\"javascript:void(0)\" title=\"" + menu.getString("menu.refresh.tooltip") + "\"");
440    fillText.append(" onclick=\"location.reload()\">");
441    fillText.append("<img src=\""+root+"images/refresh.gif\" border=\"0\"></a><span class=\"menuseparator\">&nbsp;&nbsp;</span>");
442   
443    fillText.append("<a href=\"javascript:void(0)\" title=\"" + menu.getString("menu.recentitems.tooltip") + "\"");
444    fillText.append(" onclick=\"Menu.toggleTopMenu(document.getElementById('mostRecent'), event.clientX-200, event.clientY); event.cancelBubble = true;\">");
445    fillText.append(" <img src=\""+root+"images/recent.png\" border=\"0\"><img src=\""+root+"images/sort_asc.gif\" border=\"0\"></a><span class=\"menuseparator\">&nbsp;&nbsp;</span>");
446   
447    User user = User.getById(dc, sc.getLoggedInUserId());
448    fillText.append("<img src=\""+root+"images/take_ownership.png\" border=\"0\"> <a href=\"javascript:void(0)\" title=\"" + menu.getString("menu.user.tooltip") + "\"");
449    fillText.append(" onclick=\"javascript:Menu.toggleTopMenu(document.getElementById('switchuser'), event.clientX-100, event.clientY); event.cancelBubble = true;\">");
450    fillText.append(HTML.encodeTags(user.getLogin()));
451    fillText.append(" (").append(user.getName()).append(") <img src=\""+root+"images/sort_asc.gif\" border=\"0\"></a>");
452    %>
453    <%
454    // Permission settings
455    final boolean hasFiles              = !sc.hasPermission(Permission.DENIED, Item.FILE);
456    final boolean createFiles           =  sc.hasPermission(Permission.CREATE, Item.FILE);
457    final boolean hasFileServers        = !sc.hasPermission(Permission.DENIED, Item.FILESERVER);
458
459    final boolean hasProjects           = !sc.hasPermission(Permission.DENIED, Item.PROJECT); 
460    final boolean createProjects        =  sc.hasPermission(Permission.CREATE, Item.PROJECT); 
461    final boolean hasPermissionTemplates = !sc.hasPermission(Permission.DENIED, Item.PERMISSIONTEMPLATE); 
462
463    final boolean hasMessages           = !sc.hasPermission(Permission.DENIED, Item.MESSAGE); 
464    final boolean createMessages        =  sc.hasPermission(Permission.CREATE, Item.MESSAGE); 
465
466    final boolean hasPhysicalBioAssays  = !sc.hasPermission(Permission.DENIED, Item.PHYSICALBIOASSAY); 
467    final boolean hasDerivedBioAssays   = !sc.hasPermission(Permission.DENIED, Item.DERIVEDBIOASSAY); 
468
469    final boolean hasRawBioAssays       = !sc.hasPermission(Permission.DENIED, Item.RAWBIOASSAY); 
470    final boolean createRawBioAssays    =  sc.hasPermission(Permission.CREATE, Item.RAWBIOASSAY); 
471    final boolean hasExperiments        = !sc.hasPermission(Permission.DENIED, Item.EXPERIMENT); 
472    final boolean createExperiments     =  sc.hasPermission(Permission.CREATE, Item.EXPERIMENT); 
473    final boolean hasFormulas           = !sc.hasPermission(Permission.DENIED, Item.FORMULA); 
474    final boolean createFormulas        =  sc.hasPermission(Permission.CREATE, Item.FORMULA); 
475   
476    final boolean hasReporters          = !sc.hasPermission(Permission.DENIED, Item.REPORTER); 
477    final boolean hasReporterLists      = !sc.hasPermission(Permission.DENIED, Item.REPORTERLIST); 
478    final boolean createReporters       =  sc.hasPermission(Permission.CREATE, Item.REPORTER); 
479    final boolean hasJobs               = !sc.hasPermission(Permission.DENIED, Item.JOB); 
480    final boolean hasSessions           = !sc.hasPermission(Permission.DENIED, Item.SESSION); 
481    %>
482    <m:menu
483      id="view"
484      style="display: none"
485      >
486      <m:menuitem
487        title="<%=menu.getString("home.title")%>"
488        tooltip="<%=menu.getString("home.tooltip")%>" 
489        onclick="<%="Menu.openUrl('"+root+"my_base/index.jsp?ID="+ID+"')"%>" 
490      />
491      <m:menuitem
492        title="<%=menu.getString("allitems.title")%>"
493        tooltip="<%=menu.getString("allitems.tooltip")%>"
494        onclick="<%="Menu.openUrl('"+root+"views/items/index.jsp?ID="+ID+"')"%>"
495      />
496      <m:menuitem
497        title="<%=menu.getString("trashcan.title")%>"
498        tooltip="<%=menu.getString("trashcan.tooltip")%>"
499        onclick="<%="Menu.openUrl('"+root+"views/trashcan/index.jsp?ID="+ID+"')"%>"
500      />
501      <m:menuseparator />
502      <m:menuitem 
503        title="<%=common.getString("item.file+")%>" 
504        onclick="<%="Menu.openUrl('"+root+"filemanager/index.jsp?ID="+ID+"')"%>" 
505        tooltip="<%=menu.getString("files.tooltip", hasFiles)%>" 
506        enabled="<%=hasFiles%>"
507      />
508      <m:menuitem 
509        title="<%=common.getString("item.fileserver+")%>" 
510        onclick="<%="Menu.openUrl('"+root+"filemanager/fileservers/index.jsp?ID="+ID+"')"%>" 
511        tooltip="<%=menu.getString("fileservers.tooltip", hasFileServers)%>" 
512        enabled="<%=hasFileServers%>"
513      />
514      <m:menuitem
515        title="<%=common.getString("item.project+")%>"
516        onclick="<%="Menu.openUrl('"+root+"my_base/projects/index.jsp?ID="+ID+"')"%>"
517        tooltip="<%=menu.getString("projects.tooltip", hasProjects)%>"
518        enabled="<%=hasProjects%>"
519      />
520      <m:menuitem
521        title="<%=common.getString("item.permissiontemplate+")%>"
522        onclick="<%="Menu.openUrl('"+root+"views/permissiontemplates/index.jsp?ID="+ID+"')"%>"
523        tooltip="<%=menu.getString("permissiontemplates.tooltip", hasPermissionTemplates)%>"
524        enabled="<%=hasPermissionTemplates%>"
525      />
526      <m:menuitem 
527        title="<%=common.getString("item.message+")%>" 
528        onclick="<%="Menu.openUrl('"+root+"my_base/messages/index.jsp?ID="+ID+"')"%>" 
529        tooltip="<%=menu.getString("messages.tooltip", hasMessages)%>"
530        enabled="<%=hasMessages%>"
531      />
532      <m:menuitem 
533        title="<%=common.getString("item.job+")%>" 
534        onclick="<%="Menu.openUrl('"+root+"views/jobs/index.jsp?ID="+ID+"')"%>" 
535        tooltip="<%=menu.getString("jobs.tooltip", hasJobs)%>"
536        enabled="<%=hasJobs%>"
537      />
538      <m:menuitem 
539        title="<%=common.getString("item.session+")%>" 
540        onclick="<%="Menu.openUrl('"+root+"views/sessions/index.jsp?ID="+ID+"')"%>" 
541        tooltip="<%=menu.getString("sessions.tooltip", hasSessions)%>"
542        enabled="<%=hasSessions%>"
543      />
544      <m:menuseparator />
545      <m:menuitem
546        title="<%=common.getString("item.physicalbioassay+")%>"
547        onclick="<%="Menu.openUrl('"+root+"views/physicalbioassays/index.jsp?ID="+ID+"')"%>"
548        tooltip="<%=menu.getString("physicalbioassays.tooltip", hasPhysicalBioAssays)%>"
549        enabled="<%=hasPhysicalBioAssays%>"
550      />
551      <m:menuitem
552        title="<%=common.getString("item.derivedbioassay+")%>"
553        onclick="<%="Menu.openUrl('"+root+"views/derivedbioassays/index.jsp?ID="+ID+"')"%>"
554        tooltip="<%=menu.getString("derivedbioassays.tooltip", hasDerivedBioAssays)%>"
555        enabled="<%=hasDerivedBioAssays%>"
556      />
557      <m:menuitem
558        title="<%=common.getString("item.rawbioassay+")%>"
559        onclick="<%="Menu.openUrl('"+root+"views/rawbioassays/index.jsp?ID="+ID+"')"%>"
560        tooltip="<%=menu.getString("rawbioassays.tooltip", hasRawBioAssays)%>"
561        enabled="<%=hasRawBioAssays%>"
562      />
563      <m:menuitem
564        title="<%=common.getString("item.experiment+")%>"
565        onclick="<%="Menu.openUrl('"+root+"views/experiments/index.jsp?ID="+ID+"')"%>"
566        tooltip="<%=menu.getString("experiments.tooltip", hasExperiments)%>"
567        enabled="<%=hasExperiments%>"
568      />
569      <m:menuitem
570        title="<%=common.getString("item.formula+")%>"
571        onclick="<%="Menu.openUrl('"+root+"views/formulas/index.jsp?ID="+ID+"')"%>"
572        tooltip="<%=menu.getString("formulas.tooltip", hasFormulas)%>"
573        enabled="<%=hasFormulas%>"
574      />
575      <m:menuseparator />
576      <m:menuitem
577        title="<%=common.getString("item.reporter+")%>"
578        onclick="<%="Menu.openUrl('"+root+"views/reporters/index.jsp?ID="+ID+"')"%>"
579        tooltip="<%=menu.getString("reporters.tooltip", hasReporters)%>"
580        enabled="<%=hasReporters%>"
581      />
582      <m:menuitem
583        title="<%=common.getString("item.reporterlist+")%>"
584        onclick="<%="Menu.openUrl('"+root+"views/reporterlists/index.jsp?ID="+ID+"')"%>"
585        tooltip="<%=menu.getString("reporterlists.tooltip", hasReporterLists)%>"
586        enabled="<%=hasReporterLists%>"
587      />
588    </m:menu>
589
590    <m:menu 
591      id="base" 
592      style="display: none"
593      >
594      <m:submenu 
595        subid="projects" 
596        title="<%=menu.getString("menu.projects")%>"
597        tooltip="<%=menu.getString("menu.projects.tooltip", activeProject != null)%>"
598        enabled="<%=hasProjects%>"
599      />
600      <m:menuseparator />
601      <m:menuitem 
602        title="<%=menu.getString("contactinfo.title") + "…"%>" 
603        onclick="<%="Main.openPopup('"+root+"my_base/user/settings.jsp?ID="+ID+"&page=contact', 'Settings', 600, 400);"%>" 
604        tooltip="<%=menu.getString("contactinfo.tooltip")%>" 
605      />
606      <m:menuitem 
607        title="<%=menu.getString("password.title") + "…"%>" 
608        onclick="<%="Main.openPopup('"+root+"my_base/user/settings.jsp?ID="+ID+"&page=password', 'Settings', 600, 400);"%>" 
609        tooltip="<%=menu.getString("password.tooltip")%>" 
610      />
611      <m:menuitem 
612        title="<%=menu.getString("other.title") + "…"%>" 
613        onclick="<%="Main.openPopup('"+root+"my_base/user/settings.jsp?ID="+ID+"&page=other', 'Settings', 600, 400);"%>" 
614        tooltip="<%=menu.getString("other.tooltip")%>" 
615      />
616      <m:menuseparator />
617      <m:menuitem 
618        title="<%=menu.getString("preferences.title") + "…"%>" 
619        onclick="<%="Main.openPopup('"+root+"my_base/user/preferences.jsp?ID="+ID+"', 'Preferences', 500, 400);"%>" 
620        tooltip="<%=menu.getString("preferences.tooltip")%>" 
621      />
622      <m:menuitem 
623        title="<%=menu.getString("reloadpermissions.title") + "…"%>" 
624        onclick="<%="Main.openPopup('"+root+"my_base/user/submit_user.jsp?ID="+ID+"&cmd=ReloadPermissions', 'ReloadPermissions', 300, 200);"%>" 
625        tooltip="<%=menu.getString("reloadpermissions.tooltip")%>" 
626      />
627      <m:menuitem 
628        title="<%=menu.getString("resetlistsettings.title") + "…"%>" 
629        onclick="<%="Main.openPopup('"+root+"my_base/user/reset_filters.jsp?ID="+ID+"', 'ResetFilter', 400, 300);"%>" 
630        tooltip="<%=menu.getString("resetlistsettings.tooltip")%>" 
631      />
632      <m:menuseparator />
633      <m:menuitem 
634        title="<%=menu.getString("logout.title") + "…"%>" 
635        onclick="<%="Main.openPopup('"+root+"logout.jsp?ID="+ID+"', 'Logout', 360, 200);"%>"
636        tooltip="<%=menu.getString("logout.tooltip")%>" 
637      />
638    </m:menu>
639
640    <%
641    // BioLIMS - menu
642    final boolean hasTags             = !sc.hasPermission(Permission.DENIED, Item.TAG); 
643    final boolean createTags          =  sc.hasPermission(Permission.CREATE, Item.TAG); 
644
645    final boolean hasBioSources         = !sc.hasPermission(Permission.DENIED, Item.BIOSOURCE); 
646    final boolean createBioSources      =  sc.hasPermission(Permission.CREATE, Item.BIOSOURCE); 
647
648    final boolean hasSamples            = !sc.hasPermission(Permission.DENIED, Item.SAMPLE); 
649    final boolean createSamples         =  sc.hasPermission(Permission.CREATE, Item.SAMPLE);
650
651    final boolean hasExtracts           = !sc.hasPermission(Permission.DENIED, Item.EXTRACT); 
652    final boolean createExtracts        =  sc.hasPermission(Permission.CREATE, Item.EXTRACT); 
653   
654    final boolean hasBioMaterialLists   = !sc.hasPermission(Permission.DENIED, Item.BIOMATERIALLIST);
655   
656    final boolean hasBioPlates      = !sc.hasPermission(Permission.DENIED, Item.BIOPLATE);
657    final boolean createBioPlates   =  sc.hasPermission(Permission.CREATE, Item.BIOPLATE);
658    final boolean hasBioPlateTypes  = !sc.hasPermission(Permission.DENIED, Item.BIOPLATETYPE);
659    final boolean hasBioPlateEventTypes = !sc.hasPermission(Permission.DENIED, Item.BIOPLATEEVENTTYPE);
660    final boolean hasBioLims      =  hasTags || hasBioSources || hasSamples || hasExtracts || 
661                      hasBioMaterialLists || hasBioPlates || 
662                      hasBioPlateTypes || hasBioPlateEventTypes;
663   
664    if (hasBioLims)
665    {
666    %>
667      <m:menu 
668        id="biolims"
669        style="display: none"
670        >
671        <m:menuitem
672          title="<%=common.getString("item.biosource+")%>"
673          onclick="<%="Menu.openUrl('"+root+"biomaterials/biosources/index.jsp?ID="+ID+"')"%>"
674          tooltip="<%=menu.getString("biosources.tooltip", hasBioSources)%>"
675          enabled="<%=hasBioSources%>"
676        />
677        <m:menuitem
678          title="<%=common.getString("item.sample+")%>"
679          onclick="<%="Menu.openUrl('"+root+"biomaterials/samples/index.jsp?ID="+ID+"')"%>"
680          tooltip="<%=menu.getString("samples.tooltip", hasSamples)%>"
681          enabled="<%=hasSamples%>"
682        />
683        <m:menuitem
684          title="<%=common.getString("item.extract+")%>"
685          onclick="<%="Menu.openUrl('"+root+"biomaterials/extracts/index.jsp?ID="+ID+"')"%>"
686          tooltip="<%=menu.getString("extracts.tooltip", hasExtracts)%>"
687          enabled="<%=hasExtracts%>"
688        />
689        <m:menuitem
690          title="<%=common.getString("item.tag+")%>"
691          onclick="<%="Menu.openUrl('"+root+"biomaterials/tags/index.jsp?ID="+ID+"')"%>"
692          tooltip="<%=menu.getString("tags.tooltip", hasTags)%>"
693          enabled="<%=hasTags%>"
694        />
695        <m:menuseparator />
696        <m:menuitem
697          title="<%=common.getString("item.bioplate+")%>"
698          onclick="<%="Menu.openUrl('"+root+"biomaterials/bioplates/index.jsp?ID="+ID+"')"%>"
699          tooltip="<%=menu.getString("bioplates.tooltip", hasBioPlates)%>"
700          enabled="<%=hasBioPlates%>"
701        />
702        <m:menuitem
703          title="<%=common.getString("item.bioplatetype+")%>"
704          onclick="<%="Menu.openUrl('"+root+"biomaterials/bioplatetypes/index.jsp?ID="+ID+"')"%>"
705          tooltip="<%=menu.getString("bioplatetypes.tooltip", hasBioPlateTypes)%>"
706          enabled="<%=hasBioPlateTypes%>"
707        />
708        <m:menuitem
709          title="<%=common.getString("item.bioplateeventtype+")%>"
710          onclick="<%="Menu.openUrl('"+root+"biomaterials/bioplateeventtypes/index.jsp?ID="+ID+"')"%>"
711          tooltip="<%=menu.getString("bioplateeventtypes.tooltip", hasBioPlateEventTypes)%>"
712          enabled="<%=hasBioPlateEventTypes%>"
713        />
714        <m:menuseparator />
715        <m:menuitem
716          title="<%=common.getString("item.biomateriallist+")%>"
717          onclick="<%="Menu.openUrl('"+root+"biomaterials/lists/index.jsp?ID="+ID+"')"%>"
718          tooltip="<%=menu.getString("biomateriallists.tooltip", hasBioMaterialLists)%>"
719          enabled="<%=hasBioMaterialLists%>"
720        />
721      </m:menu>
722    <%
723    }
724   
725    // Array LIMS - menu
726    final boolean hasPlateGeometries = sc.hasPermission(Permission.READ, Item.PLATEGEOMETRY);
727    final boolean hasPlateTypes = !sc.hasPermission(Permission.DENIED, Item.PLATETYPE);
728    final boolean hasPlates = !sc.hasPermission(Permission.DENIED, Item.PLATE);
729    final boolean hasPlateMappings = !sc.hasPermission(Permission.DENIED, Item.PLATEMAPPING);
730    final boolean hasArraySlides = !sc.hasPermission(Permission.DENIED, Item.ARRAYSLIDE);
731    final boolean hasArrayBatches = !sc.hasPermission(Permission.DENIED, Item.ARRAYBATCH);
732    final boolean hasArrayDesigns = !sc.hasPermission(Permission.DENIED, Item.ARRAYDESIGN);
733    final boolean hasLims = hasPlateGeometries || hasPlateTypes || hasPlates || hasPlateMappings || 
734      hasArraySlides || hasArrayBatches || hasArrayDesigns;
735    if (hasLims)
736    {
737      %>
738      <m:menu 
739        id="lims" 
740        style="display: none"
741        >
742        <m:menuitem 
743          title="<%=common.getString("item.plategeometry+")%>" 
744          onclick="<%="Menu.openUrl('"+root+"lims/geometries/index.jsp?ID="+ID+"')"%>" 
745          tooltip="<%=menu.getString("plategeometries.tooltip", hasPlateGeometries)%>" 
746          enabled="<%=hasPlateGeometries%>"
747        />
748        <m:menuitem 
749          title="<%=common.getString("item.platetype+")%>" 
750          onclick="<%="Menu.openUrl('"+root+"lims/platetypes/index.jsp?ID="+ID+"')"%>" 
751          tooltip="<%=menu.getString("platetypes.tooltip", hasPlateTypes)%>" 
752          enabled="<%=hasPlateTypes%>"
753        />
754        <m:menuitem 
755          title="<%=common.getString("item.plate+")%>" 
756          onclick="<%="Menu.openUrl('"+root+"lims/plates/index.jsp?ID="+ID+"')"%>" 
757          tooltip="<%=menu.getString("plates.tooltip", hasPlates)%>" 
758          enabled="<%=hasPlates%>"
759        />
760        <m:menuitem 
761          title="<%=common.getString("item.platemapping+")%>" 
762          onclick="<%="Menu.openUrl('"+root+"lims/platemappings/index.jsp?ID="+ID+"')"%>" 
763          tooltip="<%=menu.getString("platetypes.tooltip", hasPlateTypes)%>" 
764          enabled="<%=hasPlateTypes%>"
765        />
766        <m:menuseparator />
767        <m:menuitem 
768          title="<%=common.getString("item.arraydesign+")%>" 
769          onclick="<%="Menu.openUrl('"+root+"lims/arraydesigns/index.jsp?ID="+ID+"')"%>" 
770          tooltip="<%=menu.getString("arraydesigns.tooltip", hasArrayDesigns)%>" 
771          enabled="<%=hasArrayDesigns%>"
772        />
773        <m:menuitem 
774          title="<%=common.getString("item.arraybatch+")%>" 
775          onclick="<%="Menu.openUrl('"+root+"lims/arraybatches/index.jsp?ID="+ID+"')"%>" 
776          tooltip="<%=menu.getString("arraybatches.tooltip", hasArrayBatches)%>" 
777          enabled="<%=hasArrayBatches%>"
778        />
779        <m:menuitem 
780          title="<%=common.getString("item.arrayslide+")%>" 
781          onclick="<%="Menu.openUrl('"+root+"lims/arrayslides/index.jsp?ID="+ID+"')"%>" 
782          tooltip="<%=menu.getString("arrayslides.tooltip", hasArraySlides)%>" 
783          enabled="<%=hasArraySlides%>"
784        />
785      </m:menu>
786      <%
787    }
788    %>
789    <%
790    // Administrate -> Types menu
791    final boolean hasQuotaTypes = sc.hasPermission(Permission.READ, Item.QUOTATYPE);
792    final boolean hasMimeTypes = sc.hasPermission(Permission.READ, Item.MIMETYPE);
793    final boolean hasAnnotationTypeCategories = !sc.hasPermission(Permission.DENIED, Item.ANNOTATIONTYPECATEGORY);   
794    final boolean hasAnnotationTypes = !sc.hasPermission(Permission.DENIED, Item.ANNOTATIONTYPE);
795    final boolean hasReporterTypes = !sc.hasPermission(Permission.DENIED, Item.REPORTERTYPE);
796    final boolean hasExtraValueTypes = !sc.hasPermission(Permission.DENIED, Item.EXTRAVALUETYPE);
797    final boolean hasQuantities = !sc.hasPermission(Permission.DENIED, Item.QUANTITY);
798    final boolean hasItemSubtypes = sc.hasPermission(Permission.READ, Item.ITEMSUBTYPE);
799    final boolean hasTypes = hasMimeTypes || hasQuotaTypes || 
800      hasAnnotationTypeCategories || hasAnnotationTypes || 
801      hasReporterTypes || hasExtraValueTypes || hasQuantities || hasItemSubtypes;
802    if (hasTypes)
803    {
804      %>
805      <m:menu 
806        id="types" 
807        style="display: none"
808        >
809        <m:menuitem 
810          title="<%=common.getString("item.itemsubtype+")%>" 
811          onclick="<%="Menu.openUrl('"+root+"admin/itemsubtypes/index.jsp?ID="+ID+"')"%>" 
812          tooltip="<%=menu.getString("itemsubtypes.tooltip", hasItemSubtypes)%>" 
813          enabled="<%=hasItemSubtypes%>"
814        />
815        <m:menuseparator />
816        <m:menuitem 
817          title="<%=common.getString("item.annotationtype+")%>" 
818          onclick="<%="Menu.openUrl('"+root+"admin/annotationtypes/index.jsp?ID="+ID+"')"%>" 
819          tooltip="<%=menu.getString("annotationtypes.tooltip", hasAnnotationTypes)%>" 
820          enabled="<%=hasAnnotationTypes%>"
821        />
822        <m:menuitem 
823          title="<%=common.getString("item.annotationtypecategory+")%>" 
824          onclick="<%="Menu.openUrl('"+root+"admin/annotationtypecategories/index.jsp?ID="+ID+"')"%>" 
825          tooltip="<%=menu.getString("annotationtypecategories.tooltip", hasAnnotationTypeCategories)%>" 
826          enabled="<%=hasAnnotationTypeCategories%>"
827        />
828        <m:menuseparator />
829        <m:menuitem 
830          title="<%=common.getString("item.mimetype+")%>" 
831          onclick="<%="Menu.openUrl('"+root+"admin/mimetypes/index.jsp?ID="+ID+"')"%>" 
832          tooltip="<%=menu.getString("mimetypes.tooltip", hasMimeTypes)%>" 
833          enabled="<%=hasMimeTypes%>"
834        />
835        <m:menuitem 
836          title="<%=common.getString("item.quotatype+")%>" 
837          onclick="<%="Menu.openUrl('"+root+"admin/quotatypes/index.jsp?ID="+ID+"')"%>" 
838          tooltip="<%=menu.getString("quotatypes.tooltip", hasQuotaTypes)%>" 
839          enabled="<%=hasQuotaTypes%>"
840        />
841        <m:menuitem 
842          title="<%=common.getString("item.reportertype+")%>" 
843          onclick="<%="Menu.openUrl('"+root+"admin/reportertypes/index.jsp?ID="+ID+"')"%>" 
844          tooltip="<%=menu.getString("reportertypes.tooltip", hasReporterTypes)%>" 
845          enabled="<%=hasReporterTypes%>"
846        />
847        <m:menuitem 
848          title="<%=common.getString("item.extravaluetype+")%>" 
849          onclick="<%="Menu.openUrl('"+root+"admin/extravaluetypes/index.jsp?ID="+ID+"')"%>" 
850          tooltip="<%=menu.getString("extravaluetypes.tooltip", hasExtraValueTypes)%>" 
851          enabled="<%=hasExtraValueTypes%>"
852        />
853        <m:menuseparator />
854        <m:menuitem 
855          title="<%=menu.getString("units+quantities.title")%>" 
856          onclick="<%="Menu.openUrl('"+root+"admin/quantities/index.jsp?ID="+ID+"')"%>" 
857          tooltip="<%=menu.getString("units+quantities.tooltip", hasQuantities)%>" 
858          enabled="<%=hasQuantities%>"
859        />
860      </m:menu>
861      <%
862    }
863    %>
864    <%
865    // Administrate -> Platforms menu
866    final boolean hasPlatforms = sc.hasPermission(Permission.READ, Item.PLATFORM);
867    final boolean hasFileSetMemberTypes = sc.hasPermission(Permission.READ, Item.DATAFILETYPE);
868    final boolean hasTopPlatforms = hasPlatforms || hasFileSetMemberTypes;
869    if (hasTopPlatforms)
870    {
871      %>
872      <m:menu 
873        id="platforms"
874        style="display: none"
875        >
876        <m:menuitem 
877          title="<%=common.getString("item.platform+")%>"
878          onclick="<%="Menu.openUrl('"+root+"admin/platforms/index.jsp?ID="+ID+"')"%>" 
879          tooltip="<%=menu.getString("platforms.tooltip", hasPlatforms)%>"
880          enabled="<%=hasPlatforms%>"
881        />
882        <m:menuitem 
883          title="<%=common.getString("item.datafiletype+")%>"
884          onclick="<%="Menu.openUrl('"+root+"admin/datafiletypes/index.jsp?ID="+ID+"')"%>" 
885          tooltip="<%=menu.getString("datafiletypes.tooltip", hasFileSetMemberTypes)%>"
886          enabled="<%=hasFileSetMemberTypes%>"
887        />
888      </m:menu>
889      <%
890    }
891    %>
892   
893    <%
894    // Plugins menu
895    final boolean hasPluginTypes = !sc.hasPermission(Permission.DENIED, Item.PLUGINTYPE);
896    final boolean hasPluginDefinitions = !sc.hasPermission(Permission.DENIED, Item.PLUGINDEFINITION);
897    final boolean hasPluginConfigurations = !sc.hasPermission(Permission.DENIED, Item.PLUGINCONFIGURATION);
898    final boolean hasJobAgents = sc.hasPermission(Permission.READ, Item.JOBAGENT);
899    final boolean hasPlugins = hasPluginTypes || hasPluginDefinitions || 
900      hasPluginConfigurations || hasJobAgents;
901   
902    if (hasPlugins)
903    {
904      %>
905      <m:menu 
906        id="plugins" 
907        style="display: none"
908        >
909        <m:menuitem
910          title="<%=menu.getString("installedextensions.title")%>"
911          onclick="<%="Menu.openUrl('"+root+"admin/extensions/index.jsp?ID="+ID+"')"%>"
912          tooltip="<%=menu.getString("installedextensions.tooltip")%>"
913        />
914        <m:menuseparator />
915        <m:menuitem 
916          title="<%=menu.getString("plugintypes.title")%>" 
917          onclick="<%="Menu.openUrl('"+root+"admin/plugintypes/index.jsp?ID="+ID+"')"%>" 
918          tooltip="<%=menu.getString("plugintypes.tooltip", hasPluginTypes)%>"
919          enabled="<%=hasPluginTypes%>"
920        />
921        <m:menuitem 
922          title="<%=menu.getString("plugindefinitions.title")%>" 
923          onclick="<%="Menu.openUrl('"+root+"admin/plugindefinitions/index.jsp?ID="+ID+"')"%>" 
924          tooltip="<%=menu.getString("plugindefinitions.tooltip", hasPluginDefinitions)%>"
925          enabled="<%=hasPluginDefinitions%>"
926        />
927        <m:menuitem 
928          title="<%=menu.getString("pluginconfigurations.title")%>" 
929          onclick="<%="Menu.openUrl('"+root+"admin/pluginconfigurations/index.jsp?ID="+ID+"')"%>" 
930          tooltip="<%=menu.getString("pluginconfigurations.tooltip", hasPluginConfigurations)%>"
931          enabled="<%=hasPluginConfigurations%>"
932        />
933        <m:menuseparator />
934        <m:menuitem 
935          title="<%=common.getString("item.jobagent+")%>" 
936          onclick="<%="Menu.openUrl('"+root+"admin/jobagents/index.jsp?ID="+ID+"')"%>" 
937          tooltip="<%=menu.getString("jobagents.tooltip", hasJobAgents)%>"
938          enabled="<%=hasJobAgents%>"
939        />
940      </m:menu>
941      <%
942    }
943    %>
944 
945    <%
946    // Administrate menu
947    final boolean hasUsers = !sc.hasPermission(Permission.DENIED, Item.USER);
948    final boolean hasGroups = !sc.hasPermission(Permission.DENIED, Item.GROUP);
949    final boolean hasRoles = sc.hasPermission(Permission.READ, Item.ROLE);
950    final boolean hasQuota = sc.hasPermission(Permission.READ, Item.QUOTA);
951    final boolean hasSoftware = !sc.hasPermission(Permission.DENIED, Item.SOFTWARE);
952    final boolean hasHardware = !sc.hasPermission(Permission.DENIED, Item.HARDWARE);
953    final boolean hasProtocols = !sc.hasPermission(Permission.DENIED, Item.PROTOCOL);
954    final boolean hasClients = sc.hasPermission(Permission.READ, Item.CLIENT);
955    final boolean hasNews = sc.hasPermission(Permission.READ, Item.NEWS);
956    final boolean hasDiskUsage = sc.hasPermission(Permission.READ, Item.DISKUSAGE);
957    final Client currentClient = Client.getById(dc, sc.getClientId());
958    final boolean hasServer = currentClient.hasPermission(Permission.WRITE);
959
960    final boolean hasAdministrate = 
961      hasUsers || hasGroups || hasRoles || hasQuota || hasTypes || hasPlugins ||
962      hasSoftware || hasHardware || hasProtocols || hasClients || hasNews ||
963      hasDiskUsage || hasServer || hasTopPlatforms;
964
965    if (hasAdministrate)
966    {
967      %>
968      <m:menu 
969        id="administrate" 
970        style="display: none"
971        >
972        <m:menuitem 
973          title="<%=common.getString("item.user+")%>" 
974          onclick="<%="Menu.openUrl('"+root+"admin/users/index.jsp?ID="+ID+"')"%>" 
975          tooltip="<%=menu.getString("users.tooltip", hasUsers)%>"
976          enabled="<%=hasUsers%>"
977        />
978        <m:menuitem 
979          title="<%=common.getString("item.group+")%>" 
980          onclick="<%="Menu.openUrl('"+root+"admin/groups/index.jsp?ID="+ID+"')"%>" 
981          tooltip="<%=menu.getString("groups.tooltip", hasGroups)%>" 
982          enabled="<%=hasGroups%>"
983        />
984        <m:menuitem 
985          title="<%=common.getString("item.role+")%>" 
986          onclick="<%="Menu.openUrl('"+root+"admin/roles/index.jsp?ID="+ID+"')"%>" 
987          tooltip="<%=menu.getString("roles.tooltip", hasRoles)%>" 
988          enabled="<%=hasRoles%>"
989        />
990        <m:menuseparator />
991        <m:submenu 
992          subid="plugins" 
993          title="<%=menu.getString("menu.plugins")%>"
994          tooltip="<%=menu.getString("menu.plugins.tooltip")%>"
995          enabled="<%=hasPlugins%>"
996        />
997        <m:menuseparator />
998        <m:menuitem 
999          title="<%=common.getString("item.quota+")%>" 
1000          onclick="<%="Menu.openUrl('"+root+"admin/quota/index.jsp?ID="+ID+"')"%>" 
1001          tooltip="<%=menu.getString("quota.tooltip", hasQuota)%>" 
1002          enabled="<%=hasQuota%>"
1003        />
1004        <m:menuitem 
1005          title="<%=common.getString("item.software+")%>" 
1006          onclick="<%="Menu.openUrl('"+root+"admin/software/index.jsp?ID="+ID+"')"%>" 
1007          tooltip="<%=menu.getString("software.tooltip", hasSoftware)%>" 
1008          enabled="<%=hasSoftware%>"
1009        />
1010        <m:menuitem 
1011          title="<%=common.getString("item.hardware+")%>" 
1012          onclick="<%="Menu.openUrl('"+root+"admin/hardware/index.jsp?ID="+ID+"')"%>" 
1013          tooltip="<%=menu.getString("hardware.tooltip", hasHardware)%>" 
1014          enabled="<%=hasHardware%>"
1015        />
1016        <m:menuitem 
1017          title="<%=common.getString("item.protocol+")%>" 
1018          onclick="<%="Menu.openUrl('"+root+"admin/protocols/index.jsp?ID="+ID+"')"%>" 
1019          tooltip="<%=menu.getString("protocols.tooltip", hasProtocols)%>" 
1020          enabled="<%=hasProtocols%>"
1021        />
1022        <m:menuitem 
1023          title="<%=common.getString("item.client+")%>" 
1024          onclick="<%="Menu.openUrl('"+root+"admin/clients/index.jsp?ID="+ID+"')"%>" 
1025          tooltip="<%=menu.getString("clients.tooltip", hasClients)%>" 
1026          enabled="<%=hasClients%>"
1027        />
1028        <m:menuitem 
1029          title="<%=common.getString("item.news+")%>" 
1030          onclick="<%="Menu.openUrl('"+root+"admin/news/index.jsp?ID="+ID+"')"%>" 
1031          tooltip="<%=menu.getString("news.tooltip", hasNews)%>" 
1032          enabled="<%=hasNews%>"
1033        />
1034        <m:menuseparator />
1035        <m:submenu 
1036          subid="platforms" 
1037          title="<%=menu.getString("menu.platforms")%>"
1038          tooltip="<%=menu.getString("menu.platforms.tooltip")%>"
1039          enabled="<%=hasTopPlatforms%>"
1040        />
1041        <m:submenu 
1042          subid="types" 
1043          title="<%=menu.getString("menu.types")%>"
1044          tooltip="<%=menu.getString("menu.types.tooltip")%>"
1045          enabled="<%=hasTypes%>"
1046        />
1047        <m:menuseparator />
1048        <m:menuitem 
1049          title="<%=common.getString("item.diskusage+")%>" 
1050          onclick="<%="Menu.openUrl('"+root+"admin/diskusage/index.jsp?ID="+ID+"')"%>" 
1051          tooltip="<%=menu.getString("diskusage.tooltip", hasDiskUsage)%>" 
1052          enabled="<%=hasDiskUsage%>"
1053        />
1054        <m:menuitem 
1055          title="<%=menu.getString("serversettings.title")+"…"%>"
1056          onclick="<%="Main.openPopup('"+root+"admin/server/configure.jsp?ID="+ID+"', 'ServerSettings', 500, 400);"%>"
1057          tooltip="<%=menu.getString("serversettings.tooltip", hasServer)%>"
1058          enabled="<%=hasServer%>"
1059        />
1060        <m:menuitem 
1061          title="<%=menu.getString("broadcast.title")+"…"%>"
1062          onclick="<%="Main.openPopup('"+root+"admin/server/broadcast.jsp?ID="+ID+"', 'BroadcastMessage', 640, 400);"%>"
1063          tooltip="<%=menu.getString("broadcast.tooltip", hasServer)%>"
1064          enabled="<%=hasServer%>"
1065        />
1066        <m:menuitem
1067          title="<%=menu.getString("services.title")%>"
1068          tooltip="<%=menu.getString("services.tooltip", hasServer)%>"
1069          onclick="<%="Menu.openUrl('"+root+"admin/services/index.jsp?ID="+ID+"')"%>"
1070          enabled="<%=hasServer%>"
1071        />
1072      </m:menu>
1073      <%
1074    }
1075    %>
1076    <%
1077    // Help menu
1078    final String helplink = Values.getStringOrNull(sc.getClientDefaultSetting("server.links.help"));
1079    final String faqlink = Values.getStringOrNull(sc.getClientDefaultSetting("server.links.faq"));
1080    final String reportbuglink = Values.getStringOrNull(sc.getClientDefaultSetting("server.links.reportbug"));
1081    %>
1082    <m:menu id="help" style="display: none">
1083      <m:menuitem
1084        visible="<%=HTML.isValidUrl(helplink)%>"
1085        title="<%=menu.getString("menu.help") + "…"%>"
1086        onclick="<%="window.open('"+helplink+"','Help')"%>"
1087      />
1088      <m:menuitem
1089        visible="<%=HTML.isValidUrl(faqlink)%>"
1090        title="<%=menu.getString("faq.title") + "…"%>"
1091        onclick="<%="window.open('"+faqlink+"','FAQ')"%>"
1092        tooltip="<%=menu.getString("faq.tooltip") %>"
1093      />
1094      <m:menuseparator />
1095
1096      <m:menuitem
1097        title="<%=menu.getString("about.title") + "…"%>"
1098        onclick="<%="Main.openPopup('"+root+"info/about.jsp?ID="+ID+"&page=about', 'About', 500, 350)"%>"
1099      />
1100
1101      <m:menuitem
1102        title="<%=menu.getString("license.title") + "…"%>"
1103        onclick="<%="Main.openPopup('"+root+"info/about.jsp?ID="+ID+"&page=license', 'About', 500, 350)"%>"
1104      />
1105      <m:menuitem
1106        visible="<%=HTML.isValidUrl(reportbuglink)%>"
1107        title="<%=menu.getString("bugreport.title") + "…"%>"
1108        onclick="<%="window.open('"+reportbuglink+"','Reportbug')"%>"
1109        tooltip="<%=menu.getString("bugreport.tooltip")%>"
1110      />
1111      <m:menuseparator />
1112      <m:menuitem
1113        title="<%=menu.getString("basesite.title") + "…"%>" 
1114        onclick="<%="Menu.openUrl('http://base.thep.lu.se', 'basesite')"%>"
1115        tooltip="<%=menu.getString("basesite.tooltip")%>"
1116      />
1117    </m:menu>
1118   
1119    <%
1120    //Switch user/logout menu
1121    final boolean hasImpersonate = 
1122      !sc.isImpersonated() && sc.hasSystemPermission(Permission.ACT_AS_ANOTHER_USER);
1123    %>
1124    <m:menu
1125      id="switchuser"
1126      style="display: none;"
1127      >
1128      <m:menuitem 
1129        title="<%=menu.getString("switchuser.title") + "…"%>" 
1130        onclick="<%="Main.openPopup('"+root+"switch.jsp?ID="+ID+"', 'Switch', 360, 200);"%>"
1131        tooltip="<%=menu.getString("switchuser.tooltip")%>" 
1132      />
1133      <m:menuitem 
1134        title="<%=menu.getString("impersonate.title") + "…"%>" 
1135        onclick="<%="Main.openPopup('"+root+"impersonate.jsp?ID="+ID+"', 'Impersonate', 480, 240);"%>"
1136        tooltip="<%=menu.getString("impersonate.tooltip")%>" 
1137        visible="<%=hasImpersonate%>"
1138      />
1139      <m:menuitem 
1140        title="<%=menu.getString("logout.title") + "…"%>" 
1141        onclick="<%="Main.openPopup('"+root+"logout.jsp?ID="+ID+"', 'Logout', 360, 200);"%>"
1142        tooltip="<%=menu.getString("logout.tooltip")%>" 
1143      />
1144    </m:menu>
1145   
1146    <%
1147    // Extensions menu
1148    JspContext context = ExtensionsControl.createContext(dc, pageContext);
1149    ExtensionsInvoker<MenuItemAction> invoker = 
1150      (ExtensionsInvoker<MenuItemAction>)ExtensionsControl.useExtensions(context, 
1151        "net.sf.basedb.clients.web.menu.extensions");
1152    ExtensionsControl ec = ExtensionsControl.get(dc);
1153    ActionIterator<MenuItemAction> it = invoker.iterate();
1154    Map<String, List<MenuItemAction>> menus = new HashMap<String, List<MenuItemAction>>();
1155    menus.put("extensions", new LinkedList<MenuItemAction>());
1156    int numExtensionMenues = 0;
1157    while (it.hasNext())
1158    {
1159      MenuItemAction action = it.next();
1160      String menuId = action.getMenuId();
1161      menuId = menuId == null ? "extensions" : "extensions." + menuId;
1162      List<MenuItemAction> actions = menus.get(menuId);
1163      if (actions == null)
1164      {
1165        actions = new LinkedList<MenuItemAction>();
1166        menus.put(menuId, actions);
1167      }
1168      actions.add(action);
1169    }
1170   
1171    for (Map.Entry<String, List<MenuItemAction>> entry : menus.entrySet())
1172    {
1173      String menuId = entry.getKey();
1174      List<MenuItemAction> actions = entry.getValue();
1175      if (actions.size() == 0) continue;
1176      %>
1177      <m:menu id="<%=menuId%>" style="display: none;">
1178      <%
1179      for (MenuItemAction action : actions)
1180      {
1181        numExtensionMenues++;
1182        if (action.getType() == MenuItemAction.MenuType.SEPARATOR)
1183        {
1184          %>
1185          <m:menuseparator style="<%=action.getStyle()%>" visible="<%=action.isVisible()%>" />
1186          <%
1187        }
1188        else if (action.getType() == MenuItemAction.MenuType.MENUITEM)
1189        {
1190          %>
1191          <m:menuitem 
1192            style="<%=action.getStyle()%>"
1193            title="<%=action.getTitle()%>"
1194            icon="<%=action.getIcon()%>"
1195            iconabsolute="true"
1196            tooltip="<%=action.getTooltip()%>"
1197            enabled="<%=action.isEnabled()%>"
1198            visible="<%=action.isVisible()%>"
1199            onclick="<%=action.getOnClick()%>"
1200          />
1201          <%
1202        }
1203        else if (action.getType() == MenuItemAction.MenuType.SUBMENU)
1204        {
1205          %>
1206          <m:submenu 
1207            subid="<%="extensions." + action.getSubmenuId()%>"
1208            style="<%=action.getStyle()%>"
1209            title="<%=action.getTitle()%>"
1210            icon="<%=action.getIcon()%>"
1211            iconabsolute="true"
1212            tooltip="<%=action.getTooltip()%>"
1213            enabled="<%=action.isEnabled()%>"
1214            visible="<%=action.isVisible()%>"
1215          />
1216          <%
1217        }
1218      }
1219      %>
1220      </m:menu>
1221      <%
1222    }
1223    %>
1224   
1225    <%
1226    // Main menu
1227    %>
1228    <div style="position: fixed; top: 0px; left: 0px; width: 100%; height: 30px; background: #ffffff;">
1229    <m:menu
1230      type="horizontal"
1231      clazz="menu_horizontal"
1232      id="menubar"
1233      style="top: 5px; left: 8px; width: 98%"
1234      open="click"
1235      filltext="<%=fillText.toString()%>"
1236      >
1237      <m:submenu
1238        subid="base"
1239        title="<%=menu.getString("menu.base")%>"
1240      />
1241      <m:submenu
1242        subid="view"
1243        title="<%=menu.getString("menu.view")%>"
1244      />
1245      <m:submenu 
1246        subid="biolims"
1247        title="<%=menu.getString("menu.biolims")%>"
1248      />
1249      <m:submenu
1250        subid="lims"
1251        title="<%=menu.getString("menu.arraylims")%>"
1252      />
1253      <m:submenu
1254        subid="administrate"
1255        title="<%=menu.getString("menu.administrate")%>"
1256        visible="<%=hasAdministrate%>"
1257      />
1258      <m:submenu
1259        subid="extensions"
1260        title="<%=menu.getString("menu.extensions")%>"
1261        visible="<%=numExtensionMenues > 0 %>"
1262      />
1263      <m:submenu
1264        subid="help"
1265        title="<%=menu.getString("menu.help")%>"
1266      />
1267    </m:menu></div>
1268    <br><br>
1269    <%
1270  }
1271  finally
1272  {
1273    if (dc != null) dc.close();
1274  }
1275
1276}
1277%>
1278
1279
Note: See TracBrowser for help on using the repository browser.