public void flushSentence(DataElement data) {
        if (data == null) {
            return;
        }
        if (elementsCache.isEmpty()) {
            return;
        }
        if (elementsCache.size() == 1 && conditions.size() == 0) {
            throw new IllegalStateException("Unexpected situation at " + data + " -> " + elementsCache);
        }
        
        if (elementsCache.size() == 1 && conditions.size() > 0) {
            Subject subject = conditions.get(conditions.size() - 1).getValue().getSubject();
            addCondition(CollectionOperation.UNION, subject, data, elementsCache.get(0).element);
            return;
        }

        DataTreeElement mainSubject = findLowestId(elementsCache);

        for (DataTreeElement verbalTreeElement : elementsCache) {
            if (verbalTreeElement.equals(mainSubject)) {
                continue;
            }

            if (VerbalNode.class.isInstance(verbalTreeElement.element)) {
                VerbalNode verbalNode = VerbalNode.class.cast(verbalTreeElement.element);
                addCondition(CollectionOperation.UNION, mainSubject.element, verbalNode.getVerb(), verbalNode.getObject());
            } else {
                addCondition(CollectionOperation.UNION, mainSubject.element, data, verbalTreeElement.element);
            }

        }

        // main

        elementsCache.clear();
    }