Search in sources :

Example 1 with ThreadTrace

use of com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.ThreadTrace in project grakn by graknlabs.

the class Definer method definePlays.

private void definePlays(ThingType thingType, Set<PlaysConstraint> playsConstraints) {
    try (ThreadTrace ignored = traceOnThread(TRACE_PREFIX + "define_plays")) {
        playsConstraints.forEach(plays -> {
            define(plays.relation().get());
            LabelConstraint roleTypeLabel = plays.role().label().get();
            RoleType roleType = getRoleType(roleTypeLabel).asRoleType();
            if (plays.overridden().isPresent()) {
                String overriddenLabelName = plays.overridden().get().label().get().properLabel().name();
                Optional<? extends RoleType> overriddenType = roleType.getSupertypes().filter(rt -> rt.getLabel().name().equals(overriddenLabelName)).first();
                if (overriddenType.isPresent()) {
                    thingType.setPlays(roleType, overriddenType.get());
                } else {
                    throw TypeDBException.of(OVERRIDDEN_NOT_SUPERTYPE, roleTypeLabel.scopedLabel(), overriddenLabelName);
                }
            } else {
                thingType.setPlays(roleType);
            }
        });
    }
}
Also used : ConceptManager(com.vaticle.typedb.core.concept.ConceptManager) Context(com.vaticle.typedb.core.common.parameters.Context) LabelConstraint(com.vaticle.typedb.core.pattern.constraint.type.LabelConstraint) ROLE_TYPE_SCOPE_IS_NOT_RELATION_TYPE(com.vaticle.typedb.core.common.exception.ErrorMessage.TypeRead.ROLE_TYPE_SCOPE_IS_NOT_RELATION_TYPE) RelationType(com.vaticle.typedb.core.concept.type.RelationType) LogicManager(com.vaticle.typedb.core.logic.LogicManager) HashSet(java.util.HashSet) PlaysConstraint(com.vaticle.typedb.core.pattern.constraint.type.PlaysConstraint) TYPE_CONSTRAINT_UNACCEPTED(com.vaticle.typedb.core.common.exception.ErrorMessage.TypeWrite.TYPE_CONSTRAINT_UNACCEPTED) ThingType(com.vaticle.typedb.core.concept.type.ThingType) CYCLIC_TYPE_HIERARCHY(com.vaticle.typedb.core.common.exception.ErrorMessage.TypeWrite.CYCLIC_TYPE_HIERARCHY) RelatesConstraint(com.vaticle.typedb.core.pattern.constraint.type.RelatesConstraint) TYPE_NOT_FOUND(com.vaticle.typedb.core.common.exception.ErrorMessage.TypeRead.TYPE_NOT_FOUND) OwnsConstraint(com.vaticle.typedb.core.pattern.constraint.type.OwnsConstraint) LinkedHashSet(java.util.LinkedHashSet) TypeQLDefine(com.vaticle.typeql.lang.query.TypeQLDefine) ATTRIBUTE_VALUE_TYPE_MISSING(com.vaticle.typedb.core.common.exception.ErrorMessage.TypeWrite.ATTRIBUTE_VALUE_TYPE_MISSING) IS(com.vaticle.typeql.lang.common.TypeQLToken.Constraint.IS) ROLE_DEFINED_OUTSIDE_OF_RELATION(com.vaticle.typedb.core.common.exception.ErrorMessage.TypeWrite.ROLE_DEFINED_OUTSIDE_OF_RELATION) SubConstraint(com.vaticle.typedb.core.pattern.constraint.type.SubConstraint) Set(java.util.Set) RegexConstraint(com.vaticle.typedb.core.pattern.constraint.type.RegexConstraint) ATTRIBUTE_VALUE_TYPE_MODIFIED(com.vaticle.typedb.core.common.exception.ErrorMessage.TypeWrite.ATTRIBUTE_VALUE_TYPE_MODIFIED) INVALID_DEFINE_SUB(com.vaticle.typedb.core.common.exception.ErrorMessage.TypeWrite.INVALID_DEFINE_SUB) RoleType(com.vaticle.typedb.core.concept.type.RoleType) FactoryTracingThreadStatic.traceOnThread(com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.traceOnThread) List(java.util.List) TypeVariable(com.vaticle.typedb.core.pattern.variable.TypeVariable) Optional(java.util.Optional) VariableRegistry(com.vaticle.typedb.core.pattern.variable.VariableRegistry) TypeDBException(com.vaticle.typedb.core.common.exception.TypeDBException) AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) ThreadTrace(com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.ThreadTrace) ValueType(com.vaticle.typedb.core.concept.type.AttributeType.ValueType) ATTRIBUTE_VALUE_TYPE_DEFINED_NOT_ON_ATTRIBUTE_TYPE(com.vaticle.typedb.core.common.exception.ErrorMessage.TypeWrite.ATTRIBUTE_VALUE_TYPE_DEFINED_NOT_ON_ATTRIBUTE_TYPE) OVERRIDDEN_NOT_SUPERTYPE(com.vaticle.typedb.core.common.exception.ErrorMessage.TypeWrite.OVERRIDDEN_NOT_SUPERTYPE) LabelConstraint(com.vaticle.typedb.core.pattern.constraint.type.LabelConstraint) RoleType(com.vaticle.typedb.core.concept.type.RoleType) ThreadTrace(com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.ThreadTrace)

