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

Last change on this file since 5904 was 5904, checked in by Nicklas Nordborg, 12 years ago

References #1655: GUI improvements

  • Started on tabcontrol re-design. It does look good on popup windows with tabs at bottom, but there are optimizations to be made still.


  • Started working on a few more dialogs in the BASE menu. The look good, but there is more optimizations to be made.
  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 48.2 KB
Line 
1<%-- $Id: menu.jsp 5904 2011-12-09 13:52:53Z 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.png"
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', 600, 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', 600, 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 hasReporterCloneTemplates = !sc.hasPermission(Permission.DENIED, Item.REPORTERCLONETEMPLATE);
957    final boolean hasDiskUsage = sc.hasPermission(Permission.READ, Item.DISKUSAGE);
958    final Client currentClient = Client.getById(dc, sc.getClientId());
959    final boolean hasServer = currentClient.hasPermission(Permission.WRITE);
960
961    final boolean hasAdministrate = 
962      hasUsers || hasGroups || hasRoles || hasQuota || hasTypes || hasPlugins ||
963      hasSoftware || hasHardware || hasProtocols || hasClients || hasNews || hasReporterCloneTemplates || 
964      hasDiskUsage || hasServer || hasTopPlatforms;
965
966    if (hasAdministrate)
967    {
968      %>
969      <m:menu 
970        id="administrate" 
971        style="display: none"
972        >
973        <m:menuitem 
974          title="<%=common.getString("item.user+")%>" 
975          onclick="<%="Menu.openUrl('"+root+"admin/users/index.jsp?ID="+ID+"')"%>" 
976          tooltip="<%=menu.getString("users.tooltip", hasUsers)%>"
977          enabled="<%=hasUsers%>"
978        />
979        <m:menuitem 
980          title="<%=common.getString("item.group+")%>" 
981          onclick="<%="Menu.openUrl('"+root+"admin/groups/index.jsp?ID="+ID+"')"%>" 
982          tooltip="<%=menu.getString("groups.tooltip", hasGroups)%>" 
983          enabled="<%=hasGroups%>"
984        />
985        <m:menuitem 
986          title="<%=common.getString("item.role+")%>" 
987          onclick="<%="Menu.openUrl('"+root+"admin/roles/index.jsp?ID="+ID+"')"%>" 
988          tooltip="<%=menu.getString("roles.tooltip", hasRoles)%>" 
989          enabled="<%=hasRoles%>"
990        />
991        <m:menuseparator />
992        <m:submenu 
993          subid="plugins" 
994          title="<%=menu.getString("menu.plugins")%>"
995          tooltip="<%=menu.getString("menu.plugins.tooltip")%>"
996          enabled="<%=hasPlugins%>"
997        />
998        <m:menuseparator />
999        <m:menuitem 
1000          title="<%=common.getString("item.quota+")%>" 
1001          onclick="<%="Menu.openUrl('"+root+"admin/quota/index.jsp?ID="+ID+"')"%>" 
1002          tooltip="<%=menu.getString("quota.tooltip", hasQuota)%>" 
1003          enabled="<%=hasQuota%>"
1004        />
1005        <m:menuitem 
1006          title="<%=common.getString("item.software+")%>" 
1007          onclick="<%="Menu.openUrl('"+root+"admin/software/index.jsp?ID="+ID+"')"%>" 
1008          tooltip="<%=menu.getString("software.tooltip", hasSoftware)%>" 
1009          enabled="<%=hasSoftware%>"
1010        />
1011        <m:menuitem 
1012          title="<%=common.getString("item.hardware+")%>" 
1013          onclick="<%="Menu.openUrl('"+root+"admin/hardware/index.jsp?ID="+ID+"')"%>" 
1014          tooltip="<%=menu.getString("hardware.tooltip", hasHardware)%>" 
1015          enabled="<%=hasHardware%>"
1016        />
1017        <m:menuitem 
1018          title="<%=common.getString("item.protocol+")%>" 
1019          onclick="<%="Menu.openUrl('"+root+"admin/protocols/index.jsp?ID="+ID+"')"%>" 
1020          tooltip="<%=menu.getString("protocols.tooltip", hasProtocols)%>" 
1021          enabled="<%=hasProtocols%>"
1022        />
1023        <m:menuitem 
1024          title="<%=common.getString("item.client+")%>" 
1025          onclick="<%="Menu.openUrl('"+root+"admin/clients/index.jsp?ID="+ID+"')"%>" 
1026          tooltip="<%=menu.getString("clients.tooltip", hasClients)%>" 
1027          enabled="<%=hasClients%>"
1028        />
1029        <m:menuitem 
1030          title="<%=common.getString("item.news+")%>" 
1031          onclick="<%="Menu.openUrl('"+root+"admin/news/index.jsp?ID="+ID+"')"%>" 
1032          tooltip="<%=menu.getString("news.tooltip", hasNews)%>" 
1033          enabled="<%=hasNews%>"
1034        />
1035        <m:menuitem 
1036          title="<%=common.getString("item.reporterclonetemplate+")%>" 
1037          onclick="<%="Menu.openUrl('"+root+"admin/reporterclonetemplates/index.jsp?ID="+ID+"')"%>" 
1038          tooltip="<%=menu.getString("reporterclonetemplates.tooltip", hasReporterCloneTemplates)%>" 
1039          enabled="<%=hasReporterCloneTemplates%>"
1040        />
1041        <m:menuseparator />
1042        <m:submenu 
1043          subid="platforms" 
1044          title="<%=menu.getString("menu.platforms")%>"
1045          tooltip="<%=menu.getString("menu.platforms.tooltip")%>"
1046          enabled="<%=hasTopPlatforms%>"
1047        />
1048        <m:submenu 
1049          subid="types" 
1050          title="<%=menu.getString("menu.types")%>"
1051          tooltip="<%=menu.getString("menu.types.tooltip")%>"
1052          enabled="<%=hasTypes%>"
1053        />
1054        <m:menuseparator />
1055        <m:menuitem 
1056          title="<%=common.getString("item.diskusage+")%>" 
1057          onclick="<%="Menu.openUrl('"+root+"admin/diskusage/index.jsp?ID="+ID+"')"%>" 
1058          tooltip="<%=menu.getString("diskusage.tooltip", hasDiskUsage)%>" 
1059          enabled="<%=hasDiskUsage%>"
1060        />
1061        <m:menuitem 
1062          title="<%=menu.getString("serversettings.title")+"…"%>"
1063          onclick="<%="Main.openPopup('"+root+"admin/server/configure.jsp?ID="+ID+"', 'ServerSettings', 500, 400);"%>"
1064          tooltip="<%=menu.getString("serversettings.tooltip", hasServer)%>"
1065          enabled="<%=hasServer%>"
1066        />
1067        <m:menuitem 
1068          title="<%=menu.getString("broadcast.title")+"…"%>"
1069          onclick="<%="Main.openPopup('"+root+"admin/server/broadcast.jsp?ID="+ID+"', 'BroadcastMessage', 640, 400);"%>"
1070          tooltip="<%=menu.getString("broadcast.tooltip", hasServer)%>"
1071          enabled="<%=hasServer%>"
1072        />
1073        <m:menuitem
1074          title="<%=menu.getString("services.title")%>"
1075          tooltip="<%=menu.getString("services.tooltip", hasServer)%>"
1076          onclick="<%="Menu.openUrl('"+root+"admin/services/index.jsp?ID="+ID+"')"%>"
1077          enabled="<%=hasServer%>"
1078        />
1079      </m:menu>
1080      <%
1081    }
1082    %>
1083    <%
1084    // Help menu
1085    final String helplink = Values.getStringOrNull(sc.getClientDefaultSetting("server.links.help"));
1086    final String faqlink = Values.getStringOrNull(sc.getClientDefaultSetting("server.links.faq"));
1087    final String reportbuglink = Values.getStringOrNull(sc.getClientDefaultSetting("server.links.reportbug"));
1088    %>
1089    <m:menu id="help" style="display: none">
1090      <m:menuitem
1091        visible="<%=HTML.isValidUrl(helplink)%>"
1092        title="<%=menu.getString("menu.help") + "…"%>"
1093        onclick="<%="window.open('"+helplink+"','Help')"%>"
1094      />
1095      <m:menuitem
1096        visible="<%=HTML.isValidUrl(faqlink)%>"
1097        title="<%=menu.getString("faq.title") + "…"%>"
1098        onclick="<%="window.open('"+faqlink+"','FAQ')"%>"
1099        tooltip="<%=menu.getString("faq.tooltip") %>"
1100      />
1101      <m:menuseparator />
1102
1103      <m:menuitem
1104        title="<%=menu.getString("about.title") + "…"%>"
1105        onclick="<%="Main.openPopup('"+root+"info/about.jsp?ID="+ID+"&page=about', 'About', 500, 350)"%>"
1106      />
1107
1108      <m:menuitem
1109        title="<%=menu.getString("license.title") + "…"%>"
1110        onclick="<%="Main.openPopup('"+root+"info/about.jsp?ID="+ID+"&page=license', 'About', 500, 350)"%>"
1111      />
1112      <m:menuitem
1113        visible="<%=HTML.isValidUrl(reportbuglink)%>"
1114        title="<%=menu.getString("bugreport.title") + "…"%>"
1115        onclick="<%="window.open('"+reportbuglink+"','Reportbug')"%>"
1116        tooltip="<%=menu.getString("bugreport.tooltip")%>"
1117      />
1118      <m:menuseparator />
1119      <m:menuitem
1120        title="<%=menu.getString("basesite.title") + "…"%>" 
1121        onclick="<%="Menu.openUrl('http://base.thep.lu.se', 'basesite')"%>"
1122        tooltip="<%=menu.getString("basesite.tooltip")%>"
1123      />
1124    </m:menu>
1125   
1126    <%
1127    //Switch user/logout menu
1128    final boolean hasImpersonate = 
1129      !sc.isImpersonated() && sc.hasSystemPermission(Permission.ACT_AS_ANOTHER_USER);
1130    %>
1131    <m:menu
1132      id="switchuser"
1133      style="display: none;"
1134      >
1135      <m:menuitem 
1136        title="<%=menu.getString("switchuser.title") + "…"%>" 
1137        onclick="<%="Main.openPopup('"+root+"switch.jsp?ID="+ID+"', 'Switch', 360, 200);"%>"
1138        tooltip="<%=menu.getString("switchuser.tooltip")%>" 
1139      />
1140      <m:menuitem 
1141        title="<%=menu.getString("impersonate.title") + "…"%>" 
1142        onclick="<%="Main.openPopup('"+root+"impersonate.jsp?ID="+ID+"', 'Impersonate', 480, 240);"%>"
1143        tooltip="<%=menu.getString("impersonate.tooltip")%>" 
1144        visible="<%=hasImpersonate%>"
1145      />
1146      <m:menuitem 
1147        title="<%=menu.getString("logout.title") + "…"%>" 
1148        onclick="<%="Main.openPopup('"+root+"logout.jsp?ID="+ID+"', 'Logout', 360, 200);"%>"
1149        tooltip="<%=menu.getString("logout.tooltip")%>" 
1150      />
1151    </m:menu>
1152   
1153    <%
1154    // Extensions menu
1155    JspContext context = ExtensionsControl.createContext(dc, pageContext);
1156    ExtensionsInvoker<MenuItemAction> invoker = 
1157      (ExtensionsInvoker<MenuItemAction>)ExtensionsControl.useExtensions(context, 
1158        "net.sf.basedb.clients.web.menu.extensions");
1159    ExtensionsControl ec = ExtensionsControl.get(dc);
1160    ActionIterator<MenuItemAction> it = invoker.iterate();
1161    Map<String, List<MenuItemAction>> menus = new HashMap<String, List<MenuItemAction>>();
1162    menus.put("extensions", new LinkedList<MenuItemAction>());
1163    int numExtensionMenues = 0;
1164    while (it.hasNext())
1165    {
1166      MenuItemAction action = it.next();
1167      String menuId = action.getMenuId();
1168      menuId = menuId == null ? "extensions" : "extensions." + menuId;
1169      List<MenuItemAction> actions = menus.get(menuId);
1170      if (actions == null)
1171      {
1172        actions = new LinkedList<MenuItemAction>();
1173        menus.put(menuId, actions);
1174      }
1175      actions.add(action);
1176    }
1177   
1178    for (Map.Entry<String, List<MenuItemAction>> entry : menus.entrySet())
1179    {
1180      String menuId = entry.getKey();
1181      List<MenuItemAction> actions = entry.getValue();
1182      if (actions.size() == 0) continue;
1183      %>
1184      <m:menu id="<%=menuId%>" style="display: none;">
1185      <%
1186      for (MenuItemAction action : actions)
1187      {
1188        numExtensionMenues++;
1189        if (action.getType() == MenuItemAction.MenuType.SEPARATOR)
1190        {
1191          %>
1192          <m:menuseparator style="<%=action.getStyle()%>" visible="<%=action.isVisible()%>" />
1193          <%
1194        }
1195        else if (action.getType() == MenuItemAction.MenuType.MENUITEM)
1196        {
1197          %>
1198          <m:menuitem 
1199            style="<%=action.getStyle()%>"
1200            title="<%=action.getTitle()%>"
1201            icon="<%=action.getIcon()%>"
1202            iconabsolute="true"
1203            tooltip="<%=action.getTooltip()%>"
1204            enabled="<%=action.isEnabled()%>"
1205            visible="<%=action.isVisible()%>"
1206            onclick="<%=action.getOnClick()%>"
1207          />
1208          <%
1209        }
1210        else if (action.getType() == MenuItemAction.MenuType.SUBMENU)
1211        {
1212          %>
1213          <m:submenu 
1214            subid="<%="extensions." + action.getSubmenuId()%>"
1215            style="<%=action.getStyle()%>"
1216            title="<%=action.getTitle()%>"
1217            icon="<%=action.getIcon()%>"
1218            iconabsolute="true"
1219            tooltip="<%=action.getTooltip()%>"
1220            enabled="<%=action.isEnabled()%>"
1221            visible="<%=action.isVisible()%>"
1222          />
1223          <%
1224        }
1225      }
1226      %>
1227      </m:menu>
1228      <%
1229    }
1230    %>
1231   
1232    <%
1233    // Main menu
1234    %>
1235    <div style="position: fixed; top: 0px; left: 0px; width: 100%; height: 30px; background: #ffffff;">
1236    <m:menu
1237      type="horizontal"
1238      clazz="menu_horizontal"
1239      id="menubar"
1240      style="top: 5px; left: 8px; width: 98%"
1241      open="click"
1242      filltext="<%=fillText.toString()%>"
1243      >
1244      <m:submenu
1245        subid="base"
1246        title="<%=menu.getString("menu.base")%>"
1247      />
1248      <m:submenu
1249        subid="view"
1250        title="<%=menu.getString("menu.view")%>"
1251      />
1252      <m:submenu 
1253        subid="biolims"
1254        title="<%=menu.getString("menu.biolims")%>"
1255      />
1256      <m:submenu
1257        subid="lims"
1258        title="<%=menu.getString("menu.arraylims")%>"
1259      />
1260      <m:submenu
1261        subid="administrate"
1262        title="<%=menu.getString("menu.administrate")%>"
1263        visible="<%=hasAdministrate%>"
1264      />
1265      <m:submenu
1266        subid="extensions"
1267        title="<%=menu.getString("menu.extensions")%>"
1268        visible="<%=numExtensionMenues > 0 %>"
1269      />
1270      <m:submenu
1271        subid="help"
1272        title="<%=menu.getString("menu.help")%>"
1273      />
1274    </m:menu></div>
1275    <br><br>
1276    <%
1277  }
1278  finally
1279  {
1280    if (dc != null) dc.close();
1281  }
1282
1283}
1284%>
1285
1286
Note: See TracBrowser for help on using the repository browser.