protected int toObjectValue1(OpenJPAStateManager em, ValueMapping vm,
Object val, JDBCStore store, JDBCFetchConfiguration fetch,
Column[] cols, int idx)
throws SQLException {
FieldMapping[] fms = vm.getEmbeddedMapping().getFieldMappings();
Embeddable embed;
Object cval;
Column[] ecols;
for (int i = 0; i < fms.length; i++) {
if (fms[i].getManagement() != FieldMapping.MANAGE_PERSISTENT)
continue;
ValueMapping vm1 = fms[i].getValueMapping();
OpenJPAStateManager em1 = null;
embed = (Embeddable) fms[i].getStrategy();
if (vm1.getEmbeddedMapping() != null) {
if (em instanceof StateManagerImpl) {
em1 = store.getContext().embed(null, null, em, vm1);
idx = toObjectValue1(em1, vm1, val, store, fetch, cols, idx);
} else if (em instanceof ObjectIdStateManager) {
em1 = new ObjectIdStateManager(null, null, vm1);
idx = toObjectValue1(em1, vm1, val, store, null,
getColumns(fms[i]), idx);
}
if (em1 != null) {
cval = em1.getManagedInstance();
} else {
cval = null;
}
} else {
ecols = embed.getColumns();
if (ecols.length == 0)
cval = null;
else if (idx == 0 && ecols.length == cols.length)
cval = val;
else if (ecols.length == 1)
cval = ((Object[]) val)[idx++];
else {
cval = new Object[ecols.length];
System.arraycopy(val, idx, cval, 0, ecols.length);
idx += ecols.length;
}
}
if (store != null && em instanceof StateManagerImpl)
embed.loadEmbedded(em, store, fetch, cval);
else {
if (!(em instanceof ObjectIdStateManager))
cval = embed.toEmbeddedObjectValue(cval);
if (fms[i].getHandler() != null)
cval = fms[i].getHandler().toObjectValue(fms[i], cval);
em.store(fms[i].getIndex(), cval);
}