/* * Encog(tm) Workbench v3.4 * http://www.heatonresearch.com/encog/ * https://github.com/encog/encog-java-workbench * * Copyright 2008-2016 Heaton Research, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * For more information on Heaton Research copyrights, licenses * and trademarks visit: * http://www.heatonresearch.com/copyright */ package org.encog.workbench.models; import java.util.ArrayList; import java.util.List; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; import org.encog.ml.data.MLData; import org.encog.ml.data.MLDataPair; import org.encog.ml.data.basic.BasicMLData; import org.encog.ml.data.basic.BasicMLDataPair; import org.encog.ml.data.basic.BasicMLDataSet; public class TrainingSetTableModel implements TableModel { private final BasicMLDataSet data; private final List<TableModelListener> listeners = new ArrayList<TableModelListener>(); public TrainingSetTableModel(final BasicMLDataSet data) { this.data = data; } public void addIdealColumn() { for (final MLDataPair pair : this.data) { final BasicMLData ideal = (BasicMLData) pair.getIdeal(); final double[] d = new double[ideal.size() + 1]; for (int i = 0; i < ideal.size(); i++) { d[i] = ideal.getData(i); } ideal.setData(d); } final TableModelEvent tce = new TableModelEvent(this, TableModelEvent.HEADER_ROW); notifyListeners(tce); } public void addInputColumn() { for (final MLDataPair pair : this.data) { final BasicMLData input = (BasicMLData) pair.getInput(); final double[] d = new double[input.size() + 1]; for (int i = 0; i < input.size(); i++) { d[i] = input.getData(i); } input.setData(d); } final TableModelEvent tce = new TableModelEvent(this, TableModelEvent.HEADER_ROW); notifyListeners(tce); } public void addRow(final int row) { final int idealSize = this.data.getIdealSize(); final int inputSize = this.data.getInputSize(); final MLData idealData = new BasicMLData(idealSize); final MLData inputData = new BasicMLData(inputSize); final MLDataPair pair = new BasicMLDataPair(inputData, idealData); if (row == -1) { this.data.getData().add(pair); } else { this.data.getData().add(row, pair); } final TableModelEvent tce = new TableModelEvent(this); notifyListeners(tce); } public void addTableModelListener(final TableModelListener listner) { this.listeners.add(listner); } public void delColumn(final int col) { final int inputSize = this.data.getInputSize(); // does it fall inside of input or ideal? if (col < inputSize) { for (final MLDataPair pair : this.data) { final MLData input = pair.getInput(); final double[] d = new double[input.size() - 1]; int t = 0; for (int i = 0; i < input.size(); i++) { if (i != col) { d[t] = pair.getInput().getData(i); t++; } } input.setData(d); } } else { for (final MLDataPair pair : this.data) { final MLData ideal = pair.getIdeal(); final double[] d = new double[ideal.size() - 1]; int t = 0; for (int i = 0; i < ideal.size(); i++) { if (i != col - inputSize) { d[t] = pair.getInput().getData(i); t++; } } ideal.setData(d); } } final TableModelEvent tce = new TableModelEvent(this, TableModelEvent.HEADER_ROW); notifyListeners(tce); } public void delRow(final int row) { this.data.getData().remove(row); final TableModelEvent tce = new TableModelEvent(this); notifyListeners(tce); } public Class<?> getColumnClass(final int arg0) { return Double.class; } public int getColumnCount() { return this.data.getIdealSize() + this.data.getInputSize(); } public String getColumnName(final int columnIndex) { if (columnIndex < this.data.getInputSize()) { return "Input " + (columnIndex + 1); } return "Ideal " + (columnIndex + 1 - this.data.getInputSize()); } public int getRowCount() { int i = 0; for (@SuppressWarnings("unused") final MLDataPair pair : this.data) { i++; } return i; } public Object getValueAt(int rowIndex, final int columnIndex) { for (final MLDataPair pair : this.data) { if (rowIndex == 0) { if (columnIndex >= pair.getInput().size()) { return pair.getIdeal().getData( columnIndex - pair.getInput().size()); } return pair.getInput().getData(columnIndex); } rowIndex--; } return null; } public boolean isCellEditable(final int rowIndex, final int columnIndex) { return true; } private void notifyListeners(final TableModelEvent tce) { for (final TableModelListener listener : this.listeners) { listener.tableChanged(tce); } } public void removeTableModelListener(final TableModelListener l) { this.listeners.remove(l); } public void setValueAt(final Object rawValue, int rowIndex, final int columnIndex) { Double value = null; if (rawValue instanceof Double) { value = (Double) rawValue; } else { value = Double.parseDouble(rawValue.toString()); } for (final MLDataPair pair : this.data) { if (rowIndex == 0) { if (columnIndex >= pair.getInput().size()) { pair.getIdeal().setData( columnIndex - pair.getInput().size(), ((Double) value).doubleValue()); } else { pair.getInput().setData(columnIndex, ((Double) value).doubleValue()); } } rowIndex--; } } }