All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.unipop.schema.property.PropertySchema Maven / Gradle / Ivy

package org.unipop.schema.property;

import org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer;
import org.unipop.query.predicates.PredicatesHolder;
import org.unipop.query.predicates.PredicatesHolderFactory;

import java.util.Collections;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public interface PropertySchema {
    String getKey();
    Map toProperties(Map source);
    Map toFields(Map properties);
    Set toFields(Set propertyKeys);
    Set getValues(PredicatesHolder predicatesHolder);
    default PredicatesHolder toPredicates(PredicatesHolder predicatesHolder){
        Stream hasContainers = predicatesHolder.findKey(getKey());

        Set predicateHolders = hasContainers.map(this::toPredicate).collect(Collectors.toSet());
        return PredicatesHolderFactory.create(predicatesHolder.getClause(), predicateHolders);
    }
    default PredicatesHolder toPredicate(HasContainer hasContainer) { return null; }

    default Set excludeDynamicFields() { return Collections.emptySet(); }
    default Set excludeDynamicProperties() { return Collections.singleton(getKey()); }

    interface PropertySchemaBuilder {
        PropertySchema build(String key, Object conf, AbstractPropertyContainer container);
    }
}