Changeset 6745


Ignore:
Timestamp:
Feb 18, 2015, 11:31:06 AM (7 years ago)
Author:
Nicklas Nordborg
Message:

References #1325: Lists of items (similar funcion as biomaterial lists)

Adding columns and other functionality for removable, ownable and shareable member items.

Location:
trunk/www/views/itemlists/members
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/www/views/itemlists/members/index.jsp

    r6744 r6745  
    3333  import="net.sf.basedb.core.BasicItem"
    3434  import="net.sf.basedb.core.Listable"
     35  import="net.sf.basedb.core.OwnedItem"
    3536  import="net.sf.basedb.core.query.Restrictions"
    3637  import="net.sf.basedb.core.query.Expressions"
     
    110111    redirect = listPage;
    111112  }
     113  else if ("DeleteItems".equals(cmd))
     114  {
     115    // Delete all selected items on the list page
     116    dc = sc.newDbControl();
     117    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, subContext, pageContext, defaultContext);
     118    int numTotal = cc.getSelected().size();
     119    int numRemoved = RemovableUtil.setRemoved(dc, itemType, cc.getSelected(), true);
     120    dc.commit();
     121    if (numTotal != numRemoved)
     122    {
     123      message = (numRemoved == 0 ? "No" : "Only "+numRemoved+" of "+numTotal) + " items could be deleted, because you have no DELETE permission";
     124    }
     125    redirect = listPage;
     126  }
     127  else if ("RestoreItems".equals(cmd))
     128  {
     129    // Restore all selected items on the list page
     130    dc = sc.newDbControl();
     131    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, subContext, pageContext, defaultContext);
     132    int numTotal = cc.getSelected().size();
     133    int numRemoved = RemovableUtil.setRemoved(dc, itemType, cc.getSelected(), false);
     134    dc.commit();
     135    if (numTotal != numRemoved)
     136    {
     137      message = (numRemoved == 0 ? "No" : "Only "+numRemoved+" of "+numTotal) + " items could be restored, because you have no WRITE permission";
     138    }
     139    redirect = listPage;
     140  }
     141  else if ("ShareItems".equals(cmd))
     142  {
     143    // Display a popup window for sharing all selected items on the list page
     144    dc = sc.newDbControl();
     145    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, subContext, pageContext, defaultContext);
     146    MultiPermissions permissions = ShareableUtil.getMultiPermissions(dc, itemType, cc.getSelected());
     147    dc.close();
     148    cc.setObject("MultiPermissions", permissions);
     149    redirect = "../../../common/share/share.jsp?ID="+ID+"&item_type="+itemType.name()+"&subcontext="+subContext;
     150  }
     151  else if ("SetOwnerOfItems".equals(cmd))
     152  {
     153    // Change owner of items selected on a list page
     154    dc = sc.newDbControl();
     155    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, subContext, pageContext, defaultContext);
     156    Set<OwnedItem> items = new HashSet<OwnedItem>();
     157    for (Integer id : cc.getSelected())
     158    {
     159      if (id != null) items.add((OwnedItem)itemType.getById(dc, id));
     160    }
     161    dc.close();
     162    cc.setObject("OwnedItems", items);
     163    redirect = "../../../common/ownership/ownership.jsp?ID="+ID+"&item_type="+itemType.name()+"&subcontext="+subContext;
     164  }
    112165  else if ("ExportItems".equals(cmd))
    113166  {
  • trunk/www/views/itemlists/members/list_members.jsp

    r6743 r6745  
    3737  import="net.sf.basedb.core.BasicItem"
    3838  import="net.sf.basedb.core.CommonItem"
     39  import="net.sf.basedb.core.Removable"
     40  import="net.sf.basedb.core.SharedItem"
     41  import="net.sf.basedb.core.Shareable"
     42  import="net.sf.basedb.core.Ownable"
    3943  import="net.sf.basedb.core.AnnotationSet"
    4044  import="net.sf.basedb.core.Annotation"
     
    101105  final ItemList list = ItemList.getById(dc, listId);
    102106  final Item itemType = list.getMemberType();
    103 
     107  final Class memberClass = itemType.getItemClass();
     108
     109  final boolean ownable = Ownable.class.isAssignableFrom(memberClass);
     110  final boolean shareable = Shareable.class.isAssignableFrom(memberClass);
     111  final boolean removable = Removable.class.isAssignableFrom(memberClass);
     112 
    104113  final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST, "listmembers."+list.getId());
    105114  final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, "listmembers."+list.getId(), null, null);
     
    195204      />
    196205      <tbl:columndef
     206        id="owner"
     207        property="owner.name"
     208        datatype="string"
     209        title="Owner"
     210        sortable="true"
     211        filterable="true"
     212        exportable="true"
     213        show="<%=ownable ? "auto" : "never"%>"
     214      />
     215      <tbl:columndef
    197216        id="description"
    198217        property="description"
     
    207226        title="Permission"
    208227      />
     228      <tbl:columndef
     229        id="sharedTo"
     230        title="Shared to"
     231        filterable="true"
     232        filterproperty="!sharedTo.name"
     233        datatype="string"
     234        show="<%=shareable ? "auto" : "never" %>"
     235      />
    209236      <tbl:columndef
    210237        id="xt-columns"
     
    230257            title="Remove&hellip;"
    231258            tooltip="<%=removePermission ? "Remove the selected items from this list" : "You do not have permission to remove items" %>"
     259          />
     260          <tbl:button
     261            id="btnDeleteItems"
     262            image="delete.png"
     263            title="Delete"
     264            tooltip="Delete the selected items"
     265            visible="<%=removable%>"
     266          />
     267          <tbl:button
     268            id="btnRestoreItems"
     269            image="restore.png"
     270            title="Restore"
     271            tooltip="Restore the selected (deleted) items"
     272            visible="<%=removable%>"
     273          />
     274          <tbl:button
     275            id="btnShareItems"
     276            image="share.png"
     277            title="Share&hellip;"
     278            tooltip="Share the selected items"
     279            visible="<%=shareable%>"
     280          />
     281          <tbl:button
     282            id="btnSetOwner"
     283            image="take_ownership.png"
     284            title="Set owner&hellip;"
     285            tooltip="Change owner of the selected items"
     286            visible="<%=ownable%>"
    232287          />
    233288          <tbl:button
     
    339394          int selectedItemId = cc.getId();
    340395          if (members != null)
    341           {           
     396          {
     397            Listable item = null;
     398            SharedItem sharedItem = null;
     399            Removable removableItem = null;
    342400            while (members.hasNext())
    343401            {
    344               Listable item = members.next();
     402              item = members.next();
     403              sharedItem = shareable ? (SharedItem)item : null;
     404              removableItem = removable ? (Removable)item : null;
     405             
    345406              int itemId = item.getId();
    346407              boolean sharePermission = item.hasPermission(Permission.SET_PERMISSION);
     
    380441                  clazz="icons"
    381442                  visible="<%=mode.hasIcons()%>"
    382                   ></tbl:header>
     443                  ><base:icon
     444                    image="deleted.png"
     445                    id="<%="delete."+itemId %>"
     446                    subclass="<%=deletePermission ? "table-delete-item" : null %>"
     447                    data-item-id="<%=itemId%>"
     448                    tooltip="This item has been scheduled for deletion"
     449                    visible="<%=removable && removableItem.isRemoved()%>"
     450                  /><base:icon
     451                    image="shared.png"
     452                    id="<%="share."+itemId %>"
     453                    subclass="<%=sharePermission ? "table-share-item" : null %>"
     454                    data-item-id="<%=itemId%>"
     455                    tooltip="This item is shared to other users, groups and/or projects"
     456                    visible="<%=shareable && sharedItem.isShared()%>"
     457                  />&nbsp;</tbl:header>
    383458                <tbl:cell column="name"><div
    384459                  class="link table-item"
     
    388463                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
    389464                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
     465                <tbl:cell column="owner"
     466                  ><base:propertyvalue
     467                    item="<%=item%>"
     468                    property="owner"
     469                    enableEditLink="<%=mode.hasEditLink()%>"
     470                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
     471                  /></tbl:cell>
    390472                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
    391473                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
     474                <tbl:cell column="sharedTo">
     475                  <%
     476                  Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, sharedItem).iterator();
     477                  while(sharees.hasNext())
     478                  {
     479                    Nameable n = sharees.next();
     480                    if (mode.hasPropertyLink())
     481                    {
     482                      out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
     483                    }
     484                    else
     485                    {
     486                      out.write(HTML.encodeTags(n.getName()));
     487                    }
     488                    out.write(sharees.hasNext() ? ", " : "");
     489                  }
     490                  %>
     491                </tbl:cell>
    392492                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
    393493                  <tbl:cell column="xt-columns" />
  • trunk/www/views/itemlists/members/members.js

    r6744 r6745  
    3535    var tableAttributes = {'table-id': 'members'};
    3636    Buttons.addClickHandler('btnColumns', Buttons.configureColumns, tableAttributes);
     37    Buttons.addClickHandler('btnDeleteItems', Buttons.deleteItems, tableAttributes);
     38    Buttons.addClickHandler('btnRestoreItems', Buttons.restoreItems, tableAttributes);
     39    Buttons.addClickHandler('btnShareItems', Buttons.shareItems, tableAttributes);
     40    Buttons.addClickHandler('btnSetOwner', Buttons.setOwnerOfItems, tableAttributes);
    3741    Buttons.addClickHandler('btnExport', Buttons.runListPlugin, tableAttributes);
    3842    Buttons.addClickHandler('btnImport', Buttons.runListPlugin, tableAttributes);
Note: See TracChangeset for help on using the changeset viewer.