@Override
	protected CommandExecutionResult executeArg(Map<String, RegexPartialMatch> arg) {

		final String ent1 = arg.get("ENT1").get(1);
		final String ent2 = arg.get("ENT2").get(1);

		final IEntity cl1;
		final IEntity cl2;
		final IEntity normalEntity;

		final String suffix = "lol" + UniqueSequence.getValue();
		if (arg.get("LOL_THEN_ENT").get(0) == null) {
			assert arg.get("ENT_THEN_LOL").get(0) != null;
			cl1 = getSystem().getOrCreateClass(ent1);
			cl2 = getSystem().createLeaf(cl1.getCode() + suffix, StringUtils.getWithNewlines(ent2), LeafType.LOLLIPOP);
			normalEntity = cl1;
		} else {
			cl2 = getSystem().getOrCreateClass(ent2);
			cl1 = getSystem().createLeaf(cl2.getCode() + suffix, StringUtils.getWithNewlines(ent1), LeafType.LOLLIPOP);
			normalEntity = cl2;
		}

		final LinkType linkType = getLinkType(arg);
		final String queue = getQueue(arg);

		int length = queue.length();
		if (length == 1 && getSystem().getNbOfHozizontalLollipop(normalEntity) > 1) {
			length++;
		}

		String firstLabel = arg.get("FIRST_LABEL").get(0);
		String secondLabel = arg.get("SECOND_LABEL").get(0);

		String labelLink = null;

		if (arg.get("LABEL_LINK").get(0) != null) {
			labelLink = arg.get("LABEL_LINK").get(0);
			if (firstLabel == null && secondLabel == null) {
				final Pattern p1 = Pattern.compile("^\"([^\"]+)\"([^\"]+)\"([^\"]+)\"$");
				final Matcher m1 = p1.matcher(labelLink);
				if (m1.matches()) {
					firstLabel = m1.group(1);
					labelLink = StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(m1.group(2).trim()).trim();
					secondLabel = m1.group(3);
				} else {
					final Pattern p2 = Pattern.compile("^\"([^\"]+)\"([^\"]+)$");
					final Matcher m2 = p2.matcher(labelLink);
					if (m2.matches()) {
						firstLabel = m2.group(1);
						labelLink = StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(m2.group(2).trim()).trim();
						secondLabel = null;
					} else {
						final Pattern p3 = Pattern.compile("^([^\"]+)\"([^\"]+)\"$");
						final Matcher m3 = p3.matcher(labelLink);
						if (m3.matches()) {
							firstLabel = null;
							labelLink = StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(m3.group(1).trim())
									.trim();
							secondLabel = m3.group(2);
						}
					}
				}
			}
			labelLink = StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(labelLink);
		} /*
			 * else if (arg.get("LABEL_LINK_XT").get(0) != null ||
			 * arg.get("LABEL_LINK_XT").get(1) != null ||
			 * arg.get("LABEL_LINK_XT").get(2) != null) { labelLink =
			 * arg.get("LABEL_LINK_XT").get(1); firstLabel = merge(firstLabel,
			 * arg.get("LABEL_LINK_XT").get(0)); secondLabel =
			 * merge(arg.get("LABEL_LINK_XT").get(2), secondLabel); }
			 */

		final Link link = new Link(cl1, cl2, linkType, labelLink, length, firstLabel, secondLabel, getSystem()
				.getLabeldistance(), getSystem().getLabelangle());
		getSystem().resetPragmaLabel();
		addLink(link, arg.get("HEADER").get(0));

		return CommandExecutionResult.ok();
	}