Dienstag, 24. Januar 2012

Reflection Kleinzeugs

Zwei kleine Reflection-Gedankenstützen, nützlich für Quick-Hacks bei Testdatengenerierung:

Generiert aus den Feldern einer Klasse Headers für ein CSV-Testdatenfile:


    public static void generiereCVSHeaders() {

        String header = "br0047;";
        Field[] fieldsInput = Testvektor.class.getDeclaredFields();
        for (Field field : fieldsInput) {
            header += field.getName() + ";";
        }
        System.out.println(header);
    }

Holt als allen Feldern eines Testobjektes "destObject" die entprechenden Werte (d.h. die mit dem gleichen Namen wie das Feld) aus einem JDBC-ResulSet und setzt diesen Wert dann auch im entsprechenden Feld: 

/**
* Holt für alle Attribute des destObjects die gleichnamigen Werte aus den Spalten des resultSets und füllt sie im
* destObject ab.
* @param resultSet
* Quelle der Daten
* @param destObject
* Ziel der Daten
* @throws SQLException
* wird u.a. geworfen, wenn das destObject Attribute hat, welche im resultSet nicht vorkommen.
* @throws IllegalAccessException
*/
private static void mapDBcolumsToFieldsOfObject(ResultSet resultSet, Object destObject) throws SQLException,
            IllegalAccessException {
        Field[] fields = destObject.getClass().getDeclaredFields();
        for (Field field : fields) {
            int column = resultSet.findColumn(field.getName());
            Class<?> type = field.getType();
            field.setAccessible(true);
            // kümmert sich um "null" Werte...
            if (resultSet.getString(column) != null && resultSet.getString(column).equals("null")) {
                field.set(destObject, null);
            } else if (type == Integer.class || type.getName() == "int") {
                field.set(destObject, resultSet.getInt(column));
            } else if (type == String.class) {
                field.set(destObject, resultSet.getString(column));
            } else if (type == Double.class) {
                field.set(destObject, resultSet.getDouble(column));
            } else if (type == Date.class) {
                field.set(destObject, resultSet.getDate(column));
            } else if (type == Short.class) {
                field.set(destObject, resultSet.getShort(column));
            } else if (type == Boolean.class || type.getName() == "boolean") {
                field.set(destObject, resultSet.getBoolean(column));
            } else {
                throw new IllegalArgumentException("noch nicht unterstütztes Mapping: " + type.getCanonicalName());
            }
        }
    }

Keine Kommentare:

Kommentar veröffentlichen