final List<ComputationTargetType> types = type.accept(s_getNestedType, null);
if (types == null) {
if (message.getByName(IDENTIFIER_FIELD_NAME) == null) {
return ComputationTargetSpecification.NULL;
} else {
return new ComputationTargetRequirement(type, ExternalIdBundle.EMPTY);
}
} else if (types.isEmpty()) {
FudgeField field = message.getByName(IDENTIFIER_FIELD_NAME);
if (field == null) {
field = message.getByName("computationTargetId");
}
if (field.getValue() instanceof FudgeMsg) {
return new ComputationTargetRequirement(type, deserializer.fieldValueToObject(ExternalIdBundle.class, field));
} else {
return new ComputationTargetSpecification(type, message.getFieldValue(UniqueId.class, field));
}
} else {
ComputationTargetReference result = null;
final Iterator<ComputationTargetType> itrType = types.iterator();
for (final FudgeField field : message.getAllByName(IDENTIFIER_FIELD_NAME)) {
type = itrType.next();
if (field.getValue() instanceof FudgeMsg) {
final ExternalIdBundle identifiers = deserializer.fieldValueToObject(ExternalIdBundle.class, field);
if (result == null) {
result = new ComputationTargetRequirement(type, identifiers);
} else {
result = result.containing(type, identifiers);
}
} else {
final UniqueId identifier = message.getFieldValue(UniqueId.class, field);