* @throws ConfigurationChangeException Falls der Attribut-Typ nicht importiert werden konnte.
	 */
	private void handleAttributeType(ImportObject importObject) throws ConfigurationChangeException {
		final AttributeTypeProperties property = (AttributeTypeProperties)importObject.getProperties();
		try {
			final ConfigurationArea configurationArea = importObject.getConfigurationArea();
			final ConfigurationAttributeType configurationAttributeType = property.getAttributeType();
			final AttributeType existingAttributeType = (AttributeType)importObject.getSystemObject();
			if(configurationAttributeType instanceof ConfigurationString) {
				final ConfigurationString type = (ConfigurationString)configurationAttributeType;
				StringAttributeType attributeType = null;
				if(existingAttributeType instanceof StringAttributeType) {
					attributeType = (StringAttributeType)existingAttributeType;
					setSystemObjectKeeping(attributeType);
				}
				else {
					// ein neuer Attribut-Typ muss angelegt werden
					final ConfigurationObjectType objectType = (ConfigurationObjectType)_dataModel.getType(Pid.Type.STRING_ATTRIBUTE_TYPE);
					attributeType = (StringAttributeType)configurationArea.createConfigurationObject(objectType, property.getPid(), property.getName(), null);
					_debug.finer("Ein neuer String-Attribut-Typ mit der Pid '" + property.getPid() + "'wurde angelegt.");
				}
				// Namen überprüfen
				if(_objectDiffs.isNameDifferent(property.getName(), attributeType.getName())) {
					attributeType.setName(property.getName());
				}
				// Info überprüfen
				if(_objectDiffs.isInfoDifferent(property.getInfo(), attributeType.getInfo())) {
					setInfo(attributeType, property.getInfo());
				}
				// Attribut-Typ-Eigenschaften überprüfen
//				if(attributeType.getConfigurationData(_dataModel.getAttributeGroup("atg.zeichenkettenAttributTypEigenschaften")) == null
				if(getConfigurationData(attributeType, _dataModel.getAttributeGroup("atg.zeichenkettenAttributTypEigenschaften")) == null
				   || type.getLength() != attributeType.getMaxLength() || !type.getStringEncoding().equals(attributeType.getEncodingName())) {
					setStringAttributeTypeProperties(attributeType, type);
				}
				importObject.setSystemObject(attributeType);
			}
			else if(configurationAttributeType instanceof ConfigurationIntegerDef) {
				final ConfigurationIntegerDef def = (ConfigurationIntegerDef)configurationAttributeType;
				IntegerAttributeType attributeType = null;
				if(existingAttributeType instanceof IntegerAttributeType) {
					attributeType = (IntegerAttributeType)existingAttributeType;
					setSystemObjectKeeping(attributeType);
				}
				else {
					// ein neuer Attribut-Typ wird angelegt
					final ConfigurationObjectType objectType = (ConfigurationObjectType)_dataModel.getType(Pid.Type.INTEGER_ATTRIBUTE_TYPE);
					attributeType = (IntegerAttributeType)configurationArea.createConfigurationObject(objectType, property.getPid(), property.getName(), null);
					_debug.finer("Ein neuer Ganzzahl-Attribut-Typ mit der Pid '" + property.getPid() + "' wurde angelegt.");
				}
				// Namen überprüfen
				if(_objectDiffs.isNameDifferent(property.getName(), attributeType.getName())) {
					attributeType.setName(property.getName());
				}
				// Info überprüfen
				if(_objectDiffs.isInfoDifferent(property.getInfo(), attributeType.getInfo())) {
					setInfo(attributeType, property.getInfo());
				}

				// ValueRange ermittlen
				IntegerValueRange valueRange = null;
//				final Data attributeTypePropertiesData = attributeType.getConfigurationData(_dataModel.getAttributeGroup("atg.ganzzahlAttributTypEigenschaften"));
				final Data attributeTypePropertiesData = getConfigurationData(
						attributeType, _dataModel.getAttributeGroup("atg.ganzzahlAttributTypEigenschaften")
				);
				if(attributeTypePropertiesData != null) {
					valueRange = attributeType.getRange();
				}
				for(ConfigurationIntegerValueRange rangeAndStates : def.getValueRangeAndState()) {
					if(rangeAndStates instanceof ConfigurationValueRange) {
						final ConfigurationValueRange configurationValueRange = (ConfigurationValueRange)rangeAndStates;
						valueRange = handleIntegerValueRange(configurationArea, configurationValueRange, valueRange);
					}
				}

				// Eigenschaften überprüfen
				if(attributeTypePropertiesData == null || _objectDiffs.isIntegerAttributeTypePropertiesDifferent(def, attributeType)) {
					setIntegerAttributeTypeProperties(attributeType, valueRange, def.getBits());
				}

				// Vorhandene Zustände merken
				final List<IntegerValueState> stateList = new LinkedList<IntegerValueState>();
				NonMutableSet stateSet = attributeType.getNonMutableSet("zustände");
				if(stateSet != null) {
					for(SystemObject systemObject : stateSet.getElementsInModifiableVersion()) {
						final IntegerValueState valueState = (IntegerValueState)systemObject;
						stateList.add(valueState);
					}
					setSystemObjectKeeping(stateSet);
				}
				else {
					// Menge der Zustände neu anlegen
					final ConfigurationObjectType type = (ConfigurationObjectType)_dataModel.getType(Pid.SetType.INTEGER_VALUE_STATES);
					stateSet = (NonMutableSet)configurationArea.createConfigurationObject(type, "", "zustände", null);
					attributeType.addSet(stateSet);
				}
				// Menge der Zustände überprüfen
//				ObjectSet stateSet = attributeType.getObjectSet("zustände");
//				if (stateSet == null) {
//					// Menge muss erzeugt und dem Attribut-Typen hinzugefügt werden
//					final ConfigurationObjectType type = (ConfigurationObjectType) _dataModel.getType(Pid.SetType.INTEGER_VALUE_STATES);
//					stateSet = (ObjectSet) configurationArea.createConfigurationObject(type, "", "zustände", null);
//					attributeType.addSet(stateSet);
//				} else {
//					setSystemObjectKeeping(stateSet);
//				}

				// die einzelnen Zustände überprüfen und ggf. neu anlegen
				for(ConfigurationIntegerValueRange rangeAndStates : def.getValueRangeAndState()) {
					if(rangeAndStates instanceof ConfigurationState) {
						final ConfigurationState configurationState = (ConfigurationState)rangeAndStates;
						IntegerValueState integerValueState = null;
						for(IntegerValueState state : stateList) {
							if(state.getValue() == configurationState.getValue()) {
								integerValueState = state;
							}
						}
						if(integerValueState == null) {
							// Neuen State anlegen
							final ConfigurationObjectType type = (ConfigurationObjectType)_dataModel.getType(Pid.Type.INTEGER_VALUE_STATE);
							integerValueState = (IntegerValueState)configurationArea.createConfigurationObject(type, "", configurationState.getName(), null);
							stateSet.add(integerValueState);
						}
						else {
							setSystemObjectKeeping(integerValueState);
						}
						// Info überprüfen
						if(_objectDiffs.isInfoDifferent(configurationState.getInfo(), integerValueState.getInfo())) {
							setInfo(integerValueState, configurationState.getInfo());
						}
						// Eigenschaften überpüfen
						if(getConfigurationData(integerValueState, _dataModel.getAttributeGroup("atg.werteZustandsEigenschaften")) == null) {
							setIntegerValueStateProperties(integerValueState, configurationState);
						}
						if(!configurationState.getName().equals(integerValueState.getName())) {
							// Statuswert umbenennen
							integerValueState.setName(configurationState.getName());
						}
					}
				}
				importObject.setSystemObject(attributeType);
			}
			else if(configurationAttributeType instanceof ConfigurationDoubleDef) {
				final ConfigurationDoubleDef def = (ConfigurationDoubleDef)configurationAttributeType;
				DoubleAttributeType attributeType = null;
				if(existingAttributeType instanceof DoubleAttributeType) {
					attributeType = (DoubleAttributeType)existingAttributeType;
					setSystemObjectKeeping(attributeType);
				}
				else {
					// Attribut-Typ wird neu angelegt
					final ConfigurationObjectType objectType = (ConfigurationObjectType)_dataModel.getType(Pid.Type.DOUBLE_ATTRIBUTE_TYPE);
					attributeType = (DoubleAttributeType)configurationArea.createConfigurationObject(objectType, property.getPid(), property.getName(), null);
					_debug.finer("Ein neuer Fließkommazahl-Attribut-Typ mit der Pid '" + property.getPid() + "' wurde angelegt.");
				}
				// Info überprüfen
				if(_objectDiffs.isInfoDifferent(property.getInfo(), attributeType.getInfo())) {
					setInfo(attributeType, property.getInfo());
				}
				// Eigenschaften überprüfen
				if(_objectDiffs.isDoubleAttributeTypeDifferent(def, attributeType)) {
					setDoubleAttributeTypeProperties(attributeType, def);
				}
				importObject.setSystemObject(attributeType);
			}
			else if(configurationAttributeType instanceof ConfigurationTimeStamp) {
				final ConfigurationTimeStamp stamp = (ConfigurationTimeStamp)configurationAttributeType;
				TimeAttributeType attributeType = null;
				if(existingAttributeType instanceof TimeAttributeType) {
					attributeType = (TimeAttributeType)existingAttributeType;
					setSystemObjectKeeping(attributeType);
				}
				else {
					// ein neuer Attribut-Typ muss angelegt werden
					final ConfigurationObjectType objectType = (ConfigurationObjectType)_dataModel.getType(Pid.Type.TIME_ATTRIBUTE_TYPE);
					attributeType = (TimeAttributeType)configurationArea.createConfigurationObject(objectType, property.getPid(), property.getName(), null);
					_debug.finer("Ein neuer Zeitstempel-Attribut-Typ mit der Pid '" + property.getPid() + "' wurde angelegt.");
				}
				// Info überprüfen
				if(_objectDiffs.isInfoDifferent(property.getInfo(), attributeType.getInfo())) {
					setInfo(attributeType, property.getInfo());
				}
				// Eigenschaften überprüfen
				if(_objectDiffs.isTimeAttributeTypeDifferent(stamp, attributeType)) {
					setTimeAttributeTypeProperties(attributeType, stamp);
				}
				importObject.setSystemObject(attributeType);
			}
			else if(configurationAttributeType instanceof ConfigurationObjectReference) {
				ReferenceAttributeType attributeType = null;
				if(existingAttributeType instanceof ReferenceAttributeType) {
					attributeType = (ReferenceAttributeType)existingAttributeType;
					setSystemObjectKeeping(attributeType);
				}
				else {
					// Attribut-Typ wird neu angelegt
					final ConfigurationObjectType objectType = (ConfigurationObjectType)_dataModel.getType(Pid.Type.REFERENCE_ATTRIBUTE_TYPE);
					attributeType = (ReferenceAttributeType)configurationArea.createConfigurationObject(
							objectType, property.getPid(), property.getName(), null
					);
					_debug.finer("Ein neuer Referenz-Attribut-Typ mit der Pid '" + property.getPid() + "' wurde angelegt.");
				}
				// Info überprüfen
				if(_objectDiffs.isInfoDifferent(property.getInfo(), attributeType.getInfo())) {
					setInfo(attributeType, property.getInfo());
				}
				importObject.setSystemObject(attributeType);
			}
			else {
				throw new IllegalStateException("Dieser AttributTyp " + configurationAttributeType.getClass().getName() + " wird noch nicht unterstützt.");
			}
		}
		catch(ConfigurationChangeException ex) {
			final String errorMessage = "Der AttributTyp " + property.toString() + " konnte nicht erstellt werden";
			_debug.error(errorMessage);
			throw new ConfigurationChangeException(errorMessage, ex);
		}
	}