/** * Writes the contents of any pending Clobs to the database, and replaces them in the objects * with a real ClobAccess object. * * @param c a connection * @param o the object to transform * @throws ObjectStoreException if something goes wrong * @throws SQLException if something goes wrong * @throws IllegalAccessException if something goes wrong */ protected void writePendingClobs(Connection c, Object o) throws ObjectStoreException, SQLException, IllegalAccessException { for (Map.Entry<String, TypeUtil.FieldInfo> fieldEntry : TypeUtil.getFieldInfos(o.getClass()).entrySet()) { TypeUtil.FieldInfo fieldInfo = fieldEntry.getValue(); if (ClobAccess.class.isAssignableFrom(fieldInfo.getType())) { ClobAccess ca = (ClobAccess) TypeUtil.getFieldValue(o, fieldInfo.getName()); if (ca instanceof PendingClob) { // We can't call createClob here - we already have a connection, and // we must use that one. Clob clob = new Clob(getSerialWithConnection(c)); replaceClobWithConnection(c, clob, ((PendingClob) ca) .toString()); DynamicUtil.setFieldValue(o, fieldInfo.getName(), new ClobAccess(this, clob)); } } } }
/** * Writes the contents of any pending Clobs to the database, and replaces them in the objects * with a real ClobAccess object. * * @param c a connection * @param o the object to transform * @throws ObjectStoreException if something goes wrong * @throws SQLException if something goes wrong * @throws IllegalAccessException if something goes wrong */ protected void writePendingClobs(Connection c, Object o) throws ObjectStoreException, SQLException, IllegalAccessException { for (Map.Entry<String, TypeUtil.FieldInfo> fieldEntry : TypeUtil.getFieldInfos(o.getClass()).entrySet()) { TypeUtil.FieldInfo fieldInfo = fieldEntry.getValue(); if (ClobAccess.class.isAssignableFrom(fieldInfo.getType())) { ClobAccess ca = (ClobAccess) TypeUtil.getFieldValue(o, fieldInfo.getName()); if (ca instanceof PendingClob) { // We can't call createClob here - we already have a connection, and // we must use that one. Clob clob = new Clob(getSerialWithConnection(c)); replaceClobWithConnection(c, clob, ((PendingClob) ca) .toString()); DynamicUtil.setFieldValue(o, fieldInfo.getName(), new ClobAccess(this, clob)); } } } }
public void testGetFieldInfos() throws Exception { Class c = Address.class; Map got = TypeUtil.getFieldInfos(c); assertEquals(new HashSet(Arrays.asList(new String[] {"id", "address"})), got.keySet()); TypeUtil.FieldInfo idInfo = (TypeUtil.FieldInfo) got.get("id"); assertEquals("id", idInfo.getName()); assertEquals(c.getMethod("getId", new Class[] {}), idInfo.getGetter()); assertEquals(c.getMethod("setId", new Class[] {Integer.class}), idInfo.getSetter()); TypeUtil.FieldInfo addressInfo = (TypeUtil.FieldInfo) got.get("address"); assertEquals("address", addressInfo.getName()); assertEquals(c.getMethod("getAddress", new Class[] {}), addressInfo.getGetter()); assertEquals(c.getMethod("setAddress", new Class[] {String.class}), addressInfo.getSetter()); }
if (InterMineObject.class.isAssignableFrom(fieldInfo.getType())) { InterMineObject obj = (InterMineObject) TypeUtil.getFieldProxy(o, fieldInfo.getName()); if ((obj != null) && (obj.getId() == null)) { obj.setId(getSerialWithConnection(c)); = (Collection<Object>) o.getFieldValue(fieldInfo.getName());
if (InterMineObject.class.isAssignableFrom(fieldInfo.getType())) { InterMineObject obj = (InterMineObject) TypeUtil.getFieldProxy(o, fieldInfo.getName()); if ((obj != null) && (obj.getId() == null)) { obj.setId(getSerialWithConnection(c)); = (Collection<Object>) o.getFieldValue(fieldInfo.getName());
public void testGetFieldInfosDynamic() throws Exception { Class<?> c = DynamicUtil.createObject(Collections.singleton(Company.class)).getClass(); Map got = TypeUtil.getFieldInfos(c); assertEquals(new HashSet(Arrays.asList(new String[] {"id", "name", "vatNumber", "bank", "address", "oldContracts", "contractors", "CEO", "departments", "secretarys"})), got.keySet()); TypeUtil.FieldInfo idInfo = (TypeUtil.FieldInfo) got.get("id"); assertEquals("id", idInfo.getName()); assertEquals(c.getMethod("getId", new Class[] {}), idInfo.getGetter()); assertEquals(c.getMethod("setId", new Class[] {Integer.class}), idInfo.getSetter()); TypeUtil.FieldInfo addressInfo = (TypeUtil.FieldInfo) got.get("address"); assertEquals("address", addressInfo.getName()); assertEquals(c.getMethod("getAddress", new Class[] {}), addressInfo.getGetter()); assertEquals(c.getMethod("setAddress", new Class[] {Address.class}), addressInfo.getSetter()); TypeUtil.FieldInfo nameInfo = (TypeUtil.FieldInfo) got.get("name"); assertEquals("name", nameInfo.getName()); assertEquals(c.getMethod("getName", new Class[] {}), nameInfo.getGetter()); assertEquals(c.getMethod("setName", new Class[] {String.class}), nameInfo.getSetter()); TypeUtil.FieldInfo vatInfo = (TypeUtil.FieldInfo) got.get("vatNumber"); assertEquals("vatNumber", vatInfo.getName()); assertEquals(c.getMethod("getVatNumber", new Class[] {}), vatInfo.getGetter()); assertEquals(c.getMethod("setVatNumber", new Class[] {Integer.TYPE}), vatInfo.getSetter()); }
public void testGetFieldInfosSuper() throws Exception { Class c = Company.class; Map got = TypeUtil.getFieldInfos(c); assertEquals(new HashSet(Arrays.asList(new String[] {"id", "name", "vatNumber", "address", "bank", "oldContracts", "contractors", "CEO", "departments", "secretarys"})), got.keySet()); TypeUtil.FieldInfo idInfo = (TypeUtil.FieldInfo) got.get("id"); assertEquals("id", idInfo.getName()); assertEquals(c.getMethod("getId", new Class[] {}), idInfo.getGetter()); assertEquals(c.getMethod("setId", new Class[] {Integer.class}), idInfo.getSetter()); TypeUtil.FieldInfo addressInfo = (TypeUtil.FieldInfo) got.get("address"); assertEquals("address", addressInfo.getName()); assertEquals(c.getMethod("getAddress", new Class[] {}), addressInfo.getGetter()); assertEquals(c.getMethod("setAddress", new Class[] {Address.class}), addressInfo.getSetter()); TypeUtil.FieldInfo nameInfo = (TypeUtil.FieldInfo) got.get("name"); assertEquals("name", nameInfo.getName()); assertEquals(c.getMethod("getName", new Class[] {}), nameInfo.getGetter()); assertEquals(c.getMethod("setName", new Class[] {String.class}), nameInfo.getSetter()); TypeUtil.FieldInfo vatInfo = (TypeUtil.FieldInfo) got.get("vatNumber"); assertEquals("vatNumber", vatInfo.getName()); assertEquals(c.getMethod("getVatNumber", new Class[] {}), vatInfo.getGetter()); assertEquals(c.getMethod("setVatNumber", new Class[] {Integer.TYPE}), vatInfo.getSetter()); }