/* * Copyright 2015 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.rf.ide.core.testdata.model.table.keywords.names; import java.util.List; import com.google.common.base.Joiner; import com.google.common.base.Objects; import com.google.common.base.Splitter; public final class QualifiedKeywordName { private final String name; private final String source; private final String embeddedName; private QualifiedKeywordName(final String name, final String source) { this(name, null, source); } private QualifiedKeywordName(final String name, final String embeddedName, final String source) { this.name = name; this.source = source; this.embeddedName = embeddedName; } public static QualifiedKeywordName create(final String name, final String sourceName) { return new QualifiedKeywordName(unifyDefinition(name), sourceName); } public static QualifiedKeywordName fromOccurrence(final String givenWholeName) { final List<String> splitted = Splitter.on('.').splitToList(givenWholeName); final String name = splitted.get(splitted.size() - 1).trim(); final String source = Joiner.on('.').join(splitted.subList(0, splitted.size() - 1)).trim(); return new QualifiedKeywordName(unifyDefinition(name), name.toLowerCase(), source); } public static QualifiedKeywordName fromOccurrenceWithDots(final String givenWholeName) { // ignore keyword source return new QualifiedKeywordName(unifyDefinition(givenWholeName), givenWholeName.toLowerCase(), ""); } public static String unifyDefinition(final String keywordDefinition) { if (keywordDefinition != null) { return EmbeddedKeywordNamesSupport.hasEmbeddedArguments(keywordDefinition) ? keywordDefinition.toLowerCase() : keywordDefinition.toLowerCase().replaceAll("_", "").replaceAll(" ", ""); } return ""; } public static boolean isOccurrenceEqualToDefinition(final String keywordOccurrence, final String keywordDefinition) { if(EmbeddedKeywordNamesSupport.hasEmbeddedArguments(keywordDefinition)) { // ignore embedded keyword names return true; } final List<String> splittedOccurrence = Splitter.on('.').splitToList(keywordOccurrence); final String nameInOccurrence = splittedOccurrence.get(splittedOccurrence.size() - 1).trim(); return nameInOccurrence.equalsIgnoreCase(keywordDefinition); } public String getKeywordName() { return name; } public String getEmbeddedKeywordName() { return embeddedName; } public String getKeywordSource() { return source; } public QualifiedKeywordName toLowerCase() { return new QualifiedKeywordName(name.toLowerCase(), embeddedName.toLowerCase(), source.toLowerCase()); } public boolean matchesIgnoringCase(final QualifiedKeywordName that) { if (source.isEmpty()) { return this.name.equalsIgnoreCase(that.name); } return this.name.equalsIgnoreCase(that.name) && this.source.equalsIgnoreCase(that.source); } @Override public boolean equals(final Object obj) { if (obj == null) { return false; } if (obj.getClass() == QualifiedKeywordName.class) { final QualifiedKeywordName that = (QualifiedKeywordName) obj; return Objects.equal(this.name, that.name) && Objects.equal(this.source, that.source); } return false; } @Override public int hashCode() { return Objects.hashCode(name, source); } }