blob: aef31154cc75f6bd1d35f8155fbd861daed8ab94 [file] [log] [blame]
package org.apache.airavata.datalake.metadata.handlers;
import io.grpc.stub.StreamObserver;
import org.apache.airavata.datalake.metadata.backend.Connector;
import org.apache.airavata.datalake.metadata.backend.neo4j.curd.operators.TenantServiceImpl;
import org.apache.airavata.datalake.metadata.parsers.TenantParser;
import org.apache.airavata.datalake.metadata.service.*;
import org.dozer.DozerBeanMapper;
import org.lognet.springboot.grpc.GRpcService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import java.util.stream.Collectors;
@GRpcService
public class TenantServiceHandler extends TenantMetadataServiceGrpc.TenantMetadataServiceImplBase {
private static final Logger LOGGER = LoggerFactory.getLogger(TenantServiceHandler.class);
@Autowired
private DozerBeanMapper dozerBeanMapper;
@Autowired
private TenantParser tenantParser;
@Autowired
private Connector connector;
@Override
public void createTenant(TenantMetadataAPIRequest request,
StreamObserver<TenantMetadataAPIResponse> responseObserver) {
try {
Tenant tenant = request.getTenant();
org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant parsedTenant =
tenantParser.parse(tenant);
TenantServiceImpl tenantService = new TenantServiceImpl(connector);
tenantService.createOrUpdate(parsedTenant);
TenantMetadataAPIResponse response = TenantMetadataAPIResponse.newBuilder().setStatus(true).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
} catch (Exception ex) {
String msg = "Exception occurred while creating tenant " + ex;
LOGGER.error(msg);
responseObserver.onError(new Exception(msg));
}
}
@Override
public void getTenant(TenantMetadataAPIRequest request,
StreamObserver<FindTenantResponse> responseObserver) {
try {
Tenant tenant = request.getTenant();
org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant parsedTenant = tenantParser
.parse(tenant);
TenantServiceImpl tenantService = new TenantServiceImpl(connector);
List<org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant> tenantList =
tenantService.find(parsedTenant);
if (tenantList.isEmpty()) {
responseObserver.onCompleted();
}
List<Tenant> tenants = tenantList.stream().map(t -> {
return tenantParser.parse(t);
}).collect(Collectors.toList());
FindTenantResponse response = FindTenantResponse.newBuilder().addAllTenants(tenants).build();
responseObserver.onNext(response);
} catch (Exception ex) {
String msg = "Exception occurred while fetching tenant " + ex;
LOGGER.error(msg);
responseObserver.onError(new Exception(msg));
}
}
@Override
public void updateTenant(TenantMetadataAPIRequest request,
StreamObserver<TenantMetadataAPIResponse> responseObserver) {
try {
TenantServiceImpl tenantService = new TenantServiceImpl(connector);
Tenant tenant = request.getTenant();
org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant parsedTenant =
tenantParser
.parseAndMerge(tenant);
List<org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant> tenantList =
tenantService.find(parsedTenant);
if (tenantList.isEmpty()) {
responseObserver.onCompleted();
}
tenantService.createOrUpdate(parsedTenant);
TenantMetadataAPIResponse response = TenantMetadataAPIResponse.newBuilder().setStatus(true).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
} catch (Exception ex) {
String msg = "Exception occurred while updating tenant " + ex;
LOGGER.error(msg);
responseObserver.onError(new Exception(msg));
}
}
@Override
public void deleteTenant(TenantMetadataAPIRequest request,
StreamObserver<TenantMetadataAPIResponse> responseObserver) {
try {
Tenant tenant = request.getTenant();
org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant parsedTenant = tenantParser
.parse(tenant);
TenantServiceImpl tenantService = new TenantServiceImpl(connector);
List<org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant> tenantList =
tenantService.find(parsedTenant);
if (tenantList.isEmpty()) {
responseObserver.onCompleted();
}
tenantService.delete(tenantList.get(0).getId());
TenantMetadataAPIResponse response = TenantMetadataAPIResponse.newBuilder().setStatus(true).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
} catch (Exception ex) {
String msg = "Exception occurred while deleting tenant " + ex;
LOGGER.error(msg);
responseObserver.onError(new Exception(msg));
}
}
}