/** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.airavata.sharing.registry; import org.apache.airavata.sharing.registry.models.*; import org.apache.airavata.sharing.registry.service.cpi.SharingRegistryService; import org.apache.thrift.TException; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; import org.apache.thrift.transport.TTransportException; import java.util.ArrayList; import java.util.Arrays; public class CipresTest { public static void main(String[] args) throws InterruptedException { System.out.println("Hello World!"); //should use the correct host name and port here String serverHost = "wb-airavata.scigap.org"; int serverPort = 7878; TTransport transport = null; try { transport = new TSocket(serverHost, serverPort); transport.open(); TProtocol protocol = new TBinaryProtocol(transport); SharingRegistryService.Client sharingServiceClient = new SharingRegistryService.Client(protocol); try { sharingServiceClient.deleteDomain("test-domain"); } catch (SharingRegistryException sre1) { System.out.println("deleteDomain failed" + sre1.getMessage() + "\n"); } Domain domain = new Domain(); //has to be one word domain.setName("test-domain"); //optional domain.setDescription("test domain description"); //domain id will be same as domain name String domainId = sharingServiceClient.createDomain(domain); System.out.println("After domain creation...\n"); User user1 = new User(); String userName1 = "test-user-1"; String userId1 = "test-user-1"; //required user1.setUserId(userId1); //required user1.setUserName(userName1); //required user1.setDomainId(domainId); //required user1.setFirstName("John"); //required user1.setLastName("Doe"); //required user1.setEmail("john.doe@abc.com"); //optional - this should be bytes of the users image icon //byte[] icon = new byte[10]; //user1.setIcon(icon); sharingServiceClient.createUser(user1); User user2 = new User(); String userName2 = "test-user-2"; String userId2 = "test-user-2"; //required user2.setUserId(userId2); //required user2.setUserName(userName2); //required user2.setDomainId(domainId); //required user2.setFirstName("John"); //required user2.setLastName("Doe"); //required user2.setEmail("john.doe@abc.com"); //optional - this should be bytes of the users image icon //byte[] icon = new byte[20]; //user2.setIcon(icon); sharingServiceClient.createUser(user2); User user3 = new User(); String userName3 = "test-user-3"; String userId3 = "test-user-3"; //required user3.setUserId(userId3); //required user3.setUserName(userName3); //required user3.setDomainId(domainId); //required user3.setFirstName("John"); //required user3.setLastName("Doe"); //required user3.setEmail("john.doe@abc.com"); //optional - this should be bytes of the users image icon //byte[] icon = new byte[30]; //user3.setIcon(icon); sharingServiceClient.createUser(user3); System.out.println("After user creation...\n"); UserGroup userGroup1 = new UserGroup(); //required userGroup1.setGroupId("test-group-1"); //required userGroup1.setDomainId(domainId); //required userGroup1.setName("test-group-1"); //optional //userGroup1.setDescription("test group description"); //required userGroup1.setOwnerId("test-user-1"); //required userGroup1.setGroupType(GroupType.USER_LEVEL_GROUP); sharingServiceClient.createGroup(userGroup1); //Similarly create another group "userGroup2" with the owner being "test-user-2". UserGroup userGroup2 = new UserGroup(); //required userGroup2.setGroupId("test-group-2"); //required userGroup2.setDomainId(domainId); //required userGroup2.setName("test-group-2"); //optional //userGroup2.setDescription("test group description"); //required userGroup2.setOwnerId("test-user-2"); //required userGroup2.setGroupType(GroupType.USER_LEVEL_GROUP); sharingServiceClient.createGroup(userGroup2); System.out.println("After group creation...\n"); sharingServiceClient.addUsersToGroup(domainId, Arrays.asList("test-user-3"), "test-group-2"); System.out.println("After adding user to group...\n"); sharingServiceClient.addChildGroupsToParentGroup(domainId, Arrays.asList("test-group-2"), "test-group-1"); PermissionType permissionType1 = new PermissionType(); //required permissionType1.setPermissionTypeId("READ"); //required permissionType1.setDomainId(domainId); //required permissionType1.setName("READ"); //optional permissionType1.setDescription("READ description"); sharingServiceClient.createPermissionType(permissionType1); 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); System.out.println("After adding groups to parent group...\n"); EntityType entityType1 = new EntityType(); //required entityType1.setEntityTypeId("PROJECT"); //required entityType1.setDomainId(domainId); //required entityType1.setName("PROJECT"); //optional entityType1.setDescription("PROJECT entity type description"); sharingServiceClient.createEntityType(entityType1); 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); System.out.println("After project entity creation...\n"); Entity entity1 = new Entity(); //required entity1.setEntityId("test-project-1"); //required entity1.setDomainId(domainId); //required entity1.setEntityTypeId("PROJECT"); //required entity1.setOwnerId("test-user-1"); //required entity1.setName("test-project-1"); //optional entity1.setDescription("test project 1 description"); //optional entity1.setFullText("test project 1 stampede gaussian seagrid"); //optional - If not set this will be default to current system time entity1.setOriginalEntityCreationTime(System.currentTimeMillis()); sharingServiceClient.createEntity(entity1); System.out.println("After currentTimeMillis()...\n"); 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"); System.out.println("Before sharingServiceClient.createEntity entity2...\n"); sharingServiceClient.createEntity(entity2); System.out.println("After sharingServiceClient.createEntity entity2...\n"); 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); System.out.println("After sharingServiceClient.createEntity entity3...\n"); 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); System.out.println("After sharingServiceClient.createEntity entity4...\n"); System.out.println("After test entity creation...\n"); //shared with cascading permissions //System.out.println("Before shareEntityWithUsers WRITE...\n"); //sharingServiceClient.shareEntityWithUsers(domainId, "test-project-1", Arrays.asList("test-user-2"), "WRITE", true); System.out.println("Before shareEntityWithGroups READ...\n"); long time = System.currentTimeMillis(); sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "READ", true); System.out.println("Time for sharing " + (System.currentTimeMillis() - time)); //shared with non cascading permissions System.out.println("Before shareEntityWithGroups CLONE...\n"); time = System.currentTimeMillis(); sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "CLONE", false); System.out.println("Time for sharing " + (System.currentTimeMillis() - time)); //test-project-1 is explicitly shared with test-user-2 with WRITE permission System.out.println("Before userHasAccess 1...\n"); System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-project-1", "WRITE")); //test-user-2 has WRITE permission to test-experiment-1 and test-experiment-2 indirectly System.out.println("Before userHasAccess 2...\n"); System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "WRITE")); System.out.println("Before userHasAccess 3...\n"); 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("Before userHasAccess 4...\n"); System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "READ")); System.out.println(domainId + " test-user-2 " + " test-experiment-2 " + " READ "); System.out.println("Before userHasAccess 5...\n"); 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("Before userHasAccess 6...\n"); 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("Before userHasAccess 7...\n"); 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("Before userHasAccess 8...\n"); 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("Before userHasAccess 9...\n"); 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("Before userHasAccess 10...\n"); System.out.println((sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-file-1", "CLONE"))); System.out.println("After cascading permissions...\n"); ArrayList<SearchCriteria> filters = new ArrayList<>(); //ArrayList<SearchCriteria> filters = new List<>(); SearchCriteria searchCriteria = new SearchCriteria(); searchCriteria.setSearchCondition(SearchCondition.LIKE); searchCriteria.setValue("experiment stampede methyl"); //searchCriteria.setValue("stampede"); //searchCriteria.setSearchField(EntitySearchField.NAME); searchCriteria.setSearchField(EntitySearchField.FULL_TEXT); 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", filters, 0, -1).size()); System.out.println(sharingServiceClient.searchEntities(domainId, "test-user-2", filters, 0, -1)); System.out.println("After searchEntities...\n"); //System.out.println("After searchEntities...\n"); User userA = new User(); String userNameA = "UserA"; String userIdA = "UserA"; //required userA.setUserId(userIdA); //required userA.setUserName(userNameA); //required userA.setDomainId(domainId); //required userA.setFirstName("User"); //required userA.setLastName("A"); //required userA.setEmail("user.a@example.com"); //optional - this should be bytes of the users image icon //byte[] icon = new byte[10]; //userA.setIcon(icon); sharingServiceClient.createUser(userA); User userB = new User(); String userNameB = "UserB"; String userIdB = "UserB"; //required userB.setUserId(userIdB); //required userB.setUserName(userNameB); //required userB.setDomainId(domainId); //required userB.setFirstName("User"); //required userB.setLastName("B"); //required userB.setEmail("user.b@example.com"); //optional - this should be bytes of the users image icon //byte[] icon = new byte[10]; //userB.setIcon(icon); sharingServiceClient.createUser(userB); User userC = new User(); String userNameC = "UserC"; String userIdC = "UserC"; //required userC.setUserId(userIdC); //required userC.setUserName(userNameC); //required userC.setDomainId(domainId); //required userC.setFirstName("User"); //required userC.setLastName("C"); //required userC.setEmail("user.c@example.com"); //optional - this should be bytes of the users image icon //byte[] icon = new byte[10]; //userC.setIcon(icon); sharingServiceClient.createUser(userC); User userD = new User(); String userNameD = "UserD"; String userIdD = "UserD"; //required userD.setUserId(userIdD); //required userD.setUserName(userNameD); //required userD.setDomainId(domainId); //required userD.setFirstName("User"); //required userD.setLastName("D"); //required userD.setEmail("user.d@example.com"); //optional - this should be bytes of the users image icon //byte[] icon = new byte[10]; //userD.setIcon(icon); sharingServiceClient.createUser(userD); System.out.println("After user creation...\n"); UserGroup Group1 = new UserGroup(); //required Group1.setGroupId("Group1"); //required Group1.setDomainId(domainId); //required Group1.setName("Group1"); //optional //userGroup1.setDescription("test group description"); //required Group1.setOwnerId("UserA"); //required Group1.setGroupType(GroupType.USER_LEVEL_GROUP); sharingServiceClient.createGroup(Group1); System.out.println("After Group1 creation...\n"); sharingServiceClient.addUsersToGroup(domainId, Arrays.asList("UserB"), "Group1"); sharingServiceClient.addUsersToGroup(domainId, Arrays.asList("UserC"), "Group1"); sharingServiceClient.addUsersToGroup(domainId, Arrays.asList("UserD"), "Group1"); System.out.println("After adding users to Group1 creation...\n"); EntityType entityTypeFolder = new EntityType(); //required entityTypeFolder.setEntityTypeId("FOLDER"); //required entityTypeFolder.setDomainId(domainId); //required entityTypeFolder.setName("FOLDER"); //optional //entityTypeFolder.setDescription("PROJECT entity type description"); sharingServiceClient.createEntityType(entityTypeFolder); System.out.println("After creating FOLDER entity type...\n"); EntityType entityTypeInputData = new EntityType(); //required entityTypeInputData.setEntityTypeId("INPUTDATA"); //required entityTypeInputData.setDomainId(domainId); //required entityTypeInputData.setName("INPUTDATA"); //optional //entityTypeFolder.setDescription("PROJECT entity type description"); sharingServiceClient.createEntityType(entityTypeInputData); System.out.println("After creating INPUTDATA entity type...\n"); Entity entityB1 = new Entity(); //required entityB1.setEntityId("UserBProject1"); //required entityB1.setDomainId(domainId); //required entityB1.setEntityTypeId("PROJECT"); //required entityB1.setOwnerId("UserB"); //required entityB1.setName("UserBProject1"); //optional entityB1.setDescription("User B's Project 1"); //optional entityB1.setFullText("test project 1"); //optional - If not set this will be default to current system time entityB1.setOriginalEntityCreationTime(System.currentTimeMillis()); sharingServiceClient.createEntity(entityB1); System.out.println("After creating UserBProject1 ...\n"); Entity entityC1 = new Entity(); //required entityC1.setEntityId("UserCProject2"); //required entityC1.setDomainId(domainId); //required entityC1.setEntityTypeId("PROJECT"); //required entityC1.setOwnerId("UserC"); //required entityC1.setName("UserCProject2"); //optional entityC1.setDescription("User C's Project 2"); //optional entityC1.setFullText("test project 2"); //optional - If not set this will be default to current system time entityC1.setOriginalEntityCreationTime(System.currentTimeMillis()); sharingServiceClient.createEntity(entityC1); System.out.println("After creating UserCProject2 ...\n"); Entity entityF1 = new Entity(); entityF1.setEntityId("Folder1"); entityF1.setDomainId(domainId); entityF1.setEntityTypeId("FOLDER"); entityF1.setOwnerId("UserB"); entityF1.setName("UserBFolder1"); entityF1.setDescription("UserB's Folder 1"); entityF1.setParentEntityId("UserBProject1"); entityF1.setFullText("test experiment 1 ethidium"); sharingServiceClient.createEntity(entityF1); System.out.println("After creating Folder1 ...\n"); Entity entityD1 = new Entity(); entityD1.setEntityId("Data1"); entityD1.setDomainId(domainId); entityD1.setEntityTypeId("INPUTDATA"); entityD1.setOwnerId("UserB"); entityD1.setName("UserBData1"); entityD1.setDescription("UserB's Data 1"); entityD1.setParentEntityId("Folder1"); entityD1.setFullText("Data 1 for User B Folder 1"); sharingServiceClient.createEntity(entityD1); System.out.println("After creating Data1 ...\n"); Entity entityF2 = new Entity(); entityF2.setEntityId("Folder2"); entityF2.setDomainId(domainId); entityF2.setEntityTypeId("FOLDER"); entityF2.setOwnerId("UserC"); entityF2.setName("UserCFolder2"); entityF2.setDescription("UserC's Folder 2"); entityF2.setParentEntityId("UserCProject2"); entityF2.setFullText("test experiment 2 ethidium"); sharingServiceClient.createEntity(entityF2); System.out.println("After creating Folder2 ...\n"); Entity entityD2 = new Entity(); entityD2.setEntityId("Data2"); entityD2.setDomainId(domainId); entityD2.setEntityTypeId("INPUTDATA"); entityD2.setOwnerId("UserC"); entityD2.setName("UserCData2"); entityD2.setDescription("UserC's Data 2"); entityD2.setParentEntityId("Folder2"); entityD2.setFullText("Data 2 for User C Folder 1"); sharingServiceClient.createEntity(entityD2); System.out.println("After creating Data2 ...\n"); //sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "READ", true); time = System.currentTimeMillis(); sharingServiceClient.shareEntityWithGroups(domainId, "Folder1", Arrays.asList("Group1"), "READ", true); System.out.println("Time for sharing " + (System.currentTimeMillis() - time)); System.out.println("After READ sharing UserBFolder1 with Group1 ...\n"); //sharingServiceClient.shareEntityWithGroups(domainId, "Folder2", Arrays.asList("Group1"), "READ", true); //System.out.println("After READ sharing UserCFolder2 with Group1 ...\n"); Entity entityD3 = new Entity(); entityD3.setEntityId("Data3"); entityD3.setDomainId(domainId); entityD3.setEntityTypeId("INPUTDATA"); entityD3.setOwnerId("UserC"); entityD3.setName("UserCData3"); entityD3.setDescription("UserC's Data 3"); entityD3.setParentEntityId("Folder2"); entityD3.setFullText("Data 3 for User C Folder 2"); sharingServiceClient.createEntity(entityD3); System.out.println("After creating Data3 ...\n"); System.out.println("Does UserC have READ access to Data1 ...\n"); System.out.println(sharingServiceClient.userHasAccess(domainId, "UserC", "Data1", "READ")); System.out.println("Does UserC have READ access to Data2 ...\n"); System.out.println(sharingServiceClient.userHasAccess(domainId, "UserC", "Data2", "READ")); System.out.println("Does UserC have READ access to Data3 ...\n"); System.out.println(sharingServiceClient.userHasAccess(domainId, "UserC", "Data3", "READ")); System.out.println("Does UserB have READ access to Data3 ...\n"); System.out.println(sharingServiceClient.userHasAccess(domainId, "UserB", "Data3", "READ")); ArrayList<SearchCriteria> sharedfilters = new ArrayList<>(); searchCriteria = new SearchCriteria(); searchCriteria.setSearchCondition(SearchCondition.EQUAL); searchCriteria.setValue("READ"); searchCriteria.setSearchField(EntitySearchField.PERMISSION_TYPE_ID); sharedfilters.add(searchCriteria); System.out.println("items READable by UserC ...\n"); System.out.println(sharingServiceClient.searchEntities(domainId, "UserC", sharedfilters, 0, -1).size()); System.out.println(sharingServiceClient.searchEntities(domainId, "UserC", sharedfilters, 0, -1)); searchCriteria = new SearchCriteria(); //searchCriteria.setSearchCondition(SearchCondition.EQUAL); searchCriteria.setSearchCondition(SearchCondition.NOT); searchCriteria.setValue("UserC"); searchCriteria.setSearchField(EntitySearchField.OWNER_ID); sharedfilters.add(searchCriteria); System.out.println("items READable, and not owned by UserC by UserC ...\n"); System.out.println(sharingServiceClient.searchEntities(domainId, "UserC", sharedfilters, 0, -1).size()); System.out.println(sharingServiceClient.searchEntities(domainId, "UserC", sharedfilters, 0, -1)); System.out.println("After searchEntities 2...\n"); System.out.println(sharingServiceClient.searchEntities(domainId, "UserC", sharedfilters, 0, -1).size()); System.out.println(sharingServiceClient.searchEntities(domainId, "UserC", sharedfilters, 0, -1)); System.out.println("After searchEntities 2...\n"); sharingServiceClient.removeUsersFromGroup(domainId, Arrays.asList("UserD"), "Group1"); System.out.println("After removing UserD from Group1 ...\n"); sharingServiceClient.deleteGroup(domainId, "Group1"); System.out.println("After deleting Group1 ...\n"); System.out.println("End of try clause...\n"); } catch (TTransportException ex1) { System.out.println("TTransportException...\n"); System.out.println(ex1); System.out.println(ex1.getCause()); ex1.printStackTrace(); System.out.println(ex1.getMessage()); } catch (SharingRegistryException ex2) { System.out.println("SharingRegistryException...\n"); System.out.println(ex2.getMessage()); } catch (TException ex3) { System.out.println("TException...\n"); System.out.println(ex3.getMessage()); } finally { System.out.println("In finally...\n"); transport.close(); } } }