sascha@2695: package de.intevation.flys.artifacts.model; sascha@2695: sascha@2695: import gnu.trove.TDoubleArrayList; sascha@2695: sascha@2695: import java.util.Map; sascha@2695: sascha@2695: import java.io.Serializable; sascha@2695: sascha@2695: public class Parameters sascha@2695: implements Serializable sascha@2695: { sascha@2695: public static class Parameter sascha@2695: implements Serializable sascha@2695: { sascha@2695: public String name; sascha@2695: public double value; sascha@2695: sascha@2695: public Parameter() { sascha@2695: } sascha@2695: sascha@2695: public Parameter(String name, double value) { sascha@2695: this.name = name; sascha@2695: this.value = value; sascha@2695: } sascha@2695: public String getName() { sascha@2695: return name; sascha@2695: } sascha@2695: sascha@2695: public void setName(String name) { sascha@2695: this.name = name; sascha@2695: } sascha@2695: sascha@2695: public double getValue() { sascha@2695: return value; sascha@2695: } sascha@2695: sascha@2695: public void setValue(double value) { sascha@2695: this.value = value; sascha@2695: } sascha@2695: } // Parameter sascha@2695: sascha@2695: protected String [] columnNames; sascha@2695: protected TDoubleArrayList [] columns; sascha@2695: sascha@2695: public Parameters() { sascha@2695: } sascha@2695: sascha@2695: public Parameters(String [] columnNames) { sascha@2695: if (columnNames == null || columnNames.length < 1) { sascha@2695: throw new IllegalArgumentException("columnNames too short."); sascha@2695: } sascha@2695: this.columnNames = columnNames; sascha@2695: columns = new TDoubleArrayList[columnNames.length]; sascha@2695: for (int i = 0; i < columns.length; ++i) { sascha@2695: columns[i] = new TDoubleArrayList(); sascha@2695: } sascha@2695: } sascha@2695: sascha@2695: public int columnIndex(String name) { sascha@2695: for (int i = 0; i < columnNames.length; ++i) { sascha@2695: if (name.equals(name)) { sascha@2695: return i; sascha@2695: } sascha@2695: } sascha@2695: return -1; sascha@2695: } sascha@2695: sascha@2695: public void add(Parameter [] parameters) { sascha@2695: sascha@2695: int N = columns[0].size(); sascha@2695: sascha@2695: for (int i = 0; i < columns.length; ++i) { sascha@2695: columns[i].add(Double.NaN); sascha@2695: } sascha@2695: sascha@2695: for (Parameter parameter: parameters) { sascha@2695: int index = columnIndex(parameter.getName()); sascha@2695: if (index >= 0) { sascha@2695: columns[index].setQuick(N, parameter.getValue()); sascha@2695: } sascha@2695: } sascha@2695: } sascha@2695: sascha@2695: public void add(Map parameters) { sascha@2695: sascha@2695: int N = columns[0].size(); sascha@2695: sascha@2695: for (int i = 0; i < columns.length; ++i) { sascha@2695: columns[i].add(Double.NaN); sascha@2695: } sascha@2695: sascha@2695: for (Map.Entry entry: parameters.entrySet()) { sascha@2695: int index = columnIndex(entry.getKey()); sascha@2695: Double v = entry.getValue(); sascha@2695: if (index >= 0 && v != null) { sascha@2695: columns[index].setQuick(N, v); sascha@2695: } sascha@2695: } sascha@2695: } sascha@2695: sascha@2695: public Parameter [] get(int i) { sascha@2695: Parameter [] parameters = new Parameter[columns.length]; sascha@2695: for (int j = 0; i < parameters.length; ++j) { sascha@2695: parameters[j] = new Parameter(columnNames[j], Double.NaN); sascha@2695: } sascha@2695: return get(i, parameters); sascha@2695: } sascha@2695: sascha@2695: public Parameter [] get(int i, Parameter [] parameters) { sascha@2695: for (Parameter parameter: parameters) { sascha@2695: int index = columnIndex(parameter.getName()); sascha@2695: if (index >= 0) { sascha@2695: parameter.setValue(columns[index].getQuick(i)); sascha@2695: } sascha@2695: } sascha@2695: return parameters; sascha@2695: } sascha@2695: sascha@2695: public double get(int i, int index) { sascha@2695: return columns[index].getQuick(i); sascha@2695: } sascha@2695: sascha@2695: public double get(int i, String columnName) { sascha@2695: int index = columnIndex(columnName); sascha@2695: return index >= 0 sascha@2695: ? columns[index].getQuick(i) sascha@2695: : Double.NaN; sascha@2695: } sascha@2695: sascha@2695: public int size() { sascha@2695: return columns[0].size(); sascha@2695: } sascha@2695: sascha@2695: public int getNumberColumns() { sascha@2695: return columnNames.length; sascha@2695: } sascha@2695: sascha@2695: public String [] getColumnNames() { sascha@2695: return columnNames; sascha@2695: } sascha@2695: sascha@2695: public void removeNaNs() { sascha@2695: W.removeNaNs(columns); sascha@2695: } sascha@2695: } sascha@2695: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :