Changeset 3741


Ignore:
Timestamp:
Sep 17, 2007, 1:10:55 PM (14 years ago)
Author:
Nicklas Nordborg
Message:

Fixes #758: Store number of features in a database column of ArrayDesign?

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/core/common-queries.xml

    r3719 r3741  
    27522752    </description>
    27532753  </query>
     2754 
     2755  <query id="SET_NUMFEATURES_ON_ARRAYDESIGNS" type="HQL">
     2756    <sql>
     2757      UPDATE ArrayDesignData ad
     2758      SET ad.numFeatures = 0
     2759      WHERE ad.numFeatures IS NULL
     2760    </sql>
     2761    <description>
     2762      A HQL query that sets the number of features to 0
     2763      on all array designs with a null value.
     2764    </description>
     2765  </query>
    27542766
    27552767</predefined-queries>
  • trunk/src/core/net/sf/basedb/core/Affymetrix.java

    r3737 r3741  
    2525package net.sf.basedb.core;
    2626
    27 import java.io.FileOutputStream;
    28 
    2927import net.sf.basedb.core.data.ReporterData;
    30 import net.sf.basedb.util.FileUtil;
    3128import affymetrix.fusion.cdf.FusionCDFData;
    3229import affymetrix.fusion.cel.FusionCELData;
     
    9996      if (!ata.isInDatabase()) dc.saveItem(ata);
    10097      design.getData().setHasFeatures(true);
     98      design.getData().setNumFeatures(cdf.getHeader().getNumProbeSets());
    10199    }
    102100    else
  • trunk/src/core/net/sf/basedb/core/ArrayDesign.java

    r3679 r3741  
    3737import java.util.Map;
    3838import java.util.Set;
    39 
    40 import affymetrix.fusion.cdf.FusionCDFData;
    4139
    4240/**
     
    534532    @return The number of features or probesets
    535533    @since 2.4
     534    @deprecated Use {@link #getNumFeatures()} instead
    536535  */
    537536  public long getNumFeatures(DbControl dc)
    538537  {
    539     long numFeatures = 0;
    540     if (hasFeatures())
    541     {
    542       if (isAffyChip())
    543       {
    544         FusionCDFData cdf = Affymetrix.loadCdfFile(Affymetrix.getCdfFile(this));
    545         numFeatures = cdf.getHeader().getNumProbeSets();
    546       }
    547       else
    548       {
    549         numFeatures = getFeatures().count(dc);
    550       }
    551     }
    552     return numFeatures;
     538    return getNumFeatures();
     539  }
     540 
     541  /**
     542    Get the number of features on this array design. Depending on the
     543    type of array design, this may or may not correspond to the number
     544    of features in the database.
     545    @return The number of features or probesets
     546    @since 2.5
     547  */
     548  public int getNumFeatures()
     549  {
     550    return getData().getNumFeatures();
    553551  }
    554552 
  • trunk/src/core/net/sf/basedb/core/Install.java

    r3719 r3741  
    104104    method.
    105105  */
    106   public static final int NEW_SCHEMA_VERSION = Integer.valueOf(41).intValue();
     106  public static final int NEW_SCHEMA_VERSION = Integer.valueOf(42).intValue();
    107107 
    108108  public static synchronized void createTables(boolean update, final ProgressReporter progress)
  • trunk/src/core/net/sf/basedb/core/Update.java

    r3719 r3741  
    3939import org.hibernate.mapping.Table;
    4040
     41import affymetrix.fusion.cdf.FusionCDFData;
     42
     43import net.sf.basedb.core.data.AnyToAnyData;
     44import net.sf.basedb.core.data.ArrayDesignData;
    4145import net.sf.basedb.core.data.DataCubeData;
    4246import net.sf.basedb.core.data.ExperimentData;
     
    484488      </ul>
    485489      The update sets all values on existing items to false.
     490    </td>
     491  </tr>
     492
     493  <tr>
     494    <td>42</td>
     495    <td>
     496      <ul>
     497      <li>Added {@link net.sf.basedb.core.data.ArrayDesignData#getNumFeatures()}
     498      </ul>
     499      The update will query the database or check the CDF file to get
     500      the information.
    486501    </td>
    487502  </tr>
     
    694709        schemaVersion = setSchemaVersionInTransaction(session, 41);
    695710      }
    696      
     711
     712      if (schemaVersion < 42)
     713      {
     714        if (progress != null) progress.display((int)(41*progress_factor), "--Updating schema version: " + schemaVersion + " -> 42...");
     715        schemaVersion = updateToSchemaVersion42(session);
     716      }
     717
    697718      /*
    698       if (schemaVersion < 42)
    699       {
    700         if (progress != null) progress.display((int)(41*progress_factor), "--Updating schema version: " + schemaVersion + " -> 42...");
    701         schemaVersion = setSchemaVersionInTransaction(session, 42);
     719      if (schemaVersion < 43)
     720      {
     721        if (progress != null) progress.display((int)(42*progress_factor), "--Updating schema version: " + schemaVersion + " -> 43...");
     722        schemaVersion = setSchemaVersionInTransaction(session, 43);
    702723        - or -
    703         schemaVersion = updateToSchemaVersion42(session);
     724        schemaVersion = updateToSchemaVersion43(session);
    704725      }
    705726      ... etc...
     
    16131634  }
    16141635
     1636  /**
     1637    Count the number of features for all array designs. For Affymetrix designs
     1638    the CDF file is checked.
     1639    @return The new schema version (=42)
     1640  */
     1641  private static int updateToSchemaVersion42(org.hibernate.Session session)
     1642  {
     1643    final int schemaVersion = 42;
     1644    org.hibernate.Transaction tx = null;
     1645    try
     1646    {
     1647      tx = HibernateUtil.newTransaction(session);
     1648 
     1649      org.hibernate.Query query = HibernateUtil.createQuery(session,
     1650        "SELECT ad FROM ArrayDesignData ad");
     1651      org.hibernate.Query countQuery = HibernateUtil.getPredefinedQuery(session,
     1652        "COUNT_FEATURES_FOR_ARRAYDESIGN");
     1653      org.hibernate.Query cdfQuery = HibernateUtil.getPredefinedQuery(session,
     1654        "GET_ANYTOANY_FOR_NAME");
     1655      cdfQuery.setInteger("fromType", Item.ARRAYDESIGN.getValue());
     1656      cdfQuery.setString("name", Affymetrix.CDF_LINK_NAME);
     1657     
     1658      List<ArrayDesignData> designs = HibernateUtil.loadList(ArrayDesignData.class, query);
     1659      for (ArrayDesignData design : designs)
     1660      {
     1661        int numFeatures = -1;
     1662        try
     1663        {
     1664          if (!design.getHasFeatures())
     1665          {
     1666            numFeatures = 0;
     1667          }
     1668          else  if (design.isAffyChip())
     1669          {
     1670            // Get CDF file and the number of features
     1671            cdfQuery.setInteger("fromId", design.getId());
     1672            AnyToAnyData cdfLink = HibernateUtil.loadData(AnyToAnyData.class, cdfQuery);
     1673            FileData cdf = null;
     1674            if (cdfLink != null)
     1675            {
     1676              cdf = HibernateUtil.loadData(session, FileData.class, cdfLink.getToId());
     1677            }
     1678            if (cdf != null)
     1679            {
     1680              FusionCDFData cdfData = new FusionCDFData();
     1681              cdfData.setFileName(File.getAbsolutePath(cdf.getInternalName()).getPath());
     1682              cdfData.readHeader();
     1683              numFeatures = cdfData.getHeader().getNumProbeSets();
     1684            }
     1685            else
     1686            {
     1687              numFeatures = 0;
     1688            }
     1689          }
     1690          else
     1691          {
     1692            countQuery.setInteger("arrayDesign", design.getId());
     1693            numFeatures = HibernateUtil.loadData(Long.class, countQuery).intValue();
     1694          }
     1695        }
     1696        catch (Throwable t)
     1697        {
     1698          log.error("Could not set number of features on array design: " + design, t);
     1699        }
     1700        design.setNumFeatures(numFeatures);
     1701      }
     1702
     1703 
     1704      // Update the schema version number
     1705      setSchemaVersion(session, schemaVersion);
     1706 
     1707      // Commit the changes
     1708      HibernateUtil.commit(tx);
     1709      log.info("updateToSchemaVersion42: OK");
     1710    }
     1711    catch (BaseException ex)
     1712    {
     1713      if (tx != null) HibernateUtil.rollback(tx);
     1714      log.error("updateToSchemaVersion42: FAILED", ex);
     1715      throw ex;
     1716    }
     1717    return schemaVersion;   
     1718  }
     1719 
    16151720 
    16161721  /**
     
    19482053        }
    19492054       
    1950        
     2055        if (schemaVersion < 42)
     2056        {
     2057          // Set numFeatures to 0 for all ArrayDesign
     2058          // Later we will count or check the CDF file.
     2059          org.hibernate.Query query = HibernateUtil.getPredefinedQuery(session,
     2060            "SET_NUMFEATURES_ON_ARRAYDESIGNS");
     2061          /*
     2062            UPDATE ArrayDesignData ad
     2063            SET ad.numFeatures = 0
     2064            WHERE ad.numFeatures IS NULL
     2065          */
     2066          HibernateUtil.executeUpdate(query);
     2067        }
     2068     
    19512069        //  Commit the changes
    19522070        HibernateUtil.commit(tx);
  • trunk/src/core/net/sf/basedb/core/data/ArrayDesignData.java

    r3679 r3741  
    7272  }
    7373
     74  private int features;
     75  /**
     76    The number of features on this array design
     77    @hibernate.property column="`features`" type="int" not-null="true"
     78  */
     79  public int getNumFeatures()
     80  {
     81    return features;
     82  }
     83  public void setNumFeatures(int features)
     84  {
     85    this.features = features;
     86  }
     87 
    7488  private Set<ArrayDesignBlockData> arrayDesignBlocks;
    7589  /**
  • trunk/www/lims/arraydesigns/index.jsp

    r3679 r3741  
    6060<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
    6161<%!
    62   private static final ItemContext defaultContext = Base.createDefaultContext("name", "name,affyChip,hasFeatures,description");
     62  private static final ItemContext defaultContext = Base.createDefaultContext("name", "name,affyChip,numFeatures,description");
    6363  private static final Item itemType = Item.ARRAYDESIGN;
    6464%>
  • trunk/www/lims/arraydesigns/list_designs.jsp

    r3679 r3741  
    259259        datatype="boolean"
    260260        title="Has features"
     261        sortable="true"
     262        filterable="true"
     263        exportable="true"
     264      />
     265      <tbl:columndef
     266        id="numFeatures"
     267        property="numFeatures"
     268        datatype="int"
     269        title="Num features"
    261270        sortable="true"
    262271        filterable="true"
     
    505514                %>
    506515                </tbl:cell>
    507                 <tbl:cell column="hasFeatures"><%=item.hasFeatures() ? "yes (" + item.getNumFeatures(dc) + ")" : "no"%></tbl:cell>
     516                <tbl:cell column="hasFeatures"><%=item.hasFeatures() ? "yes" : "no"%></tbl:cell>
     517                <tbl:cell column="numFeatures"><%=item.getNumFeatures()%></tbl:cell>
    508518                <tbl:cell column="batches">
    509519                  <%
  • trunk/www/lims/arraydesigns/view_design.jsp

    r3679 r3741  
    310310      <tr>
    311311        <td class="prompt">Features</td>
    312         <td><%=design.hasFeatures() ? "yes (" + design.getNumFeatures(dc) + ")" : "no"%></td>
     312        <td><%=design.hasFeatures() ? "yes (" + design.getNumFeatures() + ")" : "no"%></td>
    313313      </tr>
    314314      <tr>
Note: See TracChangeset for help on using the changeset viewer.