package org.vorthmann.zome.app.impl; import org.vorthmann.ui.Controller; import org.vorthmann.ui.DefaultController; import com.vzome.core.algebra.AlgebraicField; import com.vzome.core.algebra.AlgebraicNumber; import com.vzome.core.algebra.AlgebraicVector; public class VectorController extends DefaultController { private final NumberController[] coordinates; private final AlgebraicField field; public VectorController( AlgebraicVector initial ) { this .field = initial .getField(); this .coordinates = new NumberController[ initial .dimension() ]; for ( int i = 0; i < coordinates.length; i++ ) { coordinates[ i ] = new NumberController( initial .getField() ); } } @Override public Controller getSubController( String name ) { switch ( name ) { case "w": return coordinates[ 0 ]; case "x": return coordinates[ 1 ]; case "y": return coordinates[ 2 ]; case "z": return coordinates[ 3 ]; default: return super.getSubController( name ); } } public void setVector( AlgebraicVector vector ) { assert vector .dimension() == coordinates .length; for ( int i = 0; i < coordinates.length; i++ ) { NumberController numberController = coordinates[i]; AlgebraicNumber coord = vector .getComponent( i ); numberController .setValue( coord ); } } public AlgebraicVector getVector() { AlgebraicVector result = field .basisVector( coordinates .length, 0 ); for ( int i = 0; i < coordinates.length; i++ ) { NumberController numberController = coordinates[i]; AlgebraicNumber coord = numberController .getValue(); result .setComponent( i, coord ); } return result; } }