/* * */ package org.lightview.presentation.applications.ejbs; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.Parent; import javafx.scene.control.ListView; import javafx.scene.control.MultipleSelectionModel; import javafx.scene.control.SelectionMode; import javafx.scene.control.SplitPane; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.GridPane; import org.lightview.business.pool.boundary.EJBPoolMonitoring; import org.lightview.business.pool.entity.PoolStatistics; import org.lightview.model.Application; import org.lightview.presentation.applications.methods.MethodsPresenter; import org.lightview.presentation.applications.methods.MethodsView; import org.lightview.presentation.applications.pool.PoolPresenter; import org.lightview.presentation.applications.pool.PoolView; import javax.inject.Inject; import java.net.URL; import java.util.Collections; import java.util.List; import java.util.ResourceBundle; import java.util.Set; /** * * @author adam-bien.com */ public class EJBsPresenter implements Initializable { @FXML ListView<String> ejbsList; @FXML GridPane statisticsPane; @FXML AnchorPane methods; @FXML SplitPane splitPane; private ObservableList<String> ejbs; private String monitoredApplication; @Inject EJBPoolMonitoring poolMonitoring; @Override public void initialize(URL url, ResourceBundle rb) { prepareList(); } private void prepareList() { this.ejbs = ejbsList.getItems(); MultipleSelectionModel<String> selectionModel = this.ejbsList.getSelectionModel(); selectionModel.setSelectionMode(SelectionMode.SINGLE); selectionModel.selectedItemProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> ov, String oldValue, String newValue) { ejbSelected(newValue); } }); } public void showComponentsForApp(Set<Application> applications, String newSelection) { this.monitoredApplication = newSelection; ejbs.clear(); List<String> componentsForApplication = getComponentsForApplication(applications, newSelection); ejbs.addAll(componentsForApplication); } private List<String> getComponentsForApplication(Set<Application> applications, String newSelection) { for (Application application : applications) { if (application.getApplicationName().equalsIgnoreCase(newSelection)) { return application.getComponents(); } } return Collections.EMPTY_LIST; } void ejbSelected(String selectedEjb) { activateStatistics(selectedEjb); } void activateStatistics(String ejb) { activatePoolStatistics(ejb); activateMethodStatistics(ejb); } private void activatePoolStatistics(String ejb) { PoolView beansCreatedView = new PoolView(); PoolPresenter beansCreatedPresenter = (PoolPresenter) beansCreatedView.getPresenter(); beansCreatedPresenter.monitor((PoolStatistics p) -> p.getTotalBeansCreated() , "Created beans", "Number of beans", this.monitoredApplication, ejb); PoolView beansDestroyedView = new PoolView(); PoolPresenter beansDestroyedViewPresenter = (PoolPresenter) beansDestroyedView.getPresenter(); beansDestroyedViewPresenter.monitor((PoolStatistics p) -> p.getTotalBeansDestroyed() , "Destroyed beans", "Number of beans", this.monitoredApplication, ejb); PoolView totalThreadsWaitingView = new PoolView(); PoolPresenter totalThreadsWaitingViewPresenter = (PoolPresenter) totalThreadsWaitingView.getPresenter(); totalThreadsWaitingViewPresenter.monitor((PoolStatistics p) -> p.getCurrentThreadsWaiting() , "Total Threads Waiting", "Number of beans", this.monitoredApplication, ejb); PoolView totalThreadsWaitingHighView = new PoolView(); PoolPresenter totalThreadsWaitingViewPresenterHigh = (PoolPresenter) totalThreadsWaitingHighView.getPresenter(); totalThreadsWaitingViewPresenterHigh.monitor((PoolStatistics p) -> p.getThreadsWaitingHighwatermark() , "Total Threads Waiting High", "Number of beans", this.monitoredApplication, ejb); this.statisticsPane.getChildren().clear(); this.statisticsPane.add(beansCreatedView.getView(),0,0); this.statisticsPane.add(beansDestroyedView.getView(),0,1); this.statisticsPane.add(totalThreadsWaitingView.getView(),1,0); this.statisticsPane.add(totalThreadsWaitingHighView.getView(),1,1); } private void activateMethodStatistics(String ejb) { MethodsView methodsView = new MethodsView(); MethodsPresenter methodsPresenter = (MethodsPresenter) methodsView.getPresenter(); methodsPresenter.monitor(this.monitoredApplication, ejb); methods.getChildren().clear(); final Parent view = methodsView.getView(); AnchorPane.setRightAnchor(view, 0.0); AnchorPane.setLeftAnchor(view, 0.0); AnchorPane.setBottomAnchor(view, 0.0); AnchorPane.setTopAnchor(view, 0.0); methods.getChildren().add(view); } }