/* * Copyright 2016 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.robotframework.ide.eclipse.main.plugin.assist; import java.util.Optional; import org.rf.ide.core.testdata.model.table.keywords.names.EmbeddedKeywordNamesSupport; import com.google.common.collect.Range; public class ProposalMatchers { public static ProposalMatcher prefixesMatcher() { return new ProposalMatcher() { @Override public Optional<ProposalMatch> matches(final String userContent, final String proposalContent) { if (proposalContent.toLowerCase().startsWith(userContent.toLowerCase())) { return Optional.of(new ProposalMatch(Range.closedOpen(0, userContent.length()))); } else { return Optional.empty(); } } }; } public static ProposalMatcher caseSensitivePrefixesMatcher() { return new ProposalMatcher() { @Override public Optional<ProposalMatch> matches(final String userContent, final String proposalContent) { if (proposalContent.startsWith(userContent)) { return Optional.of(new ProposalMatch(Range.closedOpen(0, userContent.length()))); } else { return Optional.empty(); } } }; } public static ProposalMatcher embeddedKeywordsMatcher() { return new ProposalMatcher() { @Override public Optional<ProposalMatch> matches(final String userContent, final String proposalContent) { final int index = EmbeddedKeywordNamesSupport.startsWithIgnoreCase(proposalContent, userContent); if (index >= 0) { return Optional.of(new ProposalMatch(Range.closedOpen(0, index))); } else { return Optional.empty(); } } }; } public static ProposalMatcher pathsMatcher() { return new ProposalMatcher() { @Override public Optional<ProposalMatch> matches(final String userContent, final String proposalContent) { if (proposalContent.toLowerCase().startsWith(userContent.toLowerCase())) { return Optional.of(new ProposalMatch(Range.closedOpen(0, userContent.length()))); } final int index = proposalContent.toLowerCase().indexOf("/" + userContent.toLowerCase()); if (index >= 0) { return Optional .of(new ProposalMatch(Range.closedOpen(index + 1, index + 1 + userContent.length()))); } return Optional.empty(); } }; } }