Search in sources :

Example 1 with LinkableWidget

use of org.openhab.core.model.sitemap.sitemap.LinkableWidget in project openhab-core by openhab.

the class SitemapResource method blockUnlessChangeOccurs.

private boolean blockUnlessChangeOccurs(String sitemapname, String pageId) {
    boolean timeout = false;
    Sitemap sitemap = getSitemap(sitemapname);
    if (sitemap != null) {
        if (pageId.equals(sitemap.getName())) {
            EList<Widget> children = itemUIRegistry.getChildren(sitemap);
            timeout = waitForChanges(children);
        } else {
            Widget pageWidget = itemUIRegistry.getWidget(sitemap, pageId);
            if (pageWidget instanceof LinkableWidget) {
                EList<Widget> children = itemUIRegistry.getChildren((LinkableWidget) pageWidget);
                timeout = waitForChanges(children);
            }
        }
    }
    return timeout;
}
Also used : LinkableWidget(org.openhab.core.model.sitemap.sitemap.LinkableWidget) Sitemap(org.openhab.core.model.sitemap.sitemap.Sitemap) Widget(org.openhab.core.model.sitemap.sitemap.Widget) LinkableWidget(org.openhab.core.model.sitemap.sitemap.LinkableWidget)

Example 2 with LinkableWidget

use of org.openhab.core.model.sitemap.sitemap.LinkableWidget in project openhab-core by openhab.

the class UIComponentSitemapProvider method buildWidget.

