List of usage examples for org.apache.commons.beanutils DynaBean get
public Object get(String name);
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"); }