final public Diagram createSystem(UmlSource source) {
		final IteratorCounter it = source.iterator();
		final String startLine = it.next();
		if (StartUtils.isArobaseStartDiagram(startLine) == false) {
			throw new UnsupportedOperationException();
		}

		if (source.isEmpty()) {
			return buildEmptyError(source);
		}
		AbstractPSystem sys = createEmptyDiagram();

		while (it.hasNext()) {
			final String line = it.next();
			if (StartUtils.isArobaseEndDiagram(line)) {
				final String err = checkFinalError(sys);
				if (err != null) {
					return buildEmptyError(source, err);
				}
				if (source.getTotalLineCount() == 2) {
					return buildEmptyError(source);
				}
				if (sys == null) {
					return null;
				}
				sys.makeDiagramReady();
				if (sys.isOk() == false) {
					return null;
				}
				sys.setSource(source);
				return sys;
			}
			sys = executeOneLine(sys, source, it, line);
			if (sys instanceof PSystemError) {
				return sys;
			}
		}
		sys.setSource(source);
		return sys;

	}