|
|
|
package ru.simsonic.rscPermissions.API;
|
|
|
|
|
|
|
|
import java.util.Set;
|
|
|
|
import java.util.regex.Matcher;
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes;
|
|
|
|
|
|
|
|
public class Destination
|
|
|
|
{
|
|
|
|
private final String region;
|
|
|
|
private final String world;
|
|
|
|
private final String serverId;
|
|
|
|
private Destination()
|
|
|
|
{
|
|
|
|
this.region = null;
|
|
|
|
this.world = null;
|
|
|
|
this.serverId = null;
|
|
|
|
}
|
|
|
|
private Destination(String region, String world, String serverId)
|
|
|
|
{
|
|
|
|
this.region = region;
|
|
|
|
this.world = world;
|
|
|
|
this.serverId = serverId;
|
|
|
|
}
|
|
|
|
public boolean isServerIdApplicable(String serverId)
|
|
|
|
{
|
|
|
|
return wildcardTest(serverId, this.serverId);
|
|
|
|
}
|
|
|
|
public boolean isWorldApplicable(String world, String instantiator)
|
|
|
|
{
|
|
|
|
if(this.world == null || this.world.isEmpty() || "*".equals(this.world))
|
|
|
|
return true;
|
|
|
|
final String instantiated = (instantiator != null && !instantiator.isEmpty())
|
|
|
|
? this.world.replace(Settings.INSTANTIATOR, instantiator)
|
|
|
|
: this.world;
|
|
|
|
return wildcardTest(world, instantiated);
|
|
|
|
}
|
|
|
|
public boolean isRegionApplicable(Set<String> regions, String instantiator)
|
|
|
|
{
|
|
|
|
if(this.region == null || "".equals(this.region) || "*".equals(this.region))
|
|
|
|
return true;
|
|
|
|
final String instantiated = (instantiator != null && !"".equals(instantiator))
|
|
|
|
? this.region.replace(Settings.INSTANTIATOR, instantiator)
|
|
|
|
: this.region;
|
|
|
|
for(String regionId : regions)
|
|
|
|
if(wildcardTest(regionId, instantiated))
|
|
|
|
return true;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
public boolean isRegionApplicable(String[] regions, String instantiator)
|
|
|
|
{
|
|
|
|
if(this.region == null || "".equals(this.region) || "*".equals(this.region))
|
|
|
|
return true;
|
|
|
|
final String instantiated = (instantiator != null && !"".equals(instantiator))
|
|
|
|
? this.region.replace(Settings.INSTANTIATOR, instantiator)
|
|
|
|
: this.region;
|
|
|
|
for(String regionId : regions)
|
|
|
|
if(wildcardTest(regionId, instantiated))
|
|
|
|
return true;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
private static boolean wildcardTest(String testing, String pattern)
|
|
|
|
{
|
|
|
|
if(pattern == null || "".equals(pattern))
|
|
|
|
return true;
|
|
|
|
if(testing == null || "".equals(testing))
|
|
|
|
return false;
|
|
|
|
return GenericChatCodes.wildcardMatch(
|
|
|
|
"<wildcard>" + testing.toLowerCase() + "</wildcard>",
|
|
|
|
"<wildcard>" + pattern.toLowerCase() + "</wildcard>");
|
|
|
|
}
|
|
|
|
private static final Pattern DESTINATION_PATTERN = Pattern.compile(
|
|
|
|
"(?:([\\w\\-\\_\\*\\?]*):)?([\\w\\-\\_\\*\\?]*)?(?:@([\\w\\-\\_\\*\\?]*))?");
|
|
|
|
public static Destination parseDestination(String destination)
|
|
|
|
{
|
|
|
|
final Matcher match = DESTINATION_PATTERN.matcher(destination);
|
|
|
|
if(match.find())
|
|
|
|
{
|
|
|
|
final String groupR = match.group(1);
|
|
|
|
final String groupW = match.group(2);
|
|
|
|
final String groupS = match.group(3);
|
|
|
|
final String region = (groupR == null || "".equals(groupR) ? "*" : groupR);
|
|
|
|
final String world = (groupW == null || "".equals(groupW) ? "*" : groupW);
|
|
|
|
final String serverId = (groupS == null || "".equals(groupS) ? "*" : groupS);
|
|
|
|
return new Destination(region, world, serverId);
|
|
|
|
}
|
|
|
|
return new Destination();
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
public String toString()
|
|
|
|
{
|
|
|
|
final StringBuilder sb = new StringBuilder();
|
|
|
|
if(region != null && !"".equals(region) && !"*".equals(region))
|
|
|
|
sb.append(region).append(":");
|
|
|
|
if(world != null && !"".equals(world) && !"*".equals(world))
|
|
|
|
sb.append(world);
|
|
|
|
if(serverId != null && !"".equals(serverId) && !"*".equals(serverId))
|
|
|
|
sb.append("@").append(serverId);
|
|
|
|
return sb.toString();
|
|
|
|
// return String.format("%s:%s@%s", region, world, serverId);
|
|
|
|
}
|
|
|
|
}
|