org.bbaw.pdr.ae.view.main.editors.AspectEditorDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.bbaw.pdr.ae.view.main.editors.AspectEditorDialog.java

Source

/**
 * This file is part of Archiv-Editor.
 * 
 * The software Archiv-Editor serves as a client user interface for working with
 * the Person Data Repository. See: pdr.bbaw.de
 * 
 * The software Archiv-Editor was developed at the Berlin-Brandenburg Academy
 * of Sciences and Humanities, Jgerstr. 22/23, D-10117 Berlin.
 * www.bbaw.de
 * 
 * Copyright (C) 2010-2013  Berlin-Brandenburg Academy
 * of Sciences and Humanities
 * 
 * The software Archiv-Editor was developed by @author: Christoph Plutte.
 * 
 * Archiv-Editor is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * Archiv-Editor is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with Archiv-Editor.  
 * If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>.
 */
package org.bbaw.pdr.ae.view.main.editors;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
import java.util.Vector;
import java.util.concurrent.CopyOnWriteArrayList;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.stream.XMLStreamException;

import org.bbaw.pdr.ae.common.AEConstants;
import org.bbaw.pdr.ae.common.AEPluginIDs;
import org.bbaw.pdr.ae.common.AEVIEWConstants;
import org.bbaw.pdr.ae.common.CommonActivator;
import org.bbaw.pdr.ae.common.NLMessages;
import org.bbaw.pdr.ae.common.icons.IconsInternal;
import org.bbaw.pdr.ae.config.model.ConfigData;
import org.bbaw.pdr.ae.config.model.ConfigItem;
import org.bbaw.pdr.ae.config.model.DataType;
import org.bbaw.pdr.ae.control.core.PDRConfigProvider;
import org.bbaw.pdr.ae.control.core.UserRichtsChecker;
import org.bbaw.pdr.ae.control.core.XMLProcessor;
import org.bbaw.pdr.ae.control.facade.Facade;
import org.bbaw.pdr.ae.control.interfaces.AMainSearcher;
import org.bbaw.pdr.ae.control.interfaces.IPdrIdService;
import org.bbaw.pdr.ae.metamodel.IAEPresentable;
import org.bbaw.pdr.ae.metamodel.PdrDate;
import org.bbaw.pdr.ae.metamodel.PdrId;
import org.bbaw.pdr.ae.metamodel.Record;
import org.bbaw.pdr.ae.metamodel.Revision;
import org.bbaw.pdr.ae.model.Aspect;
import org.bbaw.pdr.ae.model.PdrObject;
import org.bbaw.pdr.ae.model.Person;
import org.bbaw.pdr.ae.model.Place;
import org.bbaw.pdr.ae.model.Reference;
import org.bbaw.pdr.ae.model.ReferenceMods;
import org.bbaw.pdr.ae.model.Relation;
import org.bbaw.pdr.ae.model.RelationDim;
import org.bbaw.pdr.ae.model.RelationStm;
import org.bbaw.pdr.ae.model.SemanticDim;
import org.bbaw.pdr.ae.model.SemanticStm;
import org.bbaw.pdr.ae.model.SpatialDim;
import org.bbaw.pdr.ae.model.SpatialStm;
import org.bbaw.pdr.ae.model.TaggingRange;
import org.bbaw.pdr.ae.model.Time;
import org.bbaw.pdr.ae.model.TimeDim;
import org.bbaw.pdr.ae.model.TimeStm;
import org.bbaw.pdr.ae.model.User;
import org.bbaw.pdr.ae.model.Validation;
import org.bbaw.pdr.ae.model.ValidationStm;
import org.bbaw.pdr.ae.model.view.Facet;
import org.bbaw.pdr.ae.model.view.UndoInformation;
import org.bbaw.pdr.ae.view.control.ControlExtensions;
import org.bbaw.pdr.ae.view.control.ViewHelper;
import org.bbaw.pdr.ae.view.control.customSWTWidges.YearSpinner;
import org.bbaw.pdr.ae.view.control.dialogs.CharMapDialog;
import org.bbaw.pdr.ae.view.control.dialogs.SelectObjectDialog;
import org.bbaw.pdr.ae.view.control.interfaces.IDateParser;
import org.bbaw.pdr.ae.view.control.interfaces.IMarkupEditor;
import org.bbaw.pdr.ae.view.control.provider.AutoCompleteNameLabelProvider;
import org.bbaw.pdr.ae.view.control.provider.FacetContentProposalProvider;
import org.bbaw.pdr.ae.view.control.provider.MarkupContentProvider;
import org.bbaw.pdr.ae.view.control.provider.MarkupLabelProvider;
import org.bbaw.pdr.ae.view.control.provider.MarkupListContentProposalProvider;
import org.bbaw.pdr.ae.view.control.provider.MarkupListLabelProvider;
import org.eclipse.core.commands.Command;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IParameter;
import org.eclipse.core.commands.NotEnabledException;
import org.eclipse.core.commands.NotHandledException;
import org.eclipse.core.commands.Parameterization;
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.fieldassist.AutoCompleteField;
import org.eclipse.jface.fieldassist.ContentProposalAdapter;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.fieldassist.IContentProposalListener;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.commands.ICommandService;
import org.eclipse.ui.handlers.IHandlerService;
import org.xml.sax.SAXException;

/**
 * @author cplutte class creates the dialog of the editor for Aspects.
 */
public class AspectEditorDialog extends TitleAreaDialog implements ISelectionProvider {
    /** ID of editor. */
    public static final String ID = "org.bbaw.pdr.ae.view.main.editors.AspectEditorTab"; //$NON-NLS-1$
    /** local copy(clone) of current Aspect. */
    private Aspect _currentAspect;

    /** date format of administrative dates in PDR. */
    private SimpleDateFormat _adminDateFormat = AEConstants.ADMINDATE_FORMAT;

    /** singleton instance of _facade. */
    private Facade _facade = Facade.getInstanz();

    /** instance of pdrIdService. */
    private IPdrIdService _idService = _facade.getIdService();
    /** MainSearcher. */
    private AMainSearcher _mainSearcher = _facade.getMainSearcher();
    /** Instance of shared image registry. */
    private ImageRegistry _imageReg = CommonActivator.getDefault().getImageRegistry();
    // /** Resource Manager for colors and fonts. */
    // private LocalResourceManager _resources = new
    // LocalResourceManager(JFaceResources.getResources());

    /** The WHIT e_ color. */
    private static final Color WHITE_COLOR = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
    /** cache for tagged dates that have been added since last save. */
    private CopyOnWriteArrayList<TaggingRange> _taggedDateCache = new CopyOnWriteArrayList<TaggingRange>();

    /** cache for tagged place3s that have been added since last save. */
    private CopyOnWriteArrayList<TaggingRange> _taggedPlaceCache = new CopyOnWriteArrayList<TaggingRange>();

    private TaggingRange[] _selectedTaggingRanges = null;

    /** The prefered year. */
    private int _preferedYear;

    /** The _customize favorite markup. */
    private Action _undoAction, _redoAction, _customizeFavoriteMarkup, _createPersonFromString;

    /** main Tabfolder. */
    private CTabFolder _mainTabFolder;

    /** Tabitems of mainTabFolder. */
    private CTabItem _frontTabItem;

    /** The dimension tab item. */
    private CTabItem _dimensionTabItem;

    /** The relation tab item. */
    private CTabItem _relationTabItem;

    /** The tagging tab item. */
    private CTabItem _taggingTabItem;

    /** The source tab item. */
    private CTabItem _sourceTabItem;

    /** The rights tab item. */
    private CTabItem _rightsTabItem;

    /** The admin tab item. */
    private CTabItem _adminTabItem;

    /** The grid layout. */
    private GridLayout _gridLayout;

    /** The grid data. */
    private GridData _gridData;

    /** The grid layout2. */
    private GridLayout _gridLayout2;

    /** Label of which the tooltip shows the revision history. */
    private Label _historyLabel;

    /** combos for tagging. */
    private Combo _comboTaggingElement;

    /** The combo tagging type. */
    private Combo _comboTaggingType;

    /** The combo tagging subtype. */
    private Combo _comboTaggingSubtype;

    /** The combo tagging role. */
    private Combo _comboTaggingRole;

    /** Textfield holding input of a markup's key attribute */
    private Text _textTaggingKey;

    /** The quick select text. */
    private Text _quickSelectText;
    // private Combo comboTaggingContent;
    /** The combo t date day. */
    private Combo _comboTDateDay;

    /** The combo t date month. */
    private Combo _comboTDateMonth;

    /** The combo t date range from day. */
    private Combo _comboTDateRangeFromDay;

    /** The combo t date range from month. */
    private Combo _comboTDateRangeFromMonth;

    /** The combo t date range to day. */
    private Combo _comboTDateRangeToDay;

    /** The combo t date range to month. */
    private Combo _comboTDateRangeToMonth;

    /** The combo t date point ot. */
    private Combo _comboTDatePointOT;

    /** The combo t date before. */
    private Combo _comboTDateBefore;

    /** The combo t date after. */
    private Combo _comboTDateAfter;

    /** The combo tagging element viewer. */
    private ComboViewer _comboTaggingElementViewer;

    /** The combo tagging type viewer. */
    private ComboViewer _comboTaggingTypeViewer;

    /** The combo tagging subtype viewer. */
    private ComboViewer _comboTaggingSubtypeViewer;

    /** The combo tagging role viewer. */
    private ComboViewer _comboTaggingRoleViewer;

    /** The combo viewer t date point ot. */
    private ComboViewer _comboViewerTDatePointOT;

    /** The combo viewer t date before. */
    private ComboViewer _comboViewerTDateBefore;

    /** The combo viewer t date after. */
    private ComboViewer _comboViewerTDateAfter;

    /** The spinner t date year. */
    private YearSpinner _spinnerTDateYear;

    /** The spinner t date range from year. */
    private YearSpinner _spinnerTDateRangeFromYear;

    /** The spinner t date range to year. */
    private YearSpinner _spinnerTDateRangeToYear;

    /** Labels for each Tagging combo that contain tooltip. */
    private ControlDecoration _elementDeco;

    /** The type deco. */
    private ControlDecoration _typeDeco;

    /** The subtype deco. */
    private ControlDecoration _subtypeDeco;

    /** The role deco. */
    private ControlDecoration _roleDeco;

    /** The content text. */
    private Text _contentText;

    /** The revision time text. */
    private Text _revisionTimeText;

    /** The revisor name. */
    private Text _revisorName;

    /** The creation time text. */
    private Text _creationTimeText;

    /** The creator name text. */
    private Text _creatorNameText;

    /** The pdr id. */
    private Text _pdrID;

    /** The text tagging ana. */
    private Text _textTaggingAna;

    /** The tagging group. */
    private Group _taggingGroup;

    /** The egg. */
    private String _egg;

    private String _selectedText;

    private Person _currentPerson;

    /** The e. */
    private boolean _e = false;

    /** The composite tagging buttons. */
    private Composite _compositeTaggingButtons;

    /** The composite tagging date. */
    private Composite _compositeTaggingDate;

    /** The composite t date range. */
    private Composite _compositeTDateRange;

    /** The composite t date. */
    private Composite _compositeTDate;

    /** The parent composite of all the widgets waiting for input
     * to create/modify notification markup elements ("tagging ranges") */
    private Composite _tagging1Coposite;

    /** The composite tagging panel. */
    private Composite _compositeTaggingPanel;

    /** The composite tagging place. */
    private Composite _compositeTaggingPlace;

    /** The composite empty. */
    private Composite _compositeEmpty;

    /** The front composite. */
    private Composite _frontComposite;

    /** The dimension composite. */
    private Composite _dimensionComposite;

    /** The relation composite. */
    private Composite _relationComposite;

    /** The classification composite. */
    private Composite _classificationComposite;

    /** The source composite. */
    private Composite _sourceComposite;

    /** The rights composite. */
    private Composite _rightsComposite;

    /** The admin composite. */
    private Composite _adminComposite;

    /** boolean if pointOfTime. */
    private boolean _pointOfTime = false;
    /** boolean if rangeOfTime. */
    private boolean _rangeOfTime = false;

    /** scrollable composite for classification. */
    private ScrolledComposite _scrollCompClass;
    /** scroll composite for relation dimension. */
    private ScrolledComposite _scrollCompRel;
    /** scroll composite for validation . */
    private ScrolledComposite _scrollCompVal;
    /** scroll composite for place dimension . */
    private ScrolledComposite _scrollCompTimePlace;

    /** groups for each relationStatement. */
    private Group _relGroup;
    /** group for timeStms. */
    private Group _timeGroup;
    /** group for spatialStm. */
    private Group _placeGroup;

    /** The markup provider. */
    private String _markupProvider = Platform.getPreferencesService().getString(CommonActivator.PLUGIN_ID,
            "PRIMARY_TAGGING_PROVIDER", AEConstants.TAGGING_LIST_PROVIDER, null).toUpperCase(); //$NON-NLS-1$;

    /** The relation provider. */
    private String _relationProvider;

    /** The semantic provider. */
    private String _semanticProvider;

    /** The content proposal. */
    private String _contentProposal;

    /** composite for rights TabItem. */
    private Composite _rightsTableComposite;

    /** stacklayout for extra tagging settings such as date, place. */
    private StackLayout _taggingStackLayout;

    /** The button tagging delete. */
    private Button _buttonTaggingDelete;

    /** The button tagging set. */
    private Button _buttonTaggingSet;

    /** The button tagging insert set. */
    private Button _buttonTaggingInsertSet;

    /** The button t date. */
    private Button _buttonTDate;

    /** The button t date range. */
    private Button _buttonTDateRange;

    /** The save button. */
    private Button _saveButton;

    /** The add relations button. */
    private Button _addRelationsButton;

    /** The add belongs to button. */
    private Button _addBelongsToButton;

    /** The add further classifier. */
    private Button _addFurtherClassifier;

    /** The add time stm button. */
    private Button _addTimeStmButton;

    /** The add spatial stm button. */
    private Button _addSpatialStmButton;

    /** The add references button. */
    private Button _addReferencesButton;

    /** The find ana. */
    private Button _findAna;

    /** The find key. */
    private Button _findKey;

    /** buttons for rights settings. */
    private Button _rightsORCheckbox;

    /** The rights ow checkbox. */
    private Button _rightsOWCheckbox;

    /** The rights wgr checkbox. */
    private Button _rightsWGRCheckbox;

    /** The rights wgw checkbox. */
    private Button _rightsWGWCheckbox;

    /** The rights pgr checkbox. */
    private Button _rightsPGRCheckbox;

    /** The rights pgw checkbox. */
    private Button _rightsPGWCheckbox;

    /** The rights ar checkbox. */
    private Button _rightsARCheckbox;

    /** The rights aw checkbox. */
    private Button _rightsAWCheckbox;

    /** Strings for tagging list selection via TaggingListProcessor. */
    /** name of selected list. */
    private String _rListName = ""; //$NON-NLS-1$

    /** The e list name. */
    private String _eListName = ""; //$NON-NLS-1$

    /** The t list name. */
    private String _tListName = ""; //$NON-NLS-1$

    /** The s list name. */
    private String _sListName = ""; //$NON-NLS-1$

    /** The message. */
    private String _message;

    /** The front viewed. */
    private boolean _frontViewed;

    /** The source viewed. */
    private boolean _sourceViewed;

    /** The rel viewed. */
    private boolean _relViewed;

    /** The time place viewed. */
    private boolean _timePlaceViewed;

    /** The clas view. */
    private boolean _clasView;

    /** The source view. */
    private boolean _sourceView;

    /** The rel view. */
    private boolean _relView;

    /** The may write. */
    private boolean _mayWrite;

    /** The time place view. */
    private boolean _timePlaceView;

    /** The whens. */
    private final String[] _whens = new String[] { "when", "notBefore", "notAfter" }; //$NON-NLS-1$

    /** The befores. */
    private final String[] _befores = new String[] { "from", "notBefore" }; //$NON-NLS-1$

    /** The afters. */
    private final String[] _afters = new String[] { "to", "notAfter" }; //$NON-NLS-1$

    /** The PRESELECTE d_ year. */
    private static final int PRESELECTED_YEAR = Platform.getPreferencesService().getInt(CommonActivator.PLUGIN_ID,
            "ASPECT_PRESELECTED_DATE_YEAR", AEConstants.ASPECT_PRESELECTED_DATE_YEAR, null);

    /** The _markup editor. */
    private IMarkupEditor _markupEditor;

    /** The _date parser. */
    private IDateParser _dateParser = new ControlExtensions().getDateParser();

    /* Undo/Redo */
    /** The UND o_ stacksize. */
    private static final int UNDO_STACKSIZE = 50;
    /** The _stack undo. */
    private Stack<UndoInformation> _stackUndo;

    /** The _stack redo. */
    private Stack<UndoInformation> _stackRedo;
    /** The _protect redo stack. */
    private boolean _protectRedoStack;
    private Button _buttonTaggingInsertMarkup;
    private Action _insertSpecialCharAction;
    private Button _symbolButton;
    private Composite _editorComposite;

    /**
     * Instantiates a new aspect editor dialog.
     * @param parentShell the parent shell
     * @param currentAspect the _current aspect
     */
    public AspectEditorDialog(final Shell parentShell, final Aspect currentAspect) {
        super(parentShell);
        this._currentAspect = currentAspect;
        this._currentPerson = _facade.getCurrentPerson();
        //setTitle(NLMessages.getString("AspectEditorDialog_titelAspectEditor")); //$NON-NLS-1$
    }

    /**
     * Instantiates a new aspect editor dialog.
     * @param parentShell the parent shell
     * @param currentPerson current person
     * @param currentAspect the _current aspect
     * @param message the message
     */
    public AspectEditorDialog(final Shell parentShell, Person currentPerson, final Aspect currentAspect,
            final String message) {
        super(parentShell);
        this._currentAspect = currentAspect;
        if (currentPerson != null) {
            this._currentPerson = currentPerson;
        } else {
            this._currentPerson = _facade.getCurrentPerson();
        }
        this._message = message;

        // _facade.addObserver(this);

    }

    @Override
    protected Point getInitialSize() {
        return new Point(700, 750);
    }

    @Override
    public void create() {
        super.create();
        setTitle(NLMessages.getString("AspectEditorDialog_titelAspectEditor")); //$NON-NLS-1$
    };

    @Override
    public void addSelectionChangedListener(ISelectionChangedListener listener) {
        // TODO Auto-generated method stub

    }

    /**
     * Adjust date.
     * @param c1 the c1
     * @param c2 the c2
     * @param s the s
     * @param date the date
     */
    private void adjustDate(final Combo c1, final Combo c2, final YearSpinner s, final PdrDate date) {
        c1.select(date.getDay());
        c2.select(date.getMonth());
        s.setSelection(date.getYear());
    }

    // /**
    // * chooses color for background color of tagged element depending on
    // tagging
    // * type.
    // * @param name name of tagging element according to which color is chosen.
    // * @return RGB for background color of tagged element
    // */
    // private Color chooseColor(final String name)
    // {
    //      if (name.equals("persName")) //$NON-NLS-1$
    // {
    // return _colorPers;
    // }
    //      else if (name.equals("orgName")) //$NON-NLS-1$
    // {
    // return _colorOrg;
    // }
    //      else if (name.equals("placeName")) //$NON-NLS-1$
    // {
    // return _colorPlace;
    // }
    //      else if (name.equals("name")) //$NON-NLS-1$
    // {
    // return _colorName;
    // }
    // else
    // {
    // return _colorDate;
    // }
    //
    // }

    /**
     * Creates the action from config data.
     * @param menuManager the menu manager
     * @param cd the cd
     */
    private void createActionFromConfigData(final IMenuManager menuManager, final ConfigData cd) {
        boolean ignore = false;
        if (cd instanceof ConfigItem) {
            ignore = ((ConfigItem) cd).isIgnore();
        }

        if (!ignore && cd instanceof ConfigItem) {
            Action markup = new Action(cd.getLabel()) {
                @Override
                public void run() {
                    setCombosByQuickSelect(cd);
                    setMarkup();
                }
            };
            menuManager.add(markup);
            markup.setImageDescriptor(_imageReg.getDescriptor(IconsInternal.MARKUP));
        }
        if (!ignore && cd.getChildren() != null) {
            IMenuManager mm2 = new MenuManager(cd.getLabel());
            menuManager.add(mm2);
            List<String> keys = new ArrayList<String>(cd.getChildren().keySet());
            Collections.sort(keys);
            for (String key : keys) {
                final ConfigData cd2 = cd.getChildren().get(key);
                createActionFromConfigData(mm2, cd2);
            }

        }
    }

    /**
     * Creates the actions.
     */
    private void createActions() {
        _undoAction = new Action(NLMessages.getString("Editor_action_undo")) {
            @Override
            public void run() {
                /* Undo -> Redo */
                if (_stackRedo.size() == UNDO_STACKSIZE) {
                    _stackRedo.removeElementAt(0);
                }
                if (!_stackUndo.isEmpty()) {
                    _stackRedo.push(_stackUndo.pop());

                    UndoInformation currentUndoInformation;

                    if (!_stackUndo.isEmpty()) {
                        currentUndoInformation = _stackUndo.pop();

                        /* Redo-Stack vorm Loeschen bewahren */
                        _protectRedoStack = true;

                        /* Aenderung ausfuehren */
                        if (currentUndoInformation.isModifiedText()) {
                            _currentAspect.setNotification(currentUndoInformation.getReplacedText());
                            _currentAspect.setRangeList(currentUndoInformation.getReplacedRanges());
                            _markupEditor.refresh();

                        } else {
                            // System.out.println("Ungueltige Undo-Information: "
                            // + currentUndoInformation.toString());
                        }
                        /*
                         * Bei der naechsten Aenderung, die auf den Undo-Stack
                         * kommt, kann der Redo-Stack wieder geloescht werden
                         */
                        _protectRedoStack = false;
                    }
                }

            }
        };
        _undoAction.setEnabled(false);
        _undoAction.setImageDescriptor(_imageReg.getDescriptor(IconsInternal.UNDO));
        _redoAction = new Action(NLMessages.getString("Editor_action_redo")) {
            @Override
            public void run() {
                UndoInformation currentUndoInformation;
                if (!_stackRedo.isEmpty()) {
                    currentUndoInformation = _stackRedo.pop();

                    /* Redo-Stack vorm Loeschen bewahren */
                    _protectRedoStack = true;

                    /* Aenderung ausfuehren */
                    if (currentUndoInformation.isModifiedText()) {
                        _currentAspect.setNotification(currentUndoInformation.getReplacedText());
                        _currentAspect.setRangeList(currentUndoInformation.getReplacedRanges());
                        _markupEditor.refresh();
                    } else {
                        // System.out.println("Ungueltige Undo-Information: " +
                        // currentUndoInformation.toString());
                    }
                    /*
                     * Bei der naechsten Aenderung, die auf den Undo-Stack
                     * kommt, kann der Redo-Stack wieder geloescht werden
                     */
                    _protectRedoStack = false;
                }

            }
        };
        _redoAction.setEnabled(false);
        _redoAction.setImageDescriptor(_imageReg.getDescriptor(IconsInternal.REDO));

        _customizeFavoriteMarkup = new Action(NLMessages.getString("View_customize_favorite_markup")) {
            @Override
            public void run() {

                ArrayList<Parameterization> parameters = new ArrayList<Parameterization>();
                IParameter iparam = null;

                // get the command from plugin.xml
                IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
                ICommandService cmdService = (ICommandService) window.getService(ICommandService.class);
                Command cmd = cmdService.getCommand("org.eclipse.ui.window.preferences");

                // get the parameter
                try {
                    iparam = cmd.getParameter("preferencePageId");
                } catch (NotDefinedException e1) {
                    e1.printStackTrace();
                }
                Parameterization params = new Parameterization(iparam,
                        "org.bbaw.pdr.ae.view.main.preferences.FavoriteMarkupPage");
                parameters.add(params);

                // build the parameterized command
                ParameterizedCommand pc = new ParameterizedCommand(cmd,
                        parameters.toArray(new Parameterization[parameters.size()]));

                // execute the command
                try {
                    IHandlerService handlerService = (IHandlerService) window.getService(IHandlerService.class);
                    handlerService.executeCommand(pc, null);
                } catch (ExecutionException e) {
                    e.printStackTrace();
                } catch (NotDefinedException e) {
                    e.printStackTrace();
                } catch (NotEnabledException e) {
                    e.printStackTrace();
                } catch (NotHandledException e) {
                    e.printStackTrace();
                }

                _customizeFavoriteMarkup.setChecked(false);

            }
        };
        _customizeFavoriteMarkup.setChecked(false);
        _customizeFavoriteMarkup.setImageDescriptor(_imageReg.getDescriptor(IconsInternal.PREFERENCES));

        _createPersonFromString = new Action(NLMessages.getString("Editor_create_person_fromString")) {
            @Override
            public void run() {
                ArrayList<Parameterization> parameters = new ArrayList<Parameterization>();
                IParameter iparam = null;
                IParameter iparam2 = null;
                // get the command from plugin.xml
                IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
                ICommandService cmdService = (ICommandService) window.getService(ICommandService.class);
                Command cmd = cmdService
                        .getCommand("org.bbaw.pdr.ae.view.main.commands.CreatePersonFromNameString");

                // get the parameter
                try {
                    iparam = cmd.getParameter("org.bbaw.pdr.ae.view.main.param.personNameString");
                } catch (NotDefinedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                Parameterization params = new Parameterization(iparam, _selectedText);
                parameters.add(params);

                try {
                    iparam2 = cmd.getParameter("org.bbaw.pdr.ae.view.main.param.originalAspectID");
                } catch (NotDefinedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                params = new Parameterization(iparam2, _currentAspect.getPdrId().toString());
                parameters.add(params);
                // build the parameterized command
                ParameterizedCommand pc = new ParameterizedCommand(cmd,
                        parameters.toArray(new Parameterization[parameters.size()]));

                // execute the command
                try {
                    IHandlerService handlerService = (IHandlerService) window.getService(IHandlerService.class);
                    handlerService.executeCommand(pc, null);
                } catch (ExecutionException e) {
                    e.printStackTrace();
                } catch (NotDefinedException e) {
                    e.printStackTrace();
                } catch (NotEnabledException e) {
                    e.printStackTrace();
                } catch (NotHandledException e) {
                    e.printStackTrace();
                }

            }
        };
        _createPersonFromString.setChecked(false);
        _createPersonFromString.setImageDescriptor(_imageReg.getDescriptor(IconsInternal.PERSON_QUICK));

        _insertSpecialCharAction = new Action("Insert special Char") {
            @Override
            public void run() {
                CharMapDialog dialog = new CharMapDialog(new Shell());
                int c = dialog.open();
                if (c != Window.CANCEL) {
                    _markupEditor.insert(new String(new char[] { (char) c }));

                }
            }
        };
        _insertSpecialCharAction.setImageDescriptor(_imageReg.getDescriptor(IconsInternal.EDIT_SYMBOL));
    }

    /**
     * Creates the admin tab item.
     * @param mainTabFolder the main tab folder
     */
    private void createAdminTabItem(final CTabFolder mainTabFolder) {
        _adminTabItem = new CTabItem(mainTabFolder, SWT.NONE);
        _adminTabItem.setText(NLMessages.getString("Editor_admin_data")); //$NON-NLS-1$
        _adminComposite = new Composite(mainTabFolder, SWT.NONE);
        _adminComposite.setLayout(new GridLayout());
        _adminTabItem.setControl(_adminComposite);
        Group pdrIdGroup = new Group(_adminComposite, SWT.SHADOW_IN);
        pdrIdGroup.setText(NLMessages.getString("Editor_administrativData")); //$NON-NLS-1$

        pdrIdGroup.setLayoutData(new GridData());
        ((GridData) pdrIdGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) pdrIdGroup.getLayoutData()).minimumHeight = 50;
        ((GridData) pdrIdGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) pdrIdGroup.getLayoutData()).minimumWidth = 500;

        pdrIdGroup.setLayout(new GridLayout());
        ((GridLayout) pdrIdGroup.getLayout()).numColumns = 10;
        ((GridLayout) pdrIdGroup.getLayout()).makeColumnsEqualWidth = true;

        Label pdrLabel = new Label(pdrIdGroup, SWT.NONE);
        pdrLabel.setText(NLMessages.getString("Editor_PDRid")); //$NON-NLS-1$
        pdrLabel.setLayoutData(new GridData());
        ((GridData) pdrLabel.getLayoutData()).horizontalSpan = 3;
        _pdrID = new Text(pdrIdGroup, SWT.NONE | SWT.READ_ONLY);
        _pdrID.setText("                                            "); //$NON-NLS-1$
        _pdrID.setLayoutData(new GridData());
        ((GridData) _pdrID.getLayoutData()).horizontalSpan = 3;
        ((GridData) pdrIdGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) pdrIdGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        //      _pdrID.pack();

        Label blancL = new Label(pdrIdGroup, SWT.NONE);
        blancL.setLayoutData(new GridData());
        ((GridData) blancL.getLayoutData()).horizontalSpan = 3;
        _historyLabel = new Label(pdrIdGroup, SWT.SHADOW_IN);
        _historyLabel.setText(NLMessages.getString("Editor_revision_history")); //$NON-NLS-1$
        _historyLabel.setLayoutData(new GridData());

        Label creatorLabel = new Label(pdrIdGroup, SWT.NONE);
        creatorLabel.setText(NLMessages.getString("Editor_creator")); //$NON-NLS-1$
        creatorLabel.setLayoutData(new GridData());
        ((GridData) creatorLabel.getLayoutData()).horizontalSpan = 3;

        _creatorNameText = new Text(pdrIdGroup, SWT.NONE | SWT.READ_ONLY);
        _creatorNameText.setText("                                            "); //$NON-NLS-1$
        _creatorNameText.setLayoutData(new GridData());
        ((GridData) _creatorNameText.getLayoutData()).horizontalSpan = 3;

        Label creationTime = new Label(pdrIdGroup, SWT.NONE);
        creationTime.setText(NLMessages.getString("Editor_date"));
        creationTime.setLayoutData(new GridData());
        _creationTimeText = new Text(pdrIdGroup, SWT.NONE | SWT.READ_ONLY);
        _creationTimeText.setText("                                            "); //$NON-NLS-1$
        _creationTimeText.setLayoutData(new GridData());
        ((GridData) _creationTimeText.getLayoutData()).horizontalSpan = 3;

        Label revisorLabel = new Label(pdrIdGroup, SWT.NONE);
        revisorLabel.setText(NLMessages.getString("Editor_lastChanged"));
        revisorLabel.setLayoutData(new GridData());
        ((GridData) revisorLabel.getLayoutData()).horizontalSpan = 3;

        _revisorName = new Text(pdrIdGroup, SWT.NONE | SWT.READ_ONLY);
        _revisorName.setLayoutData(new GridData());
        ((GridData) _revisorName.getLayoutData()).horizontalSpan = 3;
        _revisorName.setText("                                            "); //$NON-NLS-1$

        Label revisionTime = new Label(pdrIdGroup, SWT.NONE);
        revisionTime.setText(NLMessages.getString("Editor_date"));
        revisionTime.setLayoutData(new GridData());
        _revisionTimeText = new Text(pdrIdGroup, SWT.NONE | SWT.READ_ONLY);
        _revisionTimeText.setLayoutData(new GridData());
        ((GridData) _revisionTimeText.getLayoutData()).horizontalSpan = 3;
        _revisionTimeText.setText("                                            "); //$NON-NLS-1$

        // pdrIdGroup.pack();
        // pdrIdGroup
    }

