source: trunk/www/admin/plugindefinitions/edit_plugin.jsp @ 2978

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

Added session="false" to all jsp pages so we no longer generate unneeded cookies

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