Changeset 6095


Ignore:
Timestamp:
Aug 30, 2012, 1:36:15 PM (11 years ago)
Author:
Nicklas Nordborg
Message:

References #1708: Allow more extracts to be associated with a derived bioassay

Added a filter when selecting extracts. Also fixed the raw bioassay edit dialog to do the same.

Location:
trunk/www/views
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/www/views/derivedbioassays/ajax.jsp

    r5750 r6095  
    3131  import="net.sf.basedb.core.BioMaterialEventSource"
    3232  import="net.sf.basedb.core.SpecialQuery"
     33  import="net.sf.basedb.core.ItemQuery"
     34  import="net.sf.basedb.core.Include"
     35  import="net.sf.basedb.core.Type"
    3336  import="net.sf.basedb.core.ArrayDesign"
    3437  import="net.sf.basedb.core.PermissionDeniedException"
     38  import="net.sf.basedb.core.query.Restrictions"
     39  import="net.sf.basedb.core.query.Expressions"
    3540  import="net.sf.basedb.core.query.Hql"
    3641  import="net.sf.basedb.core.query.Orders"
    3742  import="net.sf.basedb.clients.web.Base"
    3843  import="net.sf.basedb.util.Values"
     44  import="net.sf.basedb.util.biomaterial.ParentsTransformer"
    3945  import="net.sf.basedb.util.error.ThrowableUtil"
    4046  import="net.sf.basedb.clients.web.WebException"
     
    4349  import="org.json.simple.JSONArray"
    4450  import="java.util.Date"
     51  import="java.util.Arrays"
     52  import="java.util.List"
     53  import="java.util.Set"
     54  import="java.util.HashSet"
    4555%>
    4656<%
     
    121131    dc.close();
    122132  }
     133  else if ("GetAllExtractIds".equals(cmd))
     134  {
     135    dc = sc.newDbControl();
     136   
     137    Integer[] bioAssayIds = Values.getInt(request.getParameter("bioassay_ids").split(","));
     138
     139    // Load all extracts that are directly linked with the given physical bioassays
     140    ItemQuery<Extract> query = Extract.getQuery();
     141    query.include(Include.ALL);
     142    query.join(Hql.innerJoin("childCreationEvents", "cce"));
     143    query.join(Hql.innerJoin("cce", "event", "evt"));
     144    query.join(Hql.innerJoin("evt", "physicalBioAssay", "pba"));
     145    query.join(Hql.innerJoin("pba", "derivedBioAssays", "dba"));
     146    query.restrict(Restrictions.in(Hql.alias("dba"), Expressions.parameter("bioAssays")));
     147    query.setParameter("bioAssays", Arrays.asList(bioAssayIds), Type.INT);
     148    List<Extract> primaryExtracts = query.list(dc);
     149   
     150    // Use the ParentsTransformer to load all parent extracts as well
     151    Set<Extract> allExtracts = new HashSet<Extract>();
     152    new ParentsTransformer(dc, true, Extract.getQuery()).transform(primaryExtracts, allExtracts);
     153   
     154    JSONArray jsonExtracts = new JSONArray();
     155    for (Extract e : allExtracts)
     156    {
     157      jsonExtracts.add(e.getId());
     158    }
     159   
     160    json.put("allExtractIds", jsonExtracts);
     161    dc.commit();
     162  }
    123163  else
    124164  {
  • trunk/www/views/derivedbioassays/edit_bioassay.jsp

    r6094 r6095  
    341341     
    342342      var parents = new Array();
    343       if (frm.physicalBioassays && (!frm.isRoot || frm.isRoot[0].checked))
     343      if (frm.physicalBioAssays && (!frm.isRoot || frm.isRoot[0].checked))
    344344      {
    345345        var ids = Link.getListIds(frm.physicalBioAssays, 'P');
     
    469469    {
    470470      var frm = document.forms['bioAssay'];
     471     
     472      var relatedExtractIds = null;
     473      if (frm.physicalBioAssays && (!frm.isRoot || frm.isRoot[0].checked))
     474      {
     475        var ids = Link.getListIds(frm.physicalBioAssays, 'P');
     476        if (ids.length > 0)
     477        {
     478          var request = Ajax.getXmlHttpRequest();
     479          var url = '../physicalbioassays/ajax.jsp?ID=<%=ID%>&cmd=GetAllExtractIds';
     480          url += '&bioassay_ids=' + ids.join(',');
     481          request.open("GET", url, false);
     482          request.send(null);
     483                   
     484          var response = JSON.parse(request.responseText);
     485          if (response.status != 'ok')
     486          {
     487            alert(response.message);
     488            return null;
     489          }
     490          relatedExtractIds = response.allExtractIds;
     491        }
     492      }
     493      else if (frm.parents && (!frm.isRoot || frm.isRoot[1].checked))
     494      {
     495        var ids = Link.getListIds(frm.parents, 'D');
     496        if (ids.length > 0)
     497        {
     498          var request = Ajax.getXmlHttpRequest();
     499          var url = 'ajax.jsp?ID=<%=ID%>&cmd=GetAllExtractIds';
     500          url += '&bioassay_ids=' + ids.join(',');
     501          request.open("GET", url, false);
     502          request.send(null);
     503                   
     504          var response = JSON.parse(request.responseText);
     505          if (response.status != 'ok')
     506          {
     507            alert(response.message);
     508            return null;
     509          }
     510          relatedExtractIds = response.allExtractIds;
     511        }
     512      }
     513
    471514      var url = '../../biomaterials/extracts/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone';
    472515      url += '&callback=setExtractCallback&resetTemporary=1';
     516      if (relatedExtractIds)
     517      {
     518        url += '&tmpfilter:INT:id='+relatedExtractIds.join('|');
     519      }
    473520      url += ItemSubtype.createRelatedFilter('bioAssay', 'EXTRACT');
    474521      if (frm.extract_id.length > 1)
     
    619666            Link.addItem(parents, new Item('D', <%=dba.getId()%>, '<%=HTML.javaScriptEncode(dba.getName())%>'));
    620667            <%
     668          }
     669          if (parents.size() == 1 && currentExtract == null)
     670          {
     671            try
     672            {
     673              currentExtract = dba.getExtract();
     674            }
     675            catch (PermissionDeniedException ex)
     676            {}
    621677          }
    622678        }
  • trunk/www/views/physicalbioassays/ajax.jsp

    r5685 r6095  
    2626  import="net.sf.basedb.core.DbControl"
    2727  import="net.sf.basedb.core.PhysicalBioAssay"
     28  import="net.sf.basedb.core.Extract"
    2829  import="net.sf.basedb.core.BioMaterial"
    2930  import="net.sf.basedb.core.BioMaterialEventSource"
    3031  import="net.sf.basedb.core.SpecialQuery"
     32  import="net.sf.basedb.core.ItemQuery"
     33  import="net.sf.basedb.core.Include"
     34  import="net.sf.basedb.core.Type"
    3135  import="net.sf.basedb.core.PermissionDeniedException"
     36  import="net.sf.basedb.core.query.Restrictions"
     37  import="net.sf.basedb.core.query.Expressions"
    3238  import="net.sf.basedb.core.query.Hql"
    3339  import="net.sf.basedb.core.query.Orders"
    3440  import="net.sf.basedb.clients.web.Base"
    3541  import="net.sf.basedb.util.Values"
     42  import="net.sf.basedb.util.biomaterial.ParentsTransformer"
    3643  import="net.sf.basedb.util.error.ThrowableUtil"
    3744  import="net.sf.basedb.clients.web.WebException"
     
    4047  import="org.json.simple.JSONArray"
    4148  import="java.util.Date"
     49  import="java.util.Arrays"
     50  import="java.util.List"
     51  import="java.util.Set"
     52  import="java.util.HashSet"
    4253%>
    4354<%
     
    8293    dc.commit();
    8394  }
     95  else if ("GetAllExtractIds".equals(cmd))
     96  {
     97    dc = sc.newDbControl();
     98   
     99    Integer[] bioAssayIds = Values.getInt(request.getParameter("bioassay_ids").split(","));
     100
     101    // Load all extracts that are directly linked with the given physical bioassays
     102    ItemQuery<Extract> query = Extract.getQuery();
     103    query.include(Include.ALL);
     104    query.join(Hql.innerJoin("childCreationEvents", "cce"));
     105    query.join(Hql.innerJoin("cce", "event", "evt"));
     106    query.restrict(Restrictions.in(Hql.property("evt", "physicalBioAssay"), Expressions.parameter("bioAssays")));
     107    query.setParameter("bioAssays", Arrays.asList(bioAssayIds), Type.INT);
     108    List<Extract> primaryExtracts = query.list(dc);
     109   
     110    // Use the ParentsTransformer to load all parent extracts as well
     111    Set<Extract> allExtracts = new HashSet<Extract>();
     112    new ParentsTransformer(dc, true, Extract.getQuery()).transform(primaryExtracts, allExtracts);
     113   
     114    JSONArray jsonExtracts = new JSONArray();
     115    for (Extract e : allExtracts)
     116    {
     117      jsonExtracts.add(e.getId());
     118    }
     119   
     120    json.put("allExtractIds", jsonExtracts);
     121    dc.commit();
     122  }
    84123  else
    85124  {
  • trunk/www/views/rawbioassays/edit_rawbioassay.jsp

    r5949 r6095  
    500500      var frm = document.forms['rawbioassay'];
    501501      var selectedIndex = frm.bioassay_id.selectedIndex
    502       var bioAssayId = Math.abs(frm.bioassay_id[selectedIndex].value);
     502      var bioAssayId = Math.abs(frm.bioassay_id[frm.bioassay_id.selectedIndex].value);
    503503      if (bioAssayId > 0) updateArrayDesign(bioAssayId);
    504      
    505       initExtracts();
    506504      parentsChanged = true;
    507505    }
     
    538536    {
    539537      var frm = document.forms['rawbioassay'];
    540       var url = '../../biomaterials/extracts/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setExtractCallback';
     538     
     539      var relatedExtractIds = null;
     540      var bioAssayId = Math.abs(frm.bioassay_id[frm.bioassay_id.selectedIndex].value);
     541      if (bioAssayId > 0)
     542      {
     543        var request = Ajax.getXmlHttpRequest();
     544        var url = '../derivedbioassays/ajax.jsp?ID=<%=ID%>&cmd=GetAllExtractIds';
     545        url += '&bioassay_ids=' + bioAssayId;
     546        request.open("GET", url, false);
     547        request.send(null);
     548                   
     549        var response = JSON.parse(request.responseText);
     550        if (response.status != 'ok')
     551        {
     552          alert(response.message);
     553          return null;
     554        }
     555        relatedExtractIds = response.allExtractIds;
     556      }
     557     
     558      var url = '../../biomaterials/extracts/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone'
     559      url += '&callback=setExtractCallback&resetTemporary=1';
     560      if (relatedExtractIds)
     561      {
     562        url += '&tmpfilter:INT:id='+relatedExtractIds.join('|');
     563      }
    541564      if (frm.extract_id.length > 1)
    542565      {
     
    664687    }
    665688
    666     function initExtracts()
    667     {
    668       var frm = document.forms['rawbioassay'];
    669       var bioAssayId = Math.abs(frm.bioassay_id[frm.bioassay_id.selectedIndex].value);
    670      
    671       var extracts = null;
    672       if (bioAssayId > 0)
    673       {
    674         extracts = getExtractsFromParentBioassay(bioAssayId);
    675       }
    676      
    677       var currentExtractId = Math.abs(frm.extract_id[frm.extract_id.selectedIndex].value);
    678       frm.extract_id.length = 0;
    679       frm.extract_id[frm.extract_id.length] = new Option('- none -', 0);
    680       var currentWasFound = 0;
    681       if (extracts != null)
    682       {
    683         for (var i = 0; i < extracts.length; i++)
    684         {
    685           var position = extracts[i].position;
    686           var prefix = position ? position + ': ' : '';
    687           frm.extract_id[frm.extract_id.length] = new Option(prefix + extracts[i].name, extracts[i].id);
    688           if (currentExtractId == extracts[i].id)
    689           {
    690             frm.extract_id.selectedIndex = frm.extract_id.length - 1;
    691             currentWasFound = 1;
    692           }
    693         }
    694       }
    695       <%
    696       if (currentExtract != null)
    697       {
    698         %>
    699         if (currentExtractId && !currentWasFound)
    700         {
    701           frm.extract_id[frm.extract_id.length] = new Option('<%=HTML.javaScriptEncode(currentExtract.getName())%>', currentExtractId);
    702           frm.extract_id.selectedIndex = frm.extract_id.length - 1;
    703         }
    704         <%
    705       }
    706       %>
    707     }
    708    
    709     function getExtractsFromParentBioassay(bioAssayId)
    710     {
    711       if (!bioAssayId) return null;
    712       var request = Ajax.getXmlHttpRequest();
    713       var url = '../derivedbioassays/ajax.jsp?ID=<%=ID%>&cmd=GetExtracts';
    714       url += '&item_id=' + bioAssayId;
    715       request.open("GET", url, false);
    716       request.send(null);
    717 
    718       var response = JSON.parse(request.responseText);
    719       if (response.status != 'ok')
    720       {
    721         alert(response.message);
    722         return null;
    723       }
    724       return response.sources;
    725     }
    726689
    727690    function init()
     
    739702      initPlatforms(<%=currentPlatform == null ? 0 : currentPlatform.getId()%>, <%=currentVariant == null ? 0 : currentVariant.getId()%>);
    740703      platformOnChange();
    741       <%
    742       if (currentBioAssay != null)
    743       {
    744         %>
    745         initExtracts();
    746         <%
    747       }
    748       %>
    749704    }
    750705   
Note: See TracChangeset for help on using the changeset viewer.