WorldGuard/worldguard-core/src/main/java/com/sk89q/worldguard/util/Normal.java
2018-08-13 22:20:01 +10:00

120 lines
2.9 KiB
Java

/*
* WorldGuard, a suite of tools for Minecraft
* Copyright (C) sk89q <http://www.sk89q.com>
* Copyright (C) WorldGuard team and contributors
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.worldguard.util;
import javax.annotation.Nullable;
import java.text.Normalizer;
import java.text.Normalizer.Form;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Normal names are strings that are considered equal after they have been
* normalized using Unicode's NFC form and made lowercase.
*/
public final class Normal {
private final String name;
@Nullable
private final String normal;
/**
* Create a new instance.
*
* @param name a new instance
*/
private Normal(String name) {
checkNotNull(name);
this.name = name;
String normal = normalize(name);
if (!normal.equals(name)) { // Simple comparison
this.normal = normal;
} else {
this.normal = null;
}
}
/**
* Get the original name before normalization.
*
* @return the original name before normalization
*/
public String getName() {
return name;
}
/**
* Get the normalized name.
*
* @return the normal name
*/
public String getNormal() {
return normal != null ? normal : name;
}
/**
* Normalize a string according to the rules of this class.
*
* @param name an string
* @return the normalized string
*/
public static String normalize(String name) {
return Normalizer.normalize(name.toLowerCase(), Form.NFC);
}
/**
* Create a new instance.
*
* @param name the name
* @return an instance
*/
public static Normal normal(String name) {
return new Normal(name);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Normal that = (Normal) o;
return getNormal().equals(that.getNormal());
}
@Override
public int hashCode() {
return getNormal().hashCode();
}
/**
* Return the un-normalized name.
*
* @return the un-normalized name
*/
@Override
public String toString() {
return name;
}
}