in asterix-graphix/src/main/java/org/apache/asterix/graphix/metadata/entitytupletranslators/DependencyTupleTranslator.java [84:179]
protected IEntityRequirements createMetadataEntityFromARecord(ARecord requirements) throws AlgebricksException {
// Read in our primary key value.
IAObject primaryKeyValueObj = GRA_RECORD_DETAIL.getObjectForField(requirements, FIELD_NAME_DEPENDENCY_ID);
String primaryKeyValue = ((AString) primaryKeyValueObj).getStringValue();
// Read in the dataverse name.
IAObject dataverseNameObj = GRA_RECORD_DETAIL.getObjectForField(requirements, FIELD_NAME_DATAVERSE_NAME);
DataverseName dataverseName =
DataverseName.createFromCanonicalForm(((AString) dataverseNameObj).getStringValue());
// Read in the entity name.
IAObject entityNameObj = GRA_RECORD_DETAIL.getObjectForField(requirements, FIELD_NAME_ENTITY_NAME);
String entityName = ((AString) entityNameObj).getStringValue();
// Read in the GraphDependency kind.
IEntityRequirements.DependentKind entityKind;
IAObject entityKindObj = GRA_RECORD_DETAIL.getObjectForField(requirements, FIELD_NAME_KIND);
String entityKindString = ((AString) entityKindObj).getStringValue();
if (entityKindString.equals(IEntityRequirements.DependentKind.FUNCTION.toString())) {
entityKind = IEntityRequirements.DependentKind.FUNCTION;
} else if (entityKindString.equals(IEntityRequirements.DependentKind.GRAPH.toString())) {
entityKind = IEntityRequirements.DependentKind.GRAPH;
} else { // entityKindString.equals(IEntityRequirements.DependentKind.VIEW.toString())
entityKind = IEntityRequirements.DependentKind.VIEW;
}
// If we have a function, then we must read in the entity detail.
String entityDetail = null;
if (entityKind == IEntityRequirements.DependentKind.FUNCTION) {
IAObject entityDetailObj = GRA_RECORD_DETAIL.getObjectForField(requirements, FIELD_NAME_ENTITY_DETAIL);
entityDetail = ((AString) entityDetailObj).getStringValue();
}
// Read in the dependencies.
Set<DependencyIdentifier> dependencyIdentifiers = new HashSet<>();
IAObject dependenciesObj = GRA_RECORD_DETAIL.getObjectForField(requirements, FIELD_NAME_DEPENDENCIES);
IACursor dependenciesCursor = ((AOrderedList) dependenciesObj).getCursor();
while (dependenciesCursor.next()) {
ARecord dependency = (ARecord) dependenciesCursor.get();
// Read in the dataverse name.
IAObject depDataverseNameObj = DEP_RECORD_DETAIL.getObjectForField(dependency, FIELD_NAME_DATAVERSE_NAME);
DataverseName depDataverseName =
DataverseName.createFromCanonicalForm(((AString) depDataverseNameObj).getStringValue());
// Read in the entity name.
IAObject depEntityNameObj = DEP_RECORD_DETAIL.getObjectForField(dependency, FIELD_NAME_ENTITY_NAME);
String depEntityName = ((AString) depEntityNameObj).getStringValue();
// Read in the entity kind, and add the new dependency identifier.
DependencyIdentifier.Kind depEntityKind;
IAObject depEntityKindObj = DEP_RECORD_DETAIL.getObjectForField(dependency, FIELD_NAME_KIND);
String depEntityKindString = ((AString) depEntityKindObj).getStringValue();
if (depEntityKindString.equals(DependencyIdentifier.Kind.GRAPH.toString())) {
depEntityKind = DependencyIdentifier.Kind.GRAPH;
} else if (depEntityKindString.equals(DependencyIdentifier.Kind.DATASET.toString())) {
depEntityKind = DependencyIdentifier.Kind.DATASET;
} else if (depEntityKindString.equals(DependencyIdentifier.Kind.SYNONYM.toString())) {
depEntityKind = DependencyIdentifier.Kind.SYNONYM;
} else { // depEntityKindString.equals(DependencyIdentifier.Kind.FUNCTION.toString())
depEntityKind = DependencyIdentifier.Kind.FUNCTION;
}
// If we have a function, then we must read in the entity detail.
String depEntityDetail = null;
if (depEntityKind == DependencyIdentifier.Kind.FUNCTION) {
IAObject depEntityDetailObj = DEP_RECORD_DETAIL.getObjectForField(dependency, FIELD_NAME_ENTITY_DETAIL);
depEntityDetail = ((AString) depEntityDetailObj).getStringValue();
}
DependencyIdentifier depIdentifier = (depEntityKind != DependencyIdentifier.Kind.FUNCTION)
? new DependencyIdentifier(depDataverseName, depEntityName, depEntityKind)
: new DependencyIdentifier(depDataverseName, depEntityName, depEntityDetail, depEntityKind);
dependencyIdentifiers.add(depIdentifier);
}
// Return the entity requirements, based on the type.
switch (entityKind) {
case FUNCTION:
int functionArity = Integer.parseInt(entityDetail);
FunctionSignature functionSignature = new FunctionSignature(dataverseName, entityName, functionArity);
return new FunctionRequirements(functionSignature, dependencyIdentifiers, primaryKeyValue);
case GRAPH:
return new GraphRequirements(dataverseName, entityName, dependencyIdentifiers, primaryKeyValue);
case VIEW:
return new ViewRequirements(dataverseName, entityName, dependencyIdentifiers, primaryKeyValue);
}
return null;
}