if (external)
val = fmd.getExternalValue(val, _broker);
else if (val instanceof Proxy) {
// shortcut change trackers; also ensures we don't
// iterate lrs fields
ChangeTracker ct = ((Proxy) val).getChangeTracker();
if (ct != null && ct.isTracking()) {
preFlushPCs(fmd.getElement(), ct.getAdded(),
logical, call);
preFlushPCs(fmd.getElement(), ct.getChanged(),
logical, call);
flushed = true;
}
}
if (!flushed && val != null)
preFlushPCs(fmd.getElement(), (Collection) val, logical,
call);
}
break;
case JavaTypes.MAP:
boolean keyEmbed = fmd.getKey().isEmbeddedPC();
boolean valEmbed = fmd.getElement().isEmbeddedPC();
if (keyEmbed || valEmbed) {
objval = embed(fmd, (Map) val, keyEmbed, valEmbed);
copy = keyEmbed;
}
if (!keyEmbed && (keyType == JavaTypes.PC
|| keyType == JavaTypes.PC_UNTYPED)) {
boolean flushed = false;
if (external) {
val = fmd.getExternalValue(val, _broker);
external = false;
} else if (val instanceof Proxy) {
// shortcut change trackers; also ensures we don't
// iterate lrs fields
MapChangeTracker ct = (MapChangeTracker) ((Proxy) val).
getChangeTracker();
if (ct != null && ct.isTracking() && ct.getTrackKeys())
{
preFlushPCs(fmd.getKey(), ct.getAdded(), logical,
call);
preFlushPCs(fmd.getKey(), ct.getChanged(), logical,
call);
flushed = true;
}
}
if (!flushed && val != null)
preFlushPCs(fmd.getKey(), ((Map) val).keySet(), logical,
call);
}
if (!valEmbed && (elemType == JavaTypes.PC
|| elemType == JavaTypes.PC_UNTYPED)) {
boolean flushed = false;
if (external)
val = fmd.getExternalValue(val, _broker);
else if (val instanceof Proxy) {
// shortcut change trackers; also ensures we don't
// iterate lrs fields
MapChangeTracker ct = (MapChangeTracker) ((Proxy) val).
getChangeTracker();
if (ct != null && ct.isTracking()) {
if (ct.getTrackKeys()) {
preFlushPCs(fmd.getElement(), ct.getAdded(),
(Map) val, logical, call);
preFlushPCs(fmd.getElement(), ct.getChanged(),
(Map) val, logical, call);
} else {
preFlushPCs(fmd.getElement(), ct.getAdded(),
logical, call);
preFlushPCs(fmd.getElement(), ct.getChanged(),
logical, call);
}
flushed = true;
}
}