source: branches/2.4-stable/www/admin/pluginconfigurations/view_configuration.jsp @ 3743

Last change on this file since 3743 was 3743, checked in by Nicklas Nordborg, 15 years ago

Fixes #753: NullPointerException? in plugin configuration list

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 15.4 KB
Line 
1<%-- $Id: view_configuration.jsp 3743 2007-09-17 12:47:03Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Hakkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 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.Group"
33  import="net.sf.basedb.core.Item"
34  import="net.sf.basedb.core.ItemContext"
35  import="net.sf.basedb.core.ItemResultIterator"
36  import="net.sf.basedb.core.Permission"
37  import="net.sf.basedb.core.PluginDefinition"
38  import="net.sf.basedb.core.PluginConfiguration"
39  import="net.sf.basedb.core.ParameterInfo"
40  import="net.sf.basedb.core.User"
41  import="net.sf.basedb.core.BasicItem"
42  import="net.sf.basedb.core.File"
43  import="net.sf.basedb.core.MultiPermissions"
44  import="net.sf.basedb.core.Nameable"
45  import="net.sf.basedb.core.PermissionDeniedException"
46  import="net.sf.basedb.core.PluginDefinition"
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.util.JarClassLoader"
51  import="net.sf.basedb.util.ToStringComparator"
52  import="net.sf.basedb.clients.web.Base"
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.clients.web.util.NameablePluginAdaptor"
57  import="net.sf.basedb.util.formatter.Formatter"
58  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
59  import="java.util.Map"
60  import="java.util.Set"
61  import="java.util.TreeSet"
62  import="java.util.List"
63  import="java.util.Collections"
64  import="java.util.Date"
65%>
66<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
67<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
68<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
69<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
70<%!
71  private static final Item itemType = Item.PLUGINCONFIGURATION;
72  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
73%>
74<%
75final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
76final String ID = sc.getId();
77final String root = request.getContextPath() + "/";
78final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
79final int itemId = cc.getId();
80final float scale = Base.getScale(sc);
81final DbControl dc = sc.newDbControl();
82try
83{
84  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
85  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
86
87  String title = null;
88  PluginConfiguration configuration = PluginConfiguration.getById(dc, itemId);
89 
90  final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
91  final boolean writePermission = configuration.hasPermission(Permission.WRITE);
92  final boolean deletePermission = configuration.hasPermission(Permission.DELETE);
93  final boolean sharePermission = configuration.hasPermission(Permission.SET_PERMISSION);
94  final boolean setOwnerPermission = configuration.hasPermission(Permission.SET_OWNER);
95  final boolean isOwner = configuration.isOwner();
96
97  final Set<GuiContext> contexts = new TreeSet<GuiContext>(new ToStringComparator<GuiContext>(false));
98  PluginDefinition plugin = null;
99  Nameable nameableProxy = null;
100  boolean readPlugin = true;
101  boolean configurable = false;
102  try
103  {
104    plugin = configuration.getPluginDefinition();
105    nameableProxy = new NameablePluginAdaptor(plugin);
106    contexts.addAll(plugin.getGuiContexts());
107    configurable = plugin.isInteractive() && plugin.supportsConfigurations();
108  }
109  catch (PermissionDeniedException ex)
110  {
111    readPlugin = false;
112  }
113  %>
114
115  <base:page title="<%=title%>">
116  <base:head scripts="table.js,tabcontrol.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
117    <script language="JavaScript">
118    function editItem()
119    {
120      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
121    }
122    function copyItem()
123    {
124      Main.copyItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
125    }
126    function shareItem()
127    {
128      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'ShareConfiguration', 500, 400);
129    }
130    function deleteItem()
131    {
132      location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
133    }
134    function restoreItem()
135    {
136      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
137    }
138    function takeOwnership()
139    {
140      if (confirm('Are you sure that you want to take ownership of this item? It can\'t be undone.'))
141      {
142        location.replace('index.jsp?ID=<%=ID%>&cmd=TakeOwnershipOfItem&item_id=<%=itemId%>');
143      }
144    }
145    function runPlugin(cmd)
146    {
147      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 740, 540);
148    }
149    function configure()
150    {
151      Main.openPopup('../../common/plugin/index.jsp?ID=<%=ID%>&cmd=ConfigurePlugin&pluginconfiguration_id=<%=itemId%>', 'ConfigurePlugin', 800, 600);
152    }
153    </script>
154  </base:head>
155  <base:body>
156    <p>
157    <p:path>
158      <p:pathelement title="Plugin configurations" href="<%="index.jsp?ID="+ID%>" />
159      <p:pathelement title="<%=HTML.encodeTags(configuration.getName())%>" />
160    </p:path>
161   
162    <t:tabcontrol id="main" active="properties">
163    <t:tab id="properties" title="Properties">
164    <tbl:toolbar
165      >
166      <tbl:button 
167        disabled="<%=writePermission ? false : true%>" 
168        image="<%=writePermission ? "edit.gif" : "edit_disabled.gif"%>" 
169        onclick="editItem()" 
170        title="Edit&hellip;" 
171        tooltip="<%=writePermission ? "Edit this plugin configuration" : "You do not have permission to edit this plugin configuration"%>" 
172      />
173      <tbl:button 
174        disabled="<%=!createPermission%>" 
175        image="<%=createPermission ? "copy.gif" : "copy_disabled.gif"%>"
176        onclick="copyItem()" 
177        title="Copy&hellip;" 
178        tooltip="<%=createPermission ? "Create a copy of this configuration" : "You do not have permission to create new configurations"%>"
179      />
180      <tbl:button 
181        disabled="<%=deletePermission ? false : true%>" 
182        image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
183        onclick="deleteItem()" 
184        title="Delete"
185        visible="<%=!configuration.isRemoved()%>"
186        tooltip="<%=deletePermission ? "Delete this plugin configuration" : "You do not have permission to delete this plugin configuration"%>" 
187      />
188      <tbl:button 
189        disabled="<%=writePermission ? false : true%>" 
190        image="<%=writePermission ? "restore.gif" : "restore_disabled.gif"%>" 
191        onclick="restoreItem()" 
192        title="Restore"
193        visible="<%=configuration.isRemoved()%>"
194        tooltip="<%=writePermission ? "Restore this plugin configuration" : "You do not have permission to restore this plugin configuration"%>" 
195      />
196      <tbl:button 
197        disabled="<%=sharePermission ? false : true%>"
198        image="<%=sharePermission ? "share.gif" : "share_disabled.gif"%>"
199        onclick="shareItem()" 
200        title="Share&hellip;" 
201        tooltip="<%=sharePermission ? "Share this plugin configuration to other user, groups and projects" : "You do not have permission to share this plugin configuration"%>"
202      />
203      <tbl:button 
204        disabled="<%=setOwnerPermission ? false : true%>"
205        image="<%=setOwnerPermission ? "take_ownership.png" : "take_ownership_disabled.png"%>"
206        onclick="takeOwnership()" 
207        title="Take ownership&hellip;"
208        visible="<%=!isOwner%>"
209        tooltip="<%=setOwnerPermission ? "Take ownership of this item" : "You do not have permission to take ownership of this item"%>"
210      />
211      <tbl:button 
212        image="import.gif" 
213        onclick="runPlugin('ImportItem')" 
214        title="Import&hellip;" 
215        tooltip="Import data" 
216        visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
217      />
218      <tbl:button 
219        image="export.gif" 
220        onclick="runPlugin('ExportItem')" 
221        title="Export&hellip;" 
222        tooltip="Export data" 
223        visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
224      />
225      <tbl:button 
226        image="runplugin.gif" 
227        onclick="runPlugin('RunPlugin')" 
228        title="Run plugin&hellip;" 
229        tooltip="Run a plugin" 
230        visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
231      />
232      <tbl:button
233        image="runplugin.gif"
234        onclick="configure()"
235        title="Configure&hellip;"
236        tooltip="Configure this plugin"
237        visible="<%=configurable && writePermission%>"
238      />
239      <tbl:button
240        image="help.gif"
241        onclick="<%="Main.openHelp('" + ID +"', 'pluginconfiguration.view.properties')"%>"
242        title="Help&hellip;"
243        tooltip="Get help about this page"
244      />
245      </tbl:toolbar>
246    <div class="boxedbottom">
247      <div class="itemstatus">Permissions on this item: <i><%=PermissionUtil.getFullPermissionNames(configuration)%></i></div>
248      <%
249      if (configuration.isRemoved() || configuration.isShared())
250      {
251        %>
252        <div class="itemstatus">
253          <base:icon image="deleted.gif" 
254            visible="<%=configuration.isRemoved()%>"> This item has been flagged for deletion<br></base:icon>
255          <base:icon image="shared.gif" 
256            visible="<%=configuration.isShared()%>"> This item is shared to other users, groups and/or projects</base:icon>
257        </div>
258        <%
259      }
260      %>
261      <table class="form" cellspacing="0">
262      <tr>
263        <td class="prompt">Name</td>
264        <td><%=HTML.encodeTags(configuration.getName())%></td>
265      </tr>
266      <tr>
267        <td class="prompt">Plugin</td>
268        <td>
269          <%=Base.getLinkedName(ID, nameableProxy, plugin == null, true)%>
270        </td>
271      </tr>
272      <tr>
273        <td class="prompt">Type</td>
274        <td><%=plugin == null ? "<i>- denied -</i>" : plugin.getMainType().toString()%></td>
275      </tr>
276      <tr>
277        <td class="prompt">Owner</td>
278        <td><base:propertyvalue item="<%=configuration%>" property="owner" /></td>
279      </tr>
280      <tr valign="top">
281        <td class="prompt">Description</td>
282        <td><%=HTML.niceFormat(configuration.getDescription())%></td>
283      </tr>
284      </table>
285   
286      <%   
287      // Tables with users/groups/projects that this item is shared to
288      MultiPermissions mp = new MultiPermissions(Collections.singleton(configuration));
289      ItemResultIterator<User> users = mp.getUsers().iterate(dc);
290      ItemResultIterator<Group> groups = mp.getGroups().iterate(dc);
291      ItemResultIterator<Project> projects = mp.getProjects().iterate(dc);
292     
293      if (users.hasNext() || groups.hasNext() || projects.hasNext())
294      {
295        %>
296        <h4 class="docked">Shared to</h4>
297        <tbl:table 
298          id="itemsSharedTo"
299          clazz="itemlist"
300          columns="all"
301        >
302          <tbl:columndef 
303            id="itemType"
304            title="Item type"
305          />
306          <tbl:columndef 
307            id="name"
308            title="Name"
309          />
310          <tbl:columndef 
311            id="permissions"
312            title="Permissions"
313          />
314          <tbl:data>
315            <tbl:columns>
316            </tbl:columns>
317            <tbl:rows>
318            <%
319            while(projects.hasNext())
320            {
321              Project project = projects.next();
322              Set<Permission> permissions = mp.getPermissions(project).values().iterator().next();
323              %>     
324              <tbl:row>
325                <tbl:cell column="itemType"><%=project.getType()%></tbl:cell>
326                <tbl:cell column="name"><%=Base.getLinkedName(ID, project, false, true)%></tbl:cell>
327                <tbl:cell column="permissions">
328                  <%=PermissionUtil.translatePermissionsToString(permissions)%>
329                </tbl:cell>
330              </tbl:row>
331              <%
332            }
333            while(groups.hasNext())
334            {
335              Group group = groups.next();
336              Set<Permission> permissions = mp.getPermissions(group).values().iterator().next();
337              %>
338              <tbl:row>             
339                <tbl:cell column="itemType"><%=group.getType()%></tbl:cell>
340                <tbl:cell column="name"><%=Base.getLinkedName(ID, group, false, true)%></tbl:cell>
341                <tbl:cell column="permissions">
342                  <%=PermissionUtil.translatePermissionsToString(permissions)%>
343                </tbl:cell>
344              </tbl:row>
345              <% 
346            }
347            while (users.hasNext())
348            {
349              User user = users.next();
350              Set<Permission> permissions = mp.getPermissions(user).values().iterator().next();
351              %>
352              <tbl:row>             
353                <tbl:cell column="itemType"><%=user.getType()%></tbl:cell>
354                <tbl:cell column="name"><%=Base.getLinkedName(ID, user, false, true)%></tbl:cell>
355                <tbl:cell column="permissions">
356                  <%=PermissionUtil.translatePermissionsToString(permissions)%>
357                </tbl:cell>
358              </tbl:row>
359              <%
360            }
361            %>
362            </tbl:rows>
363          </tbl:data>
364        </tbl:table>
365        <%
366      }
367      else
368      {
369        %>
370        <h4>Shared to</h4>
371        This configuration is not shared
372        (or, you don't have permission to view the ones it is shared to).
373        <%
374      }
375      %>
376    </div>
377
378      </t:tab>
379     
380      <t:tab id="parameters" title="Configuration parameters" >
381      <div class="boxed">
382      <table class="form" cellspacing="0">
383      <%
384      if (plugin != null)
385      {
386        List<String> names = new java.util.ArrayList<String>(configuration.getParameterNames());
387        if (names == null || names.size() == 0)
388        {
389          %>
390          No parameters has been specified.
391          <%
392        }
393        else
394        {
395          Collections.sort(names);
396          for (String name : names)
397          {
398            StringBuilder sb = new StringBuilder();
399            String displayValue = "";
400            String description = "";
401            try
402            {
403              ParameterInfo pi = configuration.getParameterInfo(name);
404              if (pi.getLabel() != null) name = HTML.encodeTags(pi.getLabel());
405              description = HTML.encodeTags(pi.getDescription());
406              List<?> values = pi.getValues();
407              int i = 0;
408              for (Object value : values)
409              {
410                if (value != null)
411                {
412                  if (i > 0) sb.append(", ");
413                  i++;
414                  if (value instanceof BasicItem)
415                  {
416                    BasicItem item = (BasicItem)value;
417                    String itemName = "";
418                    if (item instanceof File)
419                    {
420                      sb.append(Base.getLinkedFile(ID, (File)item, false, true, true, root));
421                    }
422                    else 
423                    {
424                      if (item instanceof Nameable)
425                      {
426                        itemName = ((Nameable)item).getName();
427                      }
428                      else
429                      {
430                        itemName = item.toString();
431                      }
432                      sb.append(Base.getLink(ID, HTML.encodeTags(itemName), 
433                        item.getType(), item.getId(), item.hasPermission(Permission.WRITE)));
434                    }
435                  }
436                  else if (value instanceof Date)
437                  {
438                    sb.append(dateFormatter.format((Date)value));
439                  }
440                  else
441                  {
442                    sb.append(HTML.encodeTags(value.toString()));
443                  }
444                }
445              }
446              displayValue = sb.toString();
447            }
448            catch (Throwable ex)
449            {
450              displayValue = "<i>ERROR: "+ex.getMessage()+"</i>";
451            }
452            %>
453            <tr>
454              <td class="prompt"><span title="<%=description%>"><%=name%></span></td>
455              <td>
456                <%=displayValue%>
457              </td>
458            </tr>
459            <%
460          }
461        }
462      }
463      %>
464      </table>
465      </div>
466     
467      </t:tab>
468      </t:tabcontrol>
469
470  </base:body>
471  </base:page>
472  <%
473}
474finally
475{
476  if (dc != null) dc.close();
477}
478
479%>
Note: See TracBrowser for help on using the repository browser.