private void parseFT(Element ele, StringBuilder sb, boolean truncate) {
		String eleId = ele.attributeValue(FTATranslator.ATTR_ID);
		String type = ele.attributeValue(ATTR_TYPE);
		if (eleId == null) {
			this.errorMsg.addLast(ele.getUniquePath() + ": need " + ATTR_ID);
		}
		if (truncate && eleId.length() > FTATranslator.truncateLength)
			eleId = eleId.substring(0, truncateLength);

		if (type == null) {
			if (!this.eventSet.containsKey(eleId)) {
				this.errorMsg.add(ele.getUniquePath() + ": is not a basic event");
			}
			sb.append(FTATranslator.EVENT_FTA_BASIC).append(" ").append(eleId).append(" ").append("0\n");
		} else {
			String gate = gateMap.get(type);
			if (gate == null) {
				this.errorMsg.addLast(ele.getUniquePath() + "(" + type + "): invalid type of gate");
			}
			sb.append(FTATranslator.EVENT_FTA_MIDDLE).append(" ").append(eleId).append(" 1\n");
			String desc = ele.attributeValue(FTATranslator.ATTR_DESC);
			if (desc == null || desc.length() == 0)
				sb.append("0");
			else sb.append(desc.length()).append(" ").append(desc).append("\n");
			List<Element> children = ele.elements(FTATranslator.NODE_ARCH_FAILURE);
			sb.append(gate).append(" NULL ").append(children.size()).append("\n");
			for (Element child : children)
				this.parseFT(child, sb, truncate);
		}
	}