protected void map(ValueMapping vm,
String name,
ColumnIO io,
boolean adapt,
List cols,
List args) {
// have to resolve embedded value to collect its columns
vm.getEmbeddedMapping().resolve(vm.MODE_META | vm.MODE_MAPPING);
// gather columns and result arguments
FieldMapping[] fms = vm.getEmbeddedMapping().getFieldMappings();
Column[] curCols;
Object[] curArgs;
ColumnIO curIO;
for (int i = 0; i < fms.length; i++) {
if (fms[i].getManagement() != FieldMapping.MANAGE_PERSISTENT)
continue;
if (!(fms[i].getStrategy() instanceof Embeddable))
throw new MetaDataException(_loc.get("not-embeddable",
vm, fms[i]));
curCols = ((Embeddable) fms[i].getStrategy()).getColumns();
curIO = ((Embeddable) fms[i].getStrategy()).getColumnIO();
for (int j = 0; j < curCols.length; j++) {
io.setInsertable(cols.size(), curIO.isInsertable(j, false));
io.setNullInsertable(cols.size(),
curIO.isInsertable(j, true));
io.setUpdatable(cols.size(), curIO.isUpdatable(j, false));
io.setNullUpdatable(cols.size(), curIO.isUpdatable(j, true));
cols.add(curCols[j]);
}
curArgs = ((Embeddable) fms[i].getStrategy()).getResultArguments();
if (curCols.length == 1)
args.add(curArgs);
else if (curCols.length > 1)
for (int j = 0; j < curCols.length; j++)
args.add((curArgs == null) ? null
: ((Object[]) curArgs)[j]);
}
}
Maps embedded value and gathers columns and arguments into given lists. |