    @Override
    protected final void createButtonsForButtonBar(final Composite parent) {
        GridData gridData = new GridData();
        gridData.verticalAlignment = GridData.FILL;
        gridData.horizontalSpan = 3;
        gridData.grabExcessHorizontalSpace = true;
        gridData.grabExcessVerticalSpace = true;
        gridData.horizontalAlignment = SWT.CENTER;

        parent.setLayoutData(gridData);
        // Create Add button
        // Own method as we need to overview the SelectionAdapter
        createOkButton(parent, OK, NLMessages.getString("Editor_save"), true); //$NON-NLS-1$
        // Add a SelectionListener
        // Create Cancel button
        Button cancelButton = createButton(parent, CANCEL, NLMessages.getString("Editor_cancel"), false); //$NON-NLS-1$
        // Add a SelectionListener
        cancelButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                setReturnCode(CANCEL);
                if (_currentAspect.isNew()) {
                    try {
                        _idService.resetIdUnused(_currentAspect.getPdrId());
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                }
                // _facade.setCurrentAspect(_facade.getLastAspects().get(_facade.getLastAspects().size()
                // -2 ));
                close();
            }
        });
        dialogArea.addListener(SWT.Traverse, new Listener() {
            @Override
            public void handleEvent(final Event e) {
                if (e.detail == SWT.TRAVERSE_ESCAPE) {
                    e.doit = false;
                }
            }
        });
        if (AEVIEWConstants.IS_SMALL_MONITOR_DIMENSION) {
            Point point = super.getShell().computeSize(850, 550, true);
            super.getShell().setSize(850, point.y);
            parent.setSize(800, 450);
        } else {
            // TODO fix layout problem: MarkupEditor grab horizontal space and widens tabfolder
            Point point = super.getShell().computeSize(870, 650, true);
            super.getShell().setSize(870, point.y);
            parent.setSize(860, 550);
        }
    }

    /**
     * @param mainTabFolder creates TabItem "Klassifikation" in AspectEditor.
     */
    @SuppressWarnings("unused")
    private void createClassificationTabItem(final CTabFolder mainTabFolder) {
        _taggingTabItem = new CTabItem(mainTabFolder, SWT.NONE);
        _taggingTabItem.setText(NLMessages.getString("Editor_classification")); //$NON-NLS-1$
        // taggingTabItem.setImage(_imageReg.get(IconsInternal.
        // classifications));
        // tagggingTabItemDeco = new ControlDecoration((Control)
        // taggingTabItem.getControl(), SWT.LEFT | SWT.BOTTOM);

        _classificationComposite = new Composite(mainTabFolder, SWT.NONE);
        _classificationComposite.setLayout(new GridLayout());
        ((GridLayout) _classificationComposite.getLayout()).marginHeight = 0;
        ((GridLayout) _classificationComposite.getLayout()).marginWidth = 0;

        _classificationComposite.setLayoutData(new GridData());
        ((GridData) _classificationComposite.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _classificationComposite.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _classificationComposite.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _classificationComposite.getLayoutData()).grabExcessVerticalSpace = true;
        _taggingTabItem.setControl(_classificationComposite);

        _addFurtherClassifier = new Button(_classificationComposite, SWT.PUSH);
        _addFurtherClassifier.setText(NLMessages.getString("Editor_addSemStm"));
        _addFurtherClassifier.setImage(_imageReg.get(IconsInternal.CLASSIFICATION_ADD));
        _addFurtherClassifier.setLayoutData(new GridData());
        ((GridData) _addFurtherClassifier.getLayoutData()).horizontalAlignment = SWT.LEFT;
        _addFurtherClassifier.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                loadClassification(1, null);
                validate();
            }
        });
        //      _addFurtherClassifier.pack();
        // classificationGroup.pack();
        // classificationComposite.pack();
        _classificationComposite.layout();
    }

    @Override
    protected final Control createDialogArea(final Composite parent) {

        if (!_facade.getConfigs().containsKey(_markupProvider)) {
            _markupProvider = "PDR";
        }
        _gridLayout = new GridLayout();
        _gridLayout.numColumns = 1;
        Composite comp = parent;
        ScrolledComposite baseScrolledComp = null;
        if (AEVIEWConstants.IS_SMALL_MONITOR_DIMENSION) // only on displays with less than 750 pixels height
        {
            parent.setLayout(new GridLayout(1, false));
            ((GridLayout) parent.getLayout()).marginHeight = 0;
            ((GridLayout) parent.getLayout()).marginWidth = 0;
            baseScrolledComp = new ScrolledComposite(parent, SWT.NONE | SWT.V_SCROLL);
            baseScrolledComp.setExpandHorizontal(true);
            baseScrolledComp.setExpandVertical(true);
            baseScrolledComp.setMinHeight(400);
            baseScrolledComp.setMinWidth(750);

            baseScrolledComp.setLayoutData(new GridData());
            ((GridData) baseScrolledComp.getLayoutData()).heightHint = 400;
            ((GridData) baseScrolledComp.getLayoutData()).widthHint = 780;
            ((GridData) baseScrolledComp.getLayoutData()).horizontalSpan = 1;

            ((GridData) baseScrolledComp.getLayoutData()).horizontalAlignment = SWT.FILL;
            ((GridData) baseScrolledComp.getLayoutData()).grabExcessHorizontalSpace = true;
            baseScrolledComp.layout();

            comp = new Composite(baseScrolledComp, SWT.NONE);
            comp.setLayout(new GridLayout());
            ((GridLayout) comp.getLayout()).marginHeight = 0;
            ((GridLayout) comp.getLayout()).marginWidth = 0;
            comp.setLayoutData(new GridData());
            ((GridData) comp.getLayoutData()).horizontalSpan = 1;
            ((GridData) comp.getLayoutData()).horizontalAlignment = SWT.FILL;
            ((GridData) comp.getLayoutData()).grabExcessHorizontalSpace = true;
            ((GridData) comp.getLayoutData()).verticalAlignment = SWT.FILL;
            ((GridData) comp.getLayoutData()).grabExcessVerticalSpace = true;
            baseScrolledComp.setContent(comp);
        }
        _gridData = new GridData();
        _gridData.verticalAlignment = GridData.BEGINNING;
        _gridData.horizontalAlignment = GridData.FILL;
        _gridData.horizontalSpan = 1;
        _gridData.grabExcessHorizontalSpace = true;
        _gridData.grabExcessVerticalSpace = true;

        _mainTabFolder = new CTabFolder(comp, SWT.NONE);
        _mainTabFolder.setLayoutData(new GridData());
        ((GridData) _mainTabFolder.getLayoutData()).verticalAlignment = GridData.FILL;
        ((GridData) _mainTabFolder.getLayoutData()).horizontalSpan = 4;
        ((GridData) _mainTabFolder.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _mainTabFolder.getLayoutData()).grabExcessVerticalSpace = true;
        ((GridData) _mainTabFolder.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _mainTabFolder.getLayoutData()).minimumHeight = 600;
        ((GridData) _mainTabFolder.getLayoutData()).heightHint = 630;

        ((GridData) _mainTabFolder.getLayoutData()).minimumWidth = 770;

        _mainTabFolder.addSelectionListener(new SelectionListener() {
            @Override
            public void widgetDefaultSelected(final SelectionEvent e) {
                widgetSelected(e);
            }

            @Override
            public void widgetSelected(final SelectionEvent e) {
                int index = _mainTabFolder.getSelectionIndex();
                // System.out.println("tabfolder index " + index);

                _sourceViewed = _sourceView;
                _relViewed = _relView;
                _timePlaceViewed = _timePlaceView;
                switch (index) {
                case 0:
                    _clasView = true;
                    break;
                case 1:
                    _sourceView = true;
                    break;
                case 2:
                    if (!_relView) {
                        loadRelationDim(0, null, null);
                    }
                    _relView = true;
                    break;
                case 3:
                    if (!_timePlaceView) {
                        loadTimeSpatialDim(0, null, null, null, null);
                    }
                    _timePlaceView = true;
                    break;
                default:
                    break;
                }
                _frontViewed = (_clasView || _sourceView || _relView || _timePlaceView);
                if (_currentAspect != null) {
                    validate();
                }

            }
        });

        _gridLayout2 = new GridLayout();
        _gridLayout2.numColumns = 4;
        _gridLayout2.makeColumnsEqualWidth = true;

        _mainTabFolder.setLayout(_gridLayout);

        createFrontTabItem(_mainTabFolder);
        // createClassificationTabItem(mainTabFolder);
        createSourceTabItem(_mainTabFolder);
        createRelationTabItem(_mainTabFolder);
        createDimensionTabItem(_mainTabFolder);
        createAdminTabItem(_mainTabFolder);

        if (Platform.getPreferencesService().getBoolean(CommonActivator.PLUGIN_ID, "RIGHTS_GENERAL",
                AEConstants.RIGHTS_GENERAL, null)) {
            createRightsTabItem(_mainTabFolder);
        }
        _mainTabFolder.setSelection(0);

        try {
            loadValues();
        } catch (SAXException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (ParserConfigurationException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        validate();

        _markupEditor.setSelected(true);

        if (AEVIEWConstants.IS_SMALL_MONITOR_DIMENSION) {
            comp.layout();

            baseScrolledComp.setContent(comp);
            Point point = comp.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
            Point mp = _mainTabFolder.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
            if (point.x > mp.x - 20) {
                point.x = mp.x - 20;
            }
            baseScrolledComp.setMinSize(point);
            baseScrolledComp.layout();
        }
        return parent;
    }

    /**
     * @param mainTabFolder creates TabItem "Dimensionen" in AspectEditor
     */
    private void createDimensionTabItem(final CTabFolder mainTabFolder) {
        _dimensionTabItem = new CTabItem(mainTabFolder, SWT.NONE);
        _dimensionTabItem.setText(NLMessages.getString("Editor_timePlace")); //$NON-NLS-1$
        _dimensionComposite = new Composite(mainTabFolder, SWT.NONE);
        _dimensionComposite.setLayout(new GridLayout());
        _dimensionComposite.setLayoutData(new GridData());
        _dimensionTabItem.setControl(_dimensionComposite);
        ((GridLayout) _dimensionComposite.getLayout()).numColumns = 2;

        _addTimeStmButton = new Button(_dimensionComposite, SWT.PUSH);
        _addTimeStmButton.setText(NLMessages.getString("Editor_addTimeDim"));
        _addTimeStmButton.setToolTipText(NLMessages.getString("Editor_add_timeDim_tip"));
        _addTimeStmButton.setImage(_imageReg.get(IconsInternal.TIME_ADD));
        _addTimeStmButton.setLayoutData(new GridData());
        ((GridData) _addTimeStmButton.getLayoutData()).verticalAlignment = SWT.BEGINNING;
        ((GridData) _addTimeStmButton.getLayoutData()).horizontalAlignment = SWT.LEFT;
        _addTimeStmButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                loadTimeSpatialDim(1, null, null, null, null);
                validate();
            }
        });
        //      _addTimeStmButton.pack();

        _addSpatialStmButton = new Button(_dimensionComposite, SWT.PUSH);
        _addSpatialStmButton.setText(NLMessages.getString("Editor_addSpatialDim"));
        _addSpatialStmButton.setToolTipText(NLMessages.getString("Editor_add_spatialDim_tip"));
        _addSpatialStmButton.setImage(_imageReg.get(IconsInternal.PLACE_ADD));
        _addSpatialStmButton.setLayoutData(new GridData());
        ((GridData) _addSpatialStmButton.getLayoutData()).verticalAlignment = SWT.BEGINNING;
        ((GridData) _addSpatialStmButton.getLayoutData()).horizontalAlignment = SWT.LEFT;
        _addSpatialStmButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {

                loadTimeSpatialDim(5, null, null, null, null);
                validate();
            }
        });
        //      _addSpatialStmButton.pack();

    }

    /**
     * @param mainTabFolder creates TabItem "Allgemein" in AspectEditor
     */
    private void createFrontTabItem(final CTabFolder mainTabFolder) {
        /* Undo/Redo */
        _stackUndo = new Stack<UndoInformation>();
        _stackUndo.ensureCapacity(UNDO_STACKSIZE);
        _stackRedo = new Stack<UndoInformation>();
        _stackRedo.ensureCapacity(UNDO_STACKSIZE);
        _protectRedoStack = false;

        _stackUndo.removeAllElements();
        _markupEditor = ControlExtensions.createMarkupEditor();
        _frontTabItem = new CTabItem(mainTabFolder, SWT.NONE);
        _frontTabItem.setText(NLMessages.getString("Editor_general")); //$NON-NLS-1$
        _frontComposite = new Composite(mainTabFolder, SWT.NONE);
        _frontComposite.setLayout(new GridLayout());
        // ((GridLayout) frontComposite.getLayout()).numColumns = 1;
        // // ((GridLayout) frontComposite.getLayout()).makeColumnsEqualWidth =
        // true;

        _frontComposite.setLayoutData(new GridData());
        ((GridData) _frontComposite.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _frontComposite.getLayoutData()).grabExcessVerticalSpace = true;
        ((GridData) _frontComposite.getLayoutData()).minimumHeight = 700;

        _frontTabItem.setControl(_frontComposite);

        Group classifierGroup = new Group(_frontComposite, SWT.NONE);
        classifierGroup.setLayout(new GridLayout());
        classifierGroup.setLayout(new GridLayout());
        ((GridLayout) classifierGroup.getLayout()).marginHeight = 0;
        ((GridLayout) classifierGroup.getLayout()).marginWidth = 0;
        classifierGroup.setLayoutData(new GridData());
        ((GridData) classifierGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        // ((GridData)
        // classificationComposite.getLayoutData()).verticalAlignment =
        // SWT.FILL;
        ((GridData) classifierGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        classifierGroup.setText(NLMessages.getString("Editor_classification"));

        _classificationComposite = new Composite(classifierGroup, SWT.NONE);
        _classificationComposite.setLayout(new GridLayout());
        ((GridLayout) _classificationComposite.getLayout()).marginHeight = 0;
        ((GridLayout) _classificationComposite.getLayout()).marginWidth = 0;
        _classificationComposite.setLayoutData(new GridData());
        ((GridData) _classificationComposite.getLayoutData()).horizontalAlignment = SWT.FILL;
        // ((GridData)
        // classificationComposite.getLayoutData()).verticalAlignment =
        // SWT.FILL;
        ((GridData) _classificationComposite.getLayoutData()).grabExcessHorizontalSpace = true;
        // ((GridData)
        // classificationComposite.getLayoutData()).grabExcessVerticalSpace =
        // true;
        // taggingTabItem.setControl(classificationComposite);

        // classificationGroup.pack();
        // classificationComposite.pack();
        _classificationComposite.layout();

        // Tagging
        _taggingGroup = new Group(_frontComposite, SWT.NONE);
        _taggingGroup.setLayout(new GridLayout());
        _taggingGroup.setLayoutData(new GridData());
        ((GridLayout) _taggingGroup.getLayout()).numColumns = 1;
        ((GridLayout) _taggingGroup.getLayout()).marginHeight = 0;
        ((GridLayout) _taggingGroup.getLayout()).marginWidth = 0;
        ((GridData) _taggingGroup.getLayoutData()).verticalAlignment = SWT.BEGINNING;
        ((GridData) _taggingGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _taggingGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        _taggingGroup.setText(NLMessages.getString("Editor_tagging")); //$NON-NLS-1$

        _tagging1Coposite = new Composite(_taggingGroup, SWT.NONE);
        _tagging1Coposite.setLayout(new GridLayout());
        _tagging1Coposite.setLayoutData(new GridData());
        ((GridLayout) _tagging1Coposite.getLayout()).numColumns = 8;
        ((GridLayout) _tagging1Coposite.getLayout()).makeColumnsEqualWidth = true;
        // ((GridData) tagging1Coposite.getLayoutData()).verticalAlignment =
        // SWT.FILL;
        ((GridData) _tagging1Coposite.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _tagging1Coposite.getLayoutData()).horizontalAlignment = SWT.FILL;

        Label taggingElement = new Label(_tagging1Coposite, SWT.RIGHT);
        taggingElement.setText(NLMessages.getString("Editor_markup_element") + "*");
        taggingElement.setLayoutData(new GridData());

        _comboTaggingElement = new Combo(_tagging1Coposite, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.RIGHT);
        _comboTaggingElement.setBackground(WHITE_COLOR);
        _comboTaggingElement.setLayoutData(new GridData());
        ((GridData) _comboTaggingElement.getLayoutData()).horizontalSpan = 3;
        ((GridData) _comboTaggingElement.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _comboTaggingElement.getLayoutData()).grabExcessHorizontalSpace = true;

        _comboTaggingElementViewer = new ComboViewer(_comboTaggingElement);
        _comboTaggingElementViewer.setContentProvider(new MarkupContentProvider());
        _comboTaggingElementViewer.setLabelProvider(new MarkupLabelProvider());
        if (_facade.getConfigs().containsKey(_markupProvider)) {
            _comboTaggingElementViewer.setInput(_facade.getConfigs().get(_markupProvider).getChildren());
        }
        ConfigData cd = (ConfigData) _comboTaggingElementViewer.getElementAt(0);
        if (cd != null) {
            if (cd.getValue().startsWith("aodl:")) {
                _eListName = cd.getValue().substring(5);
            } else {
                _eListName = cd.getValue();
            }
        }
        _comboTaggingElementViewer
                .setSelection(new StructuredSelection(_comboTaggingElementViewer.getElementAt(0)));
        _elementDeco = new ControlDecoration(_comboTaggingElement, SWT.RIGHT | SWT.TOP);
        _elementDeco.setDescriptionText(
                PDRConfigProvider.readDocu(_markupProvider, "markup", "element", _eListName, null, null, null));
        if (_elementDeco.getDescriptionText() != null) {
            _elementDeco.setImage(FieldDecorationRegistry.getDefault()
                    .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
        } else {
            _elementDeco.setImage(null);
        }
        _comboTaggingElementViewer.addSelectionChangedListener(new ISelectionChangedListener() {

            @Override
            public void selectionChanged(final SelectionChangedEvent event) {
                ISelection iSelection = event.getSelection();
                Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                ConfigData cd = (ConfigData) obj;
                if (cd.getValue().startsWith("aodl:")) {
                    _eListName = cd.getValue().substring(5);
                } else {
                    _eListName = cd.getValue();
                }
                _comboTaggingType.removeAll();
                _tListName = ""; //$NON-NLS-1$
                _comboTaggingSubtype.removeAll();
                _comboTaggingSubtype.setEnabled(false);
                _sListName = ""; //$NON-NLS-1$
                _comboTaggingRole.removeAll();
                _comboTaggingRole.setEnabled(false);
                _rListName = ""; //$NON-NLS-1$
                _textTaggingKey.setText(""); //$NON-NLS-1$
                _textTaggingKey.setEnabled(false);
                _contentText.setText("");
                _buttonTaggingSet.setEnabled(false);
                _buttonTaggingInsertSet.setEnabled(false);
                _buttonTaggingInsertMarkup.setEnabled(false);
                if (!_eListName.equals("date")) //$NON-NLS-1$
                {
                    // delete date selection after every change in tagging
                    // element.
                    _comboTDateDay.select(0);
                    _comboTDateMonth.select(0);
                    _spinnerTDateYear.setSelection(PRESELECTED_YEAR);
                    _comboTDateRangeFromDay.select(0);
                    _comboTDateRangeFromMonth.select(0);
                    _spinnerTDateRangeFromYear.setSelection(PRESELECTED_YEAR);
                    _comboTDateRangeToDay.select(0);
                    _comboTDateRangeToMonth.select(0);
                    _spinnerTDateRangeToYear.setSelection(PRESELECTED_YEAR);
                    _taggingStackLayout.topControl = _compositeEmpty;
                    _compositeTaggingPanel.layout();
                    _pointOfTime = false;
                    _rangeOfTime = false;
                }

                // TODO erweitern fr placeName Keyfindung

                _elementDeco.setDescriptionText(PDRConfigProvider.readDocu(_markupProvider, "markup", "element",
                        _eListName, null, null, null));
                if (_elementDeco.getDescriptionText() != null
                        && _elementDeco.getDescriptionText().trim().length() > 0) {
                    _elementDeco.setImage(FieldDecorationRegistry.getDefault()
                            .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
                } else {
                    _elementDeco.setImage(null);
                }
                _typeDeco.setImage(null);
                _typeDeco.setDescriptionText(null);
                _subtypeDeco.setImage(null);
                _subtypeDeco.setDescriptionText(null);
                _roleDeco.setImage(null);
                _roleDeco.setDescriptionText(null);
                if (_facade.getConfigs().containsKey(_markupProvider)) {
                    _comboTaggingTypeViewer.setInput(_facade.getConfigs().get(_markupProvider).getChildren()
                            .get("aodl:" + _eListName).getChildren());
                }
                // comboTaggingType.setItems(readConfigs(_markupProvider,
                // "markup", "type", eListName, null, null));
            }

        });

        // Label elementBlanc = new Label(tagging1Coposite, SWT.None);
        // elementBlanc.setText("");
        // elementBlanc.setLayoutData(new GridData());
        // ((GridData) elementBlanc.getLayoutData()).horizontalSpan = 1;

        // comboTaggingElement

        Label taggingType = new Label(_tagging1Coposite, SWT.RIGHT);
        taggingType.setText(NLMessages.getString("Editor_type") + "*");
        taggingType.setLayoutData(new GridData());
        ((GridData) taggingType.getLayoutData()).horizontalIndent = 6;
        ((GridData) taggingType.getLayoutData()).horizontalAlignment = SWT.RIGHT;

        _comboTaggingType = new Combo(_tagging1Coposite, SWT.DROP_DOWN | SWT.READ_ONLY);
        _comboTaggingType.setBackground(WHITE_COLOR);
        _comboTaggingType.setLayoutData(new GridData());
        ((GridData) _comboTaggingType.getLayoutData()).horizontalAlignment = GridData.FILL;
        ((GridData) _comboTaggingType.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _comboTaggingType.getLayoutData()).horizontalSpan = 3;
        _comboTaggingTypeViewer = new ComboViewer(_comboTaggingType);
        _comboTaggingTypeViewer.setContentProvider(new MarkupContentProvider());
        _comboTaggingTypeViewer.setLabelProvider(new MarkupLabelProvider());
        _comboTaggingType.setEnabled(_mayWrite);
        // comboTaggingType.setItems(readConfigs(_markupProvider, "markup",
        // "type", eListName, null, null));
        _typeDeco = new ControlDecoration(_comboTaggingType, SWT.RIGHT | SWT.TOP);
        _comboTaggingTypeViewer.setInput(
                _facade.getConfigs().get(_markupProvider).getChildren().get("aodl:" + _eListName).getChildren());

        _comboTaggingTypeViewer.addSelectionChangedListener(new ISelectionChangedListener() {

            @Override
            public void selectionChanged(final SelectionChangedEvent event) {
                ISelection iSelection = event.getSelection();
                Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                ConfigData cd = (ConfigData) obj;
                if (cd != null) {
                    _tListName = cd.getValue();
                }
                _comboTaggingSubtype.removeAll();
                _sListName = ""; //$NON-NLS-1$
                _comboTaggingRole.removeAll();
                _comboTaggingRole.setEnabled(false);
                _rListName = ""; //$NON-NLS-1$
                _textTaggingKey.setText(""); //$NON-NLS-1$
                _textTaggingKey.setEnabled(_mayWrite && _selectedTaggingRanges == null);
                _contentText.setText("");
                _buttonTaggingSet.setEnabled(_mayWrite && _selectedTaggingRanges == null);
                _buttonTaggingInsertSet.setEnabled(_mayWrite && _selectedTaggingRanges == null);
                _buttonTaggingInsertMarkup.setEnabled(_mayWrite && _selectedTaggingRanges == null);
                if (_eListName.equals("date")) //$NON-NLS-1$
                {
                    _taggingStackLayout.topControl = _compositeTaggingDate;
                    // compositeTaggingDate.setVisible(true);
                } else if (_eListName.equals("placeName")) //$NON-NLS-1$
                {
                    _taggingStackLayout.topControl = _compositeTaggingPlace;
                } else {
                    _taggingStackLayout.topControl = _compositeEmpty;
                }
                _compositeTaggingPanel.layout();
                _comboTaggingSubtype.setEnabled(_mayWrite && _selectedTaggingRanges == null);

                // if (!eListName.equals("date"))
                // {
                // ConfigData input =
                // _facade.getConfigs().get(_markupProvider).getChildren().get("aodl:"
                // + eListName).getChildren().get(tListName);
                // if (input != null)
                // comboTaggingSubtypeViewer.setInput(input.getChildren());
                // }
                ConfigData input = null;
                if (_facade.getConfigs().containsKey(_markupProvider)) {
                    input = _facade.getConfigs().get(_markupProvider).getChildren().get("aodl:" + _eListName)
                            .getChildren().get(_tListName);
                }
                if (input != null) {
                    _comboTaggingSubtypeViewer.setInput(input.getChildren());

                }
                _typeDeco.setDescriptionText(PDRConfigProvider.readDocu(_markupProvider, "markup", "type",
                        _eListName, _tListName, null, null));
                if (_typeDeco.getDescriptionText() != null && _typeDeco.getDescriptionText().trim().length() > 0) {
                    _typeDeco.setImage(FieldDecorationRegistry.getDefault()
                            .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
                } else {
                    _typeDeco.setImage(null);
                }
                _subtypeDeco.setImage(null);
                _subtypeDeco.setDescriptionText(null);
                _roleDeco.setImage(null);
                _roleDeco.setDescriptionText(null);
            }
        });

        // Label blancType = new Label(tagging1Coposite, SWT.NONE);
        // blancType.setText("");
        // blancType.setLayoutData(new GridData());

        Label taggingSubtype = new Label(_tagging1Coposite, SWT.RIGHT | SWT.READ_ONLY);
        taggingSubtype.setText(NLMessages.getString("Editor_subtype"));
        taggingSubtype.setLayoutData(new GridData());

        _comboTaggingSubtype = new Combo(_tagging1Coposite, SWT.READ_ONLY);
        _comboTaggingSubtype.setBackground(WHITE_COLOR);
        _comboTaggingSubtype.setLayoutData(new GridData());
        ((GridData) _comboTaggingSubtype.getLayoutData()).horizontalAlignment = GridData.FILL;
        ((GridData) _comboTaggingSubtype.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _comboTaggingSubtype.getLayoutData()).horizontalSpan = 3;
        _comboTaggingSubtype.setEnabled(false);
        _comboTaggingSubtypeViewer = new ComboViewer(_comboTaggingSubtype);
        _comboTaggingSubtypeViewer.setContentProvider(new MarkupContentProvider());
        _comboTaggingSubtypeViewer.setLabelProvider(new MarkupLabelProvider());
        _subtypeDeco = new ControlDecoration(_comboTaggingSubtype, SWT.RIGHT | SWT.TOP);

        _comboTaggingSubtypeViewer.addSelectionChangedListener(new ISelectionChangedListener() {

            @Override
            public void selectionChanged(final SelectionChangedEvent event) {
                ISelection iSelection = event.getSelection();
                Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                ConfigData cd = (ConfigData) obj;
                if (cd != null) {
                    String selection = cd.getValue();
                    _comboTaggingRole.removeAll();
                    _comboTaggingRole.setEnabled(_mayWrite && _selectedTaggingRanges == null);
                    _rListName = ""; //$NON-NLS-1$
                    _sListName = selection;
                    _textTaggingKey.setText(""); //$NON-NLS-1$
                    _textTaggingKey.setEnabled(_mayWrite && _selectedTaggingRanges == null);
                    _comboTaggingSubtype.layout();
                    ConfigData input = _facade.getConfigs().get(_markupProvider);
                    if (input != null) {
                        input = input.getChildren().get("aodl:" + _eListName);
                    }
                    if (input != null) {
                        input = input.getChildren().get(_tListName);
                    }
                    if (input != null) {
                        input = input.getChildren().get(_sListName);
                    }
                    if (input != null) {
                        _comboTaggingRoleViewer.setInput(input.getChildren());

                    }
                    _subtypeDeco.setDescriptionText(PDRConfigProvider.readDocu(_markupProvider, "markup", "subtype",
                            _eListName, _tListName, _sListName, null));
                    if (_subtypeDeco.getDescriptionText() != null
                            && _subtypeDeco.getDescriptionText().trim().length() > 0) {
                        _subtypeDeco.setImage(FieldDecorationRegistry.getDefault()
                                .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
                    } else {
                        _subtypeDeco.setImage(null);
                    }
                    _roleDeco.setImage(null);
                    _roleDeco.setDescriptionText(null);
                    _contentText.setText("");
                }
            }

        });
        // Label blancSubtype = new Label(tagging1Coposite, SWT.NONE);
        // blancSubtype.setText("");
        // blancSubtype.setLayoutData(new GridData());
        // end subtype

        Label taggingRole = new Label(_tagging1Coposite, SWT.RIGHT);
        taggingRole.setText(NLMessages.getString("Editor_role"));
        taggingRole.setLayoutData(new GridData());
        taggingRole.setLayoutData(new GridData());
        ((GridData) taggingRole.getLayoutData()).horizontalIndent = 6;
        ((GridData) taggingRole.getLayoutData()).horizontalAlignment = SWT.RIGHT;

        _comboTaggingRole = new Combo(_tagging1Coposite, SWT.DROP_DOWN | SWT.READ_ONLY);
        _comboTaggingRole.setBackground(WHITE_COLOR);
        _comboTaggingRole.setLayoutData(new GridData());
        ((GridData) _comboTaggingRole.getLayoutData()).horizontalAlignment = GridData.FILL;
        ((GridData) _comboTaggingRole.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _comboTaggingRole.getLayoutData()).horizontalSpan = 3;
        _comboTaggingRoleViewer = new ComboViewer(_comboTaggingRole);
        _comboTaggingRoleViewer.setContentProvider(new MarkupContentProvider());
        _comboTaggingRoleViewer.setLabelProvider(new MarkupLabelProvider());
        _comboTaggingRole.setEnabled(false);
        _roleDeco = new ControlDecoration(_comboTaggingRole, SWT.RIGHT | SWT.TOP);

        _comboTaggingRoleViewer.addSelectionChangedListener(new ISelectionChangedListener() {

            @Override
            public void selectionChanged(final SelectionChangedEvent event) {
                ISelection iSelection = event.getSelection();
                Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                ConfigData cd = (ConfigData) obj;
                if (cd != null) {
                    _rListName = cd.getValue();
                    _contentText.setText("");
                    _roleDeco.setDescriptionText(PDRConfigProvider.readDocu(_markupProvider, "markup", "role",
                            _eListName, _tListName, _sListName, _rListName));
                    if (_roleDeco.getDescriptionText() != null
                            && _roleDeco.getDescriptionText().trim().length() > 0) {
                        _roleDeco.setImage(FieldDecorationRegistry.getDefault()
                                .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
                    } else {
                        _roleDeco.setImage(null);
                    }
                } else {
                    _roleDeco.setImage(null);
                }

            }
        });
        //
        // Label blancRole = new Label(tagging1Coposite, SWT.None);
        // blancRole.setText("");
        // blancRole.setLayoutData(new GridData());
        // end role

        Label taggingAna = new Label(_tagging1Coposite, SWT.NONE);
        taggingAna.setText(NLMessages.getString("Editor_markup_ana"));
        taggingAna.setLayoutData(new GridData());

        _textTaggingAna = new Text(_tagging1Coposite, SWT.BORDER);
        _textTaggingAna.setBackground(WHITE_COLOR);
        _textTaggingAna.setLayoutData(new GridData());
        ((GridData) _textTaggingAna.getLayoutData()).horizontalAlignment = GridData.FILL;
        ((GridData) _textTaggingAna.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _textTaggingAna.getLayoutData()).horizontalSpan = 6;
        ControlDecoration decoAna = new ControlDecoration(_textTaggingAna, SWT.LEFT);
        decoAna.setDescriptionText(NLMessages.getString("Editor_proposal_cntl_aspects_persons_last"));
        decoAna.setImage(FieldDecorationRegistry.getDefault()
                .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
        decoAna.setShowOnlyOnFocus(false);
        _textTaggingAna.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(final FocusEvent e) {
                char[] autoActivationCharacters = new char[] { '.', '#' };
                KeyStroke keyStrokeP;
                KeyStroke keyStrokeA;
                KeyStroke keyStrokeL;

                try {
                    keyStrokeA = KeyStroke.getInstance("Ctrl+e");
                    keyStrokeP = KeyStroke.getInstance("Ctrl+p");
                    keyStrokeL = KeyStroke.getInstance("Ctrl+l");

                    ContentProposalAdapter adapter = new ContentProposalAdapter(_textTaggingAna,
                            new TextContentAdapter(),
                            new FacetContentProposalProvider(_facade.getAllPersonsFacets()), keyStrokeP,
                            autoActivationCharacters);
                    adapter.setLabelProvider(new AutoCompleteNameLabelProvider());
                    // System.out.println("innerhalb des try");
                    adapter.addContentProposalListener(new IContentProposalListener() {
                        @Override
                        public void proposalAccepted(final IContentProposal proposal) {
                            _textTaggingAna.setText(proposal.getContent());
                            if (((Facet) proposal).getKey() != null) {
                                _textTaggingAna.setData("id", ((Facet) proposal).getKey());
                            }
                        }
                    });

                    ContentProposalAdapter adapter2 = new ContentProposalAdapter(_textTaggingAna,
                            new TextContentAdapter(),
                            new FacetContentProposalProvider(_facade.getLoadedAspectsFacets()), keyStrokeA,
                            autoActivationCharacters);
                    adapter2.setLabelProvider(new AutoCompleteNameLabelProvider());
                    // System.out.println("innerhalb des try");
                    adapter2.addContentProposalListener(new IContentProposalListener() {
                        @Override
                        public void proposalAccepted(final IContentProposal proposal) {
                            _textTaggingAna.setText(proposal.getContent());
                            if (((Facet) proposal).getKey() != null) {
                                _textTaggingAna.setData("id", ((Facet) proposal).getKey());
                            }
                        }
                    });
                    if (_facade.getLastObjectsFacets() != null) {

                        ContentProposalAdapter adapter3 = new ContentProposalAdapter(_textTaggingAna,
                                new TextContentAdapter(),
                                new FacetContentProposalProvider(_facade.getLastObjectsFacets()), keyStrokeL,
                                autoActivationCharacters);
                        adapter3.setLabelProvider(new AutoCompleteNameLabelProvider());
                        // System.out.println("innerhalb des try");
                        adapter3.addContentProposalListener(new IContentProposalListener() {
                            @Override
                            public void proposalAccepted(final IContentProposal proposal) {
                                _textTaggingAna.setText(proposal.getContent());
                                if (((Facet) proposal).getKey() != null) {
                                    _textTaggingAna.setData("id", ((Facet) proposal).getKey());
                                }
                            }
                        });
                    }
                } catch (org.eclipse.jface.bindings.keys.ParseException e1) {

                    e1.printStackTrace();
                }

            }

            @Override
            public void focusLost(final FocusEvent e) {
                if (_textTaggingAna.getText().trim().length() == 0) {
                    _textTaggingAna.setData("id", "");
                } else {
                    _facade.addIDStringToLastObjects((String) _textTaggingAna.getData("id"));
                }
            }
        });

        _findAna = new Button(_tagging1Coposite, SWT.PUSH);
        //      _findAna.setText(NLMessages.getString("Editor_select_dots"));
        _findAna.setToolTipText(NLMessages.getString("Editor_open_selObjDialog_ana_tip"));
        _findAna.setImage(_imageReg.get(IconsInternal.SEARCH));
        // findAna.setLayoutData(new GridData());
        // ((GridData) findAna.getLayoutData()).horizontalSpan = 1;
        // ((GridData) findAna.getLayoutData()).horizontalAlignment =
        // SWT.RIGHT;
        _findAna.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {

                IWorkbench workbench = PlatformUI.getWorkbench();
                Display display = workbench.getDisplay();
                Shell shell = new Shell(display);
                SelectObjectDialog dialog = new SelectObjectDialog(shell, 1);
                dialog.open();
                if (_facade.getRequestedId() != null) {
                    PdrObject o = _facade.getPdrObject(new PdrId(_facade.getRequestedId().toString()));
                    _textTaggingAna.setData("id", o.getPdrId().toString());
                    _textTaggingAna.setText(o.getDisplayNameWithID());
                }
            }
        });

        // end Ana

        Label taggingKey = new Label(_tagging1Coposite, SWT.NONE);
        taggingKey.setText(NLMessages.getString("Editor_key"));
        taggingKey.setLayoutData(new GridData());

        _textTaggingKey = new Text(_tagging1Coposite, SWT.BORDER);
        _textTaggingKey.setBackground(WHITE_COLOR);
        _textTaggingKey.setLayoutData(new GridData());
        ((GridData) _textTaggingKey.getLayoutData()).horizontalAlignment = GridData.FILL;
        ((GridData) _textTaggingKey.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _textTaggingKey.getLayoutData()).horizontalSpan = 6;
        ControlDecoration decoKey = new ControlDecoration(_textTaggingKey, SWT.LEFT);
        decoKey.setDescriptionText(NLMessages.getString("Editor_proposal_cntl_all_ref"));
        decoKey.setImage(FieldDecorationRegistry.getDefault()
                .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
        decoKey.setShowOnlyOnFocus(false);
        _textTaggingKey.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(final FocusEvent e) {
                char[] autoActivationCharacters = new char[] { '.', '#' };
                KeyStroke keyStroke;

                try {
                    keyStroke = KeyStroke.getInstance("Ctrl+Space");

                    ContentProposalAdapter adapter = new ContentProposalAdapter(_textTaggingKey,
                            new TextContentAdapter(),
                            new FacetContentProposalProvider(_facade.getAllReferenceFacets()), keyStroke,
                            autoActivationCharacters); // XXX warum references???
                    adapter.setLabelProvider(new AutoCompleteNameLabelProvider());
                    adapter.addContentProposalListener(new IContentProposalListener() {
                        @Override
                        public void proposalAccepted(final IContentProposal proposal) {
                            _textTaggingKey.setText(proposal.getContent());
                            if (((Facet) proposal).getKey() != null) {
                                _textTaggingKey.setData("id", ((Facet) proposal).getKey());
                            }
                        }
                    });

                } catch (org.eclipse.jface.bindings.keys.ParseException e1) {

                    e1.printStackTrace();
                }

            }

            @Override
            public void focusLost(final FocusEvent e) {
                if (_textTaggingKey.getText().trim().length() == 0) {
                    _textTaggingKey.setData("id", "");
                } else {
                    _textTaggingKey.setData("id", _textTaggingKey.getText().trim());
                }
            }
        });

        // Label bk = new Label(tagging1Coposite, SWT.NONE);
        // bk.setText("");
        // bk.setLayoutData(new GridData());

        _findKey = new Button(_tagging1Coposite, SWT.PUSH);
        //      _findKey.setText(NLMessages.getString("Editor_select_dots"));
        _findKey.setToolTipText(NLMessages.getString("Editor_open_selObjDialog_key_tip"));
        _findKey.setImage(_imageReg.get(IconsInternal.SEARCH));
        _findKey.setLayoutData(new GridData());
        ((GridData) _findKey.getLayoutData()).horizontalSpan = 1;
        _findKey.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {

                IWorkbench workbench = PlatformUI.getWorkbench();
                Display display = workbench.getDisplay();
                Shell shell = new Shell(display);
                SelectObjectDialog dialog = new SelectObjectDialog(shell, 2);
                dialog.open();
                if (_facade.getRequestedId() != null) {
                    PdrObject o = _facade.getPdrObject(_facade.getRequestedId());
                    _textTaggingKey.setText(o.getDisplayNameWithID());
                    _textTaggingKey.setData("id", o.getPdrId().toString());
                }

            }
        });

        // end key
        Label taggingContent = new Label(_tagging1Coposite, SWT.None);
        taggingContent.setText(NLMessages.getString("Editor_content"));

        _contentText = new Text(_tagging1Coposite, SWT.BORDER);
        _contentText.setBackground(WHITE_COLOR);
        _contentText.setLayoutData(new GridData());
        ((GridData) _contentText.getLayoutData()).horizontalAlignment = GridData.FILL;
        ((GridData) _contentText.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _contentText.getLayoutData()).horizontalSpan = 6;
        // new AutoCompleteField(contentText, new TextContentAdapter(), new
        // String[]{"test"});
        // createDeco(contentText,
        // "Use CNTL + SPACE to see possible values");
        ControlDecoration deco = new ControlDecoration(_contentText, SWT.LEFT);
        deco.setDescriptionText(NLMessages.getString("Editor_proposal_cntl_values"));
        deco.setImage(FieldDecorationRegistry.getDefault()
                .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
        deco.setShowOnlyOnFocus(false);

        _contentText.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(final FocusEvent e) {
                if (_eListName != null && _eListName.trim().length() > 0) {
                    char[] autoActivationCharacters = new char[] { '.', '#' };
                    KeyStroke keyStroke;

                    Facet[] vals = null;
                    try {
                        vals = _mainSearcher.getComplexFacets("tagging", _eListName, _tListName, _sListName, //$NON-NLS-1$
                                _rListName);
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                    try {
                        keyStroke = KeyStroke.getInstance("Ctrl+Space");
                        ContentProposalAdapter adapter = new ContentProposalAdapter(_contentText,
                                new TextContentAdapter(), new FacetContentProposalProvider(vals), keyStroke,
                                autoActivationCharacters);
                        adapter.setLabelProvider(new AutoCompleteNameLabelProvider());
                        adapter.addContentProposalListener(new IContentProposalListener() {

                            @Override
                            public void proposalAccepted(final IContentProposal proposal) {
                                _contentProposal = proposal.getContent();
                                _contentText.setText(_contentProposal);
                                if (((Facet) proposal).getKey() != null) {
                                    PdrObject o = _facade.getPdrObject(new PdrId(((Facet) proposal).getKey()));
                                    if (o != null) {
                                        _textTaggingKey.setText(o.getDisplayNameWithID());
                                        _textTaggingKey.setData("id", o.getPdrId().toString());
                                    }
                                }
                            }

                        });
                    } catch (org.eclipse.jface.bindings.keys.ParseException e1) {

                        e1.printStackTrace();
                    }

                    // adapter.setLabelProvider(new
                    // AutoCompleteNameLabelProvider());

                    // new AutoCompleteField(contentText, new
                    // TextContentAdapter(), vals);
                }
            }

            @Override
            public void focusLost(final FocusEvent e) {
                _contentProposal = _contentText.getText();
            }
        });
        Label bk2 = new Label(_tagging1Coposite, SWT.NONE);
        bk2.setText("");
        bk2.setLayoutData(new GridData());
        // end content
        //

        // tagging1Coposite
        _compositeTaggingPanel = new Composite(_taggingGroup, SWT.NONE);

        _taggingStackLayout = new StackLayout();
        _compositeTaggingPanel.setLayout(_taggingStackLayout);

        // empty composite for stack
        _compositeEmpty = new Composite(_compositeTaggingPanel, SWT.NONE);

        _taggingStackLayout.topControl = _compositeEmpty;

        // Composite for tagging date
        _compositeTaggingDate = new Composite(_compositeTaggingPanel, SWT.NONE);
        _compositeTaggingDate.setLayout(new GridLayout());
        _compositeTaggingDate.setLayoutData(new GridData());
        ((GridData) _compositeTaggingDate.getLayoutData()).horizontalAlignment = GridData.BEGINNING;
        // ((GridData) compositeTaggingDate.getLayoutData()).horizontalSpan
        // = 1;
        ((GridLayout) _compositeTaggingDate.getLayout()).numColumns = 2;
        ((GridLayout) _compositeTaggingDate.getLayout()).makeColumnsEqualWidth = false;
        // compositeTaggingDate.setVisible(false);

        _buttonTDate = new Button(_compositeTaggingDate, SWT.RADIO | SWT.LEFT);
        _buttonTDate.setText(NLMessages.getString("Editor_pointOfTime")); //$NON-NLS-1$
        _buttonTDate.setSelection(true);

        // buttonTDate

        _compositeTDate = new Composite(_compositeTaggingDate, SWT.NONE);
        _compositeTDate.setLayout(new GridLayout());
        _compositeTDate.setLayoutData(new GridData());
        ((GridData) _compositeTDate.getLayoutData()).horizontalAlignment = GridData.BEGINNING;
        ((GridData) _compositeTDate.getLayoutData()).horizontalSpan = 1;
        ((GridLayout) _compositeTDate.getLayout()).numColumns = 5;
        ((GridLayout) _compositeTDate.getLayout()).makeColumnsEqualWidth = true;

        /* Emulation einer RadioButtonGroup */
        FocusListener tagFocusListener = new FocusAdapter() {
            @Override
            public void focusGained(final FocusEvent e) {
                _pointOfTime = true;
                _rangeOfTime = false;
                _buttonTDate.setSelection(true);
                _buttonTDateRange.setSelection(false);
            }
        };

        _comboTDatePointOT = new Combo(_compositeTDate, SWT.READ_ONLY);
        _comboTDatePointOT.setBackground(WHITE_COLOR);
        _comboTDatePointOT.setLayoutData(new GridData());
        ((GridData) _comboTDatePointOT.getLayoutData()).horizontalAlignment = GridData.FILL;
        ((GridData) _comboTDatePointOT.getLayoutData()).grabExcessHorizontalSpace = true;

        _comboViewerTDatePointOT = new ComboViewer(_comboTDatePointOT);
        _comboViewerTDatePointOT.setContentProvider(ArrayContentProvider.getInstance());
        _comboViewerTDatePointOT.setLabelProvider(new LabelProvider() {

            @Override
            public String getText(final Object element) {
                String str = (String) element;
                return NLMessages.getString("Editor_time_" + str);
            }

        });

        _comboViewerTDatePointOT.setInput(_whens);
        _comboTDatePointOT.select(0);
        _comboTDatePointOT.addFocusListener(tagFocusListener);

        _comboTDateDay = new Combo(_compositeTDate, SWT.READ_ONLY);
        _comboTDateDay.setBackground(WHITE_COLOR);
        _comboTDateDay.setLayoutData(new GridData());
        ((GridData) _comboTDateDay.getLayoutData()).horizontalAlignment = GridData.FILL;
        ((GridData) _comboTDateDay.getLayoutData()).grabExcessHorizontalSpace = true;
        _comboTDateDay.setItems(AEConstants.DAYS);
        _comboTDateDay.select(0);
        _comboTDateDay.addFocusListener(tagFocusListener);
        // comboTDateDay

        _comboTDateMonth = new Combo(_compositeTDate, SWT.READ_ONLY);
        _comboTDateMonth.setBackground(WHITE_COLOR);
        _comboTDateMonth.setLayoutData(new GridData());
        ((GridData) _comboTDateMonth.getLayoutData()).horizontalAlignment = GridData.FILL;
        ((GridData) _comboTDateMonth.getLayoutData()).grabExcessHorizontalSpace = true;
        _comboTDateMonth.setItems(AEConstants.MONTHS);
        _comboTDateMonth.addFocusListener(tagFocusListener);
        // comboDateMonth

        _spinnerTDateYear = new YearSpinner(_compositeTDate, SWT.NONE);
        _spinnerTDateYear.setSelection(_preferedYear);
        // spinnerTDateYear.pack();
        _spinnerTDateYear.addFocusListener(tagFocusListener);
        // spinner1

        // compositeTDate

        _buttonTDateRange = new Button(_compositeTaggingDate, SWT.RADIO | SWT.LEFT);
        _buttonTDateRange.setText(NLMessages.getString("Editor_periodOfTime")); //$NON-NLS-1$
        // buttonTDateRange

        _compositeTDateRange = new Composite(_compositeTaggingDate, SWT.NONE);
        _compositeTDateRange.setLayout(new GridLayout());
        _compositeTDateRange.setLayoutData(new GridData());
        ((GridLayout) _compositeTDateRange.getLayout()).numColumns = 11;

        FocusListener tagFocusListener2 = new FocusAdapter() {

            @Override
            public void focusGained(final FocusEvent e) {
                _pointOfTime = false;
                _rangeOfTime = true;
                _buttonTDate.setSelection(false);
                _buttonTDateRange.setSelection(true);
            }
        };

        _comboTDateBefore = new Combo(_compositeTDateRange, SWT.READ_ONLY);
        _comboTDateBefore.setBackground(WHITE_COLOR);
        _comboTDateBefore.setLayoutData(new GridData());
        ((GridData) _comboTDateBefore.getLayoutData()).horizontalAlignment = GridData.FILL;
        ((GridData) _comboTDateBefore.getLayoutData()).grabExcessHorizontalSpace = true;
        _comboViewerTDateBefore = new ComboViewer(_comboTDateBefore);
        _comboViewerTDateBefore.setContentProvider(ArrayContentProvider.getInstance());
        _comboViewerTDateBefore.setLabelProvider(new LabelProvider() {

            @Override
            public String getText(final Object element) {
                String str = (String) element;
                return NLMessages.getString("Editor_time_" + str);
            }

        });

        _comboViewerTDateBefore.setInput(_befores);
        _comboTDateBefore.select(0);
        _comboTDateBefore.addFocusListener(tagFocusListener2);

        _comboTDateRangeFromDay = new Combo(_compositeTDateRange, SWT.READ_ONLY);
        _comboTDateRangeFromDay.setBackground(WHITE_COLOR);
        _comboTDateRangeFromDay.setItems(AEConstants.DAYS);
        _comboTDateRangeFromDay.addFocusListener(tagFocusListener2);
        // comboTDateRangeFromDay

        _comboTDateRangeFromMonth = new Combo(_compositeTDateRange, SWT.READ_ONLY);
        _comboTDateRangeFromMonth.setBackground(WHITE_COLOR);
        _comboTDateRangeFromMonth.setItems(AEConstants.MONTHS);
        _comboTDateRangeFromMonth.addFocusListener(tagFocusListener2);
        // comboTDateRangeFromMonth

        _spinnerTDateRangeFromYear = new YearSpinner(_compositeTDateRange, SWT.NONE);
        _spinnerTDateRangeFromYear.setSelection(_preferedYear);
        // spinnerTDateRangeFromYear.pack();
        _spinnerTDateRangeFromYear.addFocusListener(tagFocusListener2);
        // spinnerTDateRangeFromYear

        Label labelTDateRangeTo = new Label(_compositeTDateRange, SWT.NONE);
        // labelTDateRangeTo.addFocusListener(tag2FocusListener);
        labelTDateRangeTo.setText(NLMessages.getString("Editor_to2")); //$NON-NLS-1$
        // labelTDateRangeTo

        _comboTDateAfter = new Combo(_compositeTDateRange, SWT.READ_ONLY);
        _comboTDateAfter.setBackground(WHITE_COLOR);
        _comboTDateAfter.setLayoutData(new GridData());
        ((GridData) _comboTDateAfter.getLayoutData()).horizontalAlignment = GridData.FILL;
        ((GridData) _comboTDateAfter.getLayoutData()).grabExcessHorizontalSpace = true;
        _comboViewerTDateAfter = new ComboViewer(_comboTDateAfter);
        _comboViewerTDateAfter.setContentProvider(ArrayContentProvider.getInstance());
        _comboViewerTDateAfter.setLabelProvider(new LabelProvider() {

            @Override
            public String getText(final Object element) {
                String str = (String) element;
                return NLMessages.getString("Editor_time_" + str);
            }

        });

        _comboViewerTDateAfter.setInput(_afters);
        _comboTDateAfter.select(0);
        _comboTDateAfter.addFocusListener(tagFocusListener2);

        _comboTDateRangeToDay = new Combo(_compositeTDateRange, SWT.READ_ONLY);
        _comboTDateRangeToDay.setBackground(WHITE_COLOR);
        _comboTDateRangeToDay.setItems(AEConstants.DAYS);
        _comboTDateRangeToDay.addFocusListener(tagFocusListener2);
        // _comboTDateRangeToDay

        _comboTDateRangeToMonth = new Combo(_compositeTDateRange, SWT.READ_ONLY);
        _comboTDateRangeToMonth.setBackground(WHITE_COLOR);
        _comboTDateRangeToMonth.setItems(AEConstants.MONTHS);
        _comboTDateRangeToMonth.addFocusListener(tagFocusListener2);
        // _comboTDateRangeToMonth

        _spinnerTDateRangeToYear = new YearSpinner(_compositeTDateRange, SWT.NONE);
        _spinnerTDateRangeToYear.setSelection(_preferedYear);
        // _spinnerTDateRangeToYear.pack();
        _spinnerTDateRangeToYear.addFocusListener(tagFocusListener2);
        // _spinnerTDateRangeToYear

        // compositeTDateRange
        // compositeTaggingDate

        // Composite for tagging and selecting the place keys
        _compositeTaggingPlace = new Composite(_compositeTaggingPanel, SWT.NONE);
        _compositeTaggingPlace.setLayout(new GridLayout());
        _compositeTaggingPlace.setLayoutData(new GridData());
        ((GridData) _compositeTaggingPlace.getLayoutData()).horizontalAlignment = GridData.BEGINNING;
        // ((GridData)
        // compositeTaggingPlace.getLayoutData()).horizontalSpan = 1;
        ((GridLayout) _compositeTaggingPlace.getLayout()).numColumns = 2;
        ((GridLayout) _compositeTaggingPlace.getLayout()).makeColumnsEqualWidth = false;
        _compositeTaggingPlace.setLayout(new RowLayout());
        Label testLabel = new Label(_compositeTaggingPlace, SWT.NONE);
        testLabel.setText(""); //$NON-NLS-1$
        //      testLabel.pack();
        // compositeTaggingPlace

        // Composite Tagging Buttons
        _compositeTaggingButtons = new Composite(_taggingGroup, SWT.NONE);
        _compositeTaggingButtons.setLayout(new GridLayout());
        ((GridLayout) _compositeTaggingButtons.getLayout()).numColumns = 7;
        _compositeTaggingButtons.setLayoutData(new GridData());
        ((GridData) _compositeTaggingButtons.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _compositeTaggingButtons.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _compositeTaggingButtons.getLayoutData()).horizontalSpan = 2;

        _buttonTaggingDelete = new Button(_compositeTaggingButtons, SWT.PUSH);
        _buttonTaggingDelete.setLayoutData(new GridData());
        _buttonTaggingDelete.setText(NLMessages.getString("Editor_delete")); //$NON-NLS-1$
        _buttonTaggingDelete.setToolTipText(NLMessages.getString("Editor_remove_markup_tip"));
        _buttonTaggingDelete.setImage(_imageReg.get(IconsInternal.MARKUP_REMOVE));
        _buttonTaggingDelete.setEnabled(false);
        _buttonTaggingDelete.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(final SelectionEvent e) {

                if (_selectedTaggingRanges != null) {
                    for (TaggingRange tr : _selectedTaggingRanges) {
                        // remove deleted tagging ranges from cache.
                        if (tr.getName() != null && tr.getName().equals("placeName")) //$NON-NLS-1$
                        {
                            for (TaggingRange trPlace : _taggedPlaceCache) {
                                if (tr.getTextValue() != null && tr.getTextValue().equals(trPlace.getTextValue())) {
                                    _taggedPlaceCache.remove(trPlace);
                                }
                            }
                        }
                        if (tr.getName() != null && tr.getName().equals("date")) //$NON-NLS-1$
                        {
                            for (TaggingRange trDate : _taggedDateCache) {
                                if (tr.getWhen() != null && tr.getWhen().equals(trDate.getWhen())) {
                                    _taggedDateCache.remove(trDate);
                                } else if (tr.getFrom() != null && tr.getFrom().equals(trDate.getFrom())) {
                                    _taggedDateCache.remove(trDate);
                                } else if (tr.getTo() != null && tr.getTo().equals(trDate.getTo())) {
                                    _taggedDateCache.remove(trDate);
                                } else if (tr.getNotBefore() != null
                                        && tr.getNotBefore().equals(trDate.getNotBefore())) {
                                    _taggedDateCache.remove(trDate);
                                } else if (tr.getNotAfter() != null
                                        && tr.getNotAfter().equals(trDate.getNotAfter())) {
                                    _taggedDateCache.remove(trDate);
                                }
                            }
                        }
                    }
                    if (_stackUndo.size() == UNDO_STACKSIZE) {
                        _stackUndo.removeElementAt(0);
                    }
                    _markupEditor.saveChanges();
                    _stackUndo.push(
                            new UndoInformation(_currentAspect.getNotification(), _currentAspect.getRangeList()));

                    if (!_protectRedoStack) {
                        _stackRedo.clear();
                    }
                    if (_undoAction != null) {
                        _undoAction.setEnabled(_stackUndo.size() > 0);
                    }
                    if (_redoAction != null) {
                        _redoAction.setEnabled(_stackRedo.size() > 0);
                    }

                    if (_selectedTaggingRanges != null) {
                        for (TaggingRange tr : _selectedTaggingRanges) {
                            _currentAspect.getRangeList().remove(tr);
                        }
                    }
                    _markupEditor.deleteMarkup(_selectedTaggingRanges);

                    activateMarkupButtonsAndCombos(false);

                }

            }
        }); // end of buttonTaggingDelete
        // buttonTaggingSet

        _buttonTaggingSet = new Button(_compositeTaggingButtons, SWT.PUSH);
        _buttonTaggingSet.setLayoutData(new GridData());
        _buttonTaggingSet.setText(NLMessages.getString("Editor_set")); //$NON-NLS-1$
        _buttonTaggingSet.setToolTipText(NLMessages.getString("Editor_set_markup_tip"));
        _buttonTaggingSet.setImage(_imageReg.get(IconsInternal.MARKUP_ADD));
        _buttonTaggingSet.setEnabled(false);
        _buttonTaggingSet.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(final SelectionEvent e) {

                setMarkup();
                activateMarkupButtonsAndCombos(true);

            }

        });
        // buttonTaggingSet

        // buttonTaggingInsertSet
        _buttonTaggingInsertSet = new Button(_compositeTaggingButtons, SWT.PUSH);
        _buttonTaggingInsertSet.setLayoutData(new GridData());
        _buttonTaggingInsertSet.setText(NLMessages.getString("Editor_insertAndSet")); //$NON-NLS-1$
        _buttonTaggingInsertSet.setToolTipText(NLMessages.getString("Editor_insert_markup_tip"));
        _buttonTaggingInsertSet.setImage(_imageReg.get(IconsInternal.MARKUP_NEW));
        _buttonTaggingInsertSet.setEnabled(false);

        _buttonTaggingInsertSet.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                if (_stackUndo.size() == UNDO_STACKSIZE) {
                    _stackUndo.removeElementAt(0);
                }
                _markupEditor.saveChanges();
                _stackUndo
                        .push(new UndoInformation(_currentAspect.getNotification(), _currentAspect.getRangeList()));

                if (!_protectRedoStack) {
                    _stackRedo.clear();
                }
                if (_undoAction != null) {
                    _undoAction.setEnabled(_stackUndo.size() > 0);
                }
                if (_redoAction != null) {
                    _redoAction.setEnabled(_stackRedo.size() > 0);
                }

                if (_currentAspect.getRangeList() == null) {
                    _currentAspect.setRangeList(new LinkedList<TaggingRange>());
                }
                String name = _eListName;
                String type = _tListName;
                String subtype = _sListName;
                String role = _rListName;
                String ana = (String) _textTaggingAna.getData("id");
                String key = (String) _textTaggingKey.getData("id");
                String content = _contentText.getText();
                TaggingRange tr = new TaggingRange(name, type, subtype, role, ana, key);
                tr.setTextValue(content);

                if (ana != null) {
                    processRelation(ana);
                }

                if (type != null && type.trim().length() > 0 && content.trim().length() > 0) {
                    if (_pointOfTime) {
                        PdrDate when = new PdrDate(_spinnerTDateYear.getSelection(),
                                _comboTDateMonth.getSelectionIndex(), _comboTDateDay.getSelectionIndex());
                        ISelection sel = _comboViewerTDatePointOT.getSelection();
                        Object obj = ((IStructuredSelection) sel).getFirstElement();
                        String tDatePointOfTime = (String) obj;

                        if (tDatePointOfTime.equals("when")) //$NON-NLS-1$
                        {
                            tr.setWhen(when);
                        } else if (tDatePointOfTime.equals("notBefore")) //$NON-NLS-1$
                        {
                            tr.setNotBefore(when);
                        } else {
                            tr.setNotAfter(when);
                        }
                        insertTimePlace();
                    } else if (_rangeOfTime) {
                        PdrDate from = new PdrDate(_spinnerTDateRangeFromYear.getSelection(),
                                _comboTDateRangeFromMonth.getSelectionIndex(),
                                _comboTDateRangeFromDay.getSelectionIndex());
                        PdrDate to = new PdrDate(_spinnerTDateRangeToYear.getSelection(),
                                _comboTDateRangeToMonth.getSelectionIndex(),
                                _comboTDateRangeToDay.getSelectionIndex());
                        ISelection sel = _comboViewerTDateBefore.getSelection();
                        Object obj = ((IStructuredSelection) sel).getFirstElement();
                        String tDatePointBefore = (String) obj;
                        sel = _comboViewerTDateAfter.getSelection();
                        obj = ((IStructuredSelection) sel).getFirstElement();
                        String tDatePointAfter = (String) obj;

                        if (tDatePointBefore.equals("from")) //$NON-NLS-1$
                        {
                            tr.setFrom(from);
                        } else {
                            tr.setNotBefore(from);
                        }

                        if (tDatePointAfter.equals("to")) //$NON-NLS-1$
                        {
                            tr.setTo(to);
                        } else {
                            tr.setNotAfter(to);
                        }
                        insertTimePlace();
                    }
                    tr.setTextValue(content);
                    _markupEditor.insertContentSetMarkup(tr);

                    _currentAspect.getRangeList().add(tr);
                    if (_rangeOfTime || _pointOfTime) {
                        _taggedDateCache.add(tr.clone());
                    }
                    if (name.equals("placeName")) //$NON-NLS-1$
                    {
                        _taggedPlaceCache.add(tr.clone());
                    }

                    Collections.sort(_currentAspect.getRangeList());
                }
                activateMarkupButtonsAndCombos(true);
            }

        });
        // buttonTaggingInsertSet

        // buttonTaggingInsertSet
        _buttonTaggingInsertMarkup = new Button(_compositeTaggingButtons, SWT.PUSH);
        _buttonTaggingInsertMarkup.setLayoutData(new GridData());
        _buttonTaggingInsertMarkup.setText(NLMessages.getString("Editor_insertSet_Markup")); //$NON-NLS-1$
        _buttonTaggingInsertMarkup.setToolTipText(NLMessages.getString("Editor_insertSet_Markup_tooltip"));
        _buttonTaggingInsertMarkup.setImage(_imageReg.get(IconsInternal.MARKUP_LIGHTNING));
        _buttonTaggingInsertMarkup.setEnabled(false);

        _buttonTaggingInsertMarkup.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                if (_stackUndo.size() == UNDO_STACKSIZE) {
                    _stackUndo.removeElementAt(0);
                }
                _markupEditor.saveChanges();
                _stackUndo
                        .push(new UndoInformation(_currentAspect.getNotification(), _currentAspect.getRangeList()));

                if (!_protectRedoStack) {
                    _stackRedo.clear();
                }
                if (_undoAction != null) {
                    _undoAction.setEnabled(_stackUndo.size() > 0);
                }
                if (_redoAction != null) {
                    _redoAction.setEnabled(_stackRedo.size() > 0);
                }

                if (_currentAspect.getRangeList() == null) {
                    _currentAspect.setRangeList(new LinkedList<TaggingRange>());
                }
                String name = _eListName;
                String type = _tListName;
                String subtype = _sListName;
                String role = _rListName;
                String ana = (String) _textTaggingAna.getData("id");
                String key = (String) _textTaggingKey.getData("id");
                String content = null;
                if (role != null && role.trim().length() > 0) {
                    ISelection iSelection = _comboTaggingRoleViewer.getSelection();
                    Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                    ConfigData cd = (ConfigData) obj;
                    if (cd != null) {
                        content = cd.getLabel();
                    }
                } else if (subtype != null && subtype.trim().length() > 0) {
                    ISelection iSelection = _comboTaggingSubtypeViewer.getSelection();
                    Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                    ConfigData cd = (ConfigData) obj;
                    if (cd != null) {
                        content = cd.getLabel();
                    }
                } else if (type != null && type.trim().length() > 0) {
                    ISelection iSelection = _comboTaggingTypeViewer.getSelection();
                    Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                    ConfigData cd = (ConfigData) obj;
                    if (cd != null) {
                        content = cd.getLabel();
                    }
                }
                TaggingRange tr = new TaggingRange(name, type, subtype, role, ana, key);

                if (ana != null) {
                    processRelation(ana);
                }

                if (type != null && type.trim().length() > 0) {
                    if (_pointOfTime) {
                        PdrDate when = new PdrDate(_spinnerTDateYear.getSelection(),
                                _comboTDateMonth.getSelectionIndex(), _comboTDateDay.getSelectionIndex());
                        ISelection sel = _comboViewerTDatePointOT.getSelection();
                        Object obj = ((IStructuredSelection) sel).getFirstElement();
                        String tDatePointOfTime = (String) obj;

                        if (tDatePointOfTime.equals("when")) //$NON-NLS-1$
                        {
                            tr.setWhen(when);
                        } else if (tDatePointOfTime.equals("notBefore")) //$NON-NLS-1$
                        {
                            tr.setNotBefore(when);
                        } else {
                            tr.setNotAfter(when);
                        }
                        content = when.toString();
                        insertTimePlace();
                    } else if (_rangeOfTime) {
                        PdrDate from = new PdrDate(_spinnerTDateRangeFromYear.getSelection(),
                                _comboTDateRangeFromMonth.getSelectionIndex(),
                                _comboTDateRangeFromDay.getSelectionIndex());
                        PdrDate to = new PdrDate(_spinnerTDateRangeToYear.getSelection(),
                                _comboTDateRangeToMonth.getSelectionIndex(),
                                _comboTDateRangeToDay.getSelectionIndex());
                        ISelection sel = _comboViewerTDateBefore.getSelection();
                        Object obj = ((IStructuredSelection) sel).getFirstElement();
                        String tDatePointBefore = (String) obj;
                        sel = _comboViewerTDateAfter.getSelection();
                        obj = ((IStructuredSelection) sel).getFirstElement();
                        String tDatePointAfter = (String) obj;

                        if (tDatePointBefore.equals("from")) //$NON-NLS-1$
                        {
                            tr.setFrom(from);
                        } else {
                            tr.setNotBefore(from);
                        }

                        if (tDatePointAfter.equals("to")) //$NON-NLS-1$
                        {
                            tr.setTo(to);
                        } else {
                            tr.setNotAfter(to);
                        }
                        content = from.toString() + " - " + to.toString();
                        insertTimePlace();
                    }
                    if (content == null) {
                        content = "?";
                    }
                    tr.setTextValue(content);
                    _markupEditor.insertContentSetMarkup(tr);

                    _currentAspect.getRangeList().add(tr);
                    if (_rangeOfTime || _pointOfTime) {
                        _taggedDateCache.add(tr.clone());
                    }
                    if (name.equals("placeName")) //$NON-NLS-1$
                    {
                        _taggedPlaceCache.add(tr.clone());
                    }

                    Collections.sort(_currentAspect.getRangeList());
                }
                activateMarkupButtonsAndCombos(true);
            }

        });
        // buttonTaggingInsertSet

        Label quickSelectLabel = new Label(_compositeTaggingButtons, SWT.NONE);
        quickSelectLabel.setText(NLMessages.getString("Editor_quick_select"));
        quickSelectLabel.setLayoutData(new GridData());
        quickSelectLabel.setLayoutData(new GridData());
        ((GridData) quickSelectLabel.getLayoutData()).horizontalIndent = 10;
        ((GridData) quickSelectLabel.getLayoutData()).horizontalAlignment = SWT.RIGHT;

        _quickSelectText = new Text(_compositeTaggingButtons, SWT.BORDER);
        _quickSelectText.setBackground(WHITE_COLOR);
        _quickSelectText.setLayoutData(new GridData());
        ((GridData) _quickSelectText.getLayoutData()).horizontalAlignment = GridData.FILL;
        ((GridData) _quickSelectText.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _quickSelectText.getLayoutData()).horizontalSpan = 2;
        // ControlDecoration decoKey = new
        // ControlDecoration(textTaggingKey, SWT.LEFT);
        // decoKey.setDescriptionText("Use CNTL + Space to see all References.");
        // decoKey.setImage(FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
        // decoKey.setShowOnlyOnFocus(false);
        // quickSelectText.addFocusListener(new FocusListener(){
        // public void focusGained(FocusEvent e)
        // {
        ContentProposalAdapter adapter = new ContentProposalAdapter(_quickSelectText, new TextContentAdapter(),
                new MarkupListContentProposalProvider(_facade.getConfigs().get(_markupProvider), false), null,
                null);
        adapter.setLabelProvider(new MarkupListLabelProvider());
        adapter.addContentProposalListener(new IContentProposalListener() {
            @Override
            public void proposalAccepted(final IContentProposal proposal) {
                _quickSelectText.setText(proposal.getContent());
                ConfigData cd = (ConfigData) proposal;
                setCombosByQuickSelect(cd);
                if (_selectedText != null && _selectedText.trim().length() > 0) {
                    _buttonTaggingSet.setFocus();
                } else {
                    _buttonTaggingInsertMarkup.setFocus();
                }
            }
        });

        _editorComposite = new Composite(_frontComposite, SWT.None);
        _editorComposite.setLayout(new GridLayout(2, false));
        ((GridLayout) _editorComposite.getLayout()).marginHeight = 0;
        ((GridLayout) _editorComposite.getLayout()).marginWidth = 0;

        _editorComposite.setLayoutData(new GridData());
        ((GridData) _editorComposite.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _editorComposite.getLayoutData()).grabExcessVerticalSpace = true;
        ((GridData) _editorComposite.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _editorComposite.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _editorComposite.getLayoutData()).heightHint = 50;
        ((GridData) _editorComposite.getLayoutData()).minimumHeight = 40;

        Group notiGroup = new Group(_editorComposite, SWT.SHADOW_IN);
        notiGroup.setText(NLMessages.getString("Editor_notificationOfAspect")); //$NON-NLS-1$
        notiGroup.setLayoutData(new GridData());
        ((GridData) notiGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        // ((GridData) notiGroup.getLayoutData()).minimumHeight = 120 ;
        ((GridData) notiGroup.getLayoutData()).grabExcessVerticalSpace = true;
        ((GridData) notiGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) notiGroup.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) notiGroup.getLayoutData()).heightHint = 50;
        ((GridData) notiGroup.getLayoutData()).minimumHeight = 40;
        notiGroup.setLayout(new GridLayout());

        _markupEditor.setComposite(notiGroup);
        _markupEditor.setTitle(NLMessages.getString("Editor_notificationOfAspect"));

        _markupEditor.createEditor();
        _symbolButton = new Button(_editorComposite, SWT.PUSH);
        _symbolButton.setImage(_imageReg.get(IconsInternal.EDIT_SYMBOL));
        _symbolButton.setLayoutData(new GridData());
        ((GridData) _symbolButton.getLayoutData()).verticalAlignment = SWT.TOP;
        _symbolButton.addSelectionListener(new SelectionListener() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                _insertSpecialCharAction.run();

            }

            @Override
            public void widgetDefaultSelected(SelectionEvent e) {
                // TODO Auto-generated method stub

            }
        });
        _editorComposite.layout();
        _markupEditor.addKeyListener(new Listener() {

            @Override
            public void handleEvent(final Event event) {
            }

        });
        _markupEditor.addFocusListener(new Listener() {

            @Override
            public void handleEvent(final Event event) {
                // _selectedTaggingRange = _markupEditor.getSelectedMarkup();
                // activateMarkupButtonsAndCombos(_selectedTaggingRange !=
                // null);

            }

        });

        _markupEditor.addExtendedModifyListener(new Listener() {

            @Override
            public void handleEvent(final Event event) {
                if (_stackUndo.size() == UNDO_STACKSIZE) {
                    _stackUndo.removeElementAt(0);
                }
                _markupEditor.saveChanges();
                _stackUndo
                        .push(new UndoInformation(_currentAspect.getNotification(), _currentAspect.getRangeList()));

                if (!_protectRedoStack) {
                    _stackRedo.clear();
                }
                if (_undoAction != null) {
                    _undoAction.setEnabled(_stackUndo.size() > 0);
                }
                if (_redoAction != null) {
                    _redoAction.setEnabled(_stackRedo.size() > 0);
                }
                validate();
            }
        });

        _markupEditor.addMarkupSelectionListener(new Listener() {

            @Override
            public void handleEvent(final Event e) {
                TaggingRange[] tr = null;
                if (e.type != 32) {
                    tr = (TaggingRange[]) e.data;
                    if (tr == null || tr.length == 0 || tr[0] == null || _selectedTaggingRanges == null
                            || _selectedTaggingRanges.length == 0 || !tr[0].equals(_selectedTaggingRanges[0])
                            || tr.length != _selectedTaggingRanges.length) {
                        _selectedTaggingRanges = tr;
                        activateMarkupButtonsAndCombos(_selectedTaggingRanges != null);

                        if (_selectedTaggingRanges != null && _selectedTaggingRanges.length > 0
                                && _selectedTaggingRanges[0] != null) {
                            TaggingRange firstRange = _selectedTaggingRanges[0];
                            ViewHelper.setComboViewerByString(_comboTaggingElementViewer,
                                    "aodl:" + firstRange.getName(), true);
                            //
                            // comboTaggingSubtype.removeAll();
                            // comboTaggingRole.removeAll();
                            _textTaggingAna.setData("id", "");
                            _textTaggingAna.setText("");
                            _textTaggingKey.setText(""); //$NON-NLS-1$
                            _textTaggingKey.setData("id", "");
                            _quickSelectText.setText("");

                            _elementDeco.setDescriptionText(PDRConfigProvider.readDocu(_markupProvider, "markup",
                                    "element", firstRange.getName(), null, null, null));
                            if (_elementDeco.getDescriptionText() != null) {
                                _elementDeco.setImage(FieldDecorationRegistry.getDefault()
                                        .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
                            } else {
                                _elementDeco.setImage(null);
                            }
                            _typeDeco.setImage(null);
                            _typeDeco.setDescriptionText(null);
                            _subtypeDeco.setImage(null);
                            _subtypeDeco.setDescriptionText(null);
                            _roleDeco.setImage(null);
                            _roleDeco.setDescriptionText(null);
                            ConfigData cd = null;
                            if (_facade.getConfigs().containsKey(_markupProvider)) {
                                cd = _facade.getConfigs().get(_markupProvider).getChildren()
                                        .get("aodl:" + firstRange.getName());
                            }
                            if (cd != null) {
                                _comboTaggingTypeViewer.setInput(cd.getChildren());
                            }

                            if (firstRange.getType() != null) {
                                ViewHelper.setComboViewerByString(_comboTaggingTypeViewer, firstRange.getType(),
                                        true);
                                _typeDeco.setDescriptionText(PDRConfigProvider.readDocu(_markupProvider, "markup",
                                        "type", firstRange.getName(), firstRange.getType(), null, null));
                                if (_typeDeco.getDescriptionText() != null) {
                                    _typeDeco.setImage(FieldDecorationRegistry.getDefault()
                                            .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION)
                                            .getImage());
                                } else {
                                    _typeDeco.setImage(null);
                                }
                            }

                            // TODO Date einpassen!!!!!!!!!!!!!!!!!!!!!
                            // load tagged date
                            if (firstRange.getName().equals("date")) //$NON-NLS-1$
                            {
                                _taggingStackLayout.topControl = _compositeTaggingDate;
                                _compositeTaggingDate.setVisible(true);
                                _compositeTaggingPanel.layout();

                                PdrDate dateFrom = firstRange.getFrom();
                                PdrDate dateTo = firstRange.getTo();
                                PdrDate dateWhen = firstRange.getWhen();
                                PdrDate dateNotBefore = firstRange.getNotBefore();
                                PdrDate dateNotAfter = firstRange.getNotAfter();
                                if ((dateFrom != null || dateNotBefore != null)
                                        && (dateTo != null || dateNotAfter != null)) {
                                    _comboTDateDay.select(0);
                                    _comboTDateMonth.select(0);
                                    _spinnerTDateYear.setSelection(_preferedYear);
                                    // timespan
                                    _buttonTDateRange.setSelection(true);
                                    _buttonTDate.setSelection(false);
                                    if (dateFrom != null) {

                                        adjustDate(_comboTDateRangeFromDay, _comboTDateRangeFromMonth,
                                                _spinnerTDateRangeFromYear, dateFrom);
                                        StructuredSelection selection = new StructuredSelection("from");
                                        _comboViewerTDateBefore.setSelection(selection);
                                    } else {
                                        adjustDate(_comboTDateRangeFromDay, _comboTDateRangeFromMonth,
                                                _spinnerTDateRangeFromYear, dateNotBefore);
                                        StructuredSelection selection = new StructuredSelection("notBefore");
                                        _comboViewerTDateBefore.setSelection(selection);
                                    }
                                    if (dateTo != null) {
                                        adjustDate(_comboTDateRangeToDay, _comboTDateRangeToMonth,
                                                _spinnerTDateRangeToYear, dateTo);
                                        StructuredSelection selection = new StructuredSelection("to");
                                        _comboViewerTDateAfter.setSelection(selection);
                                    } else {
                                        adjustDate(_comboTDateRangeToDay, _comboTDateRangeToMonth,
                                                _spinnerTDateRangeToYear, dateNotAfter);
                                        StructuredSelection selection = new StructuredSelection("notAfter");
                                        _comboViewerTDateAfter.setSelection(selection);
                                    }
                                } else if (dateFrom != null && (dateTo == null || dateNotAfter == null)) {
                                    _comboTDateRangeFromDay.select(0);
                                    _comboTDateRangeFromMonth.select(0);
                                    _spinnerTDateRangeFromYear.setSelection(_preferedYear);

                                    _comboTDateRangeToDay.select(0);
                                    _comboTDateRangeToMonth.select(0);
                                    _spinnerTDateRangeToYear.setSelection(_preferedYear);

                                    _buttonTDate.setSelection(true);
                                    _buttonTDateRange.setSelection(false);
                                    adjustDate(_comboTDateDay, _comboTDateMonth, _spinnerTDateYear, dateFrom);
                                    StructuredSelection selection = new StructuredSelection("from");
                                    _comboViewerTDatePointOT.setSelection(selection);
                                } else if (dateWhen != null) {
                                    _comboTDateRangeFromDay.select(0);
                                    _comboTDateRangeFromMonth.select(0);
                                    _spinnerTDateRangeFromYear.setSelection(_preferedYear);

                                    _comboTDateRangeToDay.select(0);
                                    _comboTDateRangeToMonth.select(0);
                                    _spinnerTDateRangeToYear.setSelection(_preferedYear);

                                    _buttonTDate.setSelection(true);
                                    _buttonTDateRange.setSelection(false);
                                    adjustDate(_comboTDateDay, _comboTDateMonth, _spinnerTDateYear, dateWhen);
                                    StructuredSelection selection = new StructuredSelection("when");
                                    _comboViewerTDatePointOT.setSelection(selection);
                                } else if (dateNotBefore != null) {
                                    _comboTDateRangeFromDay.select(0);
                                    _comboTDateRangeFromMonth.select(0);
                                    _spinnerTDateRangeFromYear.setSelection(_preferedYear);

                                    _comboTDateRangeToDay.select(0);
                                    _comboTDateRangeToMonth.select(0);
                                    _spinnerTDateRangeToYear.setSelection(_preferedYear);

                                    _buttonTDate.setSelection(true);
                                    _buttonTDateRange.setSelection(false);
                                    adjustDate(_comboTDateDay, _comboTDateMonth, _spinnerTDateYear, dateNotBefore);
                                    StructuredSelection selection = new StructuredSelection("notBefore");
                                    _comboViewerTDatePointOT.setSelection(selection);
                                } else if (dateNotAfter != null) {
                                    _comboTDateRangeFromDay.select(0);
                                    _comboTDateRangeFromMonth.select(0);
                                    _spinnerTDateRangeFromYear.setSelection(_preferedYear);

                                    _comboTDateRangeToDay.select(0);
                                    _comboTDateRangeToMonth.select(0);
                                    _spinnerTDateRangeToYear.setSelection(_preferedYear);

                                    _buttonTDate.setSelection(true);
                                    _buttonTDateRange.setSelection(false);
                                    adjustDate(_comboTDateDay, _comboTDateMonth, _spinnerTDateYear, dateNotAfter);
                                    StructuredSelection selection = new StructuredSelection("notAfter");
                                    _comboViewerTDatePointOT.setSelection(selection);
                                }

                            } else if (firstRange.getName().equals("placeName")) //$NON-NLS-1$
                            {
                                _taggingStackLayout.topControl = _compositeTaggingPlace;
                                _compositeTaggingPlace.setVisible(true);
                                _compositeTaggingPanel.layout();

                            } else {
                                _compositeTaggingDate.setVisible(false);
                                _compositeTaggingPlace.setVisible(false);

                            }
                            // if no date than load subtype and key
                            if (firstRange.getType() != null && firstRange.getSubtype() != null
                                    && firstRange.getSubtype().trim().length() > 0) {
                                cd = _facade.getConfigs().get(_markupProvider).getChildren()
                                        .get("aodl:" + firstRange.getName());
                                if (cd != null && cd.getChildren() != null
                                        && cd.getChildren().get(firstRange.getType()) != null) {
                                    _comboTaggingSubtypeViewer
                                            .setInput(cd.getChildren().get(firstRange.getType()).getChildren());
                                    ViewHelper.setComboViewerByString(_comboTaggingSubtypeViewer,
                                            firstRange.getSubtype(), true);

                                    _subtypeDeco.setDescriptionText(PDRConfigProvider.readDocu(_markupProvider,
                                            "markup", "subtype", firstRange.getName(), firstRange.getType(),
                                            firstRange.getSubtype(), null));
                                    if (_subtypeDeco.getDescriptionText() != null) {
                                        _subtypeDeco.setImage(FieldDecorationRegistry.getDefault()
                                                .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION)
                                                .getImage());
                                    } else {
                                        _subtypeDeco.setImage(null);
                                    }
                                    if (firstRange.getRole() != null && firstRange.getRole().trim().length() > 0
                                            && cd.getChildren().get(firstRange.getType()).getChildren()
                                                    .get(firstRange.getSubtype()) != null) {

                                        _comboTaggingRoleViewer.setInput(cd.getChildren().get(firstRange.getType())
                                                .getChildren().get(firstRange.getSubtype()).getChildren());
                                        ViewHelper.setComboViewerByString(_comboTaggingRoleViewer,
                                                firstRange.getRole(), true);
                                        _roleDeco.setDescriptionText(PDRConfigProvider.readDocu(_markupProvider,
                                                "markup", "role", firstRange.getName(), firstRange.getType(),
                                                firstRange.getSubtype(), firstRange.getRole()));
                                        if (_roleDeco.getDescriptionText() != null) {
                                            _roleDeco.setImage(FieldDecorationRegistry.getDefault()
                                                    .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION)
                                                    .getImage());
                                        } else {
                                            _roleDeco.setImage(null);
                                        }
                                    }

                                } else {
                                    _comboTaggingRoleViewer.setInput(null);

                                }

                            } else {
                                _comboTaggingSubtypeViewer.setInput(null);
                                _comboTaggingRoleViewer.setInput(null);
                            }
                            if (firstRange.getAna() != null && firstRange.getAna().trim().length() > 0) {
                                _textTaggingAna.setData("id", firstRange.getAna());
                                PdrObject o = _facade.getPdrObject(new PdrId(firstRange.getAna()));
                                if (o != null) {
                                    _textTaggingAna.setText(o.getDisplayNameWithID());
                                    _textTaggingAna.setData("id", firstRange.getAna());
                                }

                            } else {
                                _textTaggingAna.setText("");
                                _textTaggingAna.setData("id", "");
                            }

                            if (firstRange.getKey() != null && firstRange.getKey().trim().length() > 0) {
                                _textTaggingKey.setData("id", firstRange.getKey());
                                PdrObject o = _facade.getPdrObject(new PdrId(firstRange.getKey()));
                                if (o != null) {
                                    _textTaggingKey.setText(o.getDisplayNameWithID());
                                    _textTaggingKey.setData("id", firstRange.getKey());
                                } else {
                                    _textTaggingKey.setText(firstRange.getKey());
                                }

                            } else {
                                _textTaggingKey.setText("");
                                _textTaggingKey.setData("id", "");
                            }

                            if (firstRange != null && firstRange.getTextValue() != null) {
                                _contentText.setText(firstRange.getTextValue());
                            }

                        }

                    }
                }

            }
        });
        _markupEditor.addTextSelectionListener(new Listener() {
            @Override
            public void handleEvent(final Event event) {
                _selectedText = (String) event.data;
                Vector<String> dates = null;
                if (_dateParser != null && _selectedText != null && _selectedText.trim().length() > 0) {
                    dates = _dateParser.getParsedDates(_selectedText);
                }
                activateMarkupButtonsAndCombos(_markupEditor.getSelectedMarkups() != null);

                if (dates != null && dates.size() == 1) {
                    String dateString = dates.firstElement();
                    if (dateString.split("\"").length == 2) {
                        _pointOfTime = true;
                        _rangeOfTime = false;
                        _buttonTDate.setSelection(true);
                        _buttonTDateRange.setSelection(false);

                        PdrDate d = new PdrDate(dateString.split("\"")[1]);
                        // System.out.println("date d " + d.getDay());
                        // System.out.println("date m " + d.getMonth());
                        // System.out.println("date y " + d.getYear());
                        //
                        _comboTDateDay.select(d.getDay());
                        _comboTDateMonth.select(d.getMonth());
                        _spinnerTDateYear.setSelection(d.getYear());
                        StructuredSelection selection = new StructuredSelection(dateString.split("=")[0]);
                        _comboViewerTDatePointOT.setSelection(selection);
                        // System.out.println("date set");
                        IStructuredSelection sel = (IStructuredSelection) _comboTaggingElementViewer.getSelection();
                        ConfigData cd = (ConfigData) sel.getFirstElement();
                        if (!cd.getValue().equals("aodl:date")) {
                            ViewHelper.setComboViewerByString(_comboTaggingElementViewer, "aodl:date", true);
                            ViewHelper.setComboViewerByString(_comboTaggingTypeViewer, "event", true);
                        }
                        _taggingStackLayout.topControl = _compositeTaggingDate;
                    } else if (dateString.split("\"").length > 3) {
                        _pointOfTime = false;
                        _rangeOfTime = true;
                        _buttonTDate.setSelection(false);
                        _buttonTDateRange.setSelection(true);

                        PdrDate d = new PdrDate(dateString.split("\"")[1]);
                        _comboTDateRangeFromDay.select(d.getDay());
                        _comboTDateRangeFromMonth.select(d.getMonth());
                        _spinnerTDateRangeFromYear.setSelection(d.getYear());
                        StructuredSelection selection = new StructuredSelection(dateString.split("=")[0]);
                        _comboViewerTDateBefore.setSelection(selection);

                        d = new PdrDate(dateString.split("\"")[3]);
                        // System.out.println("date d " + d.getDay());
                        // System.out.println("date m " + d.getMonth());
                        // System.out.println("date y " + d.getYear());
                        _comboTDateRangeToDay.select(d.getDay());
                        _comboTDateRangeToMonth.select(d.getMonth());
                        _spinnerTDateRangeToYear.setSelection(d.getYear());
                        selection = new StructuredSelection(dateString.split("\"")[2].split("=")[0].trim());
                        _comboViewerTDateAfter.setSelection(selection);
                        IStructuredSelection sel = (IStructuredSelection) _comboTaggingElementViewer.getSelection();
                        ConfigData cd = (ConfigData) sel.getFirstElement();
                        if (!cd.getValue().equals("aodl:date")) {
                            ViewHelper.setComboViewerByString(_comboTaggingElementViewer, "aodl:date", true);
                            ViewHelper.setComboViewerByString(_comboTaggingTypeViewer, "timespan", true);
                        }
                        _taggingStackLayout.topControl = _compositeTaggingDate;
                    }
                }

            }
        });

        createActions();
        createMenus(_markupEditor.getControl());

        // styledTextAspect
        // groupEvent

        // notiGroup.pack();
        // notiGroup.addFocusListener(new FocusAdapter() {
        // public void focusLost(FocusEvent e) {
        // _currentAspect.setRangeList(rangeList);
        // }
        // });
        // frontComposite.pack();
    }

    private void activateMarkupButtonsAndCombos(boolean activeTR) {
        _buttonTaggingDelete.setEnabled(_mayWrite && activeTR);
        _buttonTaggingInsertSet.setEnabled(_mayWrite && !activeTR);
        _buttonTaggingSet.setEnabled(_mayWrite && !activeTR);
        _buttonTaggingInsertMarkup.setEnabled(_mayWrite && !activeTR);
        _comboTaggingElement.setEnabled(_mayWrite && !activeTR);
        _comboTaggingType.setEnabled(_mayWrite && !activeTR);

        _comboTaggingSubtype.setEnabled(_mayWrite && !activeTR);
        _comboTaggingRole.setEnabled(_mayWrite && !activeTR);

        if (_comboTaggingSubtypeViewer.getInput() != null && _comboTaggingRoleViewer.getInput() == null) {
            Object obj = ((IStructuredSelection) _comboTaggingSubtypeViewer.getSelection()).getFirstElement();
            ConfigData cd = (ConfigData) obj;
            if (cd != null) {
                String selection = cd.getValue();
                _rListName = ""; //$NON-NLS-1$
                _sListName = selection;
                ConfigData input = _facade.getConfigs().get(_markupProvider);
                if (input != null) {
                    input = input.getChildren().get("aodl:" + _eListName);
                }
                if (input != null) {
                    input = input.getChildren().get(_tListName);
                }
                if (input != null) {
                    input = input.getChildren().get(_sListName);
                }
                if (input != null) {
                    _comboTaggingRoleViewer.setInput(input.getChildren());

                }
            }
        } else if (_comboTaggingTypeViewer.getInput() != null && _comboTaggingSubtypeViewer.getInput() == null) {
            Object obj = ((IStructuredSelection) _comboTaggingTypeViewer.getSelection()).getFirstElement();
            ConfigData cd = (ConfigData) obj;
            if (cd != null) {
                String selection = cd.getValue();
                _sListName = ""; //$NON-NLS-1$
                _tListName = selection;
                ConfigData input = _facade.getConfigs().get(_markupProvider);
                if (input != null) {
                    input = input.getChildren().get("aodl:" + _eListName);
                }
                if (input != null) {
                    input = input.getChildren().get(_tListName);
                }

                if (input != null) {
                    _comboTaggingSubtypeViewer.setInput(input.getChildren());
                }
            }
        }

        _textTaggingAna.setEnabled(_mayWrite && !activeTR);
        _textTaggingKey.setEnabled(_mayWrite && !activeTR);
        _contentText.setEnabled(_mayWrite && !activeTR);

        _comboTDateRangeFromDay.setEnabled(_mayWrite && !activeTR);
        _comboTDateRangeFromMonth.setEnabled(_mayWrite && !activeTR);
        _spinnerTDateRangeFromYear.setEnabled(_mayWrite && !activeTR);

        _comboTDateRangeToDay.setEnabled(_mayWrite && !activeTR);
        _comboTDateRangeToMonth.setEnabled(_mayWrite && !activeTR);
        _spinnerTDateRangeToYear.setEnabled(_mayWrite && !activeTR);

        _comboTDateDay.setEnabled(_mayWrite && !activeTR);
        _comboTDateMonth.setEnabled(_mayWrite && !activeTR);
        _spinnerTDateYear.setEnabled(_mayWrite && !activeTR);

        _comboTDatePointOT.setEnabled(_mayWrite && !activeTR);
        _comboTDateBefore.setEnabled(_mayWrite && !activeTR);
        _comboTDateAfter.setEnabled(_mayWrite && !activeTR);
        _buttonTDate.setEnabled(_mayWrite && !activeTR);
        _buttonTDateRange.setEnabled(_mayWrite && !activeTR);
        _markupEditor.setFocus();
    }

    /**
     * Creates the menus.
     * @param control the control
     */
    private final void createMenus(final Control control) {
        MenuManager menuMgr = new MenuManager();
        Menu contextMenu = menuMgr.createContextMenu(control);
        menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
        menuMgr.setRemoveAllWhenShown(true);
        menuMgr.addMenuListener(new IMenuListener() {
            @Override
            public void menuAboutToShow(final IMenuManager mgr) {
                fillMenu(mgr);
            }
        });
        Menu menu = menuMgr.createContextMenu(control);
        fillMenu(menuMgr);
        control.setMenu(contextMenu);
        control.setMenu(menu);
        PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart().getSite()
                .registerContextMenu(AEPluginIDs.MENU_URI_ASPECT_EDITOR, menuMgr, AspectEditorDialog.this);
    }

    /**
     * Creates the ok button.
     * @param parent the parent
     * @param id the id
     * @param label the label
     * @param defaultButton the default button
     * @return the button
     */
    protected final Button createOkButton(final Composite parent, final int id, final String label,
            final boolean defaultButton) {
        // increment the number of columns in the button bar
        ((GridLayout) parent.getLayout()).numColumns++;
        _saveButton = new Button(parent, SWT.PUSH);
        _saveButton.setText(label);
        _saveButton.setFont(JFaceResources.getDialogFont());
        _saveButton.setData(new Integer(id));
        _saveButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {

                if (isValidInput()) // XXX simply returns true
                {
                    try {
                        System.out.println("Aspect Editor quit via SAVE button with current aspect looking like: "
                                + new XMLProcessor().writeToXML(_currentAspect));
                    } catch (XMLStreamException e) {
                        System.out.println("Aspect Editor: aspect not serializable!");
                        e.printStackTrace();
                    }
                    okPressed();
                }
            }
        });
        // if (defaultButton) {
        // Shell shell = parent.getShell();
        // if (shell != null) {
        // shell.setDefaultButton(_saveButton);
        // }
        // }
        _saveButton.setEnabled(_currentAspect.isValid() && _mayWrite);

        setButtonLayoutData(_saveButton);
        return _saveButton;
    }

    /**
     * @param mainTabFolder creates TabItem "Verknuepfungen" in AspectEditor
     */
    private void createRelationTabItem(final CTabFolder mainTabFolder) {
        _relationTabItem = new CTabItem(mainTabFolder, SWT.NONE);
        _relationTabItem.setText(NLMessages.getString("Editor_relations")); //$NON-NLS-1$
        _relationComposite = new Composite(mainTabFolder, SWT.NONE);
        _relationComposite.setLayout(new GridLayout());
        _relationComposite.setLayoutData(new GridData());
        ((GridData) _relationComposite.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _relationComposite.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridLayout) _relationComposite.getLayout()).numColumns = 2;

        _relationTabItem.setControl(_relationComposite);

        _addRelationsButton = new Button(_relationComposite, SWT.PUSH);
        _addRelationsButton.setText(NLMessages.getString("Editor_morgeLinks")); //$NON-NLS-1$
        _addRelationsButton.setImage(_imageReg.get(IconsInternal.RELATION_ADD));
        _addRelationsButton.setLayoutData(new GridData());
        ((GridData) _addRelationsButton.getLayoutData()).verticalAlignment = SWT.BEGINNING;
        ((GridData) _addRelationsButton.getLayoutData()).horizontalAlignment = SWT.LEFT;
        _addRelationsButton.setToolTipText(NLMessages.getString("Editor_addLinks")); //$NON-NLS-1$
        _addRelationsButton.setToolTipText(NLMessages.getString("Editor_add_relation_tooltip"));
        _addRelationsButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                loadRelationDim(1, null, null);
                validate();
            }
        });
        //      _addRelationsButton.pack();
        _egg = "Congratulations! You have found the Easter-Egg!"; //$NON-NLS-1$

        _addBelongsToButton = new Button(_relationComposite, SWT.PUSH);
        _addBelongsToButton.setText(NLMessages.getString("Editor_addBelongsToStm"));
        _addBelongsToButton.setToolTipText(NLMessages.getString("Editor_add_aspectOfStm_tip"));
        _addBelongsToButton.setImage(_imageReg.get(IconsInternal.BELONGING_ADD));
        _addBelongsToButton.setLayoutData(new GridData());
        ((GridData) _addBelongsToButton.getLayoutData()).verticalAlignment = SWT.BEGINNING;
        ((GridData) _addBelongsToButton.getLayoutData()).horizontalAlignment = SWT.LEFT;
        _addBelongsToButton.setToolTipText(NLMessages.getString("Editor_addLinks")); //$NON-NLS-1$
        _addBelongsToButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                loadRelationDim(5, null, null);
                validate();
            }
        });
        //      _addBelongsToButton.layout();

        _relationComposite.layout();
    } // relationComposite

    /**
     * if general rights is activated tabitem for rights management of aspect is
     * created.
     * @param mainTabFolder main tabFolder
     */
    final void createRightsTabItem(final CTabFolder mainTabFolder) {
        _rightsTabItem = new CTabItem(mainTabFolder, SWT.NONE);
        _rightsTabItem.setText(NLMessages.getString("Editor_rights")); //$NON-NLS-1$
        _rightsComposite = new Composite(mainTabFolder, SWT.NONE);
        _rightsComposite.setLayout(new GridLayout());
        _rightsComposite.setLayoutData(new GridData());
        _rightsTabItem.setControl(_rightsComposite);

        Group rightsGroup = new Group(_rightsComposite, SWT.SHADOW_IN);
        rightsGroup.setLayout(new GridLayout());
        rightsGroup.setLayoutData(new GridData());
        ((GridLayout) rightsGroup.getLayout()).numColumns = 3;
        ((GridLayout) rightsGroup.getLayout()).makeColumnsEqualWidth = false;
        ((GridData) rightsGroup.getLayoutData()).horizontalAlignment = GridData.FILL;
        ((GridData) rightsGroup.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) rightsGroup.getLayoutData()).minimumHeight = 60;

        _rightsTableComposite = new Composite(rightsGroup, SWT.NONE);
        _rightsTableComposite.setLayout(new GridLayout());
        ((GridLayout) _rightsTableComposite.getLayout()).makeColumnsEqualWidth = false;
        ((GridLayout) _rightsTableComposite.getLayout()).numColumns = 3;
        _rightsTableComposite.setLayoutData(new GridData());
        ((GridData) _rightsTableComposite.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _rightsTableComposite.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _rightsTableComposite.getLayoutData()).heightHint = 200;
        ((GridData) _rightsTableComposite.getLayoutData()).grabExcessVerticalSpace = false;

        Label userRightsTitel = new Label(_rightsTableComposite, SWT.NONE);
        userRightsTitel.setText(NLMessages.getString("Editor_managementOfRights")); //$NON-NLS-1$
        userRightsTitel.setLayoutData(new GridData());
        ((GridData) userRightsTitel.getLayoutData()).horizontalSpan = 3;

        Label userRLabel = new Label(_rightsTableComposite, SWT.NONE);
        userRLabel.setText(NLMessages.getString("Editor_user")); //$NON-NLS-1$
        userRLabel.setLayoutData(new GridData());

        Label userReadLabel = new Label(_rightsTableComposite, SWT.NONE);
        userReadLabel.setText(NLMessages.getString("Editor_readingRights")); //$NON-NLS-1$
        userReadLabel.setLayoutData(new GridData());

        Label userWriteLabel = new Label(_rightsTableComposite, SWT.NONE);
        userWriteLabel.setText(NLMessages.getString("Editor_writingRights")); //$NON-NLS-1$
        userWriteLabel.setLayoutData(new GridData());

        Label userOwnerLabel = new Label(_rightsTableComposite, SWT.NONE);
        userOwnerLabel.setText(NLMessages.getString("Editor_owner")); //$NON-NLS-1$
        userOwnerLabel.setLayoutData(new GridData());

        _rightsORCheckbox = new Button(_rightsTableComposite, SWT.CHECK);
        _rightsORCheckbox.setSelection(true);
        _rightsORCheckbox.setLayoutData(new GridData());
        _rightsORCheckbox.setEnabled(false);

        _rightsOWCheckbox = new Button(_rightsTableComposite, SWT.CHECK);
        _rightsOWCheckbox.setSelection(true);
        _rightsOWCheckbox.setLayoutData(new GridData());
        _rightsOWCheckbox.setEnabled(false);

        Label userWGroupLabel = new Label(_rightsTableComposite, SWT.NONE);
        userWGroupLabel.setText(NLMessages.getString("Editor_workgroup")); //$NON-NLS-1$
        userWGroupLabel.setLayoutData(new GridData());

        _rightsWGRCheckbox = new Button(_rightsTableComposite, SWT.CHECK);
        _rightsWGRCheckbox.setSelection(true);
        _rightsWGRCheckbox.setLayoutData(new GridData());
        _rightsWGRCheckbox.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                // workgroup_read = !workgroup_read;
            }
        });

        _rightsWGWCheckbox = new Button(_rightsTableComposite, SWT.CHECK);
        _rightsWGWCheckbox.setSelection(true);
        _rightsWGWCheckbox.setLayoutData(new GridData());
        _rightsWGWCheckbox.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                // workgroup_write = !workgroup_write;
            }
        });

        Label userPGroupLabel = new Label(_rightsTableComposite, SWT.NONE);
        userPGroupLabel.setText(NLMessages.getString("Editor_projectgroup")); //$NON-NLS-1$
        userPGroupLabel.setLayoutData(new GridData());

        _rightsPGRCheckbox = new Button(_rightsTableComposite, SWT.CHECK);
        _rightsPGRCheckbox.setSelection(true);
        _rightsPGRCheckbox.setLayoutData(new GridData());
        _rightsPGRCheckbox.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                // projectgroup_read = !projectgroup_read;
            }
        });

        _rightsPGWCheckbox = new Button(_rightsTableComposite, SWT.CHECK);
        _rightsPGWCheckbox.setSelection(true);
        _rightsPGWCheckbox.setLayoutData(new GridData());
        _rightsPGWCheckbox.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                // projectgroup_write = !projectgroup_write;
            }
        });

        Label userAllLabel = new Label(_rightsTableComposite, SWT.NONE);
        userAllLabel.setText(NLMessages.getString("Editor_all")); //$NON-NLS-1$
        userAllLabel.setLayoutData(new GridData());

        _rightsARCheckbox = new Button(_rightsTableComposite, SWT.CHECK);
        _rightsARCheckbox.setSelection(true);
        _rightsARCheckbox.setLayoutData(new GridData());
        _rightsARCheckbox.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                // all_read = !all_read;
            }
        });

        _rightsAWCheckbox = new Button(_rightsTableComposite, SWT.CHECK);
        _rightsAWCheckbox.setSelection(false);
        _rightsAWCheckbox.setLayoutData(new GridData());
        _rightsAWCheckbox.setEnabled(false);

        _rightsTableComposite.layout();
    }

    /**
     * @param mainTabFolder creates TabItem "source"
     */
    private void createSourceTabItem(final CTabFolder mainTabFolder) {

        _sourceTabItem = new CTabItem(mainTabFolder, SWT.NONE);
        _sourceTabItem.setText(NLMessages.getString("Editor_sources")); //$NON-NLS-1$
        _sourceComposite = new Composite(mainTabFolder, SWT.NONE);
        _sourceComposite.setLayout(new GridLayout());
        _sourceTabItem.setControl(_sourceComposite);

        _addReferencesButton = new Button(_sourceComposite, SWT.PUSH);
        _addReferencesButton.setText(NLMessages.getString("Editor_moreSources")); //$NON-NLS-1$
        _addReferencesButton.setToolTipText(NLMessages.getString("Editor_add_valStm_tip"));
        _addReferencesButton.setImage(_imageReg.get(IconsInternal.REFERENCE_ADD));
        _addReferencesButton.setLayoutData(new GridData());
        ((GridData) _addReferencesButton.getLayoutData()).verticalAlignment = SWT.LEFT;

        _addReferencesButton.setToolTipText(NLMessages.getString("Editor_addSources")); //$NON-NLS-1$
        _addReferencesButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                loadValidation(1, null);
                validate();
            }
        });
        //      _addReferencesButton.pack();
        _sourceComposite.layout();

    }

    /**
     * Fill menu.
     * @param rootMenuManager the root menu manager
     */
    protected final void fillMenu(final IMenuManager rootMenuManager) {

        if (Platform.getPreferencesService().getBoolean(CommonActivator.PLUGIN_ID, "FAVORITE_MARKUP_ALL", false,
                null)) {
            final HashMap<String, ConfigData> configs = _facade.getConfigs().get(_markupProvider).getChildren();
            for (String key : configs.keySet()) {
                ConfigData cd = configs.get(key);
                if (!(cd.getValue().contains("relation") || cd.getValue().contains("semantic"))) {
                    createActionFromConfigData(rootMenuManager, cd);
                }
            }
        } else if (_facade.getFavoriteMarkups() != null && !_facade.getFavoriteMarkups().isEmpty()) {
            if (_facade.getFavoriteMarkups().size() < 20) {
                List<String> keys = new ArrayList<String>(_facade.getFavoriteMarkups().keySet());
                Collections.sort(keys);
                for (String key : keys) {
                    final ConfigData cd = _facade.getFavoriteMarkups().get(key);
                    Action markup = new Action(cd.getLabel()) {
                        @Override
                        public void run() {

                            setCombosByQuickSelect(cd);
                            setMarkup();
                        }
                    };
                    rootMenuManager.add(markup);
                    markup.setImageDescriptor(_imageReg.getDescriptor(IconsInternal.MARKUP));
                }
            } else {
                IMenuManager subtype = new MenuManager(NLMessages.getString("Editor_submenu_subtype"));
                IMenuManager role = new MenuManager(NLMessages.getString("Editor_submenu_role"));
                List<String> keys = new ArrayList<String>(_facade.getFavoriteMarkups().keySet());
                Collections.sort(keys);
                for (String key : keys) {
                    final ConfigData cd = _facade.getFavoriteMarkups().get(key);
                    Action markup = new Action(cd.getLabel()) {
                        @Override
                        public void run() {
                            setCombosByQuickSelect(cd);
                            setMarkup();

                        }
                    };
                    if (cd.getPos().equals("type")) {
                        rootMenuManager.add(markup);
                    } else if (cd.getPos().equals("subtype")) {
                        subtype.add(markup);
                    } else {
                        role.add(markup);
                    }
                }
                rootMenuManager.add(new Separator());
                if (!subtype.isEmpty()) {
                    rootMenuManager.add(subtype);
                }
                if (!role.isEmpty()) {
                    rootMenuManager.add(role);
                }

            }
        }
        rootMenuManager.add(new Separator());
        rootMenuManager.add(_customizeFavoriteMarkup);
        if (_selectedText != null && _selectedText.trim().length() > 0) {
            rootMenuManager.add(_createPersonFromString);
        }
        rootMenuManager.add(new Separator());
        rootMenuManager.add(_undoAction);
        rootMenuManager.add(_redoAction);
        rootMenuManager.add(_insertSpecialCharAction);
    }

    @Override
    public ISelection getSelection() {
        // TODO Auto-generated method stub
        return null;
    }

    /**
     * <h4>Insert time place.</h4>
     * <p>Appends spatial and temporal information of recently created markups as
     * {@link TimeStm} or {@link SpatialStm} to the currently edited {@link Aspect}.</p>
     * @see TaggingRange#getWhen()
     */
    private void insertTimePlace() {
        if (!_taggedDateCache.isEmpty()) {
            //         System.out.println("datecache not empty"); //$NON-NLS-1$
            if (_currentAspect.getTimeDim() == null) {
                _currentAspect.setTimeDim(new TimeDim());
            } else {
                if (_currentAspect.getTimeDim().getTimeStms() != null
                        && _currentAspect.getTimeDim().getTimeStms().isEmpty()
                        && _currentAspect.getTimeDim().getTimeStms().firstElement().getType().equals("undefined")) {
                    _currentAspect.getTimeDim().getTimeStms().remove(0);
                }
            }
            for (int i = 0; i < _taggedDateCache.size(); i++) {
                TimeStm ts = new TimeStm();
                ts.setType("defined"); //$NON-NLS-1$
                ts.setTimes(new Vector<Time>(2));
                if (_taggedDateCache.get(i).getWhen() != null) {
                    Time t = new Time();
                    t.setType("when"); //$NON-NLS-1$
                    t.setTimeStamp(_taggedDateCache.get(i).getWhen());
                    ts.getTimes().add(t);
                }
                if (_taggedDateCache.get(i).getFrom() != null) {
                    Time t = new Time();
                    t.setType("from"); //$NON-NLS-1$
                    t.setTimeStamp(_taggedDateCache.get(i).getFrom());
                    ts.getTimes().add(t);
                }
                if (_taggedDateCache.get(i).getTo() != null) {
                    Time t = new Time();
                    t.setType("to"); //$NON-NLS-1$
                    t.setTimeStamp(_taggedDateCache.get(i).getTo());
                    ts.getTimes().add(t);
                }
                if (_taggedDateCache.get(i).getNotBefore() != null) {
                    Time t = new Time();
                    t.setType("notBefore"); //$NON-NLS-1$
                    t.setTimeStamp(_taggedDateCache.get(i).getNotBefore());
                    ts.getTimes().add(t);
                }
                if (_taggedDateCache.get(i).getNotAfter() != null) {
                    Time t = new Time();
                    t.setType("notAfter"); //$NON-NLS-1$
                    t.setTimeStamp(_taggedDateCache.get(i).getNotAfter());
                    ts.getTimes().add(t);
                }
                _currentAspect.getTimeDim().getTimeStms().add(ts);

            }
            _taggedDateCache.clear();
        }

        if (!_taggedPlaceCache.isEmpty()) {
            if (_currentAspect.getSpatialDim() == null) {
                _currentAspect.setSpatialDim(new SpatialDim());
            }

            if (_currentAspect.getSpatialDim().getSpatialStms() != null
                    && _currentAspect.getSpatialDim().getSpatialStms().firstElement() != null && _currentAspect
                            .getSpatialDim().getSpatialStms().firstElement().getType().equals("undefined")) {
                _currentAspect.getSpatialDim().getSpatialStms().remove(0);
            }

            for (int i = 0; i < _taggedPlaceCache.size(); i++) {
                SpatialStm spS = new SpatialStm();
                spS.setType("defined"); //$NON-NLS-1$
                spS.setPlaces(new Vector<Place>(1));
                Place p = new Place();
                if (_taggedPlaceCache.get(i).getTextValue() != null) {
                    p.setPlaceName(_taggedPlaceCache.get(i).getTextValue());
                }
                if (_taggedPlaceCache.get(i).getKey() != null) {
                    p.setKey(_taggedPlaceCache.get(i).getKey());
                }
                if (_taggedPlaceCache.get(i).getType() != null) {
                    p.setType(_taggedPlaceCache.get(i).getType());
                }
                if (_taggedPlaceCache.get(i).getSubtype() != null) {
                    p.setSubtype(_taggedPlaceCache.get(i).getSubtype());
                }
                spS.getPlaces().add(p);

                _currentAspect.getSpatialDim().getSpatialStms().add(spS);

            }
            _taggedPlaceCache.clear();
        }
        loadTimeSpatialDim(0, null, null, null, null);
    }

    @Override
    protected final boolean isResizable() {
        return true;
    }

    // TODO validierung einrichten
    /**
     * Checks if is valid input.
     * @return true, if is valid input
     */
    private boolean isValidInput() {
        // Validator v = new Validator();
        // int error = v.isValid(_currentAspect);
        //      System.out.println("Error: " + error); //$NON-NLS-1$
        // if(error == 1000)
        // {
        // return true;
        // }
        // else if (error == 1200 || error == 1210)
        // {
        // setMessage(NLMessages.getString("Editor_error1200"),
        // IMessageProvider.ERROR);
        // return false;
        // }
        // else if (error == 1300 || error == 1310 || error == 1320)
        // {
        // setMessage(NLMessages.getString("Editor_error1300"),
        // IMessageProvider.ERROR);
        // return false;
        // }
        // else
        // {
        // setMessage(NLMessages.getString("Editor_error1400"),
        // IMessageProvider.ERROR);
        // return false;
        // }
        return true;

    }

    /**
     * Load classification.
     * @param type the type
     * @param cla the cla
     */
    private void loadClassification(final int type, final Integer cla) {
        if (_scrollCompClass != null) {
            _scrollCompClass.dispose();
        }
        _scrollCompClass = new ScrolledComposite(_classificationComposite, SWT.V_SCROLL);
        _scrollCompClass.setExpandHorizontal(true);
        _scrollCompClass.setExpandVertical(true);
        _scrollCompClass.setMinHeight(1);
        _scrollCompClass.setMinWidth(1);

        _scrollCompClass.setLayout(new GridLayout());
        _scrollCompClass.setLayoutData(new GridData());
        ((GridData) _scrollCompClass.getLayoutData()).heightHint = 100;
        ((GridData) _scrollCompClass.getLayoutData()).widthHint = 700;
        ((GridData) _scrollCompClass.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _scrollCompClass.getLayoutData()).grabExcessHorizontalSpace = true;

        Composite contentCompClass = new Composite(_scrollCompClass, SWT.NONE);
        contentCompClass.setLayout(new GridLayout());
        ((GridLayout) contentCompClass.getLayout()).numColumns = 4;
        ((GridLayout) contentCompClass.getLayout()).makeColumnsEqualWidth = false;
        ((GridLayout) contentCompClass.getLayout()).marginHeight = 0;
        ((GridLayout) contentCompClass.getLayout()).marginWidth = 0;
        _scrollCompClass.setContent(contentCompClass);

        switch (type) {
        case 0:
            break; // nix, normales laden
        case 1: // neue SemanticStm einfgen
            if (_currentAspect.getSemanticDim() == null) {
                _currentAspect.setSemanticDim(new SemanticDim());
                _currentAspect.getSemanticDim().setSemanticStms(new Vector<SemanticStm>());
                _currentAspect.getSemanticDim().getSemanticStms().add(new SemanticStm());
            } else {
                _currentAspect.getSemanticDim().getSemanticStms().add(new SemanticStm());

            }
            _currentAspect.getSemanticDim().getSemanticStms().lastElement()
                    .setProvider(Platform
                            .getPreferencesService().getString(CommonActivator.PLUGIN_ID,
                                    "PRIMARY_SEMANTIC_PROVIDER", AEConstants.CLASSIFICATION_AUTHORITY, null)
                            .toUpperCase()); //$NON-NLS-1$
            break;
        case 2: // SemanticStm lschen
            _currentAspect.getSemanticDim().remove(cla);
            break;
        default:
            break;
        }
        // contentCompClass = (Composite)scrollCompClass.getContent();
        // Control[] children = contentCompClass.getChildren();
        // for (Control c : children)
        // {
        // c.dispose();
        // }

        if (_currentAspect.getSemanticDim() != null) {
            for (int i = 0; i < _currentAspect.getSemanticDim().getSemanticStms().size(); i++) {
                final SemanticStm semanticStm = _currentAspect.getSemanticDim().getSemanticStms().get(i);

                if (_facade.isPersonNameTag(semanticStm.getLabel())) {
                    _addBelongsToButton.setEnabled(false);
                    _addRelationsButton.setEnabled(false);
                    while (_currentAspect.getRelationDim().getRelationStms().size() > 1) {
                        _currentAspect.getRelationDim().getRelationStms()
                                .remove(_currentAspect.getRelationDim().getRelationStms().lastElement());
                    }
                } else {
                    setMessage("");
                    _addBelongsToButton.setEnabled(_mayWrite);
                    _addRelationsButton.setEnabled(_mayWrite);
                }

                final Combo claProviderCombo = new Combo(contentCompClass, SWT.DROP_DOWN | SWT.READ_ONLY);
                claProviderCombo.setItems(PDRConfigProvider.readConfigs(_semanticProvider, "_semanticProvider",
                        null, null, null, null));
                claProviderCombo.setEnabled(_mayWrite);
                claProviderCombo.setLayoutData(new GridData());
                ((GridData) claProviderCombo.getLayoutData()).minimumWidth = 100;
                // ((GridData)
                // claProviderCombo.getLayoutData()).horizontalAlignment =
                // SWT.LEFT;
                // claProviderCombo.pack();
                claProviderCombo.setBackground(WHITE_COLOR);

                final Combo classifierCombo = new Combo(contentCompClass, SWT.DROP_DOWN | SWT.READ_ONLY);
                classifierCombo.setEnabled(_mayWrite);
                classifierCombo.setBackground(WHITE_COLOR);
                final ComboViewer comboSemanticViewer = new ComboViewer(classifierCombo);
                comboSemanticViewer.setContentProvider(new MarkupContentProvider());
                comboSemanticViewer.setLabelProvider(new MarkupLabelProvider());

                claProviderCombo.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent se) {
                        semanticStm.setProvider(claProviderCombo.getItem(claProviderCombo.getSelectionIndex()));
                        classifierCombo.removeAll();

                        if (semanticStm.getProvider() != null && semanticStm.getProvider().trim().length() > 0) {
                            if (_facade.getConfigs().get(semanticStm.getProvider().toUpperCase()) != null
                                    && _facade.getConfigs().get(semanticStm.getProvider().toUpperCase())
                                            .getChildren().get("aodl:semanticStm").getChildren() != null
                                    && !_facade.getConfigs().get(semanticStm.getProvider().toUpperCase())
                                            .getChildren().get("aodl:semanticStm").getChildren().isEmpty()) {
                                comboSemanticViewer.setInput(_facade.getConfigs().get(semanticStm.getProvider())
                                        .getChildren().get("aodl:semanticStm").getChildren());

                            }
                        }
                    }
                });

                // }

                if (semanticStm.getProvider() != null && semanticStm.getProvider().trim().length() > 0) {
                    ViewHelper.setComboByString(claProviderCombo, semanticStm.getProvider().toUpperCase());
                    if (_facade.getConfigs().get(semanticStm.getProvider().toUpperCase()) != null
                            && _facade.getConfigs().get(semanticStm.getProvider().toUpperCase()).getChildren()
                                    .get("aodl:semanticStm").getChildren() != null
                            && !_facade.getConfigs().get(semanticStm.getProvider().toUpperCase()).getChildren()
                                    .get("aodl:semanticStm").getChildren().isEmpty()) {
                        comboSemanticViewer
                                .setInput(_facade.getConfigs().get(semanticStm.getProvider().toUpperCase())
                                        .getChildren().get("aodl:semanticStm").getChildren());
                    }

                }
                classifierCombo.setLayoutData(new GridData());
                ((GridData) classifierCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) classifierCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) classifierCombo.getLayoutData()).horizontalIndent = 6;
                final ControlDecoration decoClassC = new ControlDecoration(classifierCombo, SWT.LEFT | SWT.TOP);
                final ControlDecoration decoClassInfo = new ControlDecoration(classifierCombo, SWT.RIGHT | SWT.TOP);

                comboSemanticViewer.addSelectionChangedListener(new ISelectionChangedListener() {
                    @Override
                    public void selectionChanged(final SelectionChangedEvent event) {
                        ISelection iSelection = event.getSelection();
                        Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                        IAEPresentable cp = (IAEPresentable) obj;
                        if (cp != null) {
                            semanticStm.setLabel(cp.getValue());
                            decoClassInfo.setDescriptionText(PDRConfigProvider.readDocu(semanticStm.getProvider(),
                                    "semanticStm", semanticStm.getLabel(), null, null, null, null));
                            if (decoClassInfo.getDescriptionText() != null) {
                                decoClassInfo.setImage(FieldDecorationRegistry.getDefault()
                                        .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
                            } else {
                                decoClassInfo.setImage(null);
                            }
                            decoClassC.setImage(null);
                            if (_facade.isPersonNameTag(semanticStm.getLabel())) {
                                _addBelongsToButton.setEnabled(false);
                                _addRelationsButton.setEnabled(false);
                                setMessage(NLMessages.getString("Editor_semantic_norm_name_only_one_relation"));
                                while (_currentAspect.getRelationDim().getRelationStms().size() > 1) {
                                    _currentAspect.getRelationDim().getRelationStms().remove(
                                            _currentAspect.getRelationDim().getRelationStms().lastElement());
                                }
                                loadRelationDim(0, 0, 0);
                            } else {
                                setMessage("");
                                _addBelongsToButton.setEnabled(true);
                                _addRelationsButton.setEnabled(true);
                            }
                            validate();
                        }

                    }

                });

                if (semanticStm.getLabel() != null) {
                    ViewHelper.setComboViewerByString(comboSemanticViewer, semanticStm.getLabel(), true);
                    decoClassInfo
                            .setDescriptionText(PDRConfigProvider.readDocu(semanticStm.getProvider().toUpperCase(),
                                    "semanticStm", semanticStm.getLabel(), null, null, null, null));
                    if (decoClassInfo.getDescriptionText() != null) {
                        decoClassInfo.setImage(FieldDecorationRegistry.getDefault()
                                .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
                    } else {
                        decoClassInfo.setImage(null);
                    }
                    // @SuppressWarnings("unchecked")
                    // HashMap<String, ConfigData> inputs = (HashMap<String,
                    // ConfigData>) comboSemanticViewer.getInput();
                    // if (inputs.containsKey(semanticStm.getLabel()))
                    // {
                    // // System.out.println("contains key s " + s);
                    // for (String key : inputs.keySet())
                    // {
                    // if (key.equals(semanticStm.getLabel()))
                    // {
                    // ConfigData cd = inputs.get(key);
                    //
                    // // StructuredSelection sel = new
                    // // StructuredSelection(cd);
                    // // comboSemanticViewer.setSelection(sel, true);
                    // comboSemanticViewer.reveal(cd);
                    // break;
                    // }
                    // }
                    // }
                } else {
                    decoClassC.setImage(FieldDecorationRegistry.getDefault()
                            .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());
                }

                // classifierCombo.pack();

                final Button delSemanticStm = new Button(contentCompClass, SWT.PUSH);
                delSemanticStm.setToolTipText(NLMessages.getString("Editor_remove_semStm_tip"));
                delSemanticStm.setImage(_imageReg.get(IconsInternal.CLASSIFICATION_REMOVE));
                delSemanticStm.setLayoutData(new GridData());
                ((GridData) delSemanticStm.getLayoutData()).horizontalAlignment = SWT.RIGHT;
                ((GridData) delSemanticStm.getLayoutData()).horizontalIndent = 6;
                delSemanticStm.setData("cla", i); //$NON-NLS-1$
                delSemanticStm
                        .setEnabled(_currentAspect.getSemanticDim().getSemanticStms().size() > 1 && _mayWrite);
                delSemanticStm.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        loadClassification(2, (Integer) delSemanticStm.getData("cla")); //$NON-NLS-1$
                        validate();

                    }
                });
                //            delSemanticStm.pack();
                if (i == 0) {
                    Button addFurtherClassifier = new Button(contentCompClass, SWT.PUSH);
                    addFurtherClassifier.setToolTipText(NLMessages.getString("Editor_add_semStm_tip"));
                    addFurtherClassifier.setImage(_imageReg.get(IconsInternal.CLASSIFICATION_ADD));
                    addFurtherClassifier.setEnabled(_mayWrite);
                    addFurtherClassifier.setLayoutData(new GridData());
                    ((GridData) addFurtherClassifier.getLayoutData()).horizontalAlignment = SWT.LEFT;
                    addFurtherClassifier.addSelectionListener(new SelectionAdapter() {
                        @Override
                        public void widgetSelected(final SelectionEvent event) {
                            loadClassification(1, null);
                            validate();
                        }
                    });
                    //               addFurtherClassifier.pack();
                } else {
                    Label blanc = new Label(contentCompClass, SWT.NONE);
                    blanc.setText("");
                }
                // ccCompo.redraw();
                // ccCompo.layout();
                // ccCompo.pack();
            }
        }
        // classificationGroup.redraw();
        // classificationGroup.layout();
        // classificationGroup.pack();
        contentCompClass.layout();
        contentCompClass.layout();
        _scrollCompClass.setContent(contentCompClass);
        Point point = contentCompClass.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
        // System.out.println("contentComp Class height " + point.y);
        Point mp = _mainTabFolder.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
        if (point.x > mp.x - 20) {
            point.x = mp.x - 20;
        }
        _scrollCompClass.setMinSize(point);
        _scrollCompClass.layout();

        _classificationComposite.redraw();
        _classificationComposite.layout();
        //      _classificationComposite.pack();
        //      _mainTabFolder.redraw();
        _mainTabFolder.layout();
        //      _mainTabFolder.pack();

    }

    /**
     * Load relation dim.
     * @param type the type
     * @param relStm the rel stm
     * @param rel the rel
     */
    private void loadRelationDim(final int type, final Integer relStm, final Integer rel) {
        if (_scrollCompRel != null) {
            _scrollCompRel.dispose();
        }
        if (_relGroup != null) {
            _relGroup.dispose();
        }
        _scrollCompRel = new ScrolledComposite(_relationComposite, SWT.BORDER | SWT.V_SCROLL);
        _scrollCompRel.setExpandHorizontal(true);
        _scrollCompRel.setExpandVertical(true);
        _scrollCompRel.setMinHeight(1);
        _scrollCompRel.setMinWidth(1);
        if (_currentAspect.getPdrId().getId() % 2 == 0) {
            _e = true;
        }

        _scrollCompRel.setLayout(new GridLayout());
        _scrollCompRel.setLayoutData(new GridData());
        ((GridData) _scrollCompRel.getLayoutData()).heightHint = 490;
        ((GridData) _scrollCompRel.getLayoutData()).widthHint = 700;
        ((GridData) _scrollCompRel.getLayoutData()).horizontalSpan = 2;

        ((GridData) _scrollCompRel.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _scrollCompRel.getLayoutData()).grabExcessHorizontalSpace = true;
        _scrollCompRel.layout();

        Composite contentCompRel = new Composite(_scrollCompRel, SWT.NONE);
        contentCompRel.setLayout(new GridLayout());
        _scrollCompRel.setContent(contentCompRel);

        switch (type) {
        case 0:
            break; // nix, normales laden
        case 1: // neues relationStm einfgen
            if (_currentAspect.getRelationDim() == null) {
                _currentAspect.setRelationDim(new RelationDim());
                _currentAspect.getRelationDim().setRelationStms(new Vector<RelationStm>());
                _currentAspect.getRelationDim().getRelationStms().add(new RelationStm());

            } else {
                _currentAspect.getRelationDim().getRelationStms().add(new RelationStm());
            }
            break;
        case 2: // relationStm lschen
            _currentAspect.getRelationDim().remove(relStm);
            break;
        case 3: // neue relation einfgen
            _currentAspect.getRelationDim().getRelationStms().get(relStm).getRelations().add(new Relation());
            break;
        case 4: // relation lschen
            _currentAspect.getRelationDim().getRelationStms().get(relStm).getRelations().removeElementAt(rel);
            break;
        case 5: // belongsto statement einfgen
            if (_currentAspect.getRelationDim() == null) {
                _currentAspect.setRelationDim(new RelationDim());
                _currentAspect.getRelationDim().setRelationStms(new Vector<RelationStm>());

            }

            RelationStm rs = new RelationStm();
            rs.setSubject(_currentAspect.getPdrId());
            Relation r = new Relation();
            r.setRelation("aspect_of"); //$NON-NLS-1$
            r.setProvider("PDR"); //$NON-NLS-1$
            rs.setRelations(new Vector<Relation>(1));
            rs.getRelations().add(r);

            _currentAspect.getRelationDim().getRelationStms().add(rs);

            break;
        default:
            break;
        }
        for (int i = 0; i < _currentAspect.getRelationDim().getRelationStms().size(); i++) {
            int l = i + 1;

            final RelationStm relationStm = _currentAspect.getRelationDim().getRelationStms().get(i);

            _relGroup = new Group(contentCompRel, SWT.SHADOW_IN);
            _relGroup.setData("relStm", i); //$NON-NLS-1$
            _relGroup.setLayout(new GridLayout());
            ((GridLayout) _relGroup.getLayout()).numColumns = 8;
            ((GridLayout) _relGroup.getLayout()).makeColumnsEqualWidth = false;

            _relGroup.setLayoutData(new GridData());
            ((GridData) _relGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
            ((GridData) _relGroup.getLayoutData()).grabExcessHorizontalSpace = true;
            _relGroup.setText(NLMessages.getString("Editor_relStm") + l);

            // check whether relationStm contains only a belongs-to statement.
            if (relationStm.getSubject() != null && relationStm.getSubject().equals(_currentAspect.getPdrId())) {
                final Relation relBel = relationStm.getRelations().firstElement();
                Label belongsto = new Label(_relGroup, SWT.NONE);
                belongsto.setText(NLMessages.getString("Editor_aspect_of"));
                belongsto.setLayoutData(new GridData());

                final Text belongstoObject = new Text(_relGroup, SWT.BORDER);
                belongstoObject.setData("relStm", i); //$NON-NLS-1$
                belongstoObject.setEditable(_mayWrite);
                belongstoObject.setBackground(WHITE_COLOR);
                belongstoObject.setLayoutData(new GridData());
                ((GridData) belongstoObject.getLayoutData()).horizontalSpan = 3;
                ((GridData) belongstoObject.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) belongstoObject.getLayoutData()).grabExcessHorizontalSpace = true;
                final ControlDecoration decoRelBelongsTo = new ControlDecoration(belongstoObject,
                        SWT.LEFT | SWT.TOP);

                if (relBel.getObject() != null) {
                    PdrObject o = _facade.getPdrObject(relBel.getObject());
                    decoRelBelongsTo.setImage(null);
                    if (o != null) {
                        belongstoObject.setText(o.getDisplayNameWithID());
                    } else {
                        belongstoObject.setText(relBel.getObject().toString());
                        decoRelBelongsTo.setImage(FieldDecorationRegistry.getDefault()
                                .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                        decoRelBelongsTo
                                .setDescriptionText(NLMessages.getString("Editor_missing_object_no_relation"));
                    }
                } else {
                    belongstoObject.setText(""); //$NON-NLS-1$
                    decoRelBelongsTo.setImage(FieldDecorationRegistry.getDefault()
                            .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());

                }
                ControlDecoration decoBelObj = new ControlDecoration(belongstoObject, SWT.LEFT | SWT.BOTTOM);
                decoBelObj.setDescriptionText(NLMessages.getString("Editor_relation_proposal_deco"));
                decoBelObj.setImage(FieldDecorationRegistry.getDefault()
                        .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
                decoBelObj.setShowOnlyOnFocus(false);
                belongstoObject.addFocusListener(new FocusListener() {
                    @Override
                    public void focusGained(final FocusEvent e) {
                        char[] autoActivationCharacters = new char[] { '.', '#' };
                        KeyStroke keyStrokeP;
                        KeyStroke keyStrokeA;
                        KeyStroke keyStrokeL;

                        try {
                            keyStrokeA = KeyStroke.getInstance("Ctrl+e");
                            keyStrokeP = KeyStroke.getInstance("Ctrl+p");
                            keyStrokeL = KeyStroke.getInstance("Ctrl+l");

                            ContentProposalAdapter adapter = new ContentProposalAdapter(belongstoObject,
                                    new TextContentAdapter(),
                                    new FacetContentProposalProvider(_facade.getAllPersonsFacets()), keyStrokeP,
                                    autoActivationCharacters);
                            adapter.setLabelProvider(new AutoCompleteNameLabelProvider());
                            adapter.addContentProposalListener(new IContentProposalListener() {
                                @Override
                                public void proposalAccepted(final IContentProposal proposal) {
                                    belongstoObject.setText(proposal.getContent());
                                    if (((Facet) proposal).getKey() != null) {
                                        relBel.setObject(new PdrId(((Facet) proposal).getKey()));
                                        decoRelBelongsTo.setImage(null);
                                        validate();
                                    }
                                }
                            });

                            if (_facade.getLoadedAspectsFacets() != null) {
                                ContentProposalAdapter adapter2 = new ContentProposalAdapter(belongstoObject,
                                        new TextContentAdapter(),
                                        new FacetContentProposalProvider(_facade.getLoadedAspectsFacets()),
                                        keyStrokeA, autoActivationCharacters);
                                adapter2.setLabelProvider(new AutoCompleteNameLabelProvider());
                                adapter2.addContentProposalListener(new IContentProposalListener() {
                                    @Override
                                    public void proposalAccepted(final IContentProposal proposal) {
                                        belongstoObject.setText(proposal.getContent());
                                        if (((Facet) proposal).getKey() != null) {
                                            relBel.setObject(new PdrId(((Facet) proposal).getKey()));
                                            decoRelBelongsTo.setImage(null);
                                            validate();
                                        }
                                    }
                                });
                            }
                            if (_facade.getLastObjectsFacets() != null) {
                                ContentProposalAdapter adapter3 = new ContentProposalAdapter(belongstoObject,
                                        new TextContentAdapter(),
                                        new FacetContentProposalProvider(_facade.getLastObjectsFacets()),
                                        keyStrokeL, autoActivationCharacters);
                                adapter3.setLabelProvider(new AutoCompleteNameLabelProvider());
                                adapter3.addContentProposalListener(new IContentProposalListener() {
                                    @Override
                                    public void proposalAccepted(final IContentProposal proposal) {
                                        belongstoObject.setText(proposal.getContent());
                                        if (((Facet) proposal).getKey() != null) {
                                            relBel.setObject(new PdrId(((Facet) proposal).getKey()));
                                            decoRelBelongsTo.setImage(null);
                                            validate();
                                        }
                                    }
                                });
                            }
                        } catch (org.eclipse.jface.bindings.keys.ParseException e1) {

                            e1.printStackTrace();
                        }

                    }

                    @Override
                    public void focusLost(final FocusEvent e) {

                        if (relBel.getObject() != null) {
                            if (relBel.getObject().getType().equals("pdrAo")
                                    || _facade.getPdrObject(relBel.getObject()) != null) {
                                decoRelBelongsTo.setDescriptionText("");
                                decoRelBelongsTo.setImage(null);
                            }

                        } else {
                            relBel.setObject(null);
                            decoRelBelongsTo.setImage(FieldDecorationRegistry.getDefault()
                                    .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                            decoRelBelongsTo
                                    .setDescriptionText(NLMessages.getString("Editor_missing_object_no_relation"));
                        }
                        validate();

                    }
                });

                belongstoObject.addKeyListener(new KeyListener() {

                    @Override
                    public void keyPressed(final KeyEvent e) {
                    }

                    @Override
                    public void keyReleased(final KeyEvent e) {
                        if (belongstoObject.getText().length() == 23) {
                            PdrObject o = _facade.getPdrObject(new PdrId(belongstoObject.getText()));
                            if (o != null) {
                                decoRelBelongsTo.setImage(null);
                                relBel.setObject(new PdrId(belongstoObject.getText()));
                                belongstoObject.setText(o.getDisplayNameWithID());
                            }
                        } else if (belongstoObject.getText().trim().length() == 0) {
                            relBel.setObject(null);
                        }

                        validate();
                    }
                });

                Button relateCPButton = new Button(_relGroup, SWT.PUSH);
                relateCPButton.setText(NLMessages.getString("Editor_currentPerson"));
                relateCPButton.setToolTipText(NLMessages.getString("Editor_relate_cp_aspect_of"));
                relateCPButton.setImage(_imageReg.get(IconsInternal.PERSON));
                relateCPButton.setLayoutData(new GridData());
                ((GridData) relateCPButton.getLayoutData()).horizontalAlignment = SWT.RIGHT;
                ((GridData) relateCPButton.getLayoutData()).grabExcessHorizontalSpace = false;
                relateCPButton.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        relBel.setObject(_currentPerson.getPdrId());
                        PdrObject o = _currentPerson;
                        if (o != null) {
                            belongstoObject.setText(o.getDisplayNameWithID());
                        } else {
                            belongstoObject.setText(relBel.getObject().toString());
                        }
                        if (relBel.isValid()) {
                            decoRelBelongsTo.setImage(null);
                        } else {
                            decoRelBelongsTo.setImage(FieldDecorationRegistry.getDefault()
                                    .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                        }
                        validate();
                    }
                });
                if (_currentPerson != null) {
                    relateCPButton.setEnabled(_mayWrite);
                } else {
                    relateCPButton.setEnabled(false);

                }

                Button belongstoObjectButton = new Button(_relGroup, SWT.PUSH);
                belongstoObjectButton.setText(NLMessages.getString("Editor_select_dots"));
                belongstoObjectButton.setToolTipText(NLMessages.getString("Editor_open_selObjDialog_aspectOf_tip"));
                belongstoObjectButton.setImage(_imageReg.get(IconsInternal.SEARCH));
                belongstoObjectButton.setEnabled(_mayWrite);
                belongstoObjectButton.setLayoutData(new GridData());
                ((GridData) belongstoObjectButton.getLayoutData()).horizontalAlignment = SWT.RIGHT;
                ((GridData) belongstoObjectButton.getLayoutData()).grabExcessHorizontalSpace = false;
                belongstoObjectButton.setToolTipText(NLMessages.getString("Editor_linkPersonOrAspectToolTip")); //$NON-NLS-1$
                belongstoObjectButton.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        IWorkbench workbench = PlatformUI.getWorkbench();
                        Display display = workbench.getDisplay();
                        Shell shell = new Shell(display);
                        SelectObjectDialog dialog = new SelectObjectDialog(shell, 1);
                        dialog.open();
                        if (_facade.getRequestedId() != null) {
                            relBel.setObject(_facade.getRequestedId());

                            PdrObject o = _facade.getPdrObject(relBel.getObject());
                            if (o != null) {
                                belongstoObject.setText(o.getDisplayNameWithID());
                            } else {
                                belongstoObject.setText(relBel.getObject().toString());
                            }
                            if (relBel.isValid()) {
                                decoRelBelongsTo.setImage(null);
                            }
                        } else {
                            if (!relBel.isValid()) {
                                decoRelBelongsTo.setImage(FieldDecorationRegistry.getDefault()
                                        .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                            }
                        }
                        validate();
                    }
                });
                //            belongstoObjectButton.pack();

                final Button delRelationStm = new Button(_relGroup, SWT.PUSH);
                delRelationStm.setImage(_imageReg.get(IconsInternal.BELONGING_REMOVE));
                delRelationStm.setData("relStm", i); //$NON-NLS-1$
                delRelationStm
                        .setEnabled(_currentAspect.getRelationDim().getRelationStms().size() > 1 && _mayWrite);

                if (_e && (Integer) delRelationStm.getData("relStm") == 3) //$NON-NLS-1$
                {
                    delRelationStm.setToolTipText(_egg);

                } else {
                    delRelationStm.setToolTipText("Delete"); //$NON-NLS-1$
                }
                delRelationStm.setLayoutData(new GridData());
                delRelationStm.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        loadRelationDim(2, (Integer) delRelationStm.getData("relStm"), null); //$NON-NLS-1$
                        validate();

                    }
                });
                delRelationStm.setLayoutData(new GridData());

            } else {

                Label relationSubjectLabel = new Label(_relGroup, SWT.NONE);
                relationSubjectLabel.setText(NLMessages.getString("Editor_subject"));
                relationSubjectLabel.setLayoutData(new GridData());

                final Text relationSubject = new Text(_relGroup, SWT.BORDER);
                relationSubject.setEditable(_mayWrite);
                relationSubject.setBackground(WHITE_COLOR);
                relationSubject.setLayoutData(new GridData());
                ((GridData) relationSubject.getLayoutData()).horizontalSpan = 5;
                ((GridData) relationSubject.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) relationSubject.getLayoutData()).grabExcessHorizontalSpace = true;
                final ControlDecoration decoRelSubject = new ControlDecoration(relationSubject, SWT.LEFT | SWT.TOP);

                if (relationStm.getSubject() != null) //$NON-NLS-1$
                {
                    PdrObject o = _facade.getPdrObject(relationStm.getSubject());
                    decoRelSubject.setImage(null);
                    if (o != null) {
                        relationSubject.setText(o.getDisplayNameWithID());
                    } else {
                        relationSubject.setText(relationStm.getSubject().toString());
                        decoRelSubject.setImage(FieldDecorationRegistry.getDefault()
                                .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                        decoRelSubject
                                .setDescriptionText(NLMessages.getString("Editor_missing_object_no_relation"));
                    }
                } else {
                    relationSubject.setText(""); //$NON-NLS-1$
                    decoRelSubject.setImage(FieldDecorationRegistry.getDefault()
                            .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());

                }
                ControlDecoration decorelationSubject = new ControlDecoration(relationSubject,
                        SWT.LEFT | SWT.BOTTOM);
                decorelationSubject.setDescriptionText(NLMessages.getString("Editor_relation_proposal_deco"));
                decorelationSubject.setImage(FieldDecorationRegistry.getDefault()
                        .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
                decorelationSubject.setShowOnlyOnFocus(false);
                relationSubject.addFocusListener(new FocusListener() {
                    @Override
                    public void focusGained(final FocusEvent e) {
                        char[] autoActivationCharacters = new char[] { '.', '#' };
                        KeyStroke keyStrokeP;
                        KeyStroke keyStrokeA;
                        KeyStroke keyStrokeL;

                        try {
                            keyStrokeA = KeyStroke.getInstance("Ctrl+e");
                            keyStrokeP = KeyStroke.getInstance("Ctrl+p");
                            keyStrokeL = KeyStroke.getInstance("Ctrl+l");

                            ContentProposalAdapter adapter = new ContentProposalAdapter(relationSubject,
                                    new TextContentAdapter(),
                                    new FacetContentProposalProvider(_facade.getAllPersonsFacets()), keyStrokeP,
                                    autoActivationCharacters);
                            adapter.setLabelProvider(new AutoCompleteNameLabelProvider());
                            adapter.addContentProposalListener(new IContentProposalListener() {
                                @Override
                                public void proposalAccepted(final IContentProposal proposal) {
                                    relationSubject.setText(proposal.getContent());
                                    if (((Facet) proposal).getKey() != null) {
                                        relationStm.setSubject(new PdrId(((Facet) proposal).getKey()));
                                        decoRelSubject.setImage(null);
                                        validate();
                                    }
                                }
                            });

                            ContentProposalAdapter adapter2 = new ContentProposalAdapter(relationSubject,
                                    new TextContentAdapter(),
                                    new FacetContentProposalProvider(_facade.getLoadedAspectsFacets()), keyStrokeA,
                                    autoActivationCharacters);
                            adapter2.setLabelProvider(new AutoCompleteNameLabelProvider());
                            adapter2.addContentProposalListener(new IContentProposalListener() {
                                @Override
                                public void proposalAccepted(final IContentProposal proposal) {
                                    relationSubject.setText(proposal.getContent());
                                    if (((Facet) proposal).getKey() != null) {
                                        relationStm.setSubject(new PdrId(((Facet) proposal).getKey()));
                                        decoRelSubject.setImage(null);
                                        validate();
                                    }
                                }
                            });
                            if (_facade.getLastObjectsFacets() != null) {

                                ContentProposalAdapter adapter3 = new ContentProposalAdapter(relationSubject,
                                        new TextContentAdapter(),
                                        new FacetContentProposalProvider(_facade.getLastObjectsFacets()),
                                        keyStrokeL, autoActivationCharacters);
                                adapter3.setLabelProvider(new AutoCompleteNameLabelProvider());
                                adapter3.addContentProposalListener(new IContentProposalListener() {
                                    @Override
                                    public void proposalAccepted(final IContentProposal proposal) {
                                        relationSubject.setText(proposal.getContent());
                                        if (((Facet) proposal).getKey() != null) {
                                            relationStm.setSubject(new PdrId(((Facet) proposal).getKey()));
                                            decoRelSubject.setImage(null);
                                            validate();
                                        }
                                    }
                                });
                            }
                        } catch (org.eclipse.jface.bindings.keys.ParseException e1) {

                            e1.printStackTrace();
                        }

                    }

                    @Override
                    public void focusLost(final FocusEvent e) {
                        if (relationStm.getSubject() == null) {
                            if (relationSubject.getText() != null
                                    && _facade.getPdrObject(new PdrId(relationSubject.getText())) != null) {
                                relationStm.setSubject(new PdrId(relationSubject.getText()));
                                decoRelSubject.setDescriptionText("");
                                decoRelSubject.setImage(null);
                            } else {
                                relationStm.setSubject(null);
                                decoRelSubject.setImage(FieldDecorationRegistry.getDefault()
                                        .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                decoRelSubject.setDescriptionText(
                                        NLMessages.getString("Editor_missing_object_no_relation"));
                            }
                        } else if (relationSubject.getText().trim().length() == 0) {
                            relationStm.setSubject(null);
                            decoRelSubject.setImage(FieldDecorationRegistry.getDefault()
                                    .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                        }
                        validate();
                    }
                });

                relationSubject.addKeyListener(new KeyListener() {

                    @Override
                    public void keyPressed(final KeyEvent e) {
                    }

                    @Override
                    public void keyReleased(final KeyEvent e) {
                        if (relationSubject.getText().length() == 23) {
                            PdrObject o = _facade.getPdrObject(relationStm.getSubject());
                            if (o != null) {
                                decoRelSubject.setImage(null);
                                relationStm.setSubject(new PdrId(relationSubject.getText()));
                                relationSubject.setText(o.getDisplayNameWithID());
                            }
                        } else if (relationSubject.getText().trim().length() == 0) {
                            relationStm.setSubject(null);
                            decoRelSubject.setImage(FieldDecorationRegistry.getDefault()
                                    .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                        }
                        // if (relationSubject.getText().length() == 23)
                        // {
                        // relationStm.setSubject(new
                        // PdrId(relationSubject.getText()));
                        // if (relationStm.getSubject().isValid())
                        // {
                        // decoRelSubject.setImage(null);
                        // PdrObject o =
                        // _facade.getReference(relationStm.getSubject());
                        // if (o != null)
                        // relationSubject.setText(o.getDisplayNameWithID());
                        // else
                        // relationSubject.setText(relationStm.getSubject().toString());
                        // }
                        // else
                        // {
                        // decoRelSubject.setImage(FieldDecorationRegistry
                        // .getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());
                        // }
                        // }
                        // else if (relationSubject.getText().length() == 0)
                        // {
                        // relationStm.setSubject(null);
                        // decoRelSubject.setImage(FieldDecorationRegistry
                        // .getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                        // }

                        validate();
                    }
                });

                Button relateCPButton = new Button(_relGroup, SWT.PUSH);
                relateCPButton.setText(NLMessages.getString("Editor_currentPerson"));
                relateCPButton.setToolTipText(NLMessages.getString("Editor_relate_cp_subject_tip"));
                relateCPButton.setImage(_imageReg.get(IconsInternal.PERSON));
                relateCPButton.setEnabled(_mayWrite);
                relateCPButton.setLayoutData(new GridData());
                ((GridData) relateCPButton.getLayoutData()).horizontalAlignment = SWT.RIGHT;
                ((GridData) relateCPButton.getLayoutData()).grabExcessHorizontalSpace = false;
                relateCPButton.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        relationSubject.setText(_currentPerson.getPdrId().toString());
                        relationStm.setSubject(_currentPerson.getPdrId());

                        PdrObject o = _currentPerson;
                        if (o != null) {
                            relationSubject.setText(o.getDisplayNameWithID());
                        } else {
                            relationSubject.setText(relationStm.getSubject().toString());
                        }
                        if (relationStm.getSubject().isValid()) {
                            decoRelSubject.setImage(null);
                        } else {
                            decoRelSubject.setImage(FieldDecorationRegistry.getDefault()
                                    .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                        }
                        validate();
                    }
                });
                if (_currentPerson != null) {
                    relateCPButton.setEnabled(_mayWrite);
                } else {
                    relateCPButton.setEnabled(false);

                }

                Button relateSubjectButton = new Button(_relGroup, SWT.PUSH);
                relateSubjectButton.setText(NLMessages.getString("Editor_select_dots"));
                relateSubjectButton.setToolTipText(NLMessages.getString("Editor_open_selObjDialog_subject_tip"));
                relateSubjectButton.setImage(_imageReg.get(IconsInternal.SEARCH));
                relateSubjectButton.setEnabled(_mayWrite);
                relateSubjectButton.setLayoutData(new GridData());
                // ((GridData)
                // relateSubjectButton.getLayoutData()).horizontalAlignment =
                // SWT.RIGHT;
                ((GridData) relateSubjectButton.getLayoutData()).grabExcessHorizontalSpace = false;
                relateSubjectButton.setToolTipText(NLMessages.getString("Editor_linkPersonOrAspectToolTip")); //$NON-NLS-1$

                relateSubjectButton.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        IWorkbench workbench = PlatformUI.getWorkbench();
                        Display display = workbench.getDisplay();
                        Shell shell = new Shell(display);
                        SelectObjectDialog dialog = new SelectObjectDialog(shell, 1);
                        dialog.open();
                        if (_facade.getRequestedId() != null) {
                            relationStm.setSubject(_facade.getRequestedId());
                            PdrObject o = _facade.getPdrObject(relationStm.getSubject());
                            if (o != null) {
                                relationSubject.setText(o.getDisplayNameWithID());
                            } else {
                                relationSubject.setText(_facade.getRequestedId().toString());
                            }
                            if (relationStm.getSubject().isValid()) {
                                decoRelSubject.setImage(null);
                            }
                        } else {
                            if (!relationStm.getSubject().isValid()) {
                                decoRelSubject.setImage(FieldDecorationRegistry.getDefault()
                                        .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                            }
                        }
                        validate();

                    }
                });
                //            relateSubjectButton.pack();

                final Button delRelationStm = new Button(_relGroup, SWT.PUSH);
                delRelationStm.setText(NLMessages.getString("Editor_delete"));
                delRelationStm.setToolTipText(NLMessages.getString("Editor_remove_relStm_tip"));
                delRelationStm.setImage(_imageReg.get(IconsInternal.RELATION_REMOVE));
                delRelationStm
                        .setEnabled(_currentAspect.getRelationDim().getRelationStms().size() > 1 && _mayWrite);

                delRelationStm.setLayoutData(new GridData());
                delRelationStm.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        loadRelationDim(2, (Integer) _relGroup.getData("relStm"), null); //$NON-NLS-1$
                        validate();

                    }
                });
                delRelationStm.setLayoutData(new GridData());

                final Button addRelation = new Button(_relGroup, SWT.PUSH);
                addRelation.setText(NLMessages.getString("Editor_addRelation"));
                addRelation.setToolTipText(NLMessages.getString("Editor_add_relObj_tip"));
                addRelation.setImage(_imageReg.get(IconsInternal.RELATION_ADD));
                addRelation.setEnabled(_mayWrite);
                addRelation.setLayoutData(new GridData());
                addRelation.setData("relStm", i); //$NON-NLS-1$
                addRelation.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        loadRelationDim(3, (Integer) addRelation.getData("relStm"), null); //$NON-NLS-1$

                        validate();

                    }
                });
                addRelation.setLayoutData(new GridData());

                if (relationStm.getRelations() != null) //$NON-NLS-1$
                {
                    for (int j = 0; j < relationStm.getRelations().size(); j++) //$NON-NLS-1$
                    {
                        final Composite relComposite = new Composite(_relGroup, SWT.NONE);
                        relComposite.setLayoutData(new GridData());
                        ((GridData) relComposite.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) relComposite.getLayoutData()).grabExcessHorizontalSpace = true;

                        ((GridData) relComposite.getLayoutData()).horizontalSpan = 8;
                        relComposite.setLayout(new GridLayout());
                        ((GridLayout) relComposite.getLayout()).numColumns = 6;
                        ((GridLayout) relComposite.getLayout()).makeColumnsEqualWidth = true;

                        relComposite.setData("relStm", i); //$NON-NLS-1$
                        relComposite.setData("rel", j); //$NON-NLS-1$

                        final Relation relation = relationStm.getRelations().get(j); //$NON-NLS-1$

                        final Combo relationClassCombo;
                        final Combo relationProviderCombo;
                        final Combo relationContextCombo;

                        Label relationObjectLabel = new Label(relComposite, SWT.NONE);
                        relationObjectLabel.setText(NLMessages.getString("Editor_object"));
                        relationObjectLabel.setLayoutData(new GridData());

                        final Text relationObject = new Text(relComposite, SWT.BORDER);
                        relationObject.setEditable(_mayWrite);
                        relationObject.setBackground(WHITE_COLOR);
                        relationObject.setLayoutData(new GridData());
                        ((GridData) relationObject.getLayoutData()).horizontalSpan = 3;
                        ((GridData) relationObject.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) relationObject.getLayoutData()).grabExcessHorizontalSpace = true;
                        final ControlDecoration decoRelObj = new ControlDecoration(relationObject,
                                SWT.LEFT | SWT.TOP);

                        if (relation.getObject() != null) {
                            PdrObject o = _facade.getPdrObject(relation.getObject());
                            decoRelObj.setImage(null);
                            if (o != null) {
                                relationObject.setText(o.getDisplayNameWithID());
                            } else {
                                relationObject.setText(relation.getObject().toString());
                                decoRelObj.setImage(FieldDecorationRegistry.getDefault()
                                        .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                decoRelObj.setDescriptionText(
                                        NLMessages.getString("Editor_missing_object_no_relation"));
                            }
                        } else {
                            relationObject.setText(""); //$NON-NLS-1$
                            decoRelObj.setImage(FieldDecorationRegistry.getDefault()
                                    .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());

                        }
                        ControlDecoration decorelationObj = new ControlDecoration(relationObject,
                                SWT.LEFT | SWT.BOTTOM);
                        decorelationObj.setDescriptionText(NLMessages.getString("Editor_relation_proposal_deco"));
                        decorelationObj.setImage(FieldDecorationRegistry.getDefault()
                                .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
                        decorelationObj.setShowOnlyOnFocus(false);
                        relationObject.addFocusListener(new FocusListener() {
                            @Override
                            public void focusGained(final FocusEvent e) {
                                char[] autoActivationCharacters = new char[] { '.', '#' };
                                KeyStroke keyStrokeP;
                                KeyStroke keyStrokeA;
                                KeyStroke keyStrokeL;
                                try {
                                    keyStrokeA = KeyStroke.getInstance("Ctrl+e");
                                    keyStrokeP = KeyStroke.getInstance("Ctrl+p");
                                    keyStrokeL = KeyStroke.getInstance("Ctrl+l");

                                    ContentProposalAdapter adapter = new ContentProposalAdapter(relationObject,
                                            new TextContentAdapter(),
                                            new FacetContentProposalProvider(_facade.getAllPersonsFacets()),
                                            keyStrokeP, autoActivationCharacters);
                                    adapter.setLabelProvider(new AutoCompleteNameLabelProvider());
                                    adapter.addContentProposalListener(new IContentProposalListener() {
                                        @Override
                                        public void proposalAccepted(final IContentProposal proposal) {
                                            relationObject.setText(proposal.getContent());
                                            if (((Facet) proposal).getKey() != null) {
                                                relation.setObject(new PdrId(((Facet) proposal).getKey()));
                                                decoRelObj.setImage(null);
                                                validate();
                                            }
                                        }
                                    });

                                    ContentProposalAdapter adapter2 = new ContentProposalAdapter(relationObject,
                                            new TextContentAdapter(),
                                            new FacetContentProposalProvider(_facade.getLoadedAspectsFacets()),
                                            keyStrokeA, autoActivationCharacters);
                                    adapter2.setLabelProvider(new AutoCompleteNameLabelProvider());
                                    adapter2.addContentProposalListener(new IContentProposalListener() {
                                        @Override
                                        public void proposalAccepted(final IContentProposal proposal) {
                                            relationObject.setText(proposal.getContent());
                                            if (((Facet) proposal).getKey() != null) {
                                                relation.setObject(new PdrId(((Facet) proposal).getKey()));
                                                decoRelObj.setImage(null);
                                                validate();
                                            }
                                        }
                                    });
                                    if (_facade.getLastObjectsFacets() != null) {

                                        ContentProposalAdapter adapter3 = new ContentProposalAdapter(relationObject,
                                                new TextContentAdapter(),
                                                new FacetContentProposalProvider(_facade.getLastObjectsFacets()),
                                                keyStrokeL, autoActivationCharacters);
                                        adapter3.setLabelProvider(new AutoCompleteNameLabelProvider());
                                        adapter3.addContentProposalListener(new IContentProposalListener() {
                                            @Override
                                            public void proposalAccepted(final IContentProposal proposal) {
                                                relationObject.setText(proposal.getContent());
                                                if (((Facet) proposal).getKey() != null) {
                                                    relation.setObject(new PdrId(((Facet) proposal).getKey()));
                                                    decoRelObj.setImage(null);
                                                    validate();
                                                }
                                            }
                                        });
                                    }
                                } catch (org.eclipse.jface.bindings.keys.ParseException e1) {

                                    e1.printStackTrace();
                                }

                            }

                            @Override
                            public void focusLost(final FocusEvent e) {
                                if (relation.getObject() == null) {
                                    if (relationObject.getText() != null
                                            && _facade.getPdrObject(new PdrId(relationObject.getText())) != null) {
                                        relation.setObject(new PdrId(relationObject.getText()));
                                        decoRelObj.setDescriptionText("");
                                        decoRelObj.setImage(null);
                                    } else {
                                        relation.setObject(null);
                                        decoRelObj.setImage(FieldDecorationRegistry.getDefault()
                                                .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                        decoRelObj.setDescriptionText(
                                                NLMessages.getString("Editor_missing_object_no_relation"));
                                    }
                                } else if (relationObject.getText().trim().length() == 0) {
                                    relation.setObject(null);
                                    decoRelObj.setImage(FieldDecorationRegistry.getDefault()
                                            .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                }
                                validate();

                            }
                        });

                        relationObject.addKeyListener(new KeyListener() {

                            @Override
                            public void keyPressed(final KeyEvent e) {
                            }

                            @Override
                            public void keyReleased(final KeyEvent e) {
                                if (relationObject.getText().length() == 23) {
                                    PdrObject o = _facade.getPdrObject(new PdrId(relationObject.getText()));
                                    if (o != null) {
                                        decoRelObj.setImage(null);
                                        relation.setObject(new PdrId(relationObject.getText()));
                                        relationObject.setText(o.getDisplayNameWithID());
                                    }
                                } else if (relationObject.getText().trim().length() == 0) {
                                    relation.setObject(null);
                                    decoRelObj.setImage(FieldDecorationRegistry.getDefault()
                                            .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                }

                                validate();
                            }
                        });

                        Button relateCPObjButton = new Button(relComposite, SWT.PUSH);
                        relateCPObjButton.setText(NLMessages.getString("Editor_currentPerson"));
                        relateCPObjButton.setToolTipText(NLMessages.getString("Editor_relate_cp_object_tip"));
                        relateCPObjButton.setImage(_imageReg.get(IconsInternal.PERSON));
                        relateCPObjButton.setEnabled(_mayWrite);
                        relateCPObjButton.setLayoutData(new GridData());
                        relateCPObjButton.addSelectionListener(new SelectionAdapter() {
                            @Override
                            public void widgetSelected(final SelectionEvent event) {
                                relationObject.setText(_currentPerson.getPdrId().toString());
                                relation.setObject(_currentPerson.getPdrId());

                                PdrObject o = _currentPerson;
                                if (o != null) {
                                    relationObject.setText(o.getDisplayNameWithID());
                                } else {
                                    relationObject.setText(relation.getObject().toString());
                                }
                                if (relation.isValid()) {
                                    decoRelObj.setImage(null);
                                } else {
                                    decoRelObj.setImage(FieldDecorationRegistry.getDefault()
                                            .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                    relationObject.setText("");
                                }
                                validate();
                            }
                        });
                        if (_currentPerson != null) {
                            relateCPObjButton.setEnabled(_mayWrite);
                        } else {
                            relateCPObjButton.setEnabled(false);

                        }

                        Button relateObjectButton = new Button(relComposite, SWT.PUSH);
                        relateObjectButton.setText(NLMessages.getString("Editor_select_dots"));
                        relateObjectButton
                                .setToolTipText(NLMessages.getString("Editor_open_selObjDialog_object_tip"));
                        relateObjectButton.setImage(_imageReg.get(IconsInternal.SEARCH));
                        relateObjectButton.setEnabled(_mayWrite);
                        relateObjectButton.setLayoutData(new GridData());
                        relateObjectButton.setToolTipText(NLMessages.getString("Editor_linkPersonOrAspectToolTip")); //$NON-NLS-1$
                        relateObjectButton.addSelectionListener(new SelectionAdapter() {
                            @Override
                            public void widgetSelected(final SelectionEvent event) {
                                IWorkbench workbench = PlatformUI.getWorkbench();
                                Display display = workbench.getDisplay();
                                Shell shell = new Shell(display);
                                SelectObjectDialog dialog = new SelectObjectDialog(shell, 1);
                                dialog.open();
                                if (_facade.getRequestedId() != null) {
                                    relation.setObject(_facade.getRequestedId());
                                    PdrObject o = _facade.getPdrObject(relation.getObject());
                                    if (o != null) {
                                        relationObject.setText(o.getDisplayNameWithID());
                                    } else {
                                        relationObject.setText(relation.getObject().toString());
                                    }
                                    if (relation.isValid()) {
                                        decoRelObj.setImage(null);
                                    }
                                } else {
                                    if (!relation.isValid()) {
                                        decoRelObj.setImage(FieldDecorationRegistry.getDefault()
                                                .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                        relationObject.setText("");
                                    }
                                }
                                validate();

                            }
                        });
                        //                  relateObjectButton.pack();

                        Label relationClassificationLabel = new Label(relComposite, SWT.NONE);
                        relationClassificationLabel.setText(NLMessages.getString("Editor_provider"));
                        relationClassificationLabel.setLayoutData(new GridData());
                        ((GridData) relationClassificationLabel.getLayoutData()).horizontalSpan = 1;

                        relationProviderCombo = new Combo(relComposite, SWT.READ_ONLY);
                        relationProviderCombo.setEnabled(_mayWrite);
                        relationProviderCombo.setBackground(WHITE_COLOR);
                        relationProviderCombo.setLayoutData(new GridData());
                        ((GridData) relationProviderCombo.getLayoutData()).horizontalAlignment = GridData.FILL;
                        ((GridData) relationProviderCombo.getLayoutData()).horizontalSpan = 1;
                        ((GridData) relationProviderCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                        relationProviderCombo.setItems(PDRConfigProvider.readConfigs(_relationProvider,
                                "relationProvider", null, null, null, null));
                        if (relation.getProvider() != null) {
                            ViewHelper.setComboByString(relationProviderCombo, relation.getProvider());
                        } else {
                            relationProviderCombo.select(relationProviderCombo.indexOf(_relationProvider));
                            relation.setProvider(_relationProvider);
                        }

                        Label relationContextLabel = new Label(relComposite, SWT.NONE);
                        relationContextLabel.setText(NLMessages.getString("Editor_context"));
                        relationContextLabel.setLayoutData(new GridData());
                        ((GridData) relationContextLabel.getLayoutData()).horizontalSpan = 1;

                        relationContextCombo = new Combo(relComposite, SWT.READ_ONLY);
                        relationContextCombo.setEnabled(_mayWrite);
                        relationContextCombo.setBackground(WHITE_COLOR);
                        relationContextCombo.setLayoutData(new GridData());
                        ((GridData) relationContextCombo.getLayoutData()).horizontalSpan = 3;
                        ((GridData) relationContextCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) relationContextCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                        final ComboViewer relationContextComboViewer = new ComboViewer(relationContextCombo);
                        relationContextComboViewer.setContentProvider(new MarkupContentProvider());
                        relationContextComboViewer.setLabelProvider(new MarkupLabelProvider());
                        if (relation.getProvider() != null
                                && _facade.getConfigs().get(relation.getProvider()) != null) {
                            relationContextComboViewer.setInput(_facade.getConfigs().get(relation.getProvider())
                                    .getChildren().get("aodl:relation").getChildren());
                        }

                        final ControlDecoration relContextDeco = new ControlDecoration(relationContextCombo,
                                SWT.RIGHT | SWT.TOP);

                        Label relationTypeLabel = new Label(relComposite, SWT.NONE);
                        relationTypeLabel.setText(NLMessages.getString("Editor_class"));
                        relationTypeLabel.setLayoutData(new GridData());
                        ((GridData) relationTypeLabel.getLayoutData()).horizontalSpan = 1;

                        relationClassCombo = new Combo(relComposite, SWT.READ_ONLY);
                        relationClassCombo.setEnabled(_mayWrite);
                        relationClassCombo.setBackground(WHITE_COLOR);
                        relationClassCombo.setLayoutData(new GridData());
                        ((GridData) relationClassCombo.getLayoutData()).horizontalSpan = 3;
                        ((GridData) relationClassCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) relationClassCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                        final ComboViewer relationClassComboViewer = new ComboViewer(relationClassCombo);
                        relationClassComboViewer.setContentProvider(new MarkupContentProvider());
                        relationClassComboViewer.setLabelProvider(new MarkupLabelProvider());
                        final ControlDecoration relClassDeco = new ControlDecoration(relationClassCombo,
                                SWT.RIGHT | SWT.TOP);

                        Label b = new Label(relComposite, SWT.NONE);
                        b.setText("");
                        b.setLayoutData(new GridData());
                        ((GridData) b.getLayoutData()).horizontalSpan = 2;

                        Label relCitationLabel = new Label(relComposite, SWT.NONE);
                        relCitationLabel.setText(NLMessages.getString("Config_value"));
                        relCitationLabel.setLayoutData(new GridData());

                        final Combo relValue = new Combo(relComposite, SWT.BORDER | SWT.READ_ONLY);
                        relValue.setEnabled(_mayWrite);
                        relValue.setBackground(WHITE_COLOR);
                        relValue.setLayoutData(new GridData());
                        ((GridData) relValue.getLayoutData()).horizontalAlignment = GridData.FILL;
                        ((GridData) relValue.getLayoutData()).grabExcessHorizontalSpace = true;
                        ((GridData) relValue.getLayoutData()).horizontalSpan = 4;
                        final ComboViewer relValueComboViewer = new ComboViewer(relValue);
                        relValueComboViewer.setContentProvider(new MarkupContentProvider());
                        relValueComboViewer.setLabelProvider(new MarkupLabelProvider());
                        final ControlDecoration relValueDeco = new ControlDecoration(relValue, SWT.RIGHT | SWT.TOP);

                        relationProviderCombo.addSelectionListener(new SelectionAdapter() {
                            @Override
                            public void widgetSelected(final SelectionEvent se) {
                                relationClassCombo.removeAll();
                                relationContextCombo.removeAll();
                                relValue.removeAll();

                                relation.setProvider(
                                        relationProviderCombo.getItem(relationProviderCombo.getSelectionIndex()));
                                relationContextComboViewer.setInput(_facade.getConfigs().get(relation.getProvider())
                                        .getChildren().get("aodl:relation").getChildren());
                            }
                        });
                        //                  relationProviderCombo.pack();

                        //                  relValue.pack();

                        // control for relationClassCombo
                        // ArrayList<String> list = cListPro
                        //                  .getList("types", "type", "relation"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
                        // for (int n = 0; n < list.size(); n++)
                        // {
                        // relationClassCombo.add(list.get(n));
                        // }
                        if (relation.getContext() != null) {
                            ViewHelper.setComboViewerByString(relationContextComboViewer, relation.getContext(),
                                    true);
                        }

                        relationContextComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
                            @Override
                            public void selectionChanged(final SelectionChangedEvent event) {
                                ISelection iSelection = event.getSelection();
                                Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                                ConfigData cd = (ConfigData) obj;
                                relation.setContext(cd.getValue());
                                relationClassCombo.removeAll();
                                relValue.removeAll();
                                relContextDeco.setDescriptionText(PDRConfigProvider.readDocu(relation.getProvider(),
                                        "relation", "context", relation.getContext(), null, null, null));
                                if (relContextDeco.getDescriptionText() != null) {
                                    relContextDeco.setImage(FieldDecorationRegistry.getDefault()
                                            .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION)
                                            .getImage());
                                } else {
                                    relContextDeco.setImage(null);
                                }
                                relationClassComboViewer.setInput(_facade.getConfigs().get(relation.getProvider())
                                        .getChildren().get("aodl:relation").getChildren().get(relation.getContext())
                                        .getChildren());
                            }

                        });

                        //                  relationContextCombo.pack();

                        // control for relationContextCombo
                        if (relation.getRClass() != null) {
                            if (relation.getContext() != null
                                    && _facade.getConfigs().get(relation.getProvider()) != null
                                    && _facade.getConfigs().get(relation.getProvider()).getChildren()
                                            .get("aodl:relation") != null
                                    && _facade.getConfigs().get(relation.getProvider()).getChildren()
                                            .get("aodl:relation").getChildren()
                                            .get(relation.getContext()) != null) {
                                relationClassComboViewer.setInput(_facade.getConfigs().get(relation.getProvider())
                                        .getChildren().get("aodl:relation").getChildren().get(relation.getContext())
                                        .getChildren());
                            }
                            ViewHelper.setComboViewerByString(relationClassComboViewer, relation.getRClass(), true);
                        } else {
                            relationClassComboViewer.setInput(null);
                            relationClassComboViewer.refresh();
                        }
                        relationClassComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
                            @Override
                            public void selectionChanged(final SelectionChangedEvent event) {
                                ISelection iSelection = event.getSelection();
                                Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                                ConfigData cd = (ConfigData) obj;
                                relation.setRClass(cd.getValue());
                                relValueComboViewer.setInput(_facade.getConfigs().get(relation.getProvider())
                                        .getChildren().get("aodl:relation").getChildren().get(relation.getContext())
                                        .getChildren().get(relation.getRClass()).getChildren());
                                relClassDeco.setDescriptionText(
                                        PDRConfigProvider.readDocu(relation.getProvider(), "relation", "class",
                                                relation.getContext(), relation.getRClass(), null, null));
                                if (relClassDeco.getDescriptionText() != null) {
                                    relClassDeco.setImage(FieldDecorationRegistry.getDefault()
                                            .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION)
                                            .getImage());
                                } else {
                                    relClassDeco.setImage(null);
                                }
                            }
                        });
                        //                  relationClassCombo.pack();
                        if (relation.getRelation() != null) {
                            if (relation.getRClass() != null
                                    && _facade.getConfigs().get(relation.getProvider()) != null
                                    && _facade.getConfigs().get(relation.getProvider()).getChildren()
                                            .get("aodl:relation") != null
                                    && _facade.getConfigs().get(relation.getProvider()).getChildren()
                                            .get("aodl:relation").getChildren().get(relation.getContext()) != null
                                    && _facade.getConfigs().get(relation.getProvider()).getChildren()
                                            .get("aodl:relation").getChildren().get(relation.getContext())
                                            .getChildren().get(relation.getRClass()) != null) {
                                relValueComboViewer.setInput(_facade.getConfigs().get(relation.getProvider())
                                        .getChildren().get("aodl:relation").getChildren().get(relation.getContext())
                                        .getChildren().get(relation.getRClass()).getChildren());
                            }
                            ViewHelper.setComboViewerByString(relValueComboViewer, relation.getRelation(), true);
                        } else {
                            relValueComboViewer.setInput(null);
                            relValueComboViewer.refresh();
                        }
                        relValueComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
                            @Override
                            public void selectionChanged(final SelectionChangedEvent event) {
                                ISelection iSelection = event.getSelection();
                                Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                                ConfigData cd = (ConfigData) obj;
                                relation.setRelation(cd.getValue());
                                relValueDeco.setDescriptionText(PDRConfigProvider.readDocu(relation.getProvider(),
                                        "relation", "value", relation.getContext(), relation.getRClass(),
                                        relation.getRelation(), null));
                                if (relValueDeco.getDescriptionText() != null) {
                                    relValueDeco.setImage(FieldDecorationRegistry.getDefault()
                                            .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION)
                                            .getImage());
                                } else {
                                    relValueDeco.setImage(null);
                                }

                            }
                        });

                        final Button delRelation = new Button(relComposite, SWT.PUSH);
                        delRelation.setText(NLMessages.getString("Editor_deleteRel"));
                        delRelation.setToolTipText(NLMessages.getString("Editor_remove_relation_tip"));
                        delRelation.setImage(_imageReg.get(IconsInternal.RELATION_REMOVE));
                        delRelation.setEnabled(_mayWrite);
                        delRelation.setLayoutData(_gridData);
                        ((GridData) delRelation.getLayoutData()).horizontalIndent = 8;
                        delRelation.addSelectionListener(new SelectionAdapter() {
                            @Override
                            public void widgetSelected(final SelectionEvent event) {
                                loadRelationDim(4, (Integer) relComposite.getData("relStm"), //$NON-NLS-1$
                                        ((Integer) relComposite.getData("rel"))); //$NON-NLS-1$
                                validate();
                            }
                        });
                        delRelation.setLayoutData(new GridData());

                        relComposite.layout();
                    }
                }
            }
            _relGroup.layout();

        }
        contentCompRel.layout();

        _scrollCompRel.setContent(contentCompRel);
        Point point = contentCompRel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
        Point mp = _mainTabFolder.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
        if (point.x > mp.x - 20) {
            point.x = mp.x - 20;
        }
        _scrollCompRel.setMinSize(point);
        _scrollCompRel.layout();
        _relationComposite.redraw();
        _relationComposite.layout();
        //      _relationComposite.pack();
        //      _mainTabFolder.redraw();
        _mainTabFolder.layout();
        //      _mainTabFolder.pack();
    }

    /**
     * <h4>Load time spatial dim.</h4>
     * <p>
     * generates GUI elements for representation and modification of
     * {@link TimeDim} and {@link SpatialDim} information of the current {@link Aspect}.
     * </p><p>
     * Can also add/remove {@link TimeStm}/{@link SpatialStm} or {@link Time}/{@link Place} 
     * objects prior to GUI assemblage. Functional behaviour is determined by parameter <code>type</code>:
     * <ul><li>0. Do nothing, just make GUI stuff</li>
     * <li>1. Add new {@link TimeStm}</li>
     * <li>2. Delete {@link TimeStm} at index <code>timeStm</code></li>
     * <li>3. Add new {@link Time} object at index <code>timeStm</code></li>
     * <li>4. Delete {@link Time} element  index <code>timeStm</code></li>
     * <li>5. add new {@link SpatialStm}</li>
     * <li>6. Delete {@link SpatialStm}</li>
     * <li>7. Add new {@link Place} at  index <code>spatialStm</code></li>
     * <li>8. Delete {@link Place} at  index <code>spatialStm</code></li>
     * <li>15. Add both new {@link TimeStm} and {@link SpatialStm}</li></ul>
     * </p>
     * @param type numerical value specifying functional behaviour
     * @param timeStm index of {@link TimeStm} to be deleted or to which an additional {@link Time} object is to be added
     * @param time index of {@link Time} element to be deleted. The {@link TimeStm} in which deletion is to be done must be specified using <code>timeStm</code> param. 
     * @param spatialStm index of {@link SpatialStm} which should be deleted or extended by a new {@link Place} element
     * @param place index of {@link Place} element which shall be deleted. spatialStm must we specified as well, obviously.
     */
    private void loadTimeSpatialDim(Integer type, final Integer timeStm, final Integer time,
            final Integer spatialStm, final Integer place) {
        System.out.println("LOAD loadTimeSpatialDim");
        if (_scrollCompTimePlace != null) {
            _scrollCompTimePlace.dispose();
        }
        if (_timeGroup != null) {
            _timeGroup.dispose();
        }
        if (_placeGroup != null) {
            _placeGroup.dispose();
        }
        _scrollCompTimePlace = new ScrolledComposite(_dimensionComposite, SWT.BORDER | SWT.V_SCROLL);
        _scrollCompTimePlace.setExpandHorizontal(true);
        _scrollCompTimePlace.setExpandVertical(true);
        _scrollCompTimePlace.setMinHeight(1);
        _scrollCompTimePlace.setMinWidth(1);

        _scrollCompTimePlace.setLayout(new GridLayout());
        _scrollCompTimePlace.setLayoutData(new GridData());
        ((GridData) _scrollCompTimePlace.getLayoutData()).heightHint = 490;
        ((GridData) _scrollCompTimePlace.getLayoutData()).widthHint = 700;
        ((GridData) _scrollCompTimePlace.getLayoutData()).horizontalSpan = 2;

        ((GridData) _scrollCompTimePlace.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _scrollCompTimePlace.getLayoutData()).grabExcessHorizontalSpace = true;
        _scrollCompTimePlace.layout();

        Composite contentCompTimePlace = new Composite(_scrollCompTimePlace, SWT.NONE);
        contentCompTimePlace.setLayout(new GridLayout());
        _scrollCompTimePlace.setContent(contentCompTimePlace);

        if (_currentAspect.getTimeDim() == null) {
            _currentAspect.setTimeDim(new TimeDim());
            _currentAspect.getTimeDim().setTimeStms(new Vector<TimeStm>());
        }
        if (_currentAspect.getSpatialDim() == null) {
            _currentAspect.setSpatialDim(new SpatialDim());
            _currentAspect.getSpatialDim().setSpatialStms(new Vector<SpatialStm>());
        }
        if (_currentAspect.getTimeDim().getTimeStms().size() == 0
                && _currentAspect.getSpatialDim().getSpatialStms().size() == 0) {
            type = 15;
        } else if (_currentAspect.getTimeDim().getTimeStms().size() == 0) {
            type = 1;
        } else if (_currentAspect.getSpatialDim().getSpatialStms().size() == 0) {
            type = 5;
        }

        switch (type) {
        case 0:
            break; // nix, normales laden
        case 1: // neues timeStm einfgen

            _currentAspect.getTimeDim().getTimeStms().add(new TimeStm());

            break;
        case 2: // timeStm lschen
            _currentAspect.getTimeDim().remove(timeStm);
            break;
        case 3: // neue time einfgen
            _currentAspect.getTimeDim().getTimeStms().get(timeStm).getTimes().add(new Time());
            _currentAspect.getTimeDim().getTimeStms().get(timeStm).getTimes().lastElement()
                    .setTimeStamp(new PdrDate(PRESELECTED_YEAR, 0, 0));

            break;
        case 4: // time lschen
            _currentAspect.getTimeDim().getTimeStms().get(timeStm).getTimes().removeElementAt(time);
            break;

        case 5: // neues spatialStm einfgen

            _currentAspect.getSpatialDim().getSpatialStms().add(new SpatialStm());

            break;
        case 6: // spatialStm lschen
            _currentAspect.getSpatialDim().remove(spatialStm);
            break;
        case 7: // neuer place einfgen
            _currentAspect.getSpatialDim().getSpatialStms().get(spatialStm).getPlaces().add(new Place());
            break;
        case 8: // place lschen
            _currentAspect.getSpatialDim().getSpatialStms().get(spatialStm).getPlaces().removeElementAt(place);
            break;
        case 15: // neues spatialStm und timeStm einfgen
            _currentAspect.getTimeDim().getTimeStms().add(new TimeStm());
            _currentAspect.getSpatialDim().getSpatialStms().add(new SpatialStm());
            break;
        default:
            break;
        }

        if (_currentAspect.getTimeDim() != null && _currentAspect.getTimeDim().getTimeStms() != null) {
            for (int i = 0; i < _currentAspect.getTimeDim().getTimeStms().size(); i++) {
                final TimeStm tStm = _currentAspect.getTimeDim().getTimeStms().get(i);
                _timeGroup = new Group(contentCompTimePlace, SWT.SHADOW_IN);
                _timeGroup.setData("timeStm", i); //$NON-NLS-1$
                _timeGroup.setLayout(new GridLayout());
                ((GridLayout) _timeGroup.getLayout()).numColumns = 5;
                _timeGroup.setLayoutData(new GridData());
                ((GridLayout) _timeGroup.getLayout()).makeColumnsEqualWidth = false;
                ((GridData) _timeGroup.getLayoutData()).horizontalAlignment = GridData.FILL;
                ((GridData) _timeGroup.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) _timeGroup.getLayoutData()).minimumHeight = 20;

                int m = 1 + i;
                _timeGroup.setText(NLMessages.getString("Editor_timeStm") + m);

                Label spatialStmTypeLabel = new Label(_timeGroup, SWT.NONE);
                spatialStmTypeLabel.setText(NLMessages.getString("Editor_space_type"));
                spatialStmTypeLabel.setLayoutData(new GridData());

                final Combo timeStmCombo = new Combo(_timeGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
                timeStmCombo.setEnabled(_mayWrite);
                timeStmCombo.setBackground(WHITE_COLOR);
                timeStmCombo.setLayoutData(new GridData());
                ((GridData) timeStmCombo.getLayoutData()).horizontalAlignment = GridData.FILL;
                ((GridData) timeStmCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) timeStmCombo.getLayoutData()).horizontalSpan = 2;
                ComboViewer timeStmComboViewer = new ComboViewer(timeStmCombo);
                timeStmComboViewer.setContentProvider(ArrayContentProvider.getInstance());
                timeStmComboViewer.setLabelProvider(new LabelProvider() {

                    @Override
                    public String getText(final Object element) {
                        String str = (String) element;
                        return NLMessages.getString("Editor_timetypes_" + str);
                    }

                });

                timeStmComboViewer.setInput(AEConstants.TIMEDIMTYPES);
                timeStmComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {

                    @Override
                    public void selectionChanged(final SelectionChangedEvent event) {
                        ISelection selection = event.getSelection();
                        Object obj = ((IStructuredSelection) selection).getFirstElement();
                        String s = (String) obj;
                        tStm.setType(s);
                    }

                });
                if (tStm.getType() != null) {
                    StructuredSelection selection = new StructuredSelection(tStm.getType());
                    timeStmComboViewer.setSelection(selection);
                } else {
                    timeStmCombo.select(0);
                    ISelection selection = timeStmComboViewer.getSelection();
                    Object obj = ((IStructuredSelection) selection).getFirstElement();
                    String s = (String) obj;
                    tStm.setType(s);
                }

                final Button delTimeStm = new Button(_timeGroup, SWT.PUSH);
                delTimeStm.setText(NLMessages.getString("Editor_delete"));
                delTimeStm.setToolTipText(NLMessages.getString("Editor_remove_timeStm_tip"));
                delTimeStm.setImage(_imageReg.get(IconsInternal.TIME_REMOVE));
                delTimeStm.setLayoutData(_gridData);
                delTimeStm.setData("timeStm", i); //$NON-NLS-1$
                delTimeStm.setEnabled(_currentAspect.getTimeDim().getTimeStms().size() > 1 && _mayWrite);
                delTimeStm.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        //               System.out.println("del timeStm " + (Integer) delTimeStm.getData("timeStm")); //$NON-NLS-1$ //$NON-NLS-2$
                        loadTimeSpatialDim(2, (Integer) delTimeStm.getData("timeStm"), null, null, null); //$NON-NLS-1$
                        validate();

                    }
                });
                delTimeStm.setLayoutData(new GridData());

                final Button addTime = new Button(_timeGroup, SWT.PUSH);
                addTime.setText(NLMessages.getString("Editor_addTime"));
                addTime.setToolTipText(NLMessages.getString("Editor_add_time_tip"));
                addTime.setImage(_imageReg.get(IconsInternal.ADD));
                addTime.setEnabled(_mayWrite);
                addTime.setLayoutData(_gridData);
                addTime.setData("timeStm", i); //$NON-NLS-1$
                addTime.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        //               System.out.println("add time " + (Integer) addTime.getData("timeStm")); //$NON-NLS-1$ //$NON-NLS-2$
                        loadTimeSpatialDim(3, (Integer) addTime.getData("timeStm"), null, null, null); //$NON-NLS-1$
                        validate();

                    }
                });
                addTime.setLayoutData(new GridData());

                if (tStm.getTimes() != null) {

                    for (int j = 0; j < tStm.getTimes().size(); j++) {
                        final Time tTime = tStm.getTimes().get(j);
                        final Composite compositeTime = new Composite(_timeGroup, SWT.NONE);
                        compositeTime.setData("timeStm", i); //$NON-NLS-1$
                        compositeTime.setData("time", j); //$NON-NLS-1$
                        compositeTime.setLayout(new GridLayout());
                        compositeTime.setLayoutData(new GridData());
                        ((GridLayout) compositeTime.getLayout()).numColumns = 8;
                        ((GridLayout) compositeTime.getLayout()).makeColumnsEqualWidth = false;
                        ((GridData) compositeTime.getLayoutData()).horizontalSpan = 5;
                        ((GridData) compositeTime.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) compositeTime.getLayoutData()).grabExcessHorizontalSpace = true;

                        FocusListener focusListener = new FocusAdapter() {
                        };
                        int l = j + 1;
                        Label timeLabel = new Label(compositeTime, SWT.NONE);
                        timeLabel.setText(NLMessages.getString("Editor_time_space") + l);
                        timeLabel.setLayoutData(new GridData());

                        final Combo timeTypeCombo = new Combo(compositeTime, SWT.DROP_DOWN | SWT.READ_ONLY);
                        timeTypeCombo.setBackground(WHITE_COLOR);
                        timeTypeCombo.setEnabled(_mayWrite);
                        timeTypeCombo.setLayoutData(new GridData());
                        ((GridData) timeTypeCombo.getLayoutData()).horizontalSpan = 1;
                        ((GridData) timeTypeCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) timeTypeCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                        ComboViewer timeTypeComboViewer = new ComboViewer(timeTypeCombo);
                        timeTypeComboViewer.setContentProvider(ArrayContentProvider.getInstance());
                        timeTypeComboViewer.setLabelProvider(new LabelProvider() {

                            @Override
                            public String getText(final Object element) {
                                String str = (String) element;
                                if (NLMessages.getString("Editor_time_" + str) != null) {
                                    return NLMessages.getString("Editor_time_" + str);
                                }
                                return str;
                            }

                        });

                        timeTypeComboViewer.setInput(AEConstants.TIME_TYPES);
                        timeTypeComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {

                            @Override
                            public void selectionChanged(final SelectionChangedEvent event) {
                                ISelection selection = event.getSelection();
                                Object obj = ((IStructuredSelection) selection).getFirstElement();
                                String s = (String) obj;
                                tTime.setType(s);
                            }

                        });
                        if (tTime.getType() != null) {
                            StructuredSelection selection = new StructuredSelection(tTime.getType());
                            timeTypeComboViewer.setSelection(selection);
                        } else {
                            timeTypeCombo.select(0);
                            ISelection selection = timeTypeComboViewer.getSelection();
                            Object obj = ((IStructuredSelection) selection).getFirstElement();
                            String s = (String) obj;
                            tTime.setType(s);
                        }

                        Combo comboTimeDay = new Combo(compositeTime, SWT.READ_ONLY);
                        comboTimeDay.setEnabled(_mayWrite);
                        comboTimeDay.setBackground(WHITE_COLOR);
                        comboTimeDay.setLayoutData(new GridData());
                        ((GridData) comboTimeDay.getLayoutData()).horizontalAlignment = GridData.FILL;
                        ((GridData) comboTimeDay.getLayoutData()).grabExcessHorizontalSpace = true;
                        comboTimeDay.setItems(AEConstants.DAYS);
                        comboTimeDay.addFocusListener(focusListener);

                        if (tTime.getTimeStamp() != null) {
                            comboTimeDay.select(tTime.getTimeStamp().getDay());
                        }
                        comboTimeDay.addSelectionListener(new SelectionAdapter() {
                            @Override
                            public void widgetSelected(final SelectionEvent se) {
                                tTime.getTimeStamp().setDay(timeTypeCombo.getSelectionIndex());
                            }
                        });

                        final Combo comboTimeMonth = new Combo(compositeTime, SWT.READ_ONLY);
                        comboTimeMonth.setEnabled(_mayWrite);
                        comboTimeMonth.setBackground(WHITE_COLOR);
                        comboTimeMonth.setLayoutData(new GridData());
                        ((GridData) comboTimeMonth.getLayoutData()).horizontalAlignment = GridData.FILL;
                        ((GridData) comboTimeMonth.getLayoutData()).grabExcessHorizontalSpace = true;
                        comboTimeMonth.setItems(AEConstants.MONTHS);
                        comboTimeMonth.addFocusListener(focusListener);

                        if (tTime.getTimeStamp() != null) {
                            comboTimeMonth.select(tTime.getTimeStamp().getMonth());
                        }
                        comboTimeMonth.addSelectionListener(new SelectionAdapter() {
                            @Override
                            public void widgetSelected(final SelectionEvent se) {
                                tTime.getTimeStamp().setMonth(comboTimeMonth.getSelectionIndex());
                            }
                        });

                        final YearSpinner spinnerTimeYear = new YearSpinner(compositeTime, SWT.BORDER);
                        spinnerTimeYear.setEnabled(_mayWrite);
                        final ControlDecoration decoTime = new ControlDecoration(spinnerTimeYear,
                                SWT.LEFT | SWT.TOP);
                        if (tTime.getTimeStamp() != null) {
                            spinnerTimeYear.setSelection(tTime.getTimeStamp().getYear());
                        } else {
                            decoTime.setImage(FieldDecorationRegistry.getDefault()
                                    .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());
                        }
                        spinnerTimeYear.pack();
                        spinnerTimeYear.addFocusListener(focusListener);
                        spinnerTimeYear.addSelectionListener(new SelectionAdapter() {
                            @Override
                            public void widgetSelected(final SelectionEvent se) {
                                tTime.getTimeStamp().setYear(spinnerTimeYear.getSelection());
                                if (tTime.isValid()) {
                                    decoTime.setImage(null);
                                } else {
                                    decoTime.setImage(FieldDecorationRegistry.getDefault()
                                            .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                }
                                validate();
                            }
                        });
                        Label timeAccuracy = new Label(compositeTime, SWT.NONE);
                        timeAccuracy.setText(NLMessages.getString("Editor_quality2"));
                        timeAccuracy.setLayoutData(new GridData());

                        final Combo timeAccuracyCombo = new Combo(compositeTime, SWT.DROP_DOWN | SWT.READ_ONLY);
                        timeAccuracyCombo.setEnabled(_mayWrite);
                        timeAccuracyCombo.setBackground(WHITE_COLOR);
                        timeAccuracyCombo.setLayoutData(new GridData());
                        ((GridData) timeAccuracyCombo.getLayoutData()).horizontalSpan = 2;
                        ((GridData) timeAccuracyCombo.getLayoutData()).horizontalSpan = 1;
                        ((GridData) timeAccuracyCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) timeAccuracyCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                        ComboViewer timeAccuracyComboViewer = new ComboViewer(timeAccuracyCombo);
                        timeAccuracyComboViewer.setContentProvider(ArrayContentProvider.getInstance());
                        timeAccuracyComboViewer.setLabelProvider(new LabelProvider() {

                            @Override
                            public String getText(final Object element) {
                                String str = (String) element;
                                return NLMessages.getString("Editor_accuracy_" + str);
                            }

                        });

                        timeAccuracyComboViewer.setInput(AEConstants.TIME_ACCURACY);
                        timeAccuracyComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {

                            @Override
                            public void selectionChanged(final SelectionChangedEvent event) {
                                ISelection selection = event.getSelection();
                                Object obj = ((IStructuredSelection) selection).getFirstElement();
                                String s = (String) obj;
                                tTime.setAccuracy(s);
                            }

                        });
                        if (tTime.getAccuracy() != null) //$NON-NLS-1$ //$NON-NLS-2$
                        {
                            StructuredSelection selection = new StructuredSelection(tTime.getAccuracy());
                            timeAccuracyComboViewer.setSelection(selection);
                        } else {
                            timeAccuracyCombo.select(0);
                            ISelection selection = timeAccuracyComboViewer.getSelection();
                            Object obj = ((IStructuredSelection) selection).getFirstElement();
                            String s = (String) obj;
                            tTime.setAccuracy(s);
                        }

                        final Button delTime = new Button(compositeTime, SWT.PUSH);
                        delTime.setText(NLMessages.getString("Editor_deleteTime"));
                        delTime.setToolTipText(NLMessages.getString("Editor_remove_time_tip"));
                        delTime.setImage(_imageReg.get(IconsInternal.REMOVE));
                        delTime.setEnabled(_mayWrite);
                        // delTime.setImage(Activator.getDefault().getImageDescriptor("remove).createImage());
                        delTime.setLayoutData(_gridData);
                        delTime.addSelectionListener(new SelectionAdapter() {
                            @Override
                            public void widgetSelected(final SelectionEvent event) {
                                //                     System.out.println("del time " + (Integer) compositeTime //$NON-NLS-1$
                                // .getData("timeStm")
                                //   + " " + (Integer) compositeTime.getData("time")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
                                loadTimeSpatialDim(4, (Integer) compositeTime.getData("timeStm"), //$NON-NLS-1$
                                        (Integer) compositeTime.getData("time"), null, null); //$NON-NLS-1$
                                validate();
                            }
                        });
                        delTime.setLayoutData(new GridData());
                        delTime.pack();
                        compositeTime.layout();
                    } // compositeTime
                }
                // timeGroup
            }
        }

        // XXX this is were spatialStm controls are put together. What about this 'set key' button??
        // XXX also, are newly created place elements correctly put into aspects contents?
        if (_currentAspect.getSpatialDim() != null && _currentAspect.getSpatialDim().getSpatialStms() != null) {
            for (int i = 0; i < _currentAspect.getSpatialDim().getSpatialStms().size(); i++) {
                final SpatialStm sStm = _currentAspect.getSpatialDim().getSpatialStms().get(i);
                int l = i + 1;
                _placeGroup = new Group(contentCompTimePlace, SWT.SHADOW_IN);
                _placeGroup.setData("spatialStm", i); //$NON-NLS-1$
                _placeGroup.setLayout(new GridLayout());
                ((GridLayout) _placeGroup.getLayout()).numColumns = 5;
                _placeGroup.setText(NLMessages.getString("Editor_spatialStm") + l);
                _placeGroup.setLayoutData(new GridData());
                ((GridData) _placeGroup.getLayoutData()).horizontalAlignment = GridData.FILL;
                ((GridData) _placeGroup.getLayoutData()).minimumHeight = 60;
                ((GridData) _placeGroup.getLayoutData()).grabExcessHorizontalSpace = true;

                Label spatialStmTypeLabel = new Label(_placeGroup, SWT.NONE);
                spatialStmTypeLabel.setText(
                        NLMessages.getString("Editor_stm_space") + l + NLMessages.getString("Editor_space_type"));
                spatialStmTypeLabel.setLayoutData(new GridData());

                final Combo spatialTypCombo = new Combo(_placeGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
                spatialTypCombo.setEnabled(_mayWrite);
                spatialTypCombo.setBackground(WHITE_COLOR);
                spatialTypCombo.setLayoutData(new GridData());
                ((GridData) spatialTypCombo.getLayoutData()).horizontalAlignment = GridData.FILL;
                ((GridData) spatialTypCombo.getLayoutData()).horizontalSpan = 2;
                ((GridData) spatialTypCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                ComboViewer spatialTypComboViewer = new ComboViewer(spatialTypCombo);
                spatialTypComboViewer.setContentProvider(ArrayContentProvider.getInstance());
                spatialTypComboViewer.setLabelProvider(new LabelProvider() {

                    @Override
                    public String getText(final Object element) {
                        String str = (String) element;
                        return NLMessages.getString("Editor_spatialdim_types_" + str);
                    }

                });

                spatialTypComboViewer.setInput(AEConstants.SPATIALDIMTYPES);
                spatialTypComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {

                    @Override
                    public void selectionChanged(final SelectionChangedEvent event) {
                        ISelection selection = event.getSelection();
                        Object obj = ((IStructuredSelection) selection).getFirstElement();
                        String s = (String) obj;
                        sStm.setType(s);
                    }

                });
                if (sStm.getType() != null) //$NON-NLS-1$
                {
                    StructuredSelection selection = new StructuredSelection(sStm.getType());
                    spatialTypComboViewer.setSelection(selection);
                } else {
                    spatialTypCombo.select(0);
                    ISelection selection = spatialTypComboViewer.getSelection();
                    Object obj = ((IStructuredSelection) selection).getFirstElement();
                    String s = (String) obj;
                    sStm.setType(s);
                }

                final Button delSpatialStm = new Button(_placeGroup, SWT.PUSH);
                delSpatialStm.setText(NLMessages.getString("Editor_delete"));
                delSpatialStm.setToolTipText(NLMessages.getString("Editor_remove_spatialStm_tip"));
                delSpatialStm.setImage(_imageReg.get(IconsInternal.PLACE_REMOVE));
                delSpatialStm.setEnabled(_currentAspect.getSpatialDim().getSpatialStms().size() > 1 && _mayWrite);

                delSpatialStm.setLayoutData(_gridData);
                delSpatialStm.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        //                  System.out.println("del timeStm " + (Integer) placeGroup //$NON-NLS-1$
                        //                        .getData("spatialStm")); //$NON-NLS-1$
                        loadTimeSpatialDim(6, null, null, ((Integer) _placeGroup.getData("spatialStm")), null); //$NON-NLS-1$

                    }
                });
                delSpatialStm.setLayoutData(new GridData());

                final Button addPlace = new Button(_placeGroup, SWT.PUSH);
                addPlace.setText(NLMessages.getString("Editor_addPlace"));
                addPlace.setToolTipText(NLMessages.getString("Editor_add_place_tip"));
                addPlace.setImage(_imageReg.get(IconsInternal.ADD));
                addPlace.setEnabled(_mayWrite);
                addPlace.setLayoutData(_gridData);
                addPlace.setData("spatialStm", i); //$NON-NLS-1$
                addPlace.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        //                  System.out.println("add place " + (Integer) placeGroup //$NON-NLS-1$
                        //                        .getData("spatialStm")); //$NON-NLS-1$
                        loadTimeSpatialDim(7, null, null, ((Integer) addPlace.getData("spatialStm")), null); //$NON-NLS-1$

                        validate();

                    }
                });
                addPlace.setLayoutData(new GridData());

                if (sStm.getPlaces() != null) {
                    for (int j = 0; j < sStm.getPlaces().size(); j++) {
                        int m = j + 1;

                        final Place p = sStm.getPlaces().get(j);
                        final Composite compositePlace = new Composite(_placeGroup, SWT.NONE);
                        compositePlace.setData("spatialStm", i); //$NON-NLS-1$
                        compositePlace.setData("place", j); //$NON-NLS-1$
                        compositePlace.setLayout(new GridLayout());
                        compositePlace.setLayoutData(new GridData());
                        ((GridLayout) compositePlace.getLayout()).numColumns = 6;
                        ((GridLayout) compositePlace.getLayout()).makeColumnsEqualWidth = true;
                        ((GridData) compositePlace.getLayoutData()).horizontalAlignment = GridData.FILL;
                        ((GridData) compositePlace.getLayoutData()).horizontalSpan = 5;

                        @SuppressWarnings("unused")
                        FocusListener focusListener = new FocusAdapter() {

                        };

                        Label spacialLabel = new Label(compositePlace, SWT.NONE);
                        spacialLabel.setText(NLMessages.getString("Editor_palce_space") + m
                                + NLMessages.getString("Editor_space_name"));
                        spacialLabel.setLayoutData(new GridData());

                        final Text placeText = new Text(compositePlace, SWT.BORDER);
                        placeText.setEditable(_mayWrite);
                        placeText.setBackground(WHITE_COLOR);
                        placeText.setLayoutData(new GridData());
                        ((GridData) placeText.getLayoutData()).horizontalAlignment = GridData.FILL;
                        ((GridData) placeText.getLayoutData()).grabExcessHorizontalSpace = true;
                        ((GridData) placeText.getLayoutData()).horizontalSpan = 5;
                        final ControlDecoration decoPlace = new ControlDecoration(placeText, SWT.LEFT | SWT.TOP);

                        if (p.getPlaceName() != null) {
                            placeText.setText(p.getPlaceName()); //$NON-NLS-1$

                        } else {
                            placeText.setText(""); //$NON-NLS-1$
                            decoPlace.setImage(FieldDecorationRegistry.getDefault()
                                    .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());
                        }
                        placeText.addFocusListener(new FocusListener() {
                            @Override
                            public void focusLost(final FocusEvent e) {
                                p.setPlaceName(placeText.getText()); //$NON-NLS-1$
                                if (p.isValid()) {
                                    decoPlace.setImage(null);
                                } else {
                                    decoPlace.setImage(FieldDecorationRegistry.getDefault()
                                            .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                }
                                validate();

                            }

                            @Override
                            public void focusGained(FocusEvent e) {
                                String[] vals = new String[] { "NO PLACE FOUNG" };
                                try {
                                    vals = _mainSearcher.getFacets("tagging", "placeName", p.getType(),
                                            p.getSubtype(), null);
                                } catch (Exception e1) {

                                    e1.printStackTrace();
                                }
                                new AutoCompleteField(placeText, new TextContentAdapter(), vals);
                            }
                        });
                        placeText.addKeyListener(new KeyListener() {
                            @Override
                            public void keyPressed(final KeyEvent e) {
                            }

                            @Override
                            public void keyReleased(final KeyEvent e) {
                                p.setPlaceName(placeText.getText()); //$NON-NLS-1$
                                if (p.isValid()) {
                                    decoPlace.setImage(null);
                                } else {
                                    decoPlace.setImage(FieldDecorationRegistry.getDefault()
                                            .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                }
                                validate();
                            }
                        });

                        Label placeTypeL = new Label(compositePlace, SWT.NONE);
                        placeTypeL.setText(NLMessages.getString("Editor_type"));
                        placeTypeL.setLayoutData(new GridData());

                        final Combo placeTypeCombo = new Combo(compositePlace, SWT.DROP_DOWN | SWT.READ_ONLY);
                        placeTypeCombo.setEnabled(_mayWrite);
                        placeTypeCombo.setBackground(WHITE_COLOR);
                        placeTypeCombo.setLayoutData(new GridData());
                        ((GridData) placeTypeCombo.getLayoutData()).horizontalAlignment = GridData.FILL;
                        ((GridData) placeTypeCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                        ((GridData) placeTypeCombo.getLayoutData()).horizontalSpan = 2;

                        ComboViewer placeTypeComboViewer = new ComboViewer(placeTypeCombo);
                        placeTypeComboViewer.setContentProvider(new MarkupContentProvider());
                        placeTypeComboViewer.setLabelProvider(new MarkupLabelProvider());
                        if (_facade.getConfigs().containsKey(_markupProvider)) {
                            placeTypeComboViewer.setInput(_facade.getConfigs().get(_markupProvider).getChildren()
                                    .get("aodl:placeName").getChildren());
                        }
                        // placeTypeCombo.setItems(readConfigs(_markupProvider,
                        // "markup", "type", "placeName", null, null));
                        //
                        // for (String sdt : AEConstants.PLACESCALE)
                        // {
                        // placeTypeCombo.add(sdt);
                        // }
                        if (p.getType() != null) {
                            ViewHelper.setComboViewerByString(placeTypeComboViewer, p.getType(), true);

                        } else {
                            ConfigData cd = (ConfigData) placeTypeComboViewer.getElementAt(0);
                            p.setType(cd.getValue());
                        }

                        Label placeSubtypeL = new Label(compositePlace, SWT.NONE);
                        placeSubtypeL.setText(NLMessages.getString("Editor_subtype"));
                        placeSubtypeL.setLayoutData(new GridData());

                        final Combo placeSubtypeCombo = new Combo(compositePlace, SWT.DROP_DOWN | SWT.READ_ONLY);
                        placeSubtypeCombo.setEnabled(_mayWrite);
                        placeSubtypeCombo.setBackground(WHITE_COLOR);
                        placeSubtypeCombo.setLayoutData(new GridData());
                        ((GridData) placeSubtypeCombo.getLayoutData()).horizontalAlignment = GridData.FILL;
                        ((GridData) placeSubtypeCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                        ((GridData) placeSubtypeCombo.getLayoutData()).horizontalSpan = 2;
                        final ComboViewer placeSubtypeComboViewer = new ComboViewer(placeSubtypeCombo);
                        placeSubtypeComboViewer.setContentProvider(new MarkupContentProvider());
                        placeSubtypeComboViewer.setLabelProvider(new MarkupLabelProvider());

                        placeTypeComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
                            @Override
                            public void selectionChanged(final SelectionChangedEvent event) {
                                ISelection iSelection = event.getSelection();
                                Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                                ConfigData cd = (ConfigData) obj;
                                p.setType(cd.getValue());
                                placeSubtypeComboViewer.setInput(_facade.getConfigs().get(_markupProvider)
                                        .getChildren().get("aodl:placeName").getChildren().get(p.getType())
                                        .getChildren());
                            }
                        });

                        // for (String sdt : AEConstants.PLACESCALE)
                        // {
                        // placeSubtypeCombo.add(sdt);
                        // }
                        if (p.getSubtype() != null) {
                            ViewHelper.setComboViewerByString(placeSubtypeComboViewer, p.getSubtype(), true);
                        }
                        placeSubtypeComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
                            @Override
                            public void selectionChanged(final SelectionChangedEvent event) {
                                ISelection iSelection = event.getSelection();
                                Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                                ConfigData cd = (ConfigData) obj;
                                p.setSubtype(cd.getValue());
                            }
                        });

                        Label placeKeyL = new Label(compositePlace, SWT.NONE);
                        placeKeyL.setText(NLMessages.getString("Editor_key"));
                        placeKeyL.setLayoutData(new GridData());

                        // XXX this is the spatialStm place's 'key' attr
                        final Text placeKeyText = new Text(compositePlace, SWT.BORDER);
                        placeKeyText.setEditable(_mayWrite);
                        placeKeyText.setBackground(WHITE_COLOR);
                        placeKeyText.setLayoutData(new GridData());
                        ((GridData) placeKeyText.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) placeKeyText.getLayoutData()).grabExcessHorizontalSpace = true;
                        ((GridData) placeKeyText.getLayoutData()).horizontalSpan = 3;
                        if (p.getKey() != null) {
                            placeKeyText.setText(p.getKey()); //$NON-NLS-1$
                        } else {
                            placeKeyText.setText(""); //$NON-NLS-1$
                        }
                        //XXX value from text field is only copied on lost focus event
                        placeKeyText.addFocusListener(new FocusAdapter() {
                            @Override
                            public void focusLost(final FocusEvent e) {
                                p.setKey(placeKeyText.getText());
                            }
                        });

                        final Button delPlace = new Button(compositePlace, SWT.PUSH);
                        delPlace.setText(NLMessages.getString("Editor_deletePlace"));
                        delPlace.setToolTipText(NLMessages.getString("Editor_remove_place_tip"));
                        delPlace.setImage(_imageReg.get(IconsInternal.REMOVE));
                        delPlace.setEnabled(_mayWrite);
                        delPlace.setLayoutData(_gridData);
                        delPlace.addSelectionListener(new SelectionAdapter() {
                            @Override
                            public void widgetSelected(final SelectionEvent event) {
                                //                        System.out.println("del place " + (Integer) compositePlace //$NON-NLS-1$
                                //.getData("spatialStm") + " " + (Integer) compositePlace.getData("place")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
                                loadTimeSpatialDim(8, null, null, (Integer) compositePlace.getData("spatialStm"), //$NON-NLS-1$
                                        (Integer) compositePlace.getData("place")); //$NON-NLS-1$
                                validate();
                            }
                        });
                        delPlace.setLayoutData(new GridData());
                        delPlace.pack();

                        compositePlace.layout(); // compositePlace
                    }
                }
                _timeGroup.layout();

                _placeGroup.layout(); // placeGroup
            }
        }
        contentCompTimePlace.layout();

        _scrollCompTimePlace.setContent(contentCompTimePlace);
        Point point = contentCompTimePlace.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
        Point mp = _mainTabFolder.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
        if (point.x > mp.x - 20) {
            point.x = mp.x - 20;
        }
        _scrollCompTimePlace.setMinSize(point);
        _scrollCompTimePlace.layout();
        _dimensionComposite.redraw();
        _dimensionComposite.layout();
        //      _dimensionComposite.pack();
        //      _mainTabFolder.redraw();
        _mainTabFolder.layout();
        //      _mainTabFolder.pack();
    }

    /**
     * Load validation.
     * @param type the type
     * @param src the src
     */
    private void loadValidation(final int type, final Integer src) {
        if (_scrollCompVal != null) {
            _scrollCompVal.dispose();
        }
        _scrollCompVal = new ScrolledComposite(_sourceComposite, SWT.V_SCROLL);
        _scrollCompVal.setExpandHorizontal(true);
        _scrollCompVal.setExpandVertical(true);
        _scrollCompVal.setMinSize(SWT.DEFAULT, SWT.DEFAULT);

        _scrollCompVal.setLayout(new GridLayout());
        _scrollCompVal.setLayoutData(new GridData());
        ((GridData) _scrollCompVal.getLayoutData()).heightHint = 490;
        ((GridData) _scrollCompVal.getLayoutData()).widthHint = 700;

        ((GridData) _scrollCompVal.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _scrollCompVal.getLayoutData()).grabExcessHorizontalSpace = true;
        _scrollCompVal.setMinHeight(1);
        _scrollCompVal.setMinWidth(1);
        _scrollCompVal.layout();

        Composite contentCompVal = new Composite(_scrollCompVal, SWT.NONE);
        contentCompVal.setLayout(new GridLayout());
        _scrollCompVal.setContent(contentCompVal);

        switch (type) {
        case 0:
            break; // nix, normales laden
        case 1: // neue reference einfgen
            if (_currentAspect.getValidation() == null) {
                _currentAspect.setValidation(new Validation());
                _currentAspect.getValidation().setValidationStms(new Vector<ValidationStm>());
                _currentAspect.getValidation().getValidationStms().add(new ValidationStm());
                _currentAspect.getValidation().getValidationStms().lastElement().setReference(new Reference());
            } else {
                _currentAspect.getValidation().getValidationStms().add(new ValidationStm());
                _currentAspect.getValidation().getValidationStms().lastElement().setReference(new Reference());

            }
            break;
        case 2: // reference lschen
            _currentAspect.getValidation().remove(src);
            break;
        default:
            break;

        }
        if (_currentAspect.getValidation() != null) {
            for (int i = 0; i < _currentAspect.getValidation().getValidationStms().size(); i++) {
                final ValidationStm vs = _currentAspect.getValidation().getValidationStms().get(i);

                Group valGroup = new Group(contentCompVal, SWT.SHADOW_IN);
                valGroup.setLayout(new GridLayout());
                ((GridLayout) valGroup.getLayout()).numColumns = 1;
                ((GridLayout) valGroup.getLayout()).makeColumnsEqualWidth = false;

                valGroup.setLayoutData(new GridData());
                ((GridData) valGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) valGroup.getLayoutData()).grabExcessHorizontalSpace = true;
                int l = i + 1;
                valGroup.setText(NLMessages.getString("Editor_reference") + l);

                final Composite sourceComposite = new Composite(valGroup, SWT.NONE);
                sourceComposite.setData("src", i); //$NON-NLS-1$
                sourceComposite.setLayout(new GridLayout());
                ((GridLayout) sourceComposite.getLayout()).numColumns = 7;
                ((GridLayout) sourceComposite.getLayout()).makeColumnsEqualWidth = false;
                sourceComposite.setLayoutData(new GridData());
                ((GridData) sourceComposite.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) sourceComposite.getLayoutData()).grabExcessHorizontalSpace = true;

                Label sourceLabel2 = new Label(sourceComposite, SWT.NONE);
                sourceLabel2.setText(NLMessages.getString("Editor_reference"));
                sourceLabel2.setLayoutData(new GridData());

                final Text sourceText = new Text(sourceComposite, SWT.BORDER);
                sourceText.setEditable(_mayWrite);
                sourceText.setBackground(WHITE_COLOR);
                sourceText.setLayoutData(new GridData());
                ((GridData) sourceText.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) sourceText.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) sourceText.getLayoutData()).horizontalSpan = 3;
                final ControlDecoration decoValId = new ControlDecoration(sourceText, SWT.LEFT | SWT.TOP);
                ControlDecoration decoValIdInfo = new ControlDecoration(sourceText, SWT.LEFT | SWT.BOTTOM);
                decoValIdInfo.setDescriptionText(NLMessages.getString("Editor_proposal_cntl_all_ref"));
                decoValIdInfo.setImage(FieldDecorationRegistry.getDefault()
                        .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
                decoValIdInfo.setShowOnlyOnFocus(false);

                Button relateRefButton = new Button(sourceComposite, SWT.PUSH);
                relateRefButton.setText(NLMessages.getString("Editor_select_dots"));
                relateRefButton.setImage(_imageReg.get(IconsInternal.SEARCH));
                relateRefButton.setEnabled(_mayWrite);
                relateRefButton.setLayoutData(new GridData());
                relateRefButton.setToolTipText(NLMessages.getString("Editor_linkWithSource")); //$NON-NLS-1$

                //            relateRefButton.pack();

                Button newRefButton = new Button(sourceComposite, SWT.PUSH);
                newRefButton.setText(NLMessages.getString("Editor_create_new_ref"));
                newRefButton.setToolTipText(NLMessages.getString("Editor_create_new_ref_tip"));
                newRefButton.setImage(_imageReg.get(IconsInternal.REFERENCE_NEW));
                newRefButton.setEnabled(_mayWrite);
                newRefButton.setLayoutData(new GridData());

                //            newRefButton.pack();

                Button editRefButton = new Button(sourceComposite, SWT.PUSH);
                editRefButton.setImage(_imageReg.get(IconsInternal.REFERENCE_EDIT));
                editRefButton.setEnabled(_mayWrite);
                editRefButton.setLayoutData(new GridData());
                editRefButton.setToolTipText(NLMessages.getString("Editor_edit_reference_tooltip")); //$NON-NLS-1$

                //            editRefButton.pack();

                if (vs.getReference().getSourceId() != null) //$NON-NLS-1$
                {
                    decoValId.setImage(null);
                    PdrObject o = _facade.getReference(vs.getReference().getSourceId());
                    if (o != null) {
                        sourceText.setText(o.getDisplayNameWithID());
                    } else {
                        sourceText.setText(vs.getReference().getSourceId().toString());
                        decoValId.setImage(FieldDecorationRegistry.getDefault()
                                .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                        decoValId.setDescriptionText(NLMessages.getString("Editor_missing_object_no_relation"));
                    }
                } else {
                    sourceText.setText("");
                    decoValId.setImage(FieldDecorationRegistry.getDefault()
                            .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                }

                sourceText.addFocusListener(new FocusListener() {

                    @Override
                    public void focusGained(final FocusEvent e) {
                        char[] autoActivationCharacters = new char[] { '.', '#' };
                        KeyStroke keyStroke;

                        try {
                            keyStroke = KeyStroke.getInstance("Ctrl+Space");
                            ContentProposalAdapter adapter = new ContentProposalAdapter(sourceText,
                                    new TextContentAdapter(),
                                    new FacetContentProposalProvider(_facade.getAllReferenceFacets()), keyStroke,
                                    autoActivationCharacters);
                            adapter.setLabelProvider(new AutoCompleteNameLabelProvider());
                            adapter.addContentProposalListener(new IContentProposalListener() {

                                @Override
                                public void proposalAccepted(final IContentProposal proposal) {
                                    sourceText.setText(proposal.getContent());
                                    if (((Facet) proposal).getKey() != null) {
                                        vs.getReference().setSourceId(new PdrId(((Facet) proposal).getKey()));
                                        decoValId.setImage(null);
                                        validate();
                                    }
                                }
                            });
                        } catch (org.eclipse.jface.bindings.keys.ParseException e1) {

                            e1.printStackTrace();
                        }

                    }

                    @Override
                    public void focusLost(final FocusEvent e) {
                        if (vs.getReference().getSourceId() != null
                                && _facade.getReference(vs.getReference().getSourceId()) != null) {
                            decoValId.setDescriptionText("");
                            decoValId.setImage(null);
                        } else {
                            vs.getReference().setSourceId(null);
                            decoValId.setImage(FieldDecorationRegistry.getDefault()
                                    .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                            decoValId.setDescriptionText(NLMessages.getString("Editor_missing_object_no_relation"));
                        }
                        validate();

                    }
                });
                sourceText.addKeyListener(new KeyListener() {
                    @Override
                    public void keyPressed(final KeyEvent e) {
                    }

                    @Override
                    public void keyReleased(final KeyEvent e) {
                        if (sourceText.getText().length() == 23) {
                            PdrObject o = _facade.getReference(new PdrId(sourceText.getText()));
                            if (o != null) {
                                decoValId.setImage(null);
                                vs.getReference().setSourceId(new PdrId(sourceText.getText()));
                                sourceText.setText(o.getDisplayNameWithID());
                            }
                        } else if (sourceText.getText().trim().length() == 0) {
                            vs.getReference().setSourceId(null);
                        }

                        validate();
                    }
                });

                relateRefButton.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {

                        IWorkbench workbench = PlatformUI.getWorkbench();
                        Display display = workbench.getDisplay();
                        Shell shell = new Shell(display);
                        SelectObjectDialog dialog = new SelectObjectDialog(shell, 2);
                        dialog.open();
                        if (_facade.getRequestedId() != null) {
                            vs.getReference().setSourceId(_facade.getRequestedId());
                            if (vs.getReference().isValidId()) {
                                decoValId.setImage(null);
                                PdrObject o = _facade.getReference(vs.getReference().getSourceId());
                                if (o != null) {
                                    sourceText.setText(o.getDisplayNameWithID()); //$NON-NLS-1$
                                }
                            }
                        } else {
                            if (!vs.getReference().isValidId()) {
                                decoValId.setImage(FieldDecorationRegistry.getDefault()
                                        .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                sourceText.setText("");
                            }
                        }
                        validate();
                    }
                });
                newRefButton.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {

                        IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench()
                                .getService(IHandlerService.class);
                        try {
                            handlerService.executeCommand("org.bbaw.pdr.ae.view.main.commands.NewReference", null); //$NON-NLS-1$
                        } catch (ExecutionException e) {
                            e.printStackTrace();
                        } catch (NotDefinedException e) {
                            e.printStackTrace();
                        } catch (NotEnabledException e) {
                            e.printStackTrace();
                        } catch (NotHandledException e) {
                            e.printStackTrace();
                        }
                        if (_facade.getCurrentReference() != null) {
                            vs.getReference().setSourceId(_facade.getCurrentReference().getPdrId());
                            sourceText.setText(
                                    _facade.getReference(vs.getReference().getSourceId()).getDisplayNameWithID()); //$NON-NLS-1$
                        }
                        if (vs.getReference().isValidId()) {
                            decoValId.setImage(null);
                        } else {
                            decoValId.setImage(FieldDecorationRegistry.getDefault()
                                    .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                        }
                        validate();

                    }
                });

                editRefButton.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        if (vs.getReference() != null && vs.getReference().getSourceId() != null) {
                            ReferenceMods ref = _facade.getReference(vs.getReference().getSourceId());
                            if (ref != null) {
                                _facade.setCurrentReference(ref);
                                System.out.println(
                                        "current reference revisions: " + ref.getRecord().getRevisions().size());
                                for (Revision r : ref.getRecord().getRevisions())
                                    System.out.println(" " + r.getRef() + " " + r.getTimeStamp());

                                IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench()
                                        .getService(IHandlerService.class);
                                try {
                                    handlerService.executeCommand(
                                            "org.bbaw.pdr.ae.view.main.commands.OpenSourceEditorDialog", null); //$NON-NLS-1$
                                } catch (ExecutionException e) {
                                    e.printStackTrace();
                                } catch (NotDefinedException e) {
                                    e.printStackTrace();
                                } catch (NotEnabledException e) {
                                    e.printStackTrace();
                                } catch (NotHandledException e) {
                                    e.printStackTrace();
                                }
                                System.out.println("After editing:");
                                System.out.println(
                                        "current reference revisions: " + ref.getRecord().getRevisions().size());

                            }
                        }

                    }
                });

                Label intenalLabel = new Label(sourceComposite, SWT.NONE);
                intenalLabel.setText(NLMessages.getString("Editor_internal"));
                intenalLabel.setLayoutData(new GridData());

                final Text internalText = new Text(sourceComposite,
                        SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
                internalText.setEditable(_mayWrite);
                internalText.setBackground(WHITE_COLOR);
                internalText.setLayoutData(new GridData());
                ((GridData) internalText.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) internalText.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) internalText.getLayoutData()).horizontalSpan = 6;

                if (vs.getReference().getInternal() != null) //$NON-NLS-1$
                {
                    internalText.setText(vs.getReference().getInternal());
                }
                internalText.addFocusListener(new FocusListener() {
                    @Override
                    public void focusLost(final FocusEvent e) {
                        vs.getReference().setInternal(internalText.getText());
                    }

                    @Override
                    public void focusGained(FocusEvent event) {
                        String[] vals = new String[] { "test", "test2" };
                        try {
                            vals = _mainSearcher.getFacets("validation", "internal", null, null, //$NON-NLS-1$
                                    null);
                        } catch (Exception e1) {

                            e1.printStackTrace();
                        }
                        new AutoCompleteField(internalText, new TextContentAdapter(), vals);

                    }

                });

                // Label blancL = new Label(sourceComposite, SWT.None);
                //               blancL.setText(""); //$NON-NLS-1$
                // blancL.setLayoutData(new GridData());

                Label refQualLabel = new Label(sourceComposite, SWT.NONE);
                refQualLabel.setText(NLMessages.getString("Editor_quality")); //$NON-NLS-1$
                refQualLabel.setLayoutData(new GridData());
                final Button[] radios = new Button[AEConstants.REFRENCEQUALITIES.length];
                final ControlDecoration decoValQual = new ControlDecoration(refQualLabel, SWT.LEFT | SWT.TOP);
                SelectionListener refListener = new SelectionAdapter() {
                    @Override
                    public void widgetDefaultSelected(final SelectionEvent e) {
                    }

                    @Override
                    public void widgetSelected(final SelectionEvent e) {
                        final String qual = (String) ((Button) e.getSource()).getData("text");
                        vs.getReference().setQuality(qual); //$NON-NLS-1$
                        // System.out.println("quality set to " + qual);
                        if (vs.getReference().isValidQuality()) {
                            decoValQual.setImage(null);
                        } else {
                            decoValQual.setImage(FieldDecorationRegistry.getDefault()
                                    .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                        }
                        validate();
                    }
                };
                for (int j = 0; j < AEConstants.REFRENCEQUALITIES.length; j++) {
                    radios[j] = new Button(sourceComposite, SWT.RADIO);
                    radios[j].setText(NLMessages.getString("Editor_" + AEConstants.REFRENCEQUALITIES[j]));
                    radios[j].setData("text", AEConstants.REFRENCEQUALITIES[j]);

                    radios[j].addSelectionListener(refListener);
                    radios[j].setEnabled(_mayWrite);
                    radios[j].setLayoutData(new GridData());
                }
                if (vs.getReference().getQuality() != null) {
                    ViewHelper.setRadioByString(radios, vs.getReference().getQuality());
                } else {
                    decoValId.setImage(FieldDecorationRegistry.getDefault()
                            .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                }

                Label refauthority = new Label(sourceComposite, SWT.NONE);
                if (vs.getAuthority() != null) {
                    User u = null;
                    try {
                        u = _facade.getUserManager().getUserById(vs.getAuthority().toString());
                    } catch (Exception e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    if (u != null) {
                        refauthority.setText("User: " + u.getDisplayName());
                    } else {
                        refauthority.setText("User: " + vs.getAuthority().toString());
                    }
                } else {
                    refauthority.setText("User: " + _facade.getCurrentUser().getPdrId().toString());
                    vs.setAuthority(_facade.getCurrentUser().getPdrId());
                }
                refauthority.setLayoutData(new GridData());
                ((GridData) refauthority.getLayoutData()).horizontalSpan = 3;

                Label refCitLabel = new Label(sourceComposite, SWT.NONE);
                refCitLabel.setText(NLMessages.getString("Editor_interpretation"));
                refCitLabel.setLayoutData(new GridData());
                ((GridData) refCitLabel.getLayoutData()).horizontalSpan = 3;

                final Text refCitation = new Text(sourceComposite,
                        SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
                refCitation.setEditable(_mayWrite);
                refCitation.setBackground(WHITE_COLOR);
                refCitation.setLayoutData(new GridData());
                ((GridData) refCitation.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) refCitation.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) refCitation.getLayoutData()).heightHint = 36;
                ((GridData) refCitation.getLayoutData()).horizontalSpan = 6;

                if (vs.getInterpretation() != null) {
                    refCitation.setText(vs.getInterpretation());
                }

                refCitation.addFocusListener(new FocusAdapter() {
                    @Override
                    public void focusLost(final FocusEvent e) {
                        vs.setInterpretation(refCitation.getText());
                    }
                });

                final Button delReference = new Button(sourceComposite, SWT.PUSH);
                delReference.setText(NLMessages.getString("Editor_delete"));
                delReference.setToolTipText(NLMessages.getString("Editor_remove_valStm_tip"));
                delReference.setImage(_imageReg.get(IconsInternal.REFERENCE_REMOVE));
                delReference.setEnabled(_mayWrite);
                delReference.setEnabled(_currentAspect.getValidation().getValidationStms().size() > 1);

                delReference.setLayoutData(_gridData);
                delReference.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        loadValidation(2, ((Integer) sourceComposite.getData("src"))); //$NON-NLS-1$
                        validate();

                    }
                });
                delReference.setLayoutData(new GridData());
                //            delReference.pack();
                //            sourceComposite.pack();
                //            valGroup.pack();

            }

        }
        contentCompVal.layout();

        _scrollCompVal.setContent(contentCompVal);
        Point point = contentCompVal.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
        Point mp = _mainTabFolder.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
        if (point.x > mp.x - 20) {
            point.x = mp.x - 20;
        }
        _scrollCompVal.setMinSize(point);
        _scrollCompVal.layout();
        _sourceComposite.redraw();
        _sourceComposite.layout();
        //      _sourceComposite.pack();
        //      _mainTabFolder.redraw();
        _mainTabFolder.layout();
        //      _mainTabFolder.pack();
    }

    /**
     * laods values of current aspect throws exception because it commands the
     * the XMLProcessor to parse and load the xml-text of aspect. TODO add
     * missing fields to be loaded TODO alter XMLProcessor so that exceptions
     * are not thrown in dialog class.
     * @throws SAXException sax exception
     * @throws IOException inout exception
     * @throws ParserConfigurationException sax parser exception
     */
    private void loadValues() throws SAXException, IOException, ParserConfigurationException {
        Revision revision = new Revision();
        revision.setRevisor(new String(_facade.getCurrentUser().getDisplayName()));
        revision.setTimeStamp(_facade.getCurrentDate());
        revision.setAuthority(_facade.getCurrentUser().getPdrId().clone());
        if (_currentAspect.isNew()) {
            revision.setRef(0);
            Record record = new Record();
            record.getRevisions().add(revision);
            _currentAspect.setRecord(record);
        }

        _mayWrite = new UserRichtsChecker().mayWrite(_currentAspect);
        if (!_mayWrite) {
            setMessage("You may open this aspect but not modify it.");
        }
        // addFurtherClassifier.setEnabled(_mayWrite);
        _addBelongsToButton.setEnabled(_mayWrite);
        _addRelationsButton.setEnabled(_mayWrite);
        _addReferencesButton.setEnabled(_mayWrite);
        _addSpatialStmButton.setEnabled(_mayWrite);
        _addTimeStmButton.setEnabled(_mayWrite);
        _buttonTaggingSet.setEnabled(_mayWrite);
        _buttonTaggingInsertSet.setEnabled(_mayWrite);
        _buttonTaggingInsertMarkup.setEnabled(_mayWrite);

        _comboTaggingElement.setEnabled(_mayWrite);
        _comboTaggingType.setEnabled(_mayWrite);
        _comboTaggingSubtype.setEnabled(_mayWrite);
        _comboTaggingRole.setEnabled(_mayWrite);

        // textTaggingAna.setEditable(_mayWrite);
        _findAna.setEnabled(_mayWrite);
        _textTaggingKey.setEditable(_mayWrite);
        _findKey.setEnabled(_mayWrite);
        // contentText.setEditable(_mayWrite);

        _buttonTDate.setEnabled(_mayWrite);
        _buttonTDateRange.setEnabled(_mayWrite);
        _comboTDateAfter.setEnabled(_mayWrite);
        _comboTDateBefore.setEnabled(_mayWrite);
        _comboTDateDay.setEnabled(_mayWrite);
        _comboTDateMonth.setEnabled(_mayWrite);
        _comboTDatePointOT.setEnabled(_mayWrite);
        _comboTDateRangeFromDay.setEnabled(_mayWrite);
        _comboTDateRangeFromMonth.setEnabled(_mayWrite);
        _comboTDateRangeToDay.setEnabled(_mayWrite);
        _comboTDateRangeToMonth.setEnabled(_mayWrite);
        _spinnerTDateRangeFromYear.setEnabled(_mayWrite);
        _spinnerTDateRangeToYear.setEnabled(_mayWrite);
        _spinnerTDateYear.setEnabled(_mayWrite);

        _markupProvider = Platform.getPreferencesService().getString(CommonActivator.PLUGIN_ID,
                "PRIMARY_TAGGING_PROVIDER", AEConstants.TAGGING_LIST_PROVIDER, null).toUpperCase(); //$NON-NLS-1$
        _relationProvider = Platform.getPreferencesService().getString(CommonActivator.PLUGIN_ID,
                "PRIMARY_RELATION_PROVIDER", AEConstants.RELATION_CLASSIFICATION_PROVIDER, null).toUpperCase(); //$NON-NLS-1$
        _semanticProvider = Platform.getPreferencesService().getString(CommonActivator.PLUGIN_ID,
                "PRIMARY_SEMANTIC_PROVIDER", AEConstants.CLASSIFICATION_AUTHORITY, null).toUpperCase(); //$NON-NLS-1$
        String standard = "PDR";
        if (!_facade.getConfigs().containsKey(standard)) {
            for (String s : _facade.getConfigs().keySet()) {
                standard = s;
                break;
            }
        }
        if (!_facade.getConfigs().containsKey(_markupProvider)) {
            _markupProvider = standard;
        }

        if (!_facade.getConfigs().containsKey(_relationProvider)) {
            _relationProvider = standard;
        }

        if (!_facade.getConfigs().containsKey(_semanticProvider)) {
            _semanticProvider = standard;
        }
        _preferedYear = PRESELECTED_YEAR;
        _clasView = false;
        _sourceView = false;
        _relView = false;
        _timePlaceView = false;
        _frontViewed = false;
        _sourceViewed = false;
        _relViewed = false;
        _timePlaceViewed = false;

        AEConstants.getCurrentLocale().getLanguage();
        if (_currentAspect != null) {
            // Front
            _pdrID.setText(_currentAspect.getPdrId().toString());

            if ((_currentAspect.getRecord() != null) && !_currentAspect.getRecord().getRevisions().isEmpty()) {
                if (_currentAspect.getRecord().getRevisions().get(0).getRevisor() != null) {
                    _creatorNameText.setText(_currentAspect.getRecord().getRevisions().get(0).getRevisor());
                } else {
                    _creatorNameText.setText(_facade
                            .getObjectDisplayName(_currentAspect.getRecord().getRevisions().get(0).getAuthority()));
                }
                _creationTimeText.setText(
                        _adminDateFormat.format(_currentAspect.getRecord().getRevisions().get(0).getTimeStamp()));
                // creatorNameText.pack();
                // creationTimeText.pack();

                if (_currentAspect.getRecord().getRevisions().size() > 1) {
                    if (_currentAspect.getRecord().getRevisions().lastElement().getAuthority() != null) {
                        _revisorName.setText(_facade.getObjectDisplayName(
                                _currentAspect.getRecord().getRevisions().lastElement().getAuthority()));
                    } else {
                        _revisorName.setText("Revisor not found");
                    }
                    _revisionTimeText.setText(_adminDateFormat
                            .format(_currentAspect.getRecord().getRevisions().lastElement().getTimeStamp()));
                }
            } else {
                _creatorNameText.setText(_facade.getCurrentUser().getDisplayName());
                _creationTimeText.setText(_adminDateFormat.format(_facade.getCurrentDate()));
                _currentAspect.setNew(true);
            }
            if (_currentAspect.isNew()) {
                setMessage(_message, IMessageProvider.INFORMATION); //$NON-NLS-1$
            }

            _markupEditor.setAspect(_currentAspect);

            _markupEditor.setEditable(_mayWrite);

            if (_currentAspect.getRelationDim() != null) {
                loadRelationDim(0, null, null);
                if (_currentAspect.getRelationDim().getRelationStms().firstElement().getSubject()
                        .equals(_currentAspect.getPdrId())) {
                    PdrId id = _currentAspect.getRelationDim().getRelationStms().firstElement().getRelations()
                            .firstElement().getObject();
                    if (id != null) {
                        _textTaggingAna.setData("id", id.toString());
                        PdrObject o = _facade.getPdrObject(id);
                        if (o != null) {
                            _textTaggingAna.setText(o.getDisplayNameWithID());
                        }
                    }
                } else {

                    PdrId id = _currentAspect.getRelationDim().getRelationStms().firstElement().getSubject();
                    if (id != null) {
                        _textTaggingAna.setData("id", id.toString());
                        PdrObject obj = _facade.getPdrObject(id);
                        if (obj != null) {
                            _textTaggingAna.setText(obj.getDisplayNameWithID());
                        }
                    }
                }
            } else {
                loadRelationDim(5, null, null);
            }
            // Sources
            if (_currentAspect.getValidation() != null) {
                loadValidation(0, null);
            } else {
                loadValidation(1, null);
            }

            // TODO dynamisieren fr mehrere Labels!!!!!!!!!!!
            // Classification
            if (_currentAspect.getSemanticDim() != null) {
                loadClassification(0, null);
            } else {
                loadClassification(1, null);
            }

        }

        //      ((Composite)_markupEditor.getControl()).pack();
        //
        //      ((Composite)_markupEditor.getControl()).layout();
        //      _editorComposite.pack();
        //      _editorComposite.layout();
        System.out.println("end of load values - layout maintabfolder");
        //      _mainTabFolder.pack();
        //      _mainTabFolder.layout();
        //      _mainTabFolder.update();
        _frontComposite.layout();
    }

    /**
     * @see org.eclipse.jface.dialogs.Dialog#okPressed()
     */
    @Override
    protected final void okPressed() {
        saveInput();
        super.okPressed();
    }

    /**
     * Process relation.
     * @param id the id
     */
    private void processRelation(final String id) {
        if (id != null && id.startsWith("pdr") && id.length() == 23) {
            boolean contains = false;
            if (_currentAspect.getRelationDim() == null) {
                _currentAspect.setRelationDim(new RelationDim());
            }

            for (RelationStm rst : _currentAspect.getRelationDim().getRelationStms()) {
                if (rst.getRelations() != null && !rst.getRelations().isEmpty()
                        && rst.getRelations().firstElement() != null
                        && rst.getRelations().firstElement().getObject() != null
                        && rst.getRelations().firstElement().getObject().toString().equals(id)) {
                    contains = true;
                }
            }
            if (!contains) {
                RelationStm rs = new RelationStm();
                rs.setSubject(_currentAspect.getPdrId());
                Relation r = new Relation();
                r.setRelation("aspect_of"); //$NON-NLS-1$
                r.setProvider("PDR"); //$NON-NLS-1$
                r.setObject(new PdrId(id));
                rs.setRelations(new Vector<Relation>(1));
                rs.getRelations().add(r);
                _currentAspect.getRelationDim().getRelationStms().add(rs);
            }
        }
    }

    @Override
    public void removeSelectionChangedListener(ISelectionChangedListener listener) {
        // TODO Auto-generated method stub

    }

    // TODO Speicherfunktion einrichten.
    /**
     * Save input.
     */
    private void saveInput() {
        if (_currentPerson != null && _currentPerson.isNew()) {
            // hier wird injestet
            try {
                _facade.savePerson(_currentPerson);
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

        Revision revision = new Revision();
        revision.setRevisor(new String(_facade.getCurrentUser().getDisplayName()));
        revision.setTimeStamp(_facade.getCurrentDate());
        revision.setAuthority(_facade.getCurrentUser().getPdrId().clone());
        boolean isModifiedOrNew = false;
        try {
            isModifiedOrNew = _idService.isModifiedOrNewObject(_currentAspect.getPdrId());
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        if (!_currentAspect.isNew() && !isModifiedOrNew) {
            revision.setRef(_currentAspect.getRecord().getRevisions().size());
            _currentAspect.getRecord().getRevisions().add(revision);
            _currentAspect.setDirty(true);
        } else {
            _currentAspect.getRecord().getRevisions().lastElement().setTimeStamp(_facade.getCurrentDate());
            _currentAspect.setDirty(true);
        }

        if (_currentAspect.getTimeDim() == null) {
            _currentAspect.setTimeDim(new TimeDim());
            _currentAspect.getTimeDim().setTimeStms(new Vector<TimeStm>());

        }
        if (_currentAspect.getTimeDim().getTimeStms().size() == 0) {
            TimeStm st = new TimeStm();
            st.setType("undefined"); //$NON-NLS-1$
            _currentAspect.getTimeDim().getTimeStms().add(st);
        }
        if (_currentAspect.getSpatialDim() == null) {
            _currentAspect.setSpatialDim(new SpatialDim());
            _currentAspect.getSpatialDim().setSpatialStms(new Vector<SpatialStm>());

        }
        if (_currentAspect.getSpatialDim().getSpatialStms().size() == 0) {
            SpatialStm spS = new SpatialStm();
            spS.setType("undefined"); //$NON-NLS-1$
            _currentAspect.getSpatialDim().getSpatialStms().add(spS);
        }
        _markupEditor.saveChanges();
        try {
            _facade.saveAspect(_currentAspect);
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        // hier wird die zuvor geclonte person fr die person mit der gleichen
        // id im allperson
        // vector eingetauscht und auerdem als currentPerson gesetzt.

    }

    /**
     * Sets the combos by quick select.
     * @param cd the new combos by quick select
     */
    private void setCombosByQuickSelect(final ConfigData cd) {
        if (cd instanceof DataType) {
            DataType dt = (DataType) cd;
            _comboTaggingElementViewer.setSelection(new StructuredSelection(dt));
        } else if (cd instanceof ConfigItem) {
            ConfigItem ci = (ConfigItem) cd;
            if (ci.getPos().equals("type")) {
                DataType dt = (DataType) ci.getParent();
                _comboTaggingElementViewer.setSelection(new StructuredSelection(dt));
                _comboTaggingTypeViewer.setSelection(new StructuredSelection(ci));
            } else if (ci.getPos().equals("subtype")) {
                ConfigItem parent = (ConfigItem) ci.getParent();
                DataType dt = (DataType) parent.getParent();
                _comboTaggingElementViewer.setSelection(new StructuredSelection(dt));
                _comboTaggingTypeViewer.setSelection(new StructuredSelection(parent));
                _comboTaggingSubtypeViewer.setSelection(new StructuredSelection(ci));

            } else if (ci.getPos().equals("role")) {
                ConfigItem parent = (ConfigItem) ci.getParent();
                ConfigItem grandParent = (ConfigItem) parent.getParent();
                DataType dt = (DataType) grandParent.getParent();
                _comboTaggingElementViewer.setSelection(new StructuredSelection(dt));
                _comboTaggingTypeViewer.setSelection(new StructuredSelection(grandParent));
                _comboTaggingSubtypeViewer.setSelection(new StructuredSelection(parent));
                _comboTaggingRoleViewer.setSelection(new StructuredSelection(ci));
            }
        }
    }

    // /**
    // * Sets the combo viewer by string.
    // * @param cv the cv
    // * @param s the s
    // */
    // private void setComboViewerByString(ComboViewer cv, String s)
    // {
    // boolean notincl = false;
    // if (cv.getInput() == null || !(cv.getInput() instanceof HashMap<?, ?>))
    // {
    // cv.setInput(new HashMap<String, ConfigData>());
    // }
    // if (cv.getInput() instanceof HashMap<?, ?>)
    // {
    // @SuppressWarnings("unchecked")
    // HashMap<String, ConfigData> inputs = (HashMap<String, ConfigData>)
    // cv.getInput();
    // if (!inputs.containsKey(s))
    // {
    // notincl = true;
    // ConfigItem ci = new ConfigItem();
    // ci.setValue(s);
    // ci.setLabel(s);
    // inputs.put(s, ci);
    // cv.setInput(inputs);
    // cv.refresh();
    // }
    // if (inputs.containsKey(s))
    // {
    // // System.out.println("contains key s " + s);
    // for (String key : inputs.keySet())
    // {
    // if (key.equals(s))
    // {
    // ConfigData cd = inputs.get(key);
    // if (cd instanceof ConfigItem && ((ConfigItem) cd).isIgnore())
    // {
    // ((ConfigItem) cd).setReadAlthoughIgnored(true);
    // cv.setInput(inputs);
    // }
    // StructuredSelection sel = new StructuredSelection(cd);
    // cv.setSelection(sel, true);
    // break;
    // }
    // }
    // }
    // if (notincl)
    // {
    // cv.getCombo().select(0);
    // }
    // }
    //
    // }

    // //////////////////////// Observer ///////////////////////////////////

    /**
     * Sets the markup.
     */
    protected final void setMarkup() {
        if (_stackUndo.size() == UNDO_STACKSIZE) {
            _stackUndo.removeElementAt(0);
        }
        _markupEditor.saveChanges();
        _stackUndo.push(new UndoInformation(_currentAspect.getNotification(), _currentAspect.getRangeList()));

        if (!_protectRedoStack) {
            _stackRedo.clear();
        }
        if (_undoAction != null) {
            _undoAction.setEnabled(_stackUndo.size() > 0);
        }
        if (_redoAction != null) {
            _redoAction.setEnabled(_stackRedo.size() > 0);
        }

        String name = _eListName;
        String type = _tListName;
        String subtype = _sListName;
        String role = _rListName;
        String ana = (String) _textTaggingAna.getData("id");
        String key = (String) _textTaggingKey.getData("id");
        PdrDate when;
        PdrDate from;
        PdrDate to;

        if (ana != null) {
            processRelation(ana);
        }

        // FIXME testselection!!!???
        if (name.length() > 0 && type.length() > 0) {
            TaggingRange tr = new TaggingRange(name, type, subtype, role, ana, key);
            if (_pointOfTime) {
                when = new PdrDate(_spinnerTDateYear.getSelection(), _comboTDateMonth.getSelectionIndex(),
                        _comboTDateDay.getSelectionIndex());
                ISelection sel = _comboViewerTDatePointOT.getSelection();
                Object obj = ((IStructuredSelection) sel).getFirstElement();
                String tDatePointOfTime = (String) obj;

                if (tDatePointOfTime.equals("when")) //$NON-NLS-1$
                {
                    tr.setWhen(when);
                } else if (tDatePointOfTime.equals("notBefore")) //$NON-NLS-1$
                {
                    tr.setNotBefore(when);
                } else {
                    tr.setNotAfter(when);
                }
            } else if (_rangeOfTime) {
                from = new PdrDate(_spinnerTDateRangeFromYear.getSelection(),
                        _comboTDateRangeFromMonth.getSelectionIndex(), _comboTDateRangeFromDay.getSelectionIndex());
                to = new PdrDate(_spinnerTDateRangeToYear.getSelection(),
                        _comboTDateRangeToMonth.getSelectionIndex(), _comboTDateRangeToDay.getSelectionIndex());
                ISelection sel = _comboViewerTDateBefore.getSelection();
                Object obj = ((IStructuredSelection) sel).getFirstElement();
                String tDatePointBefore = (String) obj;
                sel = _comboViewerTDateAfter.getSelection();
                obj = ((IStructuredSelection) sel).getFirstElement();
                String tDatePointAfter = (String) obj;
                if (tDatePointBefore.equals("from")) //$NON-NLS-1$
                {
                    tr.setFrom(from);
                } else {
                    tr.setNotBefore(from);
                }

                if (tDatePointAfter.equals("to")) //$NON-NLS-1$
                {
                    tr.setTo(to);
                } else {
                    tr.setNotAfter(to);
                }

            }
            tr.setTextValue(_markupEditor.getSelectionText());
            _currentAspect.getRangeList().add(tr);
            if (_rangeOfTime || _pointOfTime) {
                _taggedDateCache.add(tr.clone());
            }
            if (name.equals("placeName")) //$NON-NLS-1$
            {
                _taggedPlaceCache.add(tr.clone());
            }
            insertTimePlace();

            Collections.sort(_currentAspect.getRangeList());
            _markupEditor.setMarkup(tr);

        }
    }

    @Override
    public void setSelection(ISelection selection) {
        // TODO Auto-generated method stub

    }

    /**
     * Validate.
     */
    private void validate() {
        boolean valid = true;
        if (_markupEditor.isValid() && (_currentAspect.isValidNotification() || _markupEditor.isValid())
                && _currentAspect.getSemanticDim() != null && _currentAspect.getSemanticDim().isValid()) {
            _frontTabItem.setImage(_imageReg.get(IconsInternal.MARKUP));
        } else {
            if (_frontViewed) {
                _frontTabItem.setImage(_imageReg.get(IconsInternal.MARKUP_ERROR));
            } else {
                _frontTabItem.setImage(_imageReg.get(IconsInternal.MARKUP_QUESTION));
            }
            valid = false;
        }

        if (_currentAspect.getValidation() != null && _currentAspect.getValidation().isValid()) {
            _sourceTabItem.setImage(_imageReg.get(IconsInternal.REFERENCE));
        } else {
            if (_sourceViewed) {
                _sourceTabItem.setImage(_imageReg.get(IconsInternal.REFERENCE_ERROR));
            } else {
                _sourceTabItem.setImage(_imageReg.get(IconsInternal.REFERENCE_QUESTION));
            }
            valid = false;
        }
        if (_currentAspect.getRelationDim() != null && _currentAspect.getRelationDim().isValid()) {
            _relationTabItem.setImage(_imageReg.get(IconsInternal.RELATIONSTATEMENTS));
        } else {
            if (_relViewed) {
                _relationTabItem.setImage(_imageReg.get(IconsInternal.RELATIONSTATEMENTS_ERROR));
            } else {
                _relationTabItem.setImage(_imageReg.get(IconsInternal.RELATIONSTATEMENTS_QUESTION));
            }
            valid = false;
        }
        if (_currentAspect.getTimeDim() != null && _currentAspect.getTimeDim().isValid()
                && _currentAspect.getSpatialDim() != null && _currentAspect.getSpatialDim().isValid()) {
            _dimensionTabItem.setImage(_imageReg.get(IconsInternal.TIMEANDPLACE));
        } else {
            if (_timePlaceViewed) {
                _dimensionTabItem.setImage(_imageReg.get(IconsInternal.TIMEANDPLACE_ERROR));
            } else {
                _dimensionTabItem.setImage(_imageReg.get(IconsInternal.TIMEANDPLACE_QUESTION));
            }
            valid = false;
        }
        if (_saveButton != null) {
            _saveButton.setEnabled(valid && _mayWrite);
        }

    }

}