class JoinWithSeparator implements AttributeRowsMergeStrategy {

    public static final String SEPARATOR_SAVED_PREFERENCES = "JoinWithSeparator_Separator";
    private static final String DEFAULT_SEPARATOR = ", ";
    private Element[] rows;
    private Column column;
    private String separator, result;

    public JoinWithSeparator() {
        separator =
            NbPreferences.forModule(JoinWithSeparator.class).get(SEPARATOR_SAVED_PREFERENCES, DEFAULT_SEPARATOR);
    }

    @Override
    public void setup(Element[] rows, Element selectedRow, Column column) {
        this.rows = rows;
        this.column = column;
    }

    @Override
    public Object getReducedValue() {
        return result;
    }

    @Override
    public void execute() {<FILL_FUNCTION_BODY>}

    @Override
    public String getName() {
        return NbBundle.getMessage(AverageNumber.class, "JoinWithSeparator.name");
    }

    @Override
    public String getDescription() {
        return NbBundle.getMessage(AverageNumber.class, "JoinWithSeparator.description");
    }

    @Override
    public boolean canExecute() {
        return Object[].class.isAssignableFrom(column.getTypeClass()) || column.getTypeClass() == String.class;
    }

    @Override
    public ManipulatorUI getUI() {
        return new JoinWithSeparatorUI();
    }

    @Override
    public int getType() {
        return 0;
    }

    @Override
    public int getPosition() {
        return 100;
    }

    @Override
    public Icon getIcon() {
        return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/join.png", false);
    }

    public String getSeparator() {
        return separator;
    }

    public void setSeparator(String separator) {
        this.separator = separator;
    }
}

        NbPreferences.forModule(JoinWithSeparator.class).put(SEPARATOR_SAVED_PREFERENCES, separator);

        Object value;
        StringBuilder sb;
        final int rowsCount = rows.length;

        TimeFormat timeFormat = column.getTable().getGraph().getModel().getTimeFormat();
        DateTimeZone timeZone = column.getTable().getGraph().getModel().getTimeZone();

        sb = new StringBuilder();
        for (int i = 0; i < rows.length; i++) {
            value = rows[i].getAttribute(column);
            if (value != null) {
                sb.append(AttributeUtils.print(value, timeFormat, timeZone));
                if (i < rowsCount - 1) {
                    sb.append(separator);
                }
            }
        }
        result = sb.toString();
    
<no_super_class>