Package de.scoopgmbh.copper.monitoring.client.ui.dashboard.result

Source Code of de.scoopgmbh.copper.monitoring.client.ui.dashboard.result.DashboardResultController

/*
* Copyright 2002-2013 SCOOP Software GmbH
*
* 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 de.scoopgmbh.copper.monitoring.client.ui.dashboard.result;

import java.net.URL;
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.TreeMap;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TabPane;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import de.scoopgmbh.copper.monitoring.client.adapter.GuiCopperDataProvider;
import de.scoopgmbh.copper.monitoring.client.form.Form;
import de.scoopgmbh.copper.monitoring.client.form.filter.EmptyFilterModel;
import de.scoopgmbh.copper.monitoring.client.form.filter.FilterResultControllerBase;
import de.scoopgmbh.copper.monitoring.client.ui.dashboard.result.engine.ProcessingEngineController;
import de.scoopgmbh.copper.monitoring.client.ui.dashboard.result.provider.ProviderController;
import de.scoopgmbh.copper.monitoring.core.model.MonitoringDataProviderInfo;
import de.scoopgmbh.copper.monitoring.core.model.MonitoringDataStorageContentInfo;
import de.scoopgmbh.copper.monitoring.core.model.MonitoringDataStorageInfo;
import de.scoopgmbh.copper.monitoring.core.model.ProcessingEngineInfo;
import de.scoopgmbh.copper.monitoring.core.model.WorkflowStateSummary;

public class DashboardResultController extends FilterResultControllerBase<EmptyFilterModel,DashboardResultModel> implements Initializable{
  private final GuiCopperDataProvider copperDataProvider;
  private final DashboardDependencyFactory dashboardPartsFactory;
 
  public DashboardResultController(GuiCopperDataProvider copperDataProvider, DashboardDependencyFactory dashboardPartsFactory) {
    super();
    this.copperDataProvider = copperDataProvider;
    this.dashboardPartsFactory = dashboardPartsFactory;
  }


    @FXML //  fx:id="countCol"
    private TableColumn<MonitoringDataStorageContentInfo, Long> countCol; // Value injected by FXMLLoader

    @FXML //  fx:id="engines"
    private TabPane engines; // Value injected by FXMLLoader

    @FXML //  fx:id="location"
    private TextField location; // Value injected by FXMLLoader

    @FXML //  fx:id="monitoringPane"
    private HBox monitoringPane; // Value injected by FXMLLoader

    @FXML //  fx:id="size"
    private TextField size; // Value injected by FXMLLoader

    @FXML //  fx:id="storageContentTable"
    private TableView<MonitoringDataStorageContentInfo> storageContentTable; // Value injected by FXMLLoader

    @FXML //  fx:id="typeCol"
    private TableColumn<MonitoringDataStorageContentInfo, String> typeCol; // Value injected by FXMLLoader


    @Override // This method is called by the FXMLLoader when initialization is complete
    public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
        assert countCol != null : "fx:id=\"countCol\" was not injected: check your FXML file 'DashboardResult.fxml'.";
        assert engines != null : "fx:id=\"engines\" was not injected: check your FXML file 'DashboardResult.fxml'.";
        assert location != null : "fx:id=\"location\" was not injected: check your FXML file 'DashboardResult.fxml'.";
        assert monitoringPane != null : "fx:id=\"monitoringPane\" was not injected: check your FXML file 'DashboardResult.fxml'.";
        assert size != null : "fx:id=\"size\" was not injected: check your FXML file 'DashboardResult.fxml'.";
        assert storageContentTable != null : "fx:id=\"storageContentTable\" was not injected: check your FXML file 'DashboardResult.fxml'.";
        assert typeCol != null : "fx:id=\"typeCol\" was not injected: check your FXML file 'DashboardResult.fxml'.";



        storageContentTable.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    }
 
  @Override
  public URL getFxmlResource() {
    return getClass().getResource("DashboardResult.fxml");
  }
 
  @Override
  public void showFilteredResult(List<DashboardResultModel> filteredlist, EmptyFilterModel usedFilter) {
    DashboardResultModel dashboardResultModel = filteredlist.get(0);
    showEngines(dashboardResultModel);
    showMonitoringData(dashboardResultModel);
    showDataStorage(dashboardResultModel);
  }

  private void showDataStorage(DashboardResultModel dashboardResultModel) {
    MonitoringDataStorageInfo storageInfo = dashboardResultModel.monitoringDataStorageInfo;
    boolean storageChanged = true;
    if(storageChanged) {
      DecimalFormat format = new DecimalFormat("#0.000");
      double deltatInS= (storageInfo.getMax().getTime()-storageInfo.getMin().getTime())/1000;
     
      size.setText(format.format(storageInfo.getSizeInMb())+" mb ("+format.format(storageInfo.getSizeInMb()/deltatInS*1000)+" kb/s)");
      location.setText(storageInfo.getPath());
      storageContentTable.getItems().clear();
      storageContentTable.getItems().addAll(storageInfo.getMonitoringDataStorageContentInfo());
     
      typeCol.setCellValueFactory(new PropertyValueFactory<MonitoringDataStorageContentInfo,String>("type"));
      countCol.setCellValueFactory(new PropertyValueFactory<MonitoringDataStorageContentInfo,Long>("count"));
    }
  }

  private final Map<String, ProcessingEngineController> engineControllers = new TreeMap<String, ProcessingEngineController>();
  private void showEngines(DashboardResultModel dashboardResultModel) {
    Set<String> engineIds = new HashSet<String>();
    for (ProcessingEngineInfo processingEngineInfo: dashboardResultModel.engines){
      engineIds.add(processingEngineInfo.getId());
    }
    boolean enginesChanged = !engineIds.equals(engineControllers.keySet());
    if(enginesChanged) {
      engineControllers.clear();
      engines.getTabs().clear();   
      for (ProcessingEngineInfo processingEngineInfo: dashboardResultModel.engines){
        Form<ProcessingEngineController> engineForm = dashboardPartsFactory.createEngineForm(engines,processingEngineInfo,dashboardResultModel);       
        String id = processingEngineInfo.getId();
        engineControllers.put(id, engineForm.getController());
        engineForm.show();
      }
    } else {
      for (ProcessingEngineInfo processingEngineInfo: dashboardResultModel.engines){
        String id = processingEngineInfo.getId();
        ProcessingEngineController controller = engineControllers.get(id);
        controller.setProcessingEngineInfo(processingEngineInfo);
      }     
    }
  }

  private final Map<String, ProviderController> monitoringDataProviders = new TreeMap<String, ProviderController>();
  private void showMonitoringData(DashboardResultModel dashboardResultModel) {
    Set<String> monitoringDataNames = new HashSet<String>();
    for (MonitoringDataProviderInfo monitoringDataProviderInfo: dashboardResultModel.providers) {
      monitoringDataNames.add(monitoringDataProviderInfo.getName());
    }
    boolean monitoringDataChanged = !monitoringDataNames.equals(monitoringDataProviders.keySet());
    if(monitoringDataChanged) {
      System.err.println("monitoringDataChanged. New names: " + monitoringDataNames);
      monitoringDataProviders.clear();
      monitoringPane.getChildren().clear();
      for (MonitoringDataProviderInfo monitoringDataProviderInfo: dashboardResultModel.providers){
        final BorderPane pane = new BorderPane();
        monitoringPane.getChildren().add(pane);
        Form<ProviderController> providerForm = dashboardPartsFactory.createMonitoringDataProviderForm(monitoringDataProviderInfo,pane);
        String name = monitoringDataProviderInfo.getName();
        monitoringDataProviders.put(name, providerForm.getController());
        providerForm.show();
      }
    } else {
      for(int i=0; i<dashboardResultModel.providers.size(); i++) {
        MonitoringDataProviderInfo providerInfo = dashboardResultModel.providers.get(i);
        String name = providerInfo.getName();
        ProviderController controller = monitoringDataProviders.get(name);
        String status = providerInfo.getStatus();
        controller.getStatus().setText(status);
      }
    }
  }

  @Override
  public List<DashboardResultModel> applyFilterInBackgroundThread(EmptyFilterModel filter) {
    List<ProcessingEngineInfo> engines = copperDataProvider.getEngineList();
    Map<String, WorkflowStateSummary> engineIdToStateSummery = new HashMap<String, WorkflowStateSummary>();
    for (ProcessingEngineInfo processingEngineInfo: engines){
      engineIdToStateSummery.put(processingEngineInfo.getId(), copperDataProvider.getCopperLoadInfo(processingEngineInfo));
    }
    return Arrays.asList(new DashboardResultModel(engineIdToStateSummery,engines,
        copperDataProvider.getMonitoringDataProvider(),
        copperDataProvider.getMonitoringStorageInfo()));
  }
 
  @Override
  public void clear() {
  }
}
TOP

Related Classes of de.scoopgmbh.copper.monitoring.client.ui.dashboard.result.DashboardResultController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.