source: trunk/www/admin/plugindefinitions/view_plugin.jsp @ 5937

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

References #1655: GUI improvements

  • Fixes rest of view pages in biomaterials menu.
  • Use SVG filter to make disabled button images grayscale.
  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 26.9 KB
Line 
1<%-- $Id: view_plugin.jsp 5937 2012-01-27 11:00:26Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Johan Enell, Martin Svensson
5
6  This file is part of BASE - BioArray Software Environment.
7  Available at http://base.thep.lu.se/
8
9  BASE is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License
11  as published by the Free Software Foundation; either version 3
12  of the License, or (at your option) any later version.
13
14  BASE is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with BASE. If not, see <http://www.gnu.org/licenses/>.
21  ------------------------------------------------------------------
22
23  @author Nicklas
24  @version 2.0
25--%>
26<%@ page pageEncoding="UTF-8" session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.DbControl"
29  import="net.sf.basedb.core.SystemItems"
30  import="net.sf.basedb.core.Item"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.Permission"
33  import="net.sf.basedb.core.PluginDefinition"
34  import="net.sf.basedb.core.PluginConfiguration"
35  import="net.sf.basedb.core.Group"
36  import="net.sf.basedb.core.JobAgent"
37  import="net.sf.basedb.core.JobAgentSettings"
38  import="net.sf.basedb.core.User"
39  import="net.sf.basedb.core.Include"
40  import="net.sf.basedb.core.ItemQuery"
41  import="net.sf.basedb.core.ItemResultIterator"
42  import="net.sf.basedb.core.ItemResultList"
43  import="net.sf.basedb.core.MultiPermissions"
44  import="net.sf.basedb.core.PermissionDeniedException"
45  import="net.sf.basedb.core.BaseException"
46  import="net.sf.basedb.core.RoleKey"
47  import="net.sf.basedb.core.plugin.GuiContext"
48  import="net.sf.basedb.core.plugin.Plugin"
49  import="net.sf.basedb.core.Project"
50  import="net.sf.basedb.core.query.Restrictions"
51  import="net.sf.basedb.core.query.Orders"
52  import="net.sf.basedb.core.query.Hql"
53  import="net.sf.basedb.util.JarClassLoader"
54  import="net.sf.basedb.util.ToStringComparator"
55  import="net.sf.basedb.clients.web.Base"
56  import="net.sf.basedb.clients.web.PermissionUtil"
57  import="net.sf.basedb.clients.web.util.HTML"
58  import="net.sf.basedb.util.Values"
59  import="net.sf.basedb.util.formatter.Formatter"
60  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
61  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
62  import="net.sf.basedb.clients.web.extensions.JspContext"
63  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
64  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
65  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
66  import="java.util.Date"
67  import="java.util.Collections"
68  import="java.util.List"
69  import="java.util.Map"
70  import="java.util.Set"
71  import="java.util.TreeSet"
72%>
73<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
74<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
75<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
76<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
77<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
78<%!
79  private static final Item itemType = Item.PLUGINDEFINITION;
80  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
81 
82  private static final String getShortPermissions(Item itemType, Set<Permission> granted, Set<Permission> denied)
83  {
84    Set<Permission> defined = itemType.getDefinedPermissions();
85    StringBuilder sb = new StringBuilder();
86    if (defined.contains(Permission.CREATE)) sb.append(granted.contains(Permission.CREATE) ? "C" : denied.contains(Permission.CREATE) ? "-" : "c");
87    if (defined.contains(Permission.READ)) sb.append(granted.contains(Permission.READ) ? "R" :  denied.contains(Permission.READ) ? "-" : "r");
88    if (defined.contains(Permission.USE)) sb.append(granted.contains(Permission.USE) ? "U" :  denied.contains(Permission.USE) ? "-" : "u");
89    if (defined.contains(Permission.WRITE)) sb.append(granted.contains(Permission.WRITE) ? "W" :  denied.contains(Permission.WRITE) ? "-" : "w");
90    if (defined.contains(Permission.DELETE)) sb.append(granted.contains(Permission.DELETE) ? "D" :  denied.contains(Permission.DELETE) ? "-" : "d");
91    if (defined.contains(Permission.SET_OWNER)) sb.append(granted.contains(Permission.SET_OWNER) ? "O" :  denied.contains(Permission.SET_OWNER) ? "-" : "o");
92    if (defined.contains(Permission.SET_PERMISSION)) sb.append(granted.contains(Permission.SET_PERMISSION) ? "P" :  denied.contains(Permission.SET_PERMISSION) ? "-" : "p");
93    return sb.toString();
94  }
95%>
96<%
97final boolean iFrame = Values.getBoolean(request.getParameter("iframe"));
98final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
99final String ID = sc.getId();
100final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
101final int itemId = cc.getId();
102final float scale = Base.getScale(sc);
103final DbControl dc = sc.newDbControl();
104try
105{
106  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
107  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
108
109  String title = null;
110  String warning = null;
111  PluginDefinition plugin = PluginDefinition.getById(dc, itemId);
112  final boolean internal = plugin.getJarFile() == null;
113  final boolean loaded = internal || JarClassLoader.exists(plugin.getJarPath());
114  final boolean usePermissions = plugin.getUsePermissions();
115  final Set<GuiContext> contexts = new TreeSet<GuiContext>(new ToStringComparator<GuiContext>(false));
116  contexts.addAll(plugin.getGuiContexts());
117 
118  final boolean usePermission = plugin.hasPermission(Permission.USE);
119  final boolean writePermission = plugin.hasPermission(Permission.WRITE);
120  final boolean deletePermission = plugin.hasPermission(Permission.DELETE);
121  final boolean sharePermission = plugin.hasPermission(Permission.SET_PERMISSION);
122  final boolean setOwnerPermission = plugin.hasPermission(Permission.SET_OWNER);
123  final boolean isRemoved = plugin.isRemoved();
124  final boolean isUsed = isRemoved && plugin.isUsed();
125  final boolean deletePermanentlyPermission = deletePermission && !isUsed;
126  final boolean isOwner = plugin.isOwner();
127 
128  try
129  {
130    if (plugin.isDisabled()) 
131    {
132      warning = "This plugin is disabled";
133    }
134    else
135    {
136      plugin.newInstance(Plugin.class, sc, null, null);
137    }
138  }
139  catch (RuntimeException ex)
140  {
141    warning = ex.getMessage();
142  }
143  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, plugin);
144  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
145  %>
146  <base:page title="<%=title%>" type="<%=iFrame ? "popup" : "default" %>">
147  <base:head scripts="tabcontrol.js,table.js" styles="toolbar.css,headertabcontrol.css,path.css,table.css">
148    <ext:scripts context="<%=jspContext%>" />
149    <ext:stylesheets context="<%=jspContext%>" />
150    <script language="JavaScript">
151    function editItem()
152    {
153      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
154    }
155    function shareItem()
156    {
157      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'SharePlugin', 600, 400);
158    }
159    function deleteItem()
160    {
161      location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>&iframe=<%=iFrame%>');
162    }
163    function restoreItem()
164    {
165      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>&iframe=<%=iFrame%>');
166    }
167    function deleteItemPermanently()
168    {
169      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
170    }
171    function itemDeleted()
172    {
173      Main.listItems('<%=ID%>', '<%=itemType.name()%>');
174    }
175    function showUsingItems()
176    {
177      Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
178    }
179    function setOwner()
180    {
181      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=SetOwnerOfItem&item_id=<%=itemId%>', 'SetOwnerOfItem', 450, 300);
182    }
183    function runPlugin(cmd)
184    {
185      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 750, 500);
186    }
187    function unloadPlugin()
188    {
189      location.replace('index.jsp?ID=<%=ID%>&cmd=UnloadItem&item_id=<%=itemId%>&iframe=<%=iFrame%>');
190    }
191    function newConfiguration()
192    {
193      Main.viewOrEditItem('<%=ID%>', 'PLUGINCONFIGURATION', 0, true, '&plugindefinition_id=<%=itemId%>');
194    }
195    function configurePlugin(itemId)
196    {
197      Main.openPopup('../../common/plugin/index.jsp?ID=<%=ID%>&cmd=ConfigurePlugin&pluginconfiguration_id='+itemId, 'ConfigurePlugin', 750, 500);
198    }
199    function configureAgent(agentId)
200    {
201      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true, '&jobagent_id='+agentId);
202    }
203    function toggleDisabled()
204    {
205      var enable = <%=plugin.isDisabled() ? 1 : 0%>;
206      var tree = window.parent.frames['tree'];
207      if (tree && tree.setIcon)
208      {
209        var iconName = enable ? 'Plugin' : 'PluginDisabled';
210        tree.setIcon('<%=plugin.getClassName()%>', iconName);
211      }
212      var cmd = enable ? 'EnableItem' : 'DisableItem';
213      location.replace('index.jsp?ID=<%=ID%>&cmd=' + cmd + '&item_id=<%=itemId%>&iframe=<%=iFrame%>');
214    }
215    </script>
216  </base:head>
217  <base:body>
218    <p>
219    <%
220    if (!iFrame)
221    {
222      %>
223      <p:path>
224        <p:pathelement title="Plugins" href="<%="index.jsp?ID="+ID%>" />
225        <p:pathelement title="<%=HTML.encodeTags(plugin.getName())%>" />
226      </p:path>
227      <%
228    }
229    %>
230    <t:tabcontrol id="main" active="properties" >
231    <t:tab id="properties" title="Properties">
232    <tbl:toolbar
233      >
234      <tbl:button 
235        disabled="<%=writePermission ? false : true%>" 
236        image="edit.gif" 
237        onclick="editItem()" 
238        title="Edit&hellip;" 
239        tooltip="<%=writePermission ? "Edit this plugin" : "You do not have permission to edit this plugin"%>" 
240      />
241      <tbl:button 
242        image="joust/plugin.png" 
243        onclick="toggleDisabled()" 
244        title="<%=plugin.isDisabled() ? "Enable" : "Disable"%>"
245        visible="<%=writePermission%>"
246        tooltip="Disable/enable this plugin" 
247      />
248      <tbl:button 
249        disabled="<%=deletePermission ? false : true%>" 
250        image="delete.gif" 
251        onclick="deleteItem()" 
252        title="Delete"
253        visible="<%=!plugin.isRemoved()%>"
254        tooltip="<%=deletePermission ? "Delete this plugin" : "You do not have permission to delete this plugin"%>" 
255      />
256      <tbl:button 
257        disabled="<%=writePermission ? false : true%>" 
258        image="restore.gif" 
259        onclick="restoreItem()" 
260        title="Restore"
261        visible="<%=plugin.isRemoved()%>"
262        tooltip="<%=writePermission ? "Restore this plugin" : "You do not have permission to restore this plugin"%>" 
263      />
264      <tbl:button 
265        disabled="<%=sharePermission ? false : true%>"
266        image="share.gif"
267        onclick="shareItem()" 
268        title="Share&hellip;" 
269        tooltip="<%=sharePermission ? "Share this plugin to other user, groups and projects" : "You do not have permission to share this plugin"%>"
270      />
271      <tbl:button 
272        disabled="<%=setOwnerPermission ? false : true%>"
273        image="take_ownership.png"
274        onclick="setOwner()" 
275        title="Set owner&hellip;"
276        tooltip="<%=setOwnerPermission ? "Change owner of this item" : "You do not have permission to change ownership of this item"%>"
277      />
278      <tbl:button
279        image="add.png"
280        onclick="newConfiguration()"
281        title="New configuration&hellip;"
282        tooltip="Create a new configuration for this plugin"
283        visible="<%=sc.hasPermission(Permission.CREATE, Item.PLUGINCONFIGURATION) && 
284          usePermission && plugin.supportsConfigurations()%>"
285      />
286      <tbl:button 
287        image="import.gif" 
288        onclick="runPlugin('ImportItem')" 
289        title="Import&hellip;" 
290        tooltip="Import data" 
291        visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
292      />
293      <tbl:button 
294        image="export.gif" 
295        onclick="runPlugin('ExportItem')" 
296        title="Export&hellip;" 
297        tooltip="Export data" 
298        visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
299      />
300      <tbl:button 
301        image="runplugin.gif" 
302        onclick="runPlugin('RunPlugin')" 
303        title="Run plugin&hellip;" 
304        tooltip="Run a plugin" 
305        visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
306      />
307      <tbl:button
308        onclick="unloadPlugin()"
309        title="Unload"
310        tooltip="<%=loaded && !internal ? "Unload the code for this plugin" : "The code for this plugin has not yet been loaded" %>"
311        visible="<%=loaded && !internal%>"
312      />
313      <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
314        wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
315      <tbl:button
316        image="help.png"
317        onclick="<%="Main.openHelp('" + ID +"', 'plugindefinition.view.properties')"%>"
318        title="Help&hellip;"
319        tooltip="Get help about this page"
320      />
321      </tbl:toolbar>
322    <div class="boxedbottom">
323      <div class="itemstatus">Permissions on this item: <i><%=PermissionUtil.getFullPermissionNames(plugin)%></i></div>
324      <%
325      if (plugin.isRemoved() || plugin.isShared())
326      {
327        %>
328        <div class="itemstatus">
329          <base:icon 
330            image="<%=deletePermanentlyPermission ? "deleted.gif" : "deleted_disabled.gif"%>"
331            onclick="<%=deletePermanentlyPermission ? "deleteItemPermanently()" : null%>"
332            tooltip="<%=deletePermanentlyPermission ? "Permanently delete this item" : null%>"
333            visible="<%=isRemoved%>"> This item has been flagged for deletion<br></base:icon>
334          <base:icon image="used.gif" 
335            onclick="showUsingItems()"
336            tooltip="Show the items that are using this one"
337            visible="<%=isUsed%>"> This item is used by other items and can't be permanently deleted<br></base:icon>
338          <base:icon image="shared.gif" 
339            visible="<%=plugin.isShared()%>"> This item is shared to other users, groups and/or projects</base:icon>
340        </div>
341        <%
342      }
343      %>
344      <%
345      if (warning != null)
346      {
347        %>
348        <div class="error"><%=warning%></div>
349        <%
350      }
351      %>
352      <table class="form" cellspacing="0">
353      <tr>
354        <td class="prompt">Name</td>
355        <td><%=HTML.encodeTags(plugin.getName())%></td>
356      </tr>
357      <tr>
358        <td class="prompt">Registered</td>
359        <td><%=dateFormatter.format(plugin.getEntryDate())%></td>
360      </tr>
361      <tr>
362        <td class="prompt">Type</td>
363        <td><%=plugin.getMainType()%></td>
364      </tr>
365      <tr>
366        <td class="prompt">Class</td>
367        <td><%=plugin.getClassName()%></td>
368      </tr>
369      <tr>
370        <td class="prompt">JAR file</td>
371        <td><%=internal ? "<i>- internal -</i>" : plugin.getJarFile()%></td>
372      </tr>
373      <tr>
374        <td class="prompt">Version</td>
375        <td><%=plugin.getVersionString()%></td>
376      </tr>
377      <tr>
378        <td class="prompt">Max memory</td>
379        <td><%=Values.formatBytes(plugin.getMaxMemory())%></td>
380      </tr>
381      <tr>
382        <td class="prompt">Trusted</td>
383        <td><%=plugin.isTrusted() ? "yes" : "no"%></td>
384      </tr>     
385      <tr>
386        <td class="prompt">Allow immediate execution</td>
387        <td><%=plugin.getAllowImmediateExecution() ? "yes" : "no"%></td>
388      </tr>     
389      <tr>
390        <td class="prompt">Use internal job queue</td>
391        <td><%=plugin.getUseInternalJobQueue() ? "yes" : "no"%></td>
392      </tr>     
393      <tr>
394        <td class="prompt" >Items</td>
395        <td><%=Values.getString(contexts, ", ", true)%></td>
396      </tr>
397      <tr>
398        <td class="prompt">Contact</td>
399        <td><%=HTML.encodeTags(plugin.getContact())%></td>
400      </tr>
401      <tr>
402        <td class="prompt">Copyright</td>
403        <td><%=HTML.encodeTags(plugin.getCopyright())%></td>
404      </tr>
405      <tr>
406        <td class="prompt">Email</td>
407        <td><%=HTML.scanForLinks(plugin.getEmail(), HTML.LINK_EMAIL, "_new")%></td>
408      </tr>
409      <tr>
410        <td class="prompt">Url</td>
411        <td><%=HTML.scanForLinks(plugin.getUrl(), HTML.LINK_URL, "_new")%></td>
412      </tr>
413      <tr>
414        <td class="prompt">Owner</td>
415        <td><base:propertyvalue item="<%=plugin%>" property="owner" /></td>
416      </tr>
417      <tr >
418        <td class="prompt">Description</td>
419        <td><%=HTML.niceFormat(plugin.getDescription())%></td>
420      </tr>
421      </table>
422      <%
423      ItemQuery<PluginConfiguration> configQuery = plugin.getPluginConfigurations();
424      configQuery.include(Include.ALL);
425      configQuery.order(Orders.asc(Hql.property("name")));
426      ItemResultList<PluginConfiguration> configurations = configQuery.list(dc);
427   
428      if (configurations.size() == 0)
429      {
430        if (plugin.supportsConfigurations())
431        {
432          %>
433          <h4>Configurations</h4>
434          There are no configurations for this plugin (or, you don't have permission to view them).
435          <%
436        }
437      }
438      else
439      {
440        %>
441        <base:section
442          id="configurations"
443          title="<%="Configurations (" + configurations.size() + ")" %>"
444          context="<%=cc%>"
445          >
446          <tbl:table
447            id="configurations"
448           
449            columns="all"
450            >
451          <tbl:columndef 
452            id="name"
453            title="Name"
454          />
455          <tbl:columndef 
456            id="description"
457            title="Description"
458          />
459          <tbl:columndef
460            id="configure"
461            title="Configure"
462            show="<%=plugin.supportsConfigurations() ? "always" : "never" %>"
463          />
464          <tbl:data>
465            <tbl:columns>
466            </tbl:columns>
467            <tbl:rows>
468            <%
469            for (PluginConfiguration pc : configurations)
470            {
471              %>
472              <tbl:row>
473                <tbl:cell column="name"><base:icon 
474                    image="deleted.gif" 
475                    tooltip="This item has been scheduled for deletion" 
476                    visible="<%=pc.isRemoved()%>"
477                  /><%=Base.getLinkedName(ID, pc, false, true)%></tbl:cell>
478                <tbl:cell column="description"><%=HTML.niceFormat(pc.getDescription())%></tbl:cell>
479                <tbl:cell column="configure">
480                <%
481                if (pc.hasPermission(Permission.WRITE))
482                {
483                  %>
484                  <base:icon image="runplugin.gif" 
485                    onclick="<%="configurePlugin(" + pc.getId() + ")"%>"
486                    tooltip="Configure this plugin "/>
487                  <%
488                }
489                %>
490                </tbl:cell>
491              </tbl:row>
492              <%
493            }
494            %>
495            </tbl:rows>
496          </tbl:data>
497          </tbl:table>
498        </base:section>
499        <%
500      }
501      %>
502
503      <%
504      ItemQuery<JobAgent> agentQuery = JobAgent.getQuery();
505      agentQuery.include(Include.ALL);
506      agentQuery.order(Orders.asc(Hql.property("name")));
507      agentQuery.join(Hql.innerJoin("plugins", "p"));
508      agentQuery.restrict(Restrictions.eq(Hql.property("p", "pluginDefinition"), Hql.entity(plugin)));
509      ItemResultList<JobAgent> agents = agentQuery.list(dc);
510   
511      if (agents.size() == 0)
512      {
513        %>
514        <h4>Installed on job agents</h4>
515        This plugin isn't installed on any job agents (or, you don't have permission to view them).
516        <%
517      }
518      else
519      {
520        %>
521        <base:section
522          id="jobagents"
523          title="<%="Installed on job agents (" + agents.size() + ")" %>"
524          context="<%=cc%>"
525          >       
526          <tbl:table
527            id="agents"
528           
529            columns="all"
530            >
531          <tbl:columndef 
532            id="name"
533            title="Name"
534          />
535          <tbl:columndef 
536            id="server"
537            title="Server"
538          />
539          <tbl:columndef 
540            id="info"
541            title="CPU/Memory"
542          />
543          <tbl:columndef
544            id="maxMemory"
545            title="Max memory"
546          />
547          <tbl:columndef
548            id="trusted"
549            title="Trusted"
550          />
551          <tbl:columndef
552            id="priorityBoost"
553            title="Priority boost"
554          />
555          <tbl:columndef
556            id="configure"
557            title=""
558          />
559          <tbl:data>
560            <tbl:columns>
561            </tbl:columns>
562            <tbl:rows>
563            <%
564            for (JobAgent agent : agents)
565            {
566              String server = agent.getServer();
567              Integer port = agent.getPort();
568              JobAgentSettings settings = agent.getSettings(plugin, false);
569              Long maxMemory = settings.getEffectiveMaxMemory();
570              %>
571              <tbl:row>
572                <tbl:cell column="name"><base:icon 
573                    image="deleted.gif" 
574                    tooltip="This item has been scheduled for deletion" 
575                    visible="<%=agent.isRemoved()%>"
576                  /><%=Base.getLinkedName(ID, agent, false, true)%></tbl:cell>
577                <tbl:cell column="server"><%=server == null || port == null ? "" : server + ":" + port%></tbl:cell>
578                <tbl:cell column="info">
579                  CPU usage: <%=agent.getCpuUsage() == null ? "<i>- unknown -</i>" : agent.getCpuUsage()+"%" %><br>
580                  Total memory: <%=agent.getTotalMemory() == null ? "<i>- unknown -</i>" : Values.formatBytes(agent.getTotalMemory()) %><br>
581                  Used memory: <%=agent.getUsedMemory() == null ? "<i>- unknown -</i>" : Values.formatBytes(agent.getUsedMemory()) %>
582                </tbl:cell>
583                <tbl:cell column="maxMemory"><%=maxMemory == null ? "<i>- not specified -</i>" : Values.formatBytes(maxMemory)%></tbl:cell>
584                <tbl:cell column="trusted"><%=settings.isEffectivelyTrusted()%></tbl:cell>
585                <tbl:cell column="priorityBoost"><%=settings.getPriorityBoost()%></tbl:cell>
586                <tbl:cell column="configure">
587                <%
588                if (agent.hasPermission(Permission.WRITE))
589                {
590                  %>
591                  <base:icon image="runplugin.gif" 
592                    onclick="<%="configureAgent(" + agent.getId() + ")"%>"
593                    tooltip="Configure the settings for this plugin on the job agent "/>
594                  <%
595                }
596                %>
597                </tbl:cell>
598              </tbl:row>
599              <%
600            }
601            %>
602            </tbl:rows>
603          </tbl:data>
604          </tbl:table>
605        </base:section>
606        <%
607      }
608      %>
609      <jsp:include page="../../common/anytoany/list_anytoany.jsp">
610        <jsp:param name="ID" value="<%=ID%>" />
611        <jsp:param name="item_type" value="<%=itemType.name()%>" />
612        <jsp:param name="item_id" value="<%=itemId%>" />
613        <jsp:param name="title" value="Other items related to this plugin" />
614      </jsp:include>
615      <%
616      // Tables with users/groups/projects that this item is shared to
617      MultiPermissions mp = new MultiPermissions(Collections.singleton(plugin));
618      List<User> users = mp.getUsers().list(dc);
619      List<Group> groups = mp.getGroups().list(dc);
620      List<Project> projects = mp.getProjects().list(dc);
621      int totalShare = users.size() + groups.size() + projects.size();
622      if (totalShare > 0)
623      {
624        %>
625        <base:section
626          id="sharedTo"
627          title="<%="Shared to (" + totalShare + ")"%>"
628          context="<%=cc%>"
629          >         
630          <tbl:table 
631            id="itemsSharedTo"
632           
633            columns="all"
634          >
635            <tbl:columndef 
636              id="itemType"
637              title="Item type"
638            />
639            <tbl:columndef 
640              id="name"
641              title="Name"
642            />
643            <tbl:columndef 
644              id="permissions"
645              title="Permissions"
646            />
647            <tbl:data>
648              <tbl:columns>
649              </tbl:columns>
650              <tbl:rows>
651              <%
652              for (Project project : projects)
653              {               
654                Set<Permission> permissions = mp.getPermissions(project).values().iterator().next();
655                %>     
656                <tbl:row>
657                  <tbl:cell column="itemType"><%=project.getType()%></tbl:cell>
658                  <tbl:cell column="name"><base:icon 
659                    image="deleted.gif" 
660                    tooltip="This item has been scheduled for deletion" 
661                    visible="<%=project.isRemoved()%>"
662                  /><%=Base.getLinkedName(ID, project, false, true)%></tbl:cell>
663                  <tbl:cell column="permissions">
664                    <%=PermissionUtil.translatePermissionsToString(permissions)%>
665                  </tbl:cell>
666                </tbl:row>
667                <%
668              }
669              for (Group group : groups)
670              {               
671                Set<Permission> permissions = mp.getPermissions(group).values().iterator().next();
672                %>
673                <tbl:row>             
674                  <tbl:cell column="itemType"><%=group.getType()%></tbl:cell>
675                  <tbl:cell column="name"><base:icon 
676                    image="deleted.gif" 
677                    tooltip="This item has been scheduled for deletion" 
678                    visible="<%=group.isRemoved()%>"
679                  /><%=Base.getLinkedName(ID, group, false, true)%></tbl:cell>
680                  <tbl:cell column="permissions">
681                    <%=PermissionUtil.translatePermissionsToString(permissions)%>
682                  </tbl:cell>
683                </tbl:row>
684                <% 
685              }
686              for (User user : users)
687              {
688                Set<Permission> permissions = mp.getPermissions(user).values().iterator().next();
689                %>
690                <tbl:row>             
691                  <tbl:cell column="itemType"><%=user.getType()%></tbl:cell>
692                  <tbl:cell column="name"><base:icon 
693                    image="deleted.gif" 
694                    tooltip="This item has been scheduled for deletion" 
695                    visible="<%=user.isRemoved()%>"
696                  /><%=Base.getLinkedName(ID, user, false, true)%></tbl:cell>
697                  <tbl:cell column="permissions">
698                    <%=PermissionUtil.translatePermissionsToString(permissions)%>
699                  </tbl:cell>
700                </tbl:row>
701                <%
702              }
703              %>
704              </tbl:rows>
705            </tbl:data>
706          </tbl:table>
707        </base:section>
708        <%
709      }
710      else
711      {
712        %>
713        <h4>Shared to</h4>
714        This plugin is not shared
715        (or, you don't have permission to view the ones it is shared to).
716        <%
717      }
718      %>
719      <br>
720      <base:section
721        id="permissions"
722        title="<%="Permissions (using permissions: " + (usePermissions ? "yes" : "no") + ")" %>"
723        context="<%=cc%>"
724        >
725        <div class="itemlist">
726        <div class="data">
727          <table border="0" cellspacing="0" cellpadding="0">
728          <tr>
729          <%
730          Map<String, List<Item>> permissionGroups = PermissionUtil.getPermissionGroups();
731         
732          for (String name : permissionGroups.keySet())
733          {
734            %>
735            <th class="columnheader" colspan="2"><b><%=name%></b></th>
736            <%
737          }
738          %>
739          </tr>
740          <%
741          int newItems = 0;
742          int index = 0;
743          int i = 0;
744          do
745          {
746            newItems = 0;
747            StringBuilder sb = new StringBuilder();
748            sb.append("<tr ");
749            sb.append(" class=\"").append(i == 1 ? "oddrow" : "evenrow").append("\"");
750            sb.append(">");
751            for (String name : permissionGroups.keySet())
752            {
753              List<Item> items = permissionGroups.get(name);
754              if (items.size() > index)
755              {
756                newItems++;
757                Item item = items.get(index);
758                int keyId = SystemItems.getRoleKeyId(item);
759                RoleKey key = RoleKey.getById(dc, keyId);
760               
761                sb.append("<td class=\"cell\"><b>").append(key.getName()).append("</b></td>");
762                sb.append("<td class=\"cell\">");
763                             
764                if (keyId != 0)
765                {               
766                  Set<Permission> granted = plugin.getGranted(key);
767                  Set<Permission> denied = plugin.getDenied(key);
768                  sb.append(getShortPermissions(item, granted, denied));
769                }
770                else
771                {
772                  sb.append("(undefined key)");
773                }
774                sb.append("</td>");
775              }
776              else
777              {
778                sb.append("<td class=\"cell\" colspan=\"2\">&nbsp;</td>");
779              }
780            }
781            if (newItems > 0)
782            {
783              %>
784              <%=sb.toString()%>
785              <%
786            }
787            i = 1 - i;
788            index++;
789          } while (newItems > 0);
790          %>
791          <tr class="panel">
792          <td colspan="99" class="panel">
793          Capital letters = Permission is always granted, Small letters = Permission is only granted if logged in user
794          has that permission<br>
795          <b>C/c</b> = Create, <b>R/r</b> = Read, <b>U/u</b> = Use,
796          <b>W/w</b> = Write, <b>D/d</b> = Delete, <b>O/o</b> = Change owner,
797          <b>P/p</b> = Change permissions
798          </td>
799          </tr>
800          </table>       
801        </div>
802        </div>
803      </base:section>
804
805    </div>
806      </t:tab>
807     
808      <t:tab id="annotations" title="Annotations" 
809        tooltip="View annotation values" 
810        visible="<%=!plugin.requiresConfiguration() && plugin.supports("net.sf.basedb.core.plugin.AnnotationSetterPlugin") %>">
811        <div class="boxed">
812        <jsp:include page="../../common/annotations/list_annotations.jsp">
813          <jsp:param name="item_type" value="<%=itemType.name()%>" />
814          <jsp:param name="item_id" value="<%=itemId%>" />
815          <jsp:param name="ID" value="<%=ID%>" />
816        </jsp:include>
817        </div>
818      </t:tab>     
819      </t:tabcontrol>
820
821  </base:body>
822  </base:page>
823  <%
824}
825finally
826{
827  if (dc != null) dc.close();
828}
829
830%>
Note: See TracBrowser for help on using the repository browser.