package it.unibz.inf.ontop.model.term.functionsymbol.impl;

import it.unibz.inf.ontop.model.term.Constant;
import it.unibz.inf.ontop.model.term.TermFactory;
import it.unibz.inf.ontop.model.type.DBTermType;
import it.unibz.inf.ontop.model.type.MetaRDFTermType;

/**
 * When the argument is not a literal, returns a special string
 */
public class LangTagWithPlaceholderFunctionSymbol extends AbstractLangTagLikeFunctionSymbol {

    public static final String PLACEHOLDER = "not-a-literal";

    protected LangTagWithPlaceholderFunctionSymbol(MetaRDFTermType metaRDFTermType, DBTermType dbStringType) {
        super("LANG_TAG_WITH_PLACEHOLDER", metaRDFTermType, dbStringType);
    }

    @Override
    protected Constant defaultValueForNonLiteral(TermFactory termFactory) {
        return termFactory.getDBStringConstant(PLACEHOLDER);
    }

    @Override
    protected boolean mayReturnNullWithoutNullArguments() {
        return false;
    }

    protected boolean enableIfElseNullLifting() {
        return true;
    }
}
