/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ro.nextreports.server.web.dashboard; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.markup.html.panel.EmptyPanel; import org.apache.wicket.markup.html.panel.GenericPanel; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ro.nextreports.server.domain.Chart; import ro.nextreports.server.domain.Entity; import ro.nextreports.server.web.dashboard.alarm.AlarmWidget; import ro.nextreports.server.web.dashboard.chart.ChartWidget; import ro.nextreports.server.web.dashboard.display.DisplayWidget; import ro.nextreports.server.web.dashboard.drilldown.DrillDownWidget; import ro.nextreports.server.web.dashboard.indicator.IndicatorWidget; /** * @author Decebal Suiu */ public class WidgetPanel extends GenericPanel<Widget> { private static final long serialVersionUID = 1L; private static final Logger LOG = LoggerFactory.getLogger(WidgetPanel.class); private WidgetHeaderPanel widgetHeaderPanel; private WidgetView widgetView; private Panel settingsPanel; public WidgetPanel(String id, IModel<Widget> model) { super(id, model); setOutputMarkupId(true); add(AttributeAppender.append("class", "dragbox")); widgetHeaderPanel = new WidgetHeaderPanel("header", model); add(widgetHeaderPanel); if (model.getObject().hasSettings()) { Widget widget = model.getObject(); settingsPanel = widget.createSettingsPanel("settings"); } else { settingsPanel = new EmptyPanel("settings"); } settingsPanel.setOutputMarkupId(true); settingsPanel.setOutputMarkupPlaceholderTag(true); settingsPanel.setVisible(false); add(settingsPanel); addWidgetView(model.getObject().isCollapsed()); } public Widget getWidget() { return getModelObject(); } public WidgetHeaderPanel getWidgetHeaderPanel() { return widgetHeaderPanel; } public WidgetView getWidgetView() { return widgetView; } public Panel getSettingsPanel() { return settingsPanel; } public void refresh(AjaxRequestTarget target) { addWidgetView(((Widget)this.getModel().getObject()).isCollapsed()); target.add(this); } private void addWidgetView(boolean isCollapsed) { Component component; if (isCollapsed) { component = new EmptyPanel("content"); component.setVisible(false); } else { try { widgetView = getWidget().createView("content", false); // set a special class for min-height depending on widget type String cssClass = null; if (getWidget() instanceof AlarmWidget) { cssClass = "dragbox-content-alarm"; } else if (getWidget() instanceof IndicatorWidget) { cssClass = "dragbox-content-indicator"; } else if (getWidget() instanceof DisplayWidget) { cssClass = "dragbox-content-display"; } else if (getWidget() instanceof ChartWidget) { cssClass = "dragbox-content-chart"; } else if (getWidget() instanceof DrillDownWidget) { // see also DrillDownWidgetView where we have to remove this cssClass when we drill-down // and add it again when we drill-up to first Chart Entity entity = ((DrillDownWidget) getWidget()).getEntity(); if (entity instanceof Chart) { cssClass = "dragbox-content-chart"; } } if (cssClass != null) { widgetView.add(AttributeAppender.append("class", cssClass)); } } catch (Throwable e) { LOG.error(e.getMessage(), e); widgetView = new WidgetErrorView("content", getModel(), e); } component = widgetView; } addOrReplace(component); } }