source: trunk/www/my_base/projects/edit_project.jsp @ 3847

Last change on this file since 3847 was 3847, checked in by Nicklas Nordborg, 14 years ago

Fixes #788: Select project default platforms / variant

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 27.6 KB
Line 
1<%-- $Id: edit_project.jsp 3847 2007-10-17 05:52:56Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Jari Hakkinen, Nicklas Nordborg, Martin Svensson
5
6  This file is part of BASE - BioArray Software Environment.
7  Available at http://base.thep.lu.se/
8
9  BASE is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License
11  as published by the Free Software Foundation; either version 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
26  @author Nicklas
27  @version 2.0
28--%>
29<%@ page session="false"
30  import="net.sf.basedb.core.ArrayDesign"
31  import="net.sf.basedb.core.SessionControl"
32  import="net.sf.basedb.core.BasicItem"
33  import="net.sf.basedb.core.DbControl"
34  import="net.sf.basedb.core.Hardware"
35  import="net.sf.basedb.core.Item"
36  import="net.sf.basedb.core.ItemContext"
37  import="net.sf.basedb.core.SystemItems"
38  import="net.sf.basedb.core.Permission"
39  import="net.sf.basedb.core.Project"
40  import="net.sf.basedb.core.Protocol"
41  import="net.sf.basedb.core.Platform"
42  import="net.sf.basedb.core.PlatformVariant"
43  import="net.sf.basedb.core.User"
44  import="net.sf.basedb.core.Group"
45  import="net.sf.basedb.core.ItemQuery"
46  import="net.sf.basedb.core.ItemResultList"
47  import="net.sf.basedb.core.PermissionDeniedException"
48  import="net.sf.basedb.core.RawDataType"
49  import="net.sf.basedb.core.RawDataTypes"
50  import="net.sf.basedb.core.Software"
51  import="net.sf.basedb.core.BaseException"
52  import="net.sf.basedb.core.query.Orders"
53  import="net.sf.basedb.core.query.Hql"
54  import="net.sf.basedb.clients.web.Base"
55  import="net.sf.basedb.clients.web.PermissionUtil"
56  import="net.sf.basedb.clients.web.util.HTML"
57  import="net.sf.basedb.util.Values"
58  import="java.util.List"
59  import="java.util.Set"
60  import="java.util.HashSet"
61  import="java.util.EnumSet"
62%>
63<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
64<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
65<%!
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 getPermissionString(Set<Permission> permissions)
74{
75  StringBuilder sb = new StringBuilder();
76  sb.append(permissions.contains(Permission.READ) ? "R" : "-");
77  sb.append(permissions.contains(Permission.USE) ? "U" : "-");
78  sb.append(permissions.contains(Permission.WRITE) ? "W" : "-");
79  sb.append(permissions.contains(Permission.DELETE) ? "D" : "-");
80  sb.append(permissions.contains(Permission.SET_OWNER) ? "O" : "-");
81  sb.append(permissions.contains(Permission.SET_PERMISSION) ? "P" : "-");
82  return sb.toString();
83}
84%>
85<%
86final Item itemType = Item.PROJECT;
87final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
88final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
89final int itemId = cc.getId();
90final String ID = sc.getId();
91final float scale = Base.getScale(sc);
92final DbControl dc = sc.newDbControl();
93try
94{
95  String title = null;
96  Project project = null;
97
98  // Query to retrieve child groups
99  ItemQuery<Group> groupQuery = null;
100  // Query to retrieve user members
101  ItemQuery<User> userQuery = null;
102 
103  // Load recently used items
104  List<Protocol> recentProtocol = (List<Protocol>)cc.getRecent(dc, Item.PROTOCOL);
105  List<Software> recentSoftware = (List<Software>)cc.getRecent(dc, Item.SOFTWARE);
106  List<Hardware> recentHardware = (List<Hardware>)cc.getRecent(dc, Item.HARDWARE);
107  List<ArrayDesign> recentArrayDesign = (List<ArrayDesign>)cc.getRecent(dc, Item.ARRAYDESIGN);
108 
109  boolean deniedPlatform = false;
110  Platform currentPlatform = null;
111  PlatformVariant currentVariant = null;
112 
113  if (itemId == 0)
114  {
115    title = "Create project";
116    cc.removeObject("item");
117  }
118  else
119  {
120    project = Project.getById(dc, itemId);
121    cc.setObject("item", project);
122    title = "Edit project -- " + HTML.encodeTags(project.getName());
123   
124    try
125    {
126      currentPlatform = (Platform)project.getDefaultItem(dc, Project.Default.PLATFORM);
127      currentVariant = (PlatformVariant)project.getDefaultItem(dc, Project.Default.PLATFORM_VARIANT);
128    }
129    catch (PermissionDeniedException ex)
130    {
131      deniedPlatform = true;
132    }
133   
134    groupQuery = project.getGroups();
135    groupQuery.order(Orders.asc(Hql.property("name")));
136    userQuery = project.getUsers();
137    userQuery.order(Orders.asc(Hql.property("name")));
138  }
139  if (project != null && !project.hasPermission(Permission.WRITE))
140  {
141    throw new PermissionDeniedException(Permission.WRITE, itemType.toString());
142  }
143  RawDataType currentRawDataType = project != null ? 
144    project.getDefaultRawDataType() : null;
145 
146  ItemQuery<Platform> platformQuery = Platform.getQuery();
147  platformQuery.order(Orders.asc(Hql.property("name")));
148  platformQuery.setCacheResult(true);
149  ItemResultList<Platform> platforms = platformQuery.list(dc);
150
151  ItemQuery<PlatformVariant> variantQuery = PlatformVariant.getQuery();
152  variantQuery.order(Orders.asc(Hql.property("name")));
153  variantQuery.setCacheResult(true);
154  ItemResultList<PlatformVariant> variants = variantQuery.list(dc);
155 
156  Set<Project.Default> ignore = EnumSet.of(
157    Project.Default.PLATFORM, Project.Default.PLATFORM_VARIANT, 
158    Project.Default.RAW_DATA_TYPE);
159 
160  final StringBuilder sb = new StringBuilder(); 
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,parameters.js,platforms.js" styles="tabcontrol.css,parameters.css">
167    <script language="JavaScript">
168    // Validate the "Project" tab
169    function validateProject()
170    {
171      var frm = document.forms['project'];
172      if (Main.trimString(frm.name.value) == '')
173      {
174        alert("You must enter a name");
175        frm.name.focus();
176        return false;
177      }
178      return true;
179    }
180    // Validate the "Members" tab
181    function validateMembers()
182    {
183      return true;
184    }
185    // Submit the form
186    function saveSettings()
187    {
188      var frm = document.forms['project'];
189      if (TabControl.validateActiveTab('settings'))
190      {
191        frm.modifiedUsers.value = Link.exportModified(frm, 'U').join(',');
192        frm.modifiedGroups.value = Link.exportModified(frm, 'G').join(',');
193        frm.submit();
194      }
195    }
196
197    function init()
198    {
199      <%
200      if (project == null)
201      {
202        %>
203        var frm = document.forms['project'];
204        frm.name.focus();
205        frm.name.select();
206        <%
207      }
208      %>
209      initPlatforms(<%=currentPlatform == null ? 0 : currentPlatform.getId()%>, <%=currentVariant == null ? 0 : currentVariant.getId()%>);
210      initMembers();
211      initDefaults();
212      platformOnChange();
213    }
214    function initPlatforms(platformId, variantId)
215    {
216      <%
217      for (Platform p : platforms)
218      {
219        RawDataType rdt = p.isFileOnly() ? null : p.getRawDataType();
220        %>
221        var p<%=p.getId()%> = new Platform(<%=p.getId()%>, '<%=HTML.javaScriptEncode(p.getExternalId())%>', '<%=HTML.javaScriptEncode(p.getName())%>', <%=p.isFileOnly()%>, '<%=rdt == null ? "" : rdt.getId()%>');
222        <%
223      }
224      for (PlatformVariant v : variants)
225      {
226        RawDataType rdt = v.isFileOnly() ? null : v.getRawDataType();
227        Platform p = v.getPlatform();
228        %>
229        var v<%=v.getId()%> = new Variant(p<%=p.getId()%>, <%=v.getId()%>, '<%=HTML.javaScriptEncode(v.getExternalId())%>', '<%=HTML.javaScriptEncode(v.getName())%>', <%=v.isFileOnly()%>, '<%=rdt == null ? "" : rdt.getId()%>');
230        <%
231      }
232      %>
233      var frm = document.forms['project'];
234      Platforms.populateList(frm.platform, platformId, variantId);
235    }
236    function initDefaults()
237    {
238      <%
239      // Platform/variant/raw data type
240      String icon = currentPlatform == null && currentVariant == null && currentRawDataType == null ? 
241        "notrequired_novalues.gif" : "notrequired_values.gif";
242      icon = "<span class=\"icon\"><img id=\"icon_default_platform\" src=\"../../images/"+icon+"\"></span>";
243      sb.append("<div class=\"param\" id=\"prompt_default_platform\" onclick=\"defaultItemOnClick('default_platform')\"");
244      sb.append(" onmouseover=\"Main.addClass(this, 'hover')\" onmouseout=\"Main.removeClass(this, 'hover')\" title=\"Platform / raw data type\">");
245      sb.append(icon+"<span class=\"label\">Platform / raw data type</span></div>\n");
246      for (Project.Default d : Project.Default.values())
247      {
248        %>
249        var values = new Array();
250        <%
251        icon = "";
252        if (project != null)
253        {
254          if (d.getItemType() != null)
255          {
256            BasicItem defaultValue = project.getDefaultItem(dc, d);
257            int valueId = 0;
258            if (defaultValue != null)
259            {
260              valueId = defaultValue.getId();
261              icon = "notrequired_values.gif";
262            }
263            else
264            {
265              icon = "notrequired_novalues.gif";
266            }
267            %>
268            values[values.length] = <%=valueId%>;
269            <%
270          }
271          else if (d == Project.Default.RAW_DATA_TYPE)
272          {
273            RawDataType rdt = project.getDefaultRawDataType();
274            String strValueId = "";
275            if (rdt != null)
276            {
277              strValueId = rdt.getId();
278              icon = "notrequired_values.gif";
279            }
280            else
281            {
282              icon = "notrequired_novalues.gif";
283            }
284            %>
285            values[values.length] = '<%=strValueId%>';
286            <%
287          }
288        }
289        else
290        {
291          icon = "notrequired_novalues.gif";
292        }
293        if (!ignore.contains(d))
294        {
295          icon = "<span class=\"icon\"><img id=\"icon_"+d.getName()+"\" src=\"../../images/"+icon+"\"></span>";
296          sb.append("<div class=\"param\" id=\"prompt_"+d.getName()+"\" onclick=\"defaultItemOnClick('"+d.getName()+"')\"");
297          sb.append(" onmouseover=\"Main.addClass(this, 'hover')\" onmouseout=\"Main.removeClass(this, 'hover')\" title=\""+d.getShortName()+"\">");
298          sb.append(icon+"<span class=\"label\">"+d.getShortName()+"</span></div>\n");       
299        }
300        %>
301        var di = new Parameter('<%=d.getName()%>', '<%=HTML.javaScriptEncode(d.getShortName())%>', 1, false, false, values);
302        <%
303      }
304      %>
305    }
306    function initMembers()
307    {
308      var frm = document.forms['project'];
309      var members = frm.members;
310      Link.addNewSection(members, new Section('U', 'Users'));
311      <%
312      if (userQuery != null)
313      {
314        ItemResultList<User> users = userQuery.list(dc);
315        for (User user : users)
316        {
317          Set<Permission> permissions = project.getPermissions(user);
318          %>
319          Link.addNewItem(members, new Item('U',<%=user.getId()%>, '<%=HTML.javaScriptEncode(user.getName())%> [<%=getPermissionString(permissions)%>]', <%=PermissionUtil.getPermissionCode(permissions)%>));
320          <%
321        }
322      }
323      %>
324      Link.addNewSection(members, new Section('G', 'Groups'));
325      <%
326      if (groupQuery != null)
327      {
328        ItemResultList<Group> groups = groupQuery.list(dc);
329        for (Group group : groups)
330        {
331          Set<Permission> permissions = project.getPermissions(group);
332          %>
333          Link.addNewItem(members, new Item('G',<%=group.getId()%>, '<%=HTML.javaScriptEncode(group.getName())%> [<%=getPermissionString(permissions)%>]', <%=PermissionUtil.getPermissionCode(permissions)%>));
334          <%
335        }
336      }
337      %>
338    }     
339    function correctPermissions(checked)
340    {
341      var frm = document.forms['project'];
342      if (checked)
343      {
344        frm['set_permission'].checked = frm['set_permission'].checked;
345        frm['set_owner'].checked = frm['set_owner'].checked;
346        frm['delete'].checked = frm['delete'].checked ;
347        frm['write'].checked = frm['write'].checked || frm['delete'].checked || frm['set_owner'].checked || frm['set_permission'].checked;
348        frm['use'].checked = frm['use'].checked || frm['write'].checked;
349        frm['read'].checked = frm['read'].checked || frm['use'].checked;
350      }
351      else
352      {
353        frm['read'].checked = frm['read'].checked;
354        frm['use'].checked = frm['use'].checked && frm['read'].checked;
355        frm['write'].checked = frm['write'].checked && frm['use'].checked;
356        frm['delete'].checked = frm['delete'].checked && frm['write'].checked;
357        frm['set_owner'].checked = frm['set_owner'].checked && frm['write'].checked;
358        frm['set_permission'].checked = frm['set_permission'].checked && frm['write'].checked;
359      }
360    }
361    function getPermissionCode()
362    {
363      var permissionCode = 0;
364      var frm = document.forms['project'];
365      permissionCode += frm['read'].checked ? <%=READ_CODE%>: 0;
366      permissionCode += frm['use'].checked ? <%=USE_CODE%>: 0;
367      permissionCode += frm['write'].checked ? <%=WRITE_CODE%>: 0;
368      permissionCode += frm['delete'].checked ? <%=DELETE_CODE%>: 0;
369      permissionCode += frm['set_owner'].checked ? <%=SET_OWNER_CODE%>: 0;
370      permissionCode += frm['set_permission'].checked ? <%=SET_PERMISSION_CODE%>: 0;
371      return permissionCode;
372    }
373    function getPermissionString(permissionCode)
374    {
375      var s = '';
376      s += permissionCode & <%=READ_CODE%> ? "R" : "-";
377      s += permissionCode & <%=USE_CODE%> ? "U" : "-";
378      s += permissionCode & <%=WRITE_CODE%> ? "W" : "-";
379      s += permissionCode & <%=DELETE_CODE%> ? "D" : "-";
380      s += permissionCode & <%=SET_OWNER_CODE%> ? "O" : "-";
381      s += permissionCode & <%=SET_PERMISSION_CODE%> ? "P" : "-";
382      return s;
383    }
384    function showPermissions(permissionCode)
385    {
386      var frm = document.forms['project'];
387      frm['read'].checked = permissionCode & <%=READ_CODE%>;
388      frm['use'].checked = permissionCode & <%=USE_CODE%>;
389      frm['write'].checked = permissionCode & <%=WRITE_CODE%>;
390      frm['delete'].checked = permissionCode & <%=DELETE_CODE%>;
391      frm['set_owner'].checked = permissionCode & <%=SET_OWNER_CODE%>;
392      frm['set_permission'].checked = permissionCode & <%=SET_PERMISSION_CODE%>;
393    }
394   
395    function permissionsOnClick(name)
396    {
397      var frm = document.forms['project'];
398      var radio = frm[name];
399      correctPermissions(radio.checked);
400      var permissionCode = getPermissionCode();
401      var permissionString = getPermissionString(permissionCode);
402      for (var i = 0; i < frm.members.length; i++)  // >
403      {
404        var option = frm.members[i];
405        if (option.selected && option.item.id)
406        {
407          option.item.value = permissionCode;
408          var text = option.text.replace(/\[.*\]/, '['+permissionString+']');
409          option.text = text;
410        }
411      }
412    }
413   
414    function membersOnChange()
415    {
416      var frm = document.forms['project'];
417      var item = frm.members[frm.members.selectedIndex].item;
418      if (item && item.id)
419      {
420        showPermissions(item.value);
421      }
422      else
423      {
424        showPermissions(0);
425      }
426    }
427
428    function addUsersOnClick()
429    {
430      var ids = Link.getListIds(document.forms['project'].members, 'U');
431      var excludes = ids.join(',');
432      Main.openPopup('../../admin/users/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectmultiple&callback=addUserCallback&permission=READ&exclude='+excludes, 'AddUsers', 1000, 700);
433    }
434    function addUserCallback(userId, name)
435    {
436      var permissionCode = getPermissionCode();
437      var permissionString = getPermissionString(permissionCode);
438      var item = Link.getItem('U', userId);
439      if (!item) item = new Item('U', userId, name+' ['+permissionString+']', permissionCode, 0);
440      Link.addItem(document.forms['project'].members, item);
441    }
442    function addGroupsOnClick()
443    {
444      var ids = Link.getListIds(document.forms['project'].members, 'G');
445      <%
446      if (!sc.hasSystemPermission(Permission.SHARE_TO_EVERYONE))
447      {
448        %>
449        ids[ids.length] = '<%=SystemItems.getId(Group.EVERYONE)%>';
450        <%
451      }
452      %>
453      var excludes = ids.join(',');
454      Main.openPopup('../../admin/groups/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectmultiple&callback=addGroupCallback&permission=READ&exclude='+excludes, 'AddGroups', 1000, 700);
455    }
456    function addGroupCallback(groupId, name)
457    {
458      var permissionCode = getPermissionCode();
459      var permissionString = getPermissionString(permissionCode);
460      var item = Link.getItem('G', groupId);
461      if (!item) item = new Item('G', groupId, name+' ['+permissionString+']', permissionCode, 0);
462      Link.addItem(document.forms['project'].members, item);
463    }
464    var oldValueDiv;
465    function defaultItemOnClick(defaultName)
466    {
467      var frm = document.forms['project'];
468      if (oldValueDiv) Main.hide(oldValueDiv);
469     
470      var pp = Parameters.allParameters['ID'+defaultName];
471      setSelectedParameter(pp, defaultName);
472      oldValueDiv = 'value_'+pp.name+'_div';
473      Main.show(oldValueDiv);
474    }
475    var selectedParameter = null;
476    var selectedParameterName = null;
477    function getSelectedParameter()
478    {
479      return selectedParameter;
480    }   
481    function setSelectedParameter(parameter, name)
482    {
483      if (selectedParameter != null)
484      {
485        Main.removeClass(document.getElementById('prompt_'+selectedParameter.name), 'selected');
486      }
487      selectedParameter = parameter;
488      selectedParameterName = name;
489      if (selectedParameter != null)
490      {
491        Main.addClass(document.getElementById('prompt_'+selectedParameter.name), 'selected');
492      }
493    }
494    function updateSelectedStyle()
495    {
496      var pp = getSelectedParameter();
497      var icon = document.getElementById('icon_'+pp.name);
498      var gif = getRoot()+'images/';
499      if (pp.values[0] == 0)
500      {
501        gif += 'notrequired_novalues.gif';
502      }
503      else
504      {
505        gif += 'notrequired_values.gif';
506      }
507      icon.src = gif;   
508    }
509    function defaultValueOnChange(value)
510    {
511      var pp = getSelectedParameter();
512      if (value == null || value == '')
513      {
514        pp.removeValue(0);
515      }
516      else
517      {
518        pp.updateValue(0, value);
519      }
520      updateSelectedStyle();   
521    }   
522    function selectDefaultItemOnClick(url)
523    {
524      var frm = document.forms['project'];           
525      var select_id = 'value_' + getSelectedParameter().name;
526      var selectlist = frm[select_id];
527      if (selectlist.length > 1)
528      {
529        var id = Math.abs(parseInt(selectlist[1].value));       
530        url += '&item_id='+id;
531      }
532      Main.openPopup(url, 'SelectDefaultItem', 1000, 700);
533    }
534    function setDefaultItemCallback(id, name)
535    {
536      var frm = document.forms['project'];
537      var select_id = 'value_' + getSelectedParameter().name;
538      var selectlist = frm[select_id];
539      if (selectlist.length < 2)
540      {
541        Forms.addListOption(selectlist, 1, new Option());
542      }
543      selectlist[1].value = id;
544      selectlist[1].text = name;
545      selectlist.selectedIndex = 1; 
546      defaultValueOnChange(selectlist[1].value);   
547    }       
548    function removeOnClick()
549    {
550      Link.removeSelected(document.forms['project'].members);
551    }
552   
553    function platformOnChange()
554    {
555      var frm = document.forms['project'];
556      var platform = Platforms.getSelectedPlatform(frm.platform);
557      var variant = Platforms.getSelectedVariant(frm.platform);
558      var fileOnly = (variant != null && variant.fileOnly) || 
559        (variant == null && platform != null && platform.fileOnly);
560      var rawDataType = null;
561      if (variant != null) 
562      {
563        rawDataType = variant.rawDataType;
564      }
565      else if (platform != null)
566      {
567        rawDataType = platform.rawDataType;
568      }
569      if (frm.rawdatatype[frm.rawdatatype.length - 1].value == '')
570      {
571        frm.rawdatatype[frm.rawdatatype.length - 1] = null;
572      }
573      if (fileOnly)
574      {
575        frm.rawdatatype.disabled = true;
576        frm.rawdatatype[frm.rawdatatype.length] = new Option('- file only -', '');
577        frm.rawdatatype.selectedIndex = frm.rawdatatype.length - 1;
578      }
579      else if (rawDataType)
580      {
581        frm.rawdatatype.disabled = true;
582        Forms.selectListOption(frm.rawdatatype, rawDataType);
583      }
584      else
585      {
586        frm.rawdatatype.disabled = false;
587        rawDataType = frm.rawdatatype[frm.rawdatatype.selectedIndex].value;
588      }
589      var icon = document.getElementById('icon_default_platform');
590      var gif = getRoot()+'images/';
591      if (!platform && !variant && !rawDataType)
592      {
593        gif += 'notrequired_novalues.gif';
594      }
595      else
596      {
597        gif += 'notrequired_values.gif';
598      }
599      icon.src = gif;
600    }
601   
602    function rawDataTypeOnChange()
603    {
604      platformOnChange();
605    }
606    </script>
607  </base:head>
608  <base:body onload="init()">
609    <p>
610    <form action="index.jsp?ID=<%=ID%>" method="post" name="project" onsubmit="return false;">
611    <input type="hidden" name="cmd" value="UpdateItem">
612
613    <h3 class="docked"><%=title%> <base:help tabcontrol="settings" /></h3>
614    <t:tabcontrol id="settings" contentstyle="<%="height: "+(int)(scale*320)+"px;"%>" 
615      position="bottom" remember="<%=project != null%>">
616    <t:tab id="info" title="Project" validate="validateProject()" helpid="project.edit">
617      <table class="form" cellspacing=0>
618      <tr>
619        <td class="prompt">Name</td>
620        <td><input <%=requiredClazz%> type="text" name="name" 
621          value="<%=HTML.encodeTags(project == null ? Values.getString(cc.getPropertyValue("name"), "New project") : project.getName())%>" 
622          size="40" maxlength="<%=Project.MAX_NAME_LENGTH%>"></td>
623      </tr>
624      <tr valign=top>
625        <td class="prompt">Description</td>
626        <td nowrap>
627          <textarea <%=clazz%> rows="4" cols="40" name="description" wrap="virtual"
628            ><%=HTML.encodeTags(project == null ? cc.getPropertyValue("description") : project.getDescription())%></textarea>
629          <a href="javascript:Main.zoom('Description', 'project', 'description')"
630            title="Edit in larger window"><base:icon image="zoom.gif" /></a>
631        </td>
632      </tr>
633      </table>
634      <div align=right>&nbsp;<i><base:icon image="required.gif" /> = required information</i></div>
635    </t:tab>
636
637    <t:tab id="members" title="Members" validate="validateMembers()" helpid="project.edit.members">
638
639    <table >
640    <tr valign="top">
641    <td>
642      <b>Members</b><br>
643      <select <%=clazz%> name="members" size="15" multiple onChange="membersOnChange()" style="width: 15em;">
644      </select>
645      <input type="hidden" name="modifiedUsers" value="">
646      <input type="hidden" name="modifiedGroups" value="">
647    </td>
648    <td>
649      <br>
650      <b>Permissions</b><br>
651      <input type="checkbox" checked name="read" onClick="permissionsOnClick('read')">Read<br>
652      <input type="checkbox" checked name="use" onClick="permissionsOnClick('use')">Use<br>
653      <input type="checkbox" name="write" onClick="permissionsOnClick('write')">Write<br>
654      <input type="checkbox" name="delete" onClick="permissionsOnClick('delete')">Delete<br>
655      <input type="checkbox" name="set_owner" onClick="permissionsOnClick('set_owner')">Take ownership<br>
656      <input type="checkbox" name="set_permission" onClick="permissionsOnClick('set_permission')">Set permission<br>
657    </td>
658    <td>
659      <br>
660      <table width="150">
661      <tr><td><base:button 
662        onclick="addUsersOnClick()" 
663        title="Add&nbsp;users&hellip;" 
664        tooltip="Add users to this project"
665        /></td></tr>
666      <tr><td><base:button 
667        onclick="addGroupsOnClick()" 
668        title="Add&nbsp;groups&hellip;" 
669        tooltip="Add groups to this project"
670      /></td></tr>
671      <tr><td><base:button 
672        onclick="removeOnClick()" 
673        title="Remove" 
674        tooltip="Remove the selected items from this group"
675      /></td></tr>
676      </table>
677    </td>
678    </tr>
679    </table>
680    </t:tab>
681   
682    <t:tab id="defaults" title="Defaults"  helpid="project.edit.defaults">
683      <table class="form" cellspacing="2" border="0" cellpadding="0" width="100%">       
684        <tr valign="top">
685          <td width="40%">
686            <b>Project defaults</b><br>
687            <div class="parameterlist" style="height: <%=(int)(scale*260)%>px; width:<%=(int)(scale*200)%>px; margin-top: 4px;">
688              <%=sb.toString()%>
689            </div>
690            <base:icon image="hasvalues.gif" /> = Has value
691          </td>
692          <td width="60%">
693            <br>
694           
695            <div id="value_default_platform_div" style="display: none">
696              <table>
697              <tr>
698                <td class="prompt">Platform</td>
699              </tr>
700              <tr>
701                <td>
702                  <select name="platform" onchange="platformOnChange()">
703                  <option value="">- none -</option>
704                  </select>
705                </td>
706              </tr>
707              <tr>
708                <td class="prompt">Raw data type</td>
709              </tr>
710              <tr>
711                <td>
712                  <select name="rawdatatype" onchange="rawDataTypeOnChange()">
713                  <option value="">- none -</option>
714                  <%
715                  for (RawDataType rdt : RawDataTypes.getRawDataTypes())
716                  {
717                    if (rdt.isStoredInDb())
718                    {
719                      String selected = rdt.equals(currentRawDataType) ? "selected" : "";
720                      %>
721                      <option value="<%=rdt.getId()%>" <%=selected%>><%=HTML.encodeTags(rdt.getName())%>
722                      <%
723                    }
724                  }
725                  %>
726                  </select>
727                </td>
728              </tr>
729              </table>
730              </div>
731           
732            <%
733            for (Project.Default d : Project.Default.values())
734            {
735              String inputName = "value_" + d.getName();
736              if (!ignore.contains(d))
737              {
738                %>
739                <div id="<%=inputName%>_div" style="display: none;">
740                  <table>
741                    <tr>
742                    <td class="prompt"><%=d.getShortName()%></td>
743                    </tr>
744                    <%
745                    if (d.getItemType() != null)
746                    {
747                      String selectDefaultItemOnClick = "";
748                      String defaultItemOnChange = ""; 
749                      List recentItems = null;
750                      boolean readCurrentItem = true;
751                      BasicItem currentItem = null;
752                      try
753                      {
754                        currentItem = project != null ? project.getDefaultItem(dc, d) : null;
755                      }
756                      catch (PermissionDeniedException ex)
757                      {
758                        readCurrentItem = false;
759                      }
760                     
761                      if (d.getItemType() == Item.PROTOCOL) 
762                      {
763                        int typeId = SystemItems.getId(d.getType());
764                        String url = "'../../admin/protocols/index.jsp?ID=" + ID + 
765                            "&cmd=UpdateContext&mode=selectone&callback=setDefaultItemCallback&filter:INT:protocolType=" + typeId + "'";
766                        selectDefaultItemOnClick = "selectDefaultItemOnClick(" + url + ")";
767                        recentItems = recentProtocol;
768                      }
769                      else if (d.getItemType() == Item.HARDWARE)
770                      {
771                        int typeId = SystemItems.getId(d.getType());
772                        String url = "'../../admin/hardware/index.jsp?ID=" + ID + 
773                            "&cmd=UpdateContext&mode=selectone&callback=setDefaultItemCallback&filter:INT:hardwareType=" + typeId + "'";
774                        selectDefaultItemOnClick = "selectDefaultItemOnClick(" + url + ")";
775                        recentItems = recentHardware;
776                      }
777                      else if (d.getItemType() == Item.SOFTWARE)
778                      {
779                        String url = "'../../admin/software/index.jsp?ID=" + ID + 
780                            "&cmd=UpdateContext&mode=selectone&callback=setDefaultItemCallback'";
781                        selectDefaultItemOnClick = "selectDefaultItemOnClick(" + url + ")";
782                        recentItems = recentSoftware;
783                      }
784                      else if (d.getItemType() == Item.ARRAYDESIGN)
785                      {
786                        String url = "'../../lims/arraydesigns/index.jsp?ID=" + ID + 
787                            "&mode=selectone&callback=setDefaultItemCallback'";
788                        selectDefaultItemOnClick = "selectDefaultItemOnClick(" + url + ")";                 
789                        recentItems = recentArrayDesign;
790                      }               
791                      %>   
792                      <tr>
793                      <td>
794                        <base:select 
795                          id="<%=inputName%>"
796                          clazz="selectionlist"
797                          required="false"
798                          current="<%=currentItem%>"
799                          denied="<%=!readCurrentItem%>"
800                          recent="<%=recentItems%>"
801                          newitem="<%=project == null%>"
802                          onselect="<%=selectDefaultItemOnClick%>"
803                          onchange = 'defaultValueOnChange(this[this.selectedIndex].value)'
804                        />
805                      </td>
806                      </tr>                 
807                    <%
808                    }
809                    %>
810                  </table>                   
811                </div>
812                <%
813              }
814            }
815            %>           
816          </td>
817        </tr>
818      </table>
819    </t:tab>
820    </t:tabcontrol>
821
822    <table align="center">
823    <tr>
824      <td width="50%"><base:button onclick="saveSettings()" title="Save" /></td>
825      <td width="50%"><base:button onclick="window.close()" title="Cancel" /></td>
826    </tr>
827    </table>
828    </form>
829  </base:body>
830  </base:page>
831  <%
832}
833finally
834{
835  if (dc != null) dc.close();
836}
837%>
Note: See TracBrowser for help on using the repository browser.