org.dashbuilder.displayer.client.PerspectiveCoordinator Maven / Gradle / Ivy
/*
* 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.displayer.client;
import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import org.dashbuilder.dataset.DataSet;
import org.dashbuilder.dataset.DataSetLookup;
import org.dashbuilder.dataset.events.DataSetModifiedEvent;
import org.dashbuilder.displayer.DisplayerSettings;
import org.uberfire.client.workbench.events.PerspectiveChange;
/**
* It holds the set of Displayer instances being displayed on the current perspective.
* It also makes sure those instances are properly synced to reflect the data set manipulation requests
* issued by any Displayer on the dashboard.
*/
@ApplicationScoped
public class PerspectiveCoordinator {
/**
* The real coordinator.
*/
private DisplayerCoordinator displayerCoordinator;
/**
* Flag indicating if the perspective is on edit mode.
*/
boolean editOn = false;
public PerspectiveCoordinator() {
}
@Inject
public PerspectiveCoordinator(DisplayerCoordinator coordinator) {
this.displayerCoordinator = coordinator;
}
/**
* Adds a Displayer instance to the current perspective context.
*/
public void addDisplayer(Displayer displayer) {
displayerCoordinator.addDisplayer(displayer);
}
/**
* Removes a Displayer instance from the current perspective context.
*/
public boolean removeDisplayer(Displayer displayer) {
return displayerCoordinator.removeDisplayer(displayer);
}
/**
*
* @return the current list of displayers
*/
public List getDisplayerList(){
return displayerCoordinator.getDisplayerList();
}
/**
* Turn on the edition of the perspective
*/
public void editOn() {
editOn = true;
// Turns off the automatic refresh of all the displayers.
for (Displayer displayer : displayerCoordinator.getDisplayerList()) {
displayer.setRefreshOn(false);
}
}
/**
* Turn off the edition of the perspective
*/
public void editOff() {
editOn = false;
// Resumes the automatic refresh on all the displayers.
for (Displayer displayer : displayerCoordinator.getDisplayerList()) {
displayer.setRefreshOn(true);
}
}
/**
* Reset the coordinator every time the perspective is changed.
*/
private void onPerspectiveChanged(@Observes final PerspectiveChange event) {
displayerCoordinator.clear();
}
/**
* Listen to modifications on any of the data set being used in this perspective.
*/
private void onDataSetModifiedEvent(@Observes DataSetModifiedEvent event) {
if (!editOn) {
String targetUUID = event.getDataSetDef().getUUID();
for (Displayer displayer : displayerCoordinator.getDisplayerList()) {
DisplayerSettings settings = displayer.getDisplayerSettings();
// Do nothing if the displayer:
// - Is not drawn
// - Is handling the refresh by itself
// - Is not configured to be updated on stale data
if (!displayer.isDrawn() || displayer.isRefreshOn() || !settings.isRefreshStaleData()) {
continue;
}
String uuid = null;
DataSet dataSet = settings.getDataSet();
if (dataSet != null) {
uuid = dataSet.getUUID();
}
DataSetLookup dataSetLookup = settings.getDataSetLookup();
if (uuid == null && dataSetLookup != null) {
uuid = dataSetLookup.getDataSetUUID();
}
if (uuid != null && targetUUID.equals(uuid)) {
displayer.redraw();
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy