Example usage for org.apache.commons.beanutils DynaBean get

List of usage examples for org.apache.commons.beanutils DynaBean get

Introduction

In this page you can find the example usage for org.apache.commons.beanutils DynaBean get.

Prototype

public Object get(String name);

Source Link

Document

Return the value of a simple property with the specified name.

Usage

From source file:org.apache.ddlutils.io.DatabaseDataDiffIO.java

private Identity buildIdentityFromPKs(Table table, DynaBean bean) {
    Identity identity = new Identity(table);
    Column[] pkColumns = table.getPrimaryKeyColumns();

    for (int idx = 0; idx < pkColumns.length; idx++) {
        identity.setColumnValue(pkColumns[idx].getName(), bean.get(pkColumns[idx].getName()));
    }/*w  w w  .ja v a  2  s  .  c  o  m*/
    return identity;
}

From source file:org.apache.ddlutils.io.DataToDatabaseSink.java

/**
 * Directly inserts the given bean into the database.
 * //from   w  ww.  jav  a  2  s  . c  o  m
 * @param table The table of the bean
 * @param bean  The bean
 */
private void insertSingleBeanIntoDatabase(Table table, DynaBean bean) throws DataSinkException {
    try {
        boolean needTwoStepInsert = false;
        ForeignKey selfRefFk = null;

        if (!_platform.isIdentityOverrideOn() && _tablesWithSelfIdentityReference.contains(table)) {
            selfRefFk = table.getSelfReferencingForeignKey();

            // in case of a self-reference (fk points to the very row that we're inserting)
            // and (at least) one of the pk columns is an identity column, we first need
            // to insert the row with the fk columns set to null
            Identity pkIdentity = buildIdentityFromPKs(table, bean);
            Identity fkIdentity = buildIdentityFromFK(table, selfRefFk, bean);

            if (pkIdentity.equals(fkIdentity)) {
                if (_tablesWithRequiredSelfReference.contains(table)) {
                    throw new DataSinkException(
                            "Can only insert rows with fk pointing to themselves when all fk columns can be NULL (row pk is "
                                    + pkIdentity + ")");
                } else {
                    needTwoStepInsert = true;
                }
            }
        }

        if (needTwoStepInsert) {
            // we first insert the bean without the fk, then in the second step we update the bean
            // with the row with the identity pk values
            ArrayList fkValues = new ArrayList();

            for (int idx = 0; idx < selfRefFk.getReferenceCount(); idx++) {
                String columnName = selfRefFk.getReference(idx).getLocalColumnName();

                fkValues.add(bean.get(columnName));
                bean.set(columnName, null);
            }
            _platform.insert(_connection, _model, bean);
            for (int idx = 0; idx < selfRefFk.getReferenceCount(); idx++) {
                bean.set(selfRefFk.getReference(idx).getLocalColumnName(), fkValues.get(idx));
            }
            _platform.update(_connection, _model, bean);
        } else {
            _platform.insert(_connection, _model, bean);
        }
        if (!_connection.getAutoCommit()) {
            _connection.commit();
        }
    } catch (Exception ex) {
        if (_haltOnErrors) {
            _platform.returnConnection(_connection);
            throw new DataSinkException(ex);
        } else {
            _log.warn("Exception while inserting a row into the database", ex);
        }
    }
}

From source file:org.apache.ddlutils.io.DataToDatabaseSink.java

/**
 * Builds an identity object from the primary keys of the specified table using the
 * column values of the supplied bean./*w w w  . ja  v a  2  s  .  c o  m*/
 * 
 * @param table The table
 * @param bean  The bean
 * @return The identity
 */
private Identity buildIdentityFromPKs(Table table, DynaBean bean) {
    Identity identity = new Identity(table);
    Column[] pkColumns = table.getPrimaryKeyColumns();

    for (int idx = 0; idx < pkColumns.length; idx++) {
        identity.setColumnValue(pkColumns[idx].getName(), bean.get(pkColumns[idx].getName()));
    }
    return identity;
}

From source file:org.apache.ddlutils.io.DataToDatabaseSink.java

/**
 * Builds an identity object for the specified foreign key using the foreignkey column values
 * of the supplied bean./*from  w  w  w . j  a  v  a2s. c om*/
 * 
 * @param owningTable The table owning the foreign key
 * @param fk          The foreign key
 * @param bean        The bean
 * @return The identity
 */
private Identity buildIdentityFromFK(Table owningTable, ForeignKey fk, DynaBean bean) {
    Identity identity = new Identity(fk.getForeignTable(), getFKName(owningTable, fk));

    for (int idx = 0; idx < fk.getReferenceCount(); idx++) {
        Reference reference = (Reference) fk.getReference(idx);
        Object value = bean.get(reference.getLocalColumnName());

        if (value == null) {
            return null;
        }
        identity.setColumnValue(reference.getForeignColumnName(), value);
    }
    return identity;
}

