www.pudn.com > JAVIS-0.3.zip > Colour.java
package util;
import java.util.Hashtable;
import java.io.*;
import java.net.URL;
import util.Input;
import util.Debug;
import util.Preferences;
public class Colour {
static Hashtable m_id_to_rgb=new Hashtable();
static Hashtable m_name_to_rgb=null;
java.awt.Color m_color;
int m_rgb;
public Colour() {
m_rgb=0;
if (m_name_to_rgb==null) initColours();
m_color=new java.awt.Color(m_rgb);
}
public Colour(String name) {
m_rgb=0;
if (m_name_to_rgb==null) initColours();
setColour(name);
}
public void setColour(String name) {
Integer RGB=(Integer)m_name_to_rgb.get(name);
if (RGB!=null)
m_rgb=RGB.intValue();
m_color=new java.awt.Color(m_rgb);
}
public void setColour(int id) {
Integer RGB=(Integer)m_id_to_rgb.get(new Integer(id));
if (RGB!=null)
m_rgb=RGB.intValue();
m_color=new java.awt.Color(m_rgb);
}
public void setColour (Colour cl) {
m_rgb=cl.m_rgb;
m_color=new java.awt.Color(m_rgb);
}
public int getColour() {
return m_rgb;
}
public java.awt.Color getAWTColor() {
return m_color;
}
public String getColourName() {
return "foobar";
}
public static void parseNewColour(Reader reader) {
int ch=0;
int complete=0,id=0;
String name="foobar";
if (m_name_to_rgb==null) initColours();
try {
while (true) {
ch=Input.skipSpaces(reader);
if (ch==-1) return;
if (ch!='-') return;
ch=reader.read();
switch ((char)ch) {
case 'i': id=Input.getInteger(reader);
complete++;
break;
case 'n': name=Input.getString(reader);
name=name.toLowerCase();
complete++;
break;
}
if (complete==2) break;
}
}
catch(IOException e) {
Debug.out.println("Error!");
}
if (complete==2) {
Integer RGB=(Integer)m_name_to_rgb.get(name);
int rgb;
if (RGB==null) {
Debug.out.println("Warning: Colour not found in database: "+
name+"!");
rgb=0;
}
else
rgb=RGB.intValue();
m_id_to_rgb.put(new Integer(id),new Integer(rgb));
}
}
private static void initColours() {
m_name_to_rgb=new Hashtable();
try {
BufferedReader reader=null;
if (Preferences.rgb_database.startsWith("http://")) {
URL url=new URL(Preferences.rgb_database);
reader=new BufferedReader(new InputStreamReader(url.openStream()));
}
else
reader=new BufferedReader(new InputStreamReader(
new FileInputStream(Preferences.rgb_database)));
String newline="";
while (newline!=null) {
newline=reader.readLine();
if (newline==null) break;
// Strings containing the values for R,G,B, respectively. No harm
// intended with gstring :)
String rstring=newline.substring(0,3).trim();
String gstring=newline.substring(4,4+3).trim();
String bstring=newline.substring(8,8+3).trim();
try {
int r=Integer.parseInt(rstring);
int g=Integer.parseInt(gstring);
int b=Integer.parseInt(bstring);
String name=newline.substring(11,newline.length()).trim();
name=name.toLowerCase();
m_name_to_rgb.put(name,new Integer((r<<16)|(g<<8)|b));
}
catch (NumberFormatException e) {
Debug.out.println("Could not translate colour: "+rstring+" "+
gstring+" "+bstring);
}
}
}
catch (IOException e) {
Debug.out.println("Warning: An I/O error occured while reading "+
"resources/rgb.txt. Back to black.");
}
}
}