Example 2 with ThreadTrace

use of com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.ThreadTrace in project grakn by graknlabs.

the class Definer method getRoleType.

private RoleType getRoleType(LabelConstraint label) {
    try (ThreadTrace ignored = traceOnThread(TRACE_PREFIX + "get_role_type")) {
        // defined by their Relation Types ahead of time
        assert label.scope().isPresent();
        ThingType thingType;
        RoleType roleType;
        if ((thingType = conceptMgr.getThingType(label.scope().get())) == null) {
            throw TypeDBException.of(TYPE_NOT_FOUND, label.scope().get());
        } else if (!thingType.isRelationType()) {
            throw TypeDBException.of(ROLE_TYPE_SCOPE_IS_NOT_RELATION_TYPE, label.scopedLabel(), label.scope().get());
        } else if ((roleType = thingType.asRelationType().getRelates(label.label())) == null) {
            throw TypeDBException.of(TYPE_NOT_FOUND, label.scopedLabel());
        }
        return roleType;
    }
}
Also used : RoleType(com.vaticle.typedb.core.concept.type.RoleType) ThreadTrace(com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.ThreadTrace) ThingType(com.vaticle.typedb.core.concept.type.ThingType)

Example 3 with ThreadTrace

use of com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.ThreadTrace in project grakn by graknlabs.

the class Definer method execute.

public void execute() {
    try (ThreadTrace ignored = traceOnThread(TRACE_PREFIX + "execute")) {
        validateTypeHierarchyIsNotCyclic(variables);
        variables.forEach(variable -> {
            if (!defined.contains(variable))
                define(variable);
        });
        rules.forEach(this::define);
    }
}
Also used : ThreadTrace(com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.ThreadTrace)

Example 4 with ThreadTrace

use of com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.ThreadTrace in project grakn by graknlabs.

the class Definer method define.

