// Path: src/main/java/org/jftclient/config/dao/HostDao.java
// public interface HostDao extends CrudRepository<Host, Long> {
// 
//     @Query("select h from Host h where h.hostname = :name")
//     Host getHostByName(@Param("name") String name);
// 
//     @Query("select h from Host h")
//     List<Host> getAll();
// 
//     @Query("select h.hostname from Host h")
//     List<String> getHostNames();
// }
// 
// Path: src/main/java/org/jftclient/config/domain/Host.java
// @Entity
// public class Host implements Comparable<Host> {
//     @Id
//     @GeneratedValue(strategy = GenerationType.AUTO)
//     private long id;
//     private String username;
//     private String hostname;
//     private String password;
// 
//     public long getId() {
//         return id;
//     }
// 
//     public void setId(long id) {
//         this.id = id;
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public String getHostname() {
//         return hostname;
//     }
// 
//     public void setHostname(String hostname) {
//         this.hostname = hostname;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         Host host = (Host) o;
// 
//         if (hostname != null ? !hostname.equals(host.hostname) : host.hostname != null) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = hostname != null ? hostname.hashCode() : 0;
//         result = 31 * result;
//         return result;
//     }
// 
//     @Override
//     public int compareTo(Host o) {
//         return hostname.compareTo(o.getHostname());
//     }
// }


import org.jftclient.config.dao.HostDao;
import org.jftclient.config.domain.Host;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.ListCell;
import javafx.scene.control.MenuItem;
package org.jftclient;



/**
 * @author sergei.malafeev
 */
public class HostCell extends ListCell<String> {
    private ContextMenu contextMenu;
    private HostDao hostDao;
    private ComboBox<String> hostField;

    public HostCell(HostDao hostDao, ComboBox<String> hostField) {
        this.hostDao = hostDao;
        this.hostField = hostField;

        MenuItem deleteMenu = new MenuItem("Delete");
        deleteMenu.setOnAction(event -> deleteItems());

        contextMenu = new ContextMenu();
        contextMenu.getItems().addAll(deleteMenu);
    }

    @Override
    public void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if (!empty && item != null) {
            setContextMenu(contextMenu);
        }

        setText(item == null ? null : item);
        setGraphic(null);
    }

    private void deleteItems() {
        for (String host : getListView().getSelectionModel().getSelectedItems()) {
            Host h = hostDao.getHostByName(host);
            hostDao.delete(h);
        }
// Path: src/main/java/org/jftclient/config/dao/HostDao.java
// public interface HostDao extends CrudRepository<Host, Long> {
// 
//     @Query("select h from Host h where h.hostname = :name")
//     Host getHostByName(@Param("name") String name);
// 
//     @Query("select h from Host h")
//     List<Host> getAll();
// 
//     @Query("select h.hostname from Host h")
//     List<String> getHostNames();
// }
// 
// Path: src/main/java/org/jftclient/config/domain/Host.java
// @Entity
// public class Host implements Comparable<Host> {
//     @Id
//     @GeneratedValue(strategy = GenerationType.AUTO)
//     private long id;
//     private String username;
//     private String hostname;
//     private String password;
// 
//     public long getId() {
//         return id;
//     }
// 
//     public void setId(long id) {
//         this.id = id;
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public String getHostname() {
//         return hostname;
//     }
// 
//     public void setHostname(String hostname) {
//         this.hostname = hostname;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         Host host = (Host) o;
// 
//         if (hostname != null ? !hostname.equals(host.hostname) : host.hostname != null) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = hostname != null ? hostname.hashCode() : 0;
//         result = 31 * result;
//         return result;
//     }
// 
//     @Override
//     public int compareTo(Host o) {
//         return hostname.compareTo(o.getHostname());
//     }
// }


// Path: src/main/java/org/jftclient/HostCell.java
import org.jftclient.config.dao.HostDao;
import org.jftclient.config.domain.Host;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.ListCell;
import javafx.scene.control.MenuItem;

package org.jftclient;



/**
 * @author sergei.malafeev
 */
public class HostCell extends ListCell<String> {
    private ContextMenu contextMenu;
    private HostDao hostDao;
    private ComboBox<String> hostField;

    public HostCell(HostDao hostDao, ComboBox<String> hostField) {
        this.hostDao = hostDao;
        this.hostField = hostField;

        MenuItem deleteMenu = new MenuItem("Delete");
        deleteMenu.setOnAction(event -> deleteItems());

        contextMenu = new ContextMenu();
        contextMenu.getItems().addAll(deleteMenu);
    }

    @Override
    public void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if (!empty && item != null) {
            setContextMenu(contextMenu);
        }

        setText(item == null ? null : item);
        setGraphic(null);
    }

    private void deleteItems() {
        for (String host : getListView().getSelectionModel().getSelectedItems()) {
            Host h = hostDao.getHostByName(host);
            hostDao.delete(h);
        }
        getListView().getItems().setAll(hostDao.getHostNames());