/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * Licensed 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 org.dashbuilder.client.gallery; import com.google.gwt.user.client.ui.IsWidget; import org.dashbuilder.client.expenses.ExpensesDashboard; import org.dashbuilder.client.metrics.ClusterMetricsDashboard; import org.dashbuilder.client.resources.i18n.AppConstants; import org.dashbuilder.client.sales.widgets.SalesDistributionByCountry; import org.dashbuilder.client.sales.widgets.SalesExpectedByDate; import org.dashbuilder.client.sales.widgets.SalesGoals; import org.dashbuilder.client.sales.widgets.SalesTableReports; import org.dashbuilder.dataset.DataSetMetadata; import org.dashbuilder.dataset.date.TimeAmount; import org.dashbuilder.dataset.def.DataSetDef; import org.dashbuilder.dataset.events.DataSetModifiedEvent; import org.dashbuilder.dataset.events.DataSetPushOkEvent; import org.uberfire.client.annotations.WorkbenchPartTitle; import org.uberfire.client.annotations.WorkbenchPartView; import org.uberfire.client.annotations.WorkbenchScreen; import org.uberfire.lifecycle.OnClose; import org.uberfire.lifecycle.OnStartup; import org.uberfire.mvp.PlaceRequest; import org.uberfire.workbench.events.NotificationEvent; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.event.Event; import javax.enterprise.event.Observes; import javax.inject.Inject; import static org.uberfire.commons.validation.PortablePreconditions.checkNotNull; import static org.uberfire.workbench.events.NotificationEvent.NotificationType.INFO; @WorkbenchScreen(identifier = "GalleryWidgetScreen") public class GalleryWidgetPresenter { private GalleryWidget widget; private SalesGoals salesGoals; private SalesExpectedByDate salesExpectedByDate; private SalesDistributionByCountry salesDistributionByCountry; private SalesTableReports salesTableReports; private ExpensesDashboard expensesDashboard; private ClusterMetricsDashboard clusterMetricsDashboard; private Event<NotificationEvent> workbenchNotification; @Inject public GalleryWidgetPresenter(SalesGoals salesGoals, SalesExpectedByDate salesExpectedByDate, SalesDistributionByCountry salesDistributionByCountry, SalesTableReports salesTableReports, ExpensesDashboard expensesDashboard, ClusterMetricsDashboard clusterMetricsDashboard, Event<NotificationEvent> workbenchNotification) { this.salesGoals = salesGoals; this.salesExpectedByDate = salesExpectedByDate; this.salesDistributionByCountry = salesDistributionByCountry; this.salesTableReports = salesTableReports; this.expensesDashboard = expensesDashboard; this.clusterMetricsDashboard = clusterMetricsDashboard; this.workbenchNotification = workbenchNotification; } @WorkbenchPartTitle public String getTitle() { return widget.getTitle(); } @WorkbenchPartView public IsWidget getView() { return widget; } @OnStartup public void onStartup( final PlaceRequest placeRequest) { String widgetId = placeRequest.getParameter("widgetId", ""); widget = getWidget(widgetId); } @OnClose public void onClose() { widget.onClose(); } private GalleryWidget getWidget(String widgetId) { if ("salesGoal".equals(widgetId)) { return salesGoals; } if ("salesPipeline".equals(widgetId)) { return salesExpectedByDate; } if ("salesPerCountry".equals(widgetId)) { return salesDistributionByCountry; } if ("salesReports".equals(widgetId)) { return salesTableReports; } if ("expenseReports".equals(widgetId)) { return expensesDashboard; } if ("clusterMetrics".equals(widgetId)) { return clusterMetricsDashboard; } throw new IllegalArgumentException(AppConstants.INSTANCE.gallerywidget_unknown() + widgetId); } // Catch some data set related events and display workbench notifications only and only if: // - The data set refresh is enabled and // - It's refresh rate is greater than 60 seconds (avoid tons of notifications in "real-time" scenarios) private void onDataSetModifiedEvent(@Observes DataSetModifiedEvent event) { checkNotNull("event", event); DataSetDef def = event.getDataSetDef(); String targetUUID = event.getDataSetDef().getUUID(); TimeAmount timeFrame = def.getRefreshTimeAmount(); boolean noRealTime = timeFrame == null || timeFrame.toMillis() > 60000; if ((!def.isRefreshAlways() || noRealTime) && widget != null && widget.feedsFrom(targetUUID)) { workbenchNotification.fire(new NotificationEvent(AppConstants.INSTANCE.gallerywidget_dataset_modif(), INFO)); widget.redrawAll(); } } private void onDataSetPushOkEvent(@Observes DataSetPushOkEvent event) { checkNotNull("event", event); checkNotNull("event", event.getDataSetMetadata()); DataSetMetadata metadata = event.getDataSetMetadata(); DataSetDef def = metadata.getDefinition(); TimeAmount timeFrame = def.getRefreshTimeAmount(); if (timeFrame == null || timeFrame.toMillis() > 60000) { int estimazedSizeKbs = event.getDataSetMetadata().getEstimatedSize()/1000; workbenchNotification.fire(new NotificationEvent( AppConstants.INSTANCE.gallerywidget_dataset_loaded(def.getProvider().toString(), estimazedSizeKbs), INFO)); } } }