@Nullable
protected Widget buildWidget(UIComponent component) {
    Widget widget = null;
    switch(component.getType()) {
        case "Frame":
            FrameImpl frameWidget = (FrameImpl) SitemapFactory.eINSTANCE.createFrame();
            widget = frameWidget;
            break;
        case "Text":
            TextImpl textWidget = (TextImpl) SitemapFactory.eINSTANCE.createText();
            widget = textWidget;
            break;
        case "Group":
            GroupImpl groupWidget = (GroupImpl) SitemapFactory.eINSTANCE.createGroup();
            widget = groupWidget;
            break;
        case "Image":
            ImageImpl imageWidget = (ImageImpl) SitemapFactory.eINSTANCE.createImage();
            widget = imageWidget;
            setWidgetPropertyFromComponentConfig(widget, component, "url", SitemapPackage.IMAGE__URL);
            setWidgetPropertyFromComponentConfig(widget, component, "refresh", SitemapPackage.IMAGE__REFRESH);
            break;
        case "Video":
            VideoImpl videoWidget = (VideoImpl) SitemapFactory.eINSTANCE.createVideo();
            widget = videoWidget;
            setWidgetPropertyFromComponentConfig(widget, component, "url", SitemapPackage.VIDEO__URL);
            setWidgetPropertyFromComponentConfig(widget, component, "encoding", SitemapPackage.VIDEO__ENCODING);
            break;
        case "Chart":
            ChartImpl chartWidget = (ChartImpl) SitemapFactory.eINSTANCE.createChart();
            widget = chartWidget;
            setWidgetPropertyFromComponentConfig(widget, component, "service", SitemapPackage.CHART__SERVICE);
            setWidgetPropertyFromComponentConfig(widget, component, "refresh", SitemapPackage.CHART__REFRESH);
            setWidgetPropertyFromComponentConfig(widget, component, "period", SitemapPackage.CHART__PERIOD);
            setWidgetPropertyFromComponentConfig(widget, component, "legend", SitemapPackage.CHART__LEGEND);
            break;
        case "Webview":
            WebviewImpl webviewWidget = (WebviewImpl) SitemapFactory.eINSTANCE.createWebview();
            widget = webviewWidget;
            setWidgetPropertyFromComponentConfig(widget, component, "height", SitemapPackage.WEBVIEW__HEIGHT);
            setWidgetPropertyFromComponentConfig(widget, component, "url", SitemapPackage.WEBVIEW__URL);
            break;
        case "Switch":
            SwitchImpl switchWidget = (SwitchImpl) SitemapFactory.eINSTANCE.createSwitch();
            addWidgetMappings(switchWidget.getMappings(), component);
            widget = switchWidget;
            break;
        case "Mapview":
            MapviewImpl mapviewWidget = (MapviewImpl) SitemapFactory.eINSTANCE.createMapview();
            widget = mapviewWidget;
            setWidgetPropertyFromComponentConfig(widget, component, "height", SitemapPackage.WEBVIEW__HEIGHT);
            break;
        case "Slider":
            SliderImpl sliderWidget = (SliderImpl) SitemapFactory.eINSTANCE.createSlider();
            widget = sliderWidget;
            setWidgetPropertyFromComponentConfig(widget, component, "minValue", SitemapPackage.SLIDER__MIN_VALUE);
            setWidgetPropertyFromComponentConfig(widget, component, "maxValue", SitemapPackage.SLIDER__MAX_VALUE);
            setWidgetPropertyFromComponentConfig(widget, component, "step", SitemapPackage.SLIDER__STEP);
            setWidgetPropertyFromComponentConfig(widget, component, "switchEnabled", SitemapPackage.SLIDER__SWITCH_ENABLED);
            setWidgetPropertyFromComponentConfig(widget, component, "sendFrequency", SitemapPackage.SLIDER__FREQUENCY);
            break;
        case "Selection":
            SelectionImpl selectionWidget = (SelectionImpl) SitemapFactory.eINSTANCE.createSelection();
            addWidgetMappings(selectionWidget.getMappings(), component);
            widget = selectionWidget;
            break;
        case "List":
            ListImpl listWidget = (ListImpl) SitemapFactory.eINSTANCE.createList();
            widget = listWidget;
            setWidgetPropertyFromComponentConfig(widget, component, "separator", SitemapPackage.LIST__SEPARATOR);
            break;
        case "Setpoint":
            SetpointImpl setpointWidget = (SetpointImpl) SitemapFactory.eINSTANCE.createSetpoint();
            widget = setpointWidget;
            setWidgetPropertyFromComponentConfig(widget, component, "minValue", SitemapPackage.SETPOINT__MIN_VALUE);
            setWidgetPropertyFromComponentConfig(widget, component, "maxValue", SitemapPackage.SETPOINT__MAX_VALUE);
            setWidgetPropertyFromComponentConfig(widget, component, "step", SitemapPackage.SETPOINT__STEP);
            break;
        case "Colorpicker":
            ColorpickerImpl colorpickerWidget = (ColorpickerImpl) SitemapFactory.eINSTANCE.createColorpicker();
            widget = colorpickerWidget;
            setWidgetPropertyFromComponentConfig(widget, component, "frequency", SitemapPackage.COLORPICKER__FREQUENCY);
            break;
        case "Default":
            DefaultImpl defaultWidget = (DefaultImpl) SitemapFactory.eINSTANCE.createDefault();
            widget = defaultWidget;
            setWidgetPropertyFromComponentConfig(widget, component, "height", SitemapPackage.DEFAULT__HEIGHT);
            break;
        default:
            logger.warn("Unknown sitemap component type {}", component.getType());
            break;
    }
    if (widget != null) {
        setWidgetPropertyFromComponentConfig(widget, component, "label", SitemapPackage.WIDGET__LABEL);
        setWidgetPropertyFromComponentConfig(widget, component, "icon", SitemapPackage.WIDGET__ICON);
        setWidgetPropertyFromComponentConfig(widget, component, "item", SitemapPackage.WIDGET__ITEM);
        if (widget instanceof LinkableWidget) {
            LinkableWidget linkableWidget = (LinkableWidget) widget;
            if (component.getSlots() != null && component.getSlots().containsKey("widgets")) {
                for (UIComponent childComponent : component.getSlot("widgets")) {
                    Widget childWidget = buildWidget(childComponent);
                    if (childWidget != null) {
                        linkableWidget.getChildren().add(childWidget);
                    }
                }
            }
        }
    // TODO: process visibility & color rules
    }
    return widget;
}
Also used : SelectionImpl(org.openhab.core.model.sitemap.sitemap.impl.SelectionImpl) FrameImpl(org.openhab.core.model.sitemap.sitemap.impl.FrameImpl) Widget(org.openhab.core.model.sitemap.sitemap.Widget) LinkableWidget(org.openhab.core.model.sitemap.sitemap.LinkableWidget) UIComponent(org.openhab.core.ui.components.UIComponent) RootUIComponent(org.openhab.core.ui.components.RootUIComponent) SwitchImpl(org.openhab.core.model.sitemap.sitemap.impl.SwitchImpl) TextImpl(org.openhab.core.model.sitemap.sitemap.impl.TextImpl) ImageImpl(org.openhab.core.model.sitemap.sitemap.impl.ImageImpl) ColorpickerImpl(org.openhab.core.model.sitemap.sitemap.impl.ColorpickerImpl) LinkableWidget(org.openhab.core.model.sitemap.sitemap.LinkableWidget) MapviewImpl(org.openhab.core.model.sitemap.sitemap.impl.MapviewImpl) ChartImpl(org.openhab.core.model.sitemap.sitemap.impl.ChartImpl) ListImpl(org.openhab.core.model.sitemap.sitemap.impl.ListImpl) GroupImpl(org.openhab.core.model.sitemap.sitemap.impl.GroupImpl) SetpointImpl(org.openhab.core.model.sitemap.sitemap.impl.SetpointImpl) DefaultImpl(org.openhab.core.model.sitemap.sitemap.impl.DefaultImpl) SliderImpl(org.openhab.core.model.sitemap.sitemap.impl.SliderImpl) VideoImpl(org.openhab.core.model.sitemap.sitemap.impl.VideoImpl) WebviewImpl(org.openhab.core.model.sitemap.sitemap.impl.WebviewImpl) Nullable(org.eclipse.jdt.annotation.Nullable)

