public static BOMColumnDescription create(BOMColumn column) {
        switch (column) {
            case ID:
                return new BOMColumnDescription<String>(column.ordinal(), "id", "ID", 4, new TextFormat(), new CountingAggregator());
            case TITLE:
                return new BOMColumnDescription<String>(column.ordinal(), "title", "TITLE", 0, null, new StringAggregator("TOTAL"));
            case QUANTITY:
                return new BOMColumnDescription<Double>(column.ordinal(), "qty", "QTY", 3, new DecimalFormat(), new DoubleAggregator(NumericAggregationType.SUM));
            case COST:
                return new BOMColumnDescription<Double>(column.ordinal(), "cost", "COST", 9, NumberFormat.getCurrencyInstance(), new DoubleAggregator(NumericAggregationType.SUM));
            case VENDOR:
                return new BOMColumnDescription<String>(column.ordinal(), "vendor", "VENDOR", 20, new TextFormat(), new StringAggregator("TOTAL"));
            case URL:
                return new BOMColumnDescription<String>(column.ordinal(), "url", "URL", 0, null, new StringAggregator("TOTAL"));
            case PROJECT:
                return new BOMColumnDescription<String>(column.ordinal(), "project", "PROJECT", 10, new TextFormat(), new StringAggregator("TOTAL"));
            case SOURCE:
                return new BOMColumnDescription<String>(column.ordinal(), "source", "SOURCE", 0, null, new StringAggregator("TOTAL"));
        }

        throw new RuntimeException("Unknown BOMColumn " + column);
    }