package de.tud.inf.example.table; import java.util.ArrayList; import java.util.List; import com.rapidminer.example.Attribute; import com.rapidminer.example.table.DataRow; import de.tud.inf.example.set.attributevalues.ComplexValue; import de.tud.inf.example.set.attributevalues.ComplexValueFactory; import de.tud.inf.example.set.attributevalues.LinearKorrelation; /** * Complex Attribute, which manages a list of inner attributes without any parameter attributes * @author Antje Gruner * */ public class ComplexCompositeAttribute extends ComplexAttribute { private static final long serialVersionUID = 1L; protected List<Attribute> innerAttributes = null; protected List<Attribute> parameters = null; public ComplexCompositeAttribute(ComplexCompositeAttribute attribute) { this(attribute.getName(), attribute.getValueType(), attribute.innerAttributes, attribute.parameters, attribute.hint); } public ComplexCompositeAttribute(String name, int valueType, List<Attribute> innerAtts, List<Attribute>params, String hint) { super(name, valueType,hint); if(innerAtts !=null){ innerAttributes = new ArrayList<Attribute>(); for(int i =0;i<innerAtts.size();i++) innerAttributes.add(innerAtts.get(i)); } if(params !=null){ parameters = new ArrayList<Attribute>(); for(int i =0;i<params.size();i++) parameters.add(params.get(i)); } } @Override public double getValue(DataRow row) { return this.getComplexValue(row).getDoubleValue(); } public ComplexValue getComplexValue(DataRow row){ LinearKorrelation lk = (LinearKorrelation)ComplexValueFactory.getComplexValueFunction(this.getValueType(),hint); double[] values = new double[innerAttributes.size()]; for(int i = 0; i< innerAttributes.size();i++) values[i] = innerAttributes.get(i).getValue(row); lk.setValues(values); return lk; } public List<Attribute> getInnerAttributes(){ return innerAttributes; } public List<Attribute> getParameterAttributes(){ return parameters; } public Attribute getInnerAttribute(String attributeName){ for(Attribute a:this.innerAttributes) if(a.getName().equals(attributeName)) return a; return null; } /** * dummy function */ @Override public void setValue(DataRow row, double value) { for(Attribute a: this.innerAttributes) a.setValue(row, value); } @Override public int getInnerAttributeCount(){ return innerAttributes.size(); } @Override public int getParameterCount() { return parameters.size(); } @Override public double[] getComplexValueAsArray(DataRow row) { double[] values = new double[innerAttributes.size()]; for(int i =0;i<innerAttributes.size();i++){ values[i] = innerAttributes.get(i).getValue(row); } return values; } @Override public void setComplexValue(DataRow row, ComplexValue value) { throw new UnsupportedOperationException(); } @Override public Object clone() { return new ComplexCompositeAttribute(this); } }