public final List<AttributeGroup> getAttributeGroups() {
		if(_attributeGroups == null) {
			List<AttributeGroup> directAttributeGroups = getDirectAttributeGroups();
			List<AttributeGroup> attributeGroups = new ArrayList<AttributeGroup>();
			attributeGroups.addAll(directAttributeGroups);

			List list = getSuperTypes();
			if((list != null) && (list.size() > 0)) {
				for(int i = 0; i < list.size(); ++i) {
					DafSystemObjectType _systemObjectType = (DafSystemObjectType)list.get(i);
					List tmpList = _systemObjectType.getAttributeGroups();
					if(tmpList != null) {
						for(int j = 0; j < tmpList.size(); ++j) {
							DafAttributeGroup attributeGroup = (DafAttributeGroup)tmpList.get(j);
							long attributeGroupId = attributeGroup.getId();
							int k = 0;
							for(; k < attributeGroups.size(); ++k) {
								DafAttributeGroup _attributeGroup = (DafAttributeGroup)attributeGroups.get(k);
								if(_attributeGroup.getId() == attributeGroupId) {
									break;
								}
							}
							if(k == attributeGroups.size()) {
								attributeGroups.add(attributeGroup);
							}
						}
					}
				}
			}
			_attributeGroups = Collections.unmodifiableList(attributeGroups);
		}
		return _attributeGroups;
	}