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

edu.stanford.protege.webprotege.match.LiteralMatcher Maven / Gradle / Ivy

The newest version!
package edu.stanford.protege.webprotege.match;

import org.semanticweb.owlapi.model.OWLDatatype;
import org.semanticweb.owlapi.model.OWLLiteral;

import javax.annotation.Nonnull;
import java.util.function.Predicate;
import java.util.regex.Pattern;

import static com.google.common.base.Preconditions.checkNotNull;

/**
 * Matthew Horridge
 * Stanford Center for Biomedical Informatics Research
 * 7 Jun 2018
 */
public class LiteralMatcher implements Matcher {

    @Nonnull
    private final Matcher lexicalValueMatcher;

    @Nonnull
    private final Matcher languageTagMatcher;

    @Nonnull
    private final Matcher datatypeMatcher;

    public LiteralMatcher(@Nonnull Matcher lexicalValueMatcher,
                          @Nonnull Matcher languageTagMatcher,
                          @Nonnull Matcher datatypeMatcher) {
        this.lexicalValueMatcher = checkNotNull(lexicalValueMatcher);
        this.languageTagMatcher = checkNotNull(languageTagMatcher);
        this.datatypeMatcher = checkNotNull(datatypeMatcher);
    }

    @Override
    public boolean matches(@Nonnull OWLLiteral literal) {
        return lexicalValueMatcher.matches(literal.getLiteral())
                && languageTagMatcher.matches(literal.getLang())
                && datatypeMatcher.matches(literal.getDatatype());
    }

    public static LiteralMatcher forLexicalPattern(@Nonnull Pattern pattern) {
        return new LiteralMatcher(
                lexicalValue -> pattern.matcher(lexicalValue).find(),
                langTag -> true,
                datatype -> true
        );
    }

    public static Matcher forPredicate(@Nonnull Predicate predicate) {
        return new LiteralMatcher(
                predicate::test,
                langTag -> true,
                datatype -> true
        );
    }

    public static Matcher forHasAnyLangTag() {
        return new LiteralMatcher(lexicalValue -> true,
                                  langTag -> !langTag.isEmpty(),
                                  datatype -> true);
    }

    public static Matcher forLexicalValue(Matcher lexicalValueMatcher) {
        return new LiteralMatcher(lexicalValueMatcher, langTag -> true, datatype -> true);
    }

    public static Matcher forLangTag(Matcher languageTagMatcher) {
        return new LiteralMatcher(Matcher.matchesAny(),
                                  languageTagMatcher,
                                  Matcher.matchesAny());
    }

    public static Matcher forHasLangTag(@Nonnull String langTagMatch) {
        return new LiteralMatcher(lexicalValue -> true,
                                  langTagMatch::equalsIgnoreCase,
                                  datatype -> true);
    }


    public static Matcher forNoLangTag() {
        return new LiteralMatcher(lexicalValue -> true,
                                  String::isEmpty,
                                  datatype -> true);
    }

    public static Matcher forXsdBooleanTrue() {
        return new LiteralMatcher(lexicalValue -> lexicalValue.equals("true") || lexicalValue.equals("1"),
                                  String::isEmpty,
                                  OWLDatatype::isBoolean);
    }

    public static Matcher forXsdBooleanFalse() {
        return new LiteralMatcher(lexicalValue -> !lexicalValue.equals("false") && !lexicalValue.equals("1"),
                                  String::isEmpty,
                                  OWLDatatype::isBoolean);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy