Changeset 3875


Ignore:
Timestamp:
Oct 24, 2007, 12:53:33 PM (14 years ago)
Author:
Nicklas Nordborg
Message:

Fixes #806: Experimental factor values display on Experiment page can only display one annotation of each type

The same bug was also present in the Experiment overview

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/core/net/sf/basedb/core/AnnotationSet.java

    r3679 r3875  
    2525package net.sf.basedb.core;
    2626
     27import java.util.LinkedList;
     28import java.util.List;
    2729import java.util.Set;
    2830
     
    263265      and the annotation type isn't valid for this type of item
    264266    @throws BaseException If there is another error
    265     @see #findAnnotation(AnnotationType)
     267    @see #findAnnotations(DbControl, AnnotationType, boolean)
    266268  */
    267269  public Annotation getAnnotation(AnnotationType annotationType)
     
    313315    @param annotationType The annotation type to look for
    314316    @return An <code>Annotation</code> object or null
    315    */
    316   public Annotation findAnnotation(AnnotationType annotationType)
     317    @deprecated Use {@link #findAnnotations(DbControl, AnnotationType, boolean)} instead
     318  */
     319  public Annotation xfindAnnotation(AnnotationType annotationType)
    317320    throws PermissionDeniedException
    318321  {
     322    List<Annotation> annotations = findAnnotations(getDbControl(), annotationType, null);
     323    return annotations.size() > 0 ? annotations.get(0) : null;
     324  }
     325 
     326  /**
     327    Find annotations of the specified annotation type among all annotations
     328    including the inherted annotations. This method will search for
     329    annotations in the following order:
     330    <ol>
     331    <li>The primary annotations
     332    <li>The inherited annotations
     333    <li>The inherited annotation sets
     334    </ol>
     335    If no annotation of the specified type is found, an empty list is returned.
     336   
     337    @param dc The DbControl to use for database access
     338    @param annotationType The annotation type to look for
     339    @param findInherited TRUE if the method always should try to find inherited annotations,
     340      FALSE if it never should try, or null if it only should try if it hasn't found any
     341      annotation so far
     342    @return A list <code>Annotation</code> objects (may be empty)
     343  */
     344  public List<Annotation> findAnnotations(DbControl dc, AnnotationType annotationType, Boolean findInherited)
     345    throws PermissionDeniedException
     346  {
    319347    if (annotationType == null) throw new InvalidUseOfNullException("annotationType");
     348    // List for storing the result
     349    List<Annotation> annotations = new LinkedList<Annotation>();
    320350   
    321     Annotation a = null;
    322     AnnotationData ad = null;
    323    
    324     org.hibernate.Session session = getDbControl().getHibernateSession();
    325    
     351    org.hibernate.Session session = dc.getHibernateSession();
    326352    // Find primary annotation
    327353    org.hibernate.Query query = HibernateUtil.getPredefinedQuery(session, "GET_PRIMARY_ANNOTATION");
     
    334360    query.setEntity("annotationType", annotationType.getData());
    335361    query.setEntity("annotationSet", this.getData());
    336     ad = HibernateUtil.loadData(AnnotationData.class, query);
     362    AnnotationData ad = HibernateUtil.loadData(AnnotationData.class, query);
     363    if (ad != null) annotations.add(dc.getItem(Annotation.class, ad));
    337364   
    338     if (ad == null)
    339     {
    340       // Find inherited
     365    if (Boolean.TRUE.equals(findInherited) || (annotations.isEmpty() && findInherited == null))
     366    {
     367      // Find among inherited annotations
    341368      query = HibernateUtil.getPredefinedQuery(session, "GET_DIRECTLY_INHERITED_ANNOTATION");
    342369      /*
     
    349376      query.setEntity("annotationType", annotationType.getData());
    350377      query.setEntity("annotationSet", this.getData());
    351       ad = HibernateUtil.loadData(AnnotationData.class, query);
    352     }
    353 
    354     if (ad == null)
     378      List<AnnotationData> inherited = HibernateUtil.loadList(AnnotationData.class, query, dc.getSessionControl());
     379      for (AnnotationData a : inherited)
     380      {
     381        annotations.add(dc.getItem(Annotation.class, a));
     382      }
     383    }
     384 
     385    if (Boolean.TRUE.equals(findInherited) || (annotations.isEmpty() && findInherited == null))
    355386    {
    356387      // Find among inherited annotation sets
     
    365396      query.setEntity("annotationType", annotationType.getData());
    366397      query.setEntity("annotationSet", this.getData());
    367       ad = HibernateUtil.loadData(AnnotationData.class, query);
    368     }
    369    
    370     if (ad != null)
    371     {
    372       a = getDbControl().getItem(Annotation.class, ad);
    373     }
    374     return a;
    375   }
     398      List<AnnotationData> inherited = HibernateUtil.loadList(AnnotationData.class, query, dc.getSessionControl());
     399      for (AnnotationData a : inherited)
     400      {
     401        annotations.add(dc.getItem(Annotation.class, a));
     402      }
     403    }
     404    return annotations;
     405  }
    376406 
    377407  /**
  • trunk/src/core/net/sf/basedb/core/AnnotationType.java

    r3679 r3875  
    10011001        if (minValue != null && maxValue != null)
    10021002        {
    1003           throw new NumberOutOfRangeException(this.toString(), intValue.intValue(), minValue.intValue(), maxValue.intValue());
     1003          throw new NumberOutOfRangeException(this.getName(), intValue.intValue(), minValue.intValue(), maxValue.intValue());
    10041004        }
    10051005        else if (minValue != null)
    10061006        {
    1007           throw new NumberOutOfRangeException(this.toString(), intValue.intValue(), minValue.intValue(), false);
     1007          throw new NumberOutOfRangeException(this.getName(), intValue.intValue(), minValue.intValue(), false);
    10081008        }
    10091009        else if (maxValue != null)
    10101010        {
    1011           throw new NumberOutOfRangeException(this.toString(), intValue.intValue(), maxValue.intValue(), true);
     1011          throw new NumberOutOfRangeException(this.getName(), intValue.intValue(), maxValue.intValue(), true);
    10121012        }
    10131013      }
     
    10241024        if (minValue != null && maxValue != null)
    10251025        {
    1026           throw new NumberOutOfRangeException(this.toString(), longValue.longValue(), minValue.longValue(), maxValue.longValue());
     1026          throw new NumberOutOfRangeException(this.getName(), longValue.longValue(), minValue.longValue(), maxValue.longValue());
    10271027        }
    10281028        else if (minValue != null)
    10291029        {
    1030           throw new NumberOutOfRangeException(this.toString(), longValue.longValue(), minValue.longValue(), false);
     1030          throw new NumberOutOfRangeException(this.getName(), longValue.longValue(), minValue.longValue(), false);
    10311031        }
    10321032        else if (maxValue != null)
    10331033        {
    1034           throw new NumberOutOfRangeException(this.toString(), longValue.longValue(), maxValue.longValue(), true);
     1034          throw new NumberOutOfRangeException(this.getName(), longValue.longValue(), maxValue.longValue(), true);
    10351035        }
    10361036      }
     
    10471047        if (minValue != null && maxValue != null)
    10481048        {
    1049           throw new NumberOutOfRangeException(this.toString(), floatValue.floatValue(), minValue.floatValue(), maxValue.floatValue());
     1049          throw new NumberOutOfRangeException(this.getName(), floatValue.floatValue(), minValue.floatValue(), maxValue.floatValue());
    10501050        }
    10511051        else if (minValue != null)
    10521052        {
    1053           throw new NumberOutOfRangeException(this.toString(), floatValue.floatValue(), minValue.floatValue(), false);
     1053          throw new NumberOutOfRangeException(this.getName(), floatValue.floatValue(), minValue.floatValue(), false);
    10541054        }
    10551055        else if (maxValue != null)
    10561056        {
    1057           throw new NumberOutOfRangeException(this.toString(), floatValue.floatValue(), maxValue.floatValue(), true);
     1057          throw new NumberOutOfRangeException(this.getName(), floatValue.floatValue(), maxValue.floatValue(), true);
    10581058        }
    10591059      }
     
    10701070        if (minValue != null && maxValue != null)
    10711071        {
    1072           throw new NumberOutOfRangeException(this.toString(), doubleValue.doubleValue(), minValue.doubleValue(), maxValue.doubleValue());
     1072          throw new NumberOutOfRangeException(this.getName(), doubleValue.doubleValue(), minValue.doubleValue(), maxValue.doubleValue());
    10731073        }
    10741074        else if (minValue != null)
    10751075        {
    1076           throw new NumberOutOfRangeException(this.toString(), doubleValue.doubleValue(), minValue.doubleValue(), false);
     1076          throw new NumberOutOfRangeException(this.getName(), doubleValue.doubleValue(), minValue.doubleValue(), false);
    10771077        }
    10781078        else if (maxValue != null)
    10791079        {
    1080           throw new NumberOutOfRangeException(this.toString(), doubleValue.doubleValue(), maxValue.doubleValue(), true);
     1080          throw new NumberOutOfRangeException(this.getName(), doubleValue.doubleValue(), maxValue.doubleValue(), true);
    10811081        }
    10821082      }
     
    10881088      if (stringValue.length() > maxLength)
    10891089      {
    1090         throw new StringTooLongException(this.toString(), stringValue, maxLength);
     1090        throw new StringTooLongException(this.getName(), stringValue, maxLength);
    10911091      }
    10921092    }
  • trunk/src/core/net/sf/basedb/util/BioAssaySetUtil.java

    r3675 r3875  
    4848import net.sf.basedb.util.jep.ScoreFunction;
    4949
     50import java.util.List;
    5051import java.util.Set;
    5152import java.util.TreeSet;
     
    8384    if (bioAssay.isAnnotated())
    8485    {
    85       Annotation a = bioAssay.getAnnotationSet().findAnnotation(annotationType);
    86       if (a != null) allValues.addAll(a.getValues());
     86      List<Annotation> all = bioAssay.getAnnotationSet().findAnnotations(dc, annotationType, true);
     87      for (Annotation a : all)
     88      {
     89        if (a != null) allValues.addAll(a.getValues());
     90      }
    8791    }
    8892    for (RawBioAssay rb : rbaQuery.list(dc))
     
    9094      if (rb.isAnnotated())
    9195      {
    92         Annotation a =  rb.getAnnotationSet().findAnnotation(annotationType);
    93         if (a != null) allValues.addAll(a.getValues());
     96        List<Annotation> all =  rb.getAnnotationSet().findAnnotations(dc, annotationType, true);
     97        for (Annotation a : all)
     98        {
     99          if (a != null) allValues.addAll(a.getValues());
     100        }
    94101      }
    95102    }
  • trunk/src/core/net/sf/basedb/util/overview/ExperimentOverview.java

    r3859 r3875  
    16351635    ItemQuery<AnnotationType> parameterQuery = initQuery(protocol.getParameters(), null, "name");
    16361636    List<AnnotationType> parameters = parameterQuery.list(dc);
    1637     Node parameterNode = null;
     1637    Node parametersNode = null;
    16381638    if (parameters.size() > 0)
    16391639    {
    1640       parameterNode = new Node("parameters", "Parameters", protocolNode);
     1640      parametersNode = new Node("parameters", "Parameters", protocolNode);
    16411641      for (AnnotationType pp : parameters)
    16421642      {
    1643         new Node("parameter."+pp.getId(), pp.getName(), parameterNode, pp);
     1643        Node parameterNode = new Node("parameter."+pp.getId(), pp.getName(), parametersNode, pp);
    16441644       
    16451645        // Check if a value for this parameter has been specified
     
    16471647        {
    16481648          failures.add(new Failure(Validator.MISSING_PARAMETER, parentNode,
    1649             "Missing parameter value: " + pp.getName(),
    1650             new Fix("Add parameter value for: " + pp.getName(), parentItem, pp, false)));
    1651         }
    1652       }
    1653     }
    1654     return parameterNode;
     1649            "Missing value for parameter: " + pp.getName(),
     1650            new Fix("Add value for: " + pp.getName(), parentItem, pp, false)));
     1651        }
     1652        else
     1653        {
     1654          Annotation a = as.getAnnotation(pp);
     1655          try
     1656          {
     1657            List<?> values = a.getValues();
     1658            if (values != null)
     1659            {
     1660              for (Object value : values)
     1661              {
     1662                pp.validateAnnotationValue(value);
     1663              }
     1664            }
     1665          }
     1666          catch (InvalidDataException ex)
     1667          {
     1668            failures.add(new Failure(Validator.ANNOTATION_INVALID_VALUE, parentNode, ex.getMessage(),
     1669              new Fix("Change parameter value", parentItem, pp, false),
     1670              new Fix("Change parameter restrictions", pp)
     1671            ));
     1672          }
     1673         
     1674        }
     1675      }
     1676    }
     1677    return parametersNode;
    16551678  }
    16561679 
     
    16581681    Add annotations child node to an annotatable item. Creates a
    16591682    folder-type child node with the name <code>annotations</code> and inside
    1660     it item-type nodes with the name <code>annotation.ID</code> for each
     1683    it item-type nodes with the name <code>annotationtype.ID</code> for each
    16611684    annotation (primary and inherited). ID is the ID of the annotation type.
     1685    If the logged in user doesn't have read permission for a particular annotation
     1686    type a node with the name <code>annotation.ID</code> is created instead. In this
     1687    case the ID is the ID of the annotation.
    16621688    @see Protocol#getParameters()
    16631689  */
     
    17591785    if (parent.isAnnotated())
    17601786    {
    1761       annotationTypes.clear();
     1787      //annotationTypes.clear();
    17621788      AnnotationSet as = parent.getAnnotationSet();
    17631789      ItemQuery<Annotation> annotationQuery = initQuery(as.getAllInheritedAnnotations(), "at", "name");
     
    17751801          {
    17761802            at = a.getAnnotationType();
    1777             atNode = new Node("annotationtype."+at.getId(), at.getName(), annotationsNode, at);
    17781803            if (annotationTypes.containsKey(at))
    17791804            {
    17801805              duplicates.add(at);
     1806              atNode = annotationTypes.get(at);
    17811807            }
    17821808            else
    17831809            {
    17841810              annotationTypes.put(at, atNode);
     1811              atNode = new Node("annotationtype."+at.getId(), at.getName(), annotationsNode, at);
    17851812            }
    17861813          }
  • trunk/www/views/experiments/overview/info.jsp

    r3859 r3875  
    5959  import="java.util.LinkedList"
    6060  import="java.util.Iterator"
     61  import="java.util.Collection"
     62  import="java.util.Collections"
    6163%>
    6264<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
     
    287289     
    288290      <%
    289       if (item instanceof Annotatable)
    290       {
    291         Annotatable annotatable = (Annotatable)item;
     291      List<Annotation> annotations = null;
     292      String annotationsTitle = "";
     293      Annotatable annotatable = null;
     294      if (item instanceof Annotation)
     295      {
     296        Annotation a = (Annotation)item;
     297        dc.reattachItem(a);
     298        annotatable = a.getAnnotationSet().getItem();
     299        annotations = Collections.singletonList(a);
     300        annotationsTitle = "Annotation values";
     301      }
     302      else if (item instanceof AnnotationType)
     303      {
     304        if (node.getName().startsWith("parameter"))
     305        {
     306          annotatable = (Annotatable)node.getParent().getParent().getParent().getItem();
     307        }
     308        else
     309        {
     310          annotatable = (Annotatable)node.getParent().getParent().getItem();
     311        }
     312        dc.reattachItem((BasicItem)annotatable);
    292313        if (annotatable.isAnnotated())
    293314        {
    294           dc.reattachItem(item);
    295           AnnotationSet as = AnnotationSet.getById(dc, annotatable.getAnnotationSet().getId());
    296           List<Node> annotationNodes = new ArrayList<Node>();
    297          
    298           // Load annotations
    299           Node annotationsFolder = node.getChild("annotations");
    300           if (annotationsFolder != null && annotationsFolder.getChildren() != null)
    301           {
    302             annotationNodes.addAll(annotationsFolder.getChildren());
    303           }
    304          
    305           // Load protocol parameters
     315          annotations = annotatable.getAnnotationSet().findAnnotations(dc, (AnnotationType)item, true);
     316        }
     317        annotationsTitle = "Annotation values";
     318      }
     319      else if (item instanceof Annotatable)
     320      {
     321        annotationsTitle = "Annotations &amp; protocol parameters";
     322        annotatable = (Annotatable)item;
     323        if (annotatable.isAnnotated())
     324        {
     325          dc.reattachItem((BasicItem)annotatable);
     326 
     327          // Load annotations & protocol parameters
     328          List<Node> nodes = new LinkedList<Node>();
     329          Node folder = node.getChild("annotations");
     330          if (folder != null && folder.getChildren() != null) nodes.addAll(folder.getChildren());
    306331          Node protocolNode = node.getChild("protocol");
    307           if (protocolNode != null)
    308           {
    309             Node parametersFolder = protocolNode.getChild("parameters");
    310             if (parametersFolder != null && parametersFolder.getChildren() != null)
     332          folder = protocolNode == null ? null : protocolNode.getChild("parameters");
     333          if (folder != null && folder.getChildren() != null) nodes.addAll(folder.getChildren());
     334          if (nodes.size() > 0)
     335          {
     336            annotations = new LinkedList<Annotation>();
     337            for (Node n : nodes)
    311338            {
    312               annotationNodes.addAll(parametersFolder.getChildren());
     339              BasicItem aItem = n.getItem();
     340              if (aItem instanceof Annotation)
     341              {
     342                annotations.add((Annotation)aItem);
     343              }
     344              else if (aItem instanceof AnnotationType)
     345              {
     346                annotations.addAll(annotatable.getAnnotationSet().findAnnotations(dc, (AnnotationType)aItem, true));
     347              }
    313348            }
    314349          }
     350        }
     351      }
     352      if (annotations != null && annotations.size() > 0)
     353      {
     354        %>
     355        <h4><%=annotationsTitle%></h4>
     356        <table border=0 cellspacing=0 cellpadding=0>
     357        <%
     358        for (Annotation a : annotations)
     359        {
     360          a = Annotation.getById(dc, a.getId());
     361          AnnotationType at = null;
     362          Annotatable annotationOwner = null;
     363          try
     364          {
     365            at = a.getAnnotationType();
     366          }
     367          catch (Throwable t)
     368          {}
     369          try
     370          {
     371            annotationOwner = a.getAnnotationSet().getItem();
     372          }
     373          catch (Throwable t)
     374          {}
     375          String icon = at != null && at.isProtocolParameter() ?
     376              "parameter.gif" : "joust/annotation.gif";
     377          String editLink = null;
     378          String editTooltip = null;
     379          if (annotatable.hasPermission(Permission.WRITE) && at != null)
     380          {
     381            if (annotatable.equals(annotationOwner))
     382            {
     383              editLink = "editAnnotation('" + annotatable.getType().name() + "', " + annotatable.getId() + ", " + at.getId() + ")";
     384              editTooltip = "Edit the values of this annotation";
     385            }
     386            else
     387            {
     388              editLink = "editInheritedAnnotation('" + annotatable.getType().name() + "', " + annotatable.getId() + ", " + at.getId() + ")";
     389              editTooltip = "Inherit this annotation from another item";
     390            }
     391          }
    315392          %>
    316           <h4>Annotations &amp; protocol parameters</h4>
    317           <table border=0 cellspacing=0 cellpadding=0>
    318           <%
    319           for (Node annotationNode : annotationNodes)
    320           {
    321             BasicItem aItem = annotationNode.getItem();
    322             AnnotationType at = null;
    323             Annotation a = null;
    324             String editLink = null;
    325             if (aItem instanceof AnnotationType)
    326             {
    327               at = (AnnotationType)aItem;
    328               a = as.findAnnotation(at);
    329               if (item.hasPermission(Permission.WRITE))
    330               {
    331                 if (as.hasAnnotation(at))
    332                 {
    333                   editLink = "editAnnotation('" + item.getType().name() + "', " + item.getId() + ", " + at.getId() + ")";
    334                 }
    335                 else
    336                 {
    337                   editLink = "editInheritedAnnotation('" + item.getType().name() + "', " + item.getId() + ", " + at.getId() + ")";
    338                 }
    339               }
    340             }
    341             else if (aItem instanceof Annotation)
    342             {
    343               a = Annotation.getById(dc, aItem.getId());
    344             }
    345             if (a != null)
    346             {
    347               boolean hasWarnings = annotationNode.getNumWarnings() > 0;
    348               boolean hasErrors = annotationNode.getNumErrors() > 0;
    349               String icon = hasErrors ? "error.gif" : hasWarnings ? "warning.gif" : null;
    350               if (icon == null)
    351               {
    352                 if (annotationNode.getName().startsWith("parameter"))
    353                 {
    354                   icon = "parameter.gif";
    355                 }
    356                 else
    357                 {
    358                   icon = "joust/annotation.gif";
    359                 }
    360               }
    361               %>
    362               <tr><td><base:icon visible="<%=icon != null%>" image="<%=icon%>" />&nbsp;</td>
    363               <td><b>
    364                 <%
    365                 if (at != null && at.hasPermission(Permission.WRITE))
     393          <tr>
     394            <td><base:icon visible="<%=icon != null%>" image="<%=icon%>" />&nbsp;</td>
     395            <td>
     396              <%
     397              if (at != null)
     398              {
     399                if (at.hasPermission(Permission.WRITE))
    366400                {
    367401                  %>
    368402                  <a href="javascript:editItem('<%=at.getType().name()%>', <%=at.getId()%>)"
    369                     title="Edit this annotation type"><%=HTML.encodeTags(annotationNode.getTitle())%></a>
     403                    title="Edit this annotation type"><%=HTML.encodeTags(at.getName())%></a>
    370404                  <%
    371405                }
     
    373407                {
    374408                  %>
    375                   <%=HTML.encodeTags(annotationNode.getTitle())%>
     409                  <%=HTML.encodeTags(at.getName())%>
    376410                  <%
    377411                }
    378                 %></b>
    379               </td>
    380               <td>&nbsp;</td>
    381               <td><%=Values.getString(a.getValues(), ", ", true)%></td>
    382               <td>&nbsp;:
     412              }
     413              else
     414              {
     415                %>
     416                <%=a.getValueType() %>
    383417                <%
    384                 if (editLink != null)
    385                 {
    386                   %><base:icon image="edit.gif" onclick="<%=editLink%>"
    387                     tooltip="Edit the values of this annotation" />
     418              }
     419              %>
     420            </td>
     421            <td>
     422              <%
     423              if (annotationOwner != null && !annotationOwner.equals(annotatable))
     424              {
     425                %>
     426                <base:icon image="bullet.gif" tooltip="Annotation is inherited from" />
     427                <%
     428                String ownerName = annotationOwner instanceof Nameable ?
     429                    ((Nameable)annotationOwner).getName() : annotationOwner.toString();
     430                if (annotationOwner.hasPermission(Permission.WRITE))
     431                {
     432                  %>
     433                  <a href="javascript:editItem('<%=annotationOwner.getType().name()%>', <%=annotationOwner.getId()%>)"
     434                    title="Edit this item"><%=HTML.encodeTags(ownerName)%></a>
    388435                  <%
    389436                }
    390                 %>
    391               </td>
    392               <%
    393             }
    394           }
    395           %>
    396           </table>
     437                else
     438                {
     439                  %>
     440                  <%=HTML.encodeTags(ownerName)%>
     441                  <%
     442                }
     443              }
     444              %>
     445            </td>
     446            <td><base:icon image="bullet.gif" /></td>
     447            <td><%=Values.getString(a.getValues(), ", ", true)%></td>
     448            <td>&nbsp;
     449              <%
     450              if (editLink != null)
     451              {
     452                %><base:icon image="edit.gif" onclick="<%=editLink%>"
     453                  tooltip="<%=editTooltip%>" />
     454                <%
     455              }
     456              %>
     457            </td>
     458          </tr>
    397459          <%
    398460        }
     461        %>
     462        </table>
     463        <%
    399464      }
    400465      %>
  • trunk/www/views/experiments/view_experiment.jsp

    r3868 r3875  
    6666  import="java.util.HashSet"
    6767  import="java.util.List"
     68  import="java.util.LinkedList"
    6869  import="java.util.Date"
    6970%>
     
    515516              {
    516517                String value = "<i>- none -</i>";
    517                 Annotation a = as == null ? null : as.findAnnotation(at);
    518                 List<?> factorValues = a == null ? null : a.getValues();
    519                 if (factorValues != null) usedFactorValues.get(at).addAll(factorValues);
    520                 Annotatable aItem = null;
    521                 try
     518                List<Annotation> all = as == null ? null : as.findAnnotations(dc, at, true);
     519                Map<Annotatable, List> factorValues = new HashMap<Annotatable, List>();
     520                if (all != null && all.size() > 0)
    522521                {
    523                   aItem = a.getAnnotationSet().getItem();
     522                  for (Annotation a : all)
     523                  {
     524                    List values = a.getValues();
     525                    usedFactorValues.get(at).addAll(values);
     526                    Annotatable aItem = null;
     527                    try
     528                    {
     529                      aItem = a.getAnnotationSet().getItem();
     530                    }
     531                    catch (Throwable t)
     532                    {}
     533                    List toAdd = factorValues.get(aItem);
     534                    if (toAdd == null)
     535                    {
     536                      toAdd = new LinkedList();
     537                      factorValues.put(aItem, toAdd);
     538                    }
     539                    toAdd.addAll(values);
     540                  }
    524541                }
    525                 catch (Throwable t)
    526                 {}
     542               
    527543                %>
    528544                <tbl:cell column="<%="at"+at.getId()%>"
    529                   ><tbl:cellvalue list="<%=factorValues%>" />
    530                 <%
    531                 if (aItem != null && aItem.hasPermission(Permission.WRITE))
    532                 {
    533                   %>: <base:icon image="edit.gif"
    534                     onclick="<%="editAnnotation('"+aItem.getType().name()+"',"+aItem.getId()+","+at.getId()+")"%>"
    535                     tooltip="Modify the values of this experimental factor" />
     545                  >
    536546                  <%
    537                 }
    538                 %>
     547                  for (Map.Entry<Annotatable, List> entry : factorValues.entrySet())
     548                  {
     549                    Annotatable aItem = entry.getKey();
     550                    List values = entry.getValue();
     551                    %>
     552                    <tbl:cellvalue list="<%=values%>" />
     553                    <%
     554                    if (aItem != null && aItem.hasPermission(Permission.WRITE))
     555                    {
     556                      %>: <base:icon image="edit.gif"
     557                        onclick="<%="editAnnotation('"+aItem.getType().name()+"',"+aItem.getId()+","+at.getId()+")"%>"
     558                        tooltip="Modify the values of this experimental factor" />
     559                      <%
     560                    }
     561                  }
     562                  %>
    539563                </tbl:cell>
    540564                <%
Note: See TracChangeset for help on using the changeset viewer.