@Override
	protected CommandExecutionResult executeArg(Map<String, RegexPartialMatch> arg) {
		final String g1 = arg.get("G1").get(0);
		final String g2 = arg.get("G2").get(0);

//		if (getSystem().isGroup(g1) && getSystem().isGroup(g2)) {
//			return executePackageLink(arg);
//		}
		if (getSystem().isGroup(g1) || getSystem().isGroup(g2)) {
			return CommandExecutionResult.error("Not implemented");
		}

		final IEntity cl1 = getSystem().getOrCreateClass(g1);
		final IEntity cl2 = getSystem().getOrCreateEntity(g2, EntityType.ARC_CIRCLE);
		

		if (arg.get("G1").get(1) != null) {
			cl1.setStereotype(new Stereotype(arg.get("G1").get(1)));
		}
		if (arg.get("G2").get(1) != null) {
			cl2.setStereotype(new Stereotype(arg.get("G2").get(1)));
		}

		final LinkType linkType = new LinkType(LinkDecor.NONE, LinkDecor.NONE);
		String queue;
		if (arg.get("AR_TO_RIGHT").get(0) != null) {
			queue = arg.get("AR_TO_RIGHT").get(1) + arg.get("AR_TO_RIGHT").get(3);
//			linkType = getLinkTypeNormal(queue, arg.get("AR_TO_RIGHT").get(4));
		} else {
			queue = arg.get("AR_TO_LEFT").get(2) + arg.get("AR_TO_LEFT").get(4);
//			linkType = getLinkTypeNormal(queue, arg.get("AR_TO_LEFT").get(1)).getInversed();
		}
		final Direction dir = getDirection(arg);

		if (dir == Direction.LEFT || dir == Direction.RIGHT) {
			queue = "-";
		}

		Link link = new Link(cl1, cl2, linkType, arg.get("END").get(0), queue.length());

		if (dir == Direction.LEFT || dir == Direction.UP) {
			link = link.getInv();
		}

		getSystem().addLink(link);
		return CommandExecutionResult.ok();
	}