source: trunk/www/admin/plugindefinitions/edit_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: 33.5 KB
Line 
1<%-- $Id: edit_plugin.jsp 3679 2007-08-17 07:18:29Z jari $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Jari Hakkinen, Nicklas Nordborg, Martin Svensson
5  Copyright (C) 2007 Johan Enell, Nicklas Nordborg
6
7  This file is part of BASE - BioArray Software Environment.
8  Available at http://base.thep.lu.se/
9
10  BASE is free software; you can redistribute it and/or
11  modify it under the terms of the GNU General Public License
12  as published by the Free Software Foundation; either version 2
13  of the License, or (at your option) any later version.
14
15  BASE is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU General Public License for more details.
19
20  You should have received a copy of the GNU General Public License
21  along with this program; if not, write to the Free Software
22  Foundation, Inc., 59 Temple Place - Suite 330,
23  Boston, MA  02111-1307, USA.
24  ------------------------------------------------------------------
25
26
27  @author Nicklas
28  @version 2.0
29--%>
30<%@ page session="false"
31  import="net.sf.basedb.core.SessionControl"
32  import="net.sf.basedb.core.DbControl"
33  import="net.sf.basedb.core.Item"
34  import="net.sf.basedb.core.ItemContext"
35  import="net.sf.basedb.core.Include"
36  import="net.sf.basedb.core.Permission"
37  import="net.sf.basedb.core.PluginDefinition"
38  import="net.sf.basedb.core.ItemQuery"
39  import="net.sf.basedb.core.ItemResultList"
40  import="net.sf.basedb.core.JobAgent"
41  import="net.sf.basedb.core.JobAgentSettings"
42  import="net.sf.basedb.core.BaseException"
43  import="net.sf.basedb.core.PermissionDeniedException"
44  import="net.sf.basedb.core.RoleKey"
45  import="net.sf.basedb.core.SystemItems"
46  import="net.sf.basedb.core.plugin.Plugin"
47  import="net.sf.basedb.core.plugin.Permissions"
48  import="net.sf.basedb.core.query.Restrictions"
49  import="net.sf.basedb.core.query.Orders"
50  import="net.sf.basedb.core.query.Hql"
51  import="net.sf.basedb.clients.web.Base"
52  import="net.sf.basedb.clients.web.util.HTML"
53  import="net.sf.basedb.clients.web.PermissionUtil"
54  import="net.sf.basedb.util.Values"
55  import="java.util.EnumSet"
56  import="java.util.Set"
57  import="java.util.Map"
58  import="java.util.List"
59  import="java.util.Collection"
60%>
61<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
62<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
63<%!
64private static final int DENY_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.DENIED));
65private static final int CREATE_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.CREATE));
66private static final int READ_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.READ));
67private static final int USE_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.USE));
68private static final int WRITE_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.WRITE));
69private static final int DELETE_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.DELETE));
70private static final int SET_OWNER_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.SET_OWNER));
71private static final int SET_PERMISSION_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.SET_PERMISSION));
72
73private String getOption(DbControl dc, PluginDefinition plugin, Item itemType)
74  throws BaseException
75{
76  int keyId = SystemItems.getRoleKeyId(itemType);
77  if (keyId == 0) return "";
78
79  RoleKey key = RoleKey.getById(dc, keyId); 
80  StringBuilder sb = new StringBuilder();
81  sb.append("<option value=\"").append(key.getItemType().name()).append("\">");
82  sb.append(HTML.encodeTags(key.getName()));
83  sb.append(" []");
84  return sb.toString();
85}
86private void appendPermissionLetter(StringBuilder sb, Permission p, String letter, 
87  Set<Permission> defined, Set<Permission> always, Set<Permission> maybe)
88{
89  if (defined != null && defined.contains(p))
90  {
91    if (always != null && always.contains(p))
92    {
93      sb.append(letter.toUpperCase());
94    }
95    else if (maybe != null && maybe.contains(p))
96    {
97      sb.append(letter.toLowerCase());
98    }
99    else
100    {
101      sb.append("-");
102    }
103  }
104}
105%>
106<%
107final Item itemType = Item.PLUGINDEFINITION;
108final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
109final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
110final int itemId = cc.getId();
111final String ID = sc.getId();
112final float scale = Base.getScale(sc);
113final DbControl dc = sc.newDbControl();
114try
115{
116  String title = null;
117  PluginDefinition plugin = null;
118  boolean isTrusted = true;
119  Boolean allowImmediateExecution = null;
120  boolean usePermissions = false;
121  Collection<Permissions> requestedPermissions = null;
122  String warning = null;
123 
124  final int selectedAgentId = Values.getInt(request.getParameter("jobagent_id"), -1);
125
126  // Query to retrieve job agents
127  ItemQuery<JobAgent> agentQuery = null;
128
129  // Query to retrieve role keys
130  final ItemQuery<RoleKey> roleKeyQuery = RoleKey.getQuery();
131  roleKeyQuery.order(Orders.asc(Hql.property("name")));
132 
133  if (itemId == 0)
134  {
135    title = "Create plugin";
136    cc.removeObject("item");
137    String tt = cc.getPropertyValue("trusted");
138    String up = cc.getPropertyValue("usePermissions");
139    String aie = cc.getPropertyValue("allowImmediateExection");
140    isTrusted = tt == null ? isTrusted : Values.getBoolean(tt);
141    usePermissions = up == null ? usePermissions : Values.getBoolean(up);
142    allowImmediateExecution = aie == null ? null : Values.getBoolean(aie);
143  }
144  else
145  {
146    plugin = PluginDefinition.getById(dc, itemId);
147    cc.setObject("item", plugin);
148    title = "Edit plugin -- " + HTML.encodeTags(plugin.getName());
149    plugin.checkPermission(Permission.WRITE);
150    isTrusted = plugin.isTrusted();
151    usePermissions = plugin.getUsePermissions();
152    allowImmediateExecution = plugin.getAllowImmediateExecution();
153
154    agentQuery = JobAgent.getQuery();
155    agentQuery.include(Include.MINE, Include.SHARED, Include.OTHERS, Include.IN_PROJECT);
156    agentQuery.order(Orders.asc(Hql.property("name")));
157    agentQuery.join(Hql.innerJoin("plugins", "p"));
158    agentQuery.restrict(Restrictions.eq(Hql.property("p", "pluginDefinition"), Hql.entity(plugin)));
159
160    try
161    {
162      Plugin thePlugin = plugin.newInstance(Plugin.class, null, sc, null, null);
163      requestedPermissions = thePlugin.getPermissions();
164    }
165    catch (BaseException ex)
166    {
167      warning = ex.getMessage();
168    }
169  }
170 
171  final String clazz = "class=\"text\"";
172  final String requiredClazz = "class=\"text required\"";
173  %>
174
175  <base:page type="popup" title="<%=title%>">
176  <base:head scripts="tabcontrol.js,linkitems.js" styles="tabcontrol.css">
177    <script language="JavaScript">
178    // Validate the "Plugin" tab
179    function validatePlugin()
180    {
181      var frm = document.forms['plugin'];
182      if (Main.trimString(frm.className.value) == '')
183      {
184        alert("You must enter a class name");
185        frm.className.focus();
186        return false;
187      }
188      return true;
189    }
190
191    // Submit the form
192    function saveSettings()
193    {
194      var frm = document.forms['plugin'];
195      if (TabControl.validateActiveTab('settings'))
196      {
197        var agents = Link.getListIds(frm.agents, 'A');
198        for (var i = 0; i < agents.length; i++)
199        {
200          var agentId = agents[i];
201          var settings = getAgentSettings(agentId);
202          if (settings)
203          {
204            if (!settings.useDefaultJarPath)
205            {
206              Forms.createHidden(frm, 'jarPath.'+agentId, settings.jarPath);
207            }
208            if (!settings.useDefaultMaxMemory)
209            {
210              Forms.createHidden(frm, 'maxMemory.'+agentId, settings.maxMemory);
211            }
212            if (!settings.useDefaultTrusted)
213            {
214              Forms.createHidden(frm, 'trusted.'+agentId, settings.trusted);
215            }
216            Forms.createHidden(frm, 'priorityBoost.'+agentId, settings.priorityBoost);
217          }
218        }
219       
220        frm.allAgents.value = agents.join(',');
221        frm.removeAgents.value = Link.getActionIds(-1, 'A').join(',');
222        frm.submit();
223      }
224    }
225   
226    function addAgentsOnClick()
227    {
228      var agents = Link.getListIds(document.forms['plugin'].agents, 'A');
229      var url = '../jobagents/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectmultiple&callback=addAgentCallback';
230      url += '&exclude='+agents.join(',');
231      Main.openPopup(url, 'AddAgents', 1000, 700);
232    }
233    function addAgentCallback(agentId, name)
234    {
235      var item = Link.getItem('A', agentId);
236      if (!item) 
237      {
238        item = new Item('A', agentId, name);
239        new AgentSetting(agentId, '', '', '', '0');
240      }
241      Link.addItem(document.forms['plugin'].agents, item);
242      agentsOnClick();
243    }
244
245    function removeOnClick()
246    {
247      Link.removeSelected(document.forms['plugin'].agents);
248      Main.hide('agentsettings');
249    }
250   
251   
252    function init()
253    {
254      <%
255      if (plugin == null)
256      {
257        %>
258        var frm = document.forms['plugin'];
259        frm.className.focus();
260        frm.className.select();
261        <%
262      }
263      %>
264      initAgents();
265      <%
266      if (selectedAgentId != -1)
267      {
268        %>
269        selectAgent(<%=selectedAgentId%>);
270        <%
271      }
272      %>
273      initPermissions();
274    }
275    function initAgents()
276    {
277      var agents = document.forms['plugin'].agents;
278      <%
279      if (agentQuery != null)
280      {
281        ItemResultList<JobAgent> agents = agentQuery.list(dc);
282        for (JobAgent agent : agents)
283        {
284          // Agent specific settings
285          JobAgentSettings settings = agent.getSettings(plugin, false);
286          String jarPath = null;
287          Boolean trusted = null;
288          Long maxMemory = null;
289          int priorityBoost = 0;
290          if (settings != null)
291          {
292            jarPath = settings.getJarPath();
293            trusted = settings.isTrusted();
294            maxMemory = settings.getMaxMemory();
295            priorityBoost = settings.getPriorityBoost();
296            %>
297            Link.addNewItem(agents, new Item('A', <%=agent.getId()%>, '<%=HTML.javaScriptEncode(agent.getName())%>'));
298            <%
299          }
300          %>
301          new AgentSetting(<%=agent.getId()%>, '<%=HTML.javaScriptEncode(jarPath)%>', '<%=trusted == null ? "" : trusted ? "1" : "0"%>', '<%=Values.formatBytes(maxMemory)%>', '<%=priorityBoost%>');
302          <%
303        }
304      }
305      %>
306    }
307   
308    function selectAgent(agentId)
309    {
310      var frm = document.forms['plugin'];
311      for (var i = 0; i < frm.agents.length; i++)
312      {
313        if (frm.agents[i].item.id == agentId)
314        {
315          frm.agents.selectedIndex = i;
316          agentsOnClick();
317          return;
318        }
319      }
320    }
321
322    function getAgentSettings(agentId)
323    {
324      return allAgentSettings['A'+agentId];
325    }
326    var allAgentSettings = new Array();
327    function AgentSetting(agentId, jarPath, trusted, maxMemory, priorityBoost)
328    {
329      this.agentId = agentId;
330      this.jarPath = jarPath;
331      this.useDefaultJarPath = (jarPath == '');
332      this.trusted = trusted;
333      this.useDefaultTrusted = trusted != null;
334      this.maxMemory = maxMemory;
335      this.useDefaultMaxMemory = (maxMemory == '');
336      this.priorityBoost = priorityBoost;
337      allAgentSettings['A'+agentId] = this;
338    }
339   
340    var selectedAgentId;
341    function agentsOnClick()
342    {
343      var frm = document.forms['plugin'];
344      var agentId = frm.agents[frm.agents.selectedIndex].item.id;
345      var settings = getAgentSettings(agentId);
346      if (settings)
347      {
348        Main.show('agentsettings');
349        selectedAgentId = agentId;
350        // Set JAR path
351        frm.useDefaultJarPath.checked = settings.useDefaultJarPath;
352        useDefaultJarPathOnClick();
353        var defaultJarPath = document.getElementById("defaultJarPath");
354        var html = frm.jarPath.value;
355        if (html.length > 50)
356        {
357          html = '<span title="'+html+'">'+Main.cutString(html, 50)+'</span>'; 
358        }
359        if (html == '') html = 'internal';
360        defaultJarPath.innerHTML = html;
361       
362        // Set max memory
363        frm.useDefaultMaxMemory.checked = settings.useDefaultMaxMemory;
364        useDefaultMaxMemoryOnClick();
365        var defaultMaxMemory = document.getElementById("defaultMaxMemory");
366        defaultMaxMemory.innerHTML = frm.maxMemory.value == '' ? 'not specified' : frm.maxMemory.value;
367       
368        // Set trusted
369        Forms.checkRadio(frm.agentTrusted, settings.trusted);
370        var defaultTrusted = document.getElementById("defaultTrusted");
371        defaultTrusted.innerHTML = Forms.getCheckedRadio(frm.trusted).value == '0' ? 'no' : 'yes';
372
373        // Set priority boost
374        frm.agentPriorityBoost.value = settings.priorityBoost;
375      }
376      else
377      {
378        Main.hide('agentsettings');
379      }
380    }
381   
382    function useDefaultJarPathOnClick()
383    {
384      var frm = document.forms['plugin'];
385      var settings = getAgentSettings(selectedAgentId);
386      if (settings)
387      {
388        var useDefault = frm.useDefaultJarPath.checked;
389        settings.useDefaultJarPath = useDefault;
390        frm.agentJarPath.disabled = useDefault;
391        if (!useDefault)
392        {
393          frm.agentJarPath.focus();
394          frm.agentJarPath.value = settings.jarPath;
395        }
396      }
397    }
398   
399    function jarPathOnBlur()
400    {
401      var frm = document.forms['plugin'];
402      var settings = getAgentSettings(selectedAgentId);
403      if (settings)
404      {
405        settings.jarPath = frm.agentJarPath.value;
406      }
407    }
408   
409    function useDefaultMaxMemoryOnClick()
410    {
411      var frm = document.forms['plugin'];
412      var settings = getAgentSettings(selectedAgentId);
413      if (settings)
414      {
415        var useDefault = frm.useDefaultMaxMemory.checked;
416        settings.useDefaultMaxMemory = useDefault;
417        frm.agentMaxMemory.disabled = useDefault;
418        if (!useDefault)
419        {
420          frm.agentMaxMemory.focus();
421          frm.agentMaxMemory.value = settings.maxMemory;
422        }
423      }
424    }
425   
426    function maxMemoryOnBlur()
427    {
428      var frm = document.forms['plugin'];
429      var settings = getAgentSettings(selectedAgentId);
430      if (settings)
431      {
432        settings.maxMemory = frm.agentMaxMemory.value;
433      }
434    }
435   
436    function trustedOnClick()
437    {
438      var frm = document.forms['plugin'];
439      var settings = getAgentSettings(selectedAgentId);
440      if (settings)
441      {
442        var selected = Forms.getCheckedRadio(frm.agentTrusted);
443        if (selected != null)
444        {
445          settings.trusted = selected.value;
446          settings.useDefaultTrusted = settings.trusted == '';
447        }
448      }
449    }
450   
451    function priorityBoostOnBlur()
452    {
453      var frm = document.forms['plugin'];
454      var settings = getAgentSettings(selectedAgentId);
455      if (settings)
456      {
457        var priorityBoost = parseInt(frm.agentPriorityBoost.value);
458        if (priorityBoost < 0 || priorityBoost > 10)
459        {
460          alert('The priority boost must be between 0 and 10');
461          frm.agentPriorityBoost.focus();
462          return;
463        }
464        settings.priorityBoost = priorityBoost;
465      }
466    }
467   
468    function usePermissionsOnClick()
469    {
470      var frm = document.forms['plugin'];
471      var use = Forms.getCheckedRadio(frm.use_permissions).value == '1';
472      frm.items.disabled = !use;
473      frm.grant_create.disabled = !use;
474      frm.grant_read.disabled = !use;
475      frm.grant_use.disabled = !use;
476      frm.grant_write.disabled = !use;
477      frm.grant_delete.disabled = !use;
478      frm.grant_set_owner.disabled = !use;
479      frm.grant_set_permission.disabled = !use;
480      frm.deny_create.disabled = !use;
481      frm.deny_read.disabled = !use;
482      frm.deny_use.disabled = !use;
483      frm.deny_write.disabled = !use;
484      frm.deny_delete.disabled = !use;
485      frm.deny_set_owner.disabled = !use;
486      frm.deny_set_permission.disabled = !use;
487    }
488   
489    function initPermissions()
490    {
491      var frm = document.forms['plugin'];
492      for (var i = 0; i < frm.items.length; i++)
493      {
494        updateListText(i);
495      }
496      usePermissionsOnClick();
497    }
498   
499    /*
500      Update the permission code string for the list entry with given index
501    */
502    function updateListText(index)
503    {
504      var frm = document.forms['plugin'];
505      var item = frm.items[index];
506      var itemType = item.value;
507      if (itemType)
508      {
509        var granted = parseInt(frm[itemType+'_granted'].value);
510        var denied = parseInt(frm[itemType+'_denied'].value);
511        var defined = parseInt(frm[itemType+'_defined'].value);
512       
513        var s = '';
514        s += appendPermission('C', granted, denied, defined, <%=CREATE_CODE%>);
515        s += appendPermission('R', granted, denied, defined, <%=READ_CODE%>);
516        s += appendPermission('U', granted, denied, defined, <%=USE_CODE%>);
517        s += appendPermission('W', granted, denied, defined, <%=WRITE_CODE%>);
518        s += appendPermission('D', granted, denied, defined, <%=DELETE_CODE%>);
519        s += appendPermission('O', granted, denied, defined, <%=SET_OWNER_CODE%>);
520        s += appendPermission('P', granted, denied, defined, <%=SET_PERMISSION_CODE%>);
521       
522        var text = item.text.replace(/\[.*\]/, '['+s+']');
523        item.text = text; 
524      }
525    }
526   
527    function appendPermission(cc, granted, denied, defined, permission)
528    {
529      var p = '';
530      if ((defined & permission) > 0)
531      {
532        p = (granted & permission) > 0 ? cc.toUpperCase() : ((denied & permission) > 0 ? '-' : cc.toLowerCase());
533      }
534      return p;
535    }
536   
537    function itemsOnClick()
538    {
539      var frm = document.forms['plugin'];
540      var itemType = frm.items[frm.items.selectedIndex].value;
541      if (itemType)
542      {
543        showPermissions(itemType);
544      }
545    }
546   
547    /*
548      Update checkboxes to show the permissions for specified item type
549    */
550    function showPermissions(itemType)
551    {
552      var frm = document.forms['plugin'];
553      if (itemType)
554      {
555        var granted = parseInt(frm[itemType+'_granted'].value);
556        var denied = parseInt(frm[itemType+'_denied'].value);
557        var defined = parseInt(frm[itemType+'_defined'].value);
558       
559        updateCheckBox('create', <%=CREATE_CODE%>, granted, denied, defined);
560        updateCheckBox('read', <%=READ_CODE%>, granted, denied, defined);
561        updateCheckBox('use', <%=USE_CODE%>, granted, denied, defined);
562        updateCheckBox('write', <%=WRITE_CODE%>, granted, denied, defined);
563        updateCheckBox('delete', <%=DELETE_CODE%>, granted, denied, defined);
564        updateCheckBox('set_owner', <%=SET_OWNER_CODE%>, granted, denied, defined);
565        updateCheckBox('set_permission', <%=SET_PERMISSION_CODE%>, granted, denied, defined);
566      }
567    }
568   
569    /*
570      Check/uncheck and enable/disable checkboxes depending on given permissions
571    */
572    function updateCheckBox(nameSuffix, permission, granted, denied, defined)
573    {
574      var frm = document.forms['plugin'];
575      var isGranted = (permission & granted) > 0;
576      var isDenied = (permission & denied) > 0;
577      var isDefined = (permission & defined) > 0;
578     
579      frm['grant_'+nameSuffix].disabled = !isDefined;
580      frm['deny_'+nameSuffix].disabled = !isDefined || isGranted;
581      frm['grant_'+nameSuffix].checked = isGranted & isDefined;
582      frm['deny_'+nameSuffix].checked = isDenied & isDefined;
583    }
584   
585   
586    // When a user clicks on one of the permission checkboxes
587    function permissionOnClick(checkbox)
588    {
589      var frm = document.forms['plugin'];
590      cascadeSelections(checkbox.checked);
591      var granted = getCheckedPermissions('grant_');
592      var denied = getCheckedPermissions('deny_');
593      for (var i = 0; i < frm.items.length; i++)
594      {
595        var item = frm.items[i];
596        var itemType = item.value;
597        if (item.selected && itemType)
598        {
599          frm[itemType+'_granted'].value = granted;
600          frm[itemType+'_denied'].value = denied;
601          updateListText(i);
602        }
603      }
604    }
605   
606    /*
607      Get the permission for the checked checkboxes
608      prefix should be "grant_" or "deny_"
609    */
610    function getCheckedPermissions(prefix)
611    {
612      var permissionCode = 0;
613      var frm = document.forms['plugin'];
614      permissionCode += frm[prefix+'create'].checked ? <%=CREATE_CODE%>: 0;
615      permissionCode += frm[prefix+'read'].checked ? <%=READ_CODE%>: 0;
616      permissionCode += frm[prefix+'use'].checked ? <%=USE_CODE%>: 0;
617      permissionCode += frm[prefix+'write'].checked ? <%=WRITE_CODE%>: 0;
618      permissionCode += frm[prefix+'delete'].checked ? <%=DELETE_CODE%>: 0;
619      permissionCode += frm[prefix+'set_owner'].checked ? <%=SET_OWNER_CODE%>: 0;
620      permissionCode += frm[prefix+'set_permission'].checked ? <%=SET_PERMISSION_CODE%>: 0;
621      return permissionCode;
622    }
623    /*
624      Makes sure all checkboxes are in a consistent state with
625      each other.
626    */
627    function cascadeSelections(checked)
628    {
629      var frm = document.forms['plugin'];
630     
631      // Grant permissions
632      if (checked)
633      {
634        frm['grant_write'].checked = (frm['grant_write'].checked || frm['grant_delete'].checked || frm['grant_set_owner'].checked || frm['grant_set_permission'].checked);
635        frm['grant_use'].checked = (frm['grant_use'].checked || frm['grant_write'].checked);
636        frm['grant_read'].checked = (frm['grant_read'].checked || frm['grant_use'].checked);
637      }
638      else
639      {
640        frm['grant_use'].checked = (frm['grant_use'].checked && frm['grant_read'].checked);
641        frm['grant_write'].checked = (frm['grant_write'].checked && frm['grant_use'].checked);
642        frm['grant_delete'].checked = (frm['grant_delete'].checked && frm['grant_write'].checked);
643        frm['grant_set_owner'].checked = (frm['grant_set_owner'].checked && frm['grant_write'].checked);
644        frm['grant_set_permission'].checked = (frm['grant_set_permission'].checked && frm['grant_write'].checked);
645      }
646     
647      // Deny permissions
648      frm['deny_create'].disabled = frm['grant_create'].disabled || frm['grant_create'].checked;
649      frm['deny_read'].disabled =frm['grant_read'].disabled || frm['grant_read'].checked;
650      frm['deny_use'].disabled = frm['grant_use'].disabled || frm['grant_use'].checked;
651      frm['deny_write'].disabled = frm['grant_write'].disabled || frm['grant_write'].checked;
652      frm['deny_delete'].disabled = frm['grant_delete'].disabled || frm['grant_delete'].checked;
653      frm['deny_set_owner'].disabled = frm['grant_set_owner'].disabled || frm['grant_set_owner'].checked;
654      frm['deny_set_permission'].disabled = frm['grant_set_permission'].disabled || frm['grant_set_permission'].checked;
655      if (checked)
656      {
657        if (!frm['deny_use'].disabled) frm['deny_use'].checked = frm['deny_use'].checked || frm['deny_read'].checked;
658        if (!frm['deny_write'].disabled) frm['deny_write'].checked = frm['deny_write'].checked || frm['deny_use'].checked;
659        if (!frm['deny_delete'].disabled) frm['deny_delete'].checked = frm['deny_delete'].checked || frm['deny_write'].checked;
660        if (!frm['deny_set_owner'].disabled) frm['deny_set_owner'].checked = frm['deny_set_owner'].checked || frm['deny_write'].checked;
661        if (!frm['deny_set_permission'].disabled) frm['deny_set_permission'].checked = frm['deny_set_permission'].checked || frm['deny_write'].checked;
662      }
663      else
664      {
665        if (!frm['deny_write'].disabled) frm['deny_write'].checked = frm['deny_write'].checked && !((!frm['deny_delete'].checked && !frm['deny_delete'].disabled) || (!frm['deny_set_owner'].checked && !frm['deny_set_owner'].disabled) || (!frm['deny_set_permission'].checked && !frm['deny_set_permission'].disabled));
666        if (!frm['deny_use'].disabled) frm['deny_use'].checked = frm['deny_use'].checked && frm['deny_write'].checked;
667        if (!frm['deny_read'].disabled) frm['deny_read'].checked = frm['deny_read'].checked && frm['deny_use'].checked;
668      }
669    }
670    <%
671    if (requestedPermissions != null && requestedPermissions.size() > 0)
672    {
673      %>
674      function setRequestedPermissions()
675      {
676        var frm = document.forms['plugin'];
677        // Reset all existing permissions
678        for (var i = 0; i < frm.items.length; i++)
679        {
680          var itemType = frm.items[i].value;
681          if (itemType)
682          {
683            frm[itemType+'_granted'].value = 0;
684            frm[itemType+'_denied'].value = 255;
685          }
686        }
687        // Set requested permissions
688        <%
689        for (Permissions pp : requestedPermissions)
690        {
691          Item ppType = pp.getItemType();
692          if (ppType.getDefinedPermissions() != null)
693          {
694            Set<Permission> always = Permission.expand(pp.getAlwaysGranted());
695            Set<Permission> maybe = Permission.expand(pp.getMaybeGranted());
696            %>
697            frm['<%=ppType.name()%>_granted'].value = <%=always == null ? 0 : PermissionUtil.getPermissionCode(always)%>;
698            frm['<%=ppType.name()%>_denied'].value = <%=maybe == null ? 255 : 255 & ~PermissionUtil.getPermissionCode(maybe)%>;
699            <%
700          }
701        }
702        %>
703        // Update the list
704        initPermissions();
705      }
706      <%
707    }
708    %>
709    </script>
710  </base:head>
711  <base:body onload="init()">
712    <p>
713    <form action="index.jsp?ID=<%=ID%>" method="post" name="plugin" onsubmit="return false;">
714    <input type="hidden" name="cmd" value="UpdateItem">
715
716    <h3 class="docked"><%=title%> <base:help tabcontrol="settings" /></h3>
717    <t:tabcontrol id="settings" contentstyle="<%="height: "+(int)(scale*260)+"px;"%>" 
718      position="bottom" remember="<%=plugin != null%>" active="<%=selectedAgentId == -1 ? null : "agents" %>">
719    <t:tab id="info" title="Plugin" validate="validatePlugin()" helpid="plugindefinition.edit">
720      <table class="form" cellspacing=0>
721      <tr>
722        <td class="prompt">Name</td>
723        <td><%=HTML.encodeTags(plugin == null ? Values.getString(cc.getPropertyValue("name"), "New plugin") : plugin.getName())%></td>
724      </tr>
725      <tr>
726        <td class="prompt">Class</td>
727        <td><input <%=requiredClazz%> type="text" name="className" 
728          value="<%=HTML.encodeTags(plugin == null ? cc.getPropertyValue("className") : plugin.getClassName())%>" 
729          size="50" maxlength="<%=PluginDefinition.MAX_CLASSNAME_LENGTH%>"></td>
730      </tr>
731     
732      <tr>
733        <td class="prompt">Path</td>
734        <td><input <%=clazz%> type="text" name="jarPath" 
735          value="<%=HTML.encodeTags(plugin == null ? cc.getPropertyValue("jarPath") : plugin.getJarPath())%>"
736          size="50" maxlength="<%=PluginDefinition.MAX_JARPATH_LENGTH%>">
737        </td>
738      </tr>
739      <tr>
740        <td class="prompt">Max memory</td>
741        <td><input <%=clazz%> type="text" name="maxMemory" 
742          value="<%=Values.formatBytes(plugin == null ? Values.parseBytes(cc.getPropertyValue("maxMemory"), null) : plugin.getMaxMemory())%>"
743          size="16" maxlength="16"> (Use KB, MB or GB to specify units)</td>
744      </tr>
745     
746      <tr>
747        <td class="prompt">Trusted</td>
748        <td>
749          <input type="radio" name="trusted" value="0" <%=!isTrusted ? "checked" : ""%>>no
750          <input type="radio" name="trusted" value="1" <%=isTrusted ? "checked" : ""%>>yes
751        </td>
752      </tr> 
753     
754      <tr>
755        <td class="prompt">Allow immediate exection</td>
756        <td>
757          <input type="radio" name="allow_immediate_execution" value="0" 
758            <%=Boolean.FALSE.equals(allowImmediateExecution) ? "checked" : ""%>>no
759          <input type="radio" name="allow_immediate_execution" value="1" 
760            <%=Boolean.TRUE.equals(allowImmediateExecution) ? "checked" : ""%>>yes
761          <%
762          if (allowImmediateExecution == null)
763          {
764            %>
765            <input type="radio" name="allow_immediate_execution" value="" 
766              "checked">auto
767            <%
768          }
769          %>
770        </td>
771      </tr> 
772      </table>
773      <%
774      if (warning != null) 
775      {
776        %>
777        <div class="error"><%=warning%></div>
778        <%
779      }
780      %>     
781      <div align=right>&nbsp;<i><base:icon image="required.gif" /> = required information</i></div>
782    </t:tab>
783   
784    <t:tab id="permissions" title="Permissions" 
785      tooltip="Set permissions for this plugindefintion" helpid="plugindefinition.edit.permissions">
786    <table class="form">
787      <tr> 
788        <td class="prompt">Use permissions</td>
789        <td>
790          <input type="radio" name="use_permissions" value="1" 
791            <%=usePermissions ? "checked" : ""%> onclick="usePermissionsOnClick()">yes
792          <input type="radio" name="use_permissions" value="0" 
793            <%=!usePermissions ? "checked" : ""%> onclick="usePermissionsOnClick()">no
794          <%
795          if (plugin == null)
796          {
797            %>
798            <input type="radio" name="use_permissions" value="2" 
799              onclick="usePermissionsOnClick()">if requested by plugin
800            <%
801          }
802          %>
803        </td>
804      </tr>
805    </table>
806
807    <table>
808    <tr valign="top">
809    <td>
810      <b>Item types</b><br>
811      <select name="items" size="15" onChange="itemsOnClick()" multiple>
812      <%
813      Map<String, List<Item>> permissionGroups = PermissionUtil.getPermissionGroups();
814      for (Map.Entry<String, List<Item>> entry : permissionGroups.entrySet())
815      {
816        String name = entry.getKey();
817        List<Item> items = entry.getValue();
818        %>
819        <option class="selectoptionheader" value="">-- <%=name%>
820        <%
821        for (Item item : items)
822        {
823          %>
824          <%=getOption(dc, plugin, item)%>
825          <%
826        }
827      }
828      %>
829      </select>
830    </td>
831    <td>
832      <table>
833      <tr valign="top"><td>
834        <b>Always grant</b><br>
835        <input type="checkbox" name="grant_create" onClick="permissionOnClick(this)">Create<br>
836        <input type="checkbox" name="grant_read" onClick="permissionOnClick(this)">Read<br>
837        <input type="checkbox" name="grant_use" onClick="permissionOnClick(this)">Use<br>
838        <input type="checkbox" name="grant_write" onClick="permissionOnClick(this)">Write<br>
839        <input type="checkbox" name="grant_delete" onClick="permissionOnClick(this)">Delete<br>
840        <input type="checkbox" name="grant_set_owner" onClick="permissionOnClick(this)">Take ownership<br>
841        <input type="checkbox" name="grant_set_permission" onClick="permissionOnClick(this)">Set permission
842      </td>
843      <td>
844        <b>Always deny</b><br>
845        <input type="checkbox" name="deny_create" onClick="permissionOnClick(this)">Create<br>
846        <input type="checkbox" name="deny_read" onClick="permissionOnClick(this)">Read<br>
847        <input type="checkbox" name="deny_use" onClick="permissionOnClick(this)">Use<br>
848        <input type="checkbox" name="deny_write" onClick="permissionOnClick(this)">Write<br>
849        <input type="checkbox" name="deny_delete" onClick="permissionOnClick(this)">Delete<br>
850        <input type="checkbox" name="deny_set_owner" onClick="permissionOnClick(this)">Take ownership<br>
851        <input type="checkbox" name="deny_set_permission" onClick="permissionOnClick(this)">Set permission
852      </td>
853      <%
854      if (requestedPermissions != null && requestedPermissions.size() > 0)
855      {
856        %>
857        <td>
858        <b>Requested by plugin</b><br>
859        <table>
860        <%
861        for (Permissions pp : requestedPermissions)
862        {
863          Item ppType = pp.getItemType();
864          Set<Permission> always = Permission.expand(pp.getAlwaysGranted());
865          Set<Permission> maybe = Permission.expand(pp.getMaybeGranted());
866          Set<Permission> defined = ppType.getDefinedPermissions();
867          if (defined != null)
868          {
869            StringBuilder sb = new StringBuilder();
870            sb.append("[");
871            appendPermissionLetter(sb, Permission.CREATE, "C", defined, always, maybe);
872            appendPermissionLetter(sb, Permission.READ, "R", defined, always, maybe);
873            appendPermissionLetter(sb, Permission.USE, "U", defined, always, maybe);
874            appendPermissionLetter(sb, Permission.WRITE, "W", defined, always, maybe);
875            appendPermissionLetter(sb, Permission.DELETE, "D", defined, always, maybe);
876            appendPermissionLetter(sb, Permission.SET_OWNER, "O", defined, always, maybe);
877            appendPermissionLetter(sb, Permission.SET_PERMISSION, "P", defined, always, maybe);
878            sb.append("]");
879            %>
880            <tr>
881              <td><%=ppType%></td>
882              <td><%=sb.toString()%></td>
883            </tr>
884            <%
885          }
886        }
887        %>
888        </table>
889        <table><tr><td>
890        <base:button title="Use requested permissions" onclick="setRequestedPermissions()"
891          tooltip="Use the permissions requested by the plugin." />
892        </td></tr></table>
893        </td>
894        <%
895      }
896      %>
897      </tr>
898      </table>
899      <b>Capital letters</b> = Permission is always granted<br>
900      <b>Small letters</b> = Permission is only granted if logged in user
901        has that permission
902     
903    </td>
904    </tr>
905    </table>
906   
907   
908    </t:tab>
909   
910   
911    <t:tab id="agents" title="Job agents" helpid="plugindefinition.jobagents">
912      <table >
913      <tr valign="top">
914      <td>
915        <b>Run this plugin on</b><br>
916        <select name="agents" size="15" multiple style="width: 15em;" 
917          onclick="agentsOnClick()">
918        </select>
919        <input type="hidden" name="removeAgents" value="">
920        <input type="hidden" name="allAgents" value="">
921      </td>
922      <td>
923        <br>
924        <table width="150">
925        <tr><td><base:button 
926          onclick="addAgentsOnClick()" 
927          title="Add&nbsp;job&nbsp;agents&hellip;" 
928          tooltip="Add job agents to this plugin"
929        /></td></tr>
930        <tr><td><base:button 
931          onclick="removeOnClick()" 
932          title="Remove" 
933          tooltip="Remove the selected job agents"
934        /></td></tr>
935        </table>
936
937        <br>
938        <div id="agentsettings" style="display: none;">
939        <table border="0" cellspacing="0" class="form">
940        <tr>
941          <td class="prompt">Jar path</td>
942          <td>
943            <input type="text" name="agentJarPath" class="text" size="50" 
944              maxlength="<%=JobAgentSettings.MAX_JARPATH_LENGTH%>"
945              onblur="jarPathOnBlur()">
946          </td>
947        </tr>
948        <tr>
949          <td style="padding-left: 10px;">-use default</td>
950          <td>
951            <input type="checkbox" name="useDefaultJarPath"
952              onclick="useDefaultJarPathOnClick()">
953            (<span id="defaultJarPath"></span>)
954          </td>
955        </tr>
956        <tr>
957          <td class="prompt">Max memory</td>
958          <td>
959            <input type="text" name="agentMaxMemory" class="text" size="16" 
960              maxlength="16"
961              onblur="maxMemoryOnBlur()">
962              (Use KB, MB or GB to specify memory)
963          </td>
964        </tr>
965        <tr>
966          <td style="padding-left: 10px;">-use default</td>
967          <td>
968            <input type="checkbox" name="useDefaultMaxMemory"
969              onclick="useDefaultMaxMemoryOnClick()">
970            (<span id="defaultMaxMemory"></span>)
971          </td>
972        </tr>
973        <tr>
974          <td class="prompt">Trusted</td>
975          <td>
976            <input type="radio" name="agentTrusted" value="" 
977              onclick="trustedOnClick()">default (<span id="defaultTrusted"></span>)
978            <input type="radio" name="agentTrusted" value="1"
979              onclick="trustedOnClick()">yes
980            <input type="radio" name="agentTrusted" value="0"
981              onclick="trustedOnClick()">no
982          </td>
983        </tr>
984        <tr>
985          <td class="prompt">Priority boost</td>
986          <td>
987            <input type="text" name="agentPriorityBoost" class="text" size="12" 
988              maxlength="10" onkeypress="return Numbers.integerOnly(event)"
989              onblur="priorityBoostOnBlur()">
990          </td>
991        </tr>
992        </table>
993        </div>
994      </td>
995      </tr>
996      </table>
997    </t:tab>
998   
999    </t:tabcontrol>
1000
1001    <table align="center">
1002    <tr>
1003      <td width="50%"><base:button onclick="saveSettings()" title="Save" /></td>
1004      <td width="50%"><base:button onclick="window.close()" title="Cancel" /></td>
1005    </tr>
1006    </table>
1007    <%
1008    ItemResultList<RoleKey> roleKeys = roleKeyQuery.list(dc);
1009    for (RoleKey key : roleKeys)
1010    {
1011      int grantedCode = plugin == null ? 0 : PermissionUtil.getPermissionCode(plugin.getGranted(key));
1012      int deniedCode = plugin == null ? 255 : PermissionUtil.getPermissionCode(plugin.getDenied(key));
1013      int definedCode = key.getItemType().getDefinedPermissions() == null ? 0 : PermissionUtil.getPermissionCode(key.getItemType().getDefinedPermissions());     
1014      String name = key.getItemType().name();           
1015      %>
1016      <input type="hidden" name="<%=name%>_granted" value="<%=grantedCode%>">
1017      <input type="hidden" name="<%=name%>_denied" value="<%=deniedCode%>">
1018      <input type="hidden" name="<%=name%>_defined" value="<%=definedCode%>">
1019      <%
1020    }
1021    %>
1022    </form>
1023  </base:body>
1024  </base:page>
1025  <%
1026}
1027finally
1028{
1029  if (dc != null) dc.close();
1030}
1031%>
Note: See TracBrowser for help on using the repository browser.