Changeset 7813


Ignore:
Timestamp:
May 19, 2020, 2:24:30 PM (19 months ago)
Author:
Nicklas Nordborg
Message:

Merge BASE 3.16.1 to the trunk.

Location:
trunk
Files:
1 deleted
50 edited
4 copied

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/.classpath

    r7750 r7813  
    1515  <classpathentry kind="lib" path="lib/dist/tar.jar"/>
    1616  <classpathentry kind="lib" path="lib/dist/commons-io-1.4.jar"/>
    17   <classpathentry kind="lib" path="lib/svn/svnant-1.4dev.jar"/>
    1817  <classpathentry kind="lib" path="lib/dist/jdom-2.0.6.jar"/>
    1918  <classpathentry kind="lib" path="lib/dist/jcommon-1.0.23.jar"/>
  • trunk/build.xml

    r7794 r7813  
    103103  </path>
    104104 
    105   <path id="lib.svn.classpath">
    106     <fileset dir="${lib}/svn">
     105  <path id="lib.svnkit.classpath">
     106    <fileset dir="${lib}/svnkit">
    107107      <include name="**/*.jar"/>
    108108    </fileset>
     
    138138    </classpath>
    139139  </taskdef>
    140  
    141   <typedef
    142     resource="org/tigris/subversion/svnant/svnantlib.xml"
    143     classpathref="lib.svn.classpath"
    144   />
    145140 
    146141  <!-- main targets -->
     
    323318      value into the base.build property; replaced by constant expression in source distributions"
    324319    >
    325     <svn>
    326       <status path="." lastChangedRevisionProperty="base.build" />
    327     </svn>
     320    <java
     321      classname="org.tmatesoft.svn.cli.SVN"
     322      classpathref="lib.svnkit.classpath"
     323      outputproperty="svn.info.out"
     324      >
     325      <arg value="info" />
     326      <arg value="." />
     327    </java>
     328    <loadresource property="base.build"
     329      description="Scan output from 'svn info' and keep only the line with 'Last Changed Rev:'"
     330      >
     331      <concat>${svn.info.out}</concat>
     332      <filterchain>
     333        <linecontains><contains value="Last Changed Rev" /></linecontains>
     334        <replaceregex pattern=".*?(\d+)" replace="\1" />
     335        <striplinebreaks/>
     336      </filterchain>
     337    </loadresource>
    328338    <echo message="Build #${base.build}" />
    329339  </target>
     
    11031113    <ant antfile="${lib}/docbook/ant-build-docbook.xml" inheritall="false" target="html.chunked">
    11041114      <property name="ant.docbook.styler.dir" location="${lib}/docbook" />
     1115      <property name="svnkit.dir" location="${lib}/svnkit" />
    11051116      <property name="docbook.xml.dir" location="${docbook.src}" />
    11061117      <property name="docbook.resources.dir" location="${docbook.src}/figures" />
     
    12501261    <property name="tempdir" location="base-${base.version}${base.versionsuffix}-src" />
    12511262    <delete dir="${tempdir}" failonerror="false"/>
    1252     <svn>
    1253       <export srcPath="." destPath="${tempdir}" />
    1254     </svn>
     1263    <java
     1264      classname="org.tmatesoft.svn.cli.SVN"
     1265      classpathref="lib.svnkit.classpath"
     1266      >
     1267      <arg value="export" />
     1268      <arg value="-q" />  <!--quiet: or we get a list of all files that are copied -->
     1269      <arg value="." />
     1270      <arg path="${tempdir}" />
     1271    </java>
     1272   
    12551273    <replaceregexp
     1274      description="replacs the 'java' call in svn.revision with a static property"
    12561275      file="${tempdir}/build.xml"
    1257       match="&lt;svn&gt;.*&lt;status.*?&lt;/svn&gt;"
     1276      match="&lt;java.*org.tmatesoft.svn.cli.SVN.*?&lt;/loadresource&gt;"
    12581277      replace="&lt;property name=&#34;base.build&#34; value=&#34;${base.build}&#34; /&gt;"
    12591278      flags="s"
     
    12981317    <delete dir="${tempdir}" />
    12991318  </target>
    1300    
    1301   <target
    1302     name="svn.update"
    1303     description="Issues an 'svn update' command to check out the latest revision from subversion"
    1304     >
    1305     <svn>
    1306       <update dir="." />
    1307     </svn>
    1308   </target>
    1309  
    1310   <target
    1311     name="svn.diff"
    1312     depends="svn.revision"
    1313     description="Issues an 'svn diff' command to generate a patch with local changes"
    1314     >
    1315     <echo>NOTE! New files must be added to svn with 'svn add' or they will not be added to the patch.</echo>
    1316     <property name="patchfile" value="patch-${base.build}.diff" />
    1317     <pathconvert property="patchdir" dirsep="/" >
    1318       <path location="." />
    1319     </pathconvert>
    1320     <svn>
    1321       <diff oldpath="." outfile="${patchfile}"/>
    1322     </svn>
    1323     <replaceregexp file="${patchfile}" match="${patchdir}/" replace="" flags="g" />
    1324     <echo>Generated patch file: ${patchfile}</echo>
    1325   </target>
    1326    
     1319
    13271320</project>
  • trunk/lib/docbook/ant-build-docbook.xml

    r6490 r7813  
    4646    <pathelement path="${ant.docbook.styler.dir}/ant-extensions" />
    4747  </path>
    48 
    49    <svnSetting id="svnSettings" dateFormatter="${dateformat}" />
    5048 
     49  <path id="lib.svnkit.classpath">
     50    <fileset dir="${svnkit.dir}">
     51      <include name="**/*.jar"/>
     52    </fileset>
     53  </path>
     54
    5155  <!-- ##################################### -->
    5256  <!-- ### {{{ CHECK REQUIRED PROPS      ### -->
     
    250254   
    251255    <!-- Get the revision number and the datetime when the latest file was commited -->
    252     <svn refid="svnSettings">
    253     <status path="../../doc/src/docbook" lastChangedRevisionProperty="doc.revision" />
    254       <status path="../../doc/src/docbook" lastChangedDateProperty="doc.last.modified" />
    255   </svn>
     256  <java
     257    classname="org.tmatesoft.svn.cli.SVN"
     258    classpathref="lib.svnkit.classpath"
     259    outputproperty="svn.info.docbook"
     260    >
     261    <arg value="info" />
     262    <arg path="${docbook.xml.dir}" />
     263  </java>
    256264   
     265  <loadresource property="doc.revision"
     266    description="Scan output from 'svn info' and keep only the line with 'Last Changed Rev:'"
     267    >
     268    <concat>${svn.info.docbook}</concat>
     269    <filterchain>
     270      <linecontains><contains value="Last Changed Rev" /></linecontains>
     271      <replaceregex pattern=".*?(\d+)" replace="\1" />
     272      <striplinebreaks/>
     273    </filterchain>
     274  </loadresource>
     275   
     276  <loadresource property="doc.last.modified"
     277    description="Scan output from 'svn info' and keep only the line with 'Last Changed Date:'"
     278    >
     279    <concat>${svn.info.docbook}</concat>
     280    <filterchain>
     281      <linecontains><contains value="Last Changed Date" /></linecontains>
     282      <replaceregex pattern=".*?(\d{4}\-\d{2}\-\d{2}).*" replace="\1" />
     283      <striplinebreaks/>
     284    </filterchain>
     285  </loadresource>
     286
    257287    <copy file="${docbook.styles}/${docbook.style}/xsl/customized.chunked.xsl"
    258288          tofile="${build.dir}/customized.chunked.xsl.tmp"
  • trunk/src/core/net/sf/basedb/core/Install.java

    r7654 r7813  
    6666import net.sf.basedb.core.hibernate.SchemaGenerator;
    6767import net.sf.basedb.core.hibernate.TypeWrapper;
    68 import net.sf.basedb.core.SessionControl;
    69 import net.sf.basedb.core.DbControl;
    7068import net.sf.basedb.util.FileUtil;
    7169import net.sf.basedb.util.Values;
  • trunk/src/core/net/sf/basedb/core/ItemContext.java

    r7770 r7813  
    12511251 
    12521252 
    1253   public BasicItem getRecent(DbControl dc, Item itemType, int index)
     1253  public <T extends BasicItem> T getRecent(DbControl dc, Item itemType, int index)
    12541254  {
    12551255    return loadRecent(dc, itemType, itemType.name(), index);
    12561256  }
    12571257 
    1258   public BasicItem getRecent(DbControl dc, Item itemType, String subList, int index)
     1258  public <T extends BasicItem> T getRecent(DbControl dc, Item itemType, String subList, int index)
    12591259  {
    12601260    return loadRecent(dc, itemType, itemType.name() + "." + subList, index);
    12611261  }
    12621262 
    1263   private BasicItem loadRecent(DbControl dc, Item itemType, String key, int index)
     1263  private  <T extends BasicItem> T loadRecent(DbControl dc, Item itemType, String key, int index)
    12641264  {
    12651265    List<String> recentIds = getRecent(key);
    1266     BasicItem item = null;
     1266    T item = null;
    12671267    if (index >= 0 && index < recentIds.size())
    12681268    {
  • trunk/src/core/net/sf/basedb/core/PropertyFilter.java

    r7770 r7813  
    365365    @since 2.9
    366366  */
    367   public Object getValueAsObject(Unit unit, boolean asDouble)
     367  public <T> T getValueAsObject(Unit unit, boolean asDouble)
    368368  {
    369369    return getValueAsObject(value, unit, asDouble);
     
    408408    @since 2.5
    409409   */
    410   public List<Object> getValuesAsObjects()
     410  public <T> List<T> getValuesAsObjects()
    411411  {
    412412    return getValuesAsObjects(value, unit, false);
     
    426426    @since 2.9
    427427  */
    428   public List<Object> getValuesAsObjects(Unit unit, boolean asDouble)
     428  public <T> List<T> getValuesAsObjects(Unit unit, boolean asDouble)
    429429  {
    430430    return getValuesAsObjects(value, unit, asDouble);
    431431  }
    432432 
    433   private List<Object> getValuesAsObjects(String value, Unit unit, boolean asDouble)
     433  @SuppressWarnings("unchecked")
     434  private <T> List<T> getValuesAsObjects(String value, Unit unit, boolean asDouble)
    434435  {
    435436    if (value == null) return Collections.emptyList();
     
    476477      if (newSession && session != null) HibernateUtil.close(session);
    477478    }
    478     return Arrays.asList(objects);
     479    return (List<T>)Arrays.asList(objects);
    479480  }
    480481
     
    754755      // The value is the ID of the item list to filter on
    755756      // We support a single selection and either EQ or NEQ operator
    756       Integer listId = (Integer)getValueAsObject();
     757      // or multi-selection with either IN or NOTIN operator
    757758      String prefix = alias == null ? "$id" : alias + ".id";
    758       if (operator == Operator.NEQ)
    759       {
    760         restriction = Hql.restriction(prefix+" NOT IN (SELECT mmb FROM ItemListData lst INNER JOIN lst.members mmb WHERE lst.id=" +listId+")", "$");
    761       }
    762       else
    763       {
    764         restriction = Hql.restriction(prefix+" IN (SELECT mmb FROM ItemListData lst INNER JOIN lst.members mmb WHERE lst.id=" +listId+")", "$");
    765       }
     759      String listId = net.sf.basedb.util.Values.getString(getValuesAsObjects(), ",", true);
     760      String listOp = operator.isNegationOperator() ? "NOT IN" : "IN";
     761      String where = operator.isListOperator() ? "lst.id IN (" + listId + ")" : "lst.id="+listId;
     762      restriction = Hql.restriction(prefix+" "+listOp+" (SELECT mmb FROM ItemListData lst INNER JOIN lst.members mmb WHERE "+where+")", "$");
    766763    }
    767764   
  • trunk/src/core/net/sf/basedb/core/log/db/DbLogManagerFactory.java

    r7164 r7813  
    3939import net.sf.basedb.core.log.LogManagerFactory;
    4040import net.sf.basedb.core.log.ManualLogEntry;
    41 import net.sf.basedb.core.log.db.AnnotationLogger;
    42 import net.sf.basedb.core.log.db.AnnotationSetLogger;
    43 import net.sf.basedb.core.log.db.AnyToAnyLogger;
    44 import net.sf.basedb.core.log.db.BioMaterialEventLogger;
    45 import net.sf.basedb.core.log.db.DefaultEntityLogger;
    46 import net.sf.basedb.core.log.db.FileSetMemberLogger;
    47 import net.sf.basedb.core.log.db.PlateEventLogger;
    4841import net.sf.basedb.util.extensions.ActionFactory;
    4942import net.sf.basedb.util.extensions.InvokationContext;
  • trunk/src/core/net/sf/basedb/core/query/AnyToAnyRestriction.java

    r6933 r7813  
    77import net.sf.basedb.core.Item;
    88import net.sf.basedb.core.Type;
    9 import net.sf.basedb.core.query.Query;
    10 import net.sf.basedb.core.query.QueryElement;
    119import net.sf.basedb.core.query.Restriction;
    1210import net.sf.basedb.util.EqualsHelper;
  • trunk/src/core/net/sf/basedb/core/query/ReporterListExpression.java

    r6127 r7813  
    3030import net.sf.basedb.core.ReporterList;
    3131import net.sf.basedb.core.query.Expression;
    32 import net.sf.basedb.core.query.Query;
    33 import net.sf.basedb.core.query.QueryElement;
    34 import net.sf.basedb.core.query.QueryType;
    3532import net.sf.basedb.util.EqualsHelper;
    3633
  • trunk/src/core/net/sf/basedb/util/overview/OverviewUtil.java

    r7642 r7813  
    5858import net.sf.basedb.util.overview.extensions.ValidationRuleAction;
    5959import net.sf.basedb.util.overview.filter.BasicItemFilter;
    60 import net.sf.basedb.util.overview.Node;
    6160
    6261/**
  • trunk/www/biomaterials/bioplates/wells/list_biowells.jsp

    r7605 r7813  
    360360        filterable="true"
    361361        enumeration="<%=Base.getItemListsEnum(dc, bioMaterialType, cc.getInclude())%>"
    362         multiple="false"
    363362      />
    364363      <tbl:columndef
  • trunk/www/biomaterials/biosources/biosources.js

    r7604 r7813  
    7878      Buttons.addClickHandler('btnRunPlugin', Buttons.runListPlugin, tableAttributes);
    7979      Buttons.addClickHandler('btnNewItemList', biosources.newItemListOnClick);
     80      Buttons.addClickHandler('btnAddToItemList', biosources.addToItemListOnClick);
    8081     
    8182      Buttons.addClickHandler('close', App.closeWindow);
     
    107108    var controller = Items.getController('ITEMLIST');
    108109    Table.submitToPopup('biosources', 'CreateItemList', controller.width, controller.height);
     110  }
     111
     112  // Add selected biosources to an existing item list
     113  biosources.addToItemListOnClick = function()
     114  {
     115    Table.submitToPopup('biosources', 'AddItemsToList', 450, 300);
    109116  }
    110117 
  • trunk/www/biomaterials/biosources/index.jsp

    r7703 r7813  
    361361    redirect = "../../views/itemlists/index.jsp?ID="+ID+"&cmd=NewItem&addItems=1&memberType=BIOSOURCE&formId=biosources";
    362362  }
     363  else if ("AddItemsToList".equals(cmd))
     364  {
     365    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
     366    final ItemQuery<BioSource> query = BioSource.getQuery();
     367    dc = sc.newDbControl();
     368    cc.configureQuery(dc, query, true);
     369    dc.close();
     370    cc.setQuery(query);
     371    redirect = "../../views/itemlists/add_items.jsp?ID="+ID+"&memberType=BIOSOURCE&formId=biosources";
     372  }
    363373  else
    364374  {
  • trunk/www/biomaterials/biosources/list_biosources.jsp

    r7605 r7813  
    3939  import="net.sf.basedb.core.ItemResultList"
    4040  import="net.sf.basedb.core.ItemContext"
     41  import="net.sf.basedb.core.ItemList"
    4142  import="net.sf.basedb.core.Nameable"
    4243  import="net.sf.basedb.core.Permission"
     
    6162  import="net.sf.basedb.clients.web.util.HTML"
    6263  import="net.sf.basedb.util.formatter.Formatter"
     64  import="net.sf.basedb.util.formatter.NameableFormatter"
     65  import="net.sf.basedb.clients.web.formatter.LinkedItemFormatter"
    6366  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
    6467  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
     
    9295
    9396final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
     97final Formatter<Nameable> nameableFormatter = mode.hasPropertyLink() ? new LinkedItemFormatter(mode.hasEditLink()) : new NameableFormatter();
    9498final String callback = request.getParameter("callback");
    9599final String title = mode.generateTitle("biosource", "biosources");
     
    109113
    110114  final ItemQuery<Sample> sampleQuery = Sample.getQuery();
    111   sampleQuery.include(cc.getInclude());
     115  sampleQuery.setIncludes(cc.getInclude());
    112116  sampleQuery.restrict(Restrictions.eq(Hql.property("parent"), Expressions.parameter("bioSource")));
    113117  sampleQuery.order(Orders.asc(Hql.property("name")));
    114118  final boolean createSamplePermission = sc.hasPermission(Permission.CREATE, Item.SAMPLE);
    115119
     120  // List membership
     121  final ItemQuery<ItemList> listQuery = ItemList.getQuery();
     122  listQuery.setIncludes(cc.getInclude());
     123  listQuery.join(Hql.innerJoin("members", "m"));
     124  listQuery.restrict(Restrictions.eq(Hql.property("memberType"), Expressions.integer(itemType.getValue())));
     125  listQuery.restrict(Restrictions.eq(Hql.alias("m"), Expressions.parameter("itemId", Type.INT)));
     126  listQuery.order(Orders.asc(Hql.property("name")));
     127 
    116128  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
    117129  try
     
    234246        title="Description"
    235247        sortable="true"
    236         filterable="true" subclass="foobar"
     248        filterable="true"
    237249        exportable="true"
    238250      />     
     
    244256        filterable="true"
    245257        enumeration="<%=Base.getItemListsEnum(dc, itemType, cc.getInclude())%>"
    246         multiple="false"
    247258      />
    248259      <%
     
    345356            tooltip="Create a new item list from matching biosources"
    346357            visible="<%=sc.hasPermission(Permission.CREATE, Item.ITEMLIST)%>"
     358          />
     359          <tbl:button
     360            id="btnAddToItemList"
     361            image="add.png"
     362            title="Add to item list&hellip;"
     363            tooltip="Add items to an existing item list"
    347364          />
    348365          <tbl:button
     
    521538                  /></tbl:cell>
    522539                <tbl:cell column="externalId"><%=HTML.encodeTags(item.getExternalId())%></tbl:cell>
     540                <tbl:cell column="itemList">
     541                  <%
     542                  listQuery.setParameter("itemId", itemId, Type.INT);
     543                  %>
     544                  <%=Values.getString(listQuery.list(dc), ", ", false, nameableFormatter) %>
     545                </tbl:cell>
    523546                <tbl:cell column="samples">
    524547                  <%
    525548                  sampleQuery.setParameter("bioSource", itemId, Type.INT);
    526                   try
    527                   {
    528                     String separator = "";
    529                     for (Sample s : sampleQuery.list(dc))
    530                     {
    531                       out.write(separator);
    532                       if (mode.hasPropertyLink())
    533                       {
    534                         out.write(Base.getLinkedName(ID, s, false, mode.hasEditLink()));
    535                       }
    536                       else
    537                       {
    538                         out.write(HTML.encodeTags(s.getName()));
    539                       }
    540                       separator = ", ";
    541                     }
    542                   }
    543                   catch (Throwable t)
    544                   {
    545                     %>
    546                     <div class="error"><%=t.getMessage()%></div>
    547                     <%
    548                   }
    549549                  %>
     550                  <%=Values.getString(sampleQuery.list(dc), ", ", false, nameableFormatter) %>
    550551                  <base:icon
    551552                    id="<%="newsample."+itemId%>"
     
    592593                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
    593594                <tbl:cell column="sharedTo">
    594                   <%
    595                   Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
    596                   while(sharees.hasNext())
    597                   {
    598                     Nameable n = sharees.next();
    599                     if (mode.hasPropertyLink())
    600                     {
    601                       out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
    602                     }
    603                     else
    604                     {
    605                       out.write(HTML.encodeTags(n.getName()));
    606                     }
    607                     out.write(sharees.hasNext() ? ", " : "");
    608                   }
    609                   %>
     595                  <%=Values.getString(ShareableUtil.getSharedTo(dc, item), ", ", false, nameableFormatter) %>
    610596                </tbl:cell>
    611597                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
  • trunk/www/biomaterials/biosources/view_biosource.jsp

    r7604 r7813  
    333333      </jsp:include>
    334334     
     335      <jsp:include page="../../common/itemlists/list_membership.jsp">
     336        <jsp:param name="ID" value="<%=ID%>" />
     337        <jsp:param name="item_type" value="<%=itemType.name()%>" />
     338        <jsp:param name="item_id" value="<%=itemId%>" />
     339        <jsp:param name="title" value="Item lists where this biosource is a member" />
     340      </jsp:include>
     341     
    335342      <jsp:include page="../../common/share/list_share.jsp">
    336343        <jsp:param name="ID" value="<%=ID%>" />
  • trunk/www/biomaterials/extracts/extracts.js

    r7604 r7813  
    125125      Buttons.addClickHandler('btnRunPlugin', Buttons.runListPlugin, tableAttributes);
    126126      Buttons.addClickHandler('btnNewItemList', extracts.newItemListOnClick);
     127      Buttons.addClickHandler('btnAddToItemList', extracts.addToItemListOnClick);
    127128      Buttons.addClickHandler('btnPlaceOnPlate', extracts.placeOnPlateOnClick);
    128129      Buttons.addClickHandler('btnNewPooledItem', extracts.newPooledItemOnClick);
     
    193194    var controller = Items.getController('ITEMLIST');
    194195    Table.submitToPopup('extracts', 'CreateItemList', controller.width, controller.height);
     196  }
     197 
     198  // Add selected extracts to an existing item list
     199  extracts.addToItemListOnClick = function()
     200  {
     201    Table.submitToPopup('extracts', 'AddItemsToList', 450, 300);
    195202  }
    196203 
  • trunk/www/biomaterials/extracts/index.jsp

    r7703 r7813  
    531531    redirect = "../../views/itemlists/index.jsp?ID="+ID+"&cmd=NewItem&addItems=1&memberType=EXTRACT&formId=extracts";
    532532  }
     533  else if ("AddItemsToList".equals(cmd))
     534  {
     535    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
     536    final ItemQuery<Extract> query = Extract.getQuery();
     537    dc = sc.newDbControl();
     538    cc.configureQuery(dc, query, true);
     539    dc.close();
     540    cc.setQuery(query);
     541    redirect = "../../views/itemlists/add_items.jsp?ID="+ID+"&memberType=EXTRACT&formId=extracts";
     542  }
    533543  else if ("PlaceOnPlate".equals(cmd))
    534544  {
  • trunk/www/biomaterials/extracts/list_extracts.jsp

    r7773 r7813  
    4848  import="net.sf.basedb.core.ItemResultList"
    4949  import="net.sf.basedb.core.ItemContext"
     50  import="net.sf.basedb.core.ItemList"
    5051  import="net.sf.basedb.core.Nameable"
    5152  import="net.sf.basedb.core.Permission"
     
    7475  import="net.sf.basedb.util.formatter.Formatter"
    7576  import="net.sf.basedb.util.formatter.WellCoordinateFormatter"
     77  import="net.sf.basedb.util.formatter.NameableFormatter"
     78  import="net.sf.basedb.clients.web.formatter.LinkedItemFormatter"
    7679  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
    7780  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
     
    105108
    106109final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
     110final Formatter<Nameable> nameableFormatter = mode.hasPropertyLink() ? new LinkedItemFormatter(mode.hasEditLink()) : new NameableFormatter();
    107111final String callback = request.getParameter("callback");
    108112final String title = mode.generateTitle("extract", "extracts");
     
    141145  bioAssayQuery.restrict(Restrictions.eq(Hql.property("src", "bioMaterial"), Hql.entityParameter("extract", Item.EXTRACT)));
    142146  bioAssayQuery.order(Orders.asc(Hql.property("name")));
    143   bioAssayQuery.include(cc.getInclude());
     147  bioAssayQuery.setIncludes(cc.getInclude());
    144148
    145149  // Child derived bioassays
     
    147151  derivedAssayQuery.restrict(Restrictions.eq(Hql.property("extract"), Hql.entityParameter("extract", Item.EXTRACT)));
    148152  derivedAssayQuery.order(Orders.asc(Hql.property("name")));
    149   derivedAssayQuery.include(cc.getInclude());
     153  derivedAssayQuery.setIncludes(cc.getInclude());
    150154
    151155  // Child raw bioassays
     
    153157  rawAssayQuery.restrict(Restrictions.eq(Hql.property("parentExtract"), Hql.entityParameter("extract", Item.EXTRACT)));
    154158  rawAssayQuery.order(Orders.asc(Hql.property("name")));
    155   rawAssayQuery.include(cc.getInclude());
     159  rawAssayQuery.setIncludes(cc.getInclude());
    156160
    157161  // Child extracts
     
    161165  childExtractsQuery.restrict(Restrictions.eq(Hql.property("src", "bioMaterial"), Hql.entityParameter("extract", Item.EXTRACT)));
    162166  childExtractsQuery.order(Orders.asc(Hql.property("name")));
    163   childExtractsQuery.include(cc.getInclude());
     167  childExtractsQuery.setIncludes(cc.getInclude());
    164168 
    165169  // Parent extracts
     
    169173  parentExtractsQuery.restrict(Restrictions.eq(Hql.alias("evt"), Hql.entityParameter("creationEvent", Item.BIOMATERIALEVENT)));
    170174  parentExtractsQuery.order(Orders.asc(Hql.property("name")));
    171   parentExtractsQuery.include(cc.getInclude());
     175  parentExtractsQuery.setIncludes(cc.getInclude());
    172176 
     177  // List membership
     178  final ItemQuery<ItemList> listQuery = ItemList.getQuery();
     179  listQuery.setIncludes(cc.getInclude());
     180  listQuery.join(Hql.innerJoin("members", "m"));
     181  listQuery.restrict(Restrictions.eq(Hql.property("memberType"), Expressions.integer(itemType.getValue())));
     182  listQuery.restrict(Restrictions.eq(Hql.alias("m"), Expressions.parameter("itemId", Type.INT)));
     183  listQuery.order(Orders.asc(Hql.property("name")));
     184
    173185  Unit microGram = UnitUtil.getUnit(dc, Quantity.MASS, "µg");
    174186  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
     
    479491        filterable="true"
    480492        enumeration="<%=Base.getItemListsEnum(dc, itemType, cc.getInclude())%>"
    481         multiple="false"
    482493      />
    483494      <%
     
    627638          tooltip="Create a new item list from matching extracts"
    628639          visible="<%=sc.hasPermission(Permission.CREATE, Item.ITEMLIST)%>"
     640        />
     641        <tbl:button
     642          id="btnAddToItemList"
     643          image="add.png"
     644          title="Add to item list&hellip;"
     645          tooltip="Add extracts to an existing item list"
    629646        />
    630647        <tbl:button
     
    891908                  <%
    892909                  childExtractsQuery.setEntityParameter("extract", item);
    893                   String separator = "";
    894                   for (Extract e : childExtractsQuery.list(dc))
    895                   {
    896                     out.write(separator);
    897                     if (mode.hasPropertyLink())
    898                     {
    899                       out.write(Base.getLinkedName(ID, e, false, mode.hasEditLink()));
    900                     }
    901                     else
    902                     {
    903                       out.write(HTML.encodeTags(e.getName()));
    904                     }
    905                     separator = ", ";
    906                   }
    907910                  %>
     911                  <%=Values.getString(childExtractsQuery.list(dc), ", ", false, nameableFormatter) %>
    908912                  <base:icon
    909913                    id="<%="newextract."+itemId%>"
     
    918922                <tbl:cell column="physicalBioAssays">
    919923                  <%                 
    920                   try
    921                   {
    922                     bioAssayQuery.setEntityParameter("extract", item);
    923                     String separator = "";
    924                     for (PhysicalBioAssay pba : bioAssayQuery.list(dc))
    925                     {
    926                       out.write(separator);
    927                       if (mode.hasPropertyLink())
    928                       {
    929                         out.write(Base.getLinkedName(ID, pba, false, mode.hasEditLink()));
    930                       }
    931                       else
    932                       {
    933                         out.write(HTML.encodeTags(pba.getName()));
    934                       }
    935                       separator = ", ";
    936                     }
    937                   }
    938                   catch (Throwable t)
    939                   {
    940                     %>
    941                     <div class="error"><%=t.getMessage()%></div>
    942                     <%
    943                   }
     924                  bioAssayQuery.setEntityParameter("extract", item);
    944925                  %>
     926                  <%=Values.getString(bioAssayQuery.list(dc), ", ", false, nameableFormatter) %>
    945927                </tbl:cell>
    946928                <tbl:cell column="derivedBioAssays">
    947929                  <%                 
    948                   try
    949                   {
    950                     derivedAssayQuery.setEntityParameter("extract", item);
    951                     String separator = "";
    952                     for (DerivedBioAssay dba : derivedAssayQuery.list(dc))
    953                     {
    954                       out.write(separator);
    955                       if (mode.hasPropertyLink())
    956                       {
    957                         out.write(Base.getLinkedName(ID, dba, false, mode.hasEditLink()));
    958                       }
    959                       else
    960                       {
    961                         out.write(HTML.encodeTags(dba.getName()));
    962                       }
    963                       separator = ", ";
    964                     }
    965                   }
    966                   catch (Throwable t)
    967                   {
    968                     %>
    969                     <div class="error"><%=t.getMessage()%></div>
    970                     <%
    971                   }
     930                  derivedAssayQuery.setEntityParameter("extract", item);
    972931                  %>
     932                  <%=Values.getString(derivedAssayQuery.list(dc), ", ", false, nameableFormatter) %>
    973933                  <base:icon
    974934                    id="<%="newDerivedBioAssay."+itemId%>"
     
    983943                <tbl:cell column="rawBioAssays">
    984944                  <%                 
    985                   try
    986                   {
    987                     rawAssayQuery.setEntityParameter("extract", item);
    988                     String separator = "";
    989                     for (RawBioAssay rba : rawAssayQuery.list(dc))
    990                     {
    991                       out.write(separator);
    992                       if (mode.hasPropertyLink())
    993                       {
    994                         out.write(Base.getLinkedName(ID, rba, false, mode.hasEditLink()));
    995                       }
    996                       else
    997                       {
    998                         out.write(HTML.encodeTags(rba.getName()));
    999                       }
    1000                       separator = ", ";
    1001                     }
    1002                   }
    1003                   catch (Throwable t)
    1004                   {
    1005                     %>
    1006                     <div class="error"><%=t.getMessage()%></div>
    1007                     <%
    1008                   }
     945                  rawAssayQuery.setEntityParameter("extract", item);
    1009946                  %>
     947                  <%=Values.getString(rawAssayQuery.list(dc), ", ", false, nameableFormatter) %>
    1010948                  <base:icon
    1011949                    id="<%="newRawBioAssay."+itemId%>"
     
    1017955                    visible="<%=mode.hasEditLink() && createRawBioAssayPermission && usePermission %>"
    1018956                  />
     957                </tbl:cell>
     958                <tbl:cell column="itemList">
     959                  <%
     960                  listQuery.setParameter("itemId", itemId, Type.INT);
     961                  %>
     962                  <%=Values.getString(listQuery.list(dc), ", ", false, nameableFormatter) %>
    1019963                </tbl:cell>
    1020964                <%               
     
    11151059                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
    11161060                <tbl:cell column="sharedTo">
    1117                   <%
    1118                   Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
    1119                   while(sharees.hasNext())
    1120                   {
    1121                     Nameable n = sharees.next();
    1122                     if (mode.hasPropertyLink())
    1123                     {
    1124                       out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
    1125                     }
    1126                     else
    1127                     {
    1128                       out.write(HTML.encodeTags(n.getName()));
    1129                     }
    1130                     out.write(sharees.hasNext() ? ", " : "");
    1131                   }
    1132                   %>
     1061                  <%=Values.getString(ShareableUtil.getSharedTo(dc, item), ", ", false, nameableFormatter) %>
    11331062                </tbl:cell>
    11341063                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
  • trunk/www/biomaterials/extracts/view_extract.jsp

    r7604 r7813  
    628628        <jsp:param name="title" value="Other items related to this extract" />
    629629      </jsp:include>
     630     
     631      <jsp:include page="../../common/itemlists/list_membership.jsp">
     632        <jsp:param name="ID" value="<%=ID%>" />
     633        <jsp:param name="item_type" value="<%=itemType.name()%>" />
     634        <jsp:param name="item_id" value="<%=itemId%>" />
     635        <jsp:param name="title" value="Item lists where this extract is a member" />
     636      </jsp:include>
     637     
    630638      <jsp:include page="../../common/share/list_share.jsp">
    631639        <jsp:param name="ID" value="<%=ID%>" />
  • trunk/www/biomaterials/samples/index.jsp

    r7703 r7813  
    497497    redirect = "../../views/itemlists/index.jsp?ID="+ID+"&cmd=NewItem&addItems=1&memberType=SAMPLE&formId=samples";
    498498  }
     499  else if ("AddItemsToList".equals(cmd))
     500  {
     501    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
     502    final ItemQuery<Sample> query = Sample.getQuery();
     503    dc = sc.newDbControl();
     504    cc.configureQuery(dc, query, true);
     505    dc.close();
     506    cc.setQuery(query);
     507    redirect = "../../views/itemlists/add_items.jsp?ID="+ID+"&memberType=SAMPLE&formId=samples";
     508  }
    499509  else if ("PlaceOnPlate".equals(cmd))
    500510  {
  • trunk/www/biomaterials/samples/list_samples.jsp

    r7773 r7813  
    4242  import="net.sf.basedb.core.ItemResultList"
    4343  import="net.sf.basedb.core.ItemContext"
     44  import="net.sf.basedb.core.ItemList"
    4445  import="net.sf.basedb.core.Nameable"
    4546  import="net.sf.basedb.core.Permission"
     
    7273  import="net.sf.basedb.util.formatter.Formatter"
    7374  import="net.sf.basedb.util.formatter.WellCoordinateFormatter"
     75  import="net.sf.basedb.util.formatter.NameableFormatter"
     76  import="net.sf.basedb.clients.web.formatter.LinkedItemFormatter"
    7477  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
    7578  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
     
    102105
    103106final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
     107final Formatter<Nameable> nameableFormatter = mode.hasPropertyLink() ? new LinkedItemFormatter(mode.hasEditLink()) : new NameableFormatter();
    104108final String callback = request.getParameter("callback");
    105109final String title = mode.generateTitle("sample", "samples");
     
    125129  childSamplesQuery.restrict(Restrictions.eq(Hql.property("src", "bioMaterial"), Hql.entityParameter("sample", Item.SAMPLE)));
    126130  childSamplesQuery.order(Orders.asc(Hql.property("name")));
    127   childSamplesQuery.include(cc.getInclude());
     131  childSamplesQuery.setIncludes(cc.getInclude());
    128132 
    129133  // Parent samples
     
    133137  parentSamplesQuery.restrict(Restrictions.eq(Hql.alias("evt"), Hql.entityParameter("creationEvent", Item.BIOMATERIALEVENT)));
    134138  parentSamplesQuery.order(Orders.asc(Hql.property("name")));
    135   parentSamplesQuery.include(cc.getInclude());
     139  parentSamplesQuery.setIncludes(cc.getInclude());
    136140
     141  // List membership
     142  final ItemQuery<ItemList> listQuery = ItemList.getQuery();
     143  listQuery.setIncludes(cc.getInclude());
     144  listQuery.join(Hql.innerJoin("members", "m"));
     145  listQuery.restrict(Restrictions.eq(Hql.property("memberType"), Expressions.integer(itemType.getValue())));
     146  listQuery.restrict(Restrictions.eq(Hql.alias("m"), Expressions.parameter("itemId", Type.INT)));
     147  listQuery.order(Orders.asc(Hql.property("name")));
     148 
    137149  Unit microGram = UnitUtil.getUnit(dc, Quantity.MASS, "µg");
    138150  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
     
    429441        filterable="true"
    430442        enumeration="<%=Base.getItemListsEnum(dc, itemType, cc.getInclude())%>"
    431         multiple="false"
    432443      />
    433444      <%
     
    538549            tooltip="Create a new item list from matching samples"
    539550            visible="<%=sc.hasPermission(Permission.CREATE, Item.ITEMLIST)%>"
     551          />
     552          <tbl:button
     553            id="btnAddToItemList"
     554            image="add.png"
     555            title="Add to item list&hellip;"
     556            tooltip="Add samples to an existing item list"
    540557          />
    541558          <tbl:button
     
    837854                  <%
    838855                  childSamplesQuery.setEntityParameter("sample", item);
    839                   String separator = "";
    840                   for (Sample s : childSamplesQuery.list(dc))
    841                   {
    842                     out.write(separator);
    843                     if (mode.hasPropertyLink())
    844                     {
    845                       out.write(Base.getLinkedName(ID, s, false, mode.hasEditLink()));
    846                     }
    847                     else
    848                     {
    849                       out.write(HTML.encodeTags(s.getName()));
    850                     }
    851                     separator = ", ";
    852                   }
    853856                  %>
     857                  <%=Values.getString(childSamplesQuery.list(dc), ", ", false, nameableFormatter) %>
    854858                  <base:icon
    855859                    id="<%="newsample."+itemId%>"
     
    865869                  <%
    866870                  extractQuery.setEntityParameter("sample", item);
    867                   try
    868                   {
    869                     String separator = "";
    870                     for(Extract e : extractQuery.list(dc))
    871                     {
    872                       out.write(separator);
    873                       if (mode.hasPropertyLink())
    874                       {
    875                         out.write(Base.getLinkedName(ID, e, false, mode.hasEditLink()));
    876                       }
    877                       else
    878                       {
    879                         out.write(HTML.encodeTags(e.getName()));
    880                       }
    881                       separator = ", ";
    882                     }
    883                   }
    884                   catch (Throwable t)
    885                   {
    886                     %>
    887                     <div class="error"><%=t.getMessage()%></div>
    888                     <%
    889                   }
    890871                  %>
     872                  <%=Values.getString(extractQuery.list(dc), ", ", false, nameableFormatter) %>
    891873                  <base:icon
    892874                    id="<%="newsample."+itemId%>"
     
    898880                    visible="<%=mode.hasEditLink() && createExtractPermission && usePermission %>"
    899881                  />
     882                </tbl:cell>
     883                <tbl:cell column="itemList">
     884                  <%
     885                  listQuery.setParameter("itemId", itemId, Type.INT);
     886                  %>
     887                  <%=Values.getString(listQuery.list(dc), ", ", false, nameableFormatter) %>
    900888                </tbl:cell>
    901889                <tbl:cell column="owner"
     
    932920                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
    933921                <tbl:cell column="sharedTo">
    934                   <%
    935                   Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
    936                   while(sharees.hasNext())
    937                   {
    938                     Nameable n = sharees.next();
    939                     if (mode.hasPropertyLink())
    940                     {
    941                       out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
    942                     }
    943                     else
    944                     {
    945                       out.write(HTML.encodeTags(n.getName()));
    946                     }
    947                     out.write(sharees.hasNext() ? ", " : "");
    948                   }
    949                   %>
     922                  <%=Values.getString(ShareableUtil.getSharedTo(dc, item), ", ", false, nameableFormatter) %>
    950923                </tbl:cell>
    951924                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
  • trunk/www/biomaterials/samples/samples.js

    r7604 r7813  
    118118      Buttons.addClickHandler('btnRunPlugin', Buttons.runListPlugin, tableAttributes);
    119119      Buttons.addClickHandler('btnNewItemList', samples.newItemListOnClick);
     120      Buttons.addClickHandler('btnAddToItemList', samples.addToItemListOnClick);
    120121      Buttons.addClickHandler('btnPlaceOnPlate', samples.placeOnPlateOnClick);
    121122      Buttons.addClickHandler('btnNewPooledItem', samples.newPooledItemOnClick);
     
    162163    var controller = Items.getController('ITEMLIST');
    163164    Table.submitToPopup('samples', 'CreateItemList', controller.width, controller.height);
     165  }
     166 
     167  // Add selected samples to an existing item list
     168  samples.addToItemListOnClick = function()
     169  {
     170    Table.submitToPopup('samples', 'AddItemsToList', 450, 300);
    164171  }
    165172 
  • trunk/www/biomaterials/samples/view_sample.jsp

    r7604 r7813  
    490490          <jsp:param name="title" value="Other items related to this sample" />
    491491        </jsp:include>
     492       
     493        <jsp:include page="../../common/itemlists/list_membership.jsp">
     494          <jsp:param name="ID" value="<%=ID%>" />
     495          <jsp:param name="item_type" value="<%=itemType.name()%>" />
     496          <jsp:param name="item_id" value="<%=itemId%>" />
     497          <jsp:param name="title" value="Item lists where this sample is a member" />
     498        </jsp:include>
     499     
    492500
    493501        <jsp:include page="../../common/share/list_share.jsp">
  • trunk/www/common/columns/add_parent_column.js

    r7780 r7813  
    6464    Events.addEventHandler('subtype', 'change', configure.subtypeOnChange);
    6565    Events.addEventHandler('showAllAnnotationTypes', 'change', configure.updateColumnsList);
     66    Events.addEventHandler('column', 'dblclick', configure.addColumn);
     67    Events.addEventHandler(document.body, 'click', configure.hideMessage);
    6668   
    6769    // Buttons
     
    164166 
    165167 
    166   configure.addColumn = function()
     168  configure.addColumn = function(event)
    167169  {
    168170    var frm = document.forms['parents'];
     
    204206      return;
    205207    }
    206     else
    207     {
    208       for (var i = frm.column.length-1; i >= 0; i--)
    209       {
    210         if (frm.column[i].selected) frm.column[i] = null;
    211       }
    212     }
     208   
     209    for (var i = frm.column.length-1; i >= 0; i--)
     210    {
     211      if (frm.column[i].selected) frm.column[i] = null;
     212    }
     213    Doc.element('added-column-msg').innerHTML = numSelected == 1 ?
     214      '1 column has been added to the table.' : numSelected + ' columns have been added to the table.';
     215    Doc.show('added-column-msg');
     216    event.stopPropagation(); // To prevent the hideMessage() method from executing
     217  }
     218 
     219  configure.hideMessage = function(event)
     220  {
     221    Doc.hide('added-column-msg');
    213222  }
    214223 
  • trunk/www/common/columns/add_parent_column.jsp

    r7773 r7813  
    8080      <th>Column</th>
    8181      <td>
    82         <select name="column" id="column" style="min-width: 25em; height: calc(100% - 3em);" multiple>
    83         </select>
     82        <select name="column" id="column" style="min-width: 25em; height: calc(100% - 4em);" multiple></select>
     83        <div id="added-column-msg" class="messagecontainer note" style="display:none; margin: 0.5em 0;"></div>
    8484      </td>
    8585    </tr>
  • trunk/www/exception/not_logged_in.jsp

    r7680 r7813  
    6666    margin-left: 0.5em;
    6767  }
     68  .dialogbuttons.popup-only
     69  {
     70    display: none;
     71  }
     72  .popup .dialogbuttons.popup-only
     73  {
     74    display: block;
     75  }
     76  .popup .dialogbuttons.no-popup
     77  {
     78    display: none;
     79  }
    6880  </style>
    6981  </base:head>
     
    8496    </table>
    8597
    86     <base:buttongroup subclass="dialogbuttons">
     98    <base:buttongroup subclass="dialogbuttons popup-only">
    8799      <base:button id="close" title="Close"/>
    88100      <base:button id="gologin" image="login.png" title="Login again&hellip;" />
     101    </base:buttongroup>
     102    <base:buttongroup subclass="dialogbuttons no-popup">
     103      <base:button id="gologin2" image="login.png" title="Login again&hellip;" />
    89104    </base:buttongroup>
    90105       
  • trunk/www/include/scripts/exception.js

    r7604 r7813  
    4343    Buttons.addClickHandler('continuePluginWizard', exception.continuePluginWizard);
    4444    Buttons.addClickHandler('gologin', exception.goLogin);
     45    Buttons.addClickHandler('gologin2', exception.goLogin);
    4546  }
    4647 
  • trunk/www/include/scripts/main-2.js

    r7769 r7813  
    22862286      element.addEventListener('blur', internal.hideNotification, false);
    22872287      element.addEventListener('keypress', internal.hideNotification, false);
     2288      element.addEventListener('click', internal.hideNotification, false);
    22882289      notifyDiv.addEventListener('click', internal.hideNotification, false);
    22892290    }
  • trunk/www/include/styles/size_l.css

    r7604 r7813  
    3333html
    3434{
    35   font-size: 90%;
     35  font-size: 14px;
    3636}
    3737
    3838/* The fulltable need to adjust top toolbar space */
    39 .itemlist div.panel
    40 {
    41   height: 1.5em;
    42   max-height: 1.7em;
    43 }
    44 
    4539.fulltable div.panelgroup
    4640{
  • trunk/www/include/styles/size_m.css

    r7604 r7813  
    3333html
    3434{
    35   font-size: 75%;
     35  font-size: 12px;
    3636}
    3737
  • trunk/www/include/styles/size_s.css

    r7604 r7813  
    3232html
    3333{
    34   font-size: 67.5%;
     34  font-size: 11px;
    3535}
    3636
    3737/* The fulltable need to adjust top toolbar space */
    38 .itemlist div.panel
    39 {
    40   height: 1.7em;
    41   max-height: 1.8em;
    42 }
    43 
    4438.fulltable div.panelgroup
    4539{
  • trunk/www/include/styles/size_xl.css

    r7604 r7813  
    3232html
    3333{
    34   font-size: 110%;
     34  font-size: 16px;
    3535}
    3636
    3737/* The fulltable need to adjust top toolbar space */
    38 .itemlist div.panel
    39 {
    40   height: 1.4em;
    41   max-height: 1.6em;
    42 }
    43 
    4438.fulltable div.panelgroup
    4539{
  • trunk/www/include/styles/size_xs.css

    r7604 r7813  
    3232html
    3333{
    34   font-size: 60%;
     34  font-size: 10px;
    3535}
    3636
    3737/* The fulltable need to adjust top toolbar space */
    38 .itemlist div.panel
    39 {
    40   height: 1.7em;
    41   max-height: 1.8em;
    42 }
    43 
    4438.fulltable div.panelgroup
    4539{
  • trunk/www/views/derivedbioassays/bioassays.js

    r7604 r7813  
    122122      Buttons.addClickHandler('btnNewMergedDerivedBioAssay', bioassays.newMergedDerivedBioAssay);
    123123      Buttons.addClickHandler('btnNewItemList', bioassays.newItemListOnClick);
     124      Buttons.addClickHandler('btnAddToItemList', bioassays.addToItemListOnClick);
    124125
    125126      Buttons.addClickHandler('close', App.closeWindow);
     
    166167    var controller = Items.getController('ITEMLIST');
    167168    Table.submitToPopup('bioassays', 'CreateItemList', controller.width, controller.height);
     169  }
     170  // Add selected bioassays to an existing item list
     171  bioassays.addToItemListOnClick = function()
     172  {
     173    Table.submitToPopup('bioassays', 'AddItemsToList', 450, 300);
    168174  }
    169175
  • trunk/www/views/derivedbioassays/index.jsp

    r7703 r7813  
    499499    redirect = "../../views/itemlists/index.jsp?ID="+ID+"&cmd=NewItem&addItems=1&memberType=DERIVEDBIOASSAY&formId=bioassays";
    500500  }
     501  else if ("AddItemsToList".equals(cmd))
     502  {
     503    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
     504    final ItemQuery<DerivedBioAssay> query = DerivedBioAssay.getQuery();
     505    dc = sc.newDbControl();
     506    cc.configureQuery(dc, query, true);
     507    dc.close();
     508    cc.setQuery(query);
     509    redirect = "../../views/itemlists/add_items.jsp?ID="+ID+"&memberType=DERIVEDBIOASSAY&formId=bioassays";
     510  }
    501511  else if ("NewMergedDerivedBioAssay".equals(cmd))
    502512  {
  • trunk/www/views/derivedbioassays/list_bioassays.jsp

    r7773 r7813  
    3636  import="net.sf.basedb.core.DataFileType"
    3737  import="net.sf.basedb.core.ItemQuery"
     38  import="net.sf.basedb.core.ItemList"
    3839  import="net.sf.basedb.core.Include"
    3940  import="net.sf.basedb.core.Type"
     
    6465  import="net.sf.basedb.clients.web.util.HTML"
    6566  import="net.sf.basedb.util.formatter.Formatter"
     67  import="net.sf.basedb.util.formatter.NameableFormatter"
     68  import="net.sf.basedb.clients.web.formatter.LinkedItemFormatter"
    6669  import="net.sf.basedb.clients.web.formatter.DataFileFormatter"
    6770  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
     
    97100
    98101final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
     102final Formatter<Nameable> nameableFormatter = mode.hasPropertyLink() ? new LinkedItemFormatter(mode.hasEditLink()) : new NameableFormatter();
    99103final String callback = request.getParameter("callback");
    100104final String title = mode.generateTitle("derived bioassay", "derived bioassays");
     
    123127  // Query for parent physical bioassays to the current bioassay
    124128  final ItemQuery<PhysicalBioAssay> physicalBioAssayQuery = PhysicalBioAssay.getQuery();
    125   physicalBioAssayQuery.include(cc.getInclude());
     129  physicalBioAssayQuery.setIncludes(cc.getInclude());
    126130  physicalBioAssayQuery.join(Hql.innerJoin("derivedBioAssays", "dba"));
    127131  physicalBioAssayQuery.restrict(Restrictions.eq(Hql.alias("dba"), Expressions.parameter("bioAssay")));
     
    130134  // Query for parent bioassays to the current bioassay
    131135  final ItemQuery<DerivedBioAssay> parentQuery = DerivedBioAssay.getQuery();
    132   parentQuery.include(cc.getInclude());
     136  parentQuery.setIncludes(cc.getInclude());
    133137  parentQuery.join(Hql.innerJoin("children", "c"));
    134138  parentQuery.restrict(Restrictions.eq(Hql.alias("c"), Expressions.parameter("bioAssay")));
     
    137141  // Query for child bioassays to the current bioassay
    138142  final ItemQuery<DerivedBioAssay> childQuery = DerivedBioAssay.getQuery();
    139   childQuery.include(cc.getInclude());
     143  childQuery.setIncludes(cc.getInclude());
    140144  childQuery.join(Hql.innerJoin("parents", "p"));
    141145  childQuery.restrict(Restrictions.eq(Hql.alias("p"), Expressions.parameter("bioAssay")));
     
    144148  // Query for raw bioassays to the current bioassay
    145149  final ItemQuery<RawBioAssay> rawBioAssayQuery = RawBioAssay.getQuery();
    146   rawBioAssayQuery.include(cc.getInclude());
     150  rawBioAssayQuery.setIncludes(cc.getInclude());
    147151  rawBioAssayQuery.restrict(Restrictions.eq(Hql.property("parentBioAssay"), Expressions.parameter("bioAssay")));
    148152  rawBioAssayQuery.order(Orders.asc(Hql.property("name")));
    149  
     153
     154  // List membership
     155  final ItemQuery<ItemList> listQuery = ItemList.getQuery();
     156  listQuery.setIncludes(cc.getInclude());
     157  listQuery.join(Hql.innerJoin("members", "m"));
     158  listQuery.restrict(Restrictions.eq(Hql.property("memberType"), Expressions.integer(itemType.getValue())));
     159  listQuery.restrict(Restrictions.eq(Hql.alias("m"), Expressions.parameter("itemId", Type.INT)));
     160  listQuery.order(Orders.asc(Hql.property("name")));
     161
    150162  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
    151163  try
     
    361373        filterable="true"
    362374        enumeration="<%=Base.getItemListsEnum(dc, itemType, cc.getInclude())%>"
    363         multiple="false"
    364375      />
    365376      <%
     
    487498            tooltip="Create a new item list from matching bioassays"
    488499            visible="<%=sc.hasPermission(Permission.CREATE, Item.ITEMLIST)%>"
     500          />
     501          <tbl:button
     502            id="btnAddToItemList"
     503            image="add.png"
     504            title="Add to item list&hellip;"
     505            tooltip="Add bioassays to an existing item list"
    489506          />
    490507          <tbl:button
     
    671688                  <%
    672689                  childQuery.setParameter("bioAssay", itemId, Type.INT);
    673                   try
    674                   {
    675                     String separator = "";
    676                     for (DerivedBioAssay child : childQuery.list(dc))
    677                     {
    678                       out.write(separator);
    679                       if (mode.hasPropertyLink())
    680                       {
    681                         out.write(Base.getLinkedName(ID, child, false, mode.hasEditLink()));
    682                       }
    683                       else
    684                       {
    685                         out.write(HTML.encodeTags(child.getName()));
    686                       }
    687                       separator = ", ";
    688                     }
    689                   }
    690                   catch (Throwable t)
    691                   {
    692                     %>
    693                     <div class="error"><%=t.getMessage()%></div>
    694                     <%
    695                   }
    696690                  %>             
     691                  <%=Values.getString(childQuery.list(dc), ", ", false, nameableFormatter) %>
    697692                  <base:icon
    698693                    subclass="link auto-init"
     
    707702                  <%
    708703                  rawBioAssayQuery.setParameter("bioAssay", itemId, Type.INT);
    709                   try
    710                   {
    711                     String separator = "";
    712                     for (RawBioAssay rba : rawBioAssayQuery.list(dc))
    713                     {
    714                       out.write(separator);
    715                       if (mode.hasPropertyLink())
    716                       {
    717                         out.write(Base.getLinkedName(ID, rba, false, mode.hasEditLink()));
    718                       }
    719                       else
    720                       {
    721                         out.write(HTML.encodeTags(rba.getName()));
    722                       }
    723                       separator = ", ";
    724                     }
    725                   }
    726                   catch (Throwable t)
    727                   {
    728                     %>
    729                     <div class="error"><%=t.getMessage()%></div>
    730                     <%
    731                   }
    732704                  %>             
     705                  <%=Values.getString(rawBioAssayQuery.list(dc), ", ", false, nameableFormatter) %>
    733706                  <base:icon
    734707                    subclass="link auto-init"
     
    743716                  <%
    744717                  physicalBioAssayQuery.setParameter("bioAssay", itemId, Type.INT);
    745                   try
    746                   {
    747                     String separator = "";
    748                     for (PhysicalBioAssay pba : physicalBioAssayQuery.list(dc))
    749                     {
    750                       out.write(separator);
    751                       if (mode.hasPropertyLink())
    752                       {
    753                         out.write(Base.getLinkedName(ID, pba, false, mode.hasEditLink()));
    754                       }
    755                       else
    756                       {
    757                         out.write(HTML.encodeTags(pba.getName()));
    758                       }
    759                       separator = ", ";
    760                     }
    761                   }
    762                   catch (Throwable t)
    763                   {
    764                     %>
    765                     <div class="error"><%=t.getMessage()%></div>
    766                     <%
    767                   }
    768718                  %>             
     719                  <%=Values.getString(physicalBioAssayQuery.list(dc), ", ", false, nameableFormatter) %>
    769720                </tbl:cell>
    770721                <tbl:cell column="parents">
     
    773724                  {
    774725                    parentQuery.setParameter("bioAssay", itemId, Type.INT);
    775                     try
    776                     {
    777                       String separator = "";
    778                       for (DerivedBioAssay dba : parentQuery.list(dc))
    779                       {
    780                         out.write(separator);
    781                         if (mode.hasPropertyLink())
    782                         {
    783                           out.write(Base.getLinkedName(ID, dba, false, mode.hasEditLink()));
    784                         }
    785                         else
    786                         {
    787                           out.write(HTML.encodeTags(dba.getName()));
    788                         }
    789                         separator = ", ";
    790                       }
    791                     }
    792                     catch (Throwable t)
    793                     {
    794                       %>
    795                       <div class="error"><%=t.getMessage()%></div>
    796                       <%
    797                     }
     726                    %>
     727                    <%=Values.getString(parentQuery.list(dc), ", ", false, nameableFormatter) %>
     728                    <%
    798729                  }
    799730                  %>             
     731                </tbl:cell>
     732                <tbl:cell column="itemList">
     733                  <%
     734                  listQuery.setParameter("itemId", itemId, Type.INT);
     735                  %>
     736                  <%=Values.getString(listQuery.list(dc), ", ", false, nameableFormatter) %>
    800737                </tbl:cell>
    801738                <tbl:cell column="extract"
     
    891828                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
    892829                <tbl:cell column="sharedTo">
    893                   <%
    894                   Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
    895                   while(sharees.hasNext())
    896                   {
    897                     Nameable n = sharees.next();
    898                     if (mode.hasPropertyLink())
    899                     {
    900                       out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
    901                     }
    902                     else
    903                     {
    904                       out.write(HTML.encodeTags(n.getName()));
    905                     }
    906                     out.write(sharees.hasNext() ? ", " : "");
    907                   }
    908                   %>
     830                  <%=Values.getString(ShareableUtil.getSharedTo(dc, item), ", ", false, nameableFormatter) %>
    909831                </tbl:cell>
    910832                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
  • trunk/www/views/derivedbioassays/view_bioassay.jsp

    r7786 r7813  
    740740        <jsp:param name="title" value="Other items related to this bioassay" />
    741741      </jsp:include>
     742      <jsp:include page="../../common/itemlists/list_membership.jsp">
     743        <jsp:param name="ID" value="<%=ID%>" />
     744        <jsp:param name="item_type" value="<%=itemType.name()%>" />
     745        <jsp:param name="item_id" value="<%=itemId%>" />
     746        <jsp:param name="title" value="Item lists where this bioassay is a member" />
     747      </jsp:include>
     748     
    742749      <jsp:include page="../../common/share/list_share.jsp">
    743750        <jsp:param name="ID" value="<%=ID%>" />
  • trunk/www/views/itemlists/edit_list.jsp

    r7747 r7813  
    222222        </td>
    223223      </tr>
     224      <%
     225      // NOTE! We can't just check sc.getActiveProjectId() since the user may not have USE permission
     226      if (itemId == 0 && (sc.getProjectKeyId() != 0 || sc.getItemKeyId() != 0))
     227      {
     228        %>
     229        <tr>
     230          <th>Private list?</th>
     231          <td>
     232            <label><input type="radio" name="private" value="1">Yes</label>
     233            <label><input type="radio" name="private" value="0" checked>Shared to <i><%=HTML.encodeTags(sc.getActiveProjectName()) %></i></label>
     234          </td>
     235          <td></td>
     236        </tr>
     237        <%
     238      }
     239      %>
    224240      <tr>
    225241        <th>External ID</th>
  • trunk/www/views/itemlists/index.jsp

    r7747 r7813  
    229229      Item memberType = Item.valueOf(request.getParameter("memberType"));
    230230      list = ItemList.getNew(dc, memberType);
     231      if (Values.getBoolean(request.getParameter("private")))
     232      {
     233        list.setProjectKey(null);
     234        list.setItemKey(null);
     235      }
    231236      dc.saveItem(list);
    232237     
     
    552557    dc.commit();
    553558  }
     559  else if ("AddMembers".equals(cmd))
     560  {
     561    dc = sc.newDbControl();
     562    ItemList list = ItemList.getById(dc, Values.getInt(itemId));
     563    String subContext = Values.getString(request.getParameter("subContext"), "");
     564    final int maxRecent = Base.getMaxRecent(sc);
     565   
     566    ItemContext memberContext = sc.getCurrentContext(list.getMemberType(), subContext);
     567    memberContext.setRecent(Item.ITEMLIST, list, "AddMembers", maxRecent);
     568    ItemQuery<? extends Listable> query = memberContext.getQuery();
     569    String source = request.getParameter("source");
     570    if ("all".equals(source))
     571    {
     572      query.setFirstResult(0);
     573      query.setMaxResults(-1);
     574    }
     575    else if ("selected".equals(source))
     576    {
     577      query.setFirstResult(0);
     578      query.setMaxResults(-1);
     579      Integer[] itemIds = Values.getInt(request.getParameter("items").split(","));
     580      query.restrict(
     581        Restrictions.in(
     582          Hql.property("id"),
     583          Expressions.parameter("selectedItems")
     584        )
     585      );
     586      query.setParameter("selectedItems", Arrays.asList(itemIds), Type.INT);     
     587    }
     588    // else -- no modifications to the query mean that we only get the current page
     589
     590    int count = list.add(query.iterate(dc));
     591    dc.commit();
     592    message = count + " members added to list";
     593  }
    554594  else
    555595  {
  • trunk/www/views/itemlists/list_lists.jsp

    r7605 r7813  
    268268      />
    269269      <tbl:columndef
     270        id="disableManualMembers"
     271        property="disableManualMembers"
     272        datatype="boolean"
     273        title="Locked (manual)"
     274        sortable="true"
     275        filterable="true"
     276        exportable="true"
     277      />
     278      <tbl:columndef
     279        id="disableSyncFilters"
     280        property="disableSyncFilters"
     281        datatype="boolean"
     282        title="Locked (sync)"
     283        sortable="true"
     284        filterable="true"
     285        exportable="true"
     286      />
     287      <tbl:columndef
    270288        id="owner"
    271289        property="owner.name"
     
    566584                  /></tbl:cell>
    567585                <tbl:cell column="rawDataType"><%=HTML.encodeTags(item.getRawDataType() != null ? item.getRawDataType().getName() : "")%></tbl:cell>
     586                <tbl:cell column="disableManualMembers"><%=item.getDisableManualMembers() ? "Yes" : "No" %></tbl:cell>
     587                <tbl:cell column="disableSyncFilters"><%=item.getDisableSyncFilters() ? "Yes" : "No" %></tbl:cell>
    568588                <tbl:cell column="owner"
    569589                  ><base:propertyvalue
  • trunk/www/views/itemlists/members/list_members.jsp

    r7605 r7813  
    289289        filterable="true"
    290290        enumeration="<%=Base.getItemListsEnum(dc, itemType, cc.getInclude())%>"
    291         multiple="false"
    292291      />
    293292      <%
  • trunk/www/views/physicalbioassays/bioassays.js

    r7604 r7813  
    115115      Buttons.addClickHandler('btnNewMergedDerivedBioAssay', bioassays.newMergedDerivedBioAssay);
    116116      Buttons.addClickHandler('btnNewItemList', bioassays.newItemListOnClick);
     117      Buttons.addClickHandler('btnAddToItemList', bioassays.addToItemListOnClick);
    117118
    118119      Buttons.addClickHandler('close', App.closeWindow);
     
    142143    var parentId = Data.int(event.currentTarget, 'item-id');
    143144    Items.newItem('DERIVEDBIOASSAY', '&physicalbioassay_id='+parentId);
     145  }
     146  // Add selected bioassays to an existing item list
     147  bioassays.addToItemListOnClick = function()
     148  {
     149    Table.submitToPopup('bioassays', 'AddItemsToList', 450, 300);
    144150  }
    145151 
  • trunk/www/views/physicalbioassays/index.jsp

    r7703 r7813  
    454454    redirect = "../../views/itemlists/index.jsp?ID="+ID+"&cmd=NewItem&addItems=1&memberType=PHYSICALBIOASSAY&formId=bioassays";
    455455  }
     456  else if ("AddItemsToList".equals(cmd))
     457  {
     458    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
     459    final ItemQuery<PhysicalBioAssay> query = PhysicalBioAssay.getQuery();
     460    dc = sc.newDbControl();
     461    cc.configureQuery(dc, query, true);
     462    dc.close();
     463    cc.setQuery(query);
     464    redirect = "../../views/itemlists/add_items.jsp?ID="+ID+"&memberType=PHYSICALBIOASSAY&formId=bioassays";
     465  }
    456466  else if ("NewMergedDerivedBioAssay".equals(cmd))
    457467  {
  • trunk/www/views/physicalbioassays/list_bioassays.jsp

    r7773 r7813  
    4444  import="net.sf.basedb.core.ItemResultList"
    4545  import="net.sf.basedb.core.ItemContext"
     46  import="net.sf.basedb.core.ItemList"
    4647  import="net.sf.basedb.core.Nameable"
    4748  import="net.sf.basedb.core.Permission"
     
    6768  import="net.sf.basedb.clients.web.util.HTML"
    6869  import="net.sf.basedb.util.formatter.Formatter"
     70  import="net.sf.basedb.util.formatter.NameableFormatter"
     71  import="net.sf.basedb.clients.web.formatter.LinkedItemFormatter"
    6972  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
    7073  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
     
    98101
    99102final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
     103final Formatter<Nameable> nameableFormatter = mode.hasPropertyLink() ? new LinkedItemFormatter(mode.hasEditLink()) : new NameableFormatter();
    100104final String callback = request.getParameter("callback");
    101105final String title = mode.generateTitle("physical bioassay", "physical bioassays");
     
    121125  // Query for extracts relatated to the current bioassay
    122126  final ItemQuery<Extract> extractQuery = Extract.getQuery();
    123   extractQuery.include(cc.getInclude());
     127  extractQuery.setIncludes(cc.getInclude());
    124128  extractQuery.join(Hql.innerJoin("childCreationEvents", "cce"));
    125129  extractQuery.join(Hql.innerJoin("cce", "event", "evt"));
     
    130134  // Query for derived bioassay sets from to the current bioassay
    131135  final ItemQuery<DerivedBioAssay> dbasQuery = DerivedBioAssay.getQuery();
    132   dbasQuery.include(cc.getInclude());
     136  dbasQuery.setIncludes(cc.getInclude());
    133137  dbasQuery.join(Hql.innerJoin("physicalBioAssays", "pba"));
    134138  dbasQuery.restrict(Restrictions.eq(Hql.alias("pba"), Expressions.parameter("bioAssay")));
    135139  dbasQuery.restrict(Restrictions.eq(Hql.property("root"), Expressions.bool(true)));
    136140  dbasQuery.order(Orders.asc(Hql.property("name")));
     141
     142  // List membership
     143  final ItemQuery<ItemList> listQuery = ItemList.getQuery();
     144  listQuery.setIncludes(cc.getInclude());
     145  listQuery.join(Hql.innerJoin("members", "m"));
     146  listQuery.restrict(Restrictions.eq(Hql.property("memberType"), Expressions.integer(itemType.getValue())));
     147  listQuery.restrict(Restrictions.eq(Hql.alias("m"), Expressions.parameter("itemId", Type.INT)));
     148  listQuery.order(Orders.asc(Hql.property("name")));
     149
    137150  final boolean createDerivedBioAssayPermission = sc.hasPermission(Permission.CREATE, Item.DERIVEDBIOASSAY); 
    138151 
     
    324337        filterable="true"
    325338        enumeration="<%=Base.getItemListsEnum(dc, itemType, cc.getInclude())%>"
    326         multiple="false"
    327339      />
    328340      <%
     
    432444            tooltip="Create a new item list from matching bioassays"
    433445            visible="<%=sc.hasPermission(Permission.CREATE, Item.ITEMLIST)%>"
     446          />
     447          <tbl:button
     448            id="btnAddToItemList"
     449            image="add.png"
     450            title="Add to item list&hellip;"
     451            tooltip="Add bioassays to an existing item list"
    434452          />
    435453          <tbl:button
     
    688706                  <%
    689707                  dbasQuery.setParameter("bioAssay", itemId, Type.INT);
    690                   try
    691                   {
    692                     String separator = "";
    693                     for (DerivedBioAssay dbas : dbasQuery.list(dc))
    694                     {
    695                       out.write(separator);
    696                       if (mode.hasPropertyLink())
    697                       {
    698                         out.write(Base.getLinkedName(ID, dbas, false, mode.hasEditLink()));
    699                       }
    700                       else
    701                       {
    702                         out.write(HTML.encodeTags(dbas.getName()));
    703                       }
    704                       separator = ", ";
    705                     }
    706                   }
    707                   catch (Throwable t)
    708                   {
    709                     %>
    710                     <div class="error"><%=t.getMessage()%></div>
    711                     <%
    712                   }
    713708                  %>
     709                  <%=Values.getString(dbasQuery.list(dc), ", ", false, nameableFormatter) %>
    714710                  <base:icon
    715711                    subclass="link auto-init"
     
    720716                    visible="<%=mode.hasEditLink() && createDerivedBioAssayPermission && usePermission %>"
    721717                  />
     718                </tbl:cell>
     719                <tbl:cell column="itemList">
     720                  <%
     721                  listQuery.setParameter("itemId", itemId, Type.INT);
     722                  %>
     723                  <%=Values.getString(listQuery.list(dc), ", ", false, nameableFormatter) %>
    722724                </tbl:cell>
    723725                <tbl:cell column="protocol"
     
    777779                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
    778780                <tbl:cell column="sharedTo">
    779                   <%
    780                   Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
    781                   while(sharees.hasNext())
    782                   {
    783                     Nameable n = sharees.next();
    784                     if (mode.hasPropertyLink())
    785                     {
    786                       out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
    787                     }
    788                     else
    789                     {
    790                       out.write(HTML.encodeTags(n.getName()));
    791                     }
    792                     out.write(sharees.hasNext() ? ", " : "");
    793                   }
    794                   %>
     781                  <%=Values.getString(ShareableUtil.getSharedTo(dc, item), ", ", false, nameableFormatter) %>
    795782                </tbl:cell>
    796783                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
  • trunk/www/views/physicalbioassays/view_bioassay.jsp

    r7604 r7813  
    476476        <jsp:param name="title" value="Other items related to this physical bioassay" />
    477477      </jsp:include>
     478      <jsp:include page="../../common/itemlists/list_membership.jsp">
     479        <jsp:param name="ID" value="<%=ID%>" />
     480        <jsp:param name="item_type" value="<%=itemType.name()%>" />
     481        <jsp:param name="item_id" value="<%=itemId%>" />
     482        <jsp:param name="title" value="Item lists where this physical bioassay is a member" />
     483      </jsp:include>
     484     
    478485      <jsp:include page="../../common/share/list_share.jsp">
    479486        <jsp:param name="ID" value="<%=ID%>" />
  • trunk/www/views/rawbioassays/bioassays.js

    r7635 r7813  
    107107      Buttons.addClickHandler('btnRunPlugin', Buttons.runListPlugin, tableAttributes);
    108108      Buttons.addClickHandler('btnNewItemList', bioassays.newItemListOnClick);
     109      Buttons.addClickHandler('btnAddToItemList', bioassays.addToItemListOnClick);
    109110      Buttons.addClickHandler('btnNewExperiment', bioassays.newExperiment);
    110111
     
    128129    var controller = Items.getController('ITEMLIST');
    129130    Table.submitToPopup('rawbioassays', 'CreateItemList', controller.width, controller.height);
     131  }
     132  // Add selected raw bioassays to an existing item list
     133  bioassays.addToItemListOnClick = function()
     134  {
     135    Table.submitToPopup('rawbioassays', 'AddItemsToList', 450, 300);
    130136  }
    131137
  • trunk/www/views/rawbioassays/index.jsp

    r7703 r7813  
    579579    redirect = "../../views/itemlists/index.jsp?ID="+ID+"&cmd=NewItem&addItems=1&memberType=RAWBIOASSAY&formId=rawbioassays";
    580580  }
     581  else if ("AddItemsToList".equals(cmd))
     582  {
     583    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
     584    final ItemQuery<RawBioAssay> query = RawBioAssay.getQuery();
     585    dc = sc.newDbControl();
     586    cc.configureQuery(dc, query, true);
     587    dc.close();
     588    cc.setQuery(query);
     589    redirect = "../../views/itemlists/add_items.jsp?ID="+ID+"&memberType=RAWBIOASSAY&formId=rawbioassays";
     590  }
    581591  else
    582592  {
  • trunk/www/views/rawbioassays/list_rawbioassays.jsp

    r7773 r7813  
    4747  import="net.sf.basedb.core.ItemResultList"
    4848  import="net.sf.basedb.core.ItemContext"
     49  import="net.sf.basedb.core.ItemList"
    4950  import="net.sf.basedb.core.Job"
    5051  import="net.sf.basedb.core.Nameable"
     
    7576  import="net.sf.basedb.util.Values"
    7677  import="net.sf.basedb.util.formatter.Formatter"
     78  import="net.sf.basedb.util.formatter.NameableFormatter"
     79  import="net.sf.basedb.clients.web.formatter.LinkedItemFormatter"
    7780  import="net.sf.basedb.clients.web.formatter.DataFileFormatter"
    7881  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
     
    108111
    109112final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
     113final Formatter<Nameable> nameableFormatter = mode.hasPropertyLink() ? new LinkedItemFormatter(mode.hasEditLink()) : new NameableFormatter();
    110114final String callback = request.getParameter("callback");
    111115final String title = mode.generateTitle("raw bioassay", "raw bioassays");
     
    133137  // Query for experiments relatated to the current raw bioassay
    134138  final ItemQuery<Experiment> experimentQuery = Experiment.getQuery();
    135   experimentQuery.include(cc.getInclude());
     139  experimentQuery.setIncludes(cc.getInclude());
    136140  experimentQuery.join(Hql.innerJoin("rawBioAssays", "rba"));
    137141  experimentQuery.restrict(Restrictions.eq(Hql.alias("rba"), Expressions.parameter("rawBioAssay")));
    138142  experimentQuery.order(Orders.asc(Hql.property("name")));
    139  
     143
     144  // List membership
     145  final ItemQuery<ItemList> listQuery = ItemList.getQuery();
     146  listQuery.setIncludes(cc.getInclude());
     147  listQuery.join(Hql.innerJoin("members", "m"));
     148  listQuery.restrict(Restrictions.eq(Hql.property("memberType"), Expressions.integer(itemType.getValue())));
     149  listQuery.restrict(Restrictions.eq(Hql.alias("m"), Expressions.parameter("itemId", Type.INT)));
     150  listQuery.order(Orders.asc(Hql.property("name")));
     151
    140152  // Get all platforms
    141153  final ItemQuery<Platform> platformQuery = Platform.getQuery();
    142   platformQuery.include(cc.getInclude());
     154  platformQuery.setIncludes(cc.getInclude());
    143155  platformQuery.order(Orders.asc(Hql.property("name")));
    144156  platformQuery.setCacheResult(true);
     
    426438        filterable="true"
    427439        enumeration="<%=Base.getItemListsEnum(dc, itemType, cc.getInclude())%>"
    428         multiple="false"
    429440      />
    430441      <%
     
    544555            tooltip="Create a new item list from matching raw bioassays"
    545556            visible="<%=sc.hasPermission(Permission.CREATE, Item.ITEMLIST)%>"
     557          />
     558          <tbl:button
     559            id="btnAddToItemList"
     560            image="add.png"
     561            title="Add to item list&hellip;"
     562            tooltip="Add raw bioassays to an existing item list"
    546563          />
    547564          <tbl:button
     
    813830                  value="<%=job == null ? null : job.getEnded() %>"
    814831                />
     832                <tbl:cell column="itemList">
     833                  <%
     834                  listQuery.setParameter("itemId", itemId, Type.INT);
     835                  %>
     836                  <%=Values.getString(listQuery.list(dc), ", ", false, nameableFormatter) %>
     837                </tbl:cell>
    815838                <tbl:cell column="experiments">
    816839                  <%
    817840                  experimentQuery.setParameter("rawBioAssay", itemId, Type.INT);
    818                   try
    819                   {
    820                     String separator = "";
    821                     for (Experiment e : experimentQuery.list(dc))
    822                     {
    823                       out.write(separator);
    824                       if (mode.hasPropertyLink())
    825                       {
    826                         out.write(Base.getLinkedName(ID, e, false, mode.hasEditLink()));
    827                       }
    828                       else
    829                       {
    830                         out.write(HTML.encodeTags(e.getName()));
    831                       }
    832                       separator = ", ";
    833                     }
    834                   }
    835                   catch (Throwable t)
    836                   {
    837                     %>
    838                     <div class="error"><%=t.getMessage()%></div>
    839                     <%
    840                   }
    841841                  %>
     842                  <%=Values.getString(experimentQuery.list(dc), ", ", false, nameableFormatter) %>
    842843                </tbl:cell>
    843844                <tbl:cell column="owner"
     
    884885                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
    885886                <tbl:cell column="sharedTo">
    886                   <%
    887                   Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
    888                   while(sharees.hasNext())
    889                   {
    890                     Nameable n = sharees.next();
    891                     if (mode.hasPropertyLink())
    892                     {
    893                       out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
    894                     }
    895                     else
    896                     {
    897                       out.write(HTML.encodeTags(n.getName()));
    898                     }
    899                     out.write(sharees.hasNext() ? ", " : "");
    900                   }
    901                   %>
     887                  <%=Values.getString(ShareableUtil.getSharedTo(dc, item), ", ", false, nameableFormatter) %>
    902888                </tbl:cell>
    903889                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
  • trunk/www/views/rawbioassays/view_rawbioassay.jsp

    r7635 r7813  
    592592        <jsp:param name="title" value="Other items related to this sample" />
    593593      </jsp:include>
     594      <jsp:include page="../../common/itemlists/list_membership.jsp">
     595        <jsp:param name="ID" value="<%=ID%>" />
     596        <jsp:param name="item_type" value="<%=itemType.name()%>" />
     597        <jsp:param name="item_id" value="<%=itemId%>" />
     598        <jsp:param name="title" value="Item lists where this raw bioassay is a member" />
     599      </jsp:include>
     600     
    594601      <jsp:include page="../../common/share/list_share.jsp">
    595602        <jsp:param name="ID" value="<%=ID%>" />
Note: See TracChangeset for help on using the changeset viewer.