package games.strategy.engine.data.properties; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.swing.JComponent; import javax.swing.JTable; /** * @param <T> The type of elements in the collection. */ public class CollectionProperty<T> extends AEditableProperty { private static final long serialVersionUID = 5338055034530377261L; private List<T> m_values; /** * @param name * name of the property. * @param description * description of the property. * @param values * collection of values. */ public CollectionProperty(final String name, final String description, final Collection<T> values) { super(name, description); m_values = new ArrayList<>(values); } @Override public Object getValue() { return m_values; } public List<T> getValueT() { return m_values; } @Override @SuppressWarnings("unchecked") public void setValue(final Object value) throws ClassCastException { m_values = (List<T>) value; } public void setValueT(final List<T> value) { m_values = value; } @Override public int getRowsNeeded() { return (m_values == null ? 1 : Math.max(1, m_values.size())); } @Override public JComponent getEditorComponent() { if (m_values == null) { return new JTable(); } final Object[][] tableD = new Object[m_values.size()][1]; for (int i = 0; i < m_values.size(); i++) { tableD[i][0] = m_values.get(i); } final JTable table = new JTable(tableD, new Object[] {"Values: "}); table.addFocusListener(new FocusListener() { @Override public void focusGained(final FocusEvent e) {} @Override public void focusLost(final FocusEvent e) { // TODO: change m_values } }); return table; } @Override public boolean validate(final Object value) { if (value == null) { return false; } return List.class.isAssignableFrom(value.getClass()); } }