package reflection09;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * Veraenderung von Datenfeldern mittels Reflect.
 * 
 * @author Ralf Kunze (rkunze@uos.de), Institut fuer Informatik, Universitaet
 *         Osnabrueck
 * @date 02.06.2007
 */
public class VariablenTest {

    public static void main(String[] args) {

        Angestellter a = new Angestellter("Heinz Wacker", 42, "AG Multimedia", 4223);
        Class c = a.getClass();
        
        System.out.println("Vor der Veraenderung:  " + a);
        
        for (Field f : c.getFields()) {
            Object value = null;
            try {
                if (f.getType() == String.class) {
                    value = f.get(a);
                    f.set(a, "Neu gesetzt, alter Wert=" + value);
                }
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        System.out.println("Nach der Veraenderung: " + a);
        
//        a = new Angestellter("Rudi Ratlos", 23, "AG WattWeissIch", 4711);
//        c = Angestellter.class;
//        
//        System.out.println("Vor der Veraenderung:  " + a);
//        
//        for (Field f : c.getDeclaredFields()) {
//            Object value = null;
//            try {
//                if (f.getModifiers() != Modifier.PRIVATE) {
//                    if(f.getType()==String.class) {
//                    value = f.get(a);
//                    f.set(a, "Neu gesetzt, alter Wert=" + value);
//                    }
//                } else {
//                    System.out.println(f.getName() + " ist nicht public");
//                }
//            } catch (IllegalArgumentException e) {
//                // TODO Auto-generated catch block
//                e.printStackTrace();
//            } catch (IllegalAccessException e) {
//                // TODO Auto-generated catch block
//                e.printStackTrace();
//            }
//        }
//        System.out.println("Nach der Veraenderung: " + a);

    }

}
