public void addComponents(List<?> textComponents) {
		if (textComponents != null) {
			ElementCategory thisCategory = this.getCategory();
			ArrayList<NLGElement> elementsToAdd = new ArrayList<NLGElement>();
			ElementCategory category = null;

			for (Object eachElement : textComponents) {
				if (eachElement instanceof NLGElement) {
					category = ((NLGElement) eachElement).getCategory();
					if (category != null
							&& thisCategory instanceof DocumentCategory) {
						if (((DocumentCategory) thisCategory)
								.hasSubPart(category)) {
							elementsToAdd.add((NLGElement) eachElement);
							((NLGElement) eachElement).setParent(this);
						}
					}
				}
			}
			if (elementsToAdd.size() > 0) {
				List<NLGElement> components = getComponents();
				if (components == null) {
					components = new ArrayList<NLGElement>();
				}
				components.addAll(elementsToAdd);
				this.setFeature(FEATURE_COMPONENTS, components);
			}
		}
	}