www/my_base/projects/edit_project.jsp

Code
Comments
Other
Rev Date Author Line
578 12 May 05 nicklas 1 <%-- $Id$
578 12 May 05 nicklas 2   ------------------------------------------------------------------
3675 16 Aug 07 jari 3   Copyright (C) 2005 Nicklas Nordborg
5425 23 Sep 10 nicklas 4   Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
578 12 May 05 nicklas 5
2304 22 May 06 jari 6   This file is part of BASE - BioArray Software Environment.
2304 22 May 06 jari 7   Available at http://base.thep.lu.se/
578 12 May 05 nicklas 8
578 12 May 05 nicklas 9   BASE is free software; you can redistribute it and/or
578 12 May 05 nicklas 10   modify it under the terms of the GNU General Public License
4476 05 Sep 08 jari 11   as published by the Free Software Foundation; either version 3
578 12 May 05 nicklas 12   of the License, or (at your option) any later version.
578 12 May 05 nicklas 13
578 12 May 05 nicklas 14   BASE is distributed in the hope that it will be useful,
578 12 May 05 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
578 12 May 05 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
578 12 May 05 nicklas 17   GNU General Public License for more details.
578 12 May 05 nicklas 18
578 12 May 05 nicklas 19   You should have received a copy of the GNU General Public License
4511 11 Sep 08 jari 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
578 12 May 05 nicklas 21   ------------------------------------------------------------------
578 12 May 05 nicklas 22
578 12 May 05 nicklas 23
578 12 May 05 nicklas 24   @author Nicklas
578 12 May 05 nicklas 25   @version 2.0
578 12 May 05 nicklas 26 --%>
5426 24 Sep 10 nicklas 27 <%@ page pageEncoding="UTF-8" session="false"
2939 20 Nov 06 martin 28   import="net.sf.basedb.core.ArrayDesign"
578 12 May 05 nicklas 29   import="net.sf.basedb.core.SessionControl"
2928 16 Nov 06 martin 30   import="net.sf.basedb.core.BasicItem"
5650 01 Jun 11 nicklas 31   import="net.sf.basedb.core.Nameable"
578 12 May 05 nicklas 32   import="net.sf.basedb.core.DbControl"
2939 20 Nov 06 martin 33   import="net.sf.basedb.core.Hardware"
1895 02 Feb 06 nicklas 34   import="net.sf.basedb.core.Item"
1895 02 Feb 06 nicklas 35   import="net.sf.basedb.core.ItemContext"
5650 01 Jun 11 nicklas 36   import="net.sf.basedb.core.Subtypable"
5650 01 Jun 11 nicklas 37   import="net.sf.basedb.core.ItemSubtype"
578 12 May 05 nicklas 38   import="net.sf.basedb.core.SystemItems"
578 12 May 05 nicklas 39   import="net.sf.basedb.core.Permission"
578 12 May 05 nicklas 40   import="net.sf.basedb.core.Project"
2939 20 Nov 06 martin 41   import="net.sf.basedb.core.Protocol"
3847 17 Oct 07 nicklas 42   import="net.sf.basedb.core.Platform"
3847 17 Oct 07 nicklas 43   import="net.sf.basedb.core.PlatformVariant"
5370 23 Jun 10 nicklas 44   import="net.sf.basedb.core.Include"
5370 23 Jun 10 nicklas 45   import="net.sf.basedb.core.PermissionTemplate"
602 17 May 05 nicklas 46   import="net.sf.basedb.core.User"
602 17 May 05 nicklas 47   import="net.sf.basedb.core.Group"
1418 07 Oct 05 nicklas 48   import="net.sf.basedb.core.ItemQuery"
1895 02 Feb 06 nicklas 49   import="net.sf.basedb.core.ItemResultList"
1895 02 Feb 06 nicklas 50   import="net.sf.basedb.core.PermissionDeniedException"
2941 22 Nov 06 martin 51   import="net.sf.basedb.core.RawDataType"
2941 22 Nov 06 martin 52   import="net.sf.basedb.core.RawDataTypes"
2939 20 Nov 06 martin 53   import="net.sf.basedb.core.Software"
1895 02 Feb 06 nicklas 54   import="net.sf.basedb.core.BaseException"
578 12 May 05 nicklas 55   import="net.sf.basedb.core.query.Orders"
1418 07 Oct 05 nicklas 56   import="net.sf.basedb.core.query.Hql"
578 12 May 05 nicklas 57   import="net.sf.basedb.clients.web.Base"
1965 10 Feb 06 nicklas 58   import="net.sf.basedb.clients.web.PermissionUtil"
578 12 May 05 nicklas 59   import="net.sf.basedb.clients.web.util.HTML"
2753 20 Oct 06 nicklas 60   import="net.sf.basedb.util.Values"
5501 18 Nov 10 nicklas 61   import="net.sf.basedb.core.plugin.GuiContext"
5501 18 Nov 10 nicklas 62   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
5501 18 Nov 10 nicklas 63   import="net.sf.basedb.clients.web.extensions.JspContext"
5501 18 Nov 10 nicklas 64   import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
7604 25 Feb 19 nicklas 65   import="net.sf.basedb.clients.web.extensions.tabcontrol.TabAction"
5501 18 Nov 10 nicklas 66   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
6320 11 Sep 13 nicklas 67   import="net.sf.basedb.util.json.NameableConverter"
6320 11 Sep 13 nicklas 68   import="net.sf.basedb.util.json.JsonUtil"
6320 11 Sep 13 nicklas 69   import="org.json.simple.JSONObject"
6320 11 Sep 13 nicklas 70   import="org.json.simple.JSONArray"
1895 02 Feb 06 nicklas 71   import="java.util.List"
1895 02 Feb 06 nicklas 72   import="java.util.Set"
1895 02 Feb 06 nicklas 73   import="java.util.HashSet"
578 12 May 05 nicklas 74   import="java.util.EnumSet"
578 12 May 05 nicklas 75 %>
578 12 May 05 nicklas 76 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
578 12 May 05 nicklas 77 <%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
6142 20 Sep 12 nicklas 78 <%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
602 17 May 05 nicklas 79 <%!
1965 10 Feb 06 nicklas 80 private static final int READ_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.READ));
1965 10 Feb 06 nicklas 81 private static final int USE_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.USE));
7214 19 Oct 16 nicklas 82 private static final int RESTRICTED_WRITE_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.RESTRICTED_WRITE));
1965 10 Feb 06 nicklas 83 private static final int WRITE_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.WRITE));
1965 10 Feb 06 nicklas 84 private static final int DELETE_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.DELETE));
1965 10 Feb 06 nicklas 85 private static final int SET_OWNER_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.SET_OWNER));
1965 10 Feb 06 nicklas 86 private static final int SET_PERMISSION_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.SET_PERMISSION));
602 17 May 05 nicklas 87
602 17 May 05 nicklas 88 private String getPermissionString(Set<Permission> permissions)
602 17 May 05 nicklas 89 {
602 17 May 05 nicklas 90   StringBuilder sb = new StringBuilder();
602 17 May 05 nicklas 91   sb.append(permissions.contains(Permission.READ) ? "R" : "-");
602 17 May 05 nicklas 92   sb.append(permissions.contains(Permission.USE) ? "U" : "-");
7214 19 Oct 16 nicklas 93   sb.append(permissions.contains(Permission.RESTRICTED_WRITE) ? "A" : "-");
602 17 May 05 nicklas 94   sb.append(permissions.contains(Permission.WRITE) ? "W" : "-");
602 17 May 05 nicklas 95   sb.append(permissions.contains(Permission.DELETE) ? "D" : "-");
602 17 May 05 nicklas 96   sb.append(permissions.contains(Permission.SET_OWNER) ? "O" : "-");
602 17 May 05 nicklas 97   sb.append(permissions.contains(Permission.SET_PERMISSION) ? "P" : "-");
602 17 May 05 nicklas 98   return sb.toString();
602 17 May 05 nicklas 99 }
6320 11 Sep 13 nicklas 100 private JSONObject createSection(JSONArray jsonSections, Item item, String name)
6320 11 Sep 13 nicklas 101 {
6320 11 Sep 13 nicklas 102   JSONObject json = new JSONObject();
6320 11 Sep 13 nicklas 103   json.put("itemType", item.name());
6320 11 Sep 13 nicklas 104   json.put("name", name);
6320 11 Sep 13 nicklas 105   json.put("items", new JSONArray());
6320 11 Sep 13 nicklas 106   jsonSections.add(json);
6320 11 Sep 13 nicklas 107   return json;
6320 11 Sep 13 nicklas 108 }
6320 11 Sep 13 nicklas 109 private void addItem(JSONArray jsonSections, JSONObject jsonItem, Item itemType)
6320 11 Sep 13 nicklas 110 {
6320 11 Sep 13 nicklas 111   for (Object section : jsonSections)
6320 11 Sep 13 nicklas 112   {
6320 11 Sep 13 nicklas 113     JSONObject js = (JSONObject)section;
6320 11 Sep 13 nicklas 114     if (itemType.name().equals(js.get("itemType")))
6320 11 Sep 13 nicklas 115     {
6320 11 Sep 13 nicklas 116       ((JSONArray)js.get("items")).add(jsonItem);
6320 11 Sep 13 nicklas 117       break;
6320 11 Sep 13 nicklas 118     }
6320 11 Sep 13 nicklas 119   }
6320 11 Sep 13 nicklas 120 }
602 17 May 05 nicklas 121 %>
578 12 May 05 nicklas 122 <%
1895 02 Feb 06 nicklas 123 final Item itemType = Item.PROJECT;
1895 02 Feb 06 nicklas 124 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
1895 02 Feb 06 nicklas 125 final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
1895 02 Feb 06 nicklas 126 final int itemId = cc.getId();
578 12 May 05 nicklas 127 final String ID = sc.getId();
578 12 May 05 nicklas 128 final float scale = Base.getScale(sc);
7954 12 May 21 nicklas 129 final DbControl dc = sc.newDbControl(":Edit "+itemType);
578 12 May 05 nicklas 130 try
578 12 May 05 nicklas 131 {
578 12 May 05 nicklas 132   String title = null;
578 12 May 05 nicklas 133   Project project = null;
5370 23 Jun 10 nicklas 134   
1895 02 Feb 06 nicklas 135   // Query to retrieve child groups
1895 02 Feb 06 nicklas 136   ItemQuery<Group> groupQuery = null;
1895 02 Feb 06 nicklas 137   // Query to retrieve user members
1895 02 Feb 06 nicklas 138   ItemQuery<User> userQuery = null;
1895 02 Feb 06 nicklas 139   
3850 17 Oct 07 nicklas 140   RawDataType currentRawDataType = null;
5370 23 Jun 10 nicklas 141   boolean readCurrentPermissionTemplate = true;
5370 23 Jun 10 nicklas 142   PermissionTemplate currentPermissionTemplate = null;
5370 23 Jun 10 nicklas 143
7605 26 Feb 19 nicklas 144   List<PermissionTemplate> recentPermissionTemplates = cc.getRecent(dc, Item.PERMISSIONTEMPLATE);
5370 23 Jun 10 nicklas 145
1895 02 Feb 06 nicklas 146   if (itemId == 0)
578 12 May 05 nicklas 147   {
578 12 May 05 nicklas 148     title = "Create project";
1895 02 Feb 06 nicklas 149     cc.removeObject("item");
5370 23 Jun 10 nicklas 150     currentPermissionTemplate = Base.getFirstMatching(dc, PermissionTemplate.getQuery(), "name", cc.getPropertyFilter("permissionTemplate.name"));
578 12 May 05 nicklas 151   }
578 12 May 05 nicklas 152   else
578 12 May 05 nicklas 153   {
1895 02 Feb 06 nicklas 154     project = Project.getById(dc, itemId);
5650 01 Jun 11 nicklas 155     project.checkPermission(Permission.WRITE);
1895 02 Feb 06 nicklas 156     cc.setObject("item", project);
578 12 May 05 nicklas 157     title = "Edit project -- " + HTML.encodeTags(project.getName());
3850 17 Oct 07 nicklas 158     currentRawDataType = project.getDefaultRawDataType();
1895 02 Feb 06 nicklas 159     
3847 17 Oct 07 nicklas 160     try
3847 17 Oct 07 nicklas 161     {
5370 23 Jun 10 nicklas 162       currentPermissionTemplate = project.getPermissionTemplate();
5370 23 Jun 10 nicklas 163     }
5370 23 Jun 10 nicklas 164     catch (PermissionDeniedException ex)
5370 23 Jun 10 nicklas 165     {
5370 23 Jun 10 nicklas 166       readCurrentPermissionTemplate = false;
5370 23 Jun 10 nicklas 167     }
5370 23 Jun 10 nicklas 168   
1895 02 Feb 06 nicklas 169     groupQuery = project.getGroups();
3888 29 Oct 07 nicklas 170     groupQuery.include(Include.ALL);
1895 02 Feb 06 nicklas 171     groupQuery.order(Orders.asc(Hql.property("name")));
1895 02 Feb 06 nicklas 172     userQuery = project.getUsers();
3888 29 Oct 07 nicklas 173     userQuery.include(Include.ALL);
1895 02 Feb 06 nicklas 174     userQuery.order(Orders.asc(Hql.property("name")));
578 12 May 05 nicklas 175   }
2928 16 Nov 06 martin 176   
6320 11 Sep 13 nicklas 177   JSONArray jsonMembers = new JSONArray();
6217 14 Dec 12 nicklas 178   
6320 11 Sep 13 nicklas 179   JSONObject jsonUsers = new JSONObject();
6320 11 Sep 13 nicklas 180   jsonUsers.put("itemType", "USER");
6320 11 Sep 13 nicklas 181   jsonUsers.put("name", "Users");
6320 11 Sep 13 nicklas 182   jsonMembers.add(jsonUsers);
6320 11 Sep 13 nicklas 183   final Project prj = project;
6320 11 Sep 13 nicklas 184   if (userQuery != null)
6320 11 Sep 13 nicklas 185   {
6320 11 Sep 13 nicklas 186     jsonUsers.put("items", JsonUtil.toArray(userQuery.iterate(dc), 
6320 11 Sep 13 nicklas 187       new NameableConverter<User>()
578 12 May 05 nicklas 188       {
6320 11 Sep 13 nicklas 189         protected void setMore(JSONObject json, User user)
2928 16 Nov 06 martin 190         {
6320 11 Sep 13 nicklas 191           Set<Permission> permissions = prj.getPermissions(user);
6320 11 Sep 13 nicklas 192           json.put("name", user.getName() + " [" + getPermissionString(permissions) + "]");
6320 11 Sep 13 nicklas 193           json.put("value", PermissionUtil.getPermissionCode(permissions));
2928 16 Nov 06 martin 194         }
2928 16 Nov 06 martin 195       }
6320 11 Sep 13 nicklas 196     ));
6320 11 Sep 13 nicklas 197   }
6320 11 Sep 13 nicklas 198   
6320 11 Sep 13 nicklas 199   JSONObject jsonGroups = new JSONObject();
6320 11 Sep 13 nicklas 200   jsonGroups.put("itemType", "GROUP");
6320 11 Sep 13 nicklas 201   jsonGroups.put("name", "Groups");
6320 11 Sep 13 nicklas 202   jsonMembers.add(jsonGroups);
6320 11 Sep 13 nicklas 203   if (groupQuery != null)
6320 11 Sep 13 nicklas 204   {
6320 11 Sep 13 nicklas 205     jsonGroups.put("items", JsonUtil.toArray(groupQuery.iterate(dc), 
6320 11 Sep 13 nicklas 206       new NameableConverter<Group>()
614 18 May 05 nicklas 207       {
6320 11 Sep 13 nicklas 208         protected void setMore(JSONObject json, Group group)
1895 02 Feb 06 nicklas 209         {
6320 11 Sep 13 nicklas 210           Set<Permission> permissions = prj.getPermissions(group);
6320 11 Sep 13 nicklas 211           json.put("name", group.getName() + " [" + getPermissionString(permissions) + "]");
6320 11 Sep 13 nicklas 212           json.put("value", PermissionUtil.getPermissionCode(permissions));
1895 02 Feb 06 nicklas 213         }
614 18 May 05 nicklas 214       }
6320 11 Sep 13 nicklas 215     ));
6320 11 Sep 13 nicklas 216   }
5370 23 Jun 10 nicklas 217
6320 11 Sep 13 nicklas 218   JSONArray jsonDefaultItems = new JSONArray();
6320 11 Sep 13 nicklas 219   JSONObject jsonPlatforms = createSection(jsonDefaultItems, Item.PLATFORM, "Platforms");
6320 11 Sep 13 nicklas 220   JSONObject jsonVariants = createSection(jsonDefaultItems, Item.PLATFORMVARIANT, "Platform variants");
6320 11 Sep 13 nicklas 221   JSONObject jsonArrayDesigns = createSection(jsonDefaultItems, Item.ARRAYDESIGN, "Array designs");
6320 11 Sep 13 nicklas 222   JSONObject jsonProtocols = createSection(jsonDefaultItems, Item.PROTOCOL, "Protocols");
6320 11 Sep 13 nicklas 223   JSONObject jsonHardware = createSection(jsonDefaultItems, Item.HARDWARE, "Hardware");
6320 11 Sep 13 nicklas 224   JSONObject jsonSoftware = createSection(jsonDefaultItems, Item.SOFTWARE, "Software");
5650 01 Jun 11 nicklas 225   
5650 01 Jun 11 nicklas 226
6320 11 Sep 13 nicklas 227   if (project != null)
6320 11 Sep 13 nicklas 228   {
6320 11 Sep 13 nicklas 229     for (BasicItem defaultItem : project.getDefaultItems(dc))
2939 20 Nov 06 martin 230     {
6320 11 Sep 13 nicklas 231       String name = defaultItem instanceof Nameable ? ((Nameable)defaultItem).getName() : defaultItem.toString();
6320 11 Sep 13 nicklas 232       if (defaultItem instanceof Subtypable)
3847 17 Oct 07 nicklas 233       {
6320 11 Sep 13 nicklas 234         ItemSubtype subtype = ((Subtypable)defaultItem).getItemSubtype();
6320 11 Sep 13 nicklas 235         if (subtype != null) name += " (" + subtype.getName() + ")";
3847 17 Oct 07 nicklas 236       }
6320 11 Sep 13 nicklas 237       JSONObject jsonItem = new JSONObject();
6320 11 Sep 13 nicklas 238       jsonItem.put("id", defaultItem.getId());
6320 11 Sep 13 nicklas 239       jsonItem.put("name", name);
6320 11 Sep 13 nicklas 240       addItem(jsonDefaultItems, jsonItem, defaultItem.getType());
3847 17 Oct 07 nicklas 241     }
6320 11 Sep 13 nicklas 242   }
6320 11 Sep 13 nicklas 243   JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), project);
7604 25 Feb 19 nicklas 244   ExtensionsInvoker<TabAction> invoker = EditUtil.useEditExtensions(jspContext);
6320 11 Sep 13 nicklas 245   %>
6320 11 Sep 13 nicklas 246   <base:page type="popup" title="<%=title%>" id="edit-page">
6320 11 Sep 13 nicklas 247   <base:head scripts="tabcontrol-2.js,linkitems-2.js,~projects.js" styles="tabcontrol.css">
6320 11 Sep 13 nicklas 248     <ext:scripts context="<%=jspContext%>" />
6320 11 Sep 13 nicklas 249     <ext:stylesheets context="<%=jspContext%>" />
578 12 May 05 nicklas 250   </base:head>
6320 11 Sep 13 nicklas 251   <base:body>
5909 14 Dec 11 nicklas 252     <h1><%=title%> <base:help tabcontrol="settings" /></h1>
6320 11 Sep 13 nicklas 253
6320 11 Sep 13 nicklas 254     <div id="page-data" class="datacontainer"
6320 11 Sep 13 nicklas 255       data-read="<%=READ_CODE%>"
6320 11 Sep 13 nicklas 256       data-use="<%=USE_CODE%>"
7214 19 Oct 16 nicklas 257       data-restricted-write="<%=RESTRICTED_WRITE_CODE%>"
6320 11 Sep 13 nicklas 258       data-write="<%=WRITE_CODE%>"
6320 11 Sep 13 nicklas 259       data-delete="<%=DELETE_CODE%>"
6320 11 Sep 13 nicklas 260       data-set-owner="<%=SET_OWNER_CODE%>"
6320 11 Sep 13 nicklas 261       data-set-permission="<%=SET_PERMISSION_CODE%>"
6320 11 Sep 13 nicklas 262       data-share-to-everyone="<%=sc.hasSystemPermission(Permission.SHARE_TO_EVERYONE) ? 1 : 0 %>"
6320 11 Sep 13 nicklas 263       data-everyone-id="<%=SystemItems.getId(Group.EVERYONE)%>"
6320 11 Sep 13 nicklas 264       ></div>
5909 14 Dec 11 nicklas 265     
6162 10 Oct 12 nicklas 266     <form action="index.jsp?ID=<%=ID%>" method="post" name="project">
1895 02 Feb 06 nicklas 267     <input type="hidden" name="cmd" value="UpdateItem">
4690 08 Dec 08 nicklas 268     <input type="hidden" name="autoPermissions" value="<%=PermissionUtil.getPermissionCode(project == null ? EnumSet.range(Permission.READ, Permission.DELETE): project.getAutoPermission())%>">
6320 11 Sep 13 nicklas 269   
5909 14 Dec 11 nicklas 270     <t:tabcontrol id="settings" 
5909 14 Dec 11 nicklas 271       subclass="content dialogtabcontrol"
5501 18 Nov 10 nicklas 272       position="bottom" remember="<%=project != null%>"
5501 18 Nov 10 nicklas 273       extensions="<%=invoker%>">
6320 11 Sep 13 nicklas 274     <t:tab id="info" title="Project" helpid="project.edit">
5909 14 Dec 11 nicklas 275       <table class="fullform input100">
578 12 May 05 nicklas 276       <tr>
5909 14 Dec 11 nicklas 277         <th>Name</th>
6320 11 Sep 13 nicklas 278         <td><input class="text required auto-init" data-auto-init="<%=project == null ? "focus-select" : "focus" %>"  
6320 11 Sep 13 nicklas 279           type="text" name="name" 
1895 02 Feb 06 nicklas 280           value="<%=HTML.encodeTags(project == null ? Values.getString(cc.getPropertyValue("name"), "New project") : project.getName())%>" 
5909 14 Dec 11 nicklas 281           maxlength="<%=Project.MAX_NAME_LENGTH%>"></td>
5909 14 Dec 11 nicklas 282         <td></td>
578 12 May 05 nicklas 283       </tr>
5909 14 Dec 11 nicklas 284       <tr class="big">
5909 14 Dec 11 nicklas 285         <th>Default permissions</th>
4690 08 Dec 08 nicklas 286         <td>
5370 23 Jun 10 nicklas 287           <base:select 
5370 23 Jun 10 nicklas 288             id="permissiontemplate_id"
5370 23 Jun 10 nicklas 289             clazz="selectionlist"
5370 23 Jun 10 nicklas 290             required="false"
5370 23 Jun 10 nicklas 291             current="<%=currentPermissionTemplate%>"
5370 23 Jun 10 nicklas 292             denied="<%=!readCurrentPermissionTemplate%>"
5370 23 Jun 10 nicklas 293             recent="<%=recentPermissionTemplates%>"
5370 23 Jun 10 nicklas 294             newitem="<%=project == null%>"
5370 23 Jun 10 nicklas 295             unselectedtext="- select a template or specify below -"
5370 23 Jun 10 nicklas 296           />
5370 23 Jun 10 nicklas 297         
5812 17 Oct 11 nicklas 298           <input type="checkbox" id="autoRead" checked name="auto_read" 
6320 11 Sep 13 nicklas 299             ><label for="autoRead">Read</label><br>
5812 17 Oct 11 nicklas 300           <input type="checkbox" id="autoUse" checked name="auto_use" 
6320 11 Sep 13 nicklas 301             ><label for="autoUse">Use</label><br>
7214 19 Oct 16 nicklas 302           <input type="checkbox" id="autoRestrictedWrite" name="auto_restricted_write" 
7214 19 Oct 16 nicklas 303             ><label for="autoRestrictedWrite">Annotate</label><br>
5812 17 Oct 11 nicklas 304           <input type="checkbox" id="autoWrite" name="auto_write" 
6320 11 Sep 13 nicklas 305             ><label for="autoWrite">Write</label><br>
5812 17 Oct 11 nicklas 306           <input type="checkbox" id="autoDelete" name="auto_delete" 
6320 11 Sep 13 nicklas 307             ><label for="autoDelete">Delete</label><br>
5812 17 Oct 11 nicklas 308           <input type="checkbox" id="autoSetOwner" name="auto_set_owner" 
6320 11 Sep 13 nicklas 309             ><label for="autoSetOwner">Set owner</label><br>
5812 17 Oct 11 nicklas 310           <input type="checkbox" id="autoSetPermission" name="auto_set_permission" 
6320 11 Sep 13 nicklas 311             ><label for="autoSetPermission">Set permission</label><br>
4690 08 Dec 08 nicklas 312         </td>
5909 14 Dec 11 nicklas 313         <td></td>
4690 08 Dec 08 nicklas 314       </tr>
5909 14 Dec 11 nicklas 315       <tr class="dynamic">
5909 14 Dec 11 nicklas 316         <th>Description</th>
5909 14 Dec 11 nicklas 317         <td>
6217 14 Dec 12 nicklas 318           <textarea class="text" rows="4" cols="40" name="description" id="description"
1895 02 Feb 06 nicklas 319             ><%=HTML.encodeTags(project == null ? cc.getPropertyValue("description") : project.getDescription())%></textarea>
578 12 May 05 nicklas 320         </td>
5909 14 Dec 11 nicklas 321         <td style="width: 20px;">
6215 13 Dec 12 nicklas 322           <base:zoom textarea="description" title="Description" />
5909 14 Dec 11 nicklas 323         </td>
578 12 May 05 nicklas 324       </tr>
578 12 May 05 nicklas 325       </table>
578 12 May 05 nicklas 326     </t:tab>
1895 02 Feb 06 nicklas 327
6320 11 Sep 13 nicklas 328     <t:tab id="members" title="Members" helpid="project.edit.members">
6610 20 Nov 14 nicklas 329     
7703 11 Apr 19 nicklas 330     <table class="fullform bg-filled-50">
5909 14 Dec 11 nicklas 331     <tr>
5909 14 Dec 11 nicklas 332       <td class="padded" style="width: 50%;"><b>Members</b></td>
6610 20 Nov 14 nicklas 333       <td class="padded" style="width: 30%;"><b>Permissions</b></td>
5909 14 Dec 11 nicklas 334       <td></td>
602 17 May 05 nicklas 335     </tr>
7703 11 Apr 19 nicklas 336     <tr class="dynamic">
5909 14 Dec 11 nicklas 337       <td style="padding-left: 5px; padding-right: 5px;">
6320 11 Sep 13 nicklas 338         <select name="members" id="members" 
6320 11 Sep 13 nicklas 339           class="auto-init"
6320 11 Sep 13 nicklas 340           data-auto-init="link-container"
6320 11 Sep 13 nicklas 341           data-initial-items="<%=HTML.encodeTags(jsonMembers.toJSONString()) %>"
6610 20 Nov 14 nicklas 342           size="13" multiple style="width: calc(100% - 10px);">
5909 14 Dec 11 nicklas 343         </select>
5909 14 Dec 11 nicklas 344       </td>
5909 14 Dec 11 nicklas 345       <td>
6320 11 Sep 13 nicklas 346         <input type="checkbox" id="read" checked name="read"><label for="read">Read</label><br>
6320 11 Sep 13 nicklas 347         <input type="checkbox" id="use" checked name="use"><label for="use">Use</label><br>
7214 19 Oct 16 nicklas 348         <input type="checkbox" id="restricted_write" name="restricted_write"><label for="restricted_write">Annotate</label><br>
6320 11 Sep 13 nicklas 349         <input type="checkbox" id="write" name="write"><label for="write">Write</label><br>
6320 11 Sep 13 nicklas 350         <input type="checkbox" id="delete" name="delete"><label for="delete">Delete</label><br>
6320 11 Sep 13 nicklas 351         <input type="checkbox" id="setOwner" name="set_owner"><label for="setOwner">Set owner</label><br>
6320 11 Sep 13 nicklas 352         <input type="checkbox" id="setPermission" name="set_permission"><label for="setPermission">Set permission</label><br>
5909 14 Dec 11 nicklas 353       </td>
5909 14 Dec 11 nicklas 354       <td>
5909 14 Dec 11 nicklas 355         <base:buttongroup vertical="true" style="width: 12em;">
5909 14 Dec 11 nicklas 356           <base:button 
6320 11 Sep 13 nicklas 357             id="btnAddUsers"
5909 14 Dec 11 nicklas 358             subclass="leftaligned"
5909 14 Dec 11 nicklas 359             title="Add&nbsp;users&hellip;" 
5909 14 Dec 11 nicklas 360             tooltip="Add users to this project"
5909 14 Dec 11 nicklas 361           />
5909 14 Dec 11 nicklas 362           <base:button 
6320 11 Sep 13 nicklas 363             id="btnAddGroups"
5909 14 Dec 11 nicklas 364             subclass="leftaligned"
5909 14 Dec 11 nicklas 365             title="Add&nbsp;groups&hellip;"  
5909 14 Dec 11 nicklas 366             tooltip="Add groups to this project"
5909 14 Dec 11 nicklas 367           />
5909 14 Dec 11 nicklas 368           <base:button 
6320 11 Sep 13 nicklas 369             id="btnRemoveMembers"
6320 11 Sep 13 nicklas 370             subclass="leftaligned auto-init"
6320 11 Sep 13 nicklas 371             data-auto-init="remove-link"
6320 11 Sep 13 nicklas 372             data-list-id="members"
5909 14 Dec 11 nicklas 373             title="Remove" 
5909 14 Dec 11 nicklas 374             tooltip="Remove the selected members from this project"
5909 14 Dec 11 nicklas 375           />
5909 14 Dec 11 nicklas 376         </base:buttongroup>
5909 14 Dec 11 nicklas 377       </td>
5909 14 Dec 11 nicklas 378     </tr>
602 17 May 05 nicklas 379     </table>
602 17 May 05 nicklas 380     </t:tab>
2928 16 Nov 06 martin 381     
5370 23 Jun 10 nicklas 382     <t:tab id="defaults" title="Default items"  helpid="project.edit.defaults">
5909 14 Dec 11 nicklas 383       <table class="fullform input100">
5650 01 Jun 11 nicklas 384       <tr>
5909 14 Dec 11 nicklas 385         <th>Raw data type</th>
5650 01 Jun 11 nicklas 386         <td>
5650 01 Jun 11 nicklas 387           <select name="rawdatatype">
5650 01 Jun 11 nicklas 388           <option value="">- none -</option>
5650 01 Jun 11 nicklas 389           <%
5650 01 Jun 11 nicklas 390           for (RawDataType rdt : RawDataTypes.getSortedRawDataTypes(new RawDataTypes.NameComparator()))
5650 01 Jun 11 nicklas 391           {
5650 01 Jun 11 nicklas 392             if (rdt.isStoredInDb())
5650 01 Jun 11 nicklas 393             {
5650 01 Jun 11 nicklas 394               String selected = rdt.equals(currentRawDataType) ? "selected" : "";
5650 01 Jun 11 nicklas 395               %>
5650 01 Jun 11 nicklas 396               <option value="<%=rdt.getId()%>" <%=selected%>><%=HTML.encodeTags(rdt.getName())%>
5650 01 Jun 11 nicklas 397               <%
5650 01 Jun 11 nicklas 398             }
5650 01 Jun 11 nicklas 399           }
5650 01 Jun 11 nicklas 400           %>
5650 01 Jun 11 nicklas 401           </select>
5650 01 Jun 11 nicklas 402         </td>
5909 14 Dec 11 nicklas 403         <td></td>
5650 01 Jun 11 nicklas 404       </tr>
5909 14 Dec 11 nicklas 405       <tr class="dynamic">
5909 14 Dec 11 nicklas 406         <th>Default items</th>
5909 14 Dec 11 nicklas 407         <td>
6320 11 Sep 13 nicklas 408           <select name="defaultItems" id="defaultItems"
6320 11 Sep 13 nicklas 409             class="auto-init"
6320 11 Sep 13 nicklas 410             data-auto-init="link-container"
6320 11 Sep 13 nicklas 411             data-initial-items="<%=HTML.encodeTags(jsonDefaultItems.toJSONString()) %>"
6610 20 Nov 14 nicklas 412             size="13" multiple style="width: calc(100% - 10px);">
5909 14 Dec 11 nicklas 413           </select>
5909 14 Dec 11 nicklas 414         </td>
6610 20 Nov 14 nicklas 415         <td style="width: 14em;">
5909 14 Dec 11 nicklas 416           <base:buttongroup vertical="true" style="width: 12em;">
5909 14 Dec 11 nicklas 417             <base:button 
6320 11 Sep 13 nicklas 418               subclass="leftaligned auto-init"
6320 11 Sep 13 nicklas 419               data-auto-init="add-link"
6320 11 Sep 13 nicklas 420               data-list-id="defaultItems"
6320 11 Sep 13 nicklas 421               data-item-type="PLATFORM"
5650 01 Jun 11 nicklas 422               title="Add&nbsp;platforms&hellip;" 
5650 01 Jun 11 nicklas 423               tooltip="Add default platforms to this project"
5909 14 Dec 11 nicklas 424             />
5909 14 Dec 11 nicklas 425             <base:button 
6320 11 Sep 13 nicklas 426               subclass="leftaligned auto-init"
6320 11 Sep 13 nicklas 427               data-auto-init="add-link"
6320 11 Sep 13 nicklas 428               data-list-id="defaultItems"
6320 11 Sep 13 nicklas 429               data-item-type="PLATFORMVARIANT"
5650 01 Jun 11 nicklas 430               title="Add&nbsp;variants&hellip;" 
5650 01 Jun 11 nicklas 431               tooltip="Add default platform variants to this project"
5909 14 Dec 11 nicklas 432             />
5909 14 Dec 11 nicklas 433             <base:button 
6320 11 Sep 13 nicklas 434               subclass="leftaligned auto-init"
6320 11 Sep 13 nicklas 435               data-auto-init="add-link"
6320 11 Sep 13 nicklas 436               data-list-id="defaultItems"
6320 11 Sep 13 nicklas 437               data-item-type="PROTOCOL"
5650 01 Jun 11 nicklas 438               title="Add&nbsp;protocols&hellip;" 
5650 01 Jun 11 nicklas 439               tooltip="Add default protocols to this project"
5909 14 Dec 11 nicklas 440             />
5909 14 Dec 11 nicklas 441             <base:button 
6320 11 Sep 13 nicklas 442               subclass="leftaligned auto-init"
6320 11 Sep 13 nicklas 443               data-auto-init="add-link"
6320 11 Sep 13 nicklas 444               data-list-id="defaultItems"
6320 11 Sep 13 nicklas 445               data-item-type="HARDWARE"
5650 01 Jun 11 nicklas 446               title="Add&nbsp;hardware&hellip;"  
5650 01 Jun 11 nicklas 447               tooltip="Add default hardware to this project"
5909 14 Dec 11 nicklas 448             />
5909 14 Dec 11 nicklas 449             <base:button 
6320 11 Sep 13 nicklas 450               subclass="leftaligned auto-init"
6320 11 Sep 13 nicklas 451               data-auto-init="add-link"
6320 11 Sep 13 nicklas 452               data-list-id="defaultItems"
6320 11 Sep 13 nicklas 453               data-item-type="SOFTWARE" 
5650 01 Jun 11 nicklas 454               title="Add&nbsp;software&hellip;"  
5650 01 Jun 11 nicklas 455               tooltip="Add default software to this project"
5909 14 Dec 11 nicklas 456             />
5909 14 Dec 11 nicklas 457             <base:button 
6320 11 Sep 13 nicklas 458               subclass="leftaligned auto-init"
6320 11 Sep 13 nicklas 459               data-auto-init="add-link"
6320 11 Sep 13 nicklas 460               data-list-id="defaultItems"
6320 11 Sep 13 nicklas 461               data-item-type="ARRAYDESIGN"
5650 01 Jun 11 nicklas 462               title="Add&nbsp;array&nbsp;designs&hellip;"  
5650 01 Jun 11 nicklas 463               tooltip="Add default array designs to this project"
5909 14 Dec 11 nicklas 464             />
5909 14 Dec 11 nicklas 465             <base:button 
6320 11 Sep 13 nicklas 466               subclass="leftaligned auto-init"
6320 11 Sep 13 nicklas 467               data-auto-init="remove-link"
6320 11 Sep 13 nicklas 468               data-list-id="defaultItems"
5650 01 Jun 11 nicklas 469               title="Remove" 
5650 01 Jun 11 nicklas 470               tooltip="Remove the selected items from this project"
5909 14 Dec 11 nicklas 471             />
5909 14 Dec 11 nicklas 472           </base:buttongroup>
5909 14 Dec 11 nicklas 473         </td>
5909 14 Dec 11 nicklas 474       </tr>
2928 16 Nov 06 martin 475       </table>
2928 16 Nov 06 martin 476     </t:tab>
7199 17 Oct 16 nicklas 477     
7199 17 Oct 16 nicklas 478     <t:tab id="annotations" title="Annotations" helpid="annotations.edit">
7199 17 Oct 16 nicklas 479       <jsp:include page="../../common/annotations/annotate_frameset.jsp">
7199 17 Oct 16 nicklas 480         <jsp:param name="item_type" value="<%=itemType.name()%>" />
7199 17 Oct 16 nicklas 481         <jsp:param name="item_id" value="<%=itemId%>" />
7199 17 Oct 16 nicklas 482         <jsp:param name="ID" value="<%=ID%>" />
7199 17 Oct 16 nicklas 483       </jsp:include>
7199 17 Oct 16 nicklas 484     </t:tab>
7199 17 Oct 16 nicklas 485     
578 12 May 05 nicklas 486     </t:tabcontrol>
5909 14 Dec 11 nicklas 487     </form>
578 12 May 05 nicklas 488
5909 14 Dec 11 nicklas 489     <div class="legend">
5946 03 Feb 12 nicklas 490       <base:icon image="required.png" />= required information
5909 14 Dec 11 nicklas 491     </div>
5909 14 Dec 11 nicklas 492
5909 14 Dec 11 nicklas 493     <base:buttongroup subclass="dialogbuttons">
6320 11 Sep 13 nicklas 494       <base:button id="btnSave" title="Save" />
6320 11 Sep 13 nicklas 495       <base:button id="close" title="Cancel" />
5909 14 Dec 11 nicklas 496     </base:buttongroup>
578 12 May 05 nicklas 497   </base:body>
578 12 May 05 nicklas 498   </base:page>
578 12 May 05 nicklas 499   <%
578 12 May 05 nicklas 500 }
578 12 May 05 nicklas 501 finally
578 12 May 05 nicklas 502 {
578 12 May 05 nicklas 503   if (dc != null) dc.close();
578 12 May 05 nicklas 504 }
578 12 May 05 nicklas 505 %>