@Override
  // This method is called by the FXMLLoader when initialization is complete
  public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
    assert civilianAdministratorCheckBox != null
        : "fx:id=\"civilianAdministratorCheckBox\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert officialsFilteredTableView != null
        : "fx:id=\"filteredPersonnelTableView\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert groundOfficerFilterCheckBox != null
        : "fx:id=\"groundOfficerFilterCheckBox\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert navalOfficerFilterCheckBox != null
        : "fx:id=\"navalOfficerFilterCheckBox\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert personnelNameColumn != null
        : "fx:id=\"personnelNameColumn\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert personnelRankColumn != null
        : "fx:id=\"personnelRankColumn\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";

    assert scientistFilterCheckBox != null
        : "fx:id=\"scientistFilterCheckBox\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert skillFilterComboBox != null
        : "fx:id=\"skillFilterComboBox\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert skillFilterMaxValueColumn != null
        : "fx:id=\"skillFilterMaxValueColumn\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert skillFilterMaxValueComponent != null
        : "fx:id=\"skillFilterMaxValueComponent\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert skillFilterMinValueColumn != null
        : "fx:id=\"skillFilterMinValueColumn\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert skillFilterMinValueComponent != null
        : "fx:id=\"skillFilterMinValueComponent\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert skillFiltersNameColumn != null
        : "fx:id=\"skillFiltersNameColumn\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert skillFiltersTableView != null
        : "fx:id=\"skillFiltersTableView\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert assignmentsFilterComboBox != null;
    assert assigmentsListView != null;
    assert createTeamMenuItem != null
        : "fx:id=\"createTeamMenuItem\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert assignOfficialMenuItem != null;
    assert skillsTableView != null
        : "fx:id=\"skillsTableView\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert skillColumn != null
        : "fx:id=\"skillColumn\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    assert levelColumn != null
        : "fx:id=\"levelColumn\" was not injected: check your FXML file 'PersonnelManagementScreen.fxml'.";
    // initialize your logic here: all @FXML variables will have been
    // injected
    initializeCompositeMatcher();

    initializeFilteredPersonnelTableView();

    initializeSkillFilterTab();

    initializeAssignmentListViewAndFilters();

    createTeamMenuItem
        .disableProperty()
        .bind(
            Bindings.select(officialsFilteredTableView.selectionModelProperty(), "selectedItem")
                .isNull());

    final ObjectBinding<Official> selectedPersonnel =
        Bindings.select(officialsFilteredTableView.selectionModelProperty(), "selectedItem");

    detailsPaneController
        .officialProperty()
        .bind(officialsFilteredTableView.getSelectionModel().selectedItemProperty());
    skillColumn.setCellValueFactory(
        new Callback<CellDataFeatures<SkillLevel, String>, ObservableValue<String>>() {
          public ObservableValue<String> call(CellDataFeatures<SkillLevel, String> p) {
            SkillLevel value = p.getValue();
            return Bindings.selectString(value, "skill", "name");
          }
        });
    levelColumn.setCellValueFactory(new PropertyValueFactory<SkillLevel, Integer>("level"));

    selectedPersonnel.addListener(
        new ChangeListener<Official>() {
          @Override
          public void changed(
              ObservableValue<? extends Official> arg0, Official arg1, Official arg2) {
            updateSkills();
          }
        });

    updateOfficialFiltersResult();
  }