import edu.neu.ccs.*;
import edu.neu.ccs.gui.*;
import edu.neu.ccs.codec.*;
import edu.neu.ccs.console.*;
import edu.neu.ccs.filter.*;
import edu.neu.ccs.jpf.*;
import edu.neu.ccs.parser.*;
import edu.neu.ccs.pedagogy.*;
import edu.neu.ccs.quick.*;
import edu.neu.ccs.util.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.font.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import java.util.*;
import java.math.*;
import java.beans.*;
import java.lang.reflect.*;
import java.net.URL;
import java.util.regex.*;
import java.text.ParseException;

public class StaticFields
{
    /**
     * Returns the public static fields in the given class
     * of the given field type.
     * 
     * @param type the class to inspect
     * @param fieldtype the field type of the desired public static fields
     */
    public static Field[] getPublicStaticFields(Class type, Class fieldtype) {
        if (type == null)
            return null;
        
        Field[] fields = type.getDeclaredFields();
        
        int N = fields.length;
        
        Vector vector = new Vector();
        
        for (int i = 0; i < N; i++) {
            Field field = fields[i];
            
            int modifiers = field.getModifiers();
            
            if (! Modifier.isPublic(modifiers))
                continue;
            
            if (! Modifier.isStatic(modifiers))
                continue;
            
            if (fieldtype != null)
                if (! (field.getType() == fieldtype))
                    continue;
            
            vector.add(field);
        }
        
        return (Field[]) vector.toArray(new Field[0]);
    }
    
    
    public static StringInt[] getPublicStaticIntFieldData(Class type) {
        Field[] fields = getPublicStaticFields(type, int.class);
        
        int N = fields.length;
        
        StringInt[] data = new StringInt[N];
        
        for (int i = 0; i < N; i++) {
            String string = fields[i].getName();
            int number = 0;
            
            try {
                number = fields[i].getInt(null);
            }
            catch (IllegalAccessException ex) {
                string = "Error in getPublicStaticIntFieldData\n" +
                    "IllegalAccessException at index " + i + "\n";
            }
            
            data[i] = new StringInt(string, number);
        }
        
        return data;
    }
    
    
    public static int[] getPublicStaticIntFieldList(Class type) {
        Field[] fields = getPublicStaticFields(type, int.class);
        
        int N = fields.length;
        
        int[] data = new int[N];
        
        for (int i = 0; i < N; i++) {
            int number = 0;
            
            try {
                number = fields[i].getInt(null);
            }
            catch (IllegalAccessException ex) {}
            
            data[i] = number;
        }
        
        return data;
    }
    
    
}
