blob: fe7e2d9453e3ebe7e8857bb5fc9f0e1753b5226e [file] [log] [blame]
package org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators;
import org.apache.airavata.datalake.metadata.backend.Connector;
import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Entity;
import org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource;
import org.neo4j.ogm.cypher.ComparisonOperator;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
public class ResourceServiceImpl extends GenericService<Resource> implements ResourceService {
public ResourceServiceImpl(Connector connector) {
super(connector);
}
@Override
Class<Resource> getEntityType() {
return Resource.class;
}
@Override
public boolean hasAccess(String username, String resourceName, String permissionType, String tenantId) {
String query =
"match (u:User{name:$username})-[:MEMBER_OF|HAS_CHILD_GROUP*]->(g:Group{tenant_id:$tenantId})" +
"-[r:HAS_ACCESS]->(m:Resource{tenant_id:$tenantId})-[l:HAS_CHILD_RESOURCE*]-> " +
"(p:Resource{tenant_id:$tenantId}) " +
"where r.permission_type=$permissionType and m.name=$resourceName or p.name=$resourceName return m,p";
Map<String, String> parameterMap = new HashMap<>();
parameterMap.put("username", username);
parameterMap.put("permissionType", permissionType);
parameterMap.put("resourceName", resourceName);
parameterMap.put("tenantId", tenantId);
Iterable<Map<String, Object>> mapIterable = super.execute(query, parameterMap);
AtomicBoolean accessible = new AtomicBoolean(false);
mapIterable.forEach(map -> {
if (!map.isEmpty()) {
accessible.set(true);
}
});
return accessible.get();
}
@Override
public List<Resource> find( Resource resource) {
List<SearchOperator> searchOperatorList = new ArrayList<>();
if (resource.getTenantId() != null) {
SearchOperator searchOperator = new SearchOperator();
searchOperator.setKey("tenant_id");
searchOperator.setValue(resource.getTenantId());
searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
searchOperatorList.add(searchOperator);
}
if (resource.getName() != null) {
SearchOperator searchOperator = new SearchOperator();
searchOperator.setKey("name");
searchOperator.setValue(resource.getName());
searchOperator.setComparisonOperator(ComparisonOperator.EQUALS);
searchOperatorList.add(searchOperator);
}
Collection<Resource> resources = super.search(searchOperatorList);
return new ArrayList<>(resources);
}
}