Changeset 7982


Ignore:
Timestamp:
Jun 14, 2021, 10:01:21 AM (2 years ago)
Author:
Nicklas Nordborg
Message:

Merge BASE 3.18.2 to the trunk

Location:
trunk
Files:
139 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/doc/historical/admin/extended-properties.html

    r4889 r7982  
    44    $Id$
    55
    6     Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg
    7     Copyright (C) 2007 Jari Häkkinen
     6    Copyright (C) 2006 Jari Hkkinen, Nicklas Nordborg
     7    Copyright (C) 2007 Jari Hkkinen
    88
    99    This file is part of BASE - BioArray Software Environment.
     
    6060        for ExtendableData</a> </li>
    6161        <li> <a
    62         href="http://base.thep.lu.se/browser/trunk/src/core/net/sf/basedb/core/dtd/extended-properties.dtd">extended-properties.dtd</a> </li>
     62        href="https://base.thep.lu.se/browser/trunk/src/core/net/sf/basedb/core/dtd/extended-properties.dtd">extended-properties.dtd</a> </li>
    6363      </ul>
    6464
     
    110110            The
    111111            <a
    112             href=http://base.thep.lu.se/browser/trunk/config/dist/extended-properties.xml>default
     112            href="https://base.thep.lu.se/browser/trunk/config/dist/extended-properties.xml">default
    113113            extended properties</a> file. The properties described in
    114114            this sample file is required when migration from BASE 1.2
     
    124124            A
    125125            <a
    126             href=http://base.thep.lu.se/browser/trunk/misc/config/minimalistic_extended-properties.xml>minimalistic
     126            href="https://base.thep.lu.se/browser/trunk/misc/config/minimalistic_extended-properties.xml">minimalistic
    127127            setup</a>. This is useful when, at BASE installation time,
    128128            it is not known what reporter data will be stored in the
     
    146146      to follow the straightforward format of
    147147      <a
    148       href=http://base.thep.lu.se/browser/trunk/src/extended-properties.xml>default
     148      href="https://base.thep.lu.se/browser/trunk/src/extended-properties.xml">default
    149149      extended properties</a>. The problem is that some knowledge of
    150150      the underlying database schema is needed.
  • trunk/doc/historical/admin/plugin_configuration/coreplugins.html

    r4889 r7982  
    33  $Id$
    44
    5   Copyright (C) 2007 Jari Häkkinen, Peter Johansson, Martin Svensson
     5  Copyright (C) 2007 Jari Hkkinen, Peter Johansson, Martin Svensson
    66
    77  This file is part of BASE - BioArray Software Environment.
     
    3939      <p>
    4040        This document is mostly superseeded by the <a
    41       href="http://base.thep.lu.se/chrome/site/latest/html/appendix/appendix.coreplugins.html">core
     41      href="https://base.thep.lu.se/chrome/site/latest/html/appendix/appendix.coreplugins.html">core
    4242        plugins list in the BASE 2 documentation</a>. Some tools are
    4343        still listed here.
     
    5151      <p class="authors">
    5252        <b>Last updated:</b> $Date: 2007-01-09$ <br>
    53         <b>Copyright ©</b> 2007 The respective authors. All rights reserved.
     53        <b>Copyright </b> 2007 The respective authors. All rights reserved.
    5454      </p>
    5555    </div>
  • trunk/doc/historical/development/build.html

    r5656 r7982  
    4141  <div class="warning">
    4242    NOTE! This document is outdated and has been replaced with newer
    43     documentation. See <a href="http://base.thep.lu.se/wiki/BuildingBase">Building BASE from source code</a>
     43    documentation. See <a href="https://base.thep.lu.se/wiki/BuildingBase">Building BASE from source code</a>
    4444  </div>
    4545
     
    9090  </p>
    9191  <pre class="code">
    92 svn checkout http://base.thep.lu.se/svn/trunk/ base
     92svn checkout https://base.thep.lu.se/svn/trunk/ base
    9393</pre>
    9494
     
    9999    For information about how to get other version, including specific releases and bugfix
    100100    branches, read the information on the
    101     <a href="http://base.thep.lu.se/wiki/DownloadPage">BASE download page</a>
    102     or check the <a href="http://base.thep.lu.se/browser">subversion source repository</a>
     101    <a href="https://base.thep.lu.se/wiki/DownloadPage">BASE download page</a>
     102    or check the <a href="https://base.thep.lu.se/browser">subversion source repository</a>
    103103    directly.
    104104  </p>
  • trunk/doc/historical/development/plugins/index.html

    r4889 r7982  
    33  $Id$
    44
    5   Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg
     5  Copyright (C) 2006 Jari Hkkinen, Nicklas Nordborg
    66
    77  This file is part of BASE - BioArray Software Environment.
     
    124124      null,
    125125      "base@thep.lu.se",
    126       "http://base.thep.lu.se"
     126      "https://base.thep.lu.se"
    127127   );
    128128   
  • trunk/doc/historical/test/index.html

    r4889 r7982  
    44    $Id$
    55
    6     Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg
     6    Copyright (C) 2006 Jari Hkkinen, Nicklas Nordborg
    77
    88    This file is part of BASE - BioArray Software Environment.
     
    7171  target="_new">basedb-devel archive</a>) for discussions about
    7272  BASE 2.0. Please use the <a
    73   href=http://www.edgewall.com/trac/>trac</a> based
     73  href="http://www.edgewall.com/trac/">trac</a> based
    7474  reporting system for bug reports, enhancement ideas, and feature
    7575  requests. More information at <a
    76   href=http://base.thep.lu.se/#Feedback>the feedback section</a> of
    77   the <a href=http://base.thep.lu.se/>BASE trac enviroment</a>.
     76  href="https://base.thep.lu.se/#Feedback">the feedback section</a> of
     77  the <a href="https://base.thep.lu.se/">BASE trac enviroment</a>.
    7878  </p>
    7979
  • trunk/doc/historical/test/merge/index.html

    r4509 r7982  
    7171    <b>See also</b><br>
    7272    <ol>
    73     <li><a href="http://base.thep.lu.se/ticket/215">Ticket #215: Incorrect use of
     73    <li><a href="https://base.thep.lu.se/ticket/215">Ticket #215: Incorrect use of
    7474      DynamicSpotQuery in table view, plot function, filter function, etc.</a>
    7575    </ol>
  • trunk/doc/historical/user/getting_started.html

    r4889 r7982  
    44    $Id$
    55
    6     Copyright (C) 2006 Jari Häkkinen
     6    Copyright (C) 2006 Jari Hkkinen
    77
    88    This file is part of BASE - BioArray Software Environment.
     
    103103            other works out of the box. Some external plug-ins as the
    104104            <a
    105             href=http://baseplugins.thep.lu.se/wiki/thep.lu.se.RMAExpress>RMAExpress
     105            href="https://baseplugins.thep.lu.se/wiki/thep.lu.se.RMAExpress">RMAExpress
    106106            plug-in for BASE</a> has to be compiled before including
    107107            them into your BASE server.</p>
     
    442442            <p> (Affymetrix only) <b>Install
    443443            <a name=RMAExpressInstall
    444             href=http://baseplugins.thep.lu.se/wiki/thep.lu.se.RMAExpress>RMAExpress
     444            href="https://baseplugins.thep.lu.se/wiki/thep.lu.se.RMAExpress">RMAExpress
    445445            plug-in for BASE</a></b> <br> This plug-in is required for
    446446            Affymetrix data. The plug-in will create a bioassay set,
     
    650650    BASE. We have not covered how to use the LIMS part of BASE, nor
    651651    annotations, and much more. We are creating documentation, please
    652     browse <a href=http://base.thep.lu.se/>BASE web site</a> for the
     652    browse <a href="https://base.thep.lu.se/">BASE web site</a> for the
    653653    latest available documents. </p>
    654654
  • trunk/doc/src/docbook/admin/installation.xml

    r7916 r7982  
    157157                  This option is for advanced users only and is not
    158158                  covered here. Please refer to
    159                   <ulink url="http://base.thep.lu.se/wiki/BuildingBase" /> for information on
     159                  <ulink url="https://base.thep.lu.se/wiki/BuildingBase" /> for information on
    160160                  this download option.
    161161                </para>
     
    420420          <para>
    421421            <ulink
    422             url="http://base.thep.lu.se/wiki/DownloadPage">Download
     422            url="https://base.thep.lu.se/wiki/DownloadPage">Download
    423423            BASE</ulink> and unpack the downloaded file,
    424424            i.e. <command>tar zxpf base-...tar.gz</command>. If you
     
    426426            a checkout of the source from the subversion repository
    427427            (subversion checkout instructions at
    428             <ulink url="http://base.thep.lu.se/wiki/DownloadPage">BASE
     428            <ulink url="https://base.thep.lu.se/wiki/DownloadPage">BASE
    429429            trac site</ulink>).
    430430          </para>
     
    451451              is available in the
    452452              <ulink
    453               url="http://base.thep.lu.se/wiki/BuildingBase">building
     453              url="https://base.thep.lu.se/wiki/BuildingBase">building
    454454              BASE document</ulink>. When you return back after
    455455              compiling in the subversion tree you can follow the
     
    530530            There is an
    531531            administrator <ulink
    532             url="http://base.thep.lu.se/chrome/site/doc/historical/admin/extended-properties.html">document
     532            url="https://base.thep.lu.se/chrome/site/doc/historical/admin/extended-properties.html">document
    533533            discussing extended properties</ulink> available. If you
    534534            plan to perform a migration of a BASE version 1.2 database you
     
    906906                downloads at
    907907                <ulink
    908                 url="http://base.thep.lu.se/wiki/DownloadPage">http://base.thep.lu.se/wiki/DownloadPage</ulink>
     908                url="https://base.thep.lu.se/wiki/DownloadPage">https://base.thep.lu.se/wiki/DownloadPage</ulink>
    909909              </para>
    910910            </listitem>
     
    13631363                    BASE version on the BASE web site,
    13641364                    <ulink
    1365                       url="http://base.thep.lu.se/chrome/site/doc/html/index.html">
    1366                       http://base.thep.lu.se/chrome/site/doc/html/index.html</ulink>.
     1365                      url="https://base.thep.lu.se/chrome/site/doc/html/index.html">
     1366                      https://base.thep.lu.se/chrome/site/doc/html/index.html</ulink>.
    13671367                   
    13681368                    If you want the documentation for a specific version you will
     
    13901390                    perhaps other feedback that concerns the program. As default
    13911391                    this is set to the feedback section on BASE web site,
    1392                     <ulink url="http://base.thep.lu.se/#Feedback">http://base.thep.lu.se/#Feedback</ulink>.
     1392                    <ulink url="https://base.thep.lu.se/#Feedback">https://base.thep.lu.se/#Feedback</ulink>.
    13931393                    Note that users must login in order to submit information.
    13941394                  </para>
  • trunk/doc/src/docbook/appendix/base.config.xml

    r7598 r7982  
    829829      If you want to setup your own test environment with a https server that only
    830830      accepts clients with a trusted certificate you can find some information about
    831       this on our wiki: <ulink url="http://base.thep.lu.se/wiki/HttpsFiles"
    832       >http://base.thep.lu.se/wiki/HttpsFiles</ulink>
     831      this on our wiki: <ulink url="https://base.thep.lu.se/wiki/HttpsFiles"
     832      >https://base.thep.lu.se/wiki/HttpsFiles</ulink>
    833833    </para>
    834834   
  • trunk/doc/src/docbook/appendix/coreplugins.xml

    r7640 r7982  
    4242  <para>
    4343    Contributed plug-ins are available at <ulink
    44     url="http://baseplugins.thep.lu.se" >http://baseplugins.thep.lu.se
     44    url="https://baseplugins.thep.lu.se" >https://baseplugins.thep.lu.se
    4545    </ulink>. These plug-ins are either developed outside the core team
    4646    or require external non-Java compilers and tools. These packages
  • trunk/doc/src/docbook/appendix/incompatible.xml

    r7681 r7982  
    201201      other clients that use a different client id are affected and may stop to work
    202202      until they have been updated to use the new API. For more information see
    203       <ulink url="http://base.thep.lu.se/ticket/2011">ticket 2011</ulink>.
     203      <ulink url="https://base.thep.lu.se/ticket/2011">ticket 2011</ulink>.
    204204    </para>
    205205   
     
    345345        event handlers and script sections since this is a possible entry
    346346        point for cross-site scripting attacks (see <ulink
    347           url="http://base.thep.lu.se/ticket/1712">ticket 1712</ulink>).
     347          url="https://base.thep.lu.se/ticket/1712">ticket 1712</ulink>).
    348348        Extension developers are encouraged to make the same changes in
    349349        their applications.
     
    469469      for the best user experience. The changes are too numerous so we can't
    470470      list them here. Please use the developers mailing list if specific
    471       information is needed or see <ulink url="http://base.thep.lu.se/ticket/1655">ticket
     471      information is needed or see <ulink url="https://base.thep.lu.se/ticket/1655">ticket
    472472      1655</ulink> for some screenshots and other information.
    473473    </para>
     
    484484      may cause problems for code that is expecting all annotations to be
    485485      available. See <classname docapi="net.sf.basedb.core">ReporterCloneTemplate</classname>
    486       and <ulink url="http://base.thep.lu.se/ticket/1616">ticket 1616</ulink>
     486      and <ulink url="https://base.thep.lu.se/ticket/1616">ticket 1616</ulink>
    487487      for more information.
    488488    </para>
     
    497497      this situation. Particulary, infinite loops must be avoided when traversing the "parent"
    498498      tree of an item (but this should already be in place since it can already happen due to
    499       mistakes when creating items). See <ulink url="http://base.thep.lu.se/ticket/1605">ticket 1605</ulink>
     499      mistakes when creating items). See <ulink url="https://base.thep.lu.se/ticket/1605">ticket 1605</ulink>
    500500      for more information.
    501501    </para>
     
    520520    <para>
    521521      The list of changes made in the various BASE 2.x releases can be found
    522       in the <ulink url="http://base.thep.lu.se/chrome/site/2.17/html/appendix/appendix.incompatible.html"
     522      in the <ulink url="https://base.thep.lu.se/chrome/site/2.17/html/appendix/appendix.incompatible.html"
    523523      >BASE 2.17 documentation</ulink>.
    524524    </para>
  • trunk/doc/src/docbook/appendix/update_warnings.xml

    r7916 r7982  
    571571      We only support updating to BASE 3 from BASE 2.17. If you have an older BASE
    572572      version and wish to update to BASE 3, you first have to upgrade to BASE 2.17.
    573       BASE 2.17 can be downloaded from the <ulink url="http://base.thep.lu.se/wiki/DownloadPage">BASE
     573      BASE 2.17 can be downloaded from the <ulink url="https://base.thep.lu.se/wiki/DownloadPage">BASE
    574574      download page</ulink>. Documentation for BASE 2.17 is available as part of the
    575       download and at <ulink url="http://base.thep.lu.se/chrome/site/2.17/html/index.html"
    576       >http://base.thep.lu.se/chrome/site/2.17/html/index.html</ulink>.
     575      download and at <ulink url="https://base.thep.lu.se/chrome/site/2.17/html/index.html"
     576      >https://base.thep.lu.se/chrome/site/2.17/html/index.html</ulink>.
    577577    </para>
    578578
  • trunk/doc/src/docbook/appendix/web.xml.xml

    r7609 r7982  
    6464        of a POST request instead. This functionality can disabled by
    6565        setting this value to 0. For more information see
    66         <ulink url="http://base.thep.lu.se/ticket/1032">http://base.thep.lu.se/ticket/1032</ulink>.
     66        <ulink url="https://base.thep.lu.se/ticket/1032">https://base.thep.lu.se/ticket/1032</ulink>.
    6767        </para>
    6868      </listitem>
  • trunk/doc/src/docbook/developer/base_api.xml

    r7640 r7982  
    24992499        This documentation is only available in the old format which may not be up-to-date with
    25002500        the current implementation.
    2501         See <ulink url="http://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/authentication.html"
    2502           >http://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/authentication.html</ulink>
     2501        See <ulink url="https://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/authentication.html"
     2502          >https://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/authentication.html</ulink>
    25032503      </para>
    25042504    </sect2>   
     
    25092509        This documentation is only available in the old format which may not be up-to-date with
    25102510        the current implementation.
    2511         See <ulink url="http://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/accesspermissions.html"
    2512           >http://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/accesspermissions.html</ulink>
     2511        See <ulink url="https://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/accesspermissions.html"
     2512          >https://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/accesspermissions.html</ulink>
    25132513      </para>
    25142514    </sect2>
     
    25312531        This documentation is only available in the old format which may not be up-to-date with
    25322532        the current implementation.
    2533         See <ulink url="http://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/itemhandling.html"
    2534           >http://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/itemhandling.html</ulink>
     2533        See <ulink url="https://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/itemhandling.html"
     2534          >https://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/itemhandling.html</ulink>
    25352535      </para>
    25362536    </sect2>   
     
    25402540        This documentation is only available in the old format which may not be up-to-date with
    25412541        the current implementation.
    2542         See <ulink url="http://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/batchprocessing.html"
    2543           >http://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/batchprocessing.html</ulink>
     2542        See <ulink url="https://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/batchprocessing.html"
     2543          >https://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/batchprocessing.html</ulink>
    25442544      </para>
    25452545    </sect2>   
     
    25562556        This documentation is only available in the old format which may not be up-to-date with
    25572557        the current implementation.
    2558         See <ulink url="http://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/plugins.html"
    2559           >http://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/plugins.html</ulink>
     2558        See <ulink url="https://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/plugins.html"
     2559          >https://base.thep.lu.se/chrome/site/doc/historical/development/overview/core/plugins.html</ulink>
    25602560      </para>
    25612561    </sect2>   
     
    31613161      This documentation is only available in the old format which may not be up-to-date with
    31623162      the current implementation.
    3163       See <ulink url="http://base.thep.lu.se/chrome/site/doc/historical/development/overview/query/index.html"
    3164         >http://base.thep.lu.se/chrome/site/doc/historical/development/overview/query/index.html</ulink>
     3163      See <ulink url="https://base.thep.lu.se/chrome/site/doc/historical/development/overview/query/index.html"
     3164        >https://base.thep.lu.se/chrome/site/doc/historical/development/overview/query/index.html</ulink>
    31653165    </para>
    31663166   
     
    31733173      This documentation is only available in the old format which may not be up-to-date with
    31743174      the current implementation.
    3175       See <ulink url="http://base.thep.lu.se/chrome/site/doc/historical/development/overview/dynamic/index.html"
    3176         >http://base.thep.lu.se/chrome/site/doc/historical/development/overview/dynamic/index.html</ulink>
     3175      See <ulink url="https://base.thep.lu.se/chrome/site/doc/historical/development/overview/dynamic/index.html"
     3176        >https://base.thep.lu.se/chrome/site/doc/historical/development/overview/dynamic/index.html</ulink>
    31773177    </para>
    31783178  </sect1>
  • trunk/doc/src/docbook/developer/core_ref.xml

    r6912 r7982  
    3131    <title>Publishing a new release</title>
    3232    <para>
    33       This documentation is available on the <ulink url="http://base.thep.lu.se/wiki/ReleaseProcedure">BASE wiki</ulink>.
     33      This documentation is available on the <ulink url="https://base.thep.lu.se/wiki/ReleaseProcedure">BASE wiki</ulink>.
    3434    </para>
    3535  </sect1>
     
    3838    <title>Subversion / building BASE</title>
    3939    <para>
    40       This documentation is available on the <ulink url="http://base.thep.lu.se/wiki/BuildingBase">BASE wiki</ulink>.
     40      This documentation is available on the <ulink url="https://base.thep.lu.se/wiki/BuildingBase">BASE wiki</ulink>.
    4141    </para>
    4242  </sect1>
     
    586586
    587587   This file is part of BASE - BioArray Software Environment.
    588    Available at http://base.thep.lu.se/
     588   Available at https://base.thep.lu.se/
    589589
    590590   BASE is free software; you can redistribute it and/or
     
    30693069
    30703070  This file is part of BASE - BioArray Software Environment.
    3071   Available at http://base.thep.lu.se/
     3071  Available at https://base.thep.lu.se/
    30723072
    30733073  BASE is free software; you can redistribute it and/or
  • trunk/doc/src/docbook/developer/documentation.xml

    r6576 r7982  
    13521352<xref linkend="docbook.usedtags.links" />
    13531353<link linkend="docbook.usedtags.links">Link to this section</link>
    1354 <ulink url="http://base.thep.lu.se">Base2's homepage</ulink>
     1354<ulink url="https://base.thep.lu.se">Base2's homepage</ulink>
    13551355]]>
    13561356</programlisting>
     
    18571857    <para>
    18581858      Existing Javadoc documentation is available on-line at:
    1859       <ulink url="http://base.thep.lu.se/chrome/site/doc/api/index.html"
    1860         >http://base.thep.lu.se/chrome/site/doc/api/index.html</ulink>.
     1859      <ulink url="https://base.thep.lu.se/chrome/site/doc/api/index.html"
     1860        >https://base.thep.lu.se/chrome/site/doc/api/index.html</ulink>.
    18611861    </para>
    18621862   
  • trunk/doc/src/docbook/developer/extensions.xml

    r7915 r7982  
    8181        The code examples in this chapter can be downloaded from the
    8282        BASE plug-ins site:
    83         <ulink url="http://baseplugins.thep.lu.se/wiki/net.sf.basedb.examplecode"
    84         >http://baseplugins.thep.lu.se/wiki/net.sf.basedb.examplecode</ulink>
     83        <ulink url="https://baseplugins.thep.lu.se/wiki/net.sf.basedb.examplecode"
     84        >https://baseplugins.thep.lu.se/wiki/net.sf.basedb.examplecode</ulink>
    8585      </para>
    8686    </sect2>
     
    19431943        BASE doesn't ship with any service, but there is an FTP service
    19441944        available at the BASE plug-ins site: <ulink
    1945         url="http://baseplugins.thep.lu.se/wiki/net.sf.basedb.ftp">
    1946         http://baseplugins.thep.lu.se/wiki/net.sf.basedb.ftp</ulink>
     1945        url="https://baseplugins.thep.lu.se/wiki/net.sf.basedb.ftp">
     1946        https://baseplugins.thep.lu.se/wiki/net.sf.basedb.ftp</ulink>
    19471947      </para>
    19481948    </sect2>
     
    19911991        The BASE plug-ins site has an connection manager that support
    19921992        external files via FTP and SFTP: <ulink
    1993         url="http://baseplugins.thep.lu.se/wiki/net.sf.basedb.xfiles">
    1994         http://baseplugins.thep.lu.se/wiki/net.sf.basedb.xfiles</ulink>
     1993        url="https://baseplugins.thep.lu.se/wiki/net.sf.basedb.xfiles">
     1994        https://baseplugins.thep.lu.se/wiki/net.sf.basedb.xfiles</ulink>
    19951995      </para>
    19961996     
     
    24862486        factory that can be used without coding if the added column can be expressed as a property path that
    24872487        can be handled by the <classname docapi="net.sf.basedb.core">Metadata</classname> class.
    2488         As usual, see the <ulink url="http://baseplugins.thep.lu.se/wiki/net.sf.basedb.examplecode">example code</ulink>
     2488        As usual, see the <ulink url="https://baseplugins.thep.lu.se/wiki/net.sf.basedb.examplecode">example code</ulink>
    24892489        for some examples.
    24902490      </para>
     
    25162516        extension with a custom column that uses the <code>!x.</code> prefix
    25172517        as the column id. Here is an example from the Variant Search extension
    2518         (<ulink url="http://baseplugins.thep.lu.se/wiki/net.sf.basedb.varsearch"
    2519         >http://baseplugins.thep.lu.se/wiki/net.sf.basedb.varsearch</ulink>):
     2518        (<ulink url="https://baseplugins.thep.lu.se/wiki/net.sf.basedb.varsearch"
     2519        >https://baseplugins.thep.lu.se/wiki/net.sf.basedb.varsearch</ulink>):
    25202520      </para>
    25212521     
     
    26032603          login with some other method. Examples of actual implementations can be found in the
    26042604          the <ulink
    2605           url="http://baseplugins.thep.lu.se/wiki/net.sf.basedb.yubikey">YubiKey</ulink>
     2605          url="https://baseplugins.thep.lu.se/wiki/net.sf.basedb.yubikey">YubiKey</ulink>
    26062606          and <ulink
    2607           url="http://baseplugins.thep.lu.se/wiki/net.sf.basedb.otp">OTP</ulink> extensions.
     2607          url="https://baseplugins.thep.lu.se/wiki/net.sf.basedb.otp">OTP</ulink> extensions.
    26082608        </para>
    26092609       
  • trunk/doc/src/docbook/developer/migrate_2_3.xml

    r6576 r7982  
    5252    <itemizedlist>
    5353      <listitem>
    54         <para><ulink url="http://base.thep.lu.se/chrome/site/2.17/html/index.html">http://base.thep.lu.se/chrome/site/2.17/html/index.html</ulink>:
     54        <para><ulink url="https://base.thep.lu.se/chrome/site/2.17/html/index.html">https://base.thep.lu.se/chrome/site/2.17/html/index.html</ulink>:
    5555        User manual.
    5656        </para>
    5757      </listitem>
    5858      <listitem>
    59         <para><ulink url="http://base.thep.lu.se/chrome/site/2.17/api/index.html">http://base.thep.lu.se/chrome/site/2.17/api/index.html</ulink>:
     59        <para><ulink url="https://base.thep.lu.se/chrome/site/2.17/api/index.html">https://base.thep.lu.se/chrome/site/2.17/api/index.html</ulink>:
    6060        API documentation.
    6161        </para>
     
    133133      You'll need to make sure that your build system can handle this.
    134134      The BASE JAR files can be downloaded from
    135       <ulink url="http://base.thep.lu.se/chrome/site/files/base/jars/">http://base.thep.lu.se/chrome/site/files/base/jars/</ulink>.
     135      <ulink url="https://base.thep.lu.se/chrome/site/files/base/jars/">https://base.thep.lu.se/chrome/site/files/base/jars/</ulink>.
    136136    </note>
    137137   
     
    170170          Additionally, several other items implement the new <interfacename
    171171          docapi="net.sf.basedb.core">Subtypable</interfacename> interface.
    172           See <ulink url="http://base.thep.lu.se/ticket/1597">ticket #1597 (Subtypes of items)</ulink>
     172          See <ulink url="https://base.thep.lu.se/ticket/1597">ticket #1597 (Subtypes of items)</ulink>
    173173          for more information.
    174174        </para>
     
    189189          converted to a physical bioassay in BASE 3 with the subtype 'Hybridization'. The
    190190          server admin can define additional subtypes. See
    191           <ulink url="http://base.thep.lu.se/ticket/1153">ticket #1153 (Handling short read
     191          <ulink url="https://base.thep.lu.se/ticket/1153">ticket #1153 (Handling short read
    192192          transcript sequence data)</ulink> for more information.
    193193         
     
    212212          <xref linkend="extensions_developer.fileset_validator"/> and
    213213          <ulink
    214           url="http://base.thep.lu.se/ticket/1598">ticket #1598 (Use
     214          url="https://base.thep.lu.se/ticket/1598">ticket #1598 (Use
    215215          the extensions system for data file validators and metadata readers)</ulink> for more information.
    216216        </para>
     
    222222          store more than one file for each <classname docapi="net.sf.basedb.core">DataFileType</classname>
    223223          which was not possible before. The API for adding files have changed.
    224           See <ulink url="http://base.thep.lu.se/ticket/1604">ticket #1604
     224          See <ulink url="https://base.thep.lu.se/ticket/1604">ticket #1604
    225225          (Support for multiple files of the same type in a FileSet)</ulink> for
    226226          more information.
     
    235235          make it possible to get information about the main zip/tar file that is being
    236236          unpacked. See <ulink
    237           url="http://base.thep.lu.se/ticket/978">ticket #978 (Unzipped files never inherit
     237          url="https://base.thep.lu.se/ticket/978">ticket #978 (Unzipped files never inherit
    238238          file type specified during upload)</ulink> for more information.
    239239        </para>
     
    248248          a moderate computer today. If additional security is needed we recommend that
    249249          BASE is installed with HTTPS access only. See <ulink
    250           url="http://base.thep.lu.se/ticket/1641">ticket #1641 (Use bcrypt for storing
     250          url="https://base.thep.lu.se/ticket/1641">ticket #1641 (Use bcrypt for storing
    251251          passwords instead of MD5)</ulink> for more information.
    252252        </para>
     
    300300          <xref linkend="plugins.installation" /> and
    301301          <ulink
    302           url="http://base.thep.lu.se/ticket/1592">ticket #1592 (Unified installation
     302          url="https://base.thep.lu.se/ticket/1592">ticket #1592 (Unified installation
    303303          procedure for plug-ins, extensions and more...)</ulink> for more information.
    304304        </para>
     
    311311          JAR file. The <property>Class-Path</property> attribute in <filename>META-INF/MANIFEST.MF</filename>
    312312          must still be set. See <xref linkend="plugin_developer.organize"/> and <ulink
    313           url="http://base.thep.lu.se/ticket/1594">ticket #1594 (JarClassLoader support for JARs within JARs)</ulink>.
     313          url="https://base.thep.lu.se/ticket/1594">ticket #1594 (JarClassLoader support for JARs within JARs)</ulink>.
    314314        </para>
    315315      </listitem>
  • trunk/doc/src/docbook/developer/overview.xml

    r6465 r7982  
    455455        <listitem>
    456456          <para>
    457           The <ulink url="http://baseplugins.thep.lu.se">BASE plug-ins site</ulink> also
     457          The <ulink url="https://baseplugins.thep.lu.se">BASE plug-ins site</ulink> also
    458458          has examples of extensions.
    459459          </para>
  • trunk/doc/src/docbook/developer/plugins.xml

    r7598 r7982  
    37273727        since code doesn't have to be installed in the
    37283728        WEB-INF/lib or WEB-INF/classes directory. See <ulink
    3729         url="http://base.thep.lu.se/ticket/1600">ticket #1600: Convert file
     3729        url="https://base.thep.lu.se/ticket/1600">ticket #1600: Convert file
    37303730        packing plug-in system to an extension point</ulink> for more information.
    37313731        </para>
     
    40214021      You can download a tar file with the source and compiled plug-in code from
    40224022      the BASE plug-ins website:
    4023       <ulink url="http://baseplugins.thep.lu.se/wiki/net.sf.basedb.examplecode"
    4024       >http://baseplugins.thep.lu.se/wiki/net.sf.basedb.examplecode</ulink>
     4023      <ulink url="https://baseplugins.thep.lu.se/wiki/net.sf.basedb.examplecode"
     4024      >https://baseplugins.thep.lu.se/wiki/net.sf.basedb.examplecode</ulink>
    40254025    </para>
    40264026   
  • trunk/doc/src/docbook/faq/faqs.xml

    r5820 r7982  
    453453                <para>
    454454                Submit a ticket through
    455                 <ulink url="http://base.thep.lu.se">http://base.thep.lu.se</ulink>
     455                <ulink url="https://base.thep.lu.se">https://base.thep.lu.se</ulink>
    456456                explaining what you'd like to see with respect to to CDT and CAB files.
    457457                </para>
     
    477477            <para>
    478478              Yes, but not by default. There is
    479               an <ulink url="http://baseplugins.thep.lu.se/wiki/net.sf.basedb.illumina">Illumina
     479              an <ulink url="https://baseplugins.thep.lu.se/wiki/net.sf.basedb.illumina">Illumina
    480480              package</ulink> that provides Illumina support to
    481481              BASE. The package is straightforward to install, visit
     
    526526              though even though this might depend on your set-up...)
    527527              The plug-in is not included in a standard BASE installation, but
    528               can be downloaded from the <ulink url="http://baseplugins.thep.lu.se/wiki/se.lu.thep.affymetrix"
     528              can be downloaded from the <ulink url="https://baseplugins.thep.lu.se/wiki/se.lu.thep.affymetrix"
    529529                >BASE plug-ins web site</ulink>.
    530530            </para>
  • trunk/doc/src/docbook/overview/features.xml

    r6465 r7982  
    158158      of tools are pre-installed with BASE, and optional plug-ins can
    159159      be downloaded from the <ulink
    160       url="http://baseplugins.thep.lu.se">BASE plug-in site
     160      url="https://baseplugins.thep.lu.se">BASE plug-in site
    161161      </ulink>. BASE capitalise from other software tools, such as
    162162      MEV, by integrating them into the user interface. Such
     
    257257      BASE comes with a specific Affymetrix platform and Illumina can
    258258      be supported by customising BASE (go to the <ulink
    259       url="http://baseplugins.thep.lu.se/wiki/net.sf.basedb.illumina">
     259      url="https://baseplugins.thep.lu.se/wiki/net.sf.basedb.illumina">
    260260      Illumina package</ulink> web site for more information on adding
    261261      Illumina support to BASE).
     
    335335              platform support is not included in a standard BASE
    336336              installation but there is a <ulink
    337               url="http://baseplugins.thep.lu.se/wiki/net.sf.basedb.illumina">
     337              url="https://baseplugins.thep.lu.se/wiki/net.sf.basedb.illumina">
    338338              Illumina package</ulink> available for seamless
    339339              integration of the Illumina array platform to BASE.
     
    472472              Not available in BASE directly but it is added with the
    473473              <ulink
    474               url="http://baseplugins.thep.lu.se/wiki/net.sf.basedb.illumina">
     474              url="https://baseplugins.thep.lu.se/wiki/net.sf.basedb.illumina">
    475475              Illumina plug-in</ulink> that adds Illumina array
    476476              platform support to BASE.
  • trunk/doc/src/docbook/overview/resources.xml

    r6576 r7982  
    3838    <para>
    3939      The BASE project site is located at
    40       <ulink url='http://base.thep.lu.se'>http://base.thep.lu.se</ulink>.
     40      <ulink url='https://base.thep.lu.se'>https://base.thep.lu.se</ulink>.
    4141      Here is a lot of useful information about the project and the program, e.g.
    4242      documentation/manuals, download-pages, contact information and much more. The most
     
    4848        The download page is accessed from the download section, on the home page, by
    4949        following the link to
    50         <guilabel><ulink url='http://base.thep.lu.se/wiki/DownloadPage'
     50        <guilabel><ulink url='https://base.thep.lu.se/wiki/DownloadPage'
    5151          >Download Page</ulink></guilabel>.
    5252        From this page you can download BASE releases as packaged tar.gz
     
    110110        A ticket is a note about a bug or a new feature that has not yet been
    111111        implemented. To show the list of outstanding tickets use the
    112         <guibutton><ulink url="http://base.thep.lu.se/query"
     112        <guibutton><ulink url="https://base.thep.lu.se/query"
    113113          >View Tickets</ulink></guibutton> button on BASE web site.
    114114        It is a good idea to have a look at this list before reporting a bug
     
    131131      <para>
    132132        The roadmap of BASE is accessed from the
    133         <guibutton><ulink url="http://base.thep.lu.se/roadmap"
     133        <guibutton><ulink url="https://base.thep.lu.se/roadmap"
    134134          >Roadmap</ulink></guibutton> button on the home page. This page
    135135        contains information about the plans for future development, including
     
    197197      Plug-ins which are not included in the installation of BASE, have their own site,
    198198      called
    199       <ulink url="http://baseplugins.thep.lu.se/">BASE plug-ins web site</ulink>
     199      <ulink url="https://baseplugins.thep.lu.se/">BASE plug-ins web site</ulink>
    200200      which includes a download page for submitted none-core plug-ins.     
    201201      Here is also information how to become a plug-in developer, with
     
    211211      explore BASE without having to install it. Follow the link on
    212212      BASE web site to the demo server or go directly to
    213       <ulink url="http://base.onk.lu.se/demo/">
    214         http://base.onk.lu.se/demo/
     213      <ulink url="https://base.onk.lu.se/demo/">
     214        https://base.onk.lu.se/demo/
    215215      </ulink>. NOTE! The demo server is currently down!
    216216    </para>
     
    229229    <para>
    230230      BASE project has three different mailing lists available for subscription. Visit the
    231       <ulink url="http://base.thep.lu.se/wiki/MailingLists">mailing list page</ulink>
     231      <ulink url="https://base.thep.lu.se/wiki/MailingLists">mailing list page</ulink>
    232232      to get more information about each one of the mailing lists. All posted mails are saved
    233233      in an archive for each list, it can therefore be a good idea to have a look here before
  • trunk/doc/src/docbook/overview/why_base.xml

    r5844 r7982  
    104104      BASE. This implies interplay with adopting the BASE software
    105105      (the <ulink
    106       url='http://baseplugins.thep.lu.se/wiki/net.sf.basedb.reggie'>Reggie
     106      url='https://baseplugins.thep.lu.se/wiki/net.sf.basedb.reggie'>Reggie
    107107      extension</ulink> is an example of adaptation on BASE to
    108108      specific needs in SCAN-B) and the laboratory work to achieve
  • trunk/doc/src/docbook/user/file_system.xml

    r7598 r7982  
    635635                On this tab you may specify options for SSH connections. BASE has not
    636636                built-in support for SSH but this can be enabled via plug-ins.
    637                 See the <ulink url="http://baseplugins.thep.lu.se/wiki/net.sf.basedb.xfiles">External
     637                See the <ulink url="https://baseplugins.thep.lu.se/wiki/net.sf.basedb.xfiles">External
    638638                files support</ulink> extension package.
    639639              </para>
  • trunk/doc/src/docbook/user/webclient.xml

    r7847 r7982  
    4747        <para>
    4848          You may, for example, try the BASE demo server. Go to the
    49           URL <ulink url="http://base.onk.lu.se/demo/">http://base.onk.lu.se/demo/</ulink>
     49          URL <ulink url="https://base.onk.lu.se/demo/">https://base.onk.lu.se/demo/</ulink>
    5050          and enter <userinput>base2</userinput> for the login and <userinput>base2</userinput>
    5151          for the password. NOTE! The demo server is currently down!
     
    22792279        </varlistentry>
    22802280       
    2281        
     2281        <varlistentry>
     2282          <term><guilabel>Sticky column</guilabel></term>
     2283          <listitem>
     2284            <para>
     2285              In most lists one column can be selected to be <emphasis>sticky</emphasis>,
     2286              which means that it will always be visible and stick to either the left or right
     2287              side of the browser window when scrolling would take outside the visible area.
     2288              In most lists the <guilabel>Name</guilabel> column is the default sticky
     2289              column.
     2290            </para>
     2291          </listitem>
     2292        </varlistentry>
     2293               
    22822294        <varlistentry>
    22832295          <term><guilabel>Presets</guilabel></term>
  • trunk/doc/src/javadoc/overview.html

    r5818 r7982  
    3030  or plug-in developers. We guarantee a certain degree of stability
    3131  among the classes and methods in the public API. See documentation
    32   on the <a href="http://base.thep.lu.se/chrome/site/doc/docbook/html/developerdoc/api/api_overview.html"
     32  on the <a href="https://base.thep.lu.se/chrome/site/doc/docbook/html/developerdoc/api/api_overview.html"
    3333    >BASE web site</a> for more information.
    3434  Methods that have been tagged as <code>@deprecated</code> should be considered
  • trunk/doc/test/performance/index.html

    r4889 r7982  
    44
    55  Copyright (C) 2007 Nicklas Nordborg
    6   Copyright (C) 2008 Jari Häkkinen
     6  Copyright (C) 2008 Jari Hkkinen
    77
    88  This file is part of BASE - BioArray Software Environment.
     
    7878    make them publicly available for download. To get the test file you need to be a
    7979    core developer. Read the instructions on the
    80     <a href="http://base.thep.lu.se/wiki/DeveloperInformation">DeveloperInformation</a>
     80    <a href="https://base.thep.lu.se/wiki/DeveloperInformation">DeveloperInformation</a>
    8181    page, <code>Test data</code> section on the Base 2 web site.
    8282  </p>
  • trunk/doc/test/roles/index.html

    r7052 r7982  
    143143    make them publicly available for download. To get the test file you need to be a
    144144    core developer. Read the instructions on the
    145     <a href="http://base.thep.lu.se/wiki/DeveloperInformation">DeveloperInformation</a>
     145    <a href="https://base.thep.lu.se/wiki/DeveloperInformation">DeveloperInformation</a>
    146146    page, <code>Test data</code> section on the BASE web site. The automated
    147147    test programs require that file are placed (checked out) in the 'testdata'
  • trunk/src/clients/web/net/sf/basedb/clients/web/Base.java

    r7962 r7982  
    532532    {
    533533      cc.setObject("defaultColumns", defaultContext.getObject("defaultColumns"));
     534      cc.setObject("defaultColumns.sticky", defaultContext.getObject("defaultColumns.sticky"));
    534535    }
    535536    if (request != null)
     
    567568      // Visible columns
    568569      cc.setSetting("columns", Values.getString(Values.getStringOrNull(request.getParameter("columns")), cc.getSetting("columns")));
     570      // Sticky column
     571      String stickyCol = Values.getStringOrNull(request.getParameter("sticky_column"));
     572      if (stickyCol != null) cc.setSetting("columns.sticky", stickyCol);
    569573
    570574      // Page settings, ignore negative values, 'rowsperpage' setting may come as an
     
    991995 
    992996  /**
     997    Create a default context where the sortProperty is also used as
     998    the default sticky column.
     999    @see #createDefaultContext(String, String, String)
     1000  */
     1001  public static ItemContext createDefaultContext(String sortProperty, String defaultColumns)
     1002  {
     1003    return createDefaultContext(sortProperty, defaultColumns, sortProperty);
     1004  }
     1005
     1006  /**
    9931007    Create a default <code>ItemContext</code> with settings for default
    9941008    visible columns and sort property. 'MINE' and 'SHARED' objects are set to be included.
     
    9961010      a '-', the sort is made in descending order (and the minus is removed)
    9971011    @param defaultColumns The visible columns as a comma separated String.
     1012    @param stickyColumn The default sticky column or null to not use a sticky column
    9981013    @return an {@link net.sf.basedb.core.ItemContext} object
    999   */
    1000   public static ItemContext createDefaultContext(String sortProperty, String defaultColumns)
     1014    @since 3.18.2
     1015  */
     1016  public static ItemContext createDefaultContext(String sortProperty, String defaultColumns, String stickyColumn)
    10011017  {
    10021018    SortDirection sortDirection = SortDirection.ASC;
     
    10091025    cc.setSetting("columns", defaultColumns);
    10101026    cc.setObject("defaultColumns", defaultColumns);
     1027    if (stickyColumn != null)
     1028    {
     1029      cc.setSetting("columns.sticky", stickyColumn);
     1030      cc.setObject("defaultColumns.sticky", stickyColumn);
     1031    }
    10111032    cc.getInclude().add(Include.MINE);
    10121033    cc.getInclude().add(Include.SHARED);
  • trunk/src/clients/web/net/sf/basedb/clients/web/ExperimentExplorer.java

    r7703 r7982  
    138138  */
    139139  private static final ItemContext defaultReporterContext =
    140     Base.createDefaultContext("@externalId", "externalId,symbol");
     140    Base.createDefaultContext("@externalId", "externalId,symbol", "externalId");
    141141 
    142142  /**
  • trunk/src/clients/web/net/sf/basedb/clients/web/taglib/table/Table.java

    r7943 r7982  
    742742    addHidden("sortby", getSortby());
    743743    addHidden("direction", getDirection().name());
     744    if (hasStickyHeaders()) addHidden("sticky_column", getStickyCol());
    744745   
    745746    if (sc != null && itemType != null)
  • trunk/src/clients/web/web-extensions.xml

    r7850 r7982  
    3535    <copyright>BASE development team</copyright>
    3636    <email>basedb-users@lists.sourceforge.net</email>
    37     <url>http://base.thep.lu.se/</url>
     37    <url>https://base.thep.lu.se/</url>
    3838  </about>
    3939 
  • trunk/src/core/core-extensions.xml

    r7895 r7982  
    3535    <copyright>BASE development team</copyright>
    3636    <email>basedb-users@lists.sourceforge.net</email>
    37     <url>http://base.thep.lu.se/</url>
     37    <url>https://base.thep.lu.se/</url>
    3838  </about>
    3939 
  • trunk/src/core/net/sf/basedb/core/HibernateUtil.java

    r7947 r7982  
    2929import net.sf.basedb.core.data.MessageData;
    3030import net.sf.basedb.core.data.RemovableData;
     31import net.sf.basedb.core.data.SessionData;
    3132import net.sf.basedb.core.data.OwnableData;
    3233import net.sf.basedb.core.data.ShareableData;
     
    3435import net.sf.basedb.core.data.NewsData;
    3536import net.sf.basedb.core.data.UserData;
     37import net.sf.basedb.core.data.UserDeviceData;
    3638import net.sf.basedb.core.dbengine.DbEngine;
    3739import net.sf.basedb.core.dbengine.EngineFactory;
     
    572574        defineFilter(classTag, itemType, "ownedBy", ":owner = `to_user_id`", filterConfig);
    573575        defineFilter(classTag, itemType, "ownedOrRemovedBy", "(:user = `to_user_id` OR :user = `removed_by`)", filterConfig);
     576      }
     577      if (SessionData.class.isAssignableFrom(c))
     578      {
     579        log.info("Adding 'ownedBy' filter to " + c.getName());
     580        defineFilter(classTag, itemType, "ownedBy", ":owner = `user_id`", filterConfig);
     581      }
     582      if (UserDeviceData.class.isAssignableFrom(c))
     583      {
     584        log.info("Adding 'ownedBy' filter to " + c.getName());
     585        defineFilter(classTag, itemType, "ownedBy", ":owner = `user_id`", filterConfig);
    574586      }
    575587      if (AnnotationData.class.isAssignableFrom(c))
  • trunk/src/core/net/sf/basedb/core/ItemContext.java

    r7911 r7982  
    14251425  {
    14261426    return settings == null ? null : settings.get(name);
     1427  }
     1428 
     1429  /**
     1430    Get a value from the settings or the default value
     1431    if no current value exists.
     1432    @since 3.18.2
     1433  */
     1434  public String getSetting(String name, String defaultValue)
     1435  {
     1436    String s = getSetting(name);
     1437    return s == null ? defaultValue : s;
    14271438  }
    14281439 
  • trunk/src/core/net/sf/basedb/core/Message.java

    r7738 r7982  
    2828import net.sf.basedb.core.hibernate.TypeWrapper;
    2929import net.sf.basedb.core.query.Restrictions;
     30import net.sf.basedb.core.query.EntityQuery;
    3031import net.sf.basedb.core.query.Hql;
    3132import net.sf.basedb.util.EmailUtil;
     
    5657  */
    5758  public static final Item TYPE = Item.MESSAGE;
     59
     60  /**
     61    This filter will limit a query to only return messages
     62    for the logged in user unless the logged in user has generic
     63    read permission.
     64  */
     65  private static final QueryRuntimeFilter RUNTIME_FILTER = new QueryRuntimeFilterImpl();
    5866
    5967  /**
     
    165173  public static ItemQuery<Message> getQuery(User user)
    166174  {
    167     ItemQuery<Message> query = null;
    168    
     175    ItemQuery<Message> query = new ItemQuery<Message>(Message.class, RUNTIME_FILTER);
    169176    if (user != null)
    170177    {
    171       query = new ItemQuery<Message>(Message.class, null);
    172178      query.restrictPermanent(
    173179        Restrictions.eq(
     
    176182        )
    177183      );
    178     }
    179     else
    180     {
    181       query = new ItemQuery<Message>(Message.class);
    182184    }
    183185    return query;
     
    468470  }
    469471 
     472  /**
     473    A runtime filter implementation that limits a query to only
     474    return messages for the currently logged in user unless the logged
     475    in user has generic read permission.
     476  */
     477  private static class QueryRuntimeFilterImpl
     478    implements QueryRuntimeFilter
     479  {
     480    @Override
     481    public void enableFilters(QueryRuntimeFilterManager manager, EntityQuery query, DbControl dc)
     482    {
     483      SessionControl sc = dc.getSessionControl();
     484      if (sc.isDenied(query.getItemPermission(), query.getItemType()) || !sc.isLoggedIn())
     485      {
     486        manager.enableFilter("denyAll");
     487      }
     488      else if (query.isIncluded(Include.OTHERS) &&
     489        sc.hasPermission(query.getItemPermission(), query.getItemType()))
     490      {
     491        // Logged in user has generic permission and wants other user's items... --> no filter
     492      }
     493      else
     494      {
     495        // Load sessions for the logged in user
     496        org.hibernate.Filter filter = manager.enableFilter("ownedBy");
     497        if (filter != null)
     498        {
     499          filter.setParameter("owner", sc.getLoggedInUserId());
     500        }
     501      }
     502    }
     503  }
     504
    470505}
  • trunk/src/core/net/sf/basedb/core/Session.java

    r7900 r7982  
    2626import net.sf.basedb.core.hibernate.TypeWrapper;
    2727import net.sf.basedb.core.query.Restrictions;
     28import net.sf.basedb.core.query.EntityQuery;
    2829import net.sf.basedb.core.query.Hql;
    2930
     
    4950  */
    5051  public static final Item TYPE = Item.SESSION;
     52
     53  /**
     54    This filter will limit a query to only return sessions
     55    for the logged in user unless the logged in user has generic
     56    read permission.
     57  */
     58  private static final QueryRuntimeFilter RUNTIME_FILTER = new QueryRuntimeFilterImpl();
    5159
    5260  /**
     
    7482    Get a query configured to retrieve sessions for the specified user.
    7583   
    76     @param user The user to retreive sessions for, null is allowed if
    77       the logged in user has generic READ permission for sessions in which case
    78       all sessions will be returned
     84    @param user The user to retreive sessions for or null to load all
     85      sessions.
    7986    @return An {@link ItemQuery} object
    8087  */
    8188  public static ItemQuery<Session> getQuery(User user)
    8289  {
    83     ItemQuery<Session> query = null;
    84    
     90    ItemQuery<Session> query = new ItemQuery<Session>(Session.class, RUNTIME_FILTER);;
    8591    if (user != null)
    8692    {
    87       query = new ItemQuery<Session>(Session.class, null);
    8893      query.restrictPermanent(
    8994        Restrictions.eq(
     
    9297        )
    9398      );
    94     }
    95     else
    96     {
    97       query = new ItemQuery<Session>(Session.class);
    9899    }
    99100    return query;
     
    307308    return getData().getAuthenticationMethod();
    308309  }
     310 
     311  /**
     312    A runtime filter implementation that limits a query to only
     313    return sessions for the currently logged in user unless the logged
     314    in user has generic read permission.
     315  */
     316  private static class QueryRuntimeFilterImpl
     317    implements QueryRuntimeFilter
     318  {
     319    @Override
     320    public void enableFilters(QueryRuntimeFilterManager manager, EntityQuery query, DbControl dc)
     321    {
     322      SessionControl sc = dc.getSessionControl();
     323      if (sc.isDenied(query.getItemPermission(), query.getItemType()) || !sc.isLoggedIn())
     324      {
     325        manager.enableFilter("denyAll");
     326      }
     327      else if (query.isIncluded(Include.OTHERS) &&
     328        sc.hasPermission(query.getItemPermission(), query.getItemType()))
     329      {
     330        // Logged in user has generic permission and wants other user's items... --> no filter
     331      }
     332      else
     333      {
     334        // Load sessions for the logged in user
     335        org.hibernate.Filter filter = manager.enableFilter("ownedBy");
     336        if (filter != null)
     337        {
     338          filter.setParameter("owner", sc.getLoggedInUserId());
     339        }
     340      }
     341    }
     342  }
     343
    309344}
    310345
  • trunk/src/core/net/sf/basedb/core/UserDevice.java

    r7818 r7982  
    2424import net.sf.basedb.core.data.UserDeviceData;
    2525import net.sf.basedb.core.query.Restrictions;
     26import net.sf.basedb.core.query.EntityQuery;
    2627import net.sf.basedb.core.query.Hql;
    2728
     
    4748
    4849  /**
     50    This filter will limit a query to only return devices
     51    for the logged in user unless the logged in user has generic
     52    read permission.
     53  */
     54  private static final QueryRuntimeFilter RUNTIME_FILTER = new QueryRuntimeFilterImpl();
     55
     56  /**
    4957    Get a <code>UserDevice</code> item when you know the ID.
    5058
     
    7280  public static ItemQuery<UserDevice> getQuery(User user)
    7381  {
    74     ItemQuery<UserDevice> query = null;
    75    
     82    ItemQuery<UserDevice> query = new ItemQuery<UserDevice>(UserDevice.class, RUNTIME_FILTER);
    7683    if (user != null)
    7784    {
    78       query = new ItemQuery<UserDevice>(UserDevice.class, null);
    7985      query.restrictPermanent(
    8086        Restrictions.eq(
     
    8490      );
    8591    }
    86     else
    87     {
    88       query = new ItemQuery<UserDevice>(UserDevice.class);
    89     }
    9092    return query;
    9193  }
     
    283285  }
    284286 
     287  /**
     288    A runtime filter implementation that limits a query to only
     289    return devices for the currently logged in user unless the logged
     290    in user has generic read permission.
     291  */
     292  private static class QueryRuntimeFilterImpl
     293    implements QueryRuntimeFilter
     294  {
     295    @Override
     296    public void enableFilters(QueryRuntimeFilterManager manager, EntityQuery query, DbControl dc)
     297    {
     298      SessionControl sc = dc.getSessionControl();
     299      if (sc.isDenied(query.getItemPermission(), query.getItemType()) || !sc.isLoggedIn())
     300      {
     301        manager.enableFilter("denyAll");
     302      }
     303      else if (query.isIncluded(Include.OTHERS) &&
     304        sc.hasPermission(query.getItemPermission(), query.getItemType()))
     305      {
     306        // Logged in user has generic permission and wants other user's items... --> no filter
     307      }
     308      else
     309      {
     310        // Load sessions for the logged in user
     311        org.hibernate.Filter filter = manager.enableFilter("ownedBy");
     312        if (filter != null)
     313        {
     314          filter.setParameter("owner", sc.getLoggedInUserId());
     315        }
     316      }
     317    }
     318  }
     319
    285320}
    286321
  • trunk/src/install/net/sf/basedb/install/Webclient.java

    r7947 r7982  
    137137      createSetting(client, "server.transferRate", Integer.toString(100 * 1024 * 1024)); // 100MB/s
    138138      createSetting(client, "server.transferRate.download", Integer.toString(0)); // No limit
    139       createSetting(client, "server.links.reportbug", "http://base.thep.lu.se/#Feedback");
    140       createSetting(client, "server.links.help", "http://base.thep.lu.se/chrome/site/latest/html/index.html");
     139      createSetting(client, "server.links.reportbug", "https://base.thep.lu.se/#Feedback");
     140      createSetting(client, "server.links.help", "https://base.thep.lu.se/chrome/site/latest/html/index.html");
    141141      createSetting(client, "server.links.faq", "");
    142142     
  • trunk/src/plugins/core/core-plugins.xml

    r7849 r7982  
    3434    <copyright>BASE development team</copyright>
    3535    <email>basedb-users@lists.sourceforge.net</email>
    36     <url>http://base.thep.lu.se/</url>
     36    <url>https://base.thep.lu.se/</url>
    3737  </about>
    3838 
  • trunk/src/test/TestFile.java

    r7548 r7982  
    7878    int id2 = test_create("data/test.upload.txt", false, false);
    7979    int baseTracServer = TestFileServer.test_create("base.thep.lu.se", "BASE trac site",
    80         "base", "base", null, null, null);
     80        "base", "base", "data/base.thep.lu.se.crt", null, null);
    8181    int base2DemoServer = TestFileServer.test_create("base.onk.lu.se", "BASE demo site", null, null,
    8282        "data/base.onk.lu.se.crt", null, null);
    83     int extId1 = test_create("http://base.thep.lu.se/robots.txt", false, false);
     83    int extId1 = test_create("https://base.thep.lu.se/robots.txt", false, false);
    8484    int extId2 = test_create("https://base.onk.lu.se/onk/images/baselogo.png", false, false);
    85     int extId3 = test_create("http://base.thep.lu.se/login", false, false);
     85    int extId3 = test_create("https://base.thep.lu.se/login", false, false);
    8686    test_load(id1);
    8787    test_list();
  • trunk/src/test/TestFileServer.java

    r7428 r7982  
    5656    write_header();
    5757    // Standard tests: create, load, list
    58     int id = test_create("base.thep.lu.se", "BASE trac site", "base", "base", null, null, null);
     58    int id = test_create("base.thep.lu.se", "BASE trac site", "base", "base", "data/base.thep.lu.se.crt", null, null);
    5959    int id2 = test_create("base.onk.lu.se", "BASE demo site", null, null, "data/base.onk.lu.se.crt", null, null);
    6060    test_load(id);
     
    225225      {
    226226        X509Certificate tmp = fs.getServerX509Certificate();
    227         cert = tmp.getSubjectX500Principal().toString();
     227        if (tmp != null)
     228        {
     229          cert = tmp.getSubjectX500Principal().toString();
     230          cert += "; Valid until "+DateUtil.formatDate(tmp.getNotAfter());
     231        }
    228232      }
    229233      catch (Exception ex)
  • trunk/www/admin/annotationtypecategories/list_categories.jsp

    r7954 r7982  
    134134      filterrows="<%=cc.getFilterRows()%>"
    135135      subclass="fulltable"
    136       stickyheaders="name"
     136      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    137137      >
    138138      <tbl:hidden
  • trunk/www/admin/annotationtypes/list_annotationtypes.jsp

    r7954 r7982  
    176176      filterrows="<%=cc.getFilterRows()%>"
    177177      subclass="fulltable"
    178       stickyheaders="name"
     178      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    179179      >
    180180      <tbl:hidden
  • trunk/www/admin/clients/help/list_help.jsp

    r7954 r7982  
    129129      filterrows="<%=cc.getFilterRows()%>"
    130130      subclass="fulltable"
    131       stickyheaders="name"
     131      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    132132      >
    133133      <tbl:hidden
  • trunk/www/admin/clients/list_clients.jsp

    r7954 r7982  
    119119      filterrows="<%=cc.getFilterRows()%>"
    120120      subclass="fulltable"
    121       stickyheaders="name"
     121      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    122122      >
    123123      <tbl:hidden
  • trunk/www/admin/datafiletypes/list_filetypes.jsp

    r7954 r7982  
    155155      filterrows="<%=cc.getFilterRows()%>"
    156156      subclass="fulltable"
    157       stickyheaders="name"
     157      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    158158      >
    159159      <tbl:hidden
  • trunk/www/admin/diskusage/list_groups.jsp

    r7954 r7982  
    158158      filterrows="<%=cc.getFilterRows()%>"
    159159      subclass="fulltable"
    160       stickyheaders="name"
     160      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    161161      >
    162162      <tbl:hidden
  • trunk/www/admin/diskusage/list_users.jsp

    r7954 r7982  
    158158      filterrows="<%=cc.getFilterRows()%>"
    159159      subclass="fulltable"
    160       stickyheaders="name"
     160      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    161161      >
    162162      <tbl:hidden
  • trunk/www/admin/extravaluetypes/list_extravaluetypes.jsp

    r7954 r7982  
    133133      filterrows="<%=cc.getFilterRows()%>"
    134134      subclass="fulltable"
    135       stickyheaders="name"
     135      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    136136      >
    137137      <tbl:hidden
  • trunk/www/admin/groups/list_groups.jsp

    r7954 r7982  
    135135      filterrows="<%=cc.getFilterRows()%>"
    136136      subclass="fulltable"
    137       stickyheaders="name"
     137      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    138138      >
    139139      <tbl:hidden
  • trunk/www/admin/hardware/list_hardware.jsp

    r7954 r7982  
    139139      filterrows="<%=cc.getFilterRows()%>"
    140140      subclass="fulltable"
    141       stickyheaders="name"
     141      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    142142      >
    143143      <tbl:hidden
  • trunk/www/admin/itemsubtypes/list_subtypes.jsp

    r7954 r7982  
    144144      filterrows="<%=cc.getFilterRows()%>"
    145145      subclass="fulltable"
    146       stickyheaders="name"
     146      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    147147      >
    148148      <tbl:hidden
  • trunk/www/admin/jobagents/list_agents.jsp

    r7954 r7982  
    126126      filterrows="<%=cc.getFilterRows()%>"
    127127      subclass="fulltable"
    128       stickyheaders="name"
     128      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    129129      >
    130130      <tbl:hidden
  • trunk/www/admin/mimetypes/list_mimetypes.jsp

    r7954 r7982  
    124124      filterrows="<%=cc.getFilterRows()%>"
    125125      subclass="fulltable"
    126       stickyheaders="name"
     126      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    127127      >
    128128      <tbl:hidden
  • trunk/www/admin/news/list_news.jsp

    r7954 r7982  
    118118      filterrows="<%=cc.getFilterRows()%>"
    119119      subclass="fulltable"
    120       stickyheaders="name"
     120      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    121121      >
    122122      <tbl:hidden
  • trunk/www/admin/platforms/list_platforms.jsp

    r7954 r7982  
    127127      filterrows="<%=cc.getFilterRows()%>"
    128128      subclass="fulltable"
    129       stickyheaders="name"
     129      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    130130      >
    131131      <tbl:hidden
  • trunk/www/admin/platforms/variants/list_variants.jsp

    r7954 r7982  
    143143      filterrows="<%=cc.getFilterRows()%>"
    144144      subclass="fulltable"
    145       stickyheaders="name"
     145      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    146146      >
    147147      <tbl:hidden
  • trunk/www/admin/pluginconfigurations/list_configurations.jsp

    r7954 r7982  
    145145      filterrows="<%=cc.getFilterRows()%>"
    146146      subclass="fulltable"
    147       stickyheaders="name"
     147      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    148148      >
    149149      <tbl:hidden
  • trunk/www/admin/plugindefinitions/list_plugins.jsp

    r7954 r7982  
    154154      filterrows="<%=cc.getFilterRows()%>"
    155155      subclass="fulltable"
    156       stickyheaders="name"
     156      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    157157      >
    158158      <tbl:hidden
  • trunk/www/admin/plugintypes/list_plugintypes.jsp

    r7954 r7982  
    128128      filterrows="<%=cc.getFilterRows()%>"
    129129      subclass="fulltable"
    130       stickyheaders="name"
     130      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    131131      >
    132132      <tbl:hidden
  • trunk/www/admin/protocols/list_protocol.jsp

    r7954 r7982  
    139139      filterrows="<%=cc.getFilterRows()%>"
    140140      subclass="fulltable"
    141       stickyheaders="name"
     141      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    142142      >
    143143      <tbl:hidden
  • trunk/www/admin/quantities/list_quantities.jsp

    r7954 r7982  
    126126      filterrows="<%=cc.getFilterRows()%>"
    127127      subclass="fulltable"
    128       stickyheaders="name"
     128      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    129129      >
    130130      <tbl:hidden
  • trunk/www/admin/quota/list_quota.jsp

    r7954 r7982  
    118118      filterrows="<%=cc.getFilterRows()%>"
    119119      subclass="fulltable"
    120       stickyheaders="name"
     120      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    121121      >
    122122      <tbl:hidden
  • trunk/www/admin/quotatypes/list_quotatypes.jsp

    r7954 r7982  
    116116      filterrows="<%=cc.getFilterRows()%>"
    117117      subclass="fulltable"
    118       stickyheaders="name"
     118      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    119119      >
    120120      <tbl:hidden
  • trunk/www/admin/reporterclonetemplates/list_templates.jsp

    r7954 r7982  
    119119      filterrows="<%=cc.getFilterRows()%>"
    120120      subclass="fulltable"
    121       stickyheaders="name"
     121      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    122122      >
    123123      <tbl:hidden
  • trunk/www/admin/reportertypes/list_reportertypes.jsp

    r7954 r7982  
    118118      filterrows="<%=cc.getFilterRows()%>"
    119119      subclass="fulltable"
    120       stickyheaders="name"
     120      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    121121      >
    122122      <tbl:hidden
  • trunk/www/admin/roles/list_roles.jsp

    r7954 r7982  
    128128      filterrows="<%=cc.getFilterRows()%>"
    129129      subclass="fulltable"
    130       stickyheaders="name"
     130      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    131131      >
    132132      <tbl:hidden
  • trunk/www/admin/software/list_software.jsp

    r7954 r7982  
    139139      filterrows="<%=cc.getFilterRows()%>"
    140140      subclass="fulltable"
    141       stickyheaders="name"
     141      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    142142      >
    143143      <tbl:hidden
  • trunk/www/admin/users/list_users.jsp

    r7954 r7982  
    152152      filterrows="<%=cc.getFilterRows()%>"
    153153      subclass="fulltable"
    154       stickyheaders="name"
     154      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    155155      >
    156156      <tbl:hidden
  • trunk/www/biomaterials/bioplateeventtypes/list_eventtypes.jsp

    r7954 r7982  
    117117      filterrows="<%=cc.getFilterRows()%>"
    118118      subclass="fulltable"
    119       stickyheaders="name"
     119      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    120120      >
    121121      <tbl:hidden
  • trunk/www/biomaterials/bioplates/events/index.jsp

    r7954 r7982  
    6464<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
    6565<%!
    66   private static final ItemContext defaultContext = Base.createDefaultContext("entryDate", "name,eventType,role,entryDate,description");
     66  private static final ItemContext defaultContext = Base.createDefaultContext("entryDate", "name,eventType,role,entryDate,description", "name");
    6767  private static final Item itemType = Item.BIOPLATEEVENT;
    6868%>
  • trunk/www/biomaterials/bioplates/events/list_events.jsp

    r7954 r7982  
    154154      filterrows="<%=cc.getFilterRows()%>"
    155155      subclass="fulltable"
    156       stickyheaders="name"
     156      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    157157      >
    158158      <tbl:hidden
  • trunk/www/biomaterials/bioplates/list_bioplates.jsp

    r7954 r7982  
    165165      filterrows="<%=cc.getFilterRows()%>"
    166166      subclass="fulltable"
    167       stickyheaders="name"
     167      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    168168      >
    169169      <tbl:hidden
  • trunk/www/biomaterials/bioplates/wells/index.jsp

    r7954 r7982  
    6161<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
    6262<%!
    63   private static final ItemContext defaultContext = Base.createDefaultContext("row", "row,column,bioMaterial.name");
     63  private static final ItemContext defaultContext = Base.createDefaultContext("row", "row,column,bioMaterial.name", null);
    6464  private static final Item itemType = Item.BIOWELL;
    6565 
  • trunk/www/biomaterials/bioplates/wells/list_biowells.jsp

    r7954 r7982  
    207207      filterrows="<%=cc.getFilterRows()%>"
    208208      subclass="fulltable"
    209       stickyheaders="<%=null%>"
     209      stickyheaders="<%=cc.getSetting("columns.sticky", null)%>"
    210210      >
    211211      <tbl:hidden
  • trunk/www/biomaterials/bioplatetypes/list_platetypes.jsp

    r7954 r7982  
    145145      filterrows="<%=cc.getFilterRows()%>"
    146146      subclass="fulltable"
    147       stickyheaders="name"
     147      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    148148      >
    149149      <tbl:hidden
  • trunk/www/biomaterials/biosources/list_biosources.jsp

    r7954 r7982  
    163163        subclass="fulltable"
    164164        data-relateditem-columns="true"
    165         stickyheaders="name"
     165        stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    166166      >
    167167      <tbl:hidden
  • trunk/www/biomaterials/events/index.jsp

    r7954 r7982  
    6060<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
    6161<%!
    62   private static final ItemContext defaultContext = Base.createDefaultContext("entryDate", "type,bioPlateEvent,entryDate,eventDate,quantity,protocol,comment");
     62  private static final ItemContext defaultContext = Base.createDefaultContext("entryDate", "type,bioPlateEvent,entryDate,eventDate,quantity,protocol,comment", null);
    6363  private static final Item itemType = Item.BIOMATERIALEVENT;
    6464%>
  • trunk/www/biomaterials/events/list_events.jsp

    r7954 r7982  
    160160      filterrows="<%=cc.getFilterRows()%>"
    161161      subclass="fulltable"
    162       stickyheaders="<%=null%>"
     162      stickyheaders="<%=cc.getSetting("columns.sticky", null)%>"
    163163      >
    164164      <tbl:hidden
  • trunk/www/biomaterials/extracts/list_extracts.jsp

    r7954 r7982  
    246246      data-inherited-annotations="true"
    247247      data-relateditem-columns="true"
    248       stickyheaders="name"
     248      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    249249      >
    250250      <tbl:hidden
  • trunk/www/biomaterials/kits/list_kits.jsp

    r7954 r7982  
    137137      filterrows="<%=cc.getFilterRows()%>"
    138138      subclass="fulltable"
    139       stickyheaders="name"
     139      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    140140      >
    141141      <tbl:hidden
  • trunk/www/biomaterials/samples/list_samples.jsp

    r7954 r7982  
    221221      data-inherited-annotations="true"
    222222      data-relateditem-columns="true"
    223       stickyheaders="name"
     223      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    224224      >
    225225      <tbl:hidden
  • trunk/www/biomaterials/tags/list_tags.jsp

    r7954 r7982  
    141141      filterrows="<%=cc.getFilterRows()%>"
    142142      subclass="fulltable"
    143       stickyheaders="name"
     143      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    144144      >
    145145      <tbl:hidden
  • trunk/www/common/columns/configure.js

    r7853 r7982  
    2828  var columnDefs;
    2929  var currentColumns;
     30  var currentStickyColumn;
    3031 
    3132  var configure = {};
     
    4142    columnDefs = window.opener.Table.getColumnDefs(tableId);
    4243    currentColumns = window.opener.Table.getColumns(tableId);
     44    currentStickyColumn = window.opener.Table.getStickyColumn(tableId);
    4345   
    4446    // Initialize the visible and hidden columns lists
    45     configure.initColumns(currentColumns);
     47    configure.initColumns(currentColumns, currentStickyColumn);
    4648   
    4749    // Buttons
     
    7880    @param columns A comma-separated string with visible columns
    7981  */
    80   configure.initColumns = function(columns)
    81   {
    82     var frm = document.forms['columns'];
    83     // Remove all entries from the 'visible' and 'hidden' lists
     82  configure.initColumns = function(columns, stickyColumn)
     83  {
     84    var frm = document.forms['columns'];
     85    // Remove all entries from the 'visible', 'hidden' and 'sticky' lists
    8486    var visible = frm.visible;
    8587    var hidden = frm.hidden;
     88    var sticky = frm.sticky;
    8689    visible.length = 0;
    8790    hidden.length = 0;
     91    if (sticky)
     92    {
     93      sticky.length = 0;
     94      sticky[0] = new Option('- none -', '_');
     95    }
    8896   
    8997    // The visibled columns (comma-separated)
     
    96104    {
    97105      var col = columnDefs[i];
    98       if (!col.alwaysHide) configure.addColumn(toList, col);
     106      if (!col.alwaysHide)
     107      {
     108        configure.addColumn(toList, col);
     109        if (sticky)
     110        {
     111          configure.addColumn(sticky, col);
     112          if (col.id == stickyColumn) sticky.selectedIndex = sticky.length-1;
     113        }
     114      }
    99115    }
    100116   
     
    139155    var option = new Option(column.title, column.id);
    140156    option.title = column.title;
    141     if (column.alwaysShow)
     157    if (column.alwaysShow && list.multiple)
    142158    {
    143159      option.style.fontWeight = 'bold';
     
    156172    var presets = frm.presets;
    157173    var columns = presets.value;
     174    var stickyColumn = Data.get(presets[presets.selectedIndex], 'sticky-column');
    158175    if (columns == '') return;
    159     if (columns == '_default_') columns = Data.get('page-data', 'default-columns');
    160     if (columns == '_current_') columns = currentColumns;
     176    if (columns == '_default_')
     177    {
     178      columns = Data.get('page-data', 'default-columns');
     179      stickyColumn = Data.get('page-data', 'default-sticky');
     180    }
     181    if (columns == '_current_')
     182    {
     183      columns = currentColumns;
     184      stickyColumn = currentStickyColumn;
     185    }
    161186    if (columns == '_minimal_')
    162187    {
     
    169194      columns = temp.join(',');
    170195    }
    171     configure.initColumns(columns);
     196    if (stickyColumn == null && frm.sticky) stickyColumn = frm.sticky.value;
     197    configure.initColumns(columns, stickyColumn);
    172198    presets.selectedIndex = 0;
    173199  }
     
    179205  {
    180206    var visible = configure.getVisibleColumns();
     207    var frm = document.forms['columns'];
     208
    181209    var url = 'save_preset.jsp?ID='+App.getSessionId();
    182210    url += '&item_type='+Data.get('page-data', 'item-type');
    183211    url += '&subcontext='+Data.get('page-data', 'subcontext', '');
    184212    url += '&settingName='+Data.get('page-data', 'setting-name');
    185     url += '&columns='+visible;
     213    url += '&columns='+encodeURIComponent(visible);
     214    if (frm.sticky) url += '&stickyColumn='+encodeURIComponent(frm.sticky.value)
    186215    Dialogs.openPopup(url, 'SavePreset', 450, 300);
    187216  }
     
    209238    var item = event.detail;
    210239    var colId = 'ia'+item.id;
    211     // Do not add duplicates
    212     for (var i = 0; i < frm.visible.length; i++)
    213     {
    214       if (frm.visible[i].value == colId) return;
    215     }
    216240    // Remove from 'hidden' list
    217241    for (var i = frm.hidden.length-1; i >= 0; i--)
     
    219243      if (frm.hidden[i].value == colId) frm.hidden[i] = null;
    220244    }
    221     frm.visible[frm.visible.length] = new Option(item.name + ' [I]', colId);
     245    configure.addUniqueOption(frm.visible, new Option(item.name + ' [I]', colId));
     246    if (frm.sticky)
     247    {
     248      configure.addUniqueOption(frm.sticky, new Option(item.name + ' [I]', colId));
     249    }
     250
    222251  }
    223252 
     
    235264    var frm = document.forms['columns'];
    236265    var data = event.detail;
    237     // Do not add duplicates
    238     for (var i = 0; i < frm.visible.length; i++)
    239     {
    240       if (frm.visible[i].value == data.property) return;
    241     }
    242     frm.visible[frm.visible.length] = new Option(data.title, data.property);
     266    configure.addUniqueOption(frm.visible, new Option(data.title, data.property));
     267    if (frm.sticky)
     268    {
     269      configure.addUniqueOption(frm.sticky, new Option(data.title, data.property));
     270    }
    243271  }
    244272 
     
    256284    var frm = document.forms['columns'];
    257285    var data = event.detail;
    258     // Do not add duplicates
    259     for (var i = 0; i < frm.visible.length; i++)
    260     {
    261       if (frm.visible[i].value == data.property) return;
    262     }
    263     frm.visible[frm.visible.length] = new Option(data.title, data.property);
     286    configure.addUniqueOption(frm.visible, new Option(data.title, data.property));
     287    if (frm.sticky)
     288    {
     289      configure.addUniqueOption(frm.sticky, new Option(data.title, data.property));
     290    }
     291  }
     292 
     293  /**
     294    Add the option to the list if there is no other options with the
     295    same value.
     296  */
     297  configure.addUniqueOption = function(list, option)
     298  {
     299    for (var i = 0; i < list.length; i++)
     300    {
     301      if (list[i].value == option.value) return;
     302    }
     303    list[list.length] = option;
    264304  }
    265305 
     
    269309  configure.save = function()
    270310  {
     311    var frm = document.forms['columns'];
    271312    var tableId = Data.get('page-data', 'table-id');
    272313    var visible = configure.getVisibleColumns();
    273     window.opener.Table.setColumns(tableId, visible);
     314    window.opener.Table.setColumns(tableId, visible, frm.sticky ? frm.sticky.value : null);
    274315    window.close();
    275316  }
  • trunk/www/common/columns/configure.jsp

    r7851 r7982  
    5656final boolean enableRelatedItemColumns = Values.getBoolean(request.getParameter("enableRelatedItemColumns"));
    5757final boolean enableLinkedItemColumns = Values.getBoolean(request.getParameter("enableLinkedItemColumns"));
     58final boolean enableStickyColumn = Values.getBoolean(request.getParameter("enableStickyColumn"));
    5859final ItemContext cc = sc.getCurrentContext(itemType, subContext);
    5960
    6061final String defaultColumns = cc.getObject("defaultColumns");
     62final String defaultSticky = cc.getObject("defaultColumns.sticky");
    6163final String settingName = Values.getString(request.getParameter("settingName"), "columns");
    6264%>
     
    6971      data-table-id="<%=tableId%>"
    7072      data-default-columns="<%=HTML.encodeTags(defaultColumns) %>"
     73      data-default-sticky="<%=HTML.encodeTags(defaultSticky) %>"
    7174      data-item-type="<%=itemType.name() %>"
    7275      data-subcontext="<%=subContext %>"
     
    160163    </tr>
    161164    <tr>
    162       <td colspan="4" >
     165      <td></td>
     166      <%
     167      // The layout will be different depending on if the "Sticky column" option
     168      // is available or not
     169      if (enableStickyColumn)
     170      {
     171        // We display the "Sticky column" and "Presets" side-by-side
     172        %>
     173        <td>
     174        <b>Sticky column</b><br>
     175        <select name="sticky" id="sticky" style="width: calc(100% - 10px);"></select>
     176        </td>
     177        <td></td>
     178        <td>
     179        <b>Presets</b><br>
     180        <table style="width: 100%;">
     181        <tr>
     182        <td>
     183        <%
     184      }
     185      else
     186      {
     187        // We display the "Presets" centered
     188        %>
     189        <td colspan="3">
    163190        <table style="margin-left: auto; margin-right: auto;">
    164191        <tr>
    165         <td>
    166           <b>Presets</b>
    167           <select name="presets" id="presets">
    168             <option value="">-- predefined --
    169             <option value="all">All
    170             <option value="_minimal_">Required
    171             <option value="_current_">Current
    172             <%
    173             if (defaultColumns != null)
     192        <td style="padding-right: 0.5em;"><b>Presets</b></td>
     193        <td>
     194        <%
     195      }
     196      %>
     197      <select name="presets" id="presets" style="width: calc(100% - 10px);">
     198        <option value="">-- predefined --
     199        <option value="all">All
     200        <option value="_minimal_">Required
     201        <option value="_current_">Current
     202        <%
     203        if (defaultColumns != null)
     204        {
     205          %>
     206          <option value="_default_">Default
     207          <%
     208        }
     209        %>
     210        <option value="">-- user defined --
     211        <%
     212        Enumeration<Integer, String> contexts = sc.getContextNames(itemType, subContext);
     213        for (int i = 0; i < contexts.size(); ++i)
     214        {
     215          ItemContext context = sc.getContext(contexts.getKey(i));
     216          if (context != null && !ItemContext.DEFAULT_NAME.equals(context.getName()))
     217          {
     218            String columns = context.getSetting(settingName);
     219            String stickyColumn = context.getSetting(settingName+".sticky");
     220            if (columns != null)
    174221            {
    175222              %>
    176               <option value="_default_">Default
     223              <option value="<%=columns%>"
     224              <%if (stickyColumn != null){%>
     225              data-sticky-column="<%=stickyColumn%>"
     226              <%}%>
     227              ><%=HTML.encodeTags(context.getName())%>
    177228              <%
    178229            }
    179             %>
    180             <option value="">-- user defined --
    181             <%
    182             Enumeration<Integer, String> contexts = sc.getContextNames(itemType, subContext);
    183             for (int i = 0; i < contexts.size(); ++i)
    184             {
    185               ItemContext context = sc.getContext(contexts.getKey(i));
    186               if (context != null && !ItemContext.DEFAULT_NAME.equals(context.getName()))
    187               {
    188                 String columns = context.getSetting(settingName);
    189                 if (columns != null)
    190                 {
    191                   %>
    192                   <option value="<%=columns%>"><%=HTML.encodeTags(context.getName())%>
    193                   <%
    194                 }
    195               }
    196             }
    197             %>
    198           </select>
    199           </td>
    200           <%
    201           if (request.getParameter("nosavedelete") == null)
    202           {
    203             %>
    204             <td><base:button id="btnSavePreset" title="Save as&hellip;" /></td>
    205             <%
    206230          }
    207           %>
    208         </tr>
    209         </table>
    210 
    211         <div class="padded" style="text-align: right;">
    212           <b>×</b> = This column cannot be hidden
    213         </div>
    214 
    215       </td>
     231        }
     232        %>
     233      </select>
     234      </td>
     235      <%
     236      if (request.getParameter("nosavedelete") == null)
     237      {
     238        %>
     239        <td><base:button id="btnSavePreset" title="Save as&hellip;" /></td>
     240        <%
     241      }
     242      %>
     243      </tr>
     244      </table>
     245      </td>
     246    </tr>
     247    <tr>
     248    <td colspan="4" >
     249      <div class="padded" style="text-align: right;">
     250        <b>×</b> = This column cannot be hidden
     251      </div>
     252    </td>
    216253    </tr>
    217254    </table>
  • trunk/www/common/columns/save_preset.js

    r7604 r7982  
    8181      }
    8282      presets[addIndex] = new Option(name, frm.columns.value);
     83      if (frm.stickyColumn)
     84      {
     85        Data.set(presets[addIndex], 'sticky-column', frm.stickyColumn.value);
     86      }
    8387      presets.selectedIndex = addIndex;
    8488      frm.submit();
  • trunk/www/common/columns/save_preset.jsp

    r6607 r7982  
    4242final String columns = request.getParameter("columns");
    4343final String settingName = Values.getString(request.getParameter("settingName"), "columns");
     44final String stickyColumn = Values.getStringOrNull(request.getParameter("stickyColumn"));
    4445%>
    4546<base:page type="popup" title="Save preset">
     
    5556  <input type="hidden" name="subcontext" value="<%=subContext%>">
    5657  <input type="hidden" name="settingName" value="<%=settingName%>">
    57 
    58  
     58  <%
     59  if (stickyColumn != null)
     60  {
     61    %>
     62    <input type="hidden" name="stickyColumn" value="<%=HTML.encodeTags(stickyColumn)%>">
     63    <%
     64  }
     65  %>
    5966  <div class="content">
    6067    <table class="fullform input100 smaller bottomborder">
  • trunk/www/common/columns/submit_preset.jsp

    r6192 r7982  
    5454final String name = request.getParameter("name");
    5555final String settingName = Values.getString(request.getParameter("settingName"), "columns");
     56final String stickyColumn = Values.getStringOrNull(request.getParameter("stickyColumn"));
    5657final ItemContext cc = sc.getCurrentContext(itemType, subContext);
    5758String forward = null;
     
    6263  String columns = request.getParameter("columns");
    6364  cc.setSetting(settingName, columns);
     65  if (stickyColumn != null) cc.setSetting(settingName+".sticky", stickyColumn);
    6466  sc.saveCurrentContextAs(itemType, subContext, name, true, false);
    6567}
  • trunk/www/common/history/index.jsp

    r7954 r7982  
    7676<%!
    7777  private static final ItemContext defaultContext =
    78     Base.createDefaultContext("-$hst.time", "time,changeType,changeInfo,transaction,user");
     78    Base.createDefaultContext("-$hst.time", "time,changeType,changeInfo,transaction,user", "time");
    7979  private static final Item itemType = Item.CHANGEHISTORY;
    8080 
  • trunk/www/common/history/list_history.jsp

    r7954 r7982  
    170170      filterrows="<%=cc.getFilterRows()%>"
    171171      subclass="fulltable"
    172       stickyheaders="time"
     172      stickyheaders="<%=cc.getSetting("columns.sticky", "time")%>"
    173173      subcontext="<%=subContext%>"
    174174      >
  • trunk/www/filemanager/files/list_files.jsp

    r7954 r7982  
    318318      filterrows="<%=cc.getFilterRows()%>"
    319319      subclass="fulltable"
    320       stickyheaders="name"
     320      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    321321      >
    322322      <tbl:hidden
  • trunk/www/filemanager/fileservers/list_fileservers.jsp

    r7954 r7982  
    116116      filterrows="<%=cc.getFilterRows()%>"
    117117      subclass="fulltable"
    118       stickyheaders="name"
     118      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    119119      >
    120120      <tbl:hidden
  • trunk/www/include/scripts/lazy-items.js

    r7840 r7982  
    127127}();
    128128
    129 Doc.onLoad(Lazy.initLazyItems);
     129Doc.addFinalizer(Lazy.initLazyItems);
    130130
  • trunk/www/include/scripts/table.js

    r7952 r7982  
    841841    @param columns Comma-separated list of column ID:s of the visible columns, or the value 'all'
    842842  */
    843   table.setColumns = function(tableDiv, columns)
    844   {
    845     tableDiv = Doc.element(tableDiv);
    846     var frm = document.forms[tableDiv.id];
     843  table.setColumns = function(tableDiv, columns, stickyColumn)
     844  {
     845    tableDiv = Doc.element(tableDiv);
     846    var frm = document.forms[tableDiv.id];
     847    var submit = false;
    847848    if (frm.columns.value != columns)
    848849    {
    849850      frm.columns.value = columns;
    850       Forms.submit(frm);
    851     }
     851      submit = true;
     852    }
     853    if (stickyColumn && frm.sticky_column && frm.sticky_column.value != stickyColumn)
     854    {
     855      frm.sticky_column.value = stickyColumn;
     856      submit = true;
     857    }   
     858    if (submit) Forms.submit(frm);
    852859  }
    853860
     
    880887  }
    881888 
     889  table.getStickyColumn = function(tableDiv)
     890  {
     891    tableDiv = Doc.element(tableDiv);
     892    var frm = document.forms[tableDiv.id];
     893    return frm.sticky_column ? frm.sticky_column.value : null;
     894  }
    882895 
    883896  /**
     
    928941  {
    929942    tableDiv = Doc.element(tableDiv);
     943    var frm = document.forms[tableDiv.id];
    930944    var itemType = Data.get(tableDiv, 'item-type');
    931945    var subContext = Data.get(tableDiv, 'subcontext', '');
     
    939953    if (enableRelatedItemColumns) url += '&enableRelatedItemColumns=1';
    940954    if (!disableLinkedItemColumns) url += '&enableLinkedItemColumns=1';
     955    if (frm.sticky_column) url += '&enableStickyColumn=1';
    941956
    942957    if (settingName) url += '&settingName='+settingName;
  • trunk/www/lims/arraybatches/list_batches.jsp

    r7954 r7982  
    157157      subclass="fulltable"
    158158      data-inherited-annotations="true"
    159       stickyheaders="name"
     159      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    160160      >
    161161      <tbl:hidden
  • trunk/www/lims/arraydesigns/features/index.jsp

    r7954 r7982  
    5555<%!
    5656  private static final ItemContext defaultContext = Base.createDefaultContext("position",
    57     "position,externalId,block,row,column,reporter.name,reporter.externalId");
     57    "position,externalId,block,row,column,reporter.name,reporter.externalId", "externalId");
    5858  private static final Item itemType = Item.FEATURE;
    5959 
  • trunk/www/lims/arraydesigns/features/list_features.jsp

    r7954 r7982  
    187187      filterrows="<%=cc.getFilterRows()%>"
    188188      subclass="fulltable"
    189       stickyheaders="<%=fiMethod == FeatureIdentificationMethod.FEATURE_ID ? "externalId" : "position"%>"
     189      stickyheaders="<%=cc.getSetting("columns.sticky", fiMethod == FeatureIdentificationMethod.FEATURE_ID ? "externalId" : "position")%>"
    190190      >
    191191      <tbl:hidden
  • trunk/www/lims/arraydesigns/list_designs.jsp

    r7954 r7982  
    190190      subclass="fulltable"
    191191      data-inherited-annotations="true"
    192       stickyheaders="name"
     192      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    193193      >
    194194      <tbl:hidden
  • trunk/www/lims/arrayslides/list_slides.jsp

    r7954 r7982  
    146146      subclass="fulltable"
    147147      data-inherited-annotations="true"
    148       stickyheaders="name"
     148      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    149149      >
    150150      <tbl:hidden
  • trunk/www/lims/geometries/list_geometries.jsp

    r7954 r7982  
    128128      filterrows="<%=cc.getFilterRows()%>"
    129129      subclass="fulltable"
    130       stickyheaders="name"
     130      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    131131      >
    132132      <tbl:hidden
  • trunk/www/lims/platemappings/list_mappings.jsp

    r7954 r7982  
    127127      filterrows="<%=cc.getFilterRows()%>"
    128128      subclass="fulltable"
    129       stickyheaders="name"
     129      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    130130      >
    131131      <tbl:hidden
  • trunk/www/lims/plates/events/index.jsp

    r7954 r7982  
    6060<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
    6161<%!
    62   private static final ItemContext defaultContext = Base.createDefaultContext("plateEventType.ordinal", "eventType,ordinal,entryDate,eventDate,protocol,comment");
     62  private static final ItemContext defaultContext = Base.createDefaultContext("plateEventType.ordinal", "eventType,ordinal,entryDate,eventDate,protocol,comment", "eventType");
    6363  private static final Item itemType = Item.PLATEEVENT;
    6464%>
  • trunk/www/lims/plates/events/list_events.jsp

    r7954 r7982  
    136136      filterrows="<%=cc.getFilterRows()%>"
    137137      subclass="fulltable"
    138       stickyheaders="eventType"
     138      stickyheaders="<%=cc.getSetting("columns.sticky", "eventType")%>"
    139139      >
    140140      <tbl:hidden
  • trunk/www/lims/plates/list_plates.jsp

    r7954 r7982  
    163163      filterrows="<%=cc.getFilterRows()%>"
    164164      subclass="fulltable"
    165       stickyheaders="name"
     165      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    166166      >
    167167      <tbl:hidden
  • trunk/www/lims/plates/wells/index.jsp

    r7954 r7982  
    5959<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
    6060<%!
    61   private static final ItemContext defaultContext = Base.createDefaultContext("row", "row,column,reporter.name,reporter.externalId");
     61  private static final ItemContext defaultContext = Base.createDefaultContext("row", "row,column,reporter.name,reporter.externalId", null);
    6262  private static final Item itemType = Item.WELL;
    6363 
  • trunk/www/lims/plates/wells/list_wells.jsp

    r7954 r7982  
    187187      filterrows="<%=cc.getFilterRows()%>"
    188188      subclass="fulltable"
    189       stickyheaders="<%=null%>"
     189      stickyheaders="<%=cc.getSetting("columns.sticky", null)%>"
    190190      >
    191191      <tbl:hidden
  • trunk/www/lims/platetypes/eventtypes/list_eventtypes.jsp

    r7954 r7982  
    127127      filterrows="<%=cc.getFilterRows()%>"
    128128      subclass="fulltable"
    129       stickyheaders="name"
     129      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    130130      >
    131131      <tbl:hidden
  • trunk/www/lims/platetypes/list_platetypes.jsp

    r7954 r7982  
    136136      filterrows="<%=cc.getFilterRows()%>"
    137137      subclass="fulltable"
    138       stickyheaders="name"
     138      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    139139      >
    140140      <tbl:hidden
  • trunk/www/my_base/messages/list_messages.jsp

    r7954 r7982  
    120120      filterrows="<%=cc.getFilterRows()%>"
    121121      subclass="fulltable"
    122       stickyheaders="name"
     122      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    123123      >
    124124      <tbl:hidden
  • trunk/www/my_base/projects/items/list_items.jsp

    r7954 r7982  
    164164      subclass="fulltable"
    165165      data-no-linkeditem-columns="1"
    166       stickyheaders="name"
     166      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    167167      >
    168168      <tbl:hidden
  • trunk/www/my_base/projects/list_projects.jsp

    r7954 r7982  
    133133      filterrows="<%=cc.getFilterRows()%>"
    134134      subclass="fulltable"
    135       stickyheaders="name"
     135      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    136136      >
    137137      <tbl:hidden
  • trunk/www/views/derivedbioassays/list_bioassays.jsp

    r7954 r7982  
    201201      data-inherited-annotations="true"
    202202      data-relateditem-columns="true"
    203       stickyheaders="name"
     203      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    204204      >
    205205      <tbl:hidden
  • trunk/www/views/devices/list_devices.jsp

    r7954 r7982  
    7979try
    8080{
    81   final User user = cc.getInclude().contains(Include.OTHERS) ?
    82     null : User.getById(dc, sc.getLoggedInUserId());
     81  final User user = User.getById(dc, sc.getLoggedInUserId());
    8382
    8483  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
     
    8887  try
    8988  {
    90     final ItemQuery<UserDevice> query = Base.getConfiguredQuery(dc, cc, jspContext, true, UserDevice.getQuery(user), mode);
     89    final ItemQuery<UserDevice> query = Base.getConfiguredQuery(dc, cc, jspContext, true, UserDevice.getQuery(null), mode);
    9190    devices = query.iterate(dc);
    9291  }
     
    119118      filterrows="<%=cc.getFilterRows()%>"
    120119      subclass="fulltable"
    121       stickyheaders="name"
     120      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    122121      >
    123122      <tbl:hidden
  • trunk/www/views/experiments/bioassays/list_bioassays.jsp

    r7954 r7982  
    204204      subclass="fulltable"
    205205      data-inherited-annotations="true"
    206       stickyheaders="name"
     206      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    207207      >
    208208      <tbl:hidden
  • trunk/www/views/experiments/bioassaysets/analysis_tree.jsp

    r7954 r7982  
    372372      filterrows="<%=cc.getFilterRows()%>"
    373373      subclass="<%=root == null ? "fulltable" : "" %>"
    374       stickyheaders="name"
     374      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    375375      >
    376376      <tbl:hidden
  • trunk/www/views/experiments/explorer/search/list.jsp

    r7954 r7982  
    148148      filterrows="<%=cc.getFilterRows()%>"
    149149      subclass="fulltable"
    150       stickyheaders="externalId"
     150      stickyheaders="<%=cc.getSetting("columns.sticky", "externalId")%>"
    151151      >
    152152      <tbl:hidden
  • trunk/www/views/experiments/list_experiments.jsp

    r7954 r7982  
    140140      filterrows="<%=cc.getFilterRows()%>"
    141141      subclass="fulltable"
    142       stickyheaders="name"
     142      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    143143      >
    144144      <tbl:hidden
  • trunk/www/views/experiments/reporters/index.jsp

    r7954 r7982  
    6262<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
    6363<%!
    64   private static final ItemContext defaultContext = Base.createDefaultContext("@externalId", "cln.externalId,upToDate");
     64  private static final ItemContext defaultContext = Base.createDefaultContext("@externalId", "cln.externalId,upToDate","cln.externalId");
    6565  private static final Item itemType = Item.REPORTER;
    6666%>
  • trunk/www/views/experiments/reporters/list_reporters.jsp

    r7954 r7982  
    155155      filterrows="<%=cc.getFilterRows()%>"
    156156      subclass="fulltable"
    157       stickyheaders="cln.externalId"
     157      stickyheaders="<%=cc.getSetting("columns.sticky", "cln.externalId")%>"
    158158      >
    159159      <tbl:hidden
  • trunk/www/views/experiments/spotdata/index.jsp

    r7954 r7982  
    5252    {
    5353      // Default visible columns are: position, ch1, ch2, ...
    54       StringBuilder columns = new StringBuilder("POSITION");
     54      StringBuilder columns = new StringBuilder("POSITION,rep.externalId");
    5555      for (int ch = 1; ch <= rdt.getChannels(); ++ch)
    5656      {
     
    5858      }
    5959      defaultContexts.put(rdt,
    60         Base.createDefaultContext("POSITION", columns.toString()));
     60        Base.createDefaultContext("POSITION", columns.toString(), "rep.externalId"));
    6161    }
    6262  }
  • trunk/www/views/experiments/spotdata/list_spotdata.jsp

    r7954 r7982  
    208208      filterrows="<%=cc.getFilterRows()%>"
    209209      subclass="fulltable"
    210       stickyheaders="rep.externalId"
     210      stickyheaders="<%=cc.getSetting("columns.sticky", "rep.externalId")%>"
    211211      >
    212212      <tbl:hidden
  • trunk/www/views/formulas/list_formulas.jsp

    r7954 r7982  
    157157      filterrows="<%=cc.getFilterRows()%>"
    158158      subclass="fulltable"
    159       stickyheaders="name"
     159      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    160160      >
    161161      <tbl:hidden
  • trunk/www/views/itemlists/list_lists.jsp

    r7954 r7982  
    178178      filterrows="<%=cc.getFilterRows()%>"
    179179      subclass="fulltable"
    180       stickyheaders="name"
     180      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    181181      >
    182182      <tbl:hidden
  • trunk/www/views/itemlists/members/list_members.jsp

    r7954 r7982  
    205205      data-inherited-annotations="<%=annotatable%>"
    206206      data-relateditem-columns="true"
    207       stickyheaders="name"
     207      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    208208      >
    209209      <tbl:hidden
  • trunk/www/views/items/list_items.jsp

    r7954 r7982  
    151151      subclass="fulltable"
    152152      data-no-linkeditem-columns="1"
    153       stickyheaders="name"
     153      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    154154      >
    155155      <tbl:columndef
  • trunk/www/views/jobs/list_jobs.jsp

    r7954 r7982  
    166166      filterrows="<%=cc.getFilterRows()%>"
    167167      subclass="fulltable"
    168       stickyheaders="name"
     168      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    169169      >
    170170      <tbl:hidden
  • trunk/www/views/permissiontemplates/list_templates.jsp

    r7954 r7982  
    114114      filterrows="<%=cc.getFilterRows()%>"
    115115      subclass="fulltable"
    116       stickyheaders="name"
     116      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    117117      >
    118118      <tbl:hidden
  • trunk/www/views/physicalbioassays/list_bioassays.jsp

    r7954 r7982  
    189189      data-inherited-annotations="true"
    190190      data-relateditem-columns="true"
    191       stickyheaders="name"
     191      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    192192      >
    193193      <tbl:hidden
  • trunk/www/views/rawbioassays/list_rawbioassays.jsp

    r7954 r7982  
    204204      data-inherited-annotations="true"
    205205      data-relateditem-columns="true"
    206       stickyheaders="name"
     206      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    207207      >
    208208      <tbl:hidden
  • trunk/www/views/rawbioassays/rawdata/list_rawdata.jsp

    r7954 r7982  
    191191      filterrows="<%=cc.getFilterRows()%>"
    192192      subclass="fulltable"
    193       stickyheaders="position"
     193      stickyheaders="<%=cc.getSetting("columns.sticky", "position")%>"
    194194      >
    195195      <tbl:hidden
  • trunk/www/views/reporterlists/list_reporterlists.jsp

    r7954 r7982  
    116116      filterrows="<%=cc.getFilterRows()%>"
    117117      subclass="fulltable"
    118       stickyheaders="name"
     118      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    119119      >
    120120      <tbl:hidden
  • trunk/www/views/reporterlists/reporters/list_reporters.jsp

    r7954 r7982  
    148148      filterrows="<%=cc.getFilterRows()%>"
    149149      subclass="fulltable"
    150       stickyheaders="name"
     150      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    151151      >
    152152      <tbl:hidden
  • trunk/www/views/reporters/list_reporters.jsp

    r7954 r7982  
    132132      filterrows="<%=cc.getFilterRows() %>"
    133133      subclass="fulltable"
    134       stickyheaders="name"
     134      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    135135      >
    136136      <tbl:hidden
  • trunk/www/views/sessions/list_sessions.jsp

    r7954 r7982  
    9191  try
    9292  {
    93     final ItemQuery<Session> query = Base.getConfiguredQuery(dc, cc, jspContext, true, Session.getQuery(cc.getInclude().contains(Include.OTHERS) ? null : user), mode);
     93    final ItemQuery<Session> query = Base.getConfiguredQuery(dc, cc, jspContext, true, Session.getQuery(null), mode);
    9494    sessions = query.iterate(dc);
    9595  }
     
    122122      filterrows="<%=cc.getFilterRows()%>"
    123123      subclass="fulltable"
    124       stickyheaders="loginTime"
     124      stickyheaders="<%=cc.getSetting("columns.sticky", "loginTime")%>"
    125125      >
    126126      <tbl:hidden
  • trunk/www/views/trashcan/list_trash.jsp

    r7954 r7982  
    153153      subclass="fulltable"
    154154      data-no-linkeditem-columns="1"
    155       stickyheaders="name"
     155      stickyheaders="<%=cc.getSetting("columns.sticky", "name")%>"
    156156      >
    157157      <tbl:columndef
Note: See TracChangeset for help on using the changeset viewer.