source: trunk/www/admin/extravaluetypes/edit_extravaluetype.jsp @ 5908

Last change on this file since 5908 was 5908, checked in by Nicklas Nordborg, 10 years ago

References #1655: GUI improvements

  • File manager dialogs
  • File server edit dialog
  • Changed zoom.gif to png
  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 11.1 KB
Line 
1<%-- $Id: edit_extravaluetype.jsp 5908 2011-12-13 13:48:46Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006, 2007 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
23  @author Nicklas
24  @version 2.0
25--%>
26<%@ page pageEncoding="UTF-8" session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.DbControl"
29  import="net.sf.basedb.core.Item"
30  import="net.sf.basedb.core.Type"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.Permission"
33  import="net.sf.basedb.core.ExtraValueType"
34  import="net.sf.basedb.core.Formula"
35  import="net.sf.basedb.core.Coloring"
36  import="net.sf.basedb.core.PermissionDeniedException"
37  import="net.sf.basedb.clients.web.Base"
38  import="net.sf.basedb.clients.web.util.HTML"
39  import="net.sf.basedb.util.Values"
40  import="net.sf.basedb.core.plugin.GuiContext"
41  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
42  import="net.sf.basedb.clients.web.extensions.JspContext"
43  import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
44  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
45%>
46<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
47<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
48<%
49final Item itemType = Item.EXTRAVALUETYPE;
50final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
51final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
52final int itemId = cc.getId();
53final String ID = sc.getId();
54final float scale = Base.getScale(sc);
55final DbControl dc = sc.newDbControl();
56try
57{
58  String title = null;
59  ExtraValueType extraValueType = null;
60  Coloring coloring = null;
61  Formula.AverageMethod currentAverageMethod = null;
62
63  if (itemId == 0)
64  {
65    title = "Create extra value type";
66    cc.removeObject("item");
67    currentAverageMethod = Formula.AverageMethod.fromValue(Values.getInt(cc.getPropertyValue("averageMethod"),
68      Formula.AverageMethod.ARITHMETIC_MEAN.getValue()));
69    coloring = new Coloring();
70    coloring.setUsingColors(Values.getBoolean(cc.getPropertyValue("coloring.usingColors")));
71    coloring.setLogarithmic(Values.getBoolean(cc.getPropertyValue("coloring.logarithmic")));
72    coloring.setMinValue(Values.getFloat(cc.getPropertyValue("coloring.minValue"), null));
73    coloring.setMidValue(Values.getFloat(cc.getPropertyValue("coloring.midValue"), null));
74    coloring.setMaxValue(Values.getFloat(cc.getPropertyValue("coloring.maxValue"), null));
75  }
76  else
77  {
78    extraValueType = ExtraValueType.getById(dc, itemId);
79    currentAverageMethod = extraValueType.getAverageMethod();
80    coloring = extraValueType.getColoring();
81    cc.setObject("item", extraValueType);
82    title = "Edit extra value type -- " + HTML.encodeTags(extraValueType.getName());
83  }
84  if (extraValueType != null) extraValueType.checkPermission(Permission.WRITE);
85 
86  final String clazz = "class=\"text\"";
87  final String requiredClazz = "class=\"text required\"";
88  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), extraValueType);
89  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
90  %>
91  <base:page type="popup" title="<%=title%>">
92  <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
93    <ext:scripts context="<%=jspContext%>" />
94    <ext:stylesheets context="<%=jspContext%>" />
95    <script language="JavaScript">
96    // Validate the "ExtraValueType" tab
97    function validateExtraValueType()
98    {
99      var frm = document.forms['extraValueType'];
100      if (Main.trimString(frm.name.value) == '')
101      {
102        alert("You must enter a name");
103        frm.name.focus();
104        return false;
105      }
106      if (Main.trimString(frm.external_id.value) == '')
107      {
108        alert("You must enter an external ID");
109        frm.external_id.focus();
110        return false;
111      }
112      if (frm.use_colors.checked && !frm.use_colors.disabled)
113      {
114        var minValue = parseFloat(frm.min_value.value);
115        var midValue = parseFloat(frm.mid_value.value);
116        var maxValue = parseFloat(frm.max_value.value);
117        if (isNaN(minValue))
118        {
119          alert('No min value has been specified');
120          frm.min_value.focus();
121          return false;
122        }
123        if (isNaN(midValue))
124        {
125          alert('No mid value has been specified');
126          frm.mid_value.focus();
127          return false;
128        }
129        if (isNaN(maxValue))
130        {
131          alert('No max value has been specified');
132          frm.max_value.focus();
133          return false;
134        }
135        if (minValue > midValue)
136        {
137          alert('The min value (' + minValue + ') can\'t be greater than the mid value (' + midValue + ')');
138          return false;
139        }
140        if (midValue > maxValue)
141        {
142          alert('The mid (' + midValue + ') value can\'t be greater than the max value (' + maxValue + ')');
143          return false;
144        }
145      }
146      return true;
147    }
148
149    // Submit the form
150    function saveSettings()
151    {
152      var frm = document.forms['extraValueType'];
153      if (TabControl.validateActiveTab('settings'))
154      {
155        frm.submit();
156      }
157    }
158   
159    function init()
160    {
161      <%
162      if (extraValueType == null)
163      {
164        %>
165        var frm = document.forms['extraValueType'];
166        frm.name.focus();
167        frm.name.select();
168        <%
169      }
170      %>
171      useColorsOnClick();
172    }
173   
174    function useColorsOnClick()
175    {
176      var frm = document.forms['extraValueType'];
177      var useColors = frm.use_colors.checked && !frm.use_colors.disabled;
178      frm.min_value.disabled = !useColors;
179      frm.mid_value.disabled = !useColors;
180      frm.max_value.disabled = !useColors;
181      frm.logarithmic.disabled = !useColors;
182      if (useColors)
183      {
184        Main.addClass(frm.min_value, 'required');
185        Main.addClass(frm.mid_value, 'required');
186        Main.addClass(frm.max_value, 'required');
187      }
188      else
189      {
190        Main.removeClass(frm.min_value, 'required');
191        Main.removeClass(frm.mid_value, 'required');
192        Main.removeClass(frm.max_value, 'required');
193      }
194    }
195   
196    function valueTypeOnChange()
197    {
198      var frm = document.forms['extraValueType'];
199      var valueType = frm.value_type[frm.value_type.selectedIndex].value;
200      var use = valueType != 'STRING';
201      frm.use_colors.disabled = !use;
202      useColorsOnClick();
203    }
204    </script>
205  </base:head>
206  <base:body onload="init()">
207    <p>
208    <form action="index.jsp?ID=<%=ID%>" method="post" name="extraValueType" onsubmit="return false;">
209    <input type="hidden" name="cmd" value="UpdateItem">
210
211    <h3 class="docked"><%=title%> <base:help tabcontrol="settings" /></h3>
212    <t:tabcontrol id="settings" contentstyle="<%="height: "+(int)(scale*280)+"px;"%>" 
213      position="bottom" remember="<%=extraValueType != null%>"
214      extensions="<%=invoker%>">
215    <t:tab id="info" title="Extra value type" validate="validateExtraValueType()" 
216      helpid="extravaluetype.edit">
217      <table class="form" cellspacing=0>
218      <tr>
219        <td class="prompt">Name</td>
220        <td><input <%=requiredClazz%> type="text" name="name" 
221          value="<%=HTML.encodeTags(extraValueType == null ? Values.getString(cc.getPropertyValue("name"), "New extra value type") : extraValueType.getName())%>" 
222          size="40" maxlength="<%=ExtraValueType.MAX_NAME_LENGTH%>"></td>
223      </tr>
224      <tr>
225        <td class="prompt">External ID</td>
226        <td><input <%=requiredClazz%> type="text" name="external_id" 
227          value="<%=HTML.encodeTags(extraValueType == null ? Values.getString(cc.getPropertyValue("externalId")) : extraValueType.getExternalId())%>" 
228          size="40" maxlength="<%=ExtraValueType.MAX_EXTERNAL_ID_LENGTH%>"></td>
229      </tr>
230      <tr>
231        <td class="prompt">Value type</td>
232        <td>
233          <%
234          if (extraValueType != null)
235          {
236            %>
237            <%=extraValueType.getValueType()%>
238            <%
239          }
240          else
241          {
242            int currentValueType = Values.getInt(cc.getPropertyValue("valueType"));
243            %>
244            <select name="value_type" class="required" onchange="valueTypeOnChange()">
245            <option value="<%=Type.INT.name()%>" 
246              <%=Type.INT.getValue() == currentValueType ? "selected" : "" %>><%=Type.INT%>
247            <option value="<%=Type.FLOAT.name()%>"
248              <%=Type.FLOAT.getValue() == currentValueType ? "selected" : "" %>><%=Type.FLOAT%>
249            <option value="<%=Type.STRING.name()%>"
250              <%=Type.STRING.getValue() == currentValueType ? "selected" : "" %>><%=Type.STRING%>
251            </select>
252            (can't be changed later)
253            <%
254          }
255          %>
256        </td>
257      </tr>
258      <tr>
259        <td class="prompt">Avg. method</td>
260        <td>
261          <select name="averageMethod" class="required">
262          <%
263          for (Formula.AverageMethod method : Formula.AverageMethod.values())
264          {
265            String selected = method == currentAverageMethod ? "selected" : "";
266            %>
267            <option value="<%=method.name()%>" <%=selected%>><%=HTML.encodeTags(method.toString())%>
268            <%
269          }
270          %>
271          </select>
272        </td>
273      </tr>
274      <%
275      if (extraValueType == null || extraValueType.getValueType().isNumerical())
276      {
277        %>
278        <tr>
279          <td class="prompt">Use colors</td>
280          <td>
281            <input type="checkbox" name="use_colors" value="1" 
282              <%=coloring.isUsingColors() ? "checked" : "" %>
283              onclick="useColorsOnClick()">
284           
285            <b>Min value</b>
286            <input type="text" class="text" name="min_value"
287               value="<%=Values.formatNumber(coloring.getMinValue(), -1)%>"
288               size="6" maxlength="6"
289               onkeypress="return Numbers.numberOnly(event)"
290               >
291            <b>Mid value</b>
292            <input type="text" class="text" name="mid_value"
293               value="<%=Values.formatNumber(coloring.getMidValue(), -1)%>"
294               size="6" maxlength="6"
295               onkeypress="return Numbers.numberOnly(event)"
296               >
297            <b>Max value</b>
298            <input type="text" class="text" name="max_value"
299               value="<%=Values.formatNumber(coloring.getMaxValue(), -1)%>"
300               size="6" maxlength="6"
301               onkeypress="return Numbers.numberOnly(event)"
302               >
303               <br>
304            <input type="checkbox" name="logarithmic" value="1" 
305              <%=coloring.isLogarithmic() ? "checked" : "" %>>
306            <b>Logarithmic</b>
307          </td>
308        </tr>
309        <%
310      }
311      %>
312      <tr >
313        <td class="prompt">Description</td>
314        <td nowrap>
315          <textarea <%=clazz%> rows="4" cols="40" name="description" 
316            ><%=HTML.encodeTags(extraValueType == null ? cc.getPropertyValue("description") : extraValueType.getDescription())%></textarea>
317          <a href="javascript:Main.zoom('Description', 'extraValueType', 'description')"
318            title="Edit in larger window"><base:icon image="zoom.png" /></a>
319        </td>
320      </tr>
321      </table>
322      <div align=right>&nbsp;<i><base:icon image="required.gif" /> = required information</i></div>
323    </t:tab>
324    </t:tabcontrol>
325
326    <table align="center">
327    <tr>
328      <td width="50%"><base:button onclick="saveSettings()" title="Save" /></td>
329      <td width="50%"><base:button onclick="window.close()" title="Cancel" /></td>
330    </tr>
331    </table>
332    </form>
333  </base:body>
334  </base:page>
335  <%
336}
337finally
338{
339  if (dc != null) dc.close();
340}
341%>
Note: See TracBrowser for help on using the repository browser.