From source file:org.apache.ddlutils.io.RoundtripTestBase.java

/**
 * Compares the specified attribute value of the given bean with the expected object.
 * /*  w  ww .jav  a2s  .c om*/
 * @param expected The expected object
 * @param bean     The bean
 * @param attrName The attribute name
 */
protected void assertEquals(Object expected, Object bean, String attrName) {
    DynaBean dynaBean = (DynaBean) bean;
    Object value = dynaBean.get(attrName);

    if ((value instanceof byte[]) && !(expected instanceof byte[]) && (dynaBean instanceof SqlDynaBean)) {
        SqlDynaClass dynaClass = (SqlDynaClass) ((SqlDynaBean) dynaBean).getDynaClass();
        Column column = ((SqlDynaProperty) dynaClass.getDynaProperty(attrName)).getColumn();

        if (TypeMap.isBinaryType(column.getTypeCode())) {
            value = new BinaryObjectsHelper().deserialize((byte[]) value);
        }
    }
    if (expected == null) {
        assertNull(value);
    } else {
        assertEquals(expected, value);
    }
}

From source file:org.apache.ddlutils.io.TestAlteration.java

/**
 * Tests the alteration of a column datatype.
 *///from w ww. j a  v a 2  s . co m
public void testChangeDatatype2() {
    final String model1Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"
            + "<database name='roundtriptest'>\n" + "  <table name='roundtrip'>\n"
            + "    <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"
            + "    <column name='avalue' type='SMALLINT' required='true'/>\n" + "  </table>\n" + "</database>";
    final String model2Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"
            + "<database name='roundtriptest'>\n" + "  <table name='roundtrip'>\n"
            + "    <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"
            + "    <column name='avalue' type='VARCHAR' size='20' required='true'/>\n" + "  </table>\n"
            + "</database>";

    createDatabase(model1Xml);

    insertRow("roundtrip", new Object[] { new Integer(1), new Short((short) 2) });

    alterDatabase(model2Xml);

    assertEquals(getAdjustedModel(), readModelFromDatabase("roundtriptest"));

    List beans = getRows("roundtrip");
    DynaBean bean = (DynaBean) beans.get(0);

    // Some databases (e.g. DB2) pad the string for some reason, so we manually trim it
    if (bean.get("avalue") instanceof String) {
        bean.set("avalue", ((String) bean.get("avalue")).trim());
    }
    assertEquals((Object) "2", beans.get(0), "avalue");
}

From source file:org.apache.ddlutils.io.TestAlteration.java

/**
 * Tests the alteration of the datatypes of PK and FK columns.
 *///from w ww . ja v  a  2  s  . co m
public void testChangePKAndFKDatatypes() {
    final String model1Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"
            + "<database name='roundtriptest'>\n" + "  <table name='roundtrip1'>\n"
            + "    <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n" + "  </table>\n"
            + "  <table name='roundtrip2'>\n"
            + "    <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"
            + "    <column name='fk' type='INTEGER' required='false'/>\n"
            + "    <foreign-key foreignTable='roundtrip1'>\n" + "      <reference local='fk' foreign='pk'/>\n"
            + "    </foreign-key>\n" + "  </table>\n" + "</database>";
    final String model2Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"
            + "<database name='roundtriptest'>\n" + "  <table name='roundtrip1'>\n"
            + "    <column name='pk' type='VARCHAR' size='128' primaryKey='true' required='true'/>\n"
            + "  </table>\n" + "  <table name='roundtrip2'>\n"
            + "    <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"
            + "    <column name='fk' type='VARCHAR' size='128' required='false'/>\n"
            + "    <foreign-key foreignTable='roundtrip1'>\n" + "      <reference local='fk' foreign='pk'/>\n"
            + "    </foreign-key>\n" + "  </table>\n" + "</database>";

    createDatabase(model1Xml);

    insertRow("roundtrip1", new Object[] { new Integer(1) });
    insertRow("roundtrip2", new Object[] { new Integer(1), new Integer(1) });

    alterDatabase(model2Xml);

    assertEquals(getAdjustedModel(), readModelFromDatabase("roundtriptest"));

    List beans = getRows("roundtrip2");
    DynaBean bean = (DynaBean) beans.get(0);

    // Some databases (e.g. DB2) pad the string for some reason, so we manually trim it
    if (bean.get("fk") instanceof String) {
        bean.set("fk", ((String) bean.get("fk")).trim());
    }
    assertEquals((Object) "1", bean, "fk");
}

From source file:org.apache.ddlutils.io.TestAlteration.java

