Package org.adoptopenjdk.jitwatch.ui.suggestion

Source Code of org.adoptopenjdk.jitwatch.ui.suggestion.SuggestStage

/*
* Copyright (c) 2013, 2014 Chris Newland.
* Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD
* Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki
*/
package org.adoptopenjdk.jitwatch.ui.suggestion;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.adoptopenjdk.jitwatch.core.JITWatchConstants;
import org.adoptopenjdk.jitwatch.suggestion.Suggestion;
import org.adoptopenjdk.jitwatch.ui.JITWatchUI;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.stage.WindowEvent;

public class SuggestStage extends Stage
{
  private VBox vbox;
  private TableView<SuggestTableRow> tableView;
  private ObservableList<SuggestTableRow> obList = FXCollections.observableArrayList();

  private Set<String> filterPackageSet = new HashSet<>();

  private List<Suggestion> suggestions;
 
  public SuggestStage(final JITWatchUI parent, List<Suggestion> suggestions)
  {
    this.suggestions = suggestions;

    MemberTableCell.setTriViewAccessor(parent);

    initStyle(StageStyle.DECORATED);

    BorderPane borderPane = new BorderPane();

    vbox = new VBox();
   
    SuggestionPackageFilter filter = new SuggestionPackageFilter(this);

    borderPane.setTop(filter);

    borderPane.setCenter(vbox);

    Scene scene = new Scene(borderPane, JITWatchUI.WINDOW_WIDTH, JITWatchUI.WINDOW_HEIGHT);

    tableView = SuggestionTableUtil.buildTableSuggestion(obList);
   
    filter.prefWidthProperty().bind(scene.widthProperty());

    vbox.getChildren().add(tableView);

    tableView.prefHeightProperty().bind(scene.heightProperty());

    setTitle("JITWatch Code Suggestions");

    setScene(scene);

    setOnCloseRequest(new EventHandler<WindowEvent>()
    {
      @Override
      public void handle(WindowEvent arg0)
      {
        parent.handleStageClosed(SuggestStage.this);
      }
    });
   
    display();
  }

  private void display()
  {
    obList.clear();
   
    if (suggestions.size() == 0)
    {
      vbox.getChildren().clear();
      vbox.getChildren().add(new Label("No suggestions"));
    }
    else
    {
      Collections.sort(suggestions, new Comparator<Suggestion>()
      {
        @Override
        public int compare(Suggestion s1, Suggestion s2)
        {
          return Integer.compare(s2.getScore(), s1.getScore());
        }
      });

      for (Suggestion suggestion : suggestions)
      {
        boolean show = false;

        if (filterPackageSet.size() == 0)
        {
          show = true;
        }
        else
        {
          for (String allowedPackage : filterPackageSet)
          {
            if (suggestion.getCaller().getFullyQualifiedMemberName().startsWith(allowedPackage.trim()))
            {
              show = true;
            }
          }
        }

        if (show)
        {
          obList.add(new SuggestTableRow(suggestion));
        }
      }
    }
  }

  public void setFilter(String packageFilter)
  {
    String[] packages = packageFilter.split(JITWatchConstants.S_COMMA);

    filterPackageSet.clear();
    filterPackageSet.addAll(Arrays.asList(packages));
    display();
  }
}
TOP

Related Classes of org.adoptopenjdk.jitwatch.ui.suggestion.SuggestStage

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.