source: trunk/www/admin/itemsubtypes/edit_subtype.jsp @ 5645

Last change on this file since 5645 was 5645, checked in by Nicklas Nordborg, 11 years ago

References #1597: Subtypes of items

Added subtype functionality for sample list, view and edit dialog. Show the inversely related subtypes on the subtype view page.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 8.3 KB
Line 
1<%-- $Id: edit_subtype.jsp 5645 2011-05-27 07:48:13Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2011 Nicklas Nordborg
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 3
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 BASE. If not, see <http://www.gnu.org/licenses/>.
20  ------------------------------------------------------------------
21
22  @author Nicklas
23  @since 2.0
24--%>
25<%@ page pageEncoding="UTF-8" session="false"
26  import="net.sf.basedb.core.SessionControl"
27  import="net.sf.basedb.core.DbControl"
28  import="net.sf.basedb.core.Item"
29  import="net.sf.basedb.core.ItemContext"
30  import="net.sf.basedb.core.Permission"
31  import="net.sf.basedb.core.ItemSubtype"
32  import="net.sf.basedb.core.PermissionDeniedException"
33  import="net.sf.basedb.core.Metadata"
34  import="net.sf.basedb.clients.web.Base"
35  import="net.sf.basedb.clients.web.util.HTML"
36  import="net.sf.basedb.util.Values"
37  import="net.sf.basedb.core.plugin.GuiContext"
38  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
39  import="net.sf.basedb.clients.web.extensions.JspContext"
40  import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
41  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
42  import="java.util.Set"
43  import="java.util.List"
44%>
45<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
46<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
47<%
48final Item itemType = Item.ITEMSUBTYPE;
49final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
50final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
51final int itemId = cc.getId();
52final String ID = sc.getId();
53final float scale = Base.getScale(sc);
54final DbControl dc = sc.newDbControl();
55try
56{
57  String title = null;
58  ItemSubtype subtype = null;
59
60  if (itemId == 0)
61  {
62    title="Create item subtype";
63    cc.removeObject("item");
64  }
65  else
66  {
67    subtype = ItemSubtype.getById(dc, itemId);
68    cc.setObject("item", subtype);
69    title = "Edit item subtype -- " + HTML.encodeTags(subtype.getName());
70    subtype.checkPermission(Permission.WRITE);
71  }
72 
73  Set<Item> subtypableItems = Metadata.getSubtypableItems();
74  final String clazz = "class=\"text\"";
75  final String requiredClazz = "class=\"text required\"";
76  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), subtype);
77  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
78  %>
79  <base:page type="popup" title="<%=title%>">
80  <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
81    <ext:scripts context="<%=jspContext%>" />
82    <ext:stylesheets context="<%=jspContext%>" />
83    <script language="JavaScript">
84    // Validate the "Item subtype" tab
85    function validateItemSubtype()
86    {
87      var frm = document.forms['subtype'];
88      if (Main.trimString(frm.name.value) == '')
89      {
90        alert("You must enter a name");
91        frm.name.focus();
92        return false;
93      }
94      return true;
95    }
96
97    // Submit the form
98    function saveSettings()
99    {
100      var frm = document.forms['subtype'];
101      if (TabControl.validateActiveTab('settings'))
102      {
103        frm.submit();
104      }
105    }
106   
107    function init()
108    {
109      <%
110      if (subtype == null)
111      {
112        %>
113        var frm = document.forms['subtype'];
114        frm.name.focus();
115        frm.name.select();
116        <%
117      }
118      %>
119      mainItemOnChange();
120    }
121   
122    var related = new Array();
123    var nameToValue = new Array();
124    <%
125    for (Item item : subtypableItems)
126    {
127      String tmp = "";
128      for (Item related : ItemSubtype.getRelatedItems(item))
129      {
130        tmp += related.name() + ":";
131      }
132      %>
133      related['<%=item.name()%>'] = '<%=tmp%>';
134      nameToValue['<%=item.name()%>'] = <%=item.getValue()%>;
135      <%
136    }
137    %>
138   
139    function mainItemOnChange()
140    {
141      var frm = document.forms['subtype'];
142      <%
143      if (subtype != null)
144      {
145        %>
146        var mainType = '<%=subtype.getMainItemType().name()%>';
147        <%
148      }
149      else
150      {
151        %>
152        var mainType = frm.itemType[frm.itemType.selectedIndex].value;
153        <%
154      }
155      for (Item item : subtypableItems)
156      {
157        %>
158        Main.showHide('section.<%=item.name()%>', related[mainType].indexOf('<%=item.name()%>') >= 0)
159        <%
160      }
161      %>
162      Main.showHide('section.none', related[mainType] == '')
163    }
164   
165    var lastList;
166    function relatedItemOnSelect(itemType)
167    {
168      var frm = document.forms['subtype'];
169      lastList = frm['related.'+itemType];
170      var url = 'index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&title=Select+related+subtype&callback=setRelatedCallback';
171      url += '&resetTemporary=1&tmpfilter:INT:itemType=' + nameToValue[itemType];
172      if (lastList.length > 1)
173      {
174        var id = Math.abs(parseInt(lastList[1].value));       
175        url += '&item_id='+id;
176      }
177      Main.openPopup(url, 'SelectReleatedSubtype', 1000, 700);
178    }
179    function setRelatedCallback(id, name)
180    {
181      var frm = document.forms['subtype'];
182      var list = lastList;
183      if (list.length < 2 || list[1].value == '0') // >
184      {
185        Forms.addListOption(list, 1, new Option());
186      }
187      list[1].value = id;
188      list[1].text = name;
189      list.selectedIndex = 1;
190    }
191    </script>
192  </base:head>
193  <base:body onload="init()">
194    <p>
195    <form action="index.jsp?ID=<%=ID%>" method="post" name="subtype" onsubmit="return false;">
196    <input type="hidden" name="cmd" value="UpdateItem">
197
198    <h3 class="docked"><%=title%> <base:help tabcontrol="settings" /></h3>
199    <t:tabcontrol id="settings" contentstyle="<%="height: "+(int)(scale*320)+"px;"%>" 
200      position="bottom" remember="<%=subtype != null%>"
201      extensions="<%=invoker%>">
202    <t:tab id="info" title="Item subtype" validate="validateItemSubtype()" helpid="itemsubtype.edit">
203      <table class="form" cellspacing=0>
204      <tr>
205        <td class="prompt">Name</td>
206        <td><input <%=requiredClazz%> type="text" name="name" 
207          value="<%=HTML.encodeTags(subtype == null ? Values.getString(cc.getPropertyValue("name"), "New item subtype") : subtype.getName())%>" 
208          size="40" maxlength="<%=ItemSubtype.MAX_NAME_LENGTH%>"></td>
209      </tr>
210      <tr>
211        <td class="prompt">Main item type</td>
212        <td>
213          <%
214          if (subtype == null)
215          {
216            %>
217            <select name="itemType" class="required unchangeable selectionlist" onchange="mainItemOnChange()">
218            <%
219            int itemCode = Values.getInt(cc.getPropertyValue("itemType"), -1);
220            for (Item item : subtypableItems)
221            {
222              String selected = itemCode == item.getValue() ? "selected" : "";
223              %>
224              <option value="<%=item.name()%>" <%=selected%>><%=item.toString() %>
225              <%
226            }
227            %>
228            </select>
229            <%
230          }
231          else
232          {
233            %>
234            <%=subtype.getMainItemType() %>
235            <%
236          }
237          %>
238        </td>
239      </tr>
240      <tr valign=top>
241        <td class="prompt">Description</td>
242        <td nowrap>
243          <textarea <%=clazz%> rows="4" cols="40" name="description" wrap="virtual"
244            ><%=HTML.encodeTags(subtype == null ? cc.getPropertyValue("description") : subtype.getDescription())%></textarea>
245          <a href="javascript:Main.zoom('Description', 'subtype', 'description')"
246            title="Edit in larger window"><base:icon image="zoom.gif" /></a>
247        </td>
248      </tr>
249      <tr>
250        <td class="prompt">Related subtypes</td>
251        <td><div id="section.none" style="display: none;"><i>- none -</i></div></td>
252      </tr>
253      <%
254      for (Item item : subtypableItems)
255      {
256        %>
257        <tr id="section.<%=item.name()%>" style="display: none;">
258          <td class="subprompt"><%=item%></td>
259          <td>
260            <base:select 
261              id="<%="related."+item.name()%>" 
262              current="<%=subtype == null ? null : subtype.getRelatedSubtype(item) %>"
263              onselect="<%="relatedItemOnSelect('" + item.name() + "')"%>"
264              newitem="<%=subtype == null%>"
265              clazz="selectionlist"
266            />
267          </td>
268        </tr>
269        <%
270      }
271      %>
272      </table>
273      <div align=right>&nbsp;<i><base:icon image="required.gif" /> = required information</i></div>
274    </t:tab>
275    </t:tabcontrol>
276
277    <table align="center">
278    <tr>
279      <td width="50%"><base:button onclick="saveSettings()" title="Save" /></td>
280      <td width="50%"><base:button onclick="window.close()" title="Cancel" /></td>
281    </tr>
282    </table>
283    </form>
284  </base:body>
285  </base:page>
286  <%
287}
288finally
289{
290  if (dc != null) dc.close();
291}
292%>
Note: See TracBrowser for help on using the repository browser.