/**
 * Tests the alteration of the datatypes of columns of a PK and FK that
 * will be dropped.//  w w  w .j  ava2  s.co  m
 */
public void testChangeDroppedPKAndFKDatatypes() {
    final String model1Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"
            + "<database name='roundtriptest'>\n" + "  <table name='roundtrip1'>\n"
            + "    <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n" + "  </table>\n"
            + "  <table name='roundtrip2'>\n"
            + "    <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"
            + "    <column name='fk' type='INTEGER' required='false'/>\n"
            + "    <foreign-key foreignTable='roundtrip1'>\n" + "      <reference local='fk' foreign='pk'/>\n"
            + "    </foreign-key>\n" + "  </table>\n" + "</database>";
    final String model2Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"
            + "<database name='roundtriptest'>\n" + "  <table name='roundtrip1'>\n"
            + "    <column name='pk' type='VARCHAR' primaryKey='false' required='true'/>\n" + "  </table>\n"
            + "  <table name='roundtrip2'>\n"
            + "    <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"
            + "    <column name='fk' type='VARCHAR' required='false'/>\n" + "  </table>\n" + "</database>";

    createDatabase(model1Xml);

    insertRow("roundtrip1", new Object[] { new Integer(1) });
    insertRow("roundtrip2", new Object[] { new Integer(1), new Integer(1) });

    alterDatabase(model2Xml);

    assertEquals(getAdjustedModel(), readModelFromDatabase("roundtriptest"));

    List beans = getRows("roundtrip2");
    DynaBean bean = (DynaBean) beans.get(0);

    // Some databases (e.g. DB2) pad the string for some reason, so we manually trim it
    if (bean.get("fk") instanceof String) {
        bean.set("fk", ((String) bean.get("fk")).trim());
    }
    assertEquals((Object) "1", bean, "fk");
}

From source file:org.apache.ddlutils.io.TestChangeColumn.java

/**
 * Tests the alteration of a column datatype change from smallint to varchar.
 *///w ww . j  ava 2s  . c o  m
public void testColumnTypeSmallintToVarchar() {
    final String model1Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n" + "<database xmlns='"
            + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n" + "  <table name='roundtrip'>\n"
            + "    <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"
            + "    <column name='avalue' type='SMALLINT'/>\n" + "  </table>\n" + "</database>";
    final String model2Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n" + "<database xmlns='"
            + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n" + "  <table name='roundtrip'>\n"
            + "    <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n"
            + "    <column name='avalue' type='VARCHAR' size='20'/>\n" + "  </table>\n" + "</database>";

    createDatabase(model1Xml);

    insertRow("roundtrip", new Object[] { new Integer(1), new Short((short) 2) });

    alterDatabase(model2Xml);

    assertEquals(getAdjustedModel(), readModelFromDatabase("roundtriptest"));

    List beans = getRows("roundtrip");
    DynaBean bean = (DynaBean) beans.get(0);

    // Some databases (e.g. DB2) pad the string for some reason, so we manually trim it
    if (bean.get("avalue") instanceof String) {
        bean.set("avalue", ((String) bean.get("avalue")).trim());
    }
    assertEquals(new Integer(1), beans.get(0), "pk");
    assertEquals((Object) "2", beans.get(0), "avalue");
}

From source file:org.apache.ddlutils.io.TestChangeColumn.java

/**
 * Tests the alteration of a pk column datatype change from integer to varchar.
 *//*w ww  .j av a2 s. c o m*/
public void testPKColumnTypeIntegerToVarchar() {
    final String model1Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n" + "<database xmlns='"
            + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n" + "  <table name='roundtrip'>\n"
            + "    <column name='pk' type='INTEGER' primaryKey='true' required='true'/>\n" + "  </table>\n"
            + "</database>";
    final String model2Xml = "<?xml version='1.0' encoding='ISO-8859-1'?>\n" + "<database xmlns='"
            + DatabaseIO.DDLUTILS_NAMESPACE + "' name='roundtriptest'>\n" + "  <table name='roundtrip'>\n"
            + "    <column name='pk' type='VARCHAR' size='20' primaryKey='true' required='true'/>\n"
            + "  </table>\n" + "</database>";

    createDatabase(model1Xml);

    insertRow("roundtrip", new Object[] { new Integer(1) });

    alterDatabase(model2Xml);

    assertEquals(getAdjustedModel(), readModelFromDatabase("roundtriptest"));

    List beans = getRows("roundtrip");
    DynaBean bean = (DynaBean) beans.get(0);

    // Some databases (e.g. DB2) pad the string for some reason, so we manually trim it
    if (bean.get("pk") instanceof String) {
        bean.set("pk", ((String) bean.get("pk")).trim());
    }
    assertEquals((Object) "1", beans.get(0), "pk");
}