public boolean attributeNameIsLessOrEqual( final AttributeGroup attributeGroup, final CellKey key) {
		int lastIndex1 = -1;
		int lastIndex2 = -1;
		int index = 0;
		int size = Math.min( getNumberOfParts(), key.getNumberOfParts());
		while ( index < size) {	// also getAttributePartArrayValue != null bzw. key.isSuperColumn() = false !!!
			if ( getAttributePartName(index).equals( key.getAttributePartName(index))) {
				lastIndex1 = getAttributePartArrayValue(index);
				lastIndex2 = key.getAttributePartArrayValue(index);
				if ( lastIndex1 >= 0) { // d.h. es handelt sich um Indizes
					if ( lastIndex1 != lastIndex2) { // es ist schon eine Entscheidung möglich!
						return (lastIndex1 <= lastIndex2);
					}
				}
			} else {
				if ( lastIndex1 != -1) {
					if ( lastIndex1 < lastIndex2) {
						return true;
					} else if ( lastIndex1 > lastIndex2) {
						return false;
					} else { // lastIndex1 = lastIndex2
						break;
					}
				} else {
					break;
				}
			}
			index++;
		}
		if ( index < size) {
			final CellKeyColumn cellKeyColumn1 = new CellKeyColumn( CellKey.removeArrays( getAttributeName()), false);
			final CellKeyColumn cellKeyColumn2 = new CellKeyColumn( CellKey.removeArrays(key.getAttributeName()), false);
			final Integer indexInColumnList1 = cellKeyColumn1.getIndexInColumnList(attributeGroup, true);
			final Integer indexInColumnList2 = cellKeyColumn2.getIndexInColumnList(attributeGroup, true);
			return (indexInColumnList1 <= indexInColumnList2);
		} else {
			if ( size > 0) {
				lastIndex1 = getAttributePartArrayValue(size-1);
				lastIndex2 = key.getAttributePartArrayValue(size-1);
				return (lastIndex1 <= lastIndex2);
			} else {
				return getNumberOfParts() <= key.getNumberOfParts();
			}
		}
	}