/* * integration.chgrp.HierarchyMoveCombinedDataTest * *------------------------------------------------------------------------------ * Copyright (C) 2006-2015 University of Dundee & Open Microscopy Environment. * All rights reserved. * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *------------------------------------------------------------------------------ */ package integration.chgrp; import integration.AbstractServerTest; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import omero.cmd.Chgrp2; import omero.gateway.util.Requests; import omero.model.Dataset; import omero.model.DatasetI; import omero.model.DatasetImageLink; import omero.model.DatasetImageLinkI; import omero.model.ExperimenterGroup; import omero.model.IObject; import omero.model.Image; import omero.sys.EventContext; import omero.sys.ParametersI; import org.testng.annotations.Test; import static org.testng.AssertJUnit.*; /** * Tests the move of data objects containing others members data. * * @author Jean-Marie Burel      <a * href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a> * @since 4.4 */ public class HierarchyMoveCombinedDataTest extends AbstractServerTest { /** * Moves a dataset containing an image owned by another user and an image * owned. * * @param source * The permissions of the source group. * @param target * The permissions of the destination group. * @param sourceRole * The user's role in the source group. * @param targetRole * The user's role in the target group. * @throws Exception * Thrown if an error occurred. */ private void moveDatasetAndImage(String source, String target, int sourceRole, int targetLevel) throws Exception { // Step 1 // Create a new group EventContext ctx = newUserAndGroup(source); // Create an image. Image img1 = (Image) iUpdate.saveAndReturnObject(mmFactory .createImage()); long user1 = img1.getDetails().getOwner().getId().getValue(); // Step 2 // create a new user and add it to the group ctx = newUserInGroup(ctx); switch (sourceRole) { case GROUP_OWNER: makeGroupOwner(); break; case ADMIN: logRootIntoGroup(ctx); } loginUser(ctx); // Create a dataset Dataset d = (Dataset) iUpdate.saveAndReturnObject(mmFactory .simpleDatasetData().asIObject()); // link the dataset and the image DatasetImageLink link = new DatasetImageLinkI(); link.setChild(img1); link.setParent(new DatasetI(d.getId().getValue(), false)); iUpdate.saveAndReturnObject(link); Image img2 = (Image) iUpdate.saveAndReturnObject(mmFactory .createImage()); link = new DatasetImageLinkI(); link.setChild(img2); link.setParent(new DatasetI(d.getId().getValue(), false)); iUpdate.saveAndReturnObject(link); long user2 = d.getDetails().getOwner().getId().getValue(); assertTrue(user1 != user2); // Step 3 // Create a new group, the user is now a member of the new group. ExperimenterGroup g = newGroupAddUser(target, ctx.userId); loginUser(g); // Step 4 // reconnect to the source group. switch (sourceRole) { case MEMBER: case GROUP_OWNER: default: loginUser(ctx); break; case ADMIN: logRootIntoGroup(ctx.groupId); } // Create commands to move and create the link in target final Chgrp2 dc = Requests.chgrp("Dataset", d.getId().getValue(), g.getId().getValue()); callback(true, client, dc); // Check if the dataset has been removed. ParametersI param = new ParametersI(); param.addId(d.getId().getValue()); String sql = "select i from Dataset as i where i.id = :id"; assertNull(iQuery.findByQuery(sql, param)); List<Long> ids = new ArrayList<Long>(); ids.add(img1.getId().getValue()); ids.add(img2.getId().getValue()); param = new ParametersI(); param.addIds(ids); sql = "select i from Image as i where i.id in (:ids)"; List<IObject> results = iQuery.findAllByQuery(sql, param); assertEquals(results.size(), 0); // Step 5 // log into source group to perform the move switch (sourceRole) { case MEMBER: case GROUP_OWNER: default: loginUser(g); break; case ADMIN: logRootIntoGroup(g.getId().getValue()); } param = new ParametersI(); param.addId(d.getId().getValue()); sql = "select i from Dataset as i where i.id = :id"; // Check if the dataset is in the target group. assertNotNull(iQuery.findByQuery(sql, param)); // Check param = new ParametersI(); param.addIds(ids); sql = "select i from Image as i where i.id in (:ids)"; results = iQuery.findAllByQuery(sql, param); assertEquals(results.size(), ids.size()); Iterator<IObject> i = results.iterator(); int count = 0; while (i.hasNext()) { if (ids.contains(i.next().getId().getValue())) count++; } assertEquals(count, ids.size()); disconnect(); } /** * Test to move by the group's owner a dataset containing one image owned by * another group's member from a <code>RWRA</code> group to * <code>RWRA</code> group. * * @throws Exception * Thrown if an error occurred. */ @Test public void testMoveDatasetByGroupOwnerRWRAtoRWRA() throws Exception { moveDatasetAndImage("rwra--", "rwra--", GROUP_OWNER, MEMBER); } /** * Test to move by the group's owner a dataset containing one image owned by * another group's member from a <code>RWR</code> group to <code>RWR</code> * group. * * @throws Exception * Thrown if an error occurred. */ @Test public void testMoveDatasetByGroupOwnerRWRtoRWR() throws Exception { moveDatasetAndImage("rwr---", "rwr---", GROUP_OWNER, MEMBER); } /** * Test to move by the group's owner a dataset containing one image owned by * another group's member from a <code>RWR</code> group to <code>RWR</code> * group. * * @throws Exception * Thrown if an error occurred. */ @Test public void testMoveDatasetByGroupOwnerRWRWtoRWRW() throws Exception { moveDatasetAndImage("rwrw--", "rwrw--", GROUP_OWNER, MEMBER); } /** * Test to move by an admin a dataset containing one image owned by another * group's member from a <code>RWRA</code> group to <code>RWRA</code> group. * * @throws Exception * Thrown if an error occurred. */ @Test public void testMoveDatasetByAdminRWRWtoRWRW() throws Exception { moveDatasetAndImage("rwrw--", "rwrw--", ADMIN, MEMBER); } /** * Test to move by the group's owner a dataset containing one image owned by * another group's member from a <code>RWR</code> group to <code>RWR</code> * group. * * @throws Exception * Thrown if an error occurred. */ @Test public void testMoveDatasetByMemberRWRWtoRWRW() throws Exception { moveDatasetAndImage("rwrw--", "rwrw--", MEMBER, MEMBER); } }