blob: 796273b20c55814ac1ec00256ea0ccbb468dce23 [file] [log] [blame]
package org.apache.airavata.datalake.metadata.parsers;
import com.google.protobuf.GeneratedMessageV3;
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.Tenant;
import org.apache.airavata.datalake.metadata.mergers.GenericMerger;
import org.apache.airavata.datalake.metadata.mergers.Merger;
import org.apache.airavata.datalake.metadata.service.Group;
import org.apache.airavata.datalake.metadata.service.Resource;
import org.apache.airavata.datalake.metadata.service.User;
import org.dozer.DozerBeanMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class TenantParser implements Parser {
private static Logger LOGGER = LoggerFactory.getLogger(TenantParser.class);
@Autowired
private DozerBeanMapper dozerBeanMapper;
@Autowired
private GroupParser groupParser;
@Autowired
private UserParser userParser;
@Autowired
private ResourceParser resourceParser;
@Autowired
private Connector connector;
@Override
public Tenant parse(GeneratedMessageV3 entity, Entity parentEntity, ExecutionContext executionContext, Merger merger) {
if (entity instanceof org.apache.airavata.datalake.metadata.service.Tenant) {
org.apache.airavata.datalake.metadata.service.Tenant tenant =
(org.apache.airavata.datalake.metadata.service.Tenant) entity;
List<Group> groups = tenant.getGroupsList();
List<User> users = tenant.getUsersList();
List<Resource> resources = tenant.getResourcesList();
org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant neo4JTenant =
dozerBeanMapper.map(tenant,
org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Tenant.class);
neo4JTenant.setPrimaryExternalKey(neo4JTenant.getTenantId());
neo4JTenant.setExecutionContext(executionContext);
executionContext.addNeo4JConvertedModels(neo4JTenant.getSearchableId(), neo4JTenant);
if (!groups.isEmpty()) {
groups.stream().forEach(group -> {
org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Group neo4JGr =
groupParser.parse(group, null, executionContext, merger);
executionContext.addNeo4JConvertedModels(neo4JGr.getSearchableId(), neo4JGr);
neo4JTenant.add(neo4JGr, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
null);
});
}
if (!users.isEmpty()) {
users.stream().forEach(user -> {
org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.User usr =
userParser.parse(user, null, executionContext, merger);
executionContext.addNeo4JConvertedModels(usr.getSearchableId(), usr);
neo4JTenant.add(usr, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
null);
});
}
if (!resources.isEmpty()) {
resources.stream().forEach(resource -> {
org.apache.airavata.datalake.metadata.backend.neo4j.model.nodes.Resource neo4JResource =
resourceParser.parse(resource, null, executionContext, merger);
executionContext.addNeo4JConvertedModels(neo4JResource.getSearchableId(), neo4JResource);
neo4JTenant.add(neo4JResource, tenant.getCreatedAt() != 0 ? tenant.getCreatedAt() : System.currentTimeMillis(),
tenant.getLastModifiedAt() != 0 ? tenant.getLastModifiedAt() : System.currentTimeMillis(),
null);
});
}
if (merger != null) {
merger.merge(neo4JTenant);
}
return neo4JTenant;
} else {
String msg = "Wrong entity type detected for parser Tenant Parser, Expected Tenant";
LOGGER.error(msg);
throw new RuntimeException(msg);
}
}
@Override
public Tenant parse(GeneratedMessageV3 entity, ExecutionContext executionContext) {
return this.parse(entity, null, executionContext, null);
}
@Override
public Tenant parse(GeneratedMessageV3 entity) {
return this.parse(entity, null, new ExecutionContext(), null);
}
@Override
public Tenant parseAndMerge(GeneratedMessageV3 entity) {
return this.parse(entity, null, new ExecutionContext(), new GenericMerger(connector));
}
public org.apache.airavata.datalake.metadata.service.Tenant parse(Tenant tenant) {
Object obj = dozerBeanMapper.
map(tenant, org.apache.airavata.datalake.metadata.service.Tenant.newBuilder().getClass());
return (org.apache.airavata.datalake.metadata.service.Tenant) obj;
}
}