Search in sources :

Example 1 with WidgetTypeInfo

use of io.jmix.dashboardsui.repository.WidgetTypeInfo in project jmix by jmix-framework.

the class CanvasUiComponentsFactory method createCanvasWidgetLayout.

@Override
public CanvasWidgetLayout createCanvasWidgetLayout(CanvasFragment canvasFragment, WidgetLayout widgetLayout) {
    Widget widget = widgetLayout.getWidget();
    Optional<WidgetTypeInfo> widgetTypeOpt = widgetRepository.getWidgetTypesInfo().stream().filter(widgetType -> StringUtils.equals(widget.getFragmentId(), widgetType.getFragmentId())).findFirst();
    if (!widgetTypeOpt.isPresent()) {
        CanvasWidgetLayout layout = components.create(CanvasWidgetLayout.class).init(widgetLayout);
        Label<String> label = components.create(Label.class);
        String message = messages.formatMessage(CanvasUiComponentsFactory.class, "widgetNotFound", widget.getCaption(), widget.getName());
        label.setValue(message);
        layout.addComponent(label);
        log.error(message);
        return layout;
    }
    widget.setDashboard(canvasFragment.getDashboardModel());
    String fragmentId = widgetTypeOpt.get().getFragmentId();
    Map<String, Object> params = new HashMap<>(ParamsMap.of(WIDGET, widget, DASHBOARD_MODEL, canvasFragment.getDashboardModel(), DASHBOARD, canvasFragment.getDashboard()));
    params.putAll(widgetRepository.getWidgetParams(widget));
    ScreenFragment screenFragment = AppUI.getCurrent().getFragments().create(canvasFragment, fragmentId, new MapScreenOptions(params)).init();
    Fragment fragment = screenFragment.getFragment();
    fragment.setSizeFull();
    Component widgetComponent = fragment;
    if (BooleanUtils.isTrue(widget.getShowWidgetCaption())) {
        VBoxLayout vBoxLayout = components.create(VBoxLayout.class);
        vBoxLayout.setSpacing(true);
        vBoxLayout.setMargin(true);
        vBoxLayout.setSizeFull();
        Label<String> label = components.create(Label.class);
        label.setValue(widget.getCaption());
        label.setStyleName("h2");
        vBoxLayout.add(label);
        vBoxLayout.add(fragment);
        vBoxLayout.expand(fragment);
        widgetComponent = vBoxLayout;
    } else {
        fragment.setMargin(true);
    }
    CanvasWidgetLayout layout = components.create(CanvasWidgetLayout.class).init(widgetLayout);
    layout.setUuid(UUID.randomUUID());
    layout.addComponent(widgetComponent);
    layout.setWidgetComponent(screenFragment);
    layout.setInnerLayout(widgetComponent);
    layout.setWidget(widget);
    layout.getDelegate().expand(widgetComponent);
    layout.setSizeFull();
    return layout;
}
Also used : ScreenFragment(io.jmix.ui.screen.ScreenFragment) Dashboard(io.jmix.dashboardsui.component.Dashboard) Fragment(io.jmix.ui.component.Fragment) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) ParamsMap(io.jmix.core.common.util.ParamsMap) BooleanUtils(org.apache.commons.lang3.BooleanUtils) HashMap(java.util.HashMap) Widget(io.jmix.dashboards.model.Widget) StringUtils(org.apache.commons.lang3.StringUtils) Messages(io.jmix.core.Messages) WidgetRepository(io.jmix.dashboardsui.repository.WidgetRepository) Component(io.jmix.ui.component.Component) CanvasComponentsFactory(io.jmix.dashboardsui.dashboard.tools.factory.CanvasComponentsFactory) UiComponents(io.jmix.ui.UiComponents) VBoxLayout(io.jmix.ui.component.VBoxLayout) Map(java.util.Map) MapScreenOptions(io.jmix.ui.screen.MapScreenOptions) Logger(org.slf4j.Logger) UUID(java.util.UUID) io.jmix.dashboards.model.visualmodel(io.jmix.dashboards.model.visualmodel) CanvasLayout(io.jmix.dashboardsui.component.CanvasLayout) Label(io.jmix.ui.component.Label) AppUI(io.jmix.ui.AppUI) Optional(java.util.Optional) io.jmix.dashboardsui.component.impl(io.jmix.dashboardsui.component.impl) CanvasFragment(io.jmix.dashboardsui.screen.dashboard.editor.canvas.CanvasFragment) WidgetTypeInfo(io.jmix.dashboardsui.repository.WidgetTypeInfo) VBoxLayout(io.jmix.ui.component.VBoxLayout) HashMap(java.util.HashMap) Widget(io.jmix.dashboards.model.Widget) WidgetTypeInfo(io.jmix.dashboardsui.repository.WidgetTypeInfo) ScreenFragment(io.jmix.ui.screen.ScreenFragment) Fragment(io.jmix.ui.component.Fragment) CanvasFragment(io.jmix.dashboardsui.screen.dashboard.editor.canvas.CanvasFragment) ScreenFragment(io.jmix.ui.screen.ScreenFragment) MapScreenOptions(io.jmix.ui.screen.MapScreenOptions) Component(io.jmix.ui.component.Component)

