org.bbaw.pdr.ae.view.control.dialogs.SelectObjectDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.bbaw.pdr.ae.view.control.dialogs.SelectObjectDialog.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.control.dialogs;

import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Vector;

import org.bbaw.pdr.ae.common.AEConstants;
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.core.ConfigDataComparator;
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.facade.Facade;
import org.bbaw.pdr.ae.control.interfaces.AMainSearcher;
import org.bbaw.pdr.ae.metamodel.IAEPresentable;
import org.bbaw.pdr.ae.metamodel.PdrDate;
import org.bbaw.pdr.ae.model.Aspect;
import org.bbaw.pdr.ae.model.Person;
import org.bbaw.pdr.ae.model.ReferenceMods;
import org.bbaw.pdr.ae.model.ReferenceModsTemplate;
import org.bbaw.pdr.ae.model.search.Criteria;
import org.bbaw.pdr.ae.model.search.Operator;
import org.bbaw.pdr.ae.model.search.PdrQuery;
import org.bbaw.pdr.ae.view.control.comparator.PdrObjectViewComparator;
import org.bbaw.pdr.ae.view.control.customSWTWidges.YearSpinner;
import org.bbaw.pdr.ae.view.control.provider.AEConfigPresentableContentProvider;
import org.bbaw.pdr.ae.view.control.provider.AEConfigPresentableLabelProvider;
import org.bbaw.pdr.ae.view.control.provider.AspectTableContentProvider;
import org.bbaw.pdr.ae.view.control.provider.ListLabelProvider;
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.PersonVectorContentProvider;
import org.bbaw.pdr.ae.view.control.provider.RefTemplateContentProvider;
import org.bbaw.pdr.ae.view.control.provider.ReferenceTableContentProvider;
import org.bbaw.pdr.ae.view.control.provider.TableLabelProvider;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.fieldassist.AutoCompleteField;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.jface.operation.IRunnableWithProgress;
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.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
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.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.progress.UIJob;

/**
 * @author cplutte Klasse erzeugt den Dialog zum Auswhlen von Personen,
 *         Aspekten und Quellen zur Erzeugung von Verknpfungen zwischen
 *         Aspekten und Personen etc.
 */
public class SelectObjectDialog extends TitleAreaDialog {
    /** list for last persons, aspects, sources. */
    private List _lastAspectList;

    /** The last person list. */
    private List _lastPersonList;

    /** The _last reference list. */
    private List _lastReferenceList;
    /** singleton facade instance. */
    private Facade _facade = Facade.getInstanz();
    /** MainSearcher. */
    private AMainSearcher _mainSearcher = _facade.getMainSearcher();
    /** Instance of shared image registry. */
    private ImageRegistry _imageReg = CommonActivator.getDefault().getImageRegistry();

    /** The _person table viewer. */
    private TableViewer _personTableViewer;

    /** The _aspect table viewer. */
    private TableViewer _aspectTableViewer;

    /** The _reference table viewer. */
    private TableViewer _referenceTableViewer;

    /** The preselection. */
    private int _preselection = Platform.getPreferencesService().getInt(CommonActivator.PLUGIN_ID,
            "ASPECT_PRESELECTED_DATE_YEAR", AEConstants.ASPECT_PRESELECTED_DATE_YEAR, null); //$NON-NLS-1$

    /** The _person list viewer. */
    private ListViewer _personListViewer;

    /** The _selected aspect text. */
    private Text _selectedAspectText;

    /** The _selected person text. */
    private Text _selectedPersonText;

    /** The _selected ref text. */
    private Text _selectedRefText;
    /** selected person, aspect, source. */
    private Person _selectedP = null;

    /** The selected a. */
    private Aspect _selectedA = null;

    /** The selected r. */
    private ReferenceMods _selectedR = null;

    /** type of requested object 0 = aspect, 1 = person 2 = reference. */
    private int _type;

    /** The selection type. */
    private int _selectionType;

    /** The _person search group. */
    private Group _personSearchGroup;

    /** The _person result group. */
    private Group _personResultGroup;

    /** The _aspect search group. */
    private Group _aspectSearchGroup;

    /** The _ref search group. */
    private Group _refSearchGroup;

    /** layout elements. */
    private TabFolder _mainTabFolder;

    /** The aspect tab item. */
    private TabItem _aspectTabItem;

    /** The person tab item. */
    private TabItem _personTabItem;

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

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

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

    /** The grid data2. */
    private GridData _gridData2;

    /**
     * Composite des TabItems personTabItem.
     */
    private Composite _personComposite;

    /** The aspect composite. */
    private Composite _aspectComposite;

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

    /** The person main s form. */
    private SashForm _personMainSForm;

    /** The person search s form. */
    private SashForm _personSearchSForm;

    /** The aspect main s form. */
    private SashForm _aspectMainSForm;

    /** The aspect search s form. */
    private SashForm _aspectSearchSForm;

    /** The source main s form. */
    private SashForm _sourceMainSForm;

    /** The source search s form. */
    private SashForm _sourceSearchSForm;

    /** The person query. */
    private PdrQuery _personQuery;

    /** The aspect query. */
    private PdrQuery _aspectQuery;

    /** The reference query. */
    private PdrQuery _referenceQuery;

    /** The criteria. */
    private Criteria _criteria;

    /** The search p tag comp. */
    private Composite _searchPTagComp;

    /** The search p rel comp. */
    private Composite _searchPRelComp;

    /** The search p date comp. */
    private Composite _searchPDateComp;

    /** The search a tag comp. */
    private Composite _searchATagComp;

    /** The search a date comp. */
    private Composite _searchADateComp;

    /** The search p. */
    private Button _searchP;

    /** The search a. */
    private Button _searchA;

    /** The search r. */
    private Button _searchR;

    /** The _ok button. */
    private Button _okButton;

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

    /** The relation provider. */
    private String _relationProvider = Platform.getPreferencesService().getString(CommonActivator.PLUGIN_ID,
            "PRIMARY_RELATION_PROVIDER", AEConstants.RELATION_CLASSIFICATION_PROVIDER, null).toUpperCase();

    /**
     * Instantiates a new select object dialog.
     * @param parentShell the parent shell
     * @param type the type
     */
    public SelectObjectDialog(final Shell parentShell, final int type) {
        super(parentShell);
        this._type = type;
        this._selectionType = type;
        if (_markupProvider == null) {
            _markupProvider = (String) _facade.getConfigs().keySet().toArray()[0];
        }
        if (_relationProvider == null) {
            _relationProvider = (String) _facade.getConfigs().keySet().toArray()[0];
        }
    }

