Implemented a dirty update mechanism for the data mining frontend

This commit is contained in:
Lennart Hensler committed 2015-04-18 14:34:11 +02:00
1 parent fef56faa97
commit f815b5cbda
6 files changed
+53 -28

No files matched your search

@@ -7,6 +7,8 @@ import com.sap.sse.gwt.client.shared.components.Component;
public interface DataRetrieverChainDefinitionProvider extends Component<Settings> {
public void updateRetrieverChains();
public DataRetrieverChainDefinitionDTO getDataRetrieverChainDefinition();
public void addDataRetrieverChainDefinitionChangedListener(DataRetrieverChainDefinitionChangedListener listener);
@@ -7,6 +7,8 @@ import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
import com.sap.sse.gwt.client.shared.components.Component;
public interface StatisticProvider extends Component<Settings> {
public void updateExtractionFunctions();
public FunctionDTO getStatisticToCalculate();
@@ -21,6 +21,7 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.datamining.DataMiningControls;
import com.sap.sailing.gwt.ui.datamining.DataMiningServiceAsync;
import com.sap.sailing.gwt.ui.datamining.DataRetrieverChainDefinitionChangedListener;
import com.sap.sailing.gwt.ui.datamining.DataRetrieverChainDefinitionProvider;
import com.sap.sailing.gwt.ui.datamining.FilterSelectionProvider;
import com.sap.sailing.gwt.ui.datamining.GroupingChangedListener;
import com.sap.sailing.gwt.ui.datamining.SelectionChangedListener;
@@ -47,22 +48,27 @@ public class BufferingQueryDefinitionProviderWithControls extends AbstractQueryD
private static final int queryBufferTimeInMillis = 200;
private final Timer queryDefinitionReleaseTimer;
private boolean isUpdatingComponents;
private final DockLayoutPanel mainPanel;
private FlowPanel controlsPanel;
private StatisticProvider statisticProvider;
private SimpleDataRetrieverChainDefinitionProvider retrieverChainProvider;
private DataRetrieverChainDefinitionProvider retrieverChainProvider;
private MultiDimensionalGroupingProvider groupBySelectionPanel;
private FilterSelectionProvider selectionProvider;
public BufferingQueryDefinitionProviderWithControls(DataMiningSession session, StringMessages stringMessages, SailingServiceAsync sailingService, DataMiningServiceAsync dataMiningService, ErrorReporter errorReporter) {
super(stringMessages, sailingService, dataMiningService, errorReporter);
queryDefinitionReleaseTimer = new Timer() {
@Override
public void run() {
notifyQueryDefinitionChanged();
}
};
isUpdatingComponents = false;
mainPanel = new DockLayoutPanel(Unit.PX);
mainPanel.addNorth(createFunctionsPanel(), 92);
selectionProvider = new ListRetrieverChainFilterSelectionProvider(session, stringMessages, dataMiningService, errorReporter, retrieverChainProvider);
@@ -73,13 +79,6 @@ public class BufferingQueryDefinitionProviderWithControls extends AbstractQueryD
}
});
mainPanel.add(selectionProvider.getEntryWidget());
queryDefinitionReleaseTimer = new Timer() {
@Override
public void run() {
notifyQueryDefinitionChanged();
}
};
}
private Widget createFunctionsPanel() {
@@ -123,13 +122,42 @@ public class BufferingQueryDefinitionProviderWithControls extends AbstractQueryD
});
addControl(clearSelectionButton);
Button reloadButton = new Button(getStringMessages().reload());
reloadButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
//FIXME This is just a quick fix for bug 2176
isUpdatingComponents = true;
// This causes all other providers to update their components, if the selected
// statistic changed. If not, will the other providers update their components,
// when another statistic is selected.
// This works because, all other providers listen to the statistic provider in
// the current implementation.
statisticProvider.updateExtractionFunctions();
}
});
addControl(reloadButton);
SplitLayoutPanel controlsSplitPanel = new SplitLayoutPanel(15);
controlsSplitPanel.addWest(new ScrollPanel(statisticAndRetrieverChainPanel), 800);
controlsSplitPanel.addEast(new ScrollPanel(controlsPanel), 130);
controlsSplitPanel.addEast(new ScrollPanel(controlsPanel), 150);
controlsSplitPanel.add(groupBySelectionScrollPanel);
return controlsSplitPanel;
}
//FIXME This is just a quick fix for bug 2176
@Override
protected void notifyQueryDefinitionChanged() {
if (isUpdatingComponents) {
// This ensures, that the retriever chains are reloaded. This is necessary, because
// they have UUIDs, that change after a bundle refresh.
retrieverChainProvider.updateRetrieverChains();
isUpdatingComponents = false;
} else {
super.notifyQueryDefinitionChanged();
}
}
private void scheduleQueryDefinitionChanged() {
queryDefinitionReleaseTimer.schedule(queryBufferTimeInMillis);
}
@@ -27,6 +27,7 @@ import com.google.gwt.view.client.SingleSelectionModel;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.datamining.DataMiningServiceAsync;
import com.sap.sailing.gwt.ui.datamining.DataRetrieverChainDefinitionChangedListener;
import com.sap.sailing.gwt.ui.datamining.DataRetrieverChainDefinitionProvider;
import com.sap.sailing.gwt.ui.datamining.FilterSelectionPresenter;
import com.sap.sailing.gwt.ui.datamining.FilterSelectionProvider;
import com.sap.sailing.gwt.ui.datamining.SelectionChangedListener;
@@ -62,7 +63,7 @@ public class ListRetrieverChainFilterSelectionProvider implements FilterSelectio
public ListRetrieverChainFilterSelectionProvider(DataMiningSession session, StringMessages stringMessages,
DataMiningServiceAsync dataMiningService, ErrorReporter errorReporter,
SimpleDataRetrieverChainDefinitionProvider retrieverChainProvider) {
DataRetrieverChainDefinitionProvider retrieverChainProvider) {
this.session = session;
this.stringMessages = stringMessages;
this.dataMiningService = dataMiningService;
@@ -84,12 +84,13 @@ public class SimpleDataRetrieverChainDefinitionProvider implements DataRetriever
String currentSourceType = currentStatisticToCalculate == null ? null : currentStatisticToCalculate.getSourceTypeName();
currentStatisticToCalculate = newStatisticToCalculate;
if (!Objects.equals(currentSourceType, newStatisticToCalculate.getSourceTypeName())) {
updateAvailableRetrieverChains();
updateRetrieverChains();
}
}
}
private void updateAvailableRetrieverChains() {
@Override
public void updateRetrieverChains() {
dataMiningService.getDataRetrieverChainDefinitionsFor(currentStatisticToCalculate, LocaleInfo.getCurrentLocale().getLocaleName(),
new AsyncCallback<Iterable<DataRetrieverChainDefinitionDTO>>() {
@Override
@@ -69,7 +69,8 @@ public class SimpleStatisticProvider implements StatisticProvider {
updateExtractionFunctions();
}
private void updateExtractionFunctions() {
@Override
public void updateExtractionFunctions() {
dataMiningService.getAllStatistics(LocaleInfo.getCurrentLocale().getLocaleName(), new AsyncCallback<Iterable<FunctionDTO>>() {
@Override
@@ -78,24 +79,14 @@ public class SimpleStatisticProvider implements StatisticProvider {
if (extractionFunctions.iterator().hasNext()) {
extractionFunctionSet.addAll(extractionFunctions);
StrippedFunctionDTO previousExtractionFunction = extractionFunctionListBox.getValue();
updateExtractionFunctionListBox();
StrippedFunctionDTO newExtractionFunction = extractionFunctionListBox.getValue();
String previousBaseDataType = baseDataTypeListBox.getValue();
updateBaseDataTypeListBox();
String newBaseDataType = baseDataTypeListBox.getValue();
if (!newExtractionFunction.equals(previousExtractionFunction) ||
!newBaseDataType.equals(previousBaseDataType)) {
notifyListeners();
}
} else {
clearListBox(extractionFunctionListBox);
clearListBox(baseDataTypeListBox);
notifyListeners();
}
notifyListeners();
}
@Override