Example 3 with LinkableWidget

use of org.openhab.core.model.sitemap.sitemap.LinkableWidget in project openhab-core by openhab.

the class ItemUIRegistryImpl method getWidgetId.

@Override
public String getWidgetId(Widget widget) {
    Widget w2 = defaultWidgets.get(widget);
    if (w2 != null) {
        return getWidgetId(w2);
    }
    String id = "";
    Widget w = widget;
    while (w.eContainer() instanceof Widget) {
        Widget parent = (Widget) w.eContainer();
        String index = String.valueOf(((LinkableWidget) parent).getChildren().indexOf(w));
        if (index.length() == 1) {
            // make it two digits
            index = "0" + index;
        }
        id = index + id;
        w = parent;
    }
    if (w.eContainer() instanceof Sitemap) {
        Sitemap sitemap = (Sitemap) w.eContainer();
        String index = String.valueOf(sitemap.getChildren().indexOf(w));
        if (index.length() == 1) {
            // make it two digits
            index = "0" + index;
        }
        id = index + id;
    }
    // use the item name as the id
    if (w.eContainer() == null) {
        String itemName = w.getItem();
        id = itemName;
    }
    return id;
}
Also used : LinkableWidget(org.openhab.core.model.sitemap.sitemap.LinkableWidget) Sitemap(org.openhab.core.model.sitemap.sitemap.Sitemap) Widget(org.openhab.core.model.sitemap.sitemap.Widget) LinkableWidget(org.openhab.core.model.sitemap.sitemap.LinkableWidget)

Example 4 with LinkableWidget

use of org.openhab.core.model.sitemap.sitemap.LinkableWidget in project openhab-core by openhab.

the class SitemapResource method getPageBean.

private PageDTO getPageBean(String sitemapName, String pageId, URI uri, Locale locale, boolean timeout, boolean includeHidden) {
    Sitemap sitemap = getSitemap(sitemapName);
    if (sitemap != null) {
        if (pageId.equals(sitemap.getName())) {
            EList<Widget> children = itemUIRegistry.getChildren(sitemap);
            return createPageBean(sitemapName, sitemap.getLabel(), sitemap.getIcon(), sitemap.getName(), children, false, isLeaf(children), uri, locale, timeout, includeHidden);
        } else {
            Widget pageWidget = itemUIRegistry.getWidget(sitemap, pageId);
            if (pageWidget instanceof LinkableWidget) {
                EList<Widget> children = itemUIRegistry.getChildren((LinkableWidget) pageWidget);
                PageDTO pageBean = createPageBean(sitemapName, itemUIRegistry.getLabel(pageWidget), itemUIRegistry.getCategory(pageWidget), pageId, children, false, isLeaf(children), uri, locale, timeout, includeHidden);
                EObject parentPage = pageWidget.eContainer();
                while (parentPage instanceof Frame) {
                    parentPage = parentPage.eContainer();
                }
                if (parentPage instanceof Widget) {
                    String parentId = itemUIRegistry.getWidgetId((Widget) parentPage);
                    pageBean.parent = getPageBean(sitemapName, parentId, uri, locale, timeout, includeHidden);
                    pageBean.parent.widgets = null;
                    pageBean.parent.parent = null;
                } else if (parentPage instanceof Sitemap) {
                    pageBean.parent = getPageBean(sitemapName, sitemap.getName(), uri, locale, timeout, includeHidden);
                    pageBean.parent.widgets = null;
                }
                return pageBean;
            } else {
                if (logger.isDebugEnabled()) {
                    if (pageWidget == null) {
                        logger.debug("Received HTTP GET request at '{}' for the unknown page id '{}'.", uri, pageId);
                    } else {
                        logger.debug("Received HTTP GET request at '{}' for the page id '{}'. " + "This id refers to a non-linkable widget and is therefore no valid page id.", uri, pageId);
                    }
                }
                throw new WebApplicationException(404);
            }
        }
    } else {
        logger.info("Received HTTP GET request at '{}' for the unknown sitemap '{}'.", uri, sitemapName);
        throw new WebApplicationException(404);
    }
}
Also used : LinkableWidget(org.openhab.core.model.sitemap.sitemap.LinkableWidget) Sitemap(org.openhab.core.model.sitemap.sitemap.Sitemap) Frame(org.openhab.core.model.sitemap.sitemap.Frame) WebApplicationException(javax.ws.rs.WebApplicationException) EObject(org.eclipse.emf.ecore.EObject) Widget(org.openhab.core.model.sitemap.sitemap.Widget) LinkableWidget(org.openhab.core.model.sitemap.sitemap.LinkableWidget)

