package org.esa.snap.ui.color;
import com.bc.ceres.core.Assert;
import org.esa.snap.core.util.io.FileUtils;
import java.awt.Color;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Color codes according to <a href="http://www.w3schools.com/html/html_colornames.asp">W3C HTML Color Names</a>.
*
* @author Norman Fomferra
* @since SNAP 2.0
*/
public class ColorCodes {
private List<String> nameList;
private Map<Color, String> nameMap;
private Map<String, Color> colorMap;
static final ColorCodes instance = new ColorCodes();
private ColorCodes() {
nameList = new ArrayList<>(512);
nameMap = new HashMap<>(512);
colorMap = new HashMap<>(512);
try {
Path path = FileUtils.getPathFromURI(ColorComboBox.class.getResource("color-codes.txt").toURI());
List<String> lines = Files.readAllLines(path);
for (String line : lines) {
int i = line.indexOf('\t');
Color color = Color.decode(line.substring(0, i).trim());
String name = line.substring(i).trim();
//System.out.println("color = " + color + ", name = " + name);
Assert.state(!nameMap.containsKey(color), String.format("color '%s' already added", color));
Assert.state(!colorMap.containsKey(name), String.format("color '%s' already added", name));
nameList.add(name);
nameMap.put(color, name);
colorMap.put(name, color);
}
} catch (URISyntaxException | IOException e) {
throw new RuntimeException(e);
}
}
public static List<String> getNames() {
return Collections.unmodifiableList(instance.nameList);
}
public static int indexOf(String name) {
return instance.nameList.indexOf(name);
}
public static int indexOf(Color color) {
String name = getName(color);
if (name != null) {
return indexOf(name);
}
return -1;
}
public static Color getColor(String name) {
return instance.colorMap.get(name);
}
public static String getName(Color color) {
return instance.nameMap.get(color);
}
public static Color getColor(int index) {
return getColor(getName(index));
}
public static String getName(int index) {
return instance.nameList.get(index);
}
}