Changeset 6753


Ignore:
Timestamp:
Feb 20, 2015, 11:25:22 AM (7 years ago)
Author:
Nicklas Nordborg
Message:

References #1325: Lists of items (similar funcion as biomaterial lists)

Adding subtype and raw data type to list page, view page and edit dialog. If this is set the information is used to filter the "Add members" list.

Location:
trunk/www/views/itemlists
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/www/views/itemlists/edit_list.jsp

    r6750 r6753  
    2929  import="net.sf.basedb.core.Permission"
    3030  import="net.sf.basedb.core.ItemList"
     31  import="net.sf.basedb.core.ItemSubtype"
     32  import="net.sf.basedb.core.ItemQuery"
    3133  import="net.sf.basedb.core.Metadata"
     34  import="net.sf.basedb.core.RawDataType"
     35  import="net.sf.basedb.core.RawDataTypes"
    3236  import="net.sf.basedb.core.PermissionDeniedException"
    3337  import="net.sf.basedb.clients.web.Base"
     
    3943  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
    4044  import="net.sf.basedb.util.Values"
     45  import="org.json.simple.JSONObject"
     46  import="org.json.simple.JSONArray"
    4147%>
    4248<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
     
    5965  String formId = addItems ? Values.getStringOrNull(request.getParameter("formId")) : null;
    6066  String subContext = addItems ? Values.getStringOrNull(request.getParameter("subContext")) : null;
     67
     68  ItemQuery<ItemSubtype> subtypesQuery = null;
     69  boolean readCurrentSubtype = true;
     70  ItemSubtype currentSubtype = null;
    6171 
     72  RawDataType currentRawDataType = null;
     73
    6274  if (itemId == 0)
    6375  {
    6476    title = "Create item list";
    6577    cc.removeObject("item");
     78    subtypesQuery = Base.getSubtypesQuery(null);
    6679   
    6780    if (memberType == null)
     
    7588    list.checkPermission(Permission.WRITE);
    7689    memberType = list.getMemberType();
     90    subtypesQuery = Base.getSubtypesQuery(memberType);
    7791    cc.setObject("item", list);
    7892    title = "Edit item list -- " + HTML.encodeTags(list.getName());
     93    currentRawDataType = list.getRawDataType();
     94    try
     95    {
     96      currentSubtype = list.getItemSubtype();
     97    }
     98    catch (PermissionDeniedException ex)
     99    {
     100      readCurrentSubtype = false;
     101    }
     102  }
     103 
     104  JSONArray jsonSubtypes = new JSONArray();
     105  if (subtypesQuery != null)
     106  {
     107    for (ItemSubtype subtype : subtypesQuery.list(dc))
     108    {
     109      JSONObject jsonSubtype = new JSONObject();
     110      jsonSubtype.put("id", subtype.getId());
     111      jsonSubtype.put("name", subtype.getName());
     112      jsonSubtype.put("description", subtype.getDescription());
     113      jsonSubtype.put("itemType", subtype.getMainItemType().name());
     114      if (currentSubtype == subtype)
     115      {
     116        jsonSubtype.put("current", 1);
     117      }
     118      jsonSubtypes.add(jsonSubtype);
     119    }
    79120  }
    80121 
     
    99140    }
    100141    %>
     142   
     143    <div id="page-data" class="datacontainer"
     144      data-subtypes="<%=HTML.encodeTags(jsonSubtypes.toJSONString())%>"
     145    ></div>
    101146
    102147    <t:tabcontrol id="settings"
     
    117162        <th>Member type</th>
    118163        <td>
    119           <select name="memberType" <%=list != null || (addItems && memberType != null) ? "disabled" : "" %> style="width: 15em;" class="unchangeable">
     164          <select name="memberType" id="memberType" <%=list != null || (addItems && memberType != null) ? "disabled" : "" %> class="selectionlist unchangeable">
    120165          <%
    121166          for (Item mt : Metadata.getListableItems())
     
    129174        </td>
    130175        <td></td>
     176      </tr>
     177      <tr id="subtypeRow">
     178        <th>Subtype</th>
     179        <td>
     180          <select name="subtype_id" id="subtype_id"
     181            <%=!readCurrentSubtype ? "disabled readonly class=\"disabled selectionlist\"" : "class=\"selectionlist\""%>>
     182          <%
     183          if (!readCurrentSubtype)
     184          {
     185            %>
     186            <option value="-1">- denied -
     187            <%
     188          }
     189          %>
     190          </select>
     191        </td>
     192        <td></td>
     193      </tr>
     194      <tr id="rawDataTypeRow">
     195        <th>Raw data type</th>
     196        <td>
     197          <select name="rawdatatype" id="rawdatatype" class="selectionlist">
     198          <option value="">- any -
     199          <%
     200          for (RawDataType rdt : RawDataTypes.getRawDataTypes())
     201          {
     202            String selected = rdt.equals(currentRawDataType) ? "selected" : "";
     203            %>
     204            <option value="<%=rdt.getId()%>" <%=selected%>><%=HTML.encodeTags(rdt.getName())%>
     205            <%
     206          }
     207          %>
     208          </select>
     209        </td>
    131210      </tr>
    132211      <tr>
  • trunk/www/views/itemlists/index.jsp

    r6750 r6753  
    2929  import="net.sf.basedb.core.Include"
    3030  import="net.sf.basedb.core.ItemList"
     31  import="net.sf.basedb.core.RawDataTypes"
     32  import="net.sf.basedb.core.ItemSubtype"
    3133  import="net.sf.basedb.core.ItemQuery"
    3234  import="net.sf.basedb.core.Permission"
     
    162164      list.setExternalId(Values.getStringOrNull(request.getParameter("external_id")));
    163165      list.setDescription(Values.getStringOrNull(request.getParameter("description")));
     166      if (list.getMemberType() == Item.RAWBIOASSAY)
     167      {
     168        list.setRawDataType(RawDataTypes.getRawDataType(request.getParameter("rawdatatype")));
     169      }
     170      else
     171      {
     172        int subtypeId = Values.getInt(request.getParameter("subtype_id"), -1);
     173        ItemSubtype subtype = null;
     174        if (subtypeId >= 0) // < 0 = denied or unchanged
     175        {
     176          if (subtypeId > 0) subtype = ItemSubtype.getById(dc, subtypeId);
     177          list.setItemSubtype(subtype);
     178        }
     179      }
    164180
    165181      // Annotations tab
  • trunk/www/views/itemlists/list_lists.jsp

    r6742 r6753  
    2222  @author Nicklas
    2323--%>
    24 <%@page import="net.sf.basedb.core.Metadata"%>
    2524<%@ page pageEncoding="UTF-8" session="false"
    2625  import="net.sf.basedb.core.SessionControl"
     
    3433  import="net.sf.basedb.core.ItemResultList"
    3534  import="net.sf.basedb.core.ItemList"
     35  import="net.sf.basedb.core.ItemSubtype"
    3636  import="net.sf.basedb.core.ItemContext"
    3737  import="net.sf.basedb.core.Nameable"
     38  import="net.sf.basedb.core.RawDataTypes"
     39  import="net.sf.basedb.core.RawDataType"
     40  import="net.sf.basedb.core.Metadata"
    3841  import="net.sf.basedb.core.Permission"
     42  import="net.sf.basedb.core.Type"
    3943  import="net.sf.basedb.core.PluginDefinition"
    4044  import="net.sf.basedb.core.plugin.GuiContext"
     
    4246  import="net.sf.basedb.core.query.Hql"
    4347  import="net.sf.basedb.core.query.Orders"
     48  import="net.sf.basedb.core.query.Expressions"
     49  import="net.sf.basedb.core.query.Restrictions"
    4450  import="net.sf.basedb.core.snapshot.AnnotationLoaderUtil"
    4551  import="net.sf.basedb.core.snapshot.AnnotationTypeFilter"
     
    6672  import="java.util.Map"
    6773  import="java.util.ArrayList"
     74  import="java.util.Set"
     75  import="java.util.HashSet"
    6876%>
    6977<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
     
    7482  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
    7583  private static Enumeration<String, String> memberTypes = new Enumeration<String, String>();
     84  private static Set<Integer> memberTypeIds = new HashSet<Integer>();
     85 
    7686  static
    7787  {
    7888    for (Item itemType : Metadata.getListableItems())
    7989    {
     90      memberTypeIds.add(itemType.getValue());
    8091      memberTypes.add(Integer.toString(itemType.getValue()), itemType.toString());
    8192    }
    8293  }
    83 
    8494%>
    8595<%
     
    97107try
    98108{
     109 
     110  final ItemQuery<ItemSubtype> subtypesQuery = Base.getSubtypesQuery(null);
     111  subtypesQuery.restrict(
     112      Restrictions.in(
     113        Hql.property("itemType"),
     114        Expressions.parameter("memberTypes")
     115      ));
     116  subtypesQuery.setParameter("memberTypes", memberTypeIds, Type.INT);
     117  Enumeration<String, String> subtypesEnum = new Enumeration<String, String>();
     118  subtypesEnum.add("", "- none -");
     119  for (ItemSubtype st : subtypesQuery.list(dc))
     120  {
     121    subtypesEnum.add(Integer.toString(st.getId()), HTML.encodeTags(st.getName()) + " <span class=\"itemsubtype\">(" + st.getMainItemType() + ")</span>");
     122  }
     123 
    99124  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
    100125  final ItemQuery<AnnotationType> annotationTypeQuery = Base.getAnnotationTypesQuery(itemType);
     
    175200        exportable="true"
    176201        enumeration="<%=memberTypes%>"
     202      />
     203      <tbl:columndef
     204        id="itemSubtype"
     205        property="itemSubtype"
     206        sortproperty="itemSubtype.name"
     207        exportproperty="itemSubtype.name:string"
     208        datatype="int"
     209        enumeration="<%=subtypesEnum%>"
     210        title="Subtype"
     211        sortable="true"
     212        filterable="true"
     213        exportable="true"
     214      />
     215      <%
     216      Enumeration<String, String> rawEnumeration = new Enumeration<String, String>();
     217      rawEnumeration.add("", "- none ");
     218      for (RawDataType rdt : RawDataTypes.getRawDataTypes())
     219      {
     220        rawEnumeration.add(rdt.getId(), HTML.encodeTags(rdt.getName()));
     221      }
     222      rawEnumeration.sortValues();
     223      %>
     224      <tbl:columndef
     225        id="rawDataType"
     226        property="rawDataType"
     227        datatype="string"
     228        enumeration="<%=rawEnumeration%>"
     229        title="Raw data type"
     230        sortable="true"
     231        filterable="true"
     232        exportable="true"
    177233      />
    178234      <tbl:columndef
     
    476532                <tbl:cell column="externalId"><%=HTML.encodeTags(item.getExternalId())%></tbl:cell>
    477533                <tbl:cell column="memberType"><%=item.getMemberType()%></tbl:cell>
     534                <tbl:cell column="itemSubtype"><base:propertyvalue
     535                    item="<%=item%>"
     536                    property="itemSubtype"
     537                    nulltext=""
     538                    enableEditLink="<%=mode.hasEditLink()%>"
     539                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
     540                  /></tbl:cell>
     541                <tbl:cell column="rawDataType"><%=HTML.encodeTags(item.getRawDataType() != null ? item.getRawDataType().getName() : "")%></tbl:cell>
    478542                <tbl:cell column="owner"
    479543                  ><base:propertyvalue
  • trunk/www/views/itemlists/lists.js

    r6750 r6753  
    6060        }
    6161      }
    62 
     62     
     63      // Item subtype
     64      subtypes = Data.json('page-data', 'subtypes');
     65      Events.addEventHandler('memberType', 'change', lists.memberTypeOnChange);
     66      lists.memberTypeOnChange();
    6367    }
    6468    else if (pageId == 'view-page')
     
    157161  }
    158162 
     163  lists.memberTypeOnChange = function()
     164  {
     165    var frm = document.forms['list'];
     166    var memberType = frm.memberType.value;
     167   
     168    if (memberType == 'RAWBIOASSAY')
     169    {
     170      Doc.show('rawDataTypeRow');
     171      Doc.hide('subtypeRow');
     172    }
     173    else
     174    {
     175      Doc.hide('rawDataTypeRow');
     176      Doc.show('subtypeRow');
     177     
     178      frm.subtype_id.length = 0;
     179      frm.subtype_id[0] = new Option('- any -', 0);
     180      for (var i = 0; i < subtypes.length; i++)
     181      {
     182        var subtype = subtypes[i];
     183        if (subtype.itemType == memberType)
     184        {
     185          var opt = new Option(subtype.name, subtype.id, false, subtype.current);
     186          if (subtype.description) opt.title = subtype.description;
     187          frm.subtype_id[frm.subtype_id.length] = opt;
     188        }
     189      }
     190    }
     191  }
    159192 
    160193  return lists;
  • trunk/www/views/itemlists/members/add_members.js

    r6744 r6753  
    4141    if (controller)
    4242    {
     43      var subtypeId = Data.int('page-data', 'subtype-id');
     44      var rawDataTypeId = Data.get('page-data', 'rawdatatype-id');
    4345      var url = App.getRoot() + controller.url + '?ID='+App.getSessionId();
    44       url += '&mode=selectmultiplenobuttons';
     46      url += '&cmd=UpdateContext&mode=selectmultiplenobuttons&resetTemporary=1';
     47      if (subtypeId)
     48      {
     49        url += '&tmpfilter:INT:itemSubtype='+subtypeId;
     50      }
     51      else if (rawDataTypeId)
     52      {
     53        url += '&tmpfilter:STRING:rawDataType='+encodeURIComponent(rawDataTypeId);
     54      }
    4555      frames['members'].location.replace(url);
    4656    }
    47 
    4857  }
    4958 
     
    6271    frm.submit();
    6372  }
    64 
    6573 
    6674  addMembers.addCurrentPage = function()
  • trunk/www/views/itemlists/members/add_members_frameset.jsp

    r6744 r6753  
    2828  import="net.sf.basedb.core.ItemList"
    2929  import="net.sf.basedb.core.Item"
     30  import="net.sf.basedb.core.RawDataType"
     31  import="net.sf.basedb.core.ItemSubtype"
    3032  import="net.sf.basedb.clients.web.Base"
    3133  import="net.sf.basedb.util.Values"
     
    4345  ItemList list = ItemList.getById(dc, listId);
    4446  Item memberType = list.getMemberType();
     47  ItemSubtype subtype = list.getItemSubtype();
     48  RawDataType rawDataType = list.getRawDataType();
     49 
    4550  %>
    4651  <base:page type="popup" title="Select members">
     
    5156      <div id="page-data" class="datacontainer"
    5257        data-member-type="<%=memberType.name()%>"
     58        data-subtype-id="<%=subtype != null ? subtype.getId() : "" %>"
     59        data-rawdatatype-id="<%=rawDataType != null ? rawDataType.getId() : "" %>"
    5360      ></div>
    5461     
  • trunk/www/views/itemlists/view_list.jsp

    r6743 r6753  
    3030  import="net.sf.basedb.core.Item"
    3131  import="net.sf.basedb.core.ItemContext"
     32  import="net.sf.basedb.core.RawDataType"
    3233  import="net.sf.basedb.core.ItemQuery"
    3334  import="net.sf.basedb.core.ItemResultList"
     
    238239      <tr>
    239240        <th>Member type</th>
    240         <td><%=list.getMemberType()%></td>
     241        <td><%=list.getMemberType()%>
     242          <%
     243          if (list.getMemberType() != Item.RAWBIOASSAY)
     244          {
     245            %>
     246            (<base:propertyvalue item="<%=list%>" property="itemSubtype" nulltext="<i>any</i>"/>)
     247           
     248            <%
     249          }
     250          else
     251          {
     252            RawDataType rdt = list.getRawDataType();
     253            %>
     254            (<%=rdt != null ? HTML.encodeTags(rdt.getName()) : "<i>any</i>"%>)
     255            <%
     256          }
     257          %>
     258        </td>
    241259      </tr>
    242260      <tr>
Note: See TracChangeset for help on using the changeset viewer.