move = ChangeTrackPieceCompositeMove.generateBuildTrackMove (from, trackVector, trackRule, w, principal);
try { move = ChangeTrackPieceCompositeMove.generateBuildTrackMove (from, trackVector, trackRule, w, principal); } catch (IllegalArgumentException e) { return MoveStatus.moveFailed("Track already exists"); }
    public MoveStatus buildTrack(Point from, byte trackVector) {        ChangeTrackPieceCompositeMove move = null;	switch (trackBuilderMode) {	    case UPGRADE_TRACK:		Point point = new Point(from.x +			CompassPoints.getUnitDeltaX(trackVector),			from.y + CompassPoints.getUnitDeltaY(trackVector));		return upgradeTrack(point, trackRule);	    case BUILD_TRACK:		move = ChangeTrackPieceCompositeMove.generateBuildTrackMove		    (from, trackVector, trackRule, w, principal);		break;	    case REMOVE_TRACK:		move = ChangeTrackPieceCompositeMove.generateRemoveTrackMove		    (from, trackVector, w, principal);		break;	    case IGNORE_TRACK:		return MoveStatus.MOVE_OK;	    default:		throw new IllegalStateException("Illegal trackBuilderMode " +			trackBuilderMode);        }        Move moveAndTransaction = transactionsGenerator.addTransactions(move);        MoveStatus ms = moveTester.tryDoMove(moveAndTransaction);        moveTester.processMove(moveAndTransaction);        return ms;    }