    /**
     * Builds the aspect search.
     */
    private void buildAspectSearch() {
        DataType dtAll = new DataType();
        dtAll.setValue("ALL");
        dtAll.setLabel("ALL");
        _aspectQuery = new PdrQuery();
        _aspectQuery.setType(0);
        _criteria = new Criteria();
        _criteria.setType("tagging"); //$NON-NLS-1$
        _aspectQuery.getCriterias().add(_criteria);
        final Criteria c = _aspectQuery.getCriterias().firstElement();

        _searchATagComp = new Composite(_aspectSearchGroup, SWT.NONE);
        _searchATagComp.setLayout(new GridLayout());
        ((GridLayout) _searchATagComp.getLayout()).makeColumnsEqualWidth = true;
        ((GridLayout) _searchATagComp.getLayout()).numColumns = 15;
        _searchATagComp.setLayoutData(new GridData());
        ((GridData) _searchATagComp.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _searchATagComp.getLayoutData()).grabExcessHorizontalSpace = true;
        // ((GridData) searchPTagComp.getLayoutData()).heightHint = 200;
        ((GridData) _searchATagComp.getLayoutData()).grabExcessVerticalSpace = false;
        ((GridData) _searchATagComp.getLayoutData()).horizontalSpan = 1;

        Label sem = new Label(_searchATagComp, SWT.NONE);
        sem.setText(NLMessages.getString("Dialog_semantic"));
        sem.setLayoutData(new GridData());
        ((GridData) sem.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) sem.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) sem.getLayoutData()).horizontalSpan = 2;

        Label tagName = new Label(_searchATagComp, SWT.NONE);
        tagName.setText(NLMessages.getString("Dialog_Markup"));
        tagName.setLayoutData(new GridData());
        ((GridData) tagName.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) tagName.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) tagName.getLayoutData()).horizontalSpan = 2;

        Label tagType = new Label(_searchATagComp, SWT.NONE);
        tagType.setText(NLMessages.getString("Dialog_type"));
        tagType.setLayoutData(new GridData());
        ((GridData) tagType.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) tagType.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) tagType.getLayoutData()).horizontalSpan = 2;

        Label tagSubtype = new Label(_searchATagComp, SWT.NONE);
        tagSubtype.setText(NLMessages.getString("Dialog_subtype"));
        tagSubtype.setLayoutData(new GridData());
        ((GridData) tagSubtype.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) tagSubtype.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) tagSubtype.getLayoutData()).horizontalSpan = 2;

        Label searchTextLabel = new Label(_searchATagComp, SWT.NONE);
        searchTextLabel.setText(NLMessages.getString("Dialog_searchText"));
        searchTextLabel.setLayoutData(new GridData());
        ((GridData) searchTextLabel.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) searchTextLabel.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) searchTextLabel.getLayoutData()).horizontalSpan = 5;

        Label fuzzy = new Label(_searchATagComp, SWT.NONE);
        fuzzy.setText(NLMessages.getString("Dialog_fuzzy"));
        fuzzy.setLayoutData(new GridData());
        ((GridData) fuzzy.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) fuzzy.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) fuzzy.getLayoutData()).horizontalSpan = 1;

        final Combo semCombo = new Combo(_searchATagComp, SWT.READ_ONLY);
        semCombo.setLayoutData(new GridData());
        ComboViewer comboSemanticViewer = new ComboViewer(semCombo);
        comboSemanticViewer.setContentProvider(new AEConfigPresentableContentProvider());
        comboSemanticViewer.setLabelProvider(new AEConfigPresentableLabelProvider());
        ((AEConfigPresentableContentProvider) comboSemanticViewer.getContentProvider()).setAddALL(true);

        if (_facade.getAllSemantics() != null && !_facade.getAllSemantics().isEmpty()) {
            comboSemanticViewer.setInput(_facade.getAllSemantics());
            if (c.getCrit0() != null) {
                setComboViewerByString(comboSemanticViewer, c.getCrit0());
            } else {
                semCombo.select(0);
                c.setCrit0(semCombo.getItem(0));
            }
        }
        semCombo.setLayoutData(new GridData());
        ((GridData) semCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) semCombo.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) semCombo.getLayoutData()).horizontalSpan = 2;

        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) {
                    c.setCrit0(cp.getValue());
                }
            }
        });
        semCombo.pack();
        final Combo tagCombo = new Combo(_searchATagComp, SWT.READ_ONLY);
        tagCombo.setLayoutData(new GridData());
        tagCombo.setLayoutData(new GridData());
        ((GridData) tagCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) tagCombo.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) tagCombo.getLayoutData()).horizontalSpan = 2;
        final ComboViewer tagComboViewer = new ComboViewer(tagCombo);
        tagComboViewer.setContentProvider(new MarkupContentProvider(true));
        tagComboViewer.setLabelProvider(new MarkupLabelProvider());
        tagComboViewer.setComparator(new ConfigDataComparator());
        if (_facade.getConfigs().containsKey(_markupProvider)) {
            HashMap<String, ConfigData> input = _facade.getConfigs().get(_markupProvider).getChildren();
            tagComboViewer.setInput(input);
        }
        if (c.getCrit1() != null) {
            setComboViewerByString(tagComboViewer, c.getCrit1());
        } else {
            Object obj = tagComboViewer.getElementAt(0);
            if (obj != null) {
                tagComboViewer.setSelection(new StructuredSelection(obj));
                ConfigData cd = (ConfigData) tagComboViewer.getElementAt(0);
                if (cd.getValue().startsWith("aodl:")) //$NON-NLS-1$
                {
                    c.setCrit1(cd.getValue().substring(5));
                } else {
                    c.setCrit1(cd.getValue());
                }
            }
        }
        final Combo typeCombo = new Combo(_searchATagComp, SWT.READ_ONLY);
        typeCombo.setLayoutData(new GridData());
        typeCombo.setLayoutData(new GridData());
        ((GridData) typeCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) typeCombo.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) typeCombo.getLayoutData()).horizontalSpan = 2;
        final ComboViewer typeComboViewer = new ComboViewer(typeCombo);
        typeComboViewer.setContentProvider(new MarkupContentProvider(false));
        typeComboViewer.setLabelProvider(new MarkupLabelProvider());
        typeComboViewer.setComparator(new ConfigDataComparator());

        tagComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(final SelectionChangedEvent event) {
                ISelection iSelection = event.getSelection();
                Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                ConfigData cd = (ConfigData) obj;
                String selection;
                if (cd.getValue().startsWith("aodl:")) {
                    selection = cd.getValue().substring(5);
                } else {
                    selection = cd.getValue();
                }
                c.setCrit1(selection);
                setComboViewerInput(typeComboViewer, "tagging_values", c.getCrit1(), null, null);
            }
        });

        if (c.getCrit2() != null) {
            setComboViewerByString(typeComboViewer, c.getCrit2());
        }

        final Combo subtypeCombo = new Combo(_searchATagComp, SWT.READ_ONLY);
        final ComboViewer subtypeComboViewer = new ComboViewer(subtypeCombo);
        subtypeComboViewer.setContentProvider(new MarkupContentProvider(false));
        subtypeComboViewer.setLabelProvider(new MarkupLabelProvider());
        subtypeComboViewer.setComparator(new ConfigDataComparator());

        typeComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(final SelectionChangedEvent event) {
                ISelection iSelection = event.getSelection();
                Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                ConfigData cd = (ConfigData) obj;
                subtypeComboViewer.setInput(null);
                if (cd != null) {
                    c.setCrit2(cd.getValue());
                }
                setComboViewerInput(subtypeComboViewer, "tagging_values", c.getCrit1(), c.getCrit2(), null);
            }
        });

        subtypeCombo.setLayoutData(new GridData());
        subtypeCombo.setLayoutData(new GridData());
        ((GridData) subtypeCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) subtypeCombo.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) subtypeCombo.getLayoutData()).horizontalSpan = 2;
        if (c.getCrit3() != null) {
            setComboViewerByString(subtypeComboViewer, c.getCrit3());
        }

        subtypeComboViewer.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) {
                    c.setCrit3(cd.getValue());
                }
            }
        });

        final Text searchText = new Text(_searchATagComp, SWT.BORDER);
        searchText.setLayoutData(new GridData());
        searchText.setLayoutData(new GridData());
        ((GridData) searchText.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) searchText.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) searchText.getLayoutData()).horizontalSpan = 5;
        if (c.getSearchText() != null) {
            searchText.setText(c.getSearchText());
        }
        searchText.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(final FocusEvent e) {
                String[] vals = new String[] {};
                try {
                    vals = _mainSearcher.getFacets("tagging", c.getCrit1(), c.getCrit2(), null, null);
                } catch (Exception e1) {

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

            }

            @Override
            public void focusLost(final FocusEvent e) {
                c.setSearchText(searchText.getText());
            }
        });
        searchText.addKeyListener(new KeyListener() {
            @Override
            public void keyPressed(final KeyEvent e) {
                if (e.keyCode == SWT.CR) {
                    c.setSearchText(searchText.getText());
                    searchAspects();
                }
            }

            @Override
            public void keyReleased(final KeyEvent e) {
            }
        });
        final Button fuzzyB = new Button(_searchATagComp, SWT.CHECK);
        fuzzyB.setLayoutData(new GridData());
        fuzzyB.setSelection(c.isFuzzy());
        fuzzyB.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                c.setFuzzy(!c.isFuzzy());
            }
        });

        _searchADateComp = new Composite(_aspectSearchGroup, SWT.NONE);
        _searchADateComp.setLayout(new GridLayout());
        ((GridLayout) _searchADateComp.getLayout()).makeColumnsEqualWidth = true;
        ((GridLayout) _searchADateComp.getLayout()).numColumns = 13;
        _searchADateComp.setLayoutData(new GridData());
        ((GridData) _searchADateComp.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _searchADateComp.getLayoutData()).grabExcessHorizontalSpace = true;
        // ((GridData) searchADateComp.getLayoutData()).heightHint = 200;
        ((GridData) _searchADateComp.getLayoutData()).grabExcessVerticalSpace = false;
        ((GridData) _searchADateComp.getLayoutData()).horizontalSpan = 1;

        Label typeDate = new Label(_searchADateComp, SWT.NONE);
        typeDate.setText(NLMessages.getString("Dialog_type"));
        typeDate.setLayoutData(new GridData());
        ((GridData) typeDate.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) typeDate.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) typeDate.getLayoutData()).horizontalSpan = 2;

        Label bl = new Label(_searchADateComp, SWT.NONE);
        bl.setText(""); //$NON-NLS-1$
        Label notBefore = new Label(_searchADateComp, SWT.NONE);
        notBefore.setText(NLMessages.getString("Dialog_day"));
        notBefore.setLayoutData(new GridData());
        ((GridData) notBefore.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) notBefore.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) notBefore.getLayoutData()).horizontalSpan = 1;

        Label month = new Label(_searchADateComp, SWT.NONE);
        month.setText(NLMessages.getString("Dialog_month"));
        month.setLayoutData(new GridData());
        ((GridData) month.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) month.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) month.getLayoutData()).horizontalSpan = 1;

        Label year = new Label(_searchADateComp, SWT.NONE);
        year.setText(NLMessages.getString("Dialog_year"));
        year.setLayoutData(new GridData());
        ((GridData) year.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) year.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) year.getLayoutData()).horizontalSpan = 2;

        Label bl2 = new Label(_searchADateComp, SWT.NONE);
        bl2.setText(""); //$NON-NLS-1$

        Label notAfter = new Label(_searchADateComp, SWT.NONE);
        notAfter.setText(NLMessages.getString("Dialog_day"));
        notAfter.setLayoutData(new GridData());
        ((GridData) notAfter.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) notAfter.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) notAfter.getLayoutData()).horizontalSpan = 1;

        Label month2 = new Label(_searchADateComp, SWT.NONE);
        month2.setText(NLMessages.getString("Dialog_month"));
        month2.setLayoutData(new GridData());
        ((GridData) month2.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) month2.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) month2.getLayoutData()).horizontalSpan = 1;

        Label year2 = new Label(_searchADateComp, SWT.NONE);
        year2.setText(NLMessages.getString("Dialog_year"));
        year2.setLayoutData(new GridData());
        ((GridData) year2.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) year2.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) year2.getLayoutData()).horizontalSpan = 2;

        final Combo typeDCombo = new Combo(_searchADateComp, SWT.READ_ONLY);
        typeDCombo.setLayoutData(new GridData());
        ComboViewer timeTypeComboViewer = new ComboViewer(typeDCombo);
        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;
                c.setDateType(s);
            }

        });
        if (c.getDateType() != null) {
            StructuredSelection selection = new StructuredSelection(c.getDateType());
            timeTypeComboViewer.setSelection(selection);
        } else {
            StructuredSelection selection = new StructuredSelection(AEConstants.TIME_TYPES[0]);
            timeTypeComboViewer.setSelection(selection);
            c.setDateType(AEConstants.TIME_TYPES[0]);
        }
        typeDCombo.pack();
        typeDCombo.setLayoutData(new GridData());
        ((GridData) typeDCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) typeDCombo.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) typeDCombo.getLayoutData()).horizontalSpan = 2;

        Label from = new Label(_searchADateComp, SWT.NONE);
        from.setText(NLMessages.getString("Dialog_from"));
        from.setLayoutData(new GridData());
        ((GridData) from.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) from.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) from.getLayoutData()).horizontalSpan = 1;

        final Combo day1Combo = new Combo(_searchADateComp, SWT.READ_ONLY);
        day1Combo.setLayoutData(new GridData());
        day1Combo.setItems(AEConstants.DAYS);
        day1Combo.setLayoutData(new GridData());
        ((GridData) day1Combo.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) day1Combo.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) day1Combo.getLayoutData()).horizontalSpan = 1;

        if (c.getDateFrom() == null) {
            PdrDate dateFrom = new PdrDate("0000-00-00"); //$NON-NLS-1$
            // dateFrom.setDay(0);
            // dateFrom.setMonth(0);
            // dateFrom.setYear(0);
            c.setDateFrom(dateFrom);
            day1Combo.select(c.getDateFrom().getDay());
        }
        //         System.out.println("test: dateFrom " + c.getDateFrom().toString()); //$NON-NLS-1$
        // else
        // {
        //
        // day1Combo.select(0);
        // c.getDateFrom().setDay(0);
        //
        // }

        day1Combo.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent se) {
                c.getDateFrom().setDay(day1Combo.getSelectionIndex());
            }
        });

        final Combo month1Combo = new Combo(_searchADateComp, SWT.READ_ONLY);
        month1Combo.setLayoutData(new GridData());
        month1Combo.setItems(AEConstants.MONTHS);
        month1Combo.setLayoutData(new GridData());
        ((GridData) month1Combo.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) month1Combo.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) month1Combo.getLayoutData()).horizontalSpan = 1;
        if (c.getDateFrom() != null) {
            month1Combo.select(c.getDateFrom().getMonth());
        } else {

            month1Combo.select(0);
            c.getDateFrom().setMonth(0);

        }

        month1Combo.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent se) {
                c.getDateFrom().setMonth(month1Combo.getSelectionIndex());
            }
        });

        final YearSpinner year1Spinner = new YearSpinner(_searchADateComp, SWT.NULL);
        // year1Spinner.setLayoutData(new GridData());
        // year1Spinner.setLayoutData(new GridData());
        // ((GridData) year1Spinner.getLayoutData()).horizontalAlignment =
        // SWT.FILL;
        // ((GridData) year1Spinner.getLayoutData()).grabExcessHorizontalSpace =
        // true;
        // ((GridData) year1Spinner.getLayoutData()).horizontalSpan = 2;
        // year1Spinner.setMinimum(0);
        // year1Spinner.setMaximum(9999);
        if (c.getDateFrom() != null) {
            year1Spinner.setSelection(c.getDateFrom().getYear());
        } else {

            year1Spinner.setSelection(_preselection);
            c.getDateFrom().setYear(_preselection);

        }
        year1Spinner.addSelectionListener(new SelectionListener() {

            @Override
            public void widgetDefaultSelected(final SelectionEvent e) {
                c.getDateFrom().setYear(year1Spinner.getSelection());

            }

            @Override
            public void widgetSelected(final SelectionEvent e) {
                c.getDateFrom().setYear(year1Spinner.getSelection());
            }

        });

        Label to = new Label(_searchADateComp, SWT.NONE);
        to.setText(NLMessages.getString("Dialog_to"));
        to.setLayoutData(new GridData());
        ((GridData) to.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) to.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) to.getLayoutData()).horizontalSpan = 1;

        final Combo day2Combo = new Combo(_searchADateComp, SWT.READ_ONLY);
        day2Combo.setLayoutData(new GridData());
        day2Combo.setItems(AEConstants.DAYS);
        day2Combo.setLayoutData(new GridData());
        ((GridData) day2Combo.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) day2Combo.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) day2Combo.getLayoutData()).horizontalSpan = 1;
        if (c.getDateTo() == null) {
            PdrDate dateTo = new PdrDate("0000-00-00"); //$NON-NLS-1$
            c.setDateTo(dateTo);
            day2Combo.select(c.getDateTo().getDay());
        }

        day2Combo.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent se) {
                c.getDateTo().setDay(day2Combo.getSelectionIndex());
            }
        });

        final Combo month2Combo = new Combo(_searchADateComp, SWT.READ_ONLY);
        month2Combo.setLayoutData(new GridData());
        month2Combo.setItems(AEConstants.MONTHS);
        month2Combo.setLayoutData(new GridData());
        ((GridData) month2Combo.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) month2Combo.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) month2Combo.getLayoutData()).horizontalSpan = 1;
        if (c.getDateTo() != null) {
            month2Combo.select(c.getDateTo().getMonth());
        } else {

            month2Combo.select(0);
            c.getDateTo().setMonth(0);

        }

        month2Combo.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent se) {
                c.getDateTo().setMonth(month2Combo.getSelectionIndex());
            }
        });

        final YearSpinner year2Spinner = new YearSpinner(_searchADateComp, SWT.NULL);
        // year2Spinner.setLayoutData(new GridData());
        // year2Spinner.setLayoutData(new GridData());
        // ((GridData) year2Spinner.getLayoutData()).horizontalAlignment =
        // SWT.FILL;
        // ((GridData) year2Spinner.getLayoutData()).grabExcessHorizontalSpace =
        // true;
        // ((GridData) year2Spinner.getLayoutData()).horizontalSpan = 2;
        // year2Spinner.setMinimum(0);
        // year2Spinner.setMaximum(9999);
        if (c.getDateTo() != null) {
            year2Spinner.setSelection(c.getDateTo().getYear());
        } else {

            year2Spinner.setSelection(_preselection);
            c.getDateTo().setYear(_preselection);

        }

        year2Spinner.addSelectionListener(new SelectionListener() {

            @Override
            public void widgetDefaultSelected(final SelectionEvent e) {
                c.getDateTo().setYear(year2Spinner.getSelection());

            }

            @Override
            public void widgetSelected(final SelectionEvent e) {
                c.getDateTo().setYear(year2Spinner.getSelection());
            }

        });

        final Button includeB = new Button(_searchADateComp, SWT.CHECK);
        includeB.setLayoutData(new GridData());
        includeB.setSelection(c.isIncludeConcurrences());
        includeB.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                c.setIncludeConcurrences(!c.isIncludeConcurrences());
            }
        });

    }

    /**
     * Builds the person search.
     */
    private void buildPersonSearch() {
        DataType dtAll = new DataType();
        dtAll.setValue("ALL");
        dtAll.setLabel("ALL");
        _personQuery = new PdrQuery();
        _personQuery.setType(1);
        _criteria = new Criteria();
        _criteria.setType("tagging"); //$NON-NLS-1$
        _personQuery.getCriterias().add(_criteria);
        _criteria = new Criteria();
        _criteria.setType("tagging"); //$NON-NLS-1$
        _personQuery.getCriterias().add(_criteria);

        _criteria = new Criteria();
        _personQuery.getCriterias().add(_criteria);
        _criteria.setType("relation"); //$NON-NLS-1$

        _criteria = new Criteria();
        _personQuery.getCriterias().add(_criteria);
        _criteria.setType("date"); //$NON-NLS-1$

        boolean tag1 = true;
        boolean rel1 = true;
        boolean date1 = true;
        for (int i = 0; i < _personQuery.getCriterias().size(); i++) {
            //         System.out.println("for i = " + i); //$NON-NLS-1$
            final Criteria c = _personQuery.getCriterias().get(i);

            if (c.getType().equals("tagging")) //$NON-NLS-1$
            {
                if (tag1) {
                    tag1 = false;
                    _searchPTagComp = new Composite(_personSearchGroup, SWT.NONE);
                    _searchPTagComp.setLayout(new GridLayout());
                    ((GridLayout) _searchPTagComp.getLayout()).makeColumnsEqualWidth = true;
                    ((GridLayout) _searchPTagComp.getLayout()).numColumns = 15;
                    _searchPTagComp.setLayoutData(new GridData());
                    ((GridData) _searchPTagComp.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) _searchPTagComp.getLayoutData()).grabExcessHorizontalSpace = true;
                    // ((GridData) searchPTagComp.getLayoutData()).heightHint =
                    // 200;
                    ((GridData) _searchPTagComp.getLayoutData()).grabExcessVerticalSpace = false;
                    ((GridData) _searchPTagComp.getLayoutData()).horizontalSpan = 1;

                    Label op = new Label(_searchPTagComp, SWT.NONE);
                    op.setText(NLMessages.getString("Dialog_operand"));
                    op.setLayoutData(new GridData());
                    ((GridData) op.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) op.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) op.getLayoutData()).horizontalSpan = 2;

                    Label sem = new Label(_searchPTagComp, SWT.NONE);
                    sem.setText(NLMessages.getString("Dialog_semantic"));
                    sem.setLayoutData(new GridData());
                    ((GridData) sem.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) sem.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) sem.getLayoutData()).horizontalSpan = 2;

                    Label tagName = new Label(_searchPTagComp, SWT.NONE);
                    tagName.setText(NLMessages.getString("Dialog_markup"));
                    tagName.setLayoutData(new GridData());
                    ((GridData) tagName.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) tagName.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) tagName.getLayoutData()).horizontalSpan = 2;

                    Label tagType = new Label(_searchPTagComp, SWT.NONE);
                    tagType.setText(NLMessages.getString("Dialog_type"));
                    tagType.setLayoutData(new GridData());
                    ((GridData) tagType.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) tagType.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) tagType.getLayoutData()).horizontalSpan = 2;

                    Label tagSubtype = new Label(_searchPTagComp, SWT.NONE);
                    tagSubtype.setText(NLMessages.getString("Dialog_subtype"));
                    tagSubtype.setLayoutData(new GridData());
                    ((GridData) tagSubtype.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) tagSubtype.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) tagSubtype.getLayoutData()).horizontalSpan = 2;

                    Label searchTextLabel = new Label(_searchPTagComp, SWT.NONE);
                    searchTextLabel.setText(NLMessages.getString("Dialog_searchText"));
                    searchTextLabel.setLayoutData(new GridData());
                    ((GridData) searchTextLabel.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) searchTextLabel.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) searchTextLabel.getLayoutData()).horizontalSpan = 3;

                    Label fuzzy = new Label(_searchPTagComp, SWT.NONE);
                    fuzzy.setText(NLMessages.getString("Dialog_fuzzy"));
                    fuzzy.setLayoutData(new GridData());
                    ((GridData) fuzzy.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) fuzzy.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) fuzzy.getLayoutData()).horizontalSpan = 1;

                    Label include = new Label(_searchPTagComp, SWT.NONE);
                    include.setText(NLMessages.getString("Dialog_include"));
                    include.setToolTipText(NLMessages.getString("Dialog_includeConcurrences"));
                    include.setLayoutData(new GridData());
                    ((GridData) include.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) include.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) include.getLayoutData()).horizontalSpan = 1;

                }

                if (i == 0) {
                    Label l = new Label(_searchPTagComp, SWT.NONE);
                    l.setText(NLMessages.getString("Dialog_Markup"));
                    l.setLayoutData(new GridData());
                    ((GridData) l.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) l.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) l.getLayoutData()).horizontalSpan = 2;
                } else {
                    final Combo opCombo = new Combo(_searchPTagComp, SWT.READ_ONLY);
                    opCombo.setLayoutData(new GridData());
                    opCombo.add(Operator.AND.toString());
                    opCombo.add(Operator.OR.toString());
                    opCombo.add(Operator.NOT.toString());
                    opCombo.setLayoutData(new GridData());
                    ((GridData) opCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) opCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) opCombo.getLayoutData()).horizontalSpan = 2;
                    if (c.getOperator() != null) {
                        opCombo.setText(c.getOperator());
                    } else {
                        opCombo.select(0);
                        c.setOperator(opCombo.getItem(0));

                    }
                    opCombo.addSelectionListener(new SelectionAdapter() {
                        @Override
                        public void widgetSelected(final SelectionEvent se) {
                            c.setOperator(opCombo.getItem(opCombo.getSelectionIndex()));
                        }
                    });
                }

                final Combo semCombo = new Combo(_searchPTagComp, SWT.READ_ONLY);
                semCombo.setLayoutData(new GridData());
                ComboViewer comboSemanticViewer = new ComboViewer(semCombo);
                comboSemanticViewer.setContentProvider(new AEConfigPresentableContentProvider());
                comboSemanticViewer.setLabelProvider(new AEConfigPresentableLabelProvider());
                ((AEConfigPresentableContentProvider) comboSemanticViewer.getContentProvider()).setAddALL(true);

                if (_facade.getAllSemantics() != null && !_facade.getAllSemantics().isEmpty()) {
                    comboSemanticViewer.setInput(_facade.getAllSemantics());
                    if (c.getCrit0() != null) {
                        setComboViewerByString(comboSemanticViewer, c.getCrit0());
                    } else {
                        semCombo.select(0);
                        c.setCrit0(semCombo.getItem(0));
                    }
                }
                semCombo.setLayoutData(new GridData());
                ((GridData) semCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) semCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) semCombo.getLayoutData()).horizontalSpan = 2;

                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) {
                            c.setCrit0(cp.getValue());
                        }
                    }
                });
                semCombo.pack();
                final Combo tagCombo = new Combo(_searchPTagComp, SWT.READ_ONLY);
                tagCombo.setLayoutData(new GridData());
                tagCombo.setLayoutData(new GridData());
                ((GridData) tagCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) tagCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) tagCombo.getLayoutData()).horizontalSpan = 2;
                final ComboViewer tagComboViewer = new ComboViewer(tagCombo);
                tagComboViewer.setContentProvider(new MarkupContentProvider(true));
                tagComboViewer.setLabelProvider(new MarkupLabelProvider());
                tagComboViewer.setComparator(new ConfigDataComparator());
                if (_facade.getConfigs().containsKey(_markupProvider)) {
                    HashMap<String, ConfigData> input = _facade.getConfigs().get(_markupProvider).getChildren();
                    tagComboViewer.setInput(input);
                }
                if (c.getCrit1() != null) {
                    setComboViewerByString(tagComboViewer, c.getCrit1());
                } else {
                    Object obj = tagComboViewer.getElementAt(0);
                    if (obj != null) {
                        tagComboViewer.setSelection(new StructuredSelection(obj));
                        ConfigData cd = (ConfigData) tagComboViewer.getElementAt(0);
                        if (cd.getValue().startsWith("aodl:")) //$NON-NLS-1$
                        {
                            c.setCrit1(cd.getValue().substring(5));
                        } else {
                            c.setCrit1(cd.getValue());
                        }
                    }

                }
                final Combo typeCombo = new Combo(_searchPTagComp, SWT.READ_ONLY);
                typeCombo.setLayoutData(new GridData());
                typeCombo.setLayoutData(new GridData());
                ((GridData) typeCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) typeCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) typeCombo.getLayoutData()).horizontalSpan = 2;
                final ComboViewer typeComboViewer = new ComboViewer(typeCombo);
                typeComboViewer.setContentProvider(new MarkupContentProvider(false));
                typeComboViewer.setLabelProvider(new MarkupLabelProvider());
                typeComboViewer.setComparator(new ConfigDataComparator());

                tagComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
                    @Override
                    public void selectionChanged(final SelectionChangedEvent event) {
                        ISelection iSelection = event.getSelection();
                        Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                        ConfigData cd = (ConfigData) obj;
                        String selection;
                        if (cd.getValue().startsWith("aodl:")) {
                            selection = cd.getValue().substring(5);
                        } else {
                            selection = cd.getValue();
                        }
                        c.setCrit1(selection);
                        setComboViewerInput(typeComboViewer, "tagging_values", c.getCrit1(), null, null);
                    }
                });

                if (c.getCrit2() != null) {
                    setComboViewerByString(typeComboViewer, c.getCrit2());
                }

                final Combo subtypeCombo = new Combo(_searchPTagComp, SWT.READ_ONLY);
                final ComboViewer subtypeComboViewer = new ComboViewer(subtypeCombo);
                subtypeComboViewer.setContentProvider(new MarkupContentProvider(false));
                subtypeComboViewer.setLabelProvider(new MarkupLabelProvider());
                subtypeComboViewer.setComparator(new ConfigDataComparator());

                typeComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
                    @Override
                    public void selectionChanged(final SelectionChangedEvent event) {
                        ISelection iSelection = event.getSelection();
                        Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                        ConfigData cd = (ConfigData) obj;
                        subtypeComboViewer.setInput(null);
                        if (cd != null) {
                            c.setCrit2(cd.getValue());
                        }
                        setComboViewerInput(subtypeComboViewer, "tagging_values", c.getCrit1(), c.getCrit2(), null);
                    }
                });

                subtypeCombo.setLayoutData(new GridData());
                subtypeCombo.setLayoutData(new GridData());
                ((GridData) subtypeCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) subtypeCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) subtypeCombo.getLayoutData()).horizontalSpan = 2;
                if (c.getCrit3() != null) {
                    setComboViewerByString(subtypeComboViewer, c.getCrit3());
                }

                subtypeComboViewer.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) {
                            c.setCrit3(cd.getValue());
                        }
                    }
                });

                final Text searchText = new Text(_searchPTagComp, SWT.BORDER);
                searchText.setLayoutData(new GridData());
                searchText.setLayoutData(new GridData());
                ((GridData) searchText.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) searchText.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) searchText.getLayoutData()).horizontalSpan = 3;

                if (c.getSearchText() != null) {
                    searchText.setText(c.getSearchText());
                }
                searchText.addFocusListener(new FocusListener() {
                    @Override
                    public void focusGained(final FocusEvent e) {
                        String[] vals = new String[] {};
                        try {
                            vals = _mainSearcher.getFacets("tagging", c.getCrit1(), c.getCrit2(), null, null);
                        } catch (Exception e1) {

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

                    }

                    @Override
                    public void focusLost(final FocusEvent e) {
                        c.setSearchText(searchText.getText());
                    }
                });
                searchText.addKeyListener(new KeyListener() {
                    @Override
                    public void keyPressed(final KeyEvent e) {
                        if (e.keyCode == SWT.CR) {
                            c.setSearchText(searchText.getText());
                            searchPersons();
                        }
                    }

                    @Override
                    public void keyReleased(final KeyEvent e) {
                    }
                });

                final Button fuzzyB = new Button(_searchPTagComp, SWT.CHECK);
                fuzzyB.setLayoutData(new GridData());
                fuzzyB.setSelection(c.isFuzzy());
                fuzzyB.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        c.setFuzzy(!c.isFuzzy());
                    }
                });

                final Button includeB = new Button(_searchPTagComp, SWT.CHECK);
                includeB.setLayoutData(new GridData());
                includeB.setSelection(c.isIncludeConcurrences());
                includeB.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        c.setIncludeConcurrences(!c.isIncludeConcurrences());
                    }
                });

            } // if tagging

            if (c.getType().equals("relation")) //$NON-NLS-1$
            {
                if (rel1) {
                    rel1 = false;
                    _searchPRelComp = new Composite(_personSearchGroup, SWT.NONE);
                    _searchPRelComp.setLayout(new GridLayout());
                    ((GridLayout) _searchPRelComp.getLayout()).makeColumnsEqualWidth = true;
                    ((GridLayout) _searchPRelComp.getLayout()).numColumns = 15;
                    _searchPRelComp.setLayoutData(new GridData());
                    ((GridData) _searchPRelComp.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) _searchPRelComp.getLayoutData()).grabExcessHorizontalSpace = true;
                    // ((GridData) searchPRelComp.getLayoutData()).heightHint =
                    // 200;
                    ((GridData) _searchPRelComp.getLayoutData()).grabExcessVerticalSpace = false;
                    ((GridData) _searchPRelComp.getLayoutData()).horizontalSpan = 1;

                    Label l = new Label(_searchPRelComp, SWT.NONE);
                    l.setText(NLMessages.getString("Dialog_relation"));
                    l.setLayoutData(new GridData());
                    ((GridData) l.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) l.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) l.getLayoutData()).horizontalSpan = 2;

                    Label context = new Label(_searchPRelComp, SWT.NONE);
                    context.setText(NLMessages.getString("Dialog_context"));
                    context.setLayoutData(new GridData());
                    ((GridData) context.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) context.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) context.getLayoutData()).horizontalSpan = 2;

                    Label classL = new Label(_searchPRelComp, SWT.NONE);
                    classL.setText(NLMessages.getString("Dialog_class"));
                    classL.setLayoutData(new GridData());
                    ((GridData) classL.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) classL.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) classL.getLayoutData()).horizontalSpan = 2;

                    Label relObj = new Label(_searchPRelComp, SWT.NONE);
                    relObj.setText(NLMessages.getString("Dialog_relObject"));
                    relObj.setLayoutData(new GridData());
                    ((GridData) relObj.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) relObj.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) relObj.getLayoutData()).horizontalSpan = 4;

                    Label searchTextLabel = new Label(_searchPRelComp, SWT.NONE);
                    searchTextLabel.setText(NLMessages.getString("Dialog_searchText"));
                    searchTextLabel.setLayoutData(new GridData());
                    ((GridData) searchTextLabel.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) searchTextLabel.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) searchTextLabel.getLayoutData()).horizontalSpan = 3;

                    Label fuzzy = new Label(_searchPRelComp, SWT.NONE);
                    fuzzy.setText(""); //$NON-NLS-1$
                    fuzzy.setLayoutData(new GridData());
                    ((GridData) fuzzy.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) fuzzy.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) fuzzy.getLayoutData()).horizontalSpan = 1;

                    Label include = new Label(_searchPRelComp, SWT.NONE);
                    include.setText(""); //$NON-NLS-1$
                    include.setToolTipText(NLMessages.getString("Dialog_includeConcurrences"));
                    include.setLayoutData(new GridData());
                    ((GridData) include.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) include.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) include.getLayoutData()).horizontalSpan = 1;

                }

                if (i == 0) {
                    Label l = new Label(_searchPRelComp, SWT.NONE);
                    l.setLayoutData(new GridData());
                    l.setLayoutData(new GridData());
                    ((GridData) l.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) l.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) l.getLayoutData()).horizontalSpan = 2;
                } else {
                    final Combo opCombo = new Combo(_searchPRelComp, SWT.READ_ONLY);
                    opCombo.setLayoutData(new GridData());
                    opCombo.add(Operator.AND.toString());
                    opCombo.add(Operator.OR.toString());
                    opCombo.add(Operator.NOT.toString());
                    opCombo.setLayoutData(new GridData());
                    ((GridData) opCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) opCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) opCombo.getLayoutData()).horizontalSpan = 2;
                    if (c.getOperator() != null) {
                        opCombo.setText(c.getOperator());
                    } else {
                        opCombo.select(0);
                        c.setOperator(opCombo.getItem(0));

                    }
                    opCombo.addSelectionListener(new SelectionAdapter() {
                        @Override
                        public void widgetSelected(final SelectionEvent se) {
                            c.setOperator(opCombo.getItem(opCombo.getSelectionIndex()));
                        }
                    });
                }
                // final Combo contextCombo = new Combo(searchPRelComp,
                // SWT.READ_ONLY);
                // contextCombo.setLayoutData(new GridData());
                // contextCombo.setLayoutData(new GridData());
                // ((GridData) contextCombo.getLayoutData()).horizontalAlignment
                // = SWT.FILL;
                // ((GridData)
                // contextCombo.getLayoutData()).grabExcessHorizontalSpace =
                // true ;
                // ((GridData) contextCombo.getLayoutData()).horizontalSpan = 2;
                //
                //
                // final Combo classCombo = new Combo(searchPRelComp,
                // SWT.READ_ONLY);
                // classCombo.setLayoutData(new GridData());
                // classCombo.setLayoutData(new GridData());
                // ((GridData) classCombo.getLayoutData()).horizontalAlignment =
                // SWT.FILL;
                // ((GridData)
                // classCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                // ((GridData) classCombo.getLayoutData()).horizontalSpan = 2;
                //
                //
                // if (c.getRelationContext() != null)
                // {
                // contextCombo.select(contextCombo.indexOf(c.getRelationContext()));
                // }
                // else
                // {
                // try {
                // contextCombo.setItems(_mainSearcher.getFacets
                //            ("relation", null, null, null, null)); //$NON-NLS-1$ //$NON-NLS-2$
                // } catch (Exception e1) {
                // e1.printStackTrace();
                // }
                //               contextCombo.add("ALL", 0); //$NON-NLS-1$
                // contextCombo.select(0);
                // c.setRelationContext(contextCombo.getItem(0));
                //
                // }
                // contextCombo.addSelectionListener(new SelectionAdapter(){
                // public void widgetSelected(SelectionEvent se){
                // String selection =
                // contextCombo.getItem(contextCombo.getSelectionIndex());
                // c.setRelationContext(selection);
                // try {
                // classCombo.setItems(_mainSearcher
                //            .getFacets("relation", null, selection, null, null)); //$NON-NLS-1$ //$NON-NLS-2$
                // } catch (Exception e1) {
                // e1.printStackTrace();
                // }
                //                  classCombo.add("ALL", 0); //$NON-NLS-1$
                // classCombo.select(0);
                // c.setRelationContext(classCombo.getItem(0));
                //
                // }
                // });
                //
                // if (c.getRelationClass() != null)
                // {
                // classCombo.setText(c.getRelationClass());
                // }
                // else
                // {
                //
                //               classCombo.add("ALL", 0); //$NON-NLS-1$
                // classCombo.select(0);
                // c.setRelationClass(classCombo.getItem(0));
                // }
                //
                //
                // classCombo.addSelectionListener(new SelectionAdapter(){
                // public void widgetSelected(SelectionEvent se){
                // String selection =
                // classCombo.getItem(classCombo.getSelectionIndex());
                // c.setRelationContext(selection);
                //
                // }
                // });
                final Combo contextCombo = new Combo(_searchPRelComp, SWT.READ_ONLY);
                contextCombo.setLayoutData(new GridData());
                contextCombo.setLayoutData(new GridData());
                ((GridData) contextCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) contextCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) contextCombo.getLayoutData()).horizontalSpan = 2;
                final ComboViewer contextComboViewer = new ComboViewer(contextCombo);
                contextComboViewer.setContentProvider(new MarkupContentProvider(false));
                contextComboViewer.setLabelProvider(new MarkupLabelProvider());
                contextComboViewer.setComparator(new ConfigDataComparator());

                final Combo classCombo = new Combo(_searchPRelComp, SWT.READ_ONLY);
                classCombo.setLayoutData(new GridData());
                classCombo.setLayoutData(new GridData());
                ((GridData) classCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) classCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) classCombo.getLayoutData()).horizontalSpan = 2;
                final ComboViewer classComboViewer = new ComboViewer(classCombo);
                classComboViewer.setContentProvider(new MarkupContentProvider(false));
                classComboViewer.setLabelProvider(new MarkupLabelProvider());
                classComboViewer.setComparator(new ConfigDataComparator());
                setComboViewerInput(contextComboViewer, "relation", null, null, null);
                if (c.getRelationContext() != null) {
                    setComboViewerByString(contextComboViewer, c.getRelationContext());
                    setComboViewerInput(classComboViewer, "relation", c.getRelationContext(), null, null);

                } else {
                    contextComboViewer.setSelection(new StructuredSelection(contextComboViewer.getElementAt(0)));
                    ConfigData cd = (ConfigData) contextComboViewer.getElementAt(0);
                    c.setRelationContext(cd.getValue());

                }
                contextComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
                    @Override
                    public void selectionChanged(final SelectionChangedEvent event) {
                        ISelection iSelection = event.getSelection();
                        Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                        ConfigData cd = (ConfigData) obj;
                        c.setRelationContext(cd.getValue());
                        setComboViewerInput(classComboViewer, "relation", c.getRelationContext(), null, null);
                    }
                });

                if (c.getRelationClass() != null) {
                    setComboViewerByString(classComboViewer, c.getRelationClass());
                }

                classComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {
                    @Override
                    public void selectionChanged(final SelectionChangedEvent event) {
                        ISelection iSelection = event.getSelection();
                        Object obj = ((IStructuredSelection) iSelection).getFirstElement();
                        ConfigData cd = (ConfigData) obj;
                        c.setRelationClass(cd.getValue());
                    }
                });

                final Text relObjText = new Text(_searchPRelComp, SWT.BORDER);
                relObjText.setLayoutData(new GridData());
                relObjText.setLayoutData(new GridData());
                ((GridData) relObjText.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) relObjText.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) relObjText.getLayoutData()).horizontalSpan = 3;
                if (c.getRelatedId() != null) {
                    relObjText.setText(c.getRelatedId().toString());
                }
                relObjText.setEnabled(false);
                relObjText.addFocusListener(new FocusListener() {

                    @Override
                    public void focusGained(final FocusEvent e) {
                    }

                    @Override
                    public void focusLost(final FocusEvent e) {

                    }

                });

                final Button setObj = new Button(_searchPRelComp, SWT.PUSH);
                setObj.setText(NLMessages.getString("Dialog_set_key"));
                setObj.setEnabled(false);
                setObj.setFont(JFaceResources.getDialogFont());
                setObj.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        //                  System.out.println("setObj"); //$NON-NLS-1$

                    }
                });

                final Text searchText = new Text(_searchPRelComp, SWT.BORDER);
                searchText.setLayoutData(new GridData());
                searchText.setLayoutData(new GridData());
                ((GridData) searchText.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) searchText.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) searchText.getLayoutData()).horizontalSpan = 3;
                if (c.getSearchText() != null) {
                    searchText.setText(c.getSearchText());
                }
                searchText.addFocusListener(new FocusAdapter() {
                    @Override
                    public void focusLost(final FocusEvent e) {
                        c.setSearchText(searchText.getText());
                    }
                });
                searchText.addKeyListener(new KeyListener() {
                    @Override
                    public void keyPressed(final KeyEvent e) {
                        if (e.keyCode == SWT.CR) {
                            c.setSearchText(searchText.getText());
                            searchPersons();
                        }
                    }

                    @Override
                    public void keyReleased(final KeyEvent e) {
                    }
                });
                final Button fuzzyB = new Button(_searchPRelComp, SWT.CHECK);
                fuzzyB.setLayoutData(new GridData());
                fuzzyB.setSelection(c.isFuzzy());
                fuzzyB.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        c.setFuzzy(!c.isFuzzy());
                    }
                });

                final Button includeB = new Button(_searchPRelComp, SWT.CHECK);
                includeB.setLayoutData(new GridData());
                includeB.setSelection(c.isIncludeConcurrences());
                includeB.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        c.setIncludeConcurrences(!c.isIncludeConcurrences());
                    }
                });

            } // if relation
            if (c.getType().equals("date")) //$NON-NLS-1$
            {
                if (date1) {
                    date1 = false;
                    _searchPDateComp = new Composite(_personSearchGroup, SWT.NONE);
                    _searchPDateComp.setLayout(new GridLayout());
                    ((GridLayout) _searchPDateComp.getLayout()).makeColumnsEqualWidth = true;
                    ((GridLayout) _searchPDateComp.getLayout()).numColumns = 15;
                    _searchPDateComp.setLayoutData(new GridData());
                    ((GridData) _searchPDateComp.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) _searchPDateComp.getLayoutData()).grabExcessHorizontalSpace = true;
                    // ((GridData) searchPDateComp.getLayoutData()).heightHint =
                    // 200;
                    ((GridData) _searchPDateComp.getLayoutData()).grabExcessVerticalSpace = false;
                    ((GridData) _searchPDateComp.getLayoutData()).horizontalSpan = 1;

                    Label l2 = new Label(_searchPDateComp, SWT.NONE);
                    l2.setText(NLMessages.getString("Dialog_date"));
                    l2.setLayoutData(new GridData());
                    ((GridData) l2.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) l2.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) l2.getLayoutData()).horizontalSpan = 2;

                    Label typeDate = new Label(_searchPDateComp, SWT.NONE);
                    typeDate.setText(NLMessages.getString("Dialog_type"));
                    typeDate.setLayoutData(new GridData());
                    ((GridData) typeDate.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) typeDate.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) typeDate.getLayoutData()).horizontalSpan = 2;

                    Label bl = new Label(_searchPDateComp, SWT.NONE);
                    bl.setText(""); //$NON-NLS-1$
                    Label notBefore = new Label(_searchPDateComp, SWT.NONE);
                    notBefore.setText(NLMessages.getString("Dialog_day"));
                    notBefore.setLayoutData(new GridData());
                    ((GridData) notBefore.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) notBefore.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) notBefore.getLayoutData()).horizontalSpan = 1;

                    Label month = new Label(_searchPDateComp, SWT.NONE);
                    month.setText(NLMessages.getString("Dialog_month"));
                    month.setLayoutData(new GridData());
                    ((GridData) month.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) month.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) month.getLayoutData()).horizontalSpan = 1;

                    Label year = new Label(_searchPDateComp, SWT.NONE);
                    year.setText(NLMessages.getString("Dialog_year"));
                    year.setLayoutData(new GridData());
                    ((GridData) year.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) year.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) year.getLayoutData()).horizontalSpan = 2;

                    Label bl2 = new Label(_searchPDateComp, SWT.NONE);
                    bl2.setText(""); //$NON-NLS-1$

                    Label notAfter = new Label(_searchPDateComp, SWT.NONE);
                    notAfter.setText(NLMessages.getString("Dialog_day"));
                    notAfter.setLayoutData(new GridData());
                    ((GridData) notAfter.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) notAfter.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) notAfter.getLayoutData()).horizontalSpan = 1;

                    Label month2 = new Label(_searchPDateComp, SWT.NONE);
                    month2.setText(NLMessages.getString("Dialog_month"));
                    month2.setLayoutData(new GridData());
                    ((GridData) month2.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) month2.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) month2.getLayoutData()).horizontalSpan = 1;

                    Label year2 = new Label(_searchPDateComp, SWT.NONE);
                    year2.setText(NLMessages.getString("Dialog_year"));
                    year2.setLayoutData(new GridData());
                    ((GridData) year2.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) year2.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) year2.getLayoutData()).horizontalSpan = 2;

                    Label include = new Label(_searchPDateComp, SWT.NONE);
                    include.setText(""); //$NON-NLS-1$
                    include.setToolTipText(NLMessages.getString("Dialog_includeConcurrences"));
                    include.setLayoutData(new GridData());
                    ((GridData) include.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) include.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) include.getLayoutData()).horizontalSpan = 1;

                }

                if (i == 0) {
                    Label l = new Label(_searchPDateComp, SWT.NONE);
                    l.setLayoutData(new GridData());
                    ((GridData) l.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) l.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) l.getLayoutData()).horizontalSpan = 2;
                } else {
                    final Combo opCombo = new Combo(_searchPDateComp, SWT.READ_ONLY);
                    opCombo.setLayoutData(new GridData());
                    opCombo.add(Operator.AND.toString());
                    opCombo.add(Operator.OR.toString());
                    opCombo.add(Operator.NOT.toString());
                    opCombo.setLayoutData(new GridData());
                    ((GridData) opCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) opCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) opCombo.getLayoutData()).horizontalSpan = 2;
                    if (c.getOperator() != null) {
                        opCombo.setText(c.getOperator());
                    } else {
                        opCombo.select(0);
                        c.setOperator(opCombo.getItem(0));

                    }
                    opCombo.addSelectionListener(new SelectionAdapter() {
                        @Override
                        public void widgetSelected(final SelectionEvent se) {
                            c.setOperator(opCombo.getItem(opCombo.getSelectionIndex()));
                        }
                    });
                }

                final Combo typeDCombo = new Combo(_searchPDateComp, SWT.READ_ONLY);
                typeDCombo.setLayoutData(new GridData());
                ComboViewer timeTypeComboViewer = new ComboViewer(typeDCombo);
                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;
                        c.setDateType(s);
                    }

                });
                if (c.getDateType() != null) {
                    StructuredSelection selection = new StructuredSelection(c.getDateType());
                    timeTypeComboViewer.setSelection(selection);
                } else {
                    StructuredSelection selection = new StructuredSelection(AEConstants.TIME_TYPES[0]);
                    timeTypeComboViewer.setSelection(selection);
                    c.setDateType(AEConstants.TIME_TYPES[0]);
                }
                typeDCombo.pack();
                typeDCombo.setLayoutData(new GridData());
                ((GridData) typeDCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) typeDCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) typeDCombo.getLayoutData()).horizontalSpan = 2;

                Label from = new Label(_searchPDateComp, SWT.NONE);
                from.setText(NLMessages.getString("Dialog_from"));
                from.setLayoutData(new GridData());
                ((GridData) from.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) from.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) from.getLayoutData()).horizontalSpan = 1;

                final Combo day1Combo = new Combo(_searchPDateComp, SWT.READ_ONLY);
                day1Combo.setLayoutData(new GridData());
                day1Combo.setItems(AEConstants.DAYS);
                day1Combo.setLayoutData(new GridData());
                ((GridData) day1Combo.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) day1Combo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) day1Combo.getLayoutData()).horizontalSpan = 1;

                if (c.getDateFrom() == null) {
                    PdrDate dateFrom = new PdrDate("0000-00-00"); //$NON-NLS-1$
                    // dateFrom.setDay(0);
                    // dateFrom.setMonth(0);
                    // dateFrom.setYear(0);
                    c.setDateFrom(dateFrom);
                    day1Combo.select(c.getDateFrom().getDay());
                }
                //            System.out.println("test: dateFrom " + c.getDateFrom().toString()); //$NON-NLS-1$
                // else
                // {
                //
                // day1Combo.select(0);
                // c.getDateFrom().setDay(0);
                //
                // }

                day1Combo.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent se) {
                        c.getDateFrom().setDay(day1Combo.getSelectionIndex());
                    }
                });

                final Combo month1Combo = new Combo(_searchPDateComp, SWT.READ_ONLY);
                month1Combo.setLayoutData(new GridData());
                month1Combo.setItems(AEConstants.MONTHS);
                month1Combo.setLayoutData(new GridData());
                ((GridData) month1Combo.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) month1Combo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) month1Combo.getLayoutData()).horizontalSpan = 1;
                if (c.getDateFrom() != null) {
                    month1Combo.select(c.getDateFrom().getMonth());
                } else {

                    month1Combo.select(0);
                    c.getDateFrom().setMonth(0);

                }

                month1Combo.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent se) {
                        c.getDateFrom().setMonth(month1Combo.getSelectionIndex());
                    }
                });

                final YearSpinner year1Spinner = new YearSpinner(_searchPDateComp, SWT.NULL);
                // year1Spinner.setLayoutData(new GridData());
                // year1Spinner.setLayoutData(new GridData());
                // ((GridData) year1Spinner.getLayoutData()).horizontalAlignment
                // = SWT.FILL;
                // ((GridData)
                // year1Spinner.getLayoutData()).grabExcessHorizontalSpace =
                // true;
                // ((GridData) year1Spinner.getLayoutData()).horizontalSpan = 2;
                // year1Spinner.setMinimum(0);
                // year1Spinner.setMaximum(9999);
                if (c.getDateFrom() != null) {
                    year1Spinner.setSelection(c.getDateFrom().getYear());
                } else {

                    year1Spinner.setSelection(_preselection);
                    c.getDateFrom().setYear(_preselection);

                }
                year1Spinner.addSelectionListener(new SelectionListener() {

                    @Override
                    public void widgetDefaultSelected(final SelectionEvent e) {
                        c.getDateFrom().setYear(year1Spinner.getSelection());

                    }

                    @Override
                    public void widgetSelected(final SelectionEvent e) {
                        c.getDateFrom().setYear(year1Spinner.getSelection());
                    }

                });

                Label to = new Label(_searchPDateComp, SWT.NONE);
                to.setText(NLMessages.getString("Dialog_to"));
                to.setLayoutData(new GridData());
                ((GridData) to.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) to.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) to.getLayoutData()).horizontalSpan = 1;

                final Combo day2Combo = new Combo(_searchPDateComp, SWT.READ_ONLY);
                day2Combo.setLayoutData(new GridData());
                day2Combo.setItems(AEConstants.DAYS);
                day2Combo.setLayoutData(new GridData());
                ((GridData) day2Combo.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) day2Combo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) day2Combo.getLayoutData()).horizontalSpan = 1;
                if (c.getDateTo() == null) {
                    PdrDate dateTo = new PdrDate("0000-00-00"); //$NON-NLS-1$
                    c.setDateTo(dateTo);
                    day2Combo.select(c.getDateTo().getDay());
                }

                day2Combo.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent se) {
                        c.getDateTo().setDay(day2Combo.getSelectionIndex());
                    }
                });

                final Combo month2Combo = new Combo(_searchPDateComp, SWT.READ_ONLY);
                month2Combo.setLayoutData(new GridData());
                month2Combo.setItems(AEConstants.MONTHS);
                month2Combo.setLayoutData(new GridData());
                ((GridData) month2Combo.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) month2Combo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) month2Combo.getLayoutData()).horizontalSpan = 1;
                if (c.getDateTo() != null) {
                    month2Combo.select(c.getDateTo().getMonth());
                } else {

                    month2Combo.select(0);
                    c.getDateTo().setMonth(0);

                }

                month2Combo.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent se) {
                        c.getDateTo().setMonth(month2Combo.getSelectionIndex());
                    }
                });

                final YearSpinner year2Spinner = new YearSpinner(_searchPDateComp, SWT.NONE);
                year2Spinner.setLayoutData(new GridData());
                year2Spinner.setLayoutData(new GridData());
                ((GridData) year2Spinner.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) year2Spinner.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) year2Spinner.getLayoutData()).horizontalSpan = 1;
                year2Spinner.setMinimum(0);
                year2Spinner.setMaximum(9999);
                if (c.getDateTo() != null) {
                    year2Spinner.setSelection(c.getDateTo().getYear());
                } else {

                    year2Spinner.setSelection(_preselection);
                    c.getDateTo().setYear(_preselection);

                }
                year2Spinner.addSelectionListener(new SelectionListener() {

                    @Override
                    public void widgetDefaultSelected(final SelectionEvent e) {
                        c.getDateTo().setYear(year2Spinner.getSelection());

                    }

                    @Override
                    public void widgetSelected(final SelectionEvent e) {
                        c.getDateTo().setYear(year2Spinner.getSelection());

                    }

                });

                final Button includeB = new Button(_searchPDateComp, SWT.CHECK);
                includeB.setLayoutData(new GridData());
                includeB.setSelection(c.isIncludeConcurrences());
                includeB.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        c.setIncludeConcurrences(!c.isIncludeConcurrences());
                    }
                });

            } // if date
        }
    }

    /**
     * Builds the reference search.
     */
    private void buildReferenceSearch() {
        _referenceQuery = new PdrQuery();
        _referenceQuery.setType(2);
        _criteria = new Criteria();
        _criteria.setType("reference"); //$NON-NLS-1$
        _referenceQuery.getCriterias().add(_criteria);

        final Criteria c = _referenceQuery.getCriterias().firstElement();
        Composite searchRefComp = new Composite(_refSearchGroup, SWT.NONE);
        searchRefComp.setLayout(new GridLayout());
        ((GridLayout) searchRefComp.getLayout()).makeColumnsEqualWidth = true;
        ((GridLayout) searchRefComp.getLayout()).numColumns = 10;
        searchRefComp.setLayoutData(new GridData());
        ((GridData) searchRefComp.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) searchRefComp.getLayoutData()).grabExcessHorizontalSpace = true;
        // ((GridData) searchRefComp.getLayoutData()).heightHint = 200;
        ((GridData) searchRefComp.getLayoutData()).grabExcessVerticalSpace = false;
        ((GridData) searchRefComp.getLayoutData()).horizontalSpan = 1;

        Label op = new Label(searchRefComp, SWT.NONE);
        op.setText(NLMessages.getString("Dialog_genre"));
        op.setLayoutData(new GridData());
        ((GridData) op.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) op.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) op.getLayoutData()).horizontalSpan = 2;

        Label tagName = new Label(searchRefComp, SWT.NONE);
        tagName.setText(NLMessages.getString("Dialog_role"));
        tagName.setLayoutData(new GridData());
        ((GridData) tagName.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) tagName.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) tagName.getLayoutData()).horizontalSpan = 2;

        Label tagType = new Label(searchRefComp, SWT.NONE);
        tagType.setText(NLMessages.getString("Dialog_name"));
        tagType.setLayoutData(new GridData());
        ((GridData) tagType.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) tagType.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) tagType.getLayoutData()).horizontalSpan = 5;

        Label fuzzy = new Label(searchRefComp, SWT.NONE);
        fuzzy.setText(NLMessages.getString("Dialog_fuzzy"));
        fuzzy.setLayoutData(new GridData());
        ((GridData) fuzzy.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) fuzzy.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) fuzzy.getLayoutData()).horizontalSpan = 1;

        final Combo genreCombo = new Combo(searchRefComp, SWT.READ_ONLY);
        genreCombo.setLayoutData(new GridData());
        ComboViewer genreComboViewer = new ComboViewer(genreCombo);
        genreComboViewer.setContentProvider(new RefTemplateContentProvider(false));
        genreComboViewer.setLabelProvider(new LabelProvider() {

            @Override
            public String getText(final Object element) {
                ReferenceModsTemplate template = (ReferenceModsTemplate) element;
                return template.getLabel();
            }

        });

        genreComboViewer.setInput(_facade.getAllGenres());
        genreComboViewer.addSelectionChangedListener(new ISelectionChangedListener() {

            @Override
            public void selectionChanged(final SelectionChangedEvent event) {
                ISelection selection = event.getSelection();
                Object obj = ((IStructuredSelection) selection).getFirstElement();
                ReferenceModsTemplate template = (ReferenceModsTemplate) obj;
                if (template != null) {
                    c.setCrit0(template.getValue());
                }
            }

        });
        genreCombo.add("ALL", 0); //$NON-NLS-1$

        genreCombo.setLayoutData(new GridData());
        ((GridData) genreCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) genreCombo.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) genreCombo.getLayoutData()).horizontalSpan = 2;
        if (c.getCrit0() != null) {
            StructuredSelection selection = new StructuredSelection(c.getCrit0());
            genreComboViewer.setSelection(selection);
        } else {
            genreCombo.select(0);
            c.setCrit0(genreCombo.getItem(0));

        }

        final Combo roleCombo = new Combo(searchRefComp, SWT.READ_ONLY);
        roleCombo.setLayoutData(new GridData());
        roleCombo.setLayoutData(new GridData());
        ((GridData) roleCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) roleCombo.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) roleCombo.getLayoutData()).horizontalSpan = 2;
        ComboViewer comboViewer = new ComboViewer(roleCombo);
        comboViewer.setContentProvider(ArrayContentProvider.getInstance());
        comboViewer.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(final Object element) {
                String str = (String) element;
                if (str.equals("ALL")) {
                    return str;
                }
                return NLMessages.getString("Editor_role_" + str);
            }
        });

        String[] input = new String[AEConstants.REF_ROLETERM_CODE.length + 1];
        System.arraycopy(new String[] { "ALL" }, 0, input, 0, 1);
        System.arraycopy(AEConstants.REF_ROLETERM_CODE, 0, input, 1, AEConstants.REF_ROLETERM_CODE.length);
        comboViewer.setInput(input);
        comboViewer.addSelectionChangedListener(new ISelectionChangedListener() {

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

        });

        //      roleCombo.add("ALL", 0); //$NON-NLS-1$

        // if (c.getCrit1() != null)
        // {
        // roleCombo.setText(c.getCrit1());
        // }
        // else
        // {
        // roleCombo.select(0);
        // c.setCrit1(roleCombo.getItem(0));
        //
        //
        // }
        // roleCombo.addSelectionListener(new SelectionAdapter(){
        // public void widgetSelected(SelectionEvent se)
        // {
        // // if (!(semCombo.getSelectionIndex() > semCombo.getItems().length))
        // // {
        // c.setCrit1(roleCombo.getItem(roleCombo.getSelectionIndex()));
        // // }
        // }
        // });

        final Text nameText = new Text(searchRefComp, SWT.BORDER);
        nameText.setLayoutData(new GridData());
        nameText.setLayoutData(new GridData());
        ((GridData) nameText.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) nameText.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) nameText.getLayoutData()).horizontalSpan = 5;
        if (c.getCrit3() != null) {
            nameText.setText(c.getCrit3());
        }
        nameText.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(final FocusEvent e) {
                String[] vals = new String[] {};
                try {
                    vals = _mainSearcher.getFacets("reference", "namePart", null, null, null);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
                new AutoCompleteField(nameText, new TextContentAdapter(), vals);

            }

            @Override
            public void focusLost(final FocusEvent e) {
                c.setCrit3(nameText.getText());
            }
        });
        nameText.addKeyListener(new KeyListener() {
            @Override
            public void keyPressed(final KeyEvent e) {
                if (e.keyCode == SWT.CR) {
                    c.setCrit3(nameText.getText());
                    searchReferences();
                }
            }

            @Override
            public void keyReleased(final KeyEvent e) {
            }
        });
        final Button fuzzyB = new Button(searchRefComp, SWT.CHECK);
        fuzzyB.setLayoutData(new GridData());
        fuzzyB.setSelection(c.isFuzzy());
        fuzzyB.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                c.setFuzzy(!c.isFuzzy());
            }
        });

        Label title = new Label(searchRefComp, SWT.NONE);
        title.setText(NLMessages.getString("Dialog_refTitle"));
        title.setLayoutData(new GridData());
        ((GridData) title.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) title.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) title.getLayoutData()).horizontalSpan = 2;

        final Text searchText2 = new Text(searchRefComp, SWT.BORDER);
        searchText2.setLayoutData(new GridData());
        searchText2.setLayoutData(new GridData());
        ((GridData) searchText2.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) searchText2.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) searchText2.getLayoutData()).horizontalSpan = 8;
        if (c.getCrit4() != null) {
            searchText2.setText(c.getCrit4());
        }
        searchText2.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(final FocusEvent e) {
                String[] vals = new String[] {};
                try {
                    vals = _mainSearcher.getFacets("reference", "title", null, null, null);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
                new AutoCompleteField(searchText2, new TextContentAdapter(), vals);

            }

            @Override
            public void focusLost(final FocusEvent e) {
                c.setCrit4(searchText2.getText());
            }
        });
        searchText2.addKeyListener(new KeyListener() {
            @Override
            public void keyPressed(final KeyEvent e) {
                if (e.keyCode == SWT.CR) {
                    c.setCrit4(searchText2.getText());
                    searchReferences();
                }
            }

            @Override
            public void keyReleased(final KeyEvent e) {
            }
        });
        Label searchText = new Label(searchRefComp, SWT.NONE);
        searchText.setText(NLMessages.getString("Dialog_freeSearch"));
        searchText.setLayoutData(new GridData());
        ((GridData) searchText.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) searchText.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) searchText.getLayoutData()).horizontalSpan = 2;

        final Text searchText3 = new Text(searchRefComp, SWT.BORDER);
        searchText3.setLayoutData(new GridData());
        searchText3.setLayoutData(new GridData());
        ((GridData) searchText3.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) searchText3.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) searchText3.getLayoutData()).horizontalSpan = 8;
        if (c.getSearchText() != null) {
            searchText3.setText(c.getSearchText());
        }
        searchText3.addFocusListener(new FocusAdapter() {
            @Override
            public void focusLost(final FocusEvent e) {
                c.setSearchText(searchText3.getText());
            }
        });
        searchText3.addKeyListener(new KeyListener() {
            @Override
            public void keyPressed(final KeyEvent e) {
                if (e.keyCode == SWT.CR) {
                    c.setSearchText(searchText3.getText());
                    searchReferences();
                }
            }

            @Override
            public void keyReleased(final KeyEvent e) {
            }
        });

    }

    @Override
    public final void create() {
        super.create();
        // Set the title
        setTitle(NLMessages.getString("ObjectDialog_title")); //$NON-NLS-1$
        // Set the message
        setMessage(NLMessages.getString("Dialog_firstMessage"), IMessageProvider.INFORMATION); //$NON-NLS-1$

    }

    /**
     * meth creates the TabItem for selecting an aspect.
     * @param mainTabFolder main tabFolder
     */
    private void createAspectTabItem(final TabFolder mainTabFolder) {
        _aspectTabItem = new TabItem(mainTabFolder, SWT.NONE);
        _aspectTabItem.setText(NLMessages.getString("Dialog_aspects")); //$NON-NLS-1$
        _aspectTabItem.setImage(_imageReg.get(IconsInternal.ASPECTS));
        _aspectComposite = new Composite(mainTabFolder, SWT.NONE);
        _aspectComposite.setLayout(new GridLayout());
        _aspectComposite.setLayoutData(new GridData());
        ((GridData) _aspectComposite.getLayoutData()).verticalAlignment = SWT.FILL;

        _aspectTabItem.setControl(_aspectComposite);

        _aspectMainSForm = new SashForm(_aspectComposite, SWT.HORIZONTAL);
        _aspectMainSForm.setLayoutData(new GridData(GridData.FILL_BOTH));
        ((GridData) _aspectMainSForm.getLayoutData()).minimumHeight = 500;
        ((GridData) _aspectMainSForm.getLayoutData()).minimumWidth = 700;

        _aspectSearchSForm = new SashForm(_aspectMainSForm, SWT.VERTICAL);
        _aspectSearchSForm.setLayoutData(new GridData(GridData.FILL_BOTH));
        _aspectSearchGroup = new Group(_aspectSearchSForm, SWT.SHADOW_IN);
        _aspectSearchGroup.setText(NLMessages.getString("Dialog_aspectSearch")); //$NON-NLS-1$
        _aspectSearchGroup.setLayoutData(new GridData());
        ((GridData) _aspectSearchGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _aspectSearchGroup.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _aspectSearchGroup.getLayoutData()).minimumHeight = 60;
        ((GridData) _aspectSearchGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        _aspectSearchGroup.setLayout(_gridLayout2);
        buildAspectSearch();
        _searchA = new Button(_aspectSearchGroup, SWT.PUSH);
        _searchA.setText(NLMessages.getString("Dialog_search")); //$NON-NLS-1$
        _searchA.setImage(_imageReg.get(IconsInternal.SEARCH));
        _searchA.setFont(JFaceResources.getDialogFont());
        _searchA.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                searchAspects();

            }

        });
        // aspectSearchGroup
        _aspectSearchGroup.pack();
        Group aspectResultGroup = new Group(_aspectSearchSForm, SWT.SHADOW_IN);
        aspectResultGroup.setText(NLMessages.getString("Dialog_result")); //$NON-NLS-1$
        aspectResultGroup.setLayoutData(new GridData());
        ((GridData) aspectResultGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) aspectResultGroup.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) aspectResultGroup.getLayoutData()).minimumHeight = 100;
        ((GridData) aspectResultGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) aspectResultGroup.getLayoutData()).grabExcessVerticalSpace = true;
        aspectResultGroup.setLayout(_gridLayout2);
        _aspectTableViewer = new TableViewer(aspectResultGroup, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
        String[] titles = { NLMessages.getString("Dialog_displayName"), NLMessages.getString("Dialog_semantic"),
                NLMessages.getString("Dialog_id") };
        int[] bounds = { 300, 180, 180 };
        for (int i = 0; i < titles.length; i++) {
            TableViewerColumn column = new TableViewerColumn(_aspectTableViewer, SWT.NONE);
            column.getColumn().setText(titles[i]);
            column.getColumn().setWidth(bounds[i]);
            column.getColumn().setResizable(true);
            column.getColumn().setMoveable(true);
            column.getColumn().addSelectionListener(getSelectionAdapter(_aspectTableViewer, column.getColumn(), i));

        }
        Table table = _aspectTableViewer.getTable();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        table.setLayoutData(new GridData());
        ((GridData) table.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) table.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) table.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) table.getLayoutData()).grabExcessVerticalSpace = true;
        _aspectTableViewer.addDoubleClickListener(new IDoubleClickListener() {
            @Override
            public void doubleClick(final DoubleClickEvent event) {
                ISelection selection = _aspectTableViewer.getSelection();
                Object obj = ((IStructuredSelection) selection).getFirstElement();
                _selectedA = (Aspect) obj;
                _selectedAspectText.setText(_selectedA.getNotification());
            }
        });
        Label selectLabel = new Label(aspectResultGroup, SWT.None);
        selectLabel.setText(NLMessages.getString("Dialog_selection"));
        _selectedAspectText = new Text(aspectResultGroup, SWT.SHADOW_IN | SWT.WRAP | SWT.READ_ONLY);
        _selectedAspectText.setLayoutData(new GridData());
        ((GridData) _selectedAspectText.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _selectedAspectText.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _selectedAspectText.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _selectedAspectText.getLayoutData()).minimumHeight = 30;
        _selectedAspectText.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
        _aspectSearchSForm.setWeights(new int[] { 2, 2 });
        Group lastAspectsGroup = new Group(_aspectMainSForm, SWT.SHADOW_IN);
        lastAspectsGroup.setText(NLMessages.getString("Dialog_lastAspects")); //$NON-NLS-1$
        lastAspectsGroup.setLayoutData(new GridData());
        ((GridData) lastAspectsGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) lastAspectsGroup.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) lastAspectsGroup.getLayoutData()).minimumHeight = 120;
        ((GridData) lastAspectsGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        lastAspectsGroup.setLayout(_gridLayout2);
        _lastAspectList = new List(lastAspectsGroup, SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
        _lastAspectList.setLayoutData(new GridData());
        ((GridData) _lastAspectList.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _lastAspectList.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _lastAspectList.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _lastAspectList.getLayoutData()).grabExcessVerticalSpace = true;
        final Vector<Aspect> lastAspects = _facade.getLastAspects();
        if (_facade.getLastAspects() != null && !_facade.getLastAspects().isEmpty()) {
            for (int i = lastAspects.size() - 1; i > -1; i--) {
                _lastAspectList.add(lastAspects.get(i).getDisplayNameWithID());
            }
        }
        _lastAspectList.addSelectionListener(new SelectionListener() {
            @Override
            public void widgetDefaultSelected(final SelectionEvent event) {
                // int[] selectedItems =
                // lastAspectList.getSelectionIndices();
                //                    String outString = ""; //$NON-NLS-1$
                // for (int loopIndex = 0; loopIndex <
                // selectedItems.length; loopIndex++)
                // {
                //                     outString += selectedItems[loopIndex] + " "; //$NON-NLS-1$
                // }
                //                    System.out.println("Selected Items: " + outString); //$NON-NLS-1$
            }

            @Override
            public void widgetSelected(final SelectionEvent event) {
                int si = lastAspects.size() - _lastAspectList.getSelectionIndex() - 1;
                String selected = NLMessages.getString("Dialog_aspect") //$NON-NLS-1$
                        + lastAspects.get(si).getSemanticDim().getSemanticStms().get(0).getLabel()
                        + NLMessages.getString("Dialog_ID") //$NON-NLS-1$
                        + lastAspects.get(si).getPdrId().toString();
                // System.out.println(selected);
                //                  System.out.println("index " + si); //$NON-NLS-1$
                setMessage(selected);
                _selectedA = lastAspects.get(si);
                _selectedAspectText.setText(_selectedA.getNotification());

                // delete possible person selection
                _lastPersonList.deselectAll();
                _lastReferenceList.deselectAll();

            }
        });
        _aspectMainSForm.setWeights(new int[] { 3, 1 });
    }

    @Override
    protected final void createButtonsForButtonBar(final Composite parent) {
        GridData gridData = new GridData();
        gridData.verticalAlignment = SWT.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("Dialog_save"), true); //$NON-NLS-1$
        // Add a SelectionListener

        // Create Cancel button
        Button cancelButton = createButton(parent, CANCEL, NLMessages.getString("Dialog_cancel"), false); //$NON-NLS-1$
        // Add a SelectionListener
        cancelButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                _facade.setRequestedId(null);
                setReturnCode(CANCEL);
                close();
            }
        });
    }

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

        parent.setSize(300, 200);

        _gridLayout = new GridLayout();
        _gridLayout.numColumns = 3;
        _gridLayout.makeColumnsEqualWidth = false;

        _gridData2 = new GridData();
        _gridData2.verticalAlignment = GridData.FILL;
        _gridData2.horizontalSpan = 1;
        _gridData2.grabExcessHorizontalSpace = true;
        _gridData2.grabExcessVerticalSpace = true;
        _gridData2.horizontalAlignment = SWT.FILL;

        _mainTabFolder = new TabFolder(parent, SWT.TOP | SWT.FILL);
        _mainTabFolder.setLayoutData(_gridData2);

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

        createAspectTabItem(_mainTabFolder);
        createPersonTabItem(_mainTabFolder);
        createSourceTabItem(_mainTabFolder);
        _mainTabFolder.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                _selectionType = _mainTabFolder.getSelectionIndex();
                //               System.out.println("maintabfolder selection " + mainTabFolder.getSelectionIndex()); //$NON-NLS-1$

                switch (_selectionType) {
                case 0:
                    _searchA.setFocus();
                    break;
                case 1:
                    _searchP.setFocus();
                    break;
                case 2:
                    _searchR.setFocus();
                    break;
                default:
                    break;
                }
            }
        });
        // parent.setLayout(layout);

        _mainTabFolder.setSelection(_type);
        parent.pack();
        return parent;
    }

    /**
     * meth creates the OK button.
     * @param parent parent composite
     * @param id id
     * @param label label of button
     * @param defaultButton is default
     * @return okButton
     */
    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++;
        _okButton = new Button(parent, SWT.PUSH);
        _okButton.setText(label);
        _okButton.setFont(JFaceResources.getDialogFont());
        _okButton.setData(new Integer(id));
        _okButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                //            System.out.println("OK pressed"); //$NON-NLS-1$
                if (isValidInput()) {
                    okPressed();
                }
            }
        });

        setButtonLayoutData(_okButton);
        return _okButton;
    }

    /**
     * meth creates the TabItem for selecting a person.
     * @param mainTabFolder main tabFolder
     */
    private void createPersonTabItem(final TabFolder mainTabFolder) {
        _markupProvider = Platform.getPreferencesService().getString(CommonActivator.PLUGIN_ID,
                "PRIMARY_TAGGING_PROVIDER", AEConstants.CLASSIFICATION_AUTHORITY, null).toUpperCase(); //$NON-NLS-1$
        _relationProvider = Platform.getPreferencesService().getString(CommonActivator.PLUGIN_ID,
                "PRIMARY_RELATION_PROVIDER", AEConstants.RELATION_CLASSIFICATION_PROVIDER, null).toUpperCase();
        _personTabItem = new TabItem(mainTabFolder, SWT.NONE);
        _personTabItem.setText(NLMessages.getString("Dialog_persons")); //$NON-NLS-1$
        _personTabItem.setImage(_imageReg.get(IconsInternal.PERSONS));
        _personComposite = new Composite(mainTabFolder, SWT.NONE);
        _personComposite.setLayout(new GridLayout());
        _personComposite.setLayoutData(new GridData());
        ((GridData) _personComposite.getLayoutData()).verticalAlignment = SWT.FILL;

        _personTabItem.setControl(_personComposite);

        _personMainSForm = new SashForm(_personComposite, SWT.HORIZONTAL);
        _personMainSForm.setLayoutData(new GridData(GridData.FILL_BOTH));
        ((GridData) _personMainSForm.getLayoutData()).minimumHeight = 500;
        ((GridData) _personMainSForm.getLayoutData()).minimumWidth = 700;

        _personSearchSForm = new SashForm(_personMainSForm, SWT.VERTICAL);
        _personSearchSForm.setLayoutData(new GridData(GridData.FILL_BOTH));
        _personSearchGroup = new Group(_personSearchSForm, SWT.SHADOW_IN);
        _personSearchGroup.setText(NLMessages.getString("Dialog_personSearch")); //$NON-NLS-1$
        _personSearchGroup.setLayoutData(new GridData());
        ((GridData) _personSearchGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _personSearchGroup.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _personSearchGroup.getLayoutData()).minimumHeight = 90;
        ((GridData) _personSearchGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        _personSearchGroup.setLayout(new GridLayout());
        ((GridLayout) _personSearchGroup.getLayout()).makeColumnsEqualWidth = false;
        ((GridLayout) _personSearchGroup.getLayout()).numColumns = 1;
        buildPersonSearch();
        _searchP = new Button(_personSearchGroup, SWT.PUSH);
        _searchP.setText(NLMessages.getString("Dialog_search")); //$NON-NLS-1$
        _searchP.setImage(_imageReg.get(IconsInternal.SEARCH));
        _searchP.setFont(JFaceResources.getDialogFont());
        _searchP.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                //               System.out.println("suchen"); //$NON-NLS-1$
                searchPersons();

            }

        });
        // personSearchGroup
        _personSearchGroup.pack();
        _personResultGroup = new Group(_personSearchSForm, SWT.SHADOW_IN);
        _personResultGroup.setText(NLMessages.getString("Dialog_result")); //$NON-NLS-1$
        _personResultGroup.setLayoutData(new GridData());
        ((GridData) _personResultGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _personResultGroup.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _personResultGroup.getLayoutData()).minimumHeight = 90;
        ((GridData) _personResultGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _personResultGroup.getLayoutData()).grabExcessVerticalSpace = true;
        _personResultGroup.setLayout(_gridLayout2);
        _personTableViewer = new TableViewer(_personResultGroup, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
        String[] titles = { NLMessages.getString("Dialog_displayName"), NLMessages.getString("Dialog_id") };
        int[] bounds = { 300, 180 };
        for (int i = 0; i < titles.length; i++) {
            TableViewerColumn column = new TableViewerColumn(_personTableViewer, SWT.NONE);
            column.getColumn().setText(titles[i]);
            column.getColumn().setWidth(bounds[i]);
            column.getColumn().setResizable(true);
            column.getColumn().setMoveable(true);
            column.getColumn().addSelectionListener(getSelectionAdapter(_personTableViewer, column.getColumn(), i));

        }
        _personTableViewer.setComparator(new PdrObjectViewComparator());
        Table table = _personTableViewer.getTable();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        table.setLayoutData(new GridData());
        ((GridData) table.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) table.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) table.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) table.getLayoutData()).grabExcessVerticalSpace = true;
        _personTableViewer.addDoubleClickListener(new IDoubleClickListener() {
            @Override
            public void doubleClick(final DoubleClickEvent event) {
                ISelection selection = _personTableViewer.getSelection();
                Object obj = ((IStructuredSelection) selection).getFirstElement();
                _selectedP = (Person) obj;
                _selectedPersonText.setText(_selectedP.getDisplayName());
            }
        });
        Label selectLabel = new Label(_personResultGroup, SWT.None);
        selectLabel.setText(NLMessages.getString("Dialog_selection"));
        _selectedPersonText = new Text(_personResultGroup, SWT.SHADOW_IN | SWT.WRAP | SWT.READ_ONLY);
        _selectedPersonText.setLayoutData(new GridData());
        ((GridData) _selectedPersonText.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _selectedPersonText.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _selectedPersonText.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _selectedPersonText.getLayoutData()).minimumHeight = 30;
        _selectedPersonText.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
        // }// personResultGroup
        _personSearchSForm.setWeights(new int[] { 4, 2 });
        Group lastPersonsGroup = new Group(_personMainSForm, SWT.SHADOW_IN);
        lastPersonsGroup.setText(NLMessages.getString("Dialog_lastPersons")); //$NON-NLS-1$
        lastPersonsGroup.setLayoutData(new GridData());
        ((GridData) lastPersonsGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) lastPersonsGroup.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) lastPersonsGroup.getLayoutData()).minimumHeight = 120;
        ((GridData) lastPersonsGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        lastPersonsGroup.setLayout(_gridLayout2);
        _lastPersonList = new List(lastPersonsGroup, SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
        _lastPersonList.setLayoutData(new GridData());
        ((GridData) _lastPersonList.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _lastPersonList.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _lastPersonList.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _lastPersonList.getLayoutData()).grabExcessVerticalSpace = true;
        _personListViewer = new ListViewer(_lastPersonList);
        _personListViewer.setContentProvider(new PersonVectorContentProvider());
        _personListViewer.setLabelProvider(new ListLabelProvider());
        try {
            if (_facade.getLastPersons() != null && !_facade.getLastPersons().isEmpty()
                    && _facade.getLastPersons().size() > 2) {

                _personListViewer.setInput(_facade.getLastPersons());
                _personListViewer.addSelectionChangedListener(new ISelectionChangedListener() {

                    @Override
                    public void selectionChanged(final SelectionChangedEvent event) {
                        ISelection selection = _personListViewer.getSelection();
                        Object obj = ((IStructuredSelection) selection).getFirstElement();
                        _selectedP = (Person) obj;
                        _selectedPersonText.setText(_selectedP.getDisplayNameWithID());
                        _lastAspectList.deselectAll();
                        _lastReferenceList.deselectAll();

                    }
                });
            }

        } finally {
        }
        // _personListViewer.addSelectionListener(new
        // SelectionListener() {
        // public void widgetSelected(final SelectionEvent event) {
        // int si = lastPersons.size() -
        // lastPersonList.getSelectionIndex() - 1;
        //                   System.out.println("lastpersonlist selection " + lastPersonList.getSelectionIndex()); //$NON-NLS-1$
        // // Person p =
        // lastPersonList.getItem(lastPersonList.getSelectionIndex());
        //                    String selected = NLMessages.getString("Dialog_person"); //$NON-NLS-1$
        // Person p = lastPersons.get(si);
        // //
        // selected = p.getDisplayName();
        //                    selected = selected + "" //$NON-NLS-1$
        // + p.getPdrId().toString();
        //
        // setMessage(selected);
        // selectedP = lastPersons.get(si);
        // _selectedPersonText.setText(selectedP.getDisplayName());
        //
        // // deleted possible aspect selection
        //
        //
        //
        // }
        _personMainSForm.setWeights(new int[] { 3, 1 });
    }

    /**
     * meth creates the TabItem for selecting a source.
     * @param mainTabFolder main tab folder.
     */
    private void createSourceTabItem(final TabFolder mainTabFolder) {
        _sourceTabItem = new TabItem(mainTabFolder, SWT.NONE);
        _sourceTabItem.setText(NLMessages.getString("Dialog_Sources")); //$NON-NLS-1$
        _sourceTabItem.setImage(_imageReg.get(IconsInternal.REFERENCES));
        _sourceComposite = new Composite(mainTabFolder, SWT.NONE);
        _sourceComposite.setLayout(new GridLayout());
        _sourceComposite.setLayoutData(new GridData());
        ((GridData) _sourceComposite.getLayoutData()).verticalAlignment = SWT.FILL;

        _sourceTabItem.setControl(_sourceComposite);

        _sourceMainSForm = new SashForm(_sourceComposite, SWT.HORIZONTAL);
        _sourceMainSForm.setLayoutData(new GridData(GridData.FILL_BOTH));
        ((GridData) _sourceMainSForm.getLayoutData()).minimumHeight = 500;
        ((GridData) _sourceMainSForm.getLayoutData()).minimumWidth = 700;

        _sourceSearchSForm = new SashForm(_sourceMainSForm, SWT.VERTICAL);
        _sourceSearchSForm.setLayoutData(new GridData(GridData.FILL_BOTH));
        _refSearchGroup = new Group(_sourceSearchSForm, SWT.SHADOW_IN);
        _refSearchGroup.setText(NLMessages.getString("Dialog_sourceSearch")); //$NON-NLS-1$
        _refSearchGroup.setLayoutData(new GridData());
        ((GridData) _refSearchGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _refSearchGroup.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _refSearchGroup.getLayoutData()).minimumHeight = 90;
        ((GridData) _refSearchGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        _refSearchGroup.setLayout(_gridLayout2);
        buildReferenceSearch();
        _searchR = new Button(_refSearchGroup, SWT.PUSH);
        _searchR.setText(NLMessages.getString("Dialog_search")); //$NON-NLS-1$
        _searchR.setImage(_imageReg.get(IconsInternal.SEARCH));
        _searchR.setFont(JFaceResources.getDialogFont());
        _searchR.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                searchReferences();
            }

        });
        // aspectSearchGroup
        _refSearchGroup.pack();
        Group sourceResultGroup = new Group(_sourceSearchSForm, SWT.SHADOW_IN);
        sourceResultGroup.setText(NLMessages.getString("Dialog_result")); //$NON-NLS-1$
        sourceResultGroup.setLayoutData(new GridData());
        ((GridData) sourceResultGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) sourceResultGroup.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) sourceResultGroup.getLayoutData()).minimumHeight = 90;
        ((GridData) sourceResultGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        sourceResultGroup.setLayout(_gridLayout2);
        {
            _referenceTableViewer = new TableViewer(sourceResultGroup,
                    SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);

            String[] titles = { NLMessages.getString("Dialog_displayName"), NLMessages.getString("Dialog_title"),
                    NLMessages.getString("Dialog_id") }; //$NON-NLS-1$ //$NON-NLS-2$
            int[] bounds = { 300, 180, 180 };

            for (int i = 0; i < titles.length; i++) {
                TableViewerColumn column = new TableViewerColumn(_referenceTableViewer, SWT.NONE);
                column.getColumn().setText(titles[i]);
                column.getColumn().setWidth(bounds[i]);
                column.getColumn().setResizable(true);
                column.getColumn().setMoveable(true);
                column.getColumn()
                        .addSelectionListener(getSelectionAdapter(_referenceTableViewer, column.getColumn(), i));
            }
            Table table = _referenceTableViewer.getTable();
            table.setHeaderVisible(true);
            table.setLinesVisible(true);
            table.setLayoutData(new GridData());
            ((GridData) table.getLayoutData()).horizontalAlignment = SWT.FILL;
            ((GridData) table.getLayoutData()).grabExcessHorizontalSpace = true;
            ((GridData) table.getLayoutData()).verticalAlignment = SWT.FILL;
            ((GridData) table.getLayoutData()).grabExcessVerticalSpace = true;

            _referenceTableViewer.addDoubleClickListener(new IDoubleClickListener() {
                @Override
                public void doubleClick(final DoubleClickEvent event) {
                    ISelection selection = _referenceTableViewer.getSelection();
                    Object obj = ((IStructuredSelection) selection).getFirstElement();
                    _selectedR = (ReferenceMods) obj;
                    _selectedRefText.setText(_selectedR.getDisplayNameLong());
                }
            });

            // aspectResultGroup
            Label selectLabel = new Label(sourceResultGroup, SWT.None);
            selectLabel.setText(NLMessages.getString("Dialog_selection"));

            _selectedRefText = new Text(sourceResultGroup, SWT.SHADOW_IN | SWT.WRAP | SWT.READ_ONLY);
            _selectedRefText.setLayoutData(new GridData());
            ((GridData) _selectedRefText.getLayoutData()).horizontalAlignment = SWT.FILL;
            ((GridData) _selectedRefText.getLayoutData()).verticalAlignment = SWT.FILL;
            ((GridData) _selectedRefText.getLayoutData()).grabExcessHorizontalSpace = true;
            ((GridData) _selectedRefText.getLayoutData()).minimumHeight = 30;

            _selectedRefText.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));

        } // sourceResultGroup
        _sourceSearchSForm.setWeights(new int[] { 2, 2 });
        Group lastSourcesGroup = new Group(_sourceMainSForm, SWT.SHADOW_IN);
        lastSourcesGroup.setText(NLMessages.getString("Dialog_lastSources")); //$NON-NLS-1$
        lastSourcesGroup.setLayoutData(new GridData());
        ((GridData) lastSourcesGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) lastSourcesGroup.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) lastSourcesGroup.getLayoutData()).minimumHeight = 120;
        ((GridData) lastSourcesGroup.getLayoutData()).grabExcessHorizontalSpace = true;
        lastSourcesGroup.setLayout(_gridLayout2);
        _lastReferenceList = new List(lastSourcesGroup, SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
        _lastReferenceList.setLayoutData(new GridData());
        ((GridData) _lastReferenceList.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _lastReferenceList.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _lastReferenceList.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _lastReferenceList.getLayoutData()).grabExcessVerticalSpace = true;
        final Vector<ReferenceMods> lastRefs = _facade.getLastReferences();
        if (_facade.getLastReferences() != null && !_facade.getLastReferences().isEmpty()) {
            for (int i = lastRefs.size() - 1; i > -1; i--) {
                _lastReferenceList.add(lastRefs.get(i).getDisplayNameWithID());
            }
        }
        _lastReferenceList.addSelectionListener(new SelectionListener() {
            @Override
            public void widgetDefaultSelected(final SelectionEvent e) {

            }

            @Override
            public void widgetSelected(final SelectionEvent event) {
                int si = lastRefs.size() - _lastReferenceList.getSelectionIndex() - 1;
                String selected = NLMessages.getString("Dialog_selectedRef");
                ReferenceMods r = lastRefs.get(si);
                //
                selected = r.getDisplayName();
                selected = selected + " ID: " //$NON-NLS-1$
                        + r.getPdrId().toString();

                setMessage(selected);
                _selectedR = lastRefs.get(si);
                _selectedRefText.setText(_selectedR.getDisplayNameLong());

                // deleted possible aspect selection
                _lastAspectList.deselectAll();
                _lastPersonList.deselectAll();

            }

        });
        _sourceMainSForm.setWeights(new int[] { 3, 1 });
    }

    /**
     * Gets the selection adapter.
     * @param tableViewer the table viewer
     * @param column the column
     * @param index the index
     * @return the selection adapter
     */
    final SelectionAdapter getSelectionAdapter(final TableViewer tableViewer, final TableColumn column,
            final int index) {
        SelectionAdapter selectionAdapter = new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                ((PdrObjectViewComparator) tableViewer.getComparator()).setColumn(index);
                int dir = tableViewer.getTable().getSortDirection();
                if (tableViewer.getTable().getSortColumn() == column) {
                    dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
                } else {

                    dir = SWT.DOWN;
                }
                tableViewer.getTable().setSortDirection(dir);
                tableViewer.getTable().setSortColumn(column);
                tableViewer.refresh();
            }
        };
        return selectionAdapter;
    }

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

    /**
     * meth. checks whether selection is valid. true if facade.getRelObjTyp 0 or
     * 1 and one aspect or one person is selected. if facade.getRelObjTyp is 2,
     * returns true only if a source is selected.
     * @return boolean valid.
     */
    private boolean isValidInput() {
        boolean valid = true;

        return valid;
    }

    @Override
    protected final void okPressed() {
        saveInput();
        super.okPressed();
    }

    /**
     * Save input.
     */
    private void saveInput() {
        //      System.out.println("maintabfolder selection " + mainTabFolder.getSelectionIndex()); //$NON-NLS-1$
        switch (_selectionType) {
        case 0:
            if (_selectedA != null) {
                _facade.setRequestedId(_selectedA.getPdrId());
                _facade.addToLastAspects(_selectedA);
            }
            break;
        case 1:
            if (_selectedP != null) {
                _facade.setRequestedId(_selectedP.getPdrId());
                _facade.addToLastPersons(_selectedP);
            }
            break;
        case 2:
            if (_selectedR != null) {
                _facade.setRequestedId(_selectedR.getPdrId());
                _facade.addToLastReferences(_selectedR);
            }
            //      System.out.println("set requestetd id to " + _facade.getRequestedId()); //$NON-NLS-1$
            break;
        default:
            break;
        }

    }

    /**
     * Search aspects.
     */
    private void searchAspects() {
        _aspectTableViewer.setContentProvider(new AspectTableContentProvider());
        _aspectTableViewer.setLabelProvider(new TableLabelProvider());
        _aspectTableViewer.setComparator(new PdrObjectViewComparator());

        ProgressMonitorDialog dialog = new ProgressMonitorDialog(super.getShell());
        dialog.setCancelable(true);

        try {
            dialog.run(true, true, new IRunnableWithProgress() {
                @Override
                public void run(final IProgressMonitor monitor) {

                    try {
                        final Object result = _mainSearcher.searchAspects(_aspectQuery, monitor);
                        UIJob job = new UIJob(_personTableViewer.getTable().getDisplay(), "Load Result") {
                            @Override
                            public IStatus runInUIThread(final IProgressMonitor monitor) {
                                _aspectTableViewer.setInput(result);
                                return Status.OK_STATUS;
                            }
                        };
                        job.setUser(true);
                        job.schedule();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

            });
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        _aspectSearchGroup.layout();

    }

    /**
     * Search persons.
     */
    private void searchPersons() {
        _personTableViewer.setContentProvider(new PersonVectorContentProvider());
        _personTableViewer.setLabelProvider(new TableLabelProvider());
        _personTableViewer.setComparator(new PdrObjectViewComparator());
        ProgressMonitorDialog dialog = new ProgressMonitorDialog(super.getShell());
        dialog.setCancelable(true);

        try {
            dialog.run(true, true, new IRunnableWithProgress() {
                @Override
                public void run(final IProgressMonitor monitor) {

                    try {

                        final Object result = _mainSearcher.searchPersons(_personQuery, monitor);
                        UIJob job = new UIJob(_personTableViewer.getTable().getDisplay(), "Load Result") {
                            @Override
                            public IStatus runInUIThread(final IProgressMonitor monitor) {
                                _personTableViewer.setInput(result);
                                return Status.OK_STATUS;
                            }
                        };
                        job.setUser(true);
                        job.schedule();

                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

            });
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        _personResultGroup.layout();

    }

    /**
     * Search references.
     */
    private void searchReferences() {
        _referenceTableViewer.setContentProvider(new ReferenceTableContentProvider());
        _referenceTableViewer.setLabelProvider(new TableLabelProvider());
        _referenceTableViewer.setComparator(new PdrObjectViewComparator());

        ProgressMonitorDialog dialog = new ProgressMonitorDialog(super.getShell());
        dialog.setCancelable(true);

        try {
            dialog.run(true, true, new IRunnableWithProgress() {
                @Override
                public void run(final IProgressMonitor monitor) {

                    try {

                        final Object result = _mainSearcher.searchReferences(_referenceQuery, monitor);
                        UIJob job = new UIJob(_personTableViewer.getTable().getDisplay(), "Load Result") {
                            @Override
                            public IStatus runInUIThread(final IProgressMonitor monitor) {
                                _referenceTableViewer.setInput(result);
                                return Status.OK_STATUS;
                            }
                        };
                        job.setUser(true);
                        job.schedule();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

            });
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        _refSearchGroup.layout();

    }

    /**
     * Sets the combo viewer by string.
     * @param cv the cv
     * @param s the s
     */
    private void setComboViewerByString(final ComboViewer cv, final String s) {
        if (cv.getInput() instanceof HashMap<?, ?>) {
            // System.out.println("has input and is hashmap");
            @SuppressWarnings("unchecked")
            HashMap<String, ConfigData> inputs = (HashMap<String, ConfigData>) cv.getInput();
            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);
                        }
                        cv.setSelection(new StructuredSelection(cd));
                        return;
                    }
                }
            }
        }
        ConfigItem ci = new ConfigItem();
        ci.setValue(s);
        ci.setLabel(s);
        cv.add(ci);
        StructuredSelection selection = new StructuredSelection(ci);
        cv.setSelection(selection);

    }

    /**
     * Sets the combo viewer input.
     * @param comboViewer the combo viewer
     * @param facetType the facet type
     * @param crit1 the crit1
     * @param crit2 the crit2
     * @param crit3 the crit3
     */
    protected final void setComboViewerInput(final ComboViewer comboViewer, final String facetType,
            final String crit1, final String crit2, final String crit3) {
        // if (!crit1.startsWith("aodl:")) crit1 = "aodl:" + crit1;
        Vector<String> providers = new Vector<String>();
        for (String s : _facade.getConfigs().keySet()) {
            if (!s.equals(_markupProvider)) {
                providers.add(s);
            }
        }
        HashMap<String, ConfigData> inputs = new HashMap<String, ConfigData>();
        HashMap<String, ConfigData> configs = new HashMap<String, ConfigData>();
        ConfigItem ciAll = new ConfigItem();
        ciAll.setValue("ALL");
        ciAll.setLabel("ALL");
        ciAll.setIgnore(false);
        inputs.put("ALL", ciAll);
        String[] values = null;
        if (facetType.equals("relation")) {
            if (crit1 == null) {
                try {
                    values = _mainSearcher.getFacets(facetType, null, null, null, //$NON-NLS-1$
                            null);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
                for (String provider : providers) {
                    if (_facade.getConfigs().get(provider).getChildren().containsKey("aodl:relation")) {
                        configs.putAll(_facade.getConfigs().get(provider).getChildren().get("aodl:relation")
                                .getChildren());
                    }
                }
                // System.out.println("markupprovider " + relationProvider);
                if (_facade.getConfigs().containsKey(_relationProvider)
                        && _facade.getConfigs().get(_relationProvider).getChildren() != null
                        && _facade.getConfigs().get(_relationProvider).getChildren().containsKey("aodl:relation")) {
                    configs.putAll(_facade.getConfigs().get(_relationProvider).getChildren().get("aodl:relation")
                            .getChildren());
                }
            } else if (crit1 != null) {
                try {
                    values = _mainSearcher.getFacets(facetType, null, crit1, null, //$NON-NLS-1$
                            null);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
                for (String provider : providers) {
                    if (_facade.getConfigs().get(provider).getChildren().containsKey("aodl:relation")
                            && _facade.getConfigs().get(provider).getChildren().get("aodl:relation")
                                    .getChildren() != null
                            && _facade.getConfigs().get(provider).getChildren().get("aodl:relation").getChildren()
                                    .containsKey(crit1)) {
                        configs.putAll(_facade.getConfigs().get(provider).getChildren().get("aodl:relation")
                                .getChildren().get(crit1).getChildren());
                    }
                }
                // System.out.println("relationProvider " + relationProvider);
                if (_facade.getConfigs().containsKey(_relationProvider)
                        && _facade.getConfigs().get(_relationProvider).getChildren() != null
                        && _facade.getConfigs().get(_relationProvider).getChildren().containsKey("aodl:relation")
                        && _facade.getConfigs().get(_relationProvider).getChildren().get("aodl:relation")
                                .getChildren() != null
                        && _facade.getConfigs().get(_relationProvider).getChildren().get("aodl:relation")
                                .getChildren().containsKey(crit1)) {
                    configs.putAll(_facade.getConfigs().get(_relationProvider).getChildren().get("aodl:relation")
                            .getChildren().get(crit1).getChildren());
                }
            }

        } else if (crit1 != null && crit2 == null) {
            try {
                values = _mainSearcher.getFacets(facetType, crit1, null, null, //$NON-NLS-1$
                        null);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            for (String provider : providers) {
                if (_facade.getConfigs().get(provider).getChildren().containsKey("aodl:" + crit1)) {
                    configs.putAll(
                            _facade.getConfigs().get(provider).getChildren().get("aodl:" + crit1).getChildren());
                }
            }
            // System.out.println("markupprovider " + markupProvider);
            if (_facade.getConfigs().containsKey(_markupProvider)
                    && _facade.getConfigs().get(_markupProvider).getChildren() != null
                    && _facade.getConfigs().get(_markupProvider).getChildren().containsKey("aodl:" + crit1)) {
                configs.putAll(
                        _facade.getConfigs().get(_markupProvider).getChildren().get("aodl:" + crit1).getChildren());
            }

        } else if (crit1 != null && crit2 != null) {
            try {
                values = _mainSearcher.getFacets(facetType, crit1, crit2, null, //$NON-NLS-1$
                        null);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            for (String provider : providers) {
                if (_facade.getConfigs().get(provider).getChildren().containsKey(crit1)
                        && _facade.getConfigs().get(provider).getChildren().get("aodl:" + crit1)
                                .getChildren() != null
                        && _facade.getConfigs().get(provider).getChildren().get("aodl:" + crit1).getChildren()
                                .containsKey(crit2)) {
                    configs.putAll(_facade.getConfigs().get(provider).getChildren().get("aodl:" + crit1)
                            .getChildren().get(crit2).getChildren());
                }
            }
            // System.out.println("markupprovider " + markupProvider);
            if (_facade.getConfigs().containsKey(_markupProvider)
                    && _facade.getConfigs().get(_markupProvider).getChildren() != null
                    && _facade.getConfigs().get(_markupProvider).getChildren().containsKey("aodl:" + crit1)
                    && _facade.getConfigs().get(_markupProvider).getChildren().get("aodl:" + crit1)
                            .getChildren() != null
                    && _facade.getConfigs().get(_markupProvider).getChildren().get("aodl:" + crit1).getChildren()
                            .containsKey(crit2)) {
                configs.putAll(_facade.getConfigs().get(_markupProvider).getChildren().get("aodl:" + crit1)
                        .getChildren().get(crit2).getChildren());
            }

        }
        for (String value : values) {
            // System.out.println("value " + value);
            if (configs.containsKey(value)) {
                inputs.put(value, configs.get(value));
            } else {
                ConfigItem ci = new ConfigItem();
                ci.setLabel(value);
                ci.setValue(value);
                inputs.put(value, ci);
            }
        }
        comboViewer.setInput(inputs);
    }

    /**
     * Sets Focus in view.
     */
    public void setFocus() {
    }

}