in rest-api/src/jetbrains/buildServer/server/rest/model/RelatedEntity.java [178:231]
public static Entity getFrom(@NotNull final ObjectWrapper objectWrapper, @NotNull final ServiceLocator serviceLocator) {
Entity result = new Entity();
Object object = objectWrapper.getObject();
ObjectType objectType = objectWrapper.getObjectType();
result.internalId = "NO_ID".equals(objectWrapper.getObjectId()) ? null : objectWrapper.getObjectId();
result.type = getType(objectType);
result.unknown = false;
if (!ObjectType.STRING.equals(objectType) && object instanceof String) {
//todo: investigate when this can happen
result.text = (String)object; //todo: is this a due approach?
result.type = "text";
} else if (object != null) {
switch (objectType) {
case STRING: result.text = (String)object; break; //todo: check where it is used
case BUILD_PROMOTION: result.build = (BuildPromotion)object; break;
case BUILD: result.build = ((SBuild)object).getBuildPromotion(); break;
case BUILD_TYPE: result.buildType = new BuildTypeOrTemplate((SBuildType)object); break;
case BUILD_TYPE_TEMPLATE: result.buildType = new BuildTypeOrTemplate((BuildTypeTemplate)object); break;
case PROJECT: result.project = (SProject)object; break;
case USER: result.user = (jetbrains.buildServer.users.User)object; break;
case USER_GROUP: result.userGroup = (SUserGroup)object; break;
case TEST: result.test = (STest)object; break;
case BUILD_PROBLEM: result.problem = new ProblemWrapper(((BuildProblemInfo)object).getId(), serviceLocator); break;
case AGENT: result.agent = (SBuildAgent)object; break;
case VCS_ROOT: result.vcsRoot = (SVcsRoot)object; break;
case VCS_MODIFICATION: result.change = (SVcsModification)object; break;
case AGENT_POOL: result.agentPool = (jetbrains.buildServer.serverSide.agentPools.AgentPool)object; break;
case SERVER: //this is usually used as "nop" and if present, affects the indexes in the pattern, so cannot be ignored
result.internalId = null; break;
case UNKNOWN_OBJECT: //todo: check usages
default: result.unknown = true;
/*
still unsupported:
case USER_ROLE: result.role = (new UserRoleHelper()).getObject(object); break;
case AGENT_TYPE: result.agent = (new AgentTypeHelper()).getObject(object); break;
case CONFIG_MODIFICATION: result.config_modification = (new ConfigModificationHelper()).getObject(object); break;
case HEALTH_STATUS_ITEM: result.healthItem = (new HealthStatusItemHelper()).getObject(object); break;
case RUN_TYPE: result.run_type = (new RunTypeItemHelper()).getObject(object); break;
case TOOL: result.tool = (new ToolHelper()).getObject(object); break;
*/
//todo: add test that we support here all the types from ObjectType
//todo: special case when object is String (can have any type)
//todo: handle exceptions from helpers / on casts
//todo: need to check permissions?
}
}
return result;
}