private ThingType define(TypeVariable variable) {
    try (ThreadTrace ignored = traceOnThread(TRACE_PREFIX + "define")) {
        assert variable.label().isPresent();
        LabelConstraint labelConstraint = variable.label().get();
        if (labelConstraint.scope().isPresent() && variable.constraints().size() > 1) {
            throw TypeDBException.of(ROLE_DEFINED_OUTSIDE_OF_RELATION, labelConstraint.scopedLabel());
        } else if (!variable.is().isEmpty()) {
            throw TypeDBException.of(TYPE_CONSTRAINT_UNACCEPTED, IS);
        } else if (// do nothing
        labelConstraint.scope().isPresent())
            // do nothing
            return null;
        else if (defined.contains(variable))
            return conceptMgr.getThingType(labelConstraint.scopedLabel());
        ThingType type = getThingType(labelConstraint);
        if (variable.sub().isPresent()) {
            type = defineSub(type, variable.sub().get(), variable);
        } else if (variable.valueType().isPresent()) {
            // && variable.sub().size() == 0
            String valueType = variable.valueType().get().valueType().name();
            throw TypeDBException.of(ATTRIBUTE_VALUE_TYPE_MODIFIED, valueType, labelConstraint.label());
        } else if (type == null) {
            throw TypeDBException.of(TYPE_NOT_FOUND, labelConstraint.label());
        }
        if (variable.valueType().isPresent() && !(type.isAttributeType())) {
            throw TypeDBException.of(ATTRIBUTE_VALUE_TYPE_DEFINED_NOT_ON_ATTRIBUTE_TYPE, labelConstraint.label());
        }
        defined.add(variable);
        if (variable.abstractConstraint().isPresent())
            defineAbstract(type);
        if (variable.regex().isPresent())
            defineRegex(type.asAttributeType().asString(), variable.regex().get());
        if (!variable.relates().isEmpty())
            defineRelates(type.asRelationType(), variable.relates());
        if (!variable.owns().isEmpty())
            defineOwns(type, variable.owns());
        if (!variable.plays().isEmpty())
            definePlays(type, variable.plays());
        return type;
    }
}
Also used : LabelConstraint(com.vaticle.typedb.core.pattern.constraint.type.LabelConstraint) ThreadTrace(com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.ThreadTrace) ThingType(com.vaticle.typedb.core.concept.type.ThingType)

Example 5 with ThreadTrace

use of com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.ThreadTrace in project grakn by graknlabs.

the class Definer method defineOwns.

private void defineOwns(ThingType thingType, Set<OwnsConstraint> ownsConstraints) {
    try (ThreadTrace ignored = traceOnThread(TRACE_PREFIX + "define_owns")) {
        ownsConstraints.forEach(owns -> {
            AttributeType attributeType = define(owns.attribute()).asAttributeType();
            if (owns.overridden().isPresent()) {
                AttributeType overriddenType = define(owns.overridden().get()).asAttributeType();
                thingType.setOwns(attributeType, overriddenType, owns.isKey());
            } else {
                thingType.setOwns(attributeType, owns.isKey());
            }
        });
    }
}
Also used : AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) ThreadTrace(com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.ThreadTrace)

Aggregations

ThreadTrace (com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.ThreadTrace)14 ThingType (com.vaticle.typedb.core.concept.type.ThingType)6 LabelConstraint (com.vaticle.typedb.core.pattern.constraint.type.LabelConstraint)5 AttributeType (com.vaticle.typedb.core.concept.type.AttributeType)3 RoleType (com.vaticle.typedb.core.concept.type.RoleType)3 VariableRegistry (com.vaticle.typedb.core.pattern.variable.VariableRegistry)3 FactoryTracingThreadStatic.traceOnThread (com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.traceOnThread)2 TYPE_NOT_FOUND (com.vaticle.typedb.core.common.exception.ErrorMessage.TypeRead.TYPE_NOT_FOUND)2 ROLE_DEFINED_OUTSIDE_OF_RELATION (com.vaticle.typedb.core.common.exception.ErrorMessage.TypeWrite.ROLE_DEFINED_OUTSIDE_OF_RELATION)2 TYPE_CONSTRAINT_UNACCEPTED (com.vaticle.typedb.core.common.exception.ErrorMessage.TypeWrite.TYPE_CONSTRAINT_UNACCEPTED)2 TypeDBException (com.vaticle.typedb.core.common.exception.TypeDBException)2 Context (com.vaticle.typedb.core.common.parameters.Context)2 ConceptManager (com.vaticle.typedb.core.concept.ConceptManager)2 ValueType (com.vaticle.typedb.core.concept.type.AttributeType.ValueType)2 RelationType (com.vaticle.typedb.core.concept.type.RelationType)2 LogicManager (com.vaticle.typedb.core.logic.LogicManager)2 OwnsConstraint (com.vaticle.typedb.core.pattern.constraint.type.OwnsConstraint)2 PlaysConstraint (com.vaticle.typedb.core.pattern.constraint.type.PlaysConstraint)2 RegexConstraint (com.vaticle.typedb.core.pattern.constraint.type.RegexConstraint)2 RelatesConstraint (com.vaticle.typedb.core.pattern.constraint.type.RelatesConstraint)2