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

Last change on this file since 3712 was 3679, checked in by Jari Häkkinen, 14 years ago

Changing the pesky "a (ä) character to a.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 22.6 KB
Line 
1<%-- $Id: view_plugin.jsp 3679 2007-08-17 07:18:29Z jari $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Hakkinen, 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 2
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 this program; if not, write to the Free Software
21  Foundation, Inc., 59 Temple Place - Suite 330,
22  Boston, MA  02111-1307, USA.
23  ------------------------------------------------------------------
24
25  @author Nicklas
26  @version 2.0
27--%>
28<%@ page session="false"
29  import="net.sf.basedb.core.SessionControl"
30  import="net.sf.basedb.core.DbControl"
31  import="net.sf.basedb.core.SystemItems"
32  import="net.sf.basedb.core.Item"
33  import="net.sf.basedb.core.ItemContext"
34  import="net.sf.basedb.core.Permission"
35  import="net.sf.basedb.core.PluginDefinition"
36  import="net.sf.basedb.core.PluginConfiguration"
37  import="net.sf.basedb.core.Group"
38  import="net.sf.basedb.core.JobAgent"
39  import="net.sf.basedb.core.JobAgentSettings"
40  import="net.sf.basedb.core.User"
41  import="net.sf.basedb.core.Include"
42  import="net.sf.basedb.core.ItemQuery"
43  import="net.sf.basedb.core.ItemResultIterator"
44  import="net.sf.basedb.core.ItemResultList"
45  import="net.sf.basedb.core.MultiPermissions"
46  import="net.sf.basedb.core.PermissionDeniedException"
47  import="net.sf.basedb.core.BaseException"
48  import="net.sf.basedb.core.RoleKey"
49  import="net.sf.basedb.core.plugin.GuiContext"
50  import="net.sf.basedb.core.plugin.Plugin"
51  import="net.sf.basedb.core.Project"
52  import="net.sf.basedb.core.query.Restrictions"
53  import="net.sf.basedb.core.query.Orders"
54  import="net.sf.basedb.core.query.Hql"
55  import="net.sf.basedb.util.JarClassLoader"
56  import="net.sf.basedb.util.ToStringComparator"
57  import="net.sf.basedb.clients.web.Base"
58  import="net.sf.basedb.clients.web.PermissionUtil"
59  import="net.sf.basedb.clients.web.util.HTML"
60  import="net.sf.basedb.util.Values"
61  import="java.util.Collections"
62  import="java.util.List"
63  import="java.util.Map"
64  import="java.util.Set"
65  import="java.util.TreeSet"
66%>
67<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
68<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
69<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
70<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
71<%!
72  private static final Item itemType = Item.PLUGINDEFINITION;
73  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
74 
75  private static final String getShortPermissions(Item itemType, Set<Permission> granted, Set<Permission> denied)
76  {
77    Set<Permission> defined = itemType.getDefinedPermissions();
78    StringBuilder sb = new StringBuilder();
79    if (defined.contains(Permission.CREATE)) sb.append(granted.contains(Permission.CREATE) ? "C" : denied.contains(Permission.CREATE) ? "-" : "c");
80    if (defined.contains(Permission.READ)) sb.append(granted.contains(Permission.READ) ? "R" :  denied.contains(Permission.READ) ? "-" : "r");
81    if (defined.contains(Permission.USE)) sb.append(granted.contains(Permission.USE) ? "U" :  denied.contains(Permission.USE) ? "-" : "u");
82    if (defined.contains(Permission.WRITE)) sb.append(granted.contains(Permission.WRITE) ? "W" :  denied.contains(Permission.WRITE) ? "-" : "w");
83    if (defined.contains(Permission.DELETE)) sb.append(granted.contains(Permission.DELETE) ? "D" :  denied.contains(Permission.DELETE) ? "-" : "d");
84    if (defined.contains(Permission.SET_OWNER)) sb.append(granted.contains(Permission.SET_OWNER) ? "O" :  denied.contains(Permission.SET_OWNER) ? "-" : "o");
85    if (defined.contains(Permission.SET_PERMISSION)) sb.append(granted.contains(Permission.SET_PERMISSION) ? "P" :  denied.contains(Permission.SET_PERMISSION) ? "-" : "p");
86    return sb.toString();
87  }
88%>
89<%
90final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
91final String ID = sc.getId();
92final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
93final int itemId = cc.getId();
94final float scale = Base.getScale(sc);
95final DbControl dc = sc.newDbControl();
96try
97{
98  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
99
100  String title = null;
101  String warning = null;
102  PluginDefinition plugin = PluginDefinition.getById(dc, itemId);
103  final boolean internal = plugin.getJarPath() == null;
104  final boolean loaded = internal || JarClassLoader.exists(plugin.getJarPath());
105  final boolean usePermissions = plugin.getUsePermissions();
106  final Set<GuiContext> contexts = new TreeSet<GuiContext>(new ToStringComparator<GuiContext>(false));
107  contexts.addAll(plugin.getGuiContexts());
108 
109  final boolean usePermission = plugin.hasPermission(Permission.USE);
110  final boolean writePermission = plugin.hasPermission(Permission.WRITE);
111  final boolean deletePermission = plugin.hasPermission(Permission.DELETE);
112  final boolean sharePermission = plugin.hasPermission(Permission.SET_PERMISSION);
113  final boolean setOwnerPermission = plugin.hasPermission(Permission.SET_OWNER);
114  final boolean isOwner = plugin.isOwner();
115 
116  try
117  {
118    Plugin thePlugin = plugin.newInstance(Plugin.class, null, sc, null, null);
119  }
120  catch (BaseException ex)
121  {
122    warning = ex.getMessage();
123  }
124  %>
125  <base:page title="<%=title%>">
126  <base:head scripts="tabcontrol.js,table.js" styles="toolbar.css,headertabcontrol.css,path.css,table.css">
127    <script language="JavaScript">
128    function editItem()
129    {
130      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
131    }
132    function shareItem()
133    {
134      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'SharePlugin', 500, 400);
135    }
136    function deleteItem()
137    {
138      location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
139    }
140    function restoreItem()
141    {
142      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
143    }
144    function takeOwnership()
145    {
146      if (confirm('Are you sure that you want to take ownership of this item? It can\'t be undone.'))
147      {
148        location.replace('index.jsp?ID=<%=ID%>&cmd=TakeOwnershipOfItem&item_id=<%=itemId%>');
149      }
150    }
151    function runPlugin(cmd)
152    {
153      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 740, 540);
154    }
155    function unloadPlugin()
156    {
157      location.replace('index.jsp?ID=<%=ID%>&cmd=UnloadItem&item_id=<%=itemId%>');
158    }
159    function newConfiguration()
160    {
161      Main.viewOrEditItem('<%=ID%>', 'PLUGINCONFIGURATION', 0, true, '&plugindefinition_id=<%=itemId%>');
162    }
163    function configurePlugin(itemId)
164    {
165      Main.openPopup('../../common/plugin/index.jsp?ID=<%=ID%>&cmd=ConfigurePlugin&pluginconfiguration_id='+itemId, 'ConfigurePlugin', 800, 600);
166    }
167    function configureAgent(agentId)
168    {
169      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true, '&jobagent_id='+agentId);
170    }
171    </script>
172  </base:head>
173  <base:body>
174    <p>
175    <p:path>
176      <p:pathelement title="Plugins" href="<%="index.jsp?ID="+ID%>" />
177      <p:pathelement title="<%=HTML.encodeTags(plugin.getName())%>" />
178    </p:path>
179   
180    <t:tabcontrol id="main" active="properties">
181    <t:tab id="properties" title="Properties">
182    <tbl:toolbar
183      >
184      <tbl:button 
185        disabled="<%=writePermission ? false : true%>" 
186        image="<%=writePermission ? "edit.gif" : "edit_disabled.gif"%>" 
187        onclick="editItem()" 
188        title="Edit&hellip;" 
189        tooltip="<%=writePermission ? "Edit this plugin" : "You do not have permission to edit this plugin"%>" 
190      />
191      <tbl:button 
192        disabled="<%=deletePermission ? false : true%>" 
193        image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
194        onclick="deleteItem()" 
195        title="Delete"
196        visible="<%=!plugin.isRemoved()%>"
197        tooltip="<%=deletePermission ? "Delete this plugin" : "You do not have permission to delete this plugin"%>" 
198      />
199      <tbl:button 
200        disabled="<%=writePermission ? false : true%>" 
201        image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
202        onclick="restoreItem()" 
203        title="Restore"
204        visible="<%=plugin.isRemoved()%>"
205        tooltip="<%=writePermission ? "Restore this plugin" : "You do not have permission to restore this plugin"%>" 
206      />
207      <tbl:button 
208        disabled="<%=sharePermission ? false : true%>"
209        image="<%=sharePermission ? "share.gif" : "share_disabled.gif"%>"
210        onclick="shareItem()" 
211        title="Share&hellip;" 
212        tooltip="<%=sharePermission ? "Share this plugin to other user, groups and projects" : "You do not have permission to share this plugin"%>"
213      />
214      <tbl:button 
215        disabled="<%=setOwnerPermission ? false : true%>"
216        image="<%=setOwnerPermission ? "take_ownership.png" : "take_ownership_disabled.png"%>"
217        onclick="takeOwnership()" 
218        title="Take ownership&hellip;"
219        visible="<%=!isOwner%>"
220        tooltip="<%=setOwnerPermission ? "Take ownership of this item" : "You do not have permission to take ownership of this item"%>"
221      />
222      <tbl:button
223        image="add.png"
224        onclick="newConfiguration()"
225        title="New configuration&hellip;"
226        tooltip="Create a new configuration for this plugin"
227        visible="<%=sc.hasPermission(Permission.CREATE, Item.PLUGINCONFIGURATION) && 
228          usePermission && plugin.supportsConfigurations()%>"
229      />
230      <tbl:button 
231        image="import.gif" 
232        onclick="runPlugin('ImportItem')" 
233        title="Import&hellip;" 
234        tooltip="Import data" 
235        visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
236      />
237      <tbl:button 
238        image="export.gif" 
239        onclick="runPlugin('ExportItem')" 
240        title="Export&hellip;" 
241        tooltip="Export data" 
242        visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
243      />
244      <tbl:button 
245        image="runplugin.gif" 
246        onclick="runPlugin('RunPlugin')" 
247        title="Run plugin&hellip;" 
248        tooltip="Run a plugin" 
249        visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
250      />
251      <tbl:button
252        onclick="unloadPlugin()"
253        title="Unload"
254        tooltip="<%=loaded && !internal ? "Unload the code for this plugin" : "The code for this plugin has not yet been loaded" %>"
255        visible="<%=loaded && !internal%>"
256      />
257      <tbl:button
258        image="help.gif"
259        onclick="<%="Main.openHelp('" + ID +"', 'plugindefinition.view.properties')"%>"
260        title="Help&hellip;"
261        tooltip="Get help about this page"
262      />
263      </tbl:toolbar>
264    <div class="boxedbottom">
265      <div class="itemstatus">Permissions on this item: <i><%=PermissionUtil.getFullPermissionNames(plugin)%></i></div>
266      <%
267      if (plugin.isRemoved() || plugin.isShared())
268      {
269        %>
270        <div class="itemstatus">
271          <base:icon image="deleted.gif" 
272            visible="<%=plugin.isRemoved()%>"> This item has been flagged for deletion<br></base:icon>
273          <base:icon image="shared.gif" 
274            visible="<%=plugin.isShared()%>"> This item is shared to other users, groups and/or projects</base:icon>
275        </div>
276        <%
277      }
278      %>
279      <%
280      if (warning != null)
281      {
282        %>
283        <div class="error"><%=warning%></div>
284        <%
285      }
286      %>
287      <table class="form" cellspacing="0">
288      <tr>
289        <td class="prompt">Name</td>
290        <td><%=HTML.encodeTags(plugin.getName())%></td>
291      </tr>
292      <tr>
293        <td class="prompt">Type</td>
294        <td><%=plugin.getMainType()%></td>
295      </tr>
296      <tr>
297        <td class="prompt">Class</td>
298        <td><%=plugin.getClassName()%></td>
299      </tr>
300      <tr>
301        <td class="prompt">Jar path</td>
302        <td><%=plugin.getJarPath() == null ? "<i>- internal -</i>" : plugin.getJarPath()%></td>
303      </tr>
304      <tr>
305        <td class="prompt">Version</td>
306        <td><%=plugin.getVersionString()%></td>
307      </tr>
308      <tr>
309        <td class="prompt">Max memory</td>
310        <td><%=Values.formatBytes(plugin.getMaxMemory())%></td>
311      </tr>
312      <tr>
313        <td class="prompt">Trusted</td>
314        <td><%=plugin.isTrusted() ? "yes" : "no"%></td>
315      </tr>     
316      <tr>
317        <td class="prompt">Allow immediate execution</td>
318        <td><%=plugin.getAllowImmediateExecution() ? "yes" : "no"%></td>
319      </tr>     
320      <tr>
321        <td class="prompt" valign="baseline">Items</td>
322        <td><%=Values.getString(contexts, ", ", true)%></td>
323      </tr>
324      <tr>
325        <td class="prompt">Contact</td>
326        <td><%=HTML.encodeTags(plugin.getContact())%></td>
327      </tr>
328      <tr>
329        <td class="prompt">Copyright</td>
330        <td><%=HTML.encodeTags(plugin.getCopyright())%></td>
331      </tr>
332      <tr>
333        <td class="prompt">Email</td>
334        <td><%=HTML.scanForLinks(plugin.getEmail(), HTML.LINK_EMAIL, "_new")%></td>
335      </tr>
336      <tr>
337        <td class="prompt">Url</td>
338        <td><%=HTML.scanForLinks(plugin.getUrl(), HTML.LINK_URL, "_new")%></td>
339      </tr>
340      <tr>
341        <td class="prompt">Owner</td>
342        <td><base:propertyvalue item="<%=plugin%>" property="owner" /></td>
343      </tr>
344      <tr valign="top">
345        <td class="prompt">Description</td>
346        <td><%=HTML.niceFormat(plugin.getDescription())%></td>
347      </tr>
348      </table>
349      <%
350      ItemQuery<PluginConfiguration> configQuery = plugin.getPluginConfigurations();
351      configQuery.include(Include.MINE, Include.SHARED, Include.OTHERS, Include.IN_PROJECT);
352      configQuery.order(Orders.asc(Hql.property("name")));
353      ItemResultList<PluginConfiguration> configurations = configQuery.list(dc);
354   
355      if (configurations.size() == 0)
356      {
357        if (plugin.supportsConfigurations())
358        {
359          %>
360          <h4>Configurations</h4>
361          There are no configurations for this plugin (or, you don't have permission to view them).
362          <%
363        }
364      }
365      else
366      {
367        %>
368        <h4 class="docked">Configurations</h4>
369        <tbl:table
370          id="configurations"
371          clazz="itemlist"
372          columns="all"
373          >
374        <tbl:columndef 
375          id="name"
376          title="Name"
377        />
378        <tbl:columndef 
379          id="description"
380          title="Description"
381        />
382        <tbl:columndef
383          id="configure"
384          title="Configure"
385          show="<%=plugin.supportsConfigurations() ? "always" : "never" %>"
386        />
387        <tbl:data>
388          <tbl:columns>
389          </tbl:columns>
390          <tbl:rows>
391          <%
392          for (PluginConfiguration pc : configurations)
393          {
394            %>
395            <tbl:row>
396              <tbl:cell column="name"><%=Base.getLinkedName(ID, pc, false, true)%></tbl:cell>
397              <tbl:cell column="description"><%=HTML.encodeTags(pc.getDescription())%></tbl:cell>
398              <tbl:cell column="configure">
399              <%
400              if (pc.hasPermission(Permission.WRITE))
401              {
402                %>
403                <base:icon image="runplugin.gif" 
404                  onclick="<%="configurePlugin(" + pc.getId() + ")"%>"
405                  tooltip="Configure this plugin "/>
406                <%
407              }
408              %>
409              </tbl:cell>
410            </tbl:row>
411            <%
412          }
413          %>
414          </tbl:rows>
415        </tbl:data>
416        </tbl:table>
417        <%
418      }
419      %>
420
421      <%
422      ItemQuery<JobAgent> agentQuery = JobAgent.getQuery();
423      agentQuery.include(Include.MINE, Include.SHARED, Include.OTHERS, Include.IN_PROJECT);
424      agentQuery.order(Orders.asc(Hql.property("name")));
425      agentQuery.join(Hql.innerJoin("plugins", "p"));
426      agentQuery.restrict(Restrictions.eq(Hql.property("p", "pluginDefinition"), Hql.entity(plugin)));
427      ItemResultList<JobAgent> agents = agentQuery.list(dc);
428   
429      if (agents.size() == 0)
430      {
431        %>
432        <h4>Installed on job agents</h4>
433        This plugin isn't installed on any job agents (or, you don't have permission to view them).
434        <%
435      }
436      else
437      {
438        %>
439        <h4 class="docked">Installed on job agents</h4>
440        <tbl:table
441          id="agents"
442          clazz="itemlist"
443          columns="all"
444          >
445        <tbl:columndef 
446          id="name"
447          title="Name"
448        />
449        <tbl:columndef 
450          id="server"
451          title="Server"
452        />
453        <tbl:columndef 
454          id="info"
455          title="CPU/Memory"
456        />
457        <tbl:columndef
458          id="jarPath"
459          title="JAR path"
460        />
461        <tbl:columndef
462          id="maxMemory"
463          title="Max memory"
464        />
465        <tbl:columndef
466          id="trusted"
467          title="Trusted"
468        />
469        <tbl:columndef
470          id="priorityBoost"
471          title="Priority boost"
472        />
473        <tbl:columndef
474          id="configure"
475          title=""
476        />
477        <tbl:data>
478          <tbl:columns>
479          </tbl:columns>
480          <tbl:rows>
481          <%
482          for (JobAgent agent : agents)
483          {
484            String server = agent.getServer();
485            Integer port = agent.getPort();
486            JobAgentSettings settings = agent.getSettings(plugin, false);
487            Long maxMemory = settings.getEffectiveMaxMemory();
488            String jarPath = settings.getEffectiveJarPath();
489            %>
490            <tbl:row>
491              <tbl:cell column="name"><%=Base.getLinkedName(ID, agent, false, true)%></tbl:cell>
492              <tbl:cell column="server"><%=server == null || port == null ? "" : server + ":" + port%></tbl:cell>
493              <tbl:cell column="info">
494                CPU usage: <%=agent.getCpuUsage() == null ? "<i>- unknown -</i>" : agent.getCpuUsage()+"%" %><br>
495                Total memory: <%=agent.getTotalMemory() == null ? "<i>- unknown -</i>" : Values.formatBytes(agent.getTotalMemory()) %><br>
496                Used memory: <%=agent.getUsedMemory() == null ? "<i>- unknown -</i>" : Values.formatBytes(agent.getUsedMemory()) %>
497              </tbl:cell>
498              <tbl:cell column="jarPath"><%=jarPath == null ? "<i>- internal -</i>" : HTML.encodeTags(jarPath)%></tbl:cell>
499              <tbl:cell column="maxMemory"><%=maxMemory == null ? "<i>- not specified -</i>" : Values.formatBytes(maxMemory)%></tbl:cell>
500              <tbl:cell column="trusted"><%=settings.isEffectivelyTrusted()%></tbl:cell>
501              <tbl:cell column="priorityBoost"><%=settings.getPriorityBoost()%></tbl:cell>
502              <tbl:cell column="configure">
503              <%
504              if (agent.hasPermission(Permission.WRITE))
505              {
506                %>
507                <base:icon image="runplugin.gif" 
508                  onclick="<%="configureAgent(" + agent.getId() + ")"%>"
509                  tooltip="Configure the settings for this plugin on the job agent "/>
510                <%
511              }
512              %>
513              </tbl:cell>
514            </tbl:row>
515            <%
516          }
517          %>
518          </tbl:rows>
519        </tbl:data>
520        </tbl:table>
521        <%
522      }     
523     
524      // Tables with users/groups/projects that this item is shared to
525      MultiPermissions mp = new MultiPermissions(Collections.singleton(plugin));
526      ItemResultIterator<User> users = mp.getUsers().iterate(dc);
527      ItemResultIterator<Group> groups = mp.getGroups().iterate(dc);
528      ItemResultIterator<Project> projects = mp.getProjects().iterate(dc);
529     
530      if (users.hasNext() || groups.hasNext() || projects.hasNext())
531      {
532        %>
533        <h4 class="docked">Shared to</h4>
534        <tbl:table 
535          id="itemsSharedTo"
536          clazz="itemlist"
537          columns="all"
538        >
539          <tbl:columndef 
540            id="itemType"
541            title="Item type"
542          />
543          <tbl:columndef 
544            id="name"
545            title="Name"
546          />
547          <tbl:columndef 
548            id="permissions"
549            title="Permissions"
550          />
551          <tbl:data>
552            <tbl:columns>
553            </tbl:columns>
554            <tbl:rows>
555            <%
556            while(projects.hasNext())
557            {
558              Project project = projects.next();
559              Set<Permission> permissions = mp.getPermissions(project).values().iterator().next();
560              %>     
561              <tbl:row>
562                <tbl:cell column="itemType"><%=project.getType()%></tbl:cell>
563                <tbl:cell column="name"><%=Base.getLinkedName(ID, project, false, true)%></tbl:cell>
564                <tbl:cell column="permissions">
565                  <%=PermissionUtil.translatePermissionsToString(permissions)%>
566                </tbl:cell>
567              </tbl:row>
568              <%
569            }
570            while(groups.hasNext())
571            {
572              Group group = groups.next();
573              Set<Permission> permissions = mp.getPermissions(group).values().iterator().next();
574              %>
575              <tbl:row>             
576                <tbl:cell column="itemType"><%=group.getType()%></tbl:cell>
577                <tbl:cell column="name"><%=Base.getLinkedName(ID, group, false, true)%></tbl:cell>
578                <tbl:cell column="permissions">
579                  <%=PermissionUtil.translatePermissionsToString(permissions)%>
580                </tbl:cell>
581              </tbl:row>
582              <% 
583            }
584            while (users.hasNext())
585            {
586              User user = users.next();
587              Set<Permission> permissions = mp.getPermissions(user).values().iterator().next();
588              %>
589              <tbl:row>             
590                <tbl:cell column="itemType"><%=user.getType()%></tbl:cell>
591                <tbl:cell column="name"><%=Base.getLinkedName(ID, user, false, true)%></tbl:cell>
592                <tbl:cell column="permissions">
593                  <%=PermissionUtil.translatePermissionsToString(permissions)%>
594                </tbl:cell>
595              </tbl:row>
596              <%
597            }
598            %>
599            </tbl:rows>
600          </tbl:data>
601        </tbl:table>
602        <%
603      }
604      else
605      {
606        %>
607        <h4>Shared to</h4>
608        This plugin is not shared
609        (or, you don't have permission to view the ones it is shared to).
610        <%
611      }
612      %>
613      <br>
614      <h4>Permissions</h4>
615        <table class="form" cellspacing="0">
616        <tr>
617          <td class="prompt">Using permissions</td>
618          <td><%=usePermissions ? "yes" : "no"%></td>
619        </tr>       
620        </table>
621       
622        <div class="itemlist">
623        <div class="data">
624        <table border="0" cellspacing="0" cellpadding="0">
625        <tr>
626        <%
627        Map<String, List<Item>> permissionGroups = PermissionUtil.getPermissionGroups();
628       
629        for (String name : permissionGroups.keySet())
630        {
631          %>
632          <th class="columnheader" colspan="2"><b><%=name%></b></th>
633          <%
634        }
635        %>
636        </tr>
637        <%
638        int newItems = 0;
639        int index = 0;
640        int i = 0;
641        do
642        {
643          newItems = 0;
644          StringBuilder sb = new StringBuilder();
645          sb.append("<tr valign=\"top\"");
646          sb.append(" class=\"").append(i == 1 ? "oddrow" : "evenrow").append("\"");
647          sb.append(">");
648          for (String name : permissionGroups.keySet())
649          {
650            List<Item> items = permissionGroups.get(name);
651            if (items.size() > index)
652            {
653              newItems++;
654              Item item = items.get(index);
655              int keyId = SystemItems.getRoleKeyId(item);
656              RoleKey key = RoleKey.getById(dc, keyId);
657             
658              sb.append("<td class=\"cell\"><b>").append(key.getName()).append("</b></td>");
659              sb.append("<td class=\"cell\">");
660                           
661              if (keyId != 0)
662              {               
663                Set<Permission> granted = plugin.getGranted(key);
664                Set<Permission> denied = plugin.getDenied(key);
665                sb.append(getShortPermissions(item, granted, denied));
666              }
667              else
668              {
669                sb.append("(undefined key)");
670              }
671              sb.append("</td>");
672            }
673            else
674            {
675              sb.append("<td class=\"cell\" colspan=\"2\">&nbsp;</td>");
676            }
677          }
678          if (newItems > 0)
679          {
680            %>
681            <%=sb.toString()%>
682            <%
683          }
684          i = 1 - i;
685          index++;
686        } while (newItems > 0);
687        %>
688        <tr class="panel">
689        <td colspan="99" class="panel">
690        Capital letters = Permission is always granted, Small letters = Permission is only granted if logged in user
691        has that permission<br>
692        <b>C/c</b> = Create, <b>R/r</b> = Read, <b>U/u</b> = Use,
693        <b>W/w</b> = Write, <b>D/d</b> = Delete, <b>O/o</b> = Take ownership,
694        <b>P/p</b> = Change permissions
695        </td>
696        </tr>
697        </table>
698        </div>
699        </div>
700
701    </div>
702      </t:tab>
703      </t:tabcontrol>
704
705  </base:body>
706  </base:page>
707  <%
708}
709finally
710{
711  if (dc != null) dc.close();
712}
713
714%>
Note: See TracBrowser for help on using the repository browser.