protected Object getReferenceLink(String type, String id, Relationship relationship, ApiRequest request) {
SchemaFactory schemaFactory = request.getSchemaFactory();
Schema schema = schemaFactory.getSchema(type);
Schema otherSchema = schemaFactory.getSchema(relationship.getObjectType());
Field field = schema.getResourceFields().get(relationship.getPropertyName());
if (field == null || otherSchema == null) {
return null;
}
ListOptions options = new ListOptions(request);
Object currentObject = getById(type, id, options);
if (currentObject == null) {
return null;
}
Object fieldValue = field.getValue(currentObject);
if (fieldValue == null) {
return null;
}
Map<Object, Object> criteria = getDefaultCriteria(false, true, otherSchema.getId());
criteria.put(ObjectMetaDataManager.ID_FIELD, fieldValue);
ResourceManager resourceManager = locator.getResourceManagerByType(otherSchema.getId());
return ApiUtils.getFirstFromList(resourceManager.list(otherSchema.getId(), criteria, options));
}