<dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> <version>0.9.3</version> </dependency>
TTransport transport = new TSocket(serverHost, serverPort); transport.open(); TProtocol protocol = new TBinaryProtocol(transport); SharingRegistryService.Client sharingServiceClient = new SharingRegistryService.Client(protocol);
//domain id will be same as domain name String domainId = sharingServiceClient.createDomain(domain);
sharingServiceClient.createUser(user1); //Similarly create two more users user2 and user3. . . .
sharingServiceClient.createGroup(userGroup1); //Similarly create another group "userGroup2" with the owner being "test-user-2". . . .
/********************************************/ /* test-group-1 */ /* / \ */ /* / \ */ /* test-user-1 test-group-2 */ /* / \ */ /* test-user-2 test-user-3 */ /********************************************/
PermissionType permissionType2 = new PermissionType(); permissionType2.setPermissionTypeId("WRITE"); permissionType2.setDomainId(domainId); permissionType2.setName("WRITE"); permissionType2.setDescription("WRITE description"); sharingServiceClient.createPermissionType(permissionType2); PermissionType permissionType3 = new PermissionType(); permissionType3.setPermissionTypeId("CLONE"); permissionType3.setDomainId(domainId); permissionType3.setName("CLONE"); permissionType3.setDescription("CLONE description"); sharingServiceClient.createPermissionType(permissionType3);
EntityType entityType2 = new EntityType(); entityType2.setEntityTypeId("EXPERIMENT"); entityType2.setDomainId(domainId); entityType2.setName("EXPERIMENT"); entityType2.setDescription("EXPERIMENT entity type"); sharingServiceClient.createEntityType(entityType2); EntityType entityType3 = new EntityType(); entityType3.setEntityTypeId("FILE"); entityType3.setDomainId(domainId); entityType3.setName("FILE"); entityType3.setDescription("FILE entity type"); sharingServiceClient.createEntityType(entityType3);
Entity entity2 = new Entity(); entity2.setEntityId("test-experiment-1"); entity2.setDomainId(domainId); entity2.setEntityTypeId("EXPERIMENT"); entity2.setOwnerId("test-user-1"); entity2.setName("test-experiment-1"); entity2.setDescription("test experiment 1 description"); entity2.setParentEntityId("test-project-1"); entity2.setFullText("test experiment 1 benzene"); sharingServiceClient.createEntity(entity2); Entity entity3 = new Entity(); entity3.setEntityId("test-experiment-2"); entity3.setDomainId(domainId); entity3.setEntityTypeId("EXPERIMENT"); entity3.setOwnerId("test-user-1"); entity3.setName("test-experiment-2"); entity3.setDescription("test experiment 2 description"); entity3.setParentEntityId("test-project-1"); entity3.setFullText("test experiment 1 3-methyl 1-butanol stampede"); sharingServiceClient.createEntity(entity3); Entity entity4 = new Entity(); entity4.setEntityId("test-file-1"); entity4.setDomainId(domainId); entity4.setEntityTypeId("FILE"); entity4.setOwnerId("test-user-1"); entity4.setName("test-file-1"); entity4.setDescription("test file 1 description"); entity4.setParentEntityId("test-experiment-2"); entity4.setFullText("test input file 1 for experiment 2"); sharingServiceClient.createEntity(entity4);
//shared with non cascading permissions sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "CLONE", false); /************************************************************************************************************/ /* test-project-1 (OWNER:test-user-1, WRITE:test-user-2) */ /* / \ */ /* test-experiment-1 test-experiment-2 */ /* (OWNER:test-user-1,WRITE:test-user-2) (OWNER:test-user-1, WRITE:test-user-2, READ/CLONE:test-group-2) */ /* | */ /* test-file-1 */ /* (OWNER:test-user-1, WRITE:test-user-2, READ:test-group-2) */ /************************************************************************************************************/
//test-user-2 has WRITE permission to test-experiment-1 and test-experiment-2 indirectly System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "WRITE")); System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-2", "WRITE")); //test-user-2 does not have READ permission to test-experiment-1 and test-experiment-2 System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "READ")); System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-2", "READ")); //test-user-3 does not have READ permission to test-project-1 System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-project-1", "READ")); //test-experiment-2 is shared with test-group-2 with READ permission. Therefore test-user-3 has READ permission System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "READ")); //test-user-3 does not have WRITE permission to test-experiment-2 System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "WRITE")); //test-user-3 has CLONE permission to test-experiment-2 System.out.println((sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "CLONE"))); //test-user-3 does not have CLONE permission to test-file-1 System.out.println((sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-file-1", "CLONE")));
searchCriteria = new SearchCriteria(); searchCriteria.setSearchCondition(SearchCondition.EQUAL); searchCriteria.setValue("EXPERIMENT"); searchCriteria.setSearchField(EntitySearchField.ENTITY_TYPE_ID); filters.add(searchCriteria); searchCriteria = new SearchCriteria(); searchCriteria.setSearchCondition(SearchCondition.EQUAL); searchCriteria.setValue("READ"); searchCriteria.setSearchField(EntitySearchField.PERMISSION_TYPE_ID); filters.add(searchCriteria); System.out.println(sharingServiceClient.searchEntities(domainId, "test-user-2", "EXPERIMENT", filters, 0, -1).size());
</div>