package com.ecep.contract.controller.table.cell;

import javafx.beans.property.StringProperty;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.util.Callback;
import org.springframework.util.StringUtils;

/**
 * 文件路径单元格
 * 用于显示文件路径，根据根路径截取相对路径
 * 若文件路径以根路径开头，则截取相对路径，否则显示完整路径
 * 若根路径为空，则显示完整路径
 */
public class FilePathTableCell<V> extends TableCell<V, String> {

    private StringProperty rootPathProperty;

    /**
     * 创建一个用于表格列的单元格工厂
     */
    public static <T> Callback<TableColumn<T, String>, TableCell<T, String>> forTableColumn(
            StringProperty rootPath) {
        return param -> new FilePathTableCell<>(rootPath);
    }

    public FilePathTableCell(StringProperty parentPath) {
        this.rootPathProperty = parentPath;
    }

    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);
        if (empty || !StringUtils.hasText(item)) {
            setText("");
            return;
        }

        String path = this.rootPathProperty.get();
        if (StringUtils.hasText(path)) {
            if (item.startsWith(path)) {
                item = "~" + item.substring(path.length());
            }
        }
        setText(item);
    }
}
