public static Ftile create(Swimlane swimlane, Ftile whileBlock, Display test, HtmlColor borderColor,
			HtmlColor backColor, HtmlColor arrowColor, Display yes, Display out2, UFont fontArrow, HtmlColor endInlinkColor,
			LinkRendering afterEndwhile, FtileFactory ftileFactory, ConditionStyle conditionStyle, UFont fontTest) {

		final FontConfiguration fcArrow = new FontConfiguration(fontArrow, HtmlColorUtils.BLACK);
		final FontConfiguration fcTest = new FontConfiguration(fontTest, HtmlColorUtils.BLACK);
		final TextBlock yesTb = TextBlockUtils.create(yes, fcArrow, HorizontalAlignment.LEFT, ftileFactory);
		final TextBlock testTb = TextBlockUtils.create(test, fcTest, HorizontalAlignment.LEFT, ftileFactory);
		final TextBlock out = TextBlockUtils.create(out2, fcArrow, HorizontalAlignment.LEFT, ftileFactory);

		final Ftile diamond1;
		final TextBlock supplementarySouthText;
		if (conditionStyle == ConditionStyle.INSIDE) {
			supplementarySouthText = TextBlockUtils.empty(0, 0);
			diamond1 = new FtileDiamondInside(whileBlock.shadowing(), backColor, borderColor, swimlane, testTb)
					.withNorth(yesTb).withWest(out);
		} else if (conditionStyle == ConditionStyle.FOO1) {
			supplementarySouthText = TextBlockUtils.empty(0, 0);
			diamond1 = new FtileDiamondFoo1(whileBlock.shadowing(), backColor, borderColor, swimlane, testTb)
					.withNorth(yesTb).withWest(out);
		} else if (conditionStyle == ConditionStyle.DIAMOND) {
			supplementarySouthText = createLabel1(test, yes, fontArrow, ftileFactory);
			diamond1 = new FtileDiamond(whileBlock.shadowing(), backColor, borderColor, swimlane).withWest(out)
					.withSouth(supplementarySouthText);
		} else {
			throw new IllegalStateException();
		}

		final FtileWhile result = new FtileWhile(whileBlock, diamond1, supplementarySouthText);
		HtmlColor afterEndwhileColor = arrowColor;
		if (afterEndwhile != null && afterEndwhile.getColor() != null) {
			afterEndwhileColor = afterEndwhile.getColor();
		}

		final List<Connection> conns = new ArrayList<Connection>();
		conns.add(result.new ConnectionIn(LinkRendering.getColor(whileBlock.getInLinkRendering(), arrowColor)));
		conns.add(result.new ConnectionBack(endInlinkColor));
		conns.add(result.new ConnectionOut(afterEndwhileColor));
		return FtileUtils.addConnection(result, conns);
	}