@SuppressWarnings("unchecked")
protected Screen createScreen(RelatedEntitiesBuilder builder, MetaClass metaClass, MetaProperty metaProperty) {
FrameOwner origin = builder.getOrigin();
Screens screens = getScreenContext(origin).getScreens();
if (builder instanceof RelatedEntitiesClassBuilder) {
RelatedEntitiesClassBuilder screenClassBuilder = (RelatedEntitiesClassBuilder) builder;
Class screenClass = screenClassBuilder.getScreenClass();
if (screenClass == null) {
throw new IllegalArgumentException("Screen class is not set");
}
return screens.create(screenClass, builder.getLaunchMode(), builder.getOptions());
} else {
String screenId = builder.getScreenId();
if (StringUtils.isEmpty(screenId)) {
screenId = windowConfig.getBrowseScreenId(metaProperty.getRange().asClass());
if (StringUtils.isEmpty(screenId)) {
String message = String.format("Can't create related entities screen: passed screen id is null and " +
"there is no default browse screen for %s", metaClass.getName());
throw new IllegalArgumentException(message);
}
}
return screens.create(builder.getScreenId(), builder.getLaunchMode(), builder.getOptions());
}
}