source: trunk/www/admin/plugindefinitions/list_plugins.jsp @ 7943

Last change on this file since 7943 was 7943, checked in by Nicklas Nordborg, 9 months ago

Merged BASE 3.18.1 to the trunk.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 23.0 KB
Line 
1<%-- $Id: list_plugins.jsp 7943 2021-05-04 12:23:19Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Johan Enell, Nicklas Nordborg, 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.Item"
30  import="net.sf.basedb.core.PluginDefinition"
31  import="net.sf.basedb.core.PluginConfiguration"
32  import="net.sf.basedb.core.ItemQuery"
33  import="net.sf.basedb.core.Include"
34  import="net.sf.basedb.core.Type"
35  import="net.sf.basedb.core.ItemResultIterator"
36  import="net.sf.basedb.core.ItemResultList"
37  import="net.sf.basedb.core.ItemContext"
38  import="net.sf.basedb.core.Nameable"
39  import="net.sf.basedb.core.Permission"
40  import="net.sf.basedb.core.PluginDefinition"
41  import="net.sf.basedb.core.query.Orders"
42  import="net.sf.basedb.core.query.Hql"
43  import="net.sf.basedb.core.query.Expressions"
44  import="net.sf.basedb.core.query.Restrictions"
45  import="net.sf.basedb.core.plugin.GuiContext"
46  import="net.sf.basedb.core.plugin.Plugin"
47  import="net.sf.basedb.util.Enumeration"
48  import="net.sf.basedb.util.JarClassLoader"
49  import="net.sf.basedb.util.ShareableUtil"
50  import="net.sf.basedb.util.ToStringComparator"
51  import="net.sf.basedb.clients.web.Base"
52  import="net.sf.basedb.clients.web.ModeInfo"
53  import="net.sf.basedb.clients.web.PermissionUtil"
54  import="net.sf.basedb.clients.web.util.HTML"
55  import="net.sf.basedb.util.Values"
56  import="net.sf.basedb.util.formatter.Formatter"
57  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
58  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
59  import="net.sf.basedb.clients.web.extensions.JspContext"
60  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
61  import="net.sf.basedb.clients.web.extensions.toolbar.ButtonAction" 
62  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
63  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
64  import="net.sf.basedb.clients.web.extensions.list.ListColumnAction"
65  import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
66  import="java.util.Date"
67  import="java.util.Iterator"
68  import="java.util.List"
69  import="java.util.Map"
70  import="java.util.Set"
71  import="java.util.EnumSet"
72  import="java.util.TreeSet"
73%>
74<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
75<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
76<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
77<%!
78  private static final Item itemType = Item.PLUGINDEFINITION;
79  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
80  private static final Enumeration<String, String> itemTypes = new Enumeration<String, String>();
81  private static final Enumeration<String, String> mainTypes = new Enumeration<String, String>();
82
83  static
84  {
85    Set<Item> temp = new TreeSet<Item>(new ToStringComparator<Item>(false));
86    temp.addAll(EnumSet.complementOf(EnumSet.of(Item.SYSTEM)));
87    itemTypes.add("", "- none -");   
88    for (Item item : temp)
89    {
90      itemTypes.add(Integer.toString(item.getValue()), item.toString());
91    }
92    for (Plugin.MainType v : Plugin.MainType.values())
93    {
94      mainTypes.add(Integer.toString(v.getValue()), v.toString());
95    }
96  }
97%>
98<%
99final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
100final String ID = sc.getId();
101final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
102final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
103
104final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
105final String callback = request.getParameter("callback");
106final String title = mode.generateTitle("plugin", "plugins");
107final DbControl dc = sc.newDbControl();
108ItemResultIterator<PluginDefinition> plugins = null;
109try
110{
111  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
112  // Query for plugins relatated to the current type
113  final ItemQuery<PluginConfiguration> configQuery = PluginConfiguration.getQuery();
114  configQuery.include(cc.getInclude());
115  configQuery.restrict(Restrictions.eq(Hql.property("pluginDefinition"), Expressions.parameter("plugin")));
116  configQuery.order(Orders.asc(Hql.property("name"))); 
117  final boolean createConfigurationPermission = sc.hasPermission(Permission.CREATE, Item.PLUGINCONFIGURATION); 
118
119  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
120  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
121  try
122  {
123    final ItemQuery<PluginDefinition> query = Base.getConfiguredQuery(dc, cc, jspContext, true, PluginDefinition.getQuery(), mode);
124    query.join(Hql.leftJoin("guiContexts", "ctx"));
125    query.setDistinct(true);
126    plugins = query.iterate(dc);
127  }
128  catch (Throwable t)
129  {
130    cc.setMessage(t.getMessage());
131    t.printStackTrace();
132  }
133  int numListed = 0;
134  ExtensionsInvoker<ButtonAction> invoker = ToolbarUtil.useExtensions(jspContext);
135  ExtensionsInvoker<ListColumnAction<PluginDefinition,?>> columnsInvoker = ListColumnUtil.useExtensions(jspContext);
136  %>
137  <base:page title="<%=title==null ? "Plugins" : title%>" type="<%=mode.getPageType()%>" id="list-page">
138  <base:head scripts="table.js,~plugins.js" styles="table.css,toolbar.css">
139    <ext:scripts context="<%=jspContext%>" />
140    <ext:stylesheets context="<%=jspContext%>" />
141  </base:head>
142 
143  <base:body>
144    <h1><%=title==null ? "Plugins" : title%></h1>
145    <div class="content">
146    <tbl:table 
147      id="plugins" 
148      columns="<%=cc.getSetting("columns")%>"
149      sortby="<%=cc.getSortProperty()%>" 
150      direction="<%=cc.getSortDirection()%>"
151      action="index.jsp"
152      sc="<%=sc%>"
153      item="<%=itemType%>"
154      filterrows="<%=cc.getFilterRows()%>"
155      subclass="fulltable"
156      stickyheaders="name"
157      >
158      <tbl:hidden 
159        name="mode" 
160        value="<%=mode.getName()%>" 
161      />
162      <tbl:hidden 
163        name="callback" 
164        value="<%=callback%>" 
165        skip="<%=callback == null%>" 
166      />
167      <tbl:columndef 
168        id="name"
169        property="name"
170        datatype="string"
171        title="Name"
172        sortable="true" 
173        filterable="true"
174        exportable="true"
175        show="always" 
176      />
177      <tbl:columndef 
178        id="id"
179        clazz="uniquecol"
180        property="id"
181        datatype="int"
182        title="ID"
183        sortable="true"
184        filterable="true"
185        exportable="true"
186      />
187      <tbl:columndef 
188        id="entryDate"
189        property="entryDate"
190        datatype="date"
191        title="Registered"
192        sortable="true" 
193        filterable="true"
194        exportable="true"
195        formatter="<%=dateFormatter%>"
196      />
197      <tbl:columndef 
198        id="pluginType"
199        property="mainType"
200        datatype="int"
201        enumeration="<%=mainTypes%>"
202        title="Type"
203        sortable="true" 
204        filterable="true"
205        exportable="true"
206      />
207      <tbl:columndef 
208        id="className"
209        clazz="uniquecol"
210        property="className"
211        datatype="string"
212        title="Class"
213        sortable="true" 
214        filterable="true"
215        exportable="true"
216      />
217      <tbl:columndef 
218        id="jarFile"
219        property="jarFile"
220        datatype="string"
221        title="JAR file"
222        sortable="true" 
223        filterable="true"
224        exportable="true"
225      />
226      <tbl:columndef 
227        id="version"
228        property="versionString"
229        datatype="string"
230        title="Version"
231        sortable="true" 
232        filterable="true"
233        exportable="true"
234      />
235      <tbl:columndef 
236        id="configurations"
237        title="Configurations"
238        property="&configurations(name)"
239        datatype="string"
240        filterable="true"
241        exportable="true"
242      />
243      <tbl:columndef 
244        id="contact"
245        property="contact"
246        datatype="string"
247        title="Contact"
248        sortable="true" 
249        filterable="true"
250        exportable="true"
251      />
252      <tbl:columndef 
253        id="copyright"
254        property="copyright"
255        datatype="string"
256        title="Copyright"
257        sortable="true" 
258        filterable="true"
259        exportable="true"
260      />
261      <tbl:columndef 
262        id="email"
263        property="email"
264        datatype="string"
265        title="Email"
266        sortable="true" 
267        filterable="true"
268        exportable="true"
269      />
270      <tbl:columndef 
271        id="url"
272        property="url"
273        datatype="string"
274        title="URL"
275        sortable="true" 
276        filterable="true"
277        exportable="true"
278      />
279      <tbl:columndef 
280        id="disabled"
281        property="disabled"
282        datatype="boolean"
283        title="Disabled"
284        sortable="true" 
285        filterable="true"
286        exportable="true"
287      />
288      <tbl:columndef 
289        id="interactive"
290        property="interactive"
291        datatype="boolean"
292        title="Is interactive"
293        sortable="true" 
294        filterable="true"
295        exportable="true"
296      />
297      <tbl:columndef 
298        id="supportsConfigurations"
299        property="supportsConfigurations"
300        datatype="boolean"
301        title="Support config"
302        sortable="true" 
303        filterable="true"
304        exportable="true"
305      />
306      <tbl:columndef 
307        id="requiresConfiguration"
308        property="requiresConfiguration"
309        datatype="boolean"
310        title="Requires config"
311        sortable="true" 
312        filterable="true"
313        exportable="true"
314      />
315      <tbl:columndef 
316        id="usePermissions"
317        property="usePermissions"
318        datatype="boolean"
319        title="Uses permissions"
320        sortable="true" 
321        filterable="true"
322        exportable="true"
323      />
324      <tbl:columndef 
325        id="allowImmediateExecution"
326        property="allowImmediateExecution"
327        datatype="boolean"
328        title="Immediate execution"
329        sortable="true" 
330        filterable="true"
331        exportable="true"
332      />
333      <tbl:columndef 
334        id="contexts"
335        property="$ctx.itemType"
336        exportproperty="guiContexts.itemType"
337        datatype="int"
338        enumeration="<%=itemTypes%>"
339        title="Items"
340        sortable="false" 
341        filterable="true"
342        exportable="false"
343      />
344      <tbl:columndef 
345        id="maxMemory"
346        property="maxMemory"
347        datatype="long"
348        title="Max memory"
349        sortable="true" 
350        filterable="true"
351        exportable="true"
352      />
353      <tbl:columndef 
354        id="trusted"
355        property="trusted"
356        datatype="boolean"
357        title="Trusted"
358        sortable="true" 
359        filterable="true"
360        exportable="true"
361      />
362      <tbl:columndef 
363        id="useInternalJobQueue"
364        property="useInternalJobQueue"
365        datatype="boolean"
366        title="Use internal job queue"
367        sortable="true" 
368        filterable="true"
369        exportable="true"
370      />
371      <tbl:columndef 
372        id="owner"
373        property="owner.name"
374        datatype="string"
375        title="Owner"
376        sortable="true" 
377        filterable="true"
378        exportable="true"
379      />
380      <tbl:columndef 
381        id="description"
382        property="description"
383        datatype="string"
384        title="Description" 
385        sortable="true" 
386        filterable="true" 
387        exportable="true"
388      />
389      <tbl:columndef
390        id="loaded"
391        title="Loaded"
392      />
393      <tbl:columndef
394        id="permission"
395        title="Permission"
396      />
397      <tbl:columndef
398        id="sharedTo"
399        title="Shared to"
400        filterable="true"
401        filterproperty="!sharedTo.name"
402        datatype="string"
403      />
404      <tbl:columndef 
405        id="xt-columns" 
406        extensions="<%=columnsInvoker%>" 
407        jspcontext="<%=jspContext%>" 
408      />
409      <div class="panelgroup bg-filled-50 bottomborder">
410        <tbl:toolbar
411          subclass="bottomborder"
412          visible="<%=mode.hasToolbar()%>"
413          >
414          <tbl:button 
415            id="btnNewItem"
416            disabled="<%=!createPermission%>" 
417            image="new.png" 
418            title="New&hellip;" 
419            tooltip="<%=createPermission ? "Create new plugin" : "You do not have permission to create plugins"%>" 
420          />
421          <tbl:button 
422            id="btnDeleteItems"
423            image="delete.png"
424            title="Delete" 
425            tooltip="Delete the selected items" 
426          />
427          <tbl:button 
428            id="btnRestoreItems"
429            image="restore.png"
430            title="Restore" 
431            tooltip="Restore the selected (deleted) items"
432          />
433          <tbl:button 
434            id="btnShareItems"
435            image="share.png"
436            title="Share&hellip;" 
437            tooltip="Share the selected items"
438          />
439          <tbl:button 
440            id="btnSetOwner"
441            image="take_ownership.png"
442            title="Set owner&hellip;"
443            tooltip="Change owner of the selected items"
444          />
445          <tbl:button 
446            id="btnColumns"
447            image="columns.png" 
448            title="Columns&hellip;" 
449            tooltip="Show, hide and re-order columns" 
450          />
451          <tbl:button 
452            id="btnImport"
453            data-plugin-type="IMPORT"
454            image="import.png" 
455            title="Import&hellip;" 
456            tooltip="Import data" 
457            visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
458          />
459          <tbl:button 
460            id="btnExport"
461            data-plugin-type="EXPORT"
462            image="export.png" 
463            title="Export&hellip;" 
464            tooltip="Export data" 
465            visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
466          />
467          <tbl:button 
468            id="btnRunPlugin"
469            data-plugin-type="OTHER"
470            image="runplugin.png" 
471            title="Run plugin&hellip;" 
472            tooltip="Run a plugin" 
473            visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
474          />
475          <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
476            wrapper="<%=new PrefixSuffixRenderer<ButtonAction>(jspContext, "<td>", "</td>") %>"/>
477        </tbl:toolbar>
478        <tbl:panel>
479          <tbl:presetselector />
480          <tbl:navigator
481            page="<%=cc.getPage()%>" 
482            rowsperpage="<%=cc.getRowsPerPage()%>" 
483            totalrows="<%=plugins == null ? 0 : plugins.getTotalCount()%>" 
484            visible="<%=mode.hasNavigator()%>"
485          />
486        </tbl:panel>
487      </div>
488      <tbl:data>
489        <tbl:headers>
490          <tbl:headerrow>
491            <tbl:header clazz="row-index bg-filled-100" />
492            <tbl:columnheaders />
493          </tbl:headerrow>
494          <%
495          int numFilters = cc.getNumPropertyFilters();
496          int numRows = cc.getFilterRows();
497          for (int filterNo = 0; filterNo < numRows; filterNo++)
498          {
499            boolean lastRow = filterNo == numRows-1;
500            %>
501            <tbl:headerrow>
502              <tbl:header subclass="row-index bg-filled-100">
503                <div class="index-<%=mode.getName()%>">
504                  <div class="index"></div>
505                  <div class="check">
506                    <base:icon 
507                      subclass="link table-check"
508                      image="check_uncheck.png" 
509                      tooltip="Toggle all (use CTRL, ALT or SHIFT to check/uncheck)" 
510                      visible="<%=lastRow && mode.hasCheck()%>"
511                    />
512                  </div>
513                  <div class="icons">
514                    <base:icon
515                      subclass="link table-filter-row-action"
516                      image="add.png"
517                      tooltip="Add extra filter row"
518                      visible="<%=lastRow%>"
519                    /><base:icon
520                      subclass="link table-filter-row-action"
521                      image="remove.png"
522                      tooltip="Remove this filter row"
523                      visible="<%=numRows > 1 || numFilters > 0 %>"
524                      data-remove-row="<%=filterNo%>"
525                    />
526                  </div>
527                </div>
528              </tbl:header>
529              <tbl:propertyfilter row="<%=filterNo%>" />
530            </tbl:headerrow>
531            <%
532          }
533          %>
534          <tbl:columnsubtitles />
535        </tbl:headers>
536        <tbl:rows>
537          <%
538          if (cc.getMessage() != null)
539          {
540            %>
541            <tbl:panel subclass="bg-filled-50">
542              <div class="messagecontainer error"><%=cc.getMessage()%></div>
543            </tbl:panel>
544            <%
545            cc.setMessage(null);
546          }
547          int index = cc.getPage()*cc.getRowsPerPage();
548          int selectedItemId = cc.getId();
549          Set<GuiContext> contexts = new TreeSet<GuiContext>(new ToStringComparator<GuiContext>(false));
550          if (plugins != null)
551          {
552            while (plugins.hasNext())
553            {
554              PluginDefinition item = plugins.next();
555              int itemId = item.getId();
556             
557              boolean sharePermission = item.hasPermission(Permission.SET_PERMISSION);
558              String name = HTML.encodeTags(item.getName());
559             
560              boolean deletePermission = item.hasPermission(Permission.DELETE);
561              boolean usePermission = item.hasPermission(Permission.USE);
562              boolean writePermission = item.hasPermission(Permission.WRITE);
563              String tooltip = mode.isSelectionMode() ? 
564                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
565              index++;
566              numListed++;
567              %>
568              <tbl:row>
569                <tbl:header clazz="row-index bg-filled-100">
570                  <div class="index-<%=mode.getName()%>">
571                    <div class="index <%=index>999?"index-smaller":""%>"><%=index%></div>
572                    <div class="check">
573                      <base:input
574                        type="checkbox" 
575                        name="<%=itemId%>" 
576                        value="<%=itemId%>" 
577                        title="<%=name%>" 
578                        checked="<%=cc.getSelected().contains(itemId)%>"
579                        visible="<%=mode.hasCheck()%>"
580                      />
581                      <base:input 
582                        type="radio" 
583                        name="item_id" 
584                        value="<%=itemId%>" 
585                        title="<%=name%>" 
586                        checked="<%=selectedItemId == itemId%>"
587                        visible="<%=mode.hasRadio()%>"
588                      />
589                    </div>
590                    <div class="icons">
591                      <base:icon 
592                        image="deleted.png"
593                        id="<%="delete."+itemId %>"
594                        subclass="<%=deletePermission ? "table-delete-item" : "disabled" %>"
595                        data-item-id="<%=itemId%>"
596                        tooltip="This item has been scheduled for deletion" 
597                        visible="<%=item.isRemoved()%>"
598                      /><base:icon 
599                        image="shared.png" 
600                        id="<%="share."+itemId %>"
601                        subclass="<%=sharePermission ? "table-share-item" : "disabled" %>"
602                        data-item-id="<%=itemId%>"
603                        tooltip="This item is shared to other users, groups and/or projects" 
604                        visible="<%=item.isShared()%>"
605                      />
606                    </div>
607                  </div>
608                </tbl:header>
609                <tbl:cell column="name"><div 
610                  class="link table-item"
611                  data-item-id="<%=itemId%>"
612                  data-no-edit="<%=writePermission ? 0 : 1 %>" 
613                  tabindex="0"
614                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
615                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
616                <tbl:cell column="entryDate" value="<%=item.getEntryDate()%>" />
617                <tbl:cell column="pluginType"><%=item.getMainType()%></tbl:cell>
618                <tbl:cell column="className"><%=item.getClassName()%></tbl:cell>
619                <tbl:cell column="jarFile"><%=Values.getString(item.getJarFile(), "<i>-&nbsp;internal&nbsp;-</i>")%></tbl:cell>
620                <tbl:cell column="version"><%=HTML.encodeTags(item.getVersionString())%></tbl:cell>
621                <tbl:cell column="configurations">
622                  <%
623                  configQuery.setParameter("plugin", itemId, Type.INT);
624                  try
625                  {
626                    String separator = "";
627                    for (PluginConfiguration p : configQuery.list(dc))
628                    {
629                      out.write(separator);
630                      if (mode.hasPropertyLink())
631                      {
632                        out.write(Base.getLinkedName(ID, p, false, mode.hasEditLink()));
633                      }
634                      else
635                      {
636                        out.write(HTML.encodeTags(p.getName()));
637                      }
638                      separator = ", ";
639                    }
640                  }
641                  catch (Throwable t)
642                  {
643                    %>
644                    <div class="error"><%=t.getMessage()%></div>
645                    <%
646                  }
647                  %>
648                  <base:icon
649                    id="<%="create-config."+itemId %>"
650                    subclass="auto-init"
651                    data-auto-init="new-config"
652                    data-item-id="<%=itemId%>"
653                    image="add.png" 
654                    tooltip="Create new configuration" 
655                    visible="<%=mode.hasEditLink() && createConfigurationPermission && usePermission && item.supportsConfigurations() %>"
656                  />
657                </tbl:cell>
658                <tbl:cell column="contact"><%=HTML.encodeTags(item.getContact())%></tbl:cell>
659                <tbl:cell column="copyright"><%=HTML.encodeTags(item.getCopyright())%></tbl:cell>
660                <tbl:cell column="email"><%=HTML.encodeTags(item.getEmail())%></tbl:cell>
661                <tbl:cell column="url"><%=HTML.encodeTags(item.getUrl())%></tbl:cell>
662                <tbl:cell column="disabled"><%=item.isDisabled()%></tbl:cell>
663                <tbl:cell column="interactive"><%=item.isInteractive()%></tbl:cell>
664                <tbl:cell column="supportsConfigurations"><%=item.supportsConfigurations() ? "yes" : "no"%></tbl:cell>
665                <tbl:cell column="requiresConfiguration"><%=item.requiresConfiguration() ? "yes" : "no"%></tbl:cell>
666                <tbl:cell column="usePermissions"><%=item.getUsePermissions() ? "yes" : "no"%></tbl:cell>
667                <tbl:cell column="contexts">
668                  <%
669                  contexts.clear();
670                  contexts.addAll(item.getGuiContexts());
671                  %>
672                  <%=contexts.isEmpty() ? "<i>- none -</i>" : Values.getString(contexts, ", ", true)%>
673                </tbl:cell>
674                <tbl:cell column="loaded"><%=item.getJarPath() == null || JarClassLoader.exists(item.getJarPath()) ? "Yes" : "No"%></tbl:cell>
675                <tbl:cell column="maxMemory"><%=Values.formatBytes(item.getMaxMemory())%></tbl:cell>
676                <tbl:cell column="trusted"><%=item.isTrusted() ? "yes" : "no"%></tbl:cell>
677                <tbl:cell column="useInternalJobQueue"><%=item.getUseInternalJobQueue() ? "yes" : "no"%></tbl:cell>
678                <tbl:cell column="allowImmediateExecution"><%=item.getAllowImmediateExecution() ? "yes" : "no"%></tbl:cell>
679                <tbl:cell column="owner"
680                  ><base:propertyvalue 
681                    item="<%=item%>" 
682                    property="owner"
683                    enableEditLink="<%=mode.hasEditLink()%>" 
684                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
685                  /></tbl:cell>
686                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
687                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
688                <tbl:cell column="sharedTo">
689                  <%
690                  Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
691                  while(sharees.hasNext())
692                  {
693                    Nameable n = sharees.next();
694                    if (mode.hasPropertyLink())
695                    {
696                      out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
697                    }
698                    else
699                    {
700                      out.write(HTML.encodeTags(n.getName()));
701                    }
702                    out.write(sharees.hasNext() ? ", " : "");
703                  }
704                  %>
705                </tbl:cell>
706                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
707                  <tbl:cell column="xt-columns" />
708                </tbl:xt-cells>
709              </tbl:row>
710              <%
711              }
712            }
713          if (numListed == 0)
714          {
715            %>
716            <tbl:panel subclass="bg-filled-50">
717              <div class="messagecontainer note">
718              <%=plugins == null || plugins.getTotalCount() == 0 ? "No plugins were found" : "No plugins on this page. Please select another page!" %>
719              </div>
720            </tbl:panel>
721            <%
722          }
723          %>
724        </tbl:rows>
725      </tbl:data>
726    </tbl:table>
727    </div>
728   
729    <base:buttongroup subclass="dialogbuttons">
730      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
731      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
732      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
733    </base:buttongroup>
734   
735  </base:body>
736  </base:page>
737  <%
738}
739finally
740{
741  if (plugins != null) plugins.close();
742  if (dc != null) dc.close();
743}
744%>
Note: See TracBrowser for help on using the repository browser.