use of com.haulmont.cuba.gui.data.impl.DsContextImplementation in project cuba by cuba-platform.
the class RelatedEntitiesBean method openRelatedScreen.
@Override
public void openRelatedScreen(Collection<? extends Entity> selectedEntities, MetaClass metaClass, MetaProperty metaProperty, RelatedScreenDescriptor descriptor) {
Preconditions.checkNotNullArgument(metaClass, "MetaClass can't be null");
Preconditions.checkNotNullArgument(metaProperty, "MetaProperty can't be null");
WindowManager windowManager = windowManagerProvider.get();
if (!selectedEntities.isEmpty()) {
Map<String, Object> params = new HashMap<>();
WindowParams.DISABLE_AUTO_REFRESH.set(params, true);
WindowParams.DISABLE_RESUME_SUSPENDED.set(params, true);
if (descriptor != null && descriptor.getScreenParams() != null) {
params.putAll(descriptor.getScreenParams());
}
String screen;
if (descriptor != null && StringUtils.isNotEmpty(descriptor.getScreenId())) {
screen = descriptor.getScreenId();
} else {
screen = windowConfig.getBrowseScreenId(metaProperty.getRange().asClass());
}
if (StringUtils.isEmpty(screen)) {
String message = String.format("Can't show related entities: passed screenId is null and " + "there is no default browse screen for %s", metaClass.getName());
throw new IllegalStateException(message);
}
WindowManager.OpenType openType = WindowManager.OpenType.THIS_TAB;
if (descriptor != null) {
openType = descriptor.getOpenType();
}
Window window = windowManager.openWindow(windowConfig.getWindowInfo(screen), openType, params);
boolean found = ComponentsHelper.walkComponents(window, screenComponent -> {
if (!(screenComponent instanceof Filter)) {
return false;
} else {
MetaClass actualMetaClass = ((Filter) screenComponent).getDatasource().getMetaClass();
MetaClass relatedMetaClass = metaProperty.getRange().asClass();
MetaClass effectiveMetaClass = extendedEntities.getEffectiveMetaClass(relatedMetaClass);
if (Objects.equals(actualMetaClass, effectiveMetaClass)) {
MetaDataDescriptor metaDataDescriptor = new MetaDataDescriptor(metaClass, metaProperty);
applyFilter(((Filter) screenComponent), selectedEntities, descriptor, metaDataDescriptor);
return true;
}
return false;
}
});
if (!found) {
windowManager.showNotification(messages.getMainMessage("actions.Related.FilterNotFound"), Frame.NotificationType.WARNING);
}
((DsContextImplementation) window.getDsContext()).resumeSuspended();
} else {
windowManager.showNotification(messages.getMainMessage("actions.Related.NotSelected"), Frame.NotificationType.HUMANIZED);
}
}
use of com.haulmont.cuba.gui.data.impl.DsContextImplementation in project cuba by cuba-platform.
the class WebAccordion method initComponentTabChangeListener.
private void initComponentTabChangeListener() {
// after all lazy tabs listeners
if (!componentTabChangeListenerInitialized) {
component.addSelectedTabChangeListener(event -> {
if (context != null) {
context.executeInjectTasks();
context.executePostWrapTasks();
context.executeInitTasks();
}
// Fire GUI listener
fireTabChanged();
// We suppose that context.executePostInitTasks() executes a task once and then remove it from task list.
if (context != null) {
context.executePostInitTasks();
}
Window window = ComponentsHelper.getWindow(WebAccordion.this);
if (window != null) {
((DsContextImplementation) window.getDsContext()).resumeSuspended();
} else {
LoggerFactory.getLogger(WebAccordion.class).warn("Please specify Frame for Accordion");
}
});
componentTabChangeListenerInitialized = true;
}
}
Aggregations