Changeset 4732


Ignore:
Timestamp:
Jan 21, 2009, 3:47:38 PM (13 years ago)
Author:
Martin Svensson
Message:

Fixes #979 Biomaterial LIMS

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/doc/src/docbook/userdoc/biomaterials.xml

    r4616 r4732  
    3131    <para>
    3232      The generic term biomaterial refers to any biological material used in an experiment.
    33       biomaterials are subdivided in 4 components, biosource, sample, extract and labeled
     33      Biomaterials are subdivided in 4 components, biosource, sample, extract and labeled
    3434      extract. The order used in presenting those entities is not innocuous as it represents the
    3535      sequence of transformation a source material undergoes until it is in a state compatible
    3636      with the realization of a microarray hybridization. This progression is actually
    3737      mimicked in the BASE
    38       <guimenu>View</guimenu>
     38      <guimenu>Biomaterial LIMS</guimenu>
    3939      menu again to insist on this natural progression.
    4040    </para>
     
    7979    </tip>
    8080  </sect1>
     81 
    8182  <sect1 id="biomaterials.biosources">
    8283    <title>Biosources</title>
     
    162163      Use
    163164      <menuchoice>
    164         <guimenu>View</guimenu>
    165         <guimenuitem>Biosource</guimenuitem>
     165        <guimenu>Biomaterial LIMS</guimenu>
     166        <guimenuitem>Samples</guimenuitem>
    166167      </menuchoice>
    167       to get to the list of biosources.
     168      to get to the list of samples.
    168169    </para>
    169170    <sect2 id="biomaterials.samples.create">
     
    277278                <para>The protocol used to produce this sample.</para>
    278279              </listitem>
     280            </varlistentry>
     281            <varlistentry>
     282              <term>
     283                <guilabel>Bioplate</guilabel>
     284              </term>
     285              <listitem>
     286                <para>The bioplate where this sample is located.</para>
     287              </listitem>             
     288            </varlistentry>
     289            <varlistentry>
     290              <term>
     291                <guilabel>Biowell</guilabel>
     292              </term>
     293              <listitem>
     294                <para>
     295                  Biowell that holds this sample.
     296                  <guilabel>Bioplate</guilabel> has to be defined before
     297                  biowell can be selected.
     298                </para>
     299              </listitem>             
    279300            </varlistentry>
    280301            <varlistentry>
     
    494515            <varlistentry>
    495516              <term>
     517                <guilabel>Bioplate</guilabel>
     518              </term>
     519              <listitem>
     520                <para>The bioplate where this extract is located.</para>
     521              </listitem>             
     522            </varlistentry>
     523            <varlistentry>
     524              <term>
     525                <guilabel>Biowell</guilabel>
     526              </term>
     527              <listitem>
     528                <para>
     529                  Biowell that holds this extract.
     530                  <guilabel>Bioplate</guilabel> has to be defined before
     531                  biowell can be selected.
     532                </para>
     533              </listitem>             
     534            </varlistentry>
     535            <varlistentry>
     536              <term>
    496537                <guilabel>Description</guilabel>
    497538              </term>
     
    580621      appropriate label object is present in BASE. To browse the list of labels, go to
    581622      <menuchoice>
    582         <guimenu>View</guimenu>
     623        <guimenu>Biomaterials LIMS</guimenu>
    583624        <guimenuitem>Labels</guimenuitem>
    584625      </menuchoice>
     
    636677        Beside the regular way of using the &gbNew; button in
    637678        <menuchoice>
    638           <guimenu>View</guimenu>
     679          <guimenu>Biomaterial LIMS</guimenu>
    639680          <guimenuitem>Labeled extracts</guimenuitem>
    640681        </menuchoice>
     
    778819          </varlistentry>
    779820          <varlistentry>
     821              <term>
     822                <guilabel>Bioplate</guilabel>
     823              </term>
     824              <listitem>
     825                <para>The bioplate where this labeled extract is located.</para>
     826              </listitem>             
     827            </varlistentry>
     828            <varlistentry>
     829              <term>
     830                <guilabel>Biowell</guilabel>
     831              </term>
     832              <listitem>
     833                <para>
     834                  Biowell that holds this labeled extract.
     835                  <guilabel>Bioplate</guilabel> has to be defined before
     836                  biowell can be selected.
     837                </para>
     838              </listitem>             
     839            </varlistentry>
     840          <varlistentry>
    780841            <term>
    781842              <guilabel>Description</guilabel>
     
    860921          .
    861922        </para>
     923      </sect3>
     924    </sect2>
     925  </sect1>
     926 
     927  <sect1 id="biomaterials.bioplate">
     928    <title>Bioplate</title>
     929    <para>
     930      With bioplates it is possible to organize biomaterials, such as samples, extracts and
     931      labeled extracts, into wells. Each plate has a number of wells, which is defined by the
     932      plate geometry.
     933    </para>
     934    <para>
     935      Use
     936      <menuchoice>
     937        <guimenu>Biomaterial LIMS</guimenu>
     938        <guimenuitem>Bioplate</guimenuitem>
     939      </menuchoice>
     940      to get to the list of bioplates.   
     941    </para>
     942    <sect2 id="biomaterials.bioplate.properties">
     943      <title>Properties</title>     
     944      <helptext external_id="bioplate.edit" title="Edit bioplate">
     945        <para>
     946          <variablelist>
     947            <varlistentry>
     948              <term><guilabel>Name</guilabel></term>
     949              <listitem>
     950                <para>
     951                  The bioplate's name which doesn't have to be unique but it is
     952                  recommended. BASE by default assigns
     953                  <replaceable>New bioplate</replaceable> as name.
     954                  This field is mandatory.
     955                </para>
     956              </listitem>
     957            </varlistentry>
     958            <varlistentry>
     959              <term><guilabel>Plate geometry</guilabel></term>
     960              <listitem>
     961                <para>
     962                  Information about the plate's design, in other words it
     963                  decide how many rows and columns there are on the bioplate.
     964                  This field are mandatory and can only be set for new bioplates.
     965                </para>
     966              </listitem>             
     967            </varlistentry>
     968            <varlistentry>
     969              <term><guilabel>Freezer</guilabel></term>
     970              <listitem>
     971                <para>The freezer where the bioplate is stored. Optional.</para>
     972              </listitem>
     973            </varlistentry>
     974            <varlistentry>
     975              <term><guilabel>Barcode</guilabel></term>
     976              <listitem>
     977                <para>
     978                  Barcode the bioplate is marked with.
     979                  Optional.
     980                </para>
     981              </listitem>
     982            </varlistentry>
     983            <varlistentry>
     984              <term><guilabel>Description</guilabel></term>
     985              <listitem>
     986                <para>
     987                  Other useful information about the bioplate can be written here. Optional.
     988                </para>
     989              </listitem>
     990            </varlistentry>
     991          </variablelist>
     992        </para>
     993      </helptext>
     994      <figure id="write_docbook_doc.figures.bioplate-tab-1">
     995        <title>Bioplate properties</title>
     996        <screenshot>
     997          <mediaobject>
     998            <imageobject>
     999              <imagedata
     1000                fileref="figures/bioplate-tab-1.png" format="PNG" />
     1001            </imageobject>
     1002          </mediaobject>
     1003        </screenshot>
     1004      </figure>
     1005      <sect3 id="biomaterials.bioplate.properties.annotations">
     1006        <title>Annotations</title>
     1007        <para>
     1008          This allows BASE users to use annotation types to refine bioplate description.
     1009          More about annotating items can be read in
     1010          <xref linkend="annotations.annotating" />
     1011          .
     1012        </para>
     1013      </sect3>
     1014    </sect2>
     1015    <sect2 id="biomaterials.bioplate.biowell">
     1016      <title>Biowell</title>
     1017      <para>
     1018        Biowells existence are managed through the bioplate they belong to.
     1019        Creating a bioplate will automatically create the biowells on it.
     1020        Same goes for delete-action.
     1021        The one and only thing that can be changed for a biowell is which
     1022        biomaterial it holds. Go to the <guilabel>Wells</guilabel>-tab when viewing a
     1023        bioplate and click on
     1024        <guiicon>
     1025          <inlinemediaobject>
     1026            <imageobject>
     1027              <imagedata fileref="figures/edit.gif" format="GIF" />
     1028            </imageobject>
     1029          </inlinemediaobject>
     1030        </guiicon> in the biomaterial column
     1031        for the specific biowell you want to change. Assigning a biomaterial to a biowell
     1032        can also be done when editing a sample, extract or labeled extract.
     1033      </para>
     1034     
     1035      <sect3 id="biomaterials.bioplate.biowell.properties">
     1036        <title>Properties</title>       
     1037        <helptext external_id="biowell.edit" title="Edit biowell">
     1038          <para>
     1039            <variablelist>
     1040              <varlistentry>
     1041                <term><guilabel>Bioplate</guilabel></term>
     1042                <listitem>
     1043                  <para>
     1044                    Shows wich bioplate the biowell is located on.
     1045                    This property is read-only.
     1046                  </para>
     1047                </listitem>
     1048              </varlistentry>
     1049              <varlistentry>             
     1050                <term><guilabel>Coordinate</guilabel></term>
     1051                <listitem>
     1052                  <para>
     1053                    The biowell's location on the bioplate in format [row,column].
     1054                    This property is read-only.
     1055                  </para>
     1056                </listitem>
     1057              </varlistentry>
     1058              <varlistentry>             
     1059                <term><guilabel>Biomaterial type</guilabel></term>
     1060                <listitem>
     1061                  <para>
     1062                    The type of biomaterial stored in this biowell. This
     1063                    property needs to display the intended type before a
     1064                    biomaterial can be selected.
     1065                  </para>
     1066                </listitem>
     1067              </varlistentry>
     1068              <varlistentry>             
     1069                <term><guilabel>Biomaterial</guilabel></term>
     1070                <listitem>
     1071                  <para>
     1072                    Name of the biomaterial in this biowell. Before changing
     1073                    this you have to make sure
     1074                    <guilabel>Biomaterial type</guilabel> is set to the right type.
     1075                  </para>
     1076                </listitem>
     1077              </varlistentry>
     1078            </variablelist>
     1079          </para>
     1080        </helptext>
     1081        <figure id="write_docbook_doc.figures.biowell">
     1082          <title>Biowell properties</title>
     1083          <screenshot>
     1084            <mediaobject>
     1085              <imageobject>
     1086                <imagedata
     1087                  fileref="figures/biowell.png" format="PNG" />
     1088              </imageobject>
     1089            </mediaobject>
     1090          </screenshot>
     1091        </figure>
    8621092      </sect3>
    8631093    </sect2>
  • trunk/src/core/net/sf/basedb/core/HardwareType.java

    r4696 r4732  
    7070  */
    7171  public static final String HYBRIDIZATION_STATION = "net.sf.basedb.core.HardwareType.HYBRIDIZATION_STATION";
     72 
     73  /**
     74    The id for the <code>HardwareType</code> object representing a
     75    freezer.
     76   */
     77  public static final String FREEZER = "net.sf.basedb.core.HardwareType.FREEZER";
    7278 
    7379  /**
  • trunk/src/core/net/sf/basedb/core/Install.java

    r4696 r4732  
    438438      HardwareTypeData robot = createHardwareType(HardwareType.PRINT_ROBOT, "Print robot", "Spot the probe on the array.");
    439439      HardwareTypeData hybStation = createHardwareType(HardwareType.HYBRIDIZATION_STATION, "Hybridization station", "Automate the hybridization of microarrays on slides.");
     440      HardwareTypeData freezer = createHardwareType(HardwareType.FREEZER, "Freezer", "Storage area for bioplates");
    440441 
    441442      // Hardware
  • trunk/src/test/TestBioPlate.java

    r4685 r4732  
    2525import net.sf.basedb.core.DbControl;
    2626import net.sf.basedb.core.Extract;
     27import net.sf.basedb.core.Hardware;
     28import net.sf.basedb.core.HardwareType;
    2729import net.sf.basedb.core.Item;
    2830import net.sf.basedb.core.ItemResultIterator;
     
    3335import net.sf.basedb.core.PlateGeometry;
    3436import net.sf.basedb.core.Sample;
     37import net.sf.basedb.core.SystemItems;
    3538
    3639import java.util.Date;
     
    6265    int labelId = TestLabel.test_create(true);
    6366    int labeledExtractId = TestLabeledExtract.test_create(extractId, labelId, true);
     67    int freezerId = TestHardware.test_create(SystemItems.getId(HardwareType.SCANNER), null, false);
    6468   
    6569    // Standard tests: create, load, list
    6670    int plateGeometryId = TestPlateGeometry.test_create(8, 12, false);
    67     int id = test_create(plateGeometryId, true);
     71    int id = test_create(plateGeometryId, freezerId, true);
    6872    test_load(id);
    6973    test_list(-1);
     
    7781    test_delete(id);
    7882    TestPlateGeometry.test_delete(plateGeometryId);
     83    TestHardware.test_delete(freezerId);
    7984   
    8085    write("++Testing plates "+(ok ? "OK" : "Failed")+"\n");
     
    160165  }
    161166
    162   static int test_create(int plateGeometryId, boolean setAll)
     167  static int test_create(int plateGeometryId, int freezerId, boolean setAll)
    163168  {
    164169    if (plateGeometryId == 0 || !TestUtil.hasPermission(Permission.CREATE, Item.BIOPLATE))
     
    171176    {
    172177      dc = TestUtil.getDbControl();
    173       PlateGeometry pg = PlateGeometry.getById(dc, plateGeometryId);
     178      PlateGeometry pg = PlateGeometry.getById(dc, plateGeometryId);     
    174179      BioPlate bp = BioPlate.getNew(dc, pg);
    175180      if (setAll)
     
    179184        bp.setExternalId("test.bioplate.plate1");
    180185        bp.setBarcode("995522");
     186        if (freezerId > 0) bp.setFreezer(Hardware.getById(dc, freezerId));
    181187        ItemResultIterator<Sample> samples = Sample.getQuery().iterate(dc);
    182188        ItemResultIterator<Extract> extracts = Extract.getQuery().iterate(dc);
     
    230236    if (!TestUtil.getSilent())
    231237    {
    232       System.out.println("   \tID \tExternal id\tName      \tDescription\tBarcode\tGeometry");
    233       System.out.println("-- \t-- \t-----------\t----------\t-----------\t-------\t---------");
     238      System.out.println("   \tID \tExternal id\tName      \tDescription\tBarcode\tGeometry\tFreezer");
     239      System.out.println("-- \t-- \t-----------\t----------\t-----------\t-------\t---------\t--------");
    234240    }
    235241  }
     
    243249  {
    244250    if (!TestUtil.getSilent()) System.out.println(i+":\t"+bioPlate.getId()+"\t"+bioPlate.getExternalId()+"\t"+bioPlate.getName()+"\t"+bioPlate.getDescription()+
    245         "\t"+bioPlate.getBarcode()+"\t"+bioPlate.getPlateGeometry());
     251        "\t"+bioPlate.getBarcode()+"\t"+bioPlate.getPlateGeometry()+"\t"+bioPlate.getFreezer());
    246252  }
    247253}
  • trunk/www/biomaterials/bioplates/edit_bioplate.jsp

    r4704 r4732  
    2929  import="net.sf.basedb.core.DbControl"
    3030  import="net.sf.basedb.core.Item"
     31  import="net.sf.basedb.core.Hardware"
     32  import="net.sf.basedb.core.HardwareType"
    3133  import="net.sf.basedb.core.ItemContext"
    3234  import="net.sf.basedb.core.SystemItems"
     
    6769  PlateGeometry currentPlateGeometry = null;
    6870 
     71  boolean readCurrentFreezer = true;
     72  Hardware currentFreezer = null;
     73 
     74  // Load recently used items
     75  List<Hardware> recentFreezers = (List<Hardware>)cc.getRecent(dc, Item.HARDWARE);
     76  List<PlateGeometry> recentPlateGeometry = (List<PlateGeometry>)cc.getRecent(dc, Item.PLATEGEOMETRY);
     77 
    6978  if (itemId == 0)
    7079  {
     
    8089    {
    8190      currentPlateGeometry = Base.getFirstMatching(dc, PlateGeometry.getQuery(), "name", cc.getPropertyFilter("plateGeometry.name"));
     91    }
     92   
     93    int freezerId = Values.getInt(request.getParameter("freezer_id"));
     94    if (freezerId != 0)
     95    {
     96      currentFreezer = Hardware.getById(dc, freezerId);
    8297    }
    8398  }
     
    94109    {
    95110      readCurrentPlateGeometry = false;
     111    }
     112    try
     113    {
     114      currentFreezer = bioplate.getFreezer();     
     115    }
     116    catch (PermissionDeniedException ex)
     117    {
     118      readCurrentFreezer = false;
    96119    }
    97120  }
     
    186209      frm.plategeometry_id.selectedIndex = 0;
    187210    }
    188 
     211    function selectFreezerOnClick()
     212    {
     213      var frm = document.forms['bioplate'];
     214      var url = '../../admin/hardware/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setFreezerCallback';
     215      if (frm.freezer_id.length > 1)
     216      {
     217        var id = Math.abs(parseInt(frm.freezer_id[1].value));       
     218        url += '&item_id='+id;
     219      }
     220      url += '&filter:INT:hardwareType=<%=SystemItems.getId(HardwareType.FREEZER)%>';
     221      Main.openPopup(url, 'SelectFreezer', 1000, 700);
     222    }
     223    function setFreezerCallback(freezerId, name)
     224    {
     225      var frm = document.forms['bioplate'];
     226      if (frm.freezer_id.length < 1) // >
     227      {
     228        frm.freezer_id[frm.freezer_id.length] = new Option();
     229      }
     230      frm.freezer_id[0].value = freezerId;
     231      frm.freezer_id[0].text = name;
     232      frm.freezer_id.selectedIndex = 0;
     233    }
     234   
    189235    function init()
    190236    {
     
    217263          value="<%=HTML.encodeTags(bioplate == null ? Values.getString(cc.getPropertyValue("name"), "New bioplate") : bioplate.getName())%>"
    218264          size="40" maxlength="<%=BioPlate.MAX_NAME_LENGTH%>"></td>
    219       </tr>
    220       <tr>
    221         <td class="prompt">Barcode</td>
    222         <td><input <%=clazz%> type="text" name="barcode"
    223           value="<%=HTML.encodeTags(bioplate == null ? Values.getString(cc.getPropertyValue("barcode"), "") : bioplate.getBarcode())%>"
    224           size="40" maxlength="<%=BioPlate.MAX_BARCODE_LENGTH%>"></td>
    225265      </tr>
    226266      <tr>
     
    237277          {
    238278            %>
    239             <table border="0" cellspacing="0" cellpadding="0">
    240             <tr>
    241             <td>
    242               <select name="plategeometry_id" size="1"
    243                 <%=!readCurrentPlateGeometry ? "disabled readonly class=\"disabled\"" : "class=\"required\""%>
    244                 style="width: 20em;">
    245               <%
    246               if (!readCurrentPlateGeometry)
    247               {
    248                 %>
    249                 <option value="-1">- denied -
    250                 <%
    251               }
    252               else
    253               {
    254                 if (currentPlateGeometry != null)
    255                 {
    256                   %>
    257                   <option value="<%=currentPlateGeometry.getId()%>" selected><%=HTML.encodeTags(currentPlateGeometry.getName())%>
    258                   <%
    259                 }
    260               }
    261               %>
    262               </select>
    263               &nbsp;
    264             </td>
    265             <td><base:button onclick="selectPlateGeometryOnClick()" title="Select&hellip;" /></td>
    266             </tr>
    267             </table>
     279            <base:select
     280              id="plategeometry_id"
     281              clazz="selectionlist"
     282              required="true"
     283              current="<%=currentPlateGeometry%>"
     284              denied="<%=!readCurrentPlateGeometry%>"
     285              recent="<%=recentPlateGeometry%>"
     286              newitem="true"
     287              onselect="selectPlateGeometryOnClick()"
     288            />
    268289            <%
    269290          }
    270291          %>
    271292        </td>
     293      </tr>         
     294      <tr>
     295        <td class="prompt">Freezer</td>
     296        <td>
     297          <base:select
     298            id="freezer_id"
     299            clazz="selectionlist"
     300            required="false"
     301            current="<%=currentFreezer%>"
     302            denied="<%=!readCurrentFreezer%>"
     303            recent="<%=recentFreezers%>"
     304            newitem="<%=bioplate == null%>"
     305            onselect="selectFreezerOnClick()"
     306            onchange="freezerOnChange()"
     307          />
     308        </td>
    272309      </tr>
     310      <tr>
     311        <td class="prompt">Barcode</td>
     312        <td><input <%=clazz%> type="text" name="barcode"
     313          value="<%=HTML.encodeTags(bioplate == null ? Values.getString(cc.getPropertyValue("barcode"), "") : bioplate.getBarcode())%>"
     314          size="40" maxlength="<%=BioPlate.MAX_BARCODE_LENGTH%>"></td>
     315      </tr>
    273316      <tr valign=top>
    274317        <td class="prompt">Description</td>
     
    288331        width="100%"  height="<%=(int)(scale*370)%>" frameborder=0 vspace=0 hspace=0
    289332        marginwidth=0 marginheight=0 scrolling="auto" style="overflow: visible"></iframe>
    290     </t:tab>
    291    
    292     <t:tab id="inheritedAnnotations" title="Inherited annotations" helpid="annotations.edit.inherited">
    293    
    294       <iframe name="inheritedAnnotations" id="idInheritedAnnotations" src="../../common/annotations/wait.jsp"
    295         width="100%"  height="<%=(int)(scale*370)%>" frameborder=0 vspace=0 hspace=0
    296         marginwidth=0 marginheight=0 scrolling="auto" style="overflow: visible"></iframe>
    297     </t:tab>
     333    </t:tab>   
    298334    </t:tabcontrol>
    299335
  • trunk/www/biomaterials/bioplates/index.jsp

    r4704 r4732  
    2828  import="net.sf.basedb.core.BioPlate"
    2929  import="net.sf.basedb.core.DbControl"
     30  import="net.sf.basedb.core.Hardware"
    3031  import="net.sf.basedb.core.Item"
    3132  import="net.sf.basedb.core.ItemQuery"
     
    124125    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, defaultContext);
    125126    dc = sc.newDbControl();
     127    final int maxRecent = Base.getMaxRecent(sc);
    126128    BioPlate bioPlate = (BioPlate)cc.getObject("item");
    127129    if (bioPlate == null)
     
    139141    bioPlate.setName(Values.getStringOrNull(request.getParameter("name")));
    140142    bioPlate.setDescription(Values.getStringOrNull(request.getParameter("description")));
    141 
     143    int freezerId = Values.getInt(request.getParameter("freezer_id"));
     144    if (freezerId >= 0)
     145    {
     146      Hardware fz = freezerId == 0 ? null : Hardware.getById(dc, freezerId);
     147      bioPlate.setFreezer(fz);
     148      if (fz != null) cc.setRecent(fz, maxRecent);
     149    }
    142150    // Annotations tab
    143151    Base.updateAnnotations(dc, bioPlate, bioPlate, request);
  • trunk/www/biomaterials/bioplates/list_bioplates.jsp

    r4729 r4732  
    263263      />
    264264      <tbl:columndef
     265        id="freezer"
     266        property="freezer.name"
     267        datatype="string"
     268        title="Freezer"
     269        sortable="true"
     270        filterable="true"
     271        exportable="true"
     272      />
     273      <tbl:columndef
    265274        id="owner"
    266275        property="owner.name"
     
    498507                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
    499508                  /></tbl:cell>
     509                <tbl:cell column="freezer">
     510                  <base:propertyvalue
     511                    item="<%=item%>"
     512                    property="freezer"
     513                    enableEditLink="<%=mode.hasEditLink()%>"
     514                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
     515                  />
     516                </tbl:cell>
    500517                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>               
    501518                <%
  • trunk/www/biomaterials/bioplates/view_bioplate.jsp

    r4729 r4732  
    265265        <td class="prompt">Geometry</td>
    266266        <td><base:propertyvalue item="<%=bioplate%>" property="plateGeometry" /></td>
     267      </tr>
     268      <tr>
     269        <td class="prompt">Freezer</td>
     270        <td><base:propertyvalue item="<%=bioplate%>" property="freezer"></base:propertyvalue>
    267271      </tr>
    268272      <tr>
Note: See TracChangeset for help on using the changeset viewer.