Example 5 with LinkableWidget

use of org.openhab.core.model.sitemap.sitemap.LinkableWidget in project openhab-core by openhab.

the class SitemapResource method createWidgetBean.

@Nullable
private WidgetDTO createWidgetBean(String sitemapName, Widget widget, boolean drillDown, URI uri, String widgetId, Locale locale, boolean evenIfHidden) {
    // Test visibility
    if (!evenIfHidden && !itemUIRegistry.getVisiblity(widget)) {
        return null;
    }
    WidgetDTO bean = new WidgetDTO();
    if (widget.getItem() != null) {
        try {
            Item item = itemUIRegistry.getItem(widget.getItem());
            String widgetTypeName = widget.eClass().getInstanceTypeName().substring(widget.eClass().getInstanceTypeName().lastIndexOf(".") + 1);
            boolean isMapview = "mapview".equalsIgnoreCase(widgetTypeName);
            Predicate<Item> itemFilter = (i -> CoreItemFactory.LOCATION.equals(i.getType()));
            bean.item = EnrichedItemDTOMapper.map(item, isMapview, itemFilter, UriBuilder.fromUri(uri).path("items/{itemName}"), locale);
            bean.state = itemUIRegistry.getState(widget).toFullString();
            // In case the widget state is identical to the item state, its value is set to null.
            if (bean.state != null && bean.state.equals(bean.item.state)) {
                bean.state = null;
            }
        } catch (ItemNotFoundException e) {
            logger.debug("{}", e.getMessage());
        }
    }
    bean.widgetId = widgetId;
    bean.icon = itemUIRegistry.getCategory(widget);
    bean.labelcolor = itemUIRegistry.getLabelColor(widget);
    bean.valuecolor = itemUIRegistry.getValueColor(widget);
    bean.label = itemUIRegistry.getLabel(widget);
    bean.type = widget.eClass().getName();
    bean.visibility = itemUIRegistry.getVisiblity(widget);
    if (widget instanceof LinkableWidget) {
        LinkableWidget linkableWidget = (LinkableWidget) widget;
        EList<Widget> children = itemUIRegistry.getChildren(linkableWidget);
        if (widget instanceof Frame) {
            for (Widget child : children) {
                String wID = itemUIRegistry.getWidgetId(child);
                WidgetDTO subWidget = createWidgetBean(sitemapName, child, drillDown, uri, wID, locale, evenIfHidden);
                if (subWidget != null) {
                    bean.widgets.add(subWidget);
                }
            }
        } else if (!children.isEmpty()) {
            String pageName = itemUIRegistry.getWidgetId(linkableWidget);
            bean.linkedPage = createPageBean(sitemapName, itemUIRegistry.getLabel(widget), itemUIRegistry.getCategory(widget), pageName, drillDown ? children : null, drillDown, isLeaf(children), uri, locale, false, evenIfHidden);
        }
    }
    if (widget instanceof Switch) {
        Switch switchWidget = (Switch) widget;
        for (Mapping mapping : switchWidget.getMappings()) {
            MappingDTO mappingBean = new MappingDTO();
            mappingBean.command = mapping.getCmd();
            mappingBean.label = mapping.getLabel();
            bean.mappings.add(mappingBean);
        }
    }
    if (widget instanceof Selection) {
        Selection selectionWidget = (Selection) widget;
        for (Mapping mapping : selectionWidget.getMappings()) {
            MappingDTO mappingBean = new MappingDTO();
            mappingBean.command = mapping.getCmd();
            mappingBean.label = mapping.getLabel();
            bean.mappings.add(mappingBean);
        }
    }
    if (widget instanceof Slider) {
        Slider sliderWidget = (Slider) widget;
        bean.sendFrequency = sliderWidget.getFrequency();
        bean.switchSupport = sliderWidget.isSwitchEnabled();
        bean.minValue = sliderWidget.getMinValue();
        bean.maxValue = sliderWidget.getMaxValue();
        bean.step = sliderWidget.getStep();
    }
    if (widget instanceof List) {
        List listWidget = (List) widget;
        bean.separator = listWidget.getSeparator();
    }
    if (widget instanceof Image) {
        bean.url = buildProxyUrl(sitemapName, widget, uri);
        Image imageWidget = (Image) widget;
        if (imageWidget.getRefresh() > 0) {
            bean.refresh = imageWidget.getRefresh();
        }
    }
    if (widget instanceof Video) {
        Video videoWidget = (Video) widget;
        if (videoWidget.getEncoding() != null) {
            bean.encoding = videoWidget.getEncoding();
        }
        if (videoWidget.getEncoding() != null && videoWidget.getEncoding().toLowerCase().contains("hls")) {
            bean.url = videoWidget.getUrl();
        } else {
            bean.url = buildProxyUrl(sitemapName, videoWidget, uri);
        }
    }
    if (widget instanceof Webview) {
        Webview webViewWidget = (Webview) widget;
        bean.url = webViewWidget.getUrl();
        bean.height = webViewWidget.getHeight();
    }
    if (widget instanceof Mapview) {
        Mapview mapViewWidget = (Mapview) widget;
        bean.height = mapViewWidget.getHeight();
    }
    if (widget instanceof Chart) {
        Chart chartWidget = (Chart) widget;
        bean.service = chartWidget.getService();
        bean.period = chartWidget.getPeriod();
        bean.legend = chartWidget.getLegend();
        if (chartWidget.getRefresh() > 0) {
            bean.refresh = chartWidget.getRefresh();
        }
    }
    if (widget instanceof Setpoint) {
        Setpoint setpointWidget = (Setpoint) widget;
        bean.minValue = setpointWidget.getMinValue();
        bean.maxValue = setpointWidget.getMaxValue();
        bean.step = setpointWidget.getStep();
    }
    return bean;
}
Also used : Frame(org.openhab.core.model.sitemap.sitemap.Frame) Slider(org.openhab.core.model.sitemap.sitemap.Slider) Selection(org.openhab.core.model.sitemap.sitemap.Selection) Mapview(org.openhab.core.model.sitemap.sitemap.Mapview) Widget(org.openhab.core.model.sitemap.sitemap.Widget) LinkableWidget(org.openhab.core.model.sitemap.sitemap.LinkableWidget) Setpoint(org.openhab.core.model.sitemap.sitemap.Setpoint) Mapping(org.openhab.core.model.sitemap.sitemap.Mapping) Webview(org.openhab.core.model.sitemap.sitemap.Webview) Image(org.openhab.core.model.sitemap.sitemap.Image) LinkableWidget(org.openhab.core.model.sitemap.sitemap.LinkableWidget) GenericItem(org.openhab.core.items.GenericItem) Item(org.openhab.core.items.Item) Switch(org.openhab.core.model.sitemap.sitemap.Switch) Video(org.openhab.core.model.sitemap.sitemap.Video) List(org.openhab.core.model.sitemap.sitemap.List) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) EList(org.eclipse.emf.common.util.EList) Chart(org.openhab.core.model.sitemap.sitemap.Chart) ItemNotFoundException(org.openhab.core.items.ItemNotFoundException) Nullable(org.eclipse.jdt.annotation.Nullable)

