Changeset 7587


Ignore:
Timestamp:
Feb 6, 2019, 10:41:56 AM (5 years ago)
Author:
Nicklas Nordborg
Message:

Merged patch release 3.14.1 to the trunk.

Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/core/net/sf/basedb/core/Extract.java

    r7381 r7587  
    361361  }
    362362
    363 
     363  /**
     364    Get a query that returns all derived bioassays created from this
     365    extract.
     366    @return An {@link ItemQuery} object
     367    @since 3.14.1
     368  */
     369  public ItemQuery<DerivedBioAssay> getDerivedBioAssays()
     370  {
     371    ItemQuery<DerivedBioAssay> query = DerivedBioAssay.getQuery();
     372    query.joinPermanent(Hql.innerJoin("extract", Item.EXTRACT.getAlias()));
     373    query.restrictPermanent(
     374      Restrictions.eq(
     375        Hql.alias(Item.EXTRACT.getAlias()),
     376        Hql.entity(this)
     377      )
     378    );
     379    return query;
     380  }
     381
     382  /**
     383    Get a query that returns all raw bioassays created from this
     384    extract.
     385    @return An {@link ItemQuery} object
     386    @since 3.14.1
     387  */
     388  public ItemQuery<RawBioAssay> getRawBioAssays()
     389  {
     390    ItemQuery<RawBioAssay> query = RawBioAssay.getQuery();
     391    query.joinPermanent(Hql.innerJoin("parentExtract", Item.EXTRACT.getAlias()));
     392    query.restrictPermanent(
     393      Restrictions.eq(
     394        Hql.alias(Item.EXTRACT.getAlias()),
     395        Hql.entity(this)
     396      )
     397    );
     398    return query;
     399  }
     400 
    364401  // -------------------------------------------
    365402  /*
  • trunk/src/core/net/sf/basedb/core/HibernateUtil.java

    r7541 r7587  
    291291    }
    292292    String dbUrl = Config.getString("db.url", "");
    293     checkJdbcDriver(dbUrl);
     293    String dbUser = Config.getString("db.username", "");
     294    String dbPassword = Config.getString("db.password", "");
     295    checkJdbcDriver(dbUrl, dbUser, dbPassword);
    294296   
    295297    Properties baseConfig = new Properties();
    296298    baseConfig.setProperty("hibernate.dialect", dialect);
    297299    baseConfig.setProperty("hibernate.connection.url", dbUrl);
    298     baseConfig.setProperty("hibernate.connection.username", Config.getString("db.username", ""));
    299     baseConfig.setProperty("hibernate.connection.password", Config.getString("db.password", ""));
     300    baseConfig.setProperty("hibernate.connection.username", dbUser);
     301    baseConfig.setProperty("hibernate.connection.password", dbPassword);
    300302    return baseConfig;
    301303  }
     
    304306    Check that a JDBC driver is registered and try to load a driver if not.
    305307  */
    306   private static void checkJdbcDriver(String dbUrl)
     308  private static void checkJdbcDriver(String dbUrl, String dbUser, String dbPassword)
    307309  {
    308310    Driver driver = null;
     
    320322      ServiceLoader<Driver> s = ServiceLoader.load(Driver.class);
    321323      Iterator<Driver> it = s.iterator();
    322       while (it.hasNext())
     324      while (driver == null && it.hasNext())
    323325      {
    324326        Driver d = it.next();
     
    335337              "; version=" + d.getMajorVersion() + "." + d.getMinorVersion()+
    336338              "; acceptsURL="+acceptUrl);
    337           if (acceptUrl && driver == null)
    338           {
    339             driver = d;
    340           }
     339          if (acceptUrl) driver = d;
    341340        }
    342341      }
     
    346345      throw new ConfigurationException("Could not find a suitable JDBC driver for URL: " + dbUrl);
    347346    }
     347   
     348    Properties props = new Properties();
     349    props.setProperty("user", Config.getString("db.username", ""));
     350    props.setProperty("password", Config.getString("db.password", ""));
     351
     352    try (Connection c = driver.connect(dbUrl, props))
     353    {
     354      if (!c.isValid(5))
     355      {
     356        throw new ConfigurationException("Could not connect to database: " + dbUrl);
     357      }
     358    }
     359    catch (SQLException ex)
     360    {
     361      throw new ConfigurationException("Could not connect to database: " + dbUrl + " (" + ex.getMessage() + ")", ex);
     362    }
     363   
    348364    log.info("Accepted JDBC driver " + driver.getClass().getName() +
    349365        "; version=" + driver.getMajorVersion() + "." + driver.getMinorVersion());
  • trunk/www/biomaterials/extracts/extracts.js

    r7438 r7587  
    141141      Buttons.addClickHandler(element, extracts.newExtract);
    142142    }
     143    else if (autoInit == 'new-derived-bioassay')
     144    {
     145      Buttons.addClickHandler(element, extracts.newDerivedBioAssay);
     146    }
    143147    else if (autoInit == 'new-raw-bioassay')
    144148    {
     
    155159    Items.newItem('EXTRACT', '&extract_id='+extractId);
    156160  }
     161 
     162  /*
     163    Create a new derived bioassay with the current extract as the parent
     164  */
     165  extracts.newDerivedBioAssay = function(event)
     166  {
     167    var extractId = Data.int(event.currentTarget, 'item-id');
     168    Items.newItem('DERIVEDBIOASSAY', '&extract_id='+extractId);
     169  }
     170
    157171 
    158172  /*
  • trunk/www/biomaterials/extracts/index.jsp

    r6992 r7587  
    3939  import="net.sf.basedb.core.Tag"
    4040  import="net.sf.basedb.core.PhysicalBioAssay"
     41  import="net.sf.basedb.core.DerivedBioAssay"
    4142  import="net.sf.basedb.core.RawBioAssay"
    4243  import="net.sf.basedb.core.ItemSubtype"
     
    99100    cc.setObject("export.formatter.&childCreationEvents(event.physicalBioAssay.name)", new NameableFormatter());
    100101    cc.setObject("export.formatter.&childCreationEvents(event.bioMaterial.name)", new NameableFormatter());
     102    cc.setObject("export.formatter.&derivedBioAssays(name)", new NameableFormatter());
    101103    cc.setObject("export.formatter.&rawBioAssays(name)", new NameableFormatter());
    102104    cc.setObject("export.formatter.parentType", new ItemTypeFormatter());
     
    125127    cc.setObject("export.dataloader.&creationEvent.sources(bioMaterial.name)", new ParentBioMaterialEventSourceLoader());
    126128   
     129    // Child derived bioassays
     130    final ItemQuery<DerivedBioAssay> derivedBioAssayQuery = DerivedBioAssay.getQuery();
     131    derivedBioAssayQuery.restrict(Restrictions.eq(Hql.property("extract"), Expressions.parameter(restrictionParameter)));
     132    derivedBioAssayQuery.order(Orders.asc(Hql.property("name")));
     133    derivedBioAssayQuery.include(cc.getInclude());
     134    cc.setObject("export.dataloader.&derivedBioAssays(name)", new ItemQueryLoader(derivedBioAssayQuery, restrictionParameter));
     135
    127136    // Child raw bioassays
    128137    final ItemQuery<RawBioAssay> rawBioAssayQuery = RawBioAssay.getQuery();
  • trunk/www/biomaterials/extracts/list_extracts.jsp

    r7558 r7587  
    3232  import="net.sf.basedb.core.PhysicalBioAssay"
    3333  import="net.sf.basedb.core.RawBioAssay"
     34  import="net.sf.basedb.core.DerivedBioAssay"
    3435  import="net.sf.basedb.core.BioPlate"
    3536  import="net.sf.basedb.core.BioMaterialEvent"
     
    129130  final ItemQuery<ItemSubtype> subtypesQuery = Base.getSubtypesQuery(itemType);
    130131  final boolean createBioAssayPermission = sc.hasPermission(Permission.CREATE, Item.PHYSICALBIOASSAY);
     132  final boolean createDerivedBioAssayPermission = sc.hasPermission(Permission.CREATE, Item.DERIVEDBIOASSAY);
    131133  final boolean createRawBioAssayPermission = sc.hasPermission(Permission.CREATE, Item.RAWBIOASSAY);
    132134
    133   // Child bioassays
     135  // Child physical bioassays
    134136  final ItemQuery<PhysicalBioAssay> bioAssayQuery = PhysicalBioAssay.getQuery();
    135137  bioAssayQuery.join(Hql.innerJoin("creationEvent", "ce"));
     
    138140  bioAssayQuery.order(Orders.asc(Hql.property("name")));
    139141  bioAssayQuery.include(cc.getInclude());
     142
     143  // Child derived bioassays
     144  final ItemQuery<DerivedBioAssay> derivedAssayQuery = DerivedBioAssay.getQuery();
     145  derivedAssayQuery.restrict(Restrictions.eq(Hql.property("extract"), Hql.entityParameter("extract", Item.EXTRACT)));
     146  derivedAssayQuery.order(Orders.asc(Hql.property("name")));
     147  derivedAssayQuery.include(cc.getInclude());
    140148
    141149  // Child raw bioassays
     
    387395        title="Physical bioassays"
    388396        property="&childCreationEvents(event.physicalBioAssay.name)"
     397        datatype="string"
     398        filterable="true"
     399        exportable="true"
     400      />
     401      <tbl:columndef
     402        id="derivedBioAssays"
     403        title="Derived bioassays"
     404        property="&derivedBioAssays(name)"
    389405        datatype="string"
    390406        filterable="true"
     
    925941                  %>
    926942                </tbl:cell>
     943                <tbl:cell column="derivedBioAssays">
     944                  <%                 
     945                  try
     946                  {
     947                    derivedAssayQuery.setEntityParameter("extract", item);
     948                    String separator = "";
     949                    for (DerivedBioAssay dba : derivedAssayQuery.list(dc))
     950                    {
     951                      out.write(separator);
     952                      if (mode.hasPropertyLink())
     953                      {
     954                        out.write(Base.getLinkedName(ID, dba, false, mode.hasEditLink()));
     955                      }
     956                      else
     957                      {
     958                        out.write(HTML.encodeTags(dba.getName()));
     959                      }
     960                      separator = ", ";
     961                    }
     962                  }
     963                  catch (Throwable t)
     964                  {
     965                    %>
     966                    <div class="error"><%=t.getMessage()%></div>
     967                    <%
     968                  }
     969                  %>
     970                  <base:icon
     971                    id="<%="newDerivedBioAssay."+itemId%>"
     972                    image="add.png"
     973                    subclass="auto-init"
     974                    data-auto-init="new-derived-bioassay"
     975                    data-item-id="<%=itemId %>"
     976                    tooltip="Create new derived bioassay from this extract"
     977                    visible="<%=mode.hasEditLink() && createDerivedBioAssayPermission && usePermission %>"
     978                  />
     979                </tbl:cell>
    927980                <tbl:cell column="rawBioAssays">
    928981                  <%                 
  • trunk/www/biomaterials/extracts/view_extract.jsp

    r7166 r7587  
    4141  import="net.sf.basedb.core.BioMaterialEventSource"
    4242  import="net.sf.basedb.core.BioWell"
     43  import="net.sf.basedb.core.RawDataType"
     44  import="net.sf.basedb.core.RawBioAssay"
     45  import="net.sf.basedb.core.DerivedBioAssay"
    4346  import="net.sf.basedb.core.MultiPermissions"
    4447  import="net.sf.basedb.core.ItemSubtype"
     
    440443      childQuery.order(Orders.asc(Hql.property("bm", "name")));
    441444      ResultList<BioMaterialEventSource> children = childQuery.list(dc);
     445     
     446      ItemQuery<DerivedBioAssay> dbaQuery = extract.getDerivedBioAssays();
     447      dbaQuery.include(Include.ALL);
     448      dbaQuery.order(Orders.asc(Hql.property("name")));
     449      ItemResultList<DerivedBioAssay> derivedBioAssays = dbaQuery.list(dc);
     450     
     451      ItemQuery<RawBioAssay> rbaQuery = extract.getRawBioAssays();
     452      rbaQuery.include(Include.ALL);
     453      rbaQuery.order(Orders.asc(Hql.property("name")));
     454      ItemResultList<RawBioAssay> rawBioAssays = rbaQuery.list(dc);
     455
     456      int numChildren = children.size() + derivedBioAssays.size() + rawBioAssays.size();
    442457      %>
    443458      <base:section
    444459        id="childSection"
    445         title="<%="Child items (" + children.size() + ")"%>"
     460        title="<%="Child items (" + numChildren + ")"%>"
    446461        context="<%=cc%>"
    447462        >
    448463        <%
    449         if (children.size() == 0)
     464        if (numChildren == 0)
    450465        {
    451466          %>
     
    537552                <%
    538553              }
    539               %>           
     554              for (DerivedBioAssay dba : derivedBioAssays)
     555              {
     556                ItemSubtype subtype = null;
     557                try
     558                {
     559                  subtype = dba.getItemSubtype();
     560                }
     561                catch (PermissionDeniedException ex)
     562                {}
     563                %>
     564                <tbl:row>
     565                  <tbl:cell column="name"><base:icon
     566                      image="deleted.png"
     567                      tooltip="This item has been scheduled for deletion"
     568                      visible="<%=dba.isRemoved()%>"
     569                    /><%=Base.getLinkedName(ID, dba, false, true)%></tbl:cell>
     570                  <tbl:cell column="type">
     571                    <%
     572                    if (subtype != null)
     573                    {
     574                      %>
     575                      <%=Base.getLinkedName(ID, subtype, false, true)%> <span class="itemsubtype">(<%=dba.getType() %>)</span>
     576                      <%
     577                    }
     578                    else
     579                    {
     580                      %>
     581                      <%=dba.getType()%>
     582                      <%
     583                    }
     584                    %>
     585                  </tbl:cell>
     586                  <tbl:cell column="quantity"></tbl:cell>
     587                  <tbl:cell column="description"><%=HTML.encodeTags(dba.getDescription())%></tbl:cell>
     588                </tbl:row>
     589                <%
     590              }
     591              for (RawBioAssay rba : rawBioAssays)
     592              {
     593                RawDataType rawtype = null;
     594                try
     595                {
     596                  rawtype = rba.getRawDataType();
     597                }
     598                catch (PermissionDeniedException ex)
     599                {}
     600                %>
     601                <tbl:row>
     602                  <tbl:cell column="name"><base:icon
     603                      image="deleted.png"
     604                      tooltip="This item has been scheduled for deletion"
     605                      visible="<%=rba.isRemoved()%>"
     606                    /><%=Base.getLinkedName(ID, rba, false, true)%></tbl:cell>
     607                  <tbl:cell column="type">
     608                    <%=rawtype.getName()%> <span class="itemsubtype">(<%=rba.getType() %>)</span>
     609                  </tbl:cell>
     610                  <tbl:cell column="quantity"></tbl:cell>
     611                  <tbl:cell column="description"><%=HTML.encodeTags(rba.getDescription())%></tbl:cell>
     612                </tbl:row>
     613                <%
     614              }
     615              %>
    540616              </tbl:rows>
    541617            </tbl:data>
  • trunk/www/common/annotations/annotate.jsp

    r7334 r7587  
    3939  import="net.sf.basedb.core.BioPlateType"
    4040  import="net.sf.basedb.core.BioPlate"
     41  import="net.sf.basedb.core.RawBioAssay"
     42  import="net.sf.basedb.core.RawDataType"
     43  import="net.sf.basedb.core.RawDataTypes"
    4144  import="net.sf.basedb.core.AnnotationSet"
    4245  import="net.sf.basedb.core.Annotation"
     
    157160      if (subtype == null) selectedCategoryName = bpt.getName();
    158161    }
     162    else if (item instanceof RawBioAssay)
     163    {
     164      RawDataType rdt = ((RawBioAssay)item).getRawDataType();
     165      selectedCategoryName = rdt.getName();
     166    }
    159167    if (subtype != null) selectedCategoryName = subtype.getName();
    160168  }
     
    191199  final Set<AnnotationTypeCategory> allCategories =
    192200    new TreeSet<AnnotationTypeCategory>(new NameableComparator(false));
     201 
     202  // Load all ItemSubtypes that are NOT related to the current item type
     203  // We need this to get rid of annotation type categories that are not intended
     204  // for the current item type
     205  Set<String> excludedCategories = new HashSet<>();
     206  ItemQuery<ItemSubtype> query = ItemSubtype.getQuery(null);
     207  query.restrict(Restrictions.neq(Hql.property("itemType"), Expressions.integer(itemType.getValue())));
     208  for (ItemSubtype s : query.list(dc))
     209  {
     210    if (Annotatable.class.isAssignableFrom(s.getMainItemType().getItemClass()))
     211    {
     212      excludedCategories.add(s.getName());
     213    }
     214  }
     215  // Raw data types are also used as subtypes
     216  if (itemType != Item.RAWBIOASSAY)
     217  {
     218    for (RawDataType rdt : RawDataTypes.getRawDataTypes())
     219    {
     220      excludedCategories.add(rdt.getName());
     221    }
     222  }
    193223 
    194224  // Load existing annotations
     
    553583          {
    554584            boolean selected = category.getName().equals(selectedCategoryName);
     585            if (!selected && excludedCategories.contains(category.getName())) continue;
    555586            %>
    556587            <option value="<%=category.getId()%>"
  • trunk/www/common/annotations/list_annotations.jsp

    r7334 r7587  
    2323  @version 2.0
    2424--%>
    25 <%@page import="java.util.Collections"%>
    26 <%@page import="net.sf.basedb.util.units.UnitConverter"%>
    2725<%@ page pageEncoding="UTF-8" session="false"
    2826  import="net.sf.basedb.core.SessionControl"
     
    4240  import="net.sf.basedb.core.BioPlate"
    4341  import="net.sf.basedb.core.BioPlateType"
     42  import="net.sf.basedb.core.RawDataType"
     43  import="net.sf.basedb.core.RawBioAssay"
    4444  import="net.sf.basedb.core.ItemQuery"
    4545  import="net.sf.basedb.core.ItemResultList"
     
    5656  import="net.sf.basedb.clients.web.util.HTML"
    5757  import="net.sf.basedb.util.NameableComparator"
     58  import="net.sf.basedb.util.units.UnitConverter"
    5859  import="net.sf.basedb.util.formatter.Formatter"
    5960  import="net.sf.basedb.util.formatter.PrefixSuffixFormatter"
    6061  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
    6162  import="net.sf.basedb.util.Values"
     63  import="java.util.Collections"
    6264  import="java.util.ArrayList"
    6365  import="java.util.List"
     
    165167      subtype = bpt.getItemSubtype();
    166168      if (subtype == null) selectedCategoryName = bpt.getName();
     169    }
     170    else if (item instanceof RawBioAssay)
     171    {
     172      RawDataType rdt = ((RawBioAssay)item).getRawDataType();
     173      selectedCategoryName = rdt.getName();
    167174    }
    168175    if (subtype != null) selectedCategoryName = subtype.getName();
  • trunk/www/my_base/user/settings.jsp

    r7502 r7587  
    7272  final boolean writePermission = user.hasPermission(Permission.RESTRICTED_WRITE);
    7373  final String ifDisabled = writePermission ? "" : "disabled";
    74   final String passwordDisabled = writePermission && Application.isUsingInternalAuthentication() ?
    75     "" : "disabled";
     74  final String passwordDisabled = writePermission ? "" : "disabled";
    7675  dc.detachItem(user);
    7776  sc.setSessionSetting("user", user);
     
    206205      <t:tab id="password" title="Password" helpid="userpreferences.password">
    207206        <table class="fullform input100">
    208         <% if (!Application.isUsingInternalAuthentication() && writePermission)
    209         {
    210           %>
    211           <tr>
    212             <td colspan="2">
    213             <div class="messagecontainer error">Base is using external authentication. Password cannot be changed here.</div>
    214             </td>
    215           </tr>
    216           <%
    217         }
    218         %>
    219207        <tr>
    220208          <th>Login</th>
  • trunk/www/views/derivedbioassays/edit_bioassay.jsp

    r6996 r7587  
    147147    }
    148148
     149    int extractId = Values.getInt(request.getParameter("extract_id"));
     150    if (extractId != 0)
     151    {
     152      currentExtract = Extract.getById(dc, extractId);
     153    }
     154    else if (cc.getPropertyFilter("extract.name") != null)
     155    {
     156      currentExtract = Base.getFirstMatching(dc, Extract.getQuery(), "name", cc.getPropertyFilter("extract.name"));
     157    }
     158
    149159    if (currentSubtypeId == 0)
    150160    {
Note: See TracChangeset for help on using the changeset viewer.