SequenceElementsTableModel.java

/**
 * Copyright (c) 2015 European Organisation for Nuclear Research (CERN), All Rights Reserved.
 */

package cern.accsoft.steering.jmad.gui.panels.var;

import java.util.List;

import javax.swing.table.AbstractTableModel;

import cern.accsoft.steering.jmad.domain.elem.Element;
import com.google.common.collect.ImmutableList;

public class SequenceElementsTableModel extends AbstractTableModel {

    private static final long serialVersionUID = 1L;

    private List<ElementPosition> data = ImmutableList.of();
    private String modelName;

    @Override
    public int getRowCount() {
        return data.size();
    }

    @Override
    public int getColumnCount() {
        return 2;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        ElementPosition rowElement = data.get(rowIndex);
        if (columnIndex == 0) {
            return rowElement.element;
        }
        if (columnIndex == 1) {
            return rowElement.position;
        }
        return null;
    }

    @Override
    public String getColumnName(int column) {
        if (column == 0) {
            return "Element";
        }
        if (column == 1) {
            return "Position";
        }
        return super.getColumnName(column);
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        if (columnIndex == 0) {
            return Element.class;
        }
        return Double.class;
    }

    public void updateElements(List<Element> elements) {
        ImmutableList.Builder<ElementPosition> builder = ImmutableList.builder();
        for (Element element : elements) {
            builder.add(new ElementPosition(element, element.getPosition().getValue()));
        }
        this.data = builder.build();
        fireTableDataChanged();
    }

    public String getModelName() {
        return modelName;
    }

    public void setModelName(String modelName) {
        this.modelName = modelName;
    }

    private static class ElementPosition {
        private final Element element;
        private final double position;

        public ElementPosition(Element element, double position) {
            this.element = element;
            this.position = position;
        }
    }
}