gt:             if (lower > upper) {
context: /*
   * Copyright 2006-2015 The MZmine 2 Development Team
   * 
   * This file is part of MZmine 2.
   * 
   * MZmine 2 is free software; you can redistribute it and/or modify it under the
   * terms of the GNU General Public License as published by the Free Software
   * Foundation; either version 2 of the License, or (at your option) any later
   * version.
   * 
   * MZmine 2 is distributed in the hope that it will be useful, but WITHOUT ANY
   * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
   * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
   * 
   * You should have received a copy of the GNU General Public License along with
   * MZmine 2; if not, write to the Free Software Foundation, Inc., 51 Franklin St,
   * Fifth Floor, Boston, MA 02110-1301 USA
   */
  
  package io.github.mzmine.util.jfreechart;
  
  import java.net.URL;
  import java.text.NumberFormat;
  
  import org.jfree.chart.axis.NumberAxis;
  import org.jfree.chart.axis.NumberTickUnit;
  import org.jfree.chart.plot.XYPlot;
  
  import javafx.event.ActionEvent;
  import javafx.fxml.FXML;
  import javafx.fxml.FXMLLoader;
  import javafx.scene.control.Alert;
  import javafx.scene.control.Alert.AlertType;
  import javafx.scene.control.Button;
  import javafx.scene.control.ButtonType;
  import javafx.scene.control.CheckBox;
  import javafx.scene.control.Dialog;
  import javafx.scene.control.Label;
  import javafx.scene.control.TextField;
  import javafx.scene.control.TextFormatter;
  import javafx.scene.image.ImageView;
  import javafx.scene.layout.GridPane;
  import javafx.stage.Window;
  import javafx.util.converter.NumberStringConverter;
  
  public class ManualZoomDialog extends Dialog<Void> {
  
      private static final String DIALOG_FXML = "ManualZoomDialog.fxml";
  
      private NumberAxis xAxis, yAxis;
  
      @FXML
      private Label xAxisLabel;
  
      @FXML
      private Label yAxisLabel;
  
      @FXML
      private TextField xAxisRangeMin;
  
      @FXML
      private TextField yAxisRangeMin;
  
      @FXML
      private TextField xAxisRangeMax;
  
      @FXML
      private TextField yAxisRangeMax;
  
      @FXML
      private TextField xAxisTickSize;
  
      @FXML
      private TextField yAxisTickSize;
  
      @FXML
      private CheckBox xAxisAutoRange;
  
      @FXML
      private CheckBox yAxisAutoRange;
  
      @FXML
      private CheckBox xAxisAutoTickSize;
  
      @FXML
      private CheckBox yAxisAutoTickSize;
  
      /**
       * Constructor
       */
      public ManualZoomDialog(Window parent, XYPlot plot) {
  
          initOwner(parent);
  
          setTitle("Manual zoom");
          
          setGraphic(new ImageView("file:icons/axesicon.png"));
  
          getDialogPane().getButtonTypes().addAll(ButtonType.OK,
                  ButtonType.CANCEL);
  
          xAxis = (NumberAxis) plot.getDomainAxis();
          yAxis = (NumberAxis) plot.getRangeAxis();
  
          try {
              URL layersDialogFXML = getClass().getResource(DIALOG_FXML);
              FXMLLoader loader = new FXMLLoader(layersDialogFXML);
              loader.setController(this);
              GridPane grid = loader.load();
              getDialogPane().setContent(grid);
          } catch (Exception e) {
              e.printStackTrace();
          }
  
          final Button btOk = (Button) getDialogPane()
                  .lookupButton(ButtonType.OK);
          btOk.addEventFilter(ActionEvent.ACTION, event -> {
              commitChanges(event);
          });
  
      }
  
      @FXML
      public void initialize() {
  
          NumberFormat xAxisFormatter;
          if (xAxis instanceof NumberAxis)
              xAxisFormatter = ((NumberAxis) xAxis).getNumberFormatOverride();
          else
              xAxisFormatter = NumberFormat.getNumberInstance();
  
          NumberFormat yAxisFormatter;
          if (yAxis instanceof NumberAxis)
              yAxisFormatter = ((NumberAxis) yAxis).getNumberFormatOverride();
          else
              yAxisFormatter = NumberFormat.getNumberInstance();
  
          xAxisLabel.setText(xAxis.getLabel());
          yAxisLabel.setText(yAxis.getLabel());
  
          xAxisRangeMin.setTextFormatter(
                  new TextFormatter<>(new NumberStringConverter(xAxisFormatter)));
          xAxisRangeMin.disableProperty().bind(xAxisAutoRange.selectedProperty());
          xAxisRangeMin.setText(String.valueOf(xAxis.getLowerBound()));
          xAxisRangeMax.setTextFormatter(
                  new TextFormatter<>(new NumberStringConverter(xAxisFormatter)));
          xAxisRangeMax.disableProperty().bind(xAxisAutoRange.selectedProperty());
          xAxisRangeMax.setText(String.valueOf(xAxis.getUpperBound()));
          xAxisAutoRange.setSelected(xAxis.isAutoRange());
  
          yAxisRangeMin.setTextFormatter(
                  new TextFormatter<>(new NumberStringConverter(yAxisFormatter)));
          yAxisRangeMin.setText(String.valueOf(yAxis.getLowerBound()));
          yAxisRangeMin.disableProperty().bind(yAxisAutoRange.selectedProperty());
          yAxisRangeMax.setTextFormatter(
                  new TextFormatter<>(new NumberStringConverter(yAxisFormatter)));
          yAxisRangeMax.setText(String.valueOf(yAxis.getUpperBound()));
          yAxisRangeMax.disableProperty().bind(yAxisAutoRange.selectedProperty());
          yAxisAutoRange.setSelected(yAxis.isAutoRange());
  
          xAxisTickSize.disableProperty()
                  .bind(xAxisAutoTickSize.selectedProperty());
          xAxisTickSize.setText(String.valueOf(xAxis.getTickUnit().getSize()));
          xAxisAutoTickSize.setSelected(xAxis.isAutoTickUnitSelection());
  
          yAxisTickSize.setTextFormatter(
                  new TextFormatter<>(new NumberStringConverter(yAxisFormatter)));
          yAxisTickSize.setText(String.valueOf(yAxis.getTickUnit().getSize()));
          yAxisTickSize.disableProperty()
                  .bind(yAxisAutoTickSize.selectedProperty());
          yAxisAutoTickSize.setSelected(yAxis.isAutoTickUnitSelection());
  
      }
  
      private void commitChanges(ActionEvent event) {
          
          if (xAxisAutoRange.isSelected()) {
              xAxis.setAutoRange(true);
          } else {
  
              double lower = Double.parseDouble(xAxisRangeMin.getText());
              double upper = Double.parseDouble(xAxisRangeMax.getText());
              if (lower > upper) {
                  Alert alert = new Alert(AlertType.ERROR,
                          "Invalid " + xAxis.getLabel() + " range.");
                  alert.show();
                  event.consume();
                  return;
              }
              xAxis.setRange(lower, upper);
          }
  
          if (xAxisAutoTickSize.isSelected()) {
              xAxis.setAutoTickUnitSelection(true);
          } else {
              double tickSize = Double.parseDouble(xAxisTickSize.getText());
              xAxis.setTickUnit(new NumberTickUnit(tickSize));
          }
  
          if (yAxisAutoRange.isSelected()) {
              yAxis.setAutoRange(true);
          } else {
  
              double lower = Double.parseDouble(yAxisRangeMin.getText());
              double upper = Double.parseDouble(yAxisRangeMax.getText());
  