protected IEntityRequirements createMetadataEntityFromARecord()

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;
    }