net.sf.robocode.roborumble.util.ExcludesUtil Maven / Gradle / Ivy
/*
* Copyright (c) 2001-2023 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* https://robocode.sourceforge.io/license/epl-v10.html
*/
package net.sf.robocode.roborumble.util;
import java.util.Properties;
/**
* Utility class for working with the EXCLUDE property for excluding robots from download and battles.
*
* @author Flemming N. Larsen (original)
*/
public class ExcludesUtil {
private static String[] excludes;
/**
* Read and prepared exclude filters for robots that should not be downloaded or participate in battles.
*
* @param properties the properties to store.
*/
public static void setExcludes(Properties properties) {
if (excludes != null) {
return;
}
// Read and prepare exclude filters
String exclude = properties.getProperty("EXCLUDE");
if (exclude != null) {
// Convert into regular expression
// Dots must be dots, not "any character" in the regular expression
exclude = exclude.replaceAll("\\.", "\\\\.");
// The wildcard character ? corresponds to the regular expression .?
exclude = exclude.replaceAll("\\?", ".?");
// The wildcard character * corresponds to the regular expression .*
exclude = exclude.replaceAll("\\*", ".*");
// Split the exclude line into independent exclude filters that are trimmed for white-spaces
excludes = exclude.split("[,;]+"); // white spaces are allowed in the filter due to robot version numbers
}
}
/**
* Checks if a participant is excluded.
*
* @param botNameVersion the name and version of the participant.
* @return true if the participant is excluded; false otherwise.
*/
public static boolean isExcluded(String botNameVersion) {
if (excludes == null) {
return false;
}
// Fix bug-418, excluded bots are removed from LiteRumble
botNameVersion = botNameVersion.replace('_', ' ');
// Check the name against all exclude filters
for (int i = excludes.length - 1; i >= 0; i--) {
try {
if (botNameVersion.matches(excludes[i])) {
return true;
}
} catch (java.util.regex.PatternSyntaxException e) {
// Clear the current exclude if the syntax is illegal (for next time this method is called)
excludes[i] = "";
}
}
// Not excluded
return false;
}
}