/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.core.util; import java.util.Collection; public class WildcardAttributeEvaluator { private String escapedValue; private Boolean hasWildcards; public WildcardAttributeEvaluator(String attributeValue) { if (attributeValue == null) { throw new IllegalArgumentException("null not allowed"); } this.escapedValue = attributeValue.replaceAll("\\*", "*"); hasWildcards = attributeValue.startsWith("*") || (attributeValue.endsWith("*") && !attributeValue.endsWith("\\*")) || attributeValue.equals("*"); } public boolean hasWildcards() { return hasWildcards; } public void processValues(Collection<String> values, MatchCallback matchCallback) { if (!hasWildcards()) { throw new IllegalStateException("Can't call processValues with non wildcard attribute"); } String[] valuesArray = values.toArray(new String[values.size()]); for (String value : valuesArray) { if (matches(value)) { matchCallback.processMatch(value); } } } public boolean matches(String value) { if (value == null) { return false; } if (escapedValue.equals("*")) { return true; } else if (escapedValue.startsWith("*")) { return value.endsWith(escapedValue.substring(1, escapedValue.length())); } else if (escapedValue.endsWith("*")) { return value.startsWith(escapedValue.substring(0, escapedValue.length() - 1)); } return false; } public interface MatchCallback { public void processMatch(String matchedValue); } }