Changeset 6335


Ignore:
Timestamp:
Oct 21, 2013, 3:46:22 PM (9 years ago)
Author:
olle
Message:

Refs #1773. Support for annotatable Tag items added.

Location:
trunk
Files:
11 edited

Legend:

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

    r6127 r6335  
    2727import net.sf.basedb.core.data.ExtractData;
    2828
     29import java.util.HashSet;
    2930import java.util.Set;
    3031
     
    355356  }
    356357
     358  /**
     359    Get all parent extracts.
     360    @return A query returning all parent extracts
     361    @since 3.3
     362   */
     363  public ItemQuery<Extract> getParents()
     364  {
     365    ItemQuery<Extract> query = Extract.getQuery();
     366    query.joinPermanent(Hql.innerJoin("children", "c"));
     367    query.restrictPermanent(
     368      Restrictions.eq(
     369        Hql.alias("c"),
     370        Hql.entity(this)
     371      )
     372    );
     373    return query;
     374  }
     375
     376
     377  // -------------------------------------------
     378  /*
     379    From the Annotatable interface
     380    -------------------------------------------
     381  */
     382  /**
     383    Get the tag and parent extracts.
     384  */
     385  @Override
     386  public Set<Annotatable> getAnnotatableParents()
     387    throws BaseException
     388  {
     389    Set<Annotatable> annotatable = new HashSet<Annotatable>();
     390    try
     391    {
     392      ItemQuery<Extract> query = getParents();
     393      query.include(Include.ALL);
     394      annotatable.addAll(query.list(getDbControl()));
     395      if (getData().getTag() != null) annotatable.add(getTag());
     396    }
     397    catch (PermissionDeniedException ex)
     398    {}
     399    return annotatable;
     400  }
    357401}
    358402
  • trunk/src/core/net/sf/basedb/core/Tag.java

    r6127 r6335  
    3636*/
    3737public class Tag
    38   extends CommonItem<TagData>
     38  extends AnnotatedItem<TagData>
    3939  implements Registered, Subtypable
    4040{
     
    127127  {
    128128    return DateUtil.copy(getData().getEntryDate());
     129  }
     130  // -------------------------------------------
     131  /*
     132    From the Annotatable interface
     133    -------------------------------------------
     134  */
     135  /**
     136    @return Always null
     137    @since 3.3
     138  */
     139  @Override
     140  public Set<Annotatable> getAnnotatableParents()
     141  {
     142    return null;
    129143  }
    130144  // -------------------------------------------
  • trunk/src/core/net/sf/basedb/core/data/TagData.java

    r6127 r6335  
    3535*/
    3636public class TagData
    37   extends CommonData
     37  extends AnnotatedData
    3838  implements RegisteredData, SubtypableData
    3939{
  • trunk/src/core/net/sf/basedb/util/overview/loader/TagLoader.java

    r5651 r6335  
    8484   
    8585    NodeFactory<Tag> nf = getNodeFactory(dc, context);
    86     Node hardwareNode = createItemNode(nf, tag, tag, denied,
    87         parentNode, ChildNodeDirection.NONE);
    88     return hardwareNode;
     86    Node tagNode = createItemNode(nf, tag, tag, denied,
     87        parentNode, ChildNodeDirection.PROPERTY);
     88    return tagNode;
    8989  }
    9090  // -----------------------------------
    91  
     91  /*
     92    From the AbstractNodeLoader class
     93    ----------------------------------
     94  */
     95  /**
     96    Loads annotations and tag parameters for the given tag node.
     97    @see RawBioAssayLoader#createForwardNode(DbControl, OverviewContext, Node)
     98  */
     99  @Override
     100  protected void loadPropertyChildNodes(DbControl dc, OverviewContext context, Node tagNode)
     101  {
     102    getNodeLoader(context, Item.ANNOTATION).createPropertyNode(dc, context, tagNode);
     103  }
     104  // -------------------------------------   
    92105}
  • trunk/www/biomaterials/extracts/extracts.js

    r6312 r6335  
    272272      }
    273273    }
     274    var tagId = Math.abs(parseInt(frm.tag_id.value));
     275    if (tagId > 0) parents[parents.length] = 'TAG:'+tagId;
    274276    return parents;
    275277  }
  • trunk/www/biomaterials/tags/edit_tag.jsp

    r6306 r6335  
    2626--%>
    2727<%@ page pageEncoding="UTF-8" session="false"
     28  import="net.sf.basedb.core.AnnotationType"
    2829  import="net.sf.basedb.core.SessionControl"
    2930  import="net.sf.basedb.core.DbControl"
     
    9394  }
    9495 
    95   // Query to retrieve protocol types
     96  // Query to retrieve tag types
    9697  final ItemQuery<ItemSubtype> tagTypeQuery = ItemSubtype.getQuery(itemType);
    9798  tagTypeQuery.include(Include.ALL);
     
    167168      </table>
    168169    </t:tab>
     170    <t:tab id="annotations" title="Annotations" helpid="annotations.edit">
     171      <jsp:include page="../../common/annotations/annotate_frameset.jsp">
     172        <jsp:param name="item_type" value="<%=itemType.name()%>" />
     173        <jsp:param name="item_id" value="<%=itemId%>" />
     174        <jsp:param name="ID" value="<%=ID%>" />
     175      </jsp:include>
     176    </t:tab>
    169177    </t:tabcontrol>
    170178    </form>
  • trunk/www/biomaterials/tags/index.jsp

    r6192 r6335  
    163163      }
    164164
     165      Base.updateAnnotations(dc, tag, tag, request);
    165166      // OnSave extensions
    166167      invoker.render(OnSaveRenderer.ON_SAVE);
     
    199200      message = (numRemoved == 0 ? "No" : "Only "+numRemoved+" of "+numTotal) + " items could be deleted, because you have no DELETE permission";
    200201    }
    201     redirect = listPage;
     202    redirect = listPage+(message != null ? "&popmessage="+HTML.urlEncode(message) : "");
    202203  }
    203204  else if ("RestoreItem".equals(cmd))
     
    222223      message = (numRemoved == 0 ? "No" : "Only "+numRemoved+" of "+numTotal) + " items could be restored, because you have no WRITE permission";
    223224    }
    224     redirect = listPage;
     225    redirect = listPage+(message != null ? "&popmessage="+HTML.urlEncode(message) : "");
    225226  }
    226227  else if ("ShareItem".equals(cmd))
  • trunk/www/biomaterials/tags/list_tags.jsp

    r6260 r6335  
    3030  import="net.sf.basedb.core.Tag"
    3131  import="net.sf.basedb.core.ItemSubtype"
     32  import="net.sf.basedb.core.Annotation"
     33  import="net.sf.basedb.core.AnnotationType"
     34  import="net.sf.basedb.core.AnnotationSet"
    3235  import="net.sf.basedb.core.ItemQuery"
    3336  import="net.sf.basedb.core.ItemResultIterator"
     37  import="net.sf.basedb.core.ItemResultList"
    3438  import="net.sf.basedb.core.ItemContext"
    3539  import="net.sf.basedb.core.Nameable"
     
    7882final DbControl dc = sc.newDbControl();
    7983ItemResultIterator<Tag> tags = null;
     84ItemResultList<AnnotationType> annotationTypes = null;
    8085try
    8186{
     
    8590  typeQuery.order(Orders.asc(Hql.property("name")));
    8691  typeQuery.setCacheResult(true);
     92  final ItemQuery<AnnotationType> annotationTypeQuery = Base.getAnnotationTypesQuery(itemType);
     93  annotationTypes = annotationTypeQuery.list(dc);
    8794
    8895  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
     
    196203        exportable="true"
    197204      />
     205      <%
     206      for (AnnotationType at : annotationTypes)
     207      {
     208        Enumeration<String, String> annotationEnum = null;
     209        Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
     210        if (at.isEnumeration())
     211        {
     212          annotationEnum = new Enumeration<String, String>();
     213          List<?> values = at.getValues();
     214          for (Object value : values)
     215          {
     216            String encoded = formatter.format(value);
     217            annotationEnum.add(encoded, encoded);
     218          }
     219        }
     220        %>
     221        <tbl:columndef
     222          id="<%="at"+at.getId()%>"
     223          title="<%=HTML.encodeTags(at.getName())+" [A]"%>"
     224          property="<%="#"+at.getId()%>"
     225          annotation="true"
     226          datatype="<%=at.getValueType().getStringValue()%>"
     227          enumeration="<%=annotationEnum%>"
     228          smartenum="<%=at.getDisplayAsList() %>"
     229          sortable="<%=at.getMultiplicity() == 1%>"
     230          filterable="true"
     231          exportable="true"
     232          formatter="<%=formatter%>"
     233          unit="<%=at.getDefaultUnit()%>"
     234        />
     235        <%
     236      }
     237      %> 
    198238      <tbl:columndef
    199239        id="permission"
     
    415455                  /></tbl:cell>
    416456                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
     457                <%
     458                AnnotationSet as = item.isAnnotated() ? item.getAnnotationSet() : null;
     459                if (as != null)
     460                {
     461                  for (AnnotationType at : annotationTypes)
     462                  {
     463                    if (as.hasAnnotation(at))
     464                    {
     465                      Annotation a = as.getAnnotation(at);
     466                      String suffix = a.getUnitSymbol(null);
     467                      if (suffix != null) suffix = "&nbsp;" + suffix;
     468                      %>
     469                      <tbl:cell
     470                        column="<%="at"+at.getId()%>"
     471                        ><tbl:cellvalue
     472                          list="<%=a.getValues(null)%>"
     473                          suffix="<%=suffix%>"
     474                      /></tbl:cell>
     475                      <%
     476                    }
     477                  }
     478                }
     479                %>
    417480                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
    418481                <tbl:cell column="sharedTo">
  • trunk/www/biomaterials/tags/tags.js

    r6306 r6335  
    4040
    4141      // Tab validation
     42      TabControl.addTabActivateListener('settings.annotations', Annotations.autoLoadEditFrame);
    4243      TabControl.addTabValidator('settings.info', tags.validateTag);
    4344    }
     
    5657      Buttons.addClickHandler('btnImport', Buttons.runPlugin, attributes);
    5758      Buttons.addClickHandler('btnRunPlugin', Buttons.runPlugin, attributes);
     59
     60      TabControl.addTabActivateListener('main.annotations', AnnotationsList.loadOnce);
    5861    }
    5962    else if (pageId == 'list-page')
     
    9497    if (TabControl.validateActiveTab('settings'))
    9598    {
     99      Annotations.saveModifiedAnnotationsToForm(frm);
    96100      frm.submit();
    97101    }
  • trunk/www/biomaterials/tags/view_tag.jsp

    r6261 r6335  
    251251      </jsp:include>
    252252    </t:tab>
     253    <t:tab id="annotations" title="Annotations"
     254      tooltip="View annotation values" clazz="white">
     255      <jsp:include page="../../common/annotations/list_frameset.jsp">
     256        <jsp:param name="item_type" value="<%=itemType.name()%>" />
     257        <jsp:param name="item_id" value="<%=itemId%>" />
     258        <jsp:param name="ID" value="<%=ID%>" />
     259      </jsp:include>
     260    </t:tab>
    253261    </t:tabcontrol>
    254262
  • trunk/www/include/scripts/main.js

    r6334 r6335  
    549549    this.controllers['SESSION'] = { url:'views/sessions/index.jsp', width:450, height:300, popup:true, edit:false, noAnyToAny:true };
    550550    this.controllers['SOFTWARE'] = { url:'admin/software/index.jsp', width:800, height:500 };
    551     this.controllers['TAG'] = { url:'biomaterials/tags/index.jsp', width:450, height:300 };
     551    this.controllers['TAG'] = { url:'biomaterials/tags/index.jsp', width:800, height:500 };
    552552    this.controllers['TRANSFORMATION'] = { url:'views/experiments/transformations/index.jsp', width:450, height:300, noAnyToAny:true };
    553553    this.controllers['UNIT'] = { url:'admin/quantities/units/index.jsp', width:600, height:400, noAnyToAny:true };
Note: See TracChangeset for help on using the changeset viewer.