Changeset 3875
- Timestamp:
- Oct 24, 2007, 12:53:33 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/core/net/sf/basedb/core/AnnotationSet.java
r3679 r3875 25 25 package net.sf.basedb.core; 26 26 27 import java.util.LinkedList; 28 import java.util.List; 27 29 import java.util.Set; 28 30 … … 263 265 and the annotation type isn't valid for this type of item 264 266 @throws BaseException If there is another error 265 @see #findAnnotation (AnnotationType)267 @see #findAnnotations(DbControl, AnnotationType, boolean) 266 268 */ 267 269 public Annotation getAnnotation(AnnotationType annotationType) … … 313 315 @param annotationType The annotation type to look for 314 316 @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) 317 320 throws PermissionDeniedException 318 321 { 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 { 319 347 if (annotationType == null) throw new InvalidUseOfNullException("annotationType"); 348 // List for storing the result 349 List<Annotation> annotations = new LinkedList<Annotation>(); 320 350 321 Annotation a = null; 322 AnnotationData ad = null; 323 324 org.hibernate.Session session = getDbControl().getHibernateSession(); 325 351 org.hibernate.Session session = dc.getHibernateSession(); 326 352 // Find primary annotation 327 353 org.hibernate.Query query = HibernateUtil.getPredefinedQuery(session, "GET_PRIMARY_ANNOTATION"); … … 334 360 query.setEntity("annotationType", annotationType.getData()); 335 361 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)); 337 364 338 if ( ad == null)339 { 340 // Find inherited365 if (Boolean.TRUE.equals(findInherited) || (annotations.isEmpty() && findInherited == null)) 366 { 367 // Find among inherited annotations 341 368 query = HibernateUtil.getPredefinedQuery(session, "GET_DIRECTLY_INHERITED_ANNOTATION"); 342 369 /* … … 349 376 query.setEntity("annotationType", annotationType.getData()); 350 377 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)) 355 386 { 356 387 // Find among inherited annotation sets … … 365 396 query.setEntity("annotationType", annotationType.getData()); 366 397 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 } 376 406 377 407 /** -
trunk/src/core/net/sf/basedb/core/AnnotationType.java
r3679 r3875 1001 1001 if (minValue != null && maxValue != null) 1002 1002 { 1003 throw new NumberOutOfRangeException(this. toString(), intValue.intValue(), minValue.intValue(), maxValue.intValue());1003 throw new NumberOutOfRangeException(this.getName(), intValue.intValue(), minValue.intValue(), maxValue.intValue()); 1004 1004 } 1005 1005 else if (minValue != null) 1006 1006 { 1007 throw new NumberOutOfRangeException(this. toString(), intValue.intValue(), minValue.intValue(), false);1007 throw new NumberOutOfRangeException(this.getName(), intValue.intValue(), minValue.intValue(), false); 1008 1008 } 1009 1009 else if (maxValue != null) 1010 1010 { 1011 throw new NumberOutOfRangeException(this. toString(), intValue.intValue(), maxValue.intValue(), true);1011 throw new NumberOutOfRangeException(this.getName(), intValue.intValue(), maxValue.intValue(), true); 1012 1012 } 1013 1013 } … … 1024 1024 if (minValue != null && maxValue != null) 1025 1025 { 1026 throw new NumberOutOfRangeException(this. toString(), longValue.longValue(), minValue.longValue(), maxValue.longValue());1026 throw new NumberOutOfRangeException(this.getName(), longValue.longValue(), minValue.longValue(), maxValue.longValue()); 1027 1027 } 1028 1028 else if (minValue != null) 1029 1029 { 1030 throw new NumberOutOfRangeException(this. toString(), longValue.longValue(), minValue.longValue(), false);1030 throw new NumberOutOfRangeException(this.getName(), longValue.longValue(), minValue.longValue(), false); 1031 1031 } 1032 1032 else if (maxValue != null) 1033 1033 { 1034 throw new NumberOutOfRangeException(this. toString(), longValue.longValue(), maxValue.longValue(), true);1034 throw new NumberOutOfRangeException(this.getName(), longValue.longValue(), maxValue.longValue(), true); 1035 1035 } 1036 1036 } … … 1047 1047 if (minValue != null && maxValue != null) 1048 1048 { 1049 throw new NumberOutOfRangeException(this. toString(), floatValue.floatValue(), minValue.floatValue(), maxValue.floatValue());1049 throw new NumberOutOfRangeException(this.getName(), floatValue.floatValue(), minValue.floatValue(), maxValue.floatValue()); 1050 1050 } 1051 1051 else if (minValue != null) 1052 1052 { 1053 throw new NumberOutOfRangeException(this. toString(), floatValue.floatValue(), minValue.floatValue(), false);1053 throw new NumberOutOfRangeException(this.getName(), floatValue.floatValue(), minValue.floatValue(), false); 1054 1054 } 1055 1055 else if (maxValue != null) 1056 1056 { 1057 throw new NumberOutOfRangeException(this. toString(), floatValue.floatValue(), maxValue.floatValue(), true);1057 throw new NumberOutOfRangeException(this.getName(), floatValue.floatValue(), maxValue.floatValue(), true); 1058 1058 } 1059 1059 } … … 1070 1070 if (minValue != null && maxValue != null) 1071 1071 { 1072 throw new NumberOutOfRangeException(this. toString(), doubleValue.doubleValue(), minValue.doubleValue(), maxValue.doubleValue());1072 throw new NumberOutOfRangeException(this.getName(), doubleValue.doubleValue(), minValue.doubleValue(), maxValue.doubleValue()); 1073 1073 } 1074 1074 else if (minValue != null) 1075 1075 { 1076 throw new NumberOutOfRangeException(this. toString(), doubleValue.doubleValue(), minValue.doubleValue(), false);1076 throw new NumberOutOfRangeException(this.getName(), doubleValue.doubleValue(), minValue.doubleValue(), false); 1077 1077 } 1078 1078 else if (maxValue != null) 1079 1079 { 1080 throw new NumberOutOfRangeException(this. toString(), doubleValue.doubleValue(), maxValue.doubleValue(), true);1080 throw new NumberOutOfRangeException(this.getName(), doubleValue.doubleValue(), maxValue.doubleValue(), true); 1081 1081 } 1082 1082 } … … 1088 1088 if (stringValue.length() > maxLength) 1089 1089 { 1090 throw new StringTooLongException(this. toString(), stringValue, maxLength);1090 throw new StringTooLongException(this.getName(), stringValue, maxLength); 1091 1091 } 1092 1092 } -
trunk/src/core/net/sf/basedb/util/BioAssaySetUtil.java
r3675 r3875 48 48 import net.sf.basedb.util.jep.ScoreFunction; 49 49 50 import java.util.List; 50 51 import java.util.Set; 51 52 import java.util.TreeSet; … … 83 84 if (bioAssay.isAnnotated()) 84 85 { 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 } 87 91 } 88 92 for (RawBioAssay rb : rbaQuery.list(dc)) … … 90 94 if (rb.isAnnotated()) 91 95 { 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 } 94 101 } 95 102 } -
trunk/src/core/net/sf/basedb/util/overview/ExperimentOverview.java
r3859 r3875 1635 1635 ItemQuery<AnnotationType> parameterQuery = initQuery(protocol.getParameters(), null, "name"); 1636 1636 List<AnnotationType> parameters = parameterQuery.list(dc); 1637 Node parameter Node = null;1637 Node parametersNode = null; 1638 1638 if (parameters.size() > 0) 1639 1639 { 1640 parameter Node = new Node("parameters", "Parameters", protocolNode);1640 parametersNode = new Node("parameters", "Parameters", protocolNode); 1641 1641 for (AnnotationType pp : parameters) 1642 1642 { 1643 new Node("parameter."+pp.getId(), pp.getName(), parameterNode, pp);1643 Node parameterNode = new Node("parameter."+pp.getId(), pp.getName(), parametersNode, pp); 1644 1644 1645 1645 // Check if a value for this parameter has been specified … … 1647 1647 { 1648 1648 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; 1655 1678 } 1656 1679 … … 1658 1681 Add annotations child node to an annotatable item. Creates a 1659 1682 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 each1683 it item-type nodes with the name <code>annotationtype.ID</code> for each 1661 1684 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. 1662 1688 @see Protocol#getParameters() 1663 1689 */ … … 1759 1785 if (parent.isAnnotated()) 1760 1786 { 1761 annotationTypes.clear();1787 //annotationTypes.clear(); 1762 1788 AnnotationSet as = parent.getAnnotationSet(); 1763 1789 ItemQuery<Annotation> annotationQuery = initQuery(as.getAllInheritedAnnotations(), "at", "name"); … … 1775 1801 { 1776 1802 at = a.getAnnotationType(); 1777 atNode = new Node("annotationtype."+at.getId(), at.getName(), annotationsNode, at);1778 1803 if (annotationTypes.containsKey(at)) 1779 1804 { 1780 1805 duplicates.add(at); 1806 atNode = annotationTypes.get(at); 1781 1807 } 1782 1808 else 1783 1809 { 1784 1810 annotationTypes.put(at, atNode); 1811 atNode = new Node("annotationtype."+at.getId(), at.getName(), annotationsNode, at); 1785 1812 } 1786 1813 } -
trunk/www/views/experiments/overview/info.jsp
r3859 r3875 59 59 import="java.util.LinkedList" 60 60 import="java.util.Iterator" 61 import="java.util.Collection" 62 import="java.util.Collections" 61 63 %> 62 64 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %> … … 287 289 288 290 <% 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); 292 313 if (annotatable.isAnnotated()) 293 314 { 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 & 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()); 306 331 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) 311 338 { 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 } 313 348 } 314 349 } 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 } 315 392 %> 316 <h4>Annotations & 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%>" /> </td> 363 <td><b> 364 <% 365 if (at != null && at.hasPermission(Permission.WRITE)) 393 <tr> 394 <td><base:icon visible="<%=icon != null%>" image="<%=icon%>" /> </td> 395 <td> 396 <% 397 if (at != null) 398 { 399 if (at.hasPermission(Permission.WRITE)) 366 400 { 367 401 %> 368 402 <a href="javascript:editItem('<%=at.getType().name()%>', <%=at.getId()%>)" 369 title="Edit this annotation type"><%=HTML.encodeTags(a nnotationNode.getTitle())%></a>403 title="Edit this annotation type"><%=HTML.encodeTags(at.getName())%></a> 370 404 <% 371 405 } … … 373 407 { 374 408 %> 375 <%=HTML.encodeTags(a nnotationNode.getTitle())%>409 <%=HTML.encodeTags(at.getName())%> 376 410 <% 377 411 } 378 %></b>379 </td>380 <td> </td>381 <td><%=Values.getString(a.getValues(), ", ", true)%></td>382 <td> :412 } 413 else 414 { 415 %> 416 <%=a.getValueType() %> 383 417 <% 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> 388 435 <% 389 436 } 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> 449 <% 450 if (editLink != null) 451 { 452 %><base:icon image="edit.gif" onclick="<%=editLink%>" 453 tooltip="<%=editTooltip%>" /> 454 <% 455 } 456 %> 457 </td> 458 </tr> 397 459 <% 398 460 } 461 %> 462 </table> 463 <% 399 464 } 400 465 %> -
trunk/www/views/experiments/view_experiment.jsp
r3868 r3875 66 66 import="java.util.HashSet" 67 67 import="java.util.List" 68 import="java.util.LinkedList" 68 69 import="java.util.Date" 69 70 %> … … 515 516 { 516 517 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) 522 521 { 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 } 524 541 } 525 catch (Throwable t) 526 {} 542 527 543 %> 528 544 <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 > 536 546 <% 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 %> 539 563 </tbl:cell> 540 564 <%
Note: See TracChangeset
for help on using the changeset viewer.