Example 2 with WidgetTypeInfo

use of io.jmix.dashboardsui.repository.WidgetTypeInfo in project jmix by jmix-framework.

the class WidgetRepositoryImpl method initializeWidgets.

protected void initializeWidgets() {
    widgetTypeInfos = new ArrayList<>();
    for (WindowInfo windowInfo : windowConfig.getWindows()) {
        if (StringUtils.isNotBlank(windowInfo.getTemplate())) {
            Class clazz = windowInfo.getControllerClass();
            if (clazz.isAnnotationPresent(DashboardWidget.class)) {
                DashboardWidget widgetAnnotation = (DashboardWidget) clazz.getAnnotation(DashboardWidget.class);
                String editFragmentId = widgetAnnotation.editFragmentId();
                if (StringUtils.isNotBlank(editFragmentId) && !windowConfig.hasWindow(editFragmentId)) {
                    log.error("Unable to find {} edit screen in screen config for widget {}", editFragmentId, widgetAnnotation.name());
                    throw new IllegalArgumentException(String.format("Unable to find %s edit screen in screen config for widget %s", editFragmentId, widgetAnnotation.name()));
                }
                widgetTypeInfos.add(new WidgetTypeInfo(widgetAnnotation.name(), windowInfo.getId(), editFragmentId));
            }
        }
    }
}
Also used : DashboardWidget(io.jmix.dashboardsui.annotation.DashboardWidget) WidgetTypeInfo(io.jmix.dashboardsui.repository.WidgetTypeInfo) WindowInfo(io.jmix.ui.WindowInfo)

Example 3 with WidgetTypeInfo

use of io.jmix.dashboardsui.repository.WidgetTypeInfo in project jmix by jmix-framework.

the class WidgetUtils method getWidgetCaptions.

public Map<String, String> getWidgetCaptions() {
    Map<String, String> map = new HashMap<>();
    List<WidgetTypeInfo> typesInfo = widgetRepository.getWidgetTypesInfo();
    for (WidgetTypeInfo typeInfo : typesInfo) {
        String browseFragmentId = typeInfo.getFragmentId();
        String name = typeInfo.getName();
        String property = format("dashboard-widget.%s", name);
        String mainMessage = messages.getMessage(property);
        String caption = mainMessage.equals(property) ? name : mainMessage;
        map.put(caption, browseFragmentId);
    }
    return map;
}
Also used : HashMap(java.util.HashMap) WidgetTypeInfo(io.jmix.dashboardsui.repository.WidgetTypeInfo)

Example 4 with WidgetTypeInfo

use of io.jmix.dashboardsui.repository.WidgetTypeInfo in project jmix by jmix-framework.

the class WidgetEdit method setWidgetType.

protected void setWidgetType() {
    String browseFragmentId = widgetDc.getItem().getFragmentId();
    WidgetTypeInfo widgetType = typesInfo.stream().filter(typeInfo -> browseFragmentId.equals(typeInfo.getFragmentId())).findFirst().orElseThrow(() -> new RuntimeException("Unknown widget type"));
    Map<String, Object> params = new HashMap<>(ParamsMap.of(ITEM_DC, widgetDc));
    params.putAll(widgetRepository.getWidgetParams(widgetDc.getItem()));
    if (StringUtils.isNotEmpty(widgetType.getEditFragmentId())) {
        widgetEditFragment = fragments.create(this, widgetType.getEditFragmentId(), new MapScreenOptions(params)).init();
        widgetEditBox.removeAll();
        widgetEditBox.add(widgetEditFragment.getFragment());
    }
}
Also used : HashMap(java.util.HashMap) WidgetTypeInfo(io.jmix.dashboardsui.repository.WidgetTypeInfo)

Aggregations

WidgetTypeInfo (io.jmix.dashboardsui.repository.WidgetTypeInfo)4 HashMap (java.util.HashMap)3 Messages (io.jmix.core.Messages)1 ParamsMap (io.jmix.core.common.util.ParamsMap)1 Widget (io.jmix.dashboards.model.Widget)1 io.jmix.dashboards.model.visualmodel (io.jmix.dashboards.model.visualmodel)1 DashboardWidget (io.jmix.dashboardsui.annotation.DashboardWidget)1 CanvasLayout (io.jmix.dashboardsui.component.CanvasLayout)1 Dashboard (io.jmix.dashboardsui.component.Dashboard)1 io.jmix.dashboardsui.component.impl (io.jmix.dashboardsui.component.impl)1 CanvasComponentsFactory (io.jmix.dashboardsui.dashboard.tools.factory.CanvasComponentsFactory)1 WidgetRepository (io.jmix.dashboardsui.repository.WidgetRepository)1 CanvasFragment (io.jmix.dashboardsui.screen.dashboard.editor.canvas.CanvasFragment)1 AppUI (io.jmix.ui.AppUI)1 UiComponents (io.jmix.ui.UiComponents)1 WindowInfo (io.jmix.ui.WindowInfo)1 Component (io.jmix.ui.component.Component)1 Fragment (io.jmix.ui.component.Fragment)1 Label (io.jmix.ui.component.Label)1 VBoxLayout (io.jmix.ui.component.VBoxLayout)1