Aggregations

LinkableWidget (org.openhab.core.model.sitemap.sitemap.LinkableWidget)7 Widget (org.openhab.core.model.sitemap.sitemap.Widget)7 Sitemap (org.openhab.core.model.sitemap.sitemap.Sitemap)4 BasicEList (org.eclipse.emf.common.util.BasicEList)2 Nullable (org.eclipse.jdt.annotation.Nullable)2 Frame (org.openhab.core.model.sitemap.sitemap.Frame)2 ArrayList (java.util.ArrayList)1 LinkedList (java.util.LinkedList)1 WebApplicationException (javax.ws.rs.WebApplicationException)1 EList (org.eclipse.emf.common.util.EList)1 EObject (org.eclipse.emf.ecore.EObject)1 GenericItem (org.openhab.core.items.GenericItem)1 Item (org.openhab.core.items.Item)1 ItemNotFoundException (org.openhab.core.items.ItemNotFoundException)1 Chart (org.openhab.core.model.sitemap.sitemap.Chart)1 Group (org.openhab.core.model.sitemap.sitemap.Group)1 Image (org.openhab.core.model.sitemap.sitemap.Image)1 List (org.openhab.core.model.sitemap.sitemap.List)1 Mapping (org.openhab.core.model.sitemap.sitemap.Mapping)1 Mapview (org.openhab.core.model.sitemap.sitemap.Mapview)1