org.bbaw.pdr.ae.view.main.dialogs.ExpertSearchDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.bbaw.pdr.ae.view.main.dialogs.ExpertSearchDialog.java

Source

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

import java.util.Collections;
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.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.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.MarkupContentProvider;
import org.bbaw.pdr.ae.view.control.provider.MarkupLabelProvider;
import org.bbaw.pdr.ae.view.control.provider.RefTemplateContentProvider;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;

/**
 * The Class ExpertSearchDialog.
 * @author Christoph Plutte
 */
public class ExpertSearchDialog extends TitleAreaDialog {
    /** Instance of shared image registry. */
    private ImageRegistry _imageReg = CommonActivator.getDefault().getImageRegistry();
    /** singleton facade instance. */
    private Facade _facade = Facade.getInstanz();

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

    /** MainSearcher. */
    private AMainSearcher _mainSearcher = _facade.getMainSearcher();

    /** The pdr query. */
    private PdrQuery _pdrQuery;

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

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

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

    /** 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 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 p ref comp. */
    private Composite _searchPRefComp;

    /** The scroll comp search. */
    private ScrolledComposite _scrollCompSearch;

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

    /** 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 expert search dialog.
     * @param parentShell the parent shell
     */
    public ExpertSearchDialog(final Shell parentShell) {
        super(parentShell);
        if (_markupProvider == null) {
            _markupProvider = (String) _facade.getConfigs().keySet().toArray()[0];
        }
        if (_relationProvider == null) {
            _relationProvider = (String) _facade.getConfigs().keySet().toArray()[0];
        }
    }

    /**
     * Builds the person search.
     * @param type the type
     * @param crit the crit
     */
    private void buildPersonSearch(final int type, final Integer crit) {
        DataType dtAll = new DataType();
        dtAll.setValue("ALL"); //$NON-NLS-1$
        dtAll.setLabel("ALL"); //$NON-NLS-1$
        if (_scrollCompSearch != null) {
            _scrollCompSearch.dispose();
        }
        if (_searchPTagComp != null) {
            _searchPTagComp.dispose();
        }
        // if (placeGroup != null) placeGroup.dispose();
        _scrollCompSearch = new ScrolledComposite(_personSearchGroup, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
        _scrollCompSearch.setExpandHorizontal(true);
        _scrollCompSearch.setExpandVertical(true);
        _scrollCompSearch.setMinHeight(1);
        _scrollCompSearch.setMinWidth(1);

        _scrollCompSearch.setLayout(new GridLayout());
        _scrollCompSearch.setLayoutData(new GridData());
        ((GridData) _scrollCompSearch.getLayoutData()).heightHint = 400;
        ((GridData) _scrollCompSearch.getLayoutData()).horizontalSpan = 4;
        ((GridData) _scrollCompSearch.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _scrollCompSearch.getLayoutData()).grabExcessHorizontalSpace = true;
        _scrollCompSearch.pack();

        Composite contentCompSearch = new Composite(_scrollCompSearch, SWT.NONE);
        contentCompSearch.setLayout(new GridLayout());

        _scrollCompSearch.setContent(contentCompSearch);

        boolean tag1 = true;
        boolean rel1 = true;
        boolean date1 = true;
        switch (type) {
        case 0:
            // pdrQuery = new PdrQuery();
            // criteria = new Criteria();
            // pdrQuery.getCriterias().add(criteria);

            break; // normales laden
        case 1: // neues criteria einfgen
            _criteria = new Criteria();
            _pdrQuery.getCriterias().add(_criteria);
            _criteria.setType("tagging"); //$NON-NLS-1$
            //         System.out.println("in case 1"); //$NON-NLS-1$
            //         System.out.println("anzahl crit " + pdrQuery.getCriterias().size()); //$NON-NLS-1$
            break;
        case 2: // criteria lschen
            _pdrQuery.getCriterias().removeElementAt(crit);
            break;
        case 3: // neue relation einfgen
            _criteria = new Criteria();
            _pdrQuery.getCriterias().add(_criteria);
            _criteria.setType("relation"); //$NON-NLS-1$
            break;
        case 4: // relation lschen
            _pdrQuery.getCriterias().removeElementAt(crit);
            break;
        case 5: // date criteria einfgen
            _criteria = new Criteria();
            _pdrQuery.getCriterias().add(_criteria);
            _criteria.setType("date"); //$NON-NLS-1$
            break;
        case 6:
            _pdrQuery.getCriterias().removeElementAt(crit);
            break;
        case 7: // reference criteria einfgen
            _criteria = new Criteria();
            _pdrQuery.getCriterias().add(_criteria);
            _criteria.setType("reference"); //$NON-NLS-1$
            break;
        case 8:
            _pdrQuery.getCriterias().removeElementAt(crit);
            break;
        default:
            break;
        }

        Collections.sort(_pdrQuery.getCriterias());

        // load last search.
        if (_facade.getLastExpertSearch() != null) {
            _pdrQuery = _facade.getLastExpertSearch();
        }

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

            if (c.getType().equals("tagging")) //$NON-NLS-1$
            {
                if (tag1) {
                    tag1 = false;
                    _searchPTagComp = new Composite(contentCompSearch, SWT.NONE);
                    _searchPTagComp.setLayout(new GridLayout());
                    ((GridLayout) _searchPTagComp.getLayout()).makeColumnsEqualWidth = true;
                    ((GridLayout) _searchPTagComp.getLayout()).numColumns = 21;
                    _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")); //$NON-NLS-1$
                    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")); //$NON-NLS-1$
                    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_tagging")); //$NON-NLS-1$
                    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")); //$NON-NLS-1$
                    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")); //$NON-NLS-1$
                    tagSubtype.setLayoutData(new GridData());
                    ((GridData) tagSubtype.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) tagSubtype.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) tagSubtype.getLayoutData()).horizontalSpan = 2;

                    Label tagRole = new Label(_searchPTagComp, SWT.NONE);
                    tagRole.setText(NLMessages.getString("Dialog_role")); //$NON-NLS-1$
                    tagRole.setLayoutData(new GridData());
                    ((GridData) tagRole.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) tagRole.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) tagRole.getLayoutData()).horizontalSpan = 2;

                    Label tagKey = new Label(_searchPTagComp, SWT.NONE);
                    tagKey.setText(NLMessages.getString("Dialog_key")); //$NON-NLS-1$
                    tagKey.setLayoutData(new GridData());
                    ((GridData) tagKey.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) tagKey.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) tagKey.getLayoutData()).horizontalSpan = 3;

                    Label searchTextLabel = new Label(_searchPTagComp, SWT.NONE);
                    searchTextLabel.setText(NLMessages.getString("Dialog_searchText")); //$NON-NLS-1$
                    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")); //$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(_searchPTagComp, SWT.NONE);
                    include.setText(NLMessages.getString("Dialog_include")); //$NON-NLS-1$
                    include.setToolTipText(NLMessages.getString("Dialog_includeConcurrences")); //$NON-NLS-1$
                    include.setLayoutData(new GridData());
                    ((GridData) include.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) include.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) include.getLayoutData()).horizontalSpan = 1;

                    Label del = new Label(_searchPTagComp, SWT.NONE);
                    del.setText(NLMessages.getString("Dialog_del")); //$NON-NLS-1$
                    del.setLayoutData(new GridData());
                    ((GridData) del.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) del.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) del.getLayoutData()).horizontalSpan = 1;
                }

                if (i == 0) {
                    Label l = new Label(_searchPTagComp, 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(_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());
                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); //$NON-NLS-1$
                        } else {
                            selection = cd.getValue();
                        }
                        c.setCrit1(selection);
                        setComboViewerInput(typeComboViewer, "tagging_values", c.getCrit1(), null, null); //$NON-NLS-1$
                    }
                });

                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());
                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); //$NON-NLS-1$
                    }
                });

                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());
                }

                final Combo roleCombo = new Combo(_searchPTagComp, SWT.READ_ONLY);
                final ComboViewer roleComboViewer = new ComboViewer(roleCombo);
                roleComboViewer.setContentProvider(new MarkupContentProvider());
                roleComboViewer.setLabelProvider(new MarkupLabelProvider());
                roleComboViewer.setComparator(new ConfigDataComparator());

                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());
                        }
                        setComboViewerInput(roleComboViewer, "tagging_values", c.getCrit1(), c.getCrit2(), //$NON-NLS-1$
                                c.getCrit3());
                    }
                });

                roleCombo.setLayoutData(new GridData());
                roleCombo.setLayoutData(new GridData());
                ((GridData) roleCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) roleCombo.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) roleCombo.getLayoutData()).horizontalSpan = 2;
                if (c.getCrit4() != null) {
                    setComboViewerByString(roleComboViewer, c.getCrit4());
                }
                roleComboViewer.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.setCrit4(cd.getValue());
                        }
                    }
                });

                final Text keyText = new Text(_searchPTagComp, SWT.BORDER);
                keyText.setLayoutData(new GridData());
                keyText.setLayoutData(new GridData());
                ((GridData) keyText.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) keyText.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) keyText.getLayoutData()).horizontalSpan = 2;
                if (c.getCrit5() != null) {
                    keyText.setText(c.getCrit5());
                }
                keyText.setEnabled(false);

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

                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 FocusAdapter() {
                    @Override
                    public void focusLost(final FocusEvent e) {
                        c.setSearchText(searchText.getText());
                    }
                });

                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());
                    }
                });

                final Button delTagCriteria = new Button(_searchPTagComp, SWT.PUSH);
                delTagCriteria.setLayoutData(new GridData());
                delTagCriteria.setText("-"); //$NON-NLS-1$
                delTagCriteria.setData("tag", i); //$NON-NLS-1$

                delTagCriteria.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        buildPersonSearch(2, ((Integer) delTagCriteria.getData("tag"))); //$NON-NLS-1$
                    }
                });

            } // if tagging

            if (c.getType().equals("relation")) //$NON-NLS-1$
            {
                if (rel1) {
                    rel1 = false;
                    _searchPRelComp = new Composite(contentCompSearch, 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")); //$NON-NLS-1$
                    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")); //$NON-NLS-1$
                    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")); //$NON-NLS-1$
                    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")); //$NON-NLS-1$
                    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")); //$NON-NLS-1$
                    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")); //$NON-NLS-1$
                    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 (XQException 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 (XQException 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());
                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());
                classComboViewer.setLabelProvider(new MarkupLabelProvider());
                classComboViewer.setComparator(new ConfigDataComparator());
                setComboViewerInput(contextComboViewer, "relation", null, null, null); //$NON-NLS-1$
                if (c.getRelationContext() != null) {
                    setComboViewerByString(contextComboViewer, c.getRelationContext());
                    setComboViewerInput(classComboViewer, "relation", c.getRelationContext(), null, null); //$NON-NLS-1$

                } 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); //$NON-NLS-1$
                    }
                });

                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);

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

                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());
                    }
                });

                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(contentCompSearch, SWT.NONE);
                    _searchPDateComp.setLayout(new GridLayout());
                    ((GridLayout) _searchPDateComp.getLayout()).makeColumnsEqualWidth = true;
                    ((GridLayout) _searchPDateComp.getLayout()).numColumns = 21;
                    _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;

                    if (i != 0) {
                        Label l2 = new Label(_searchPDateComp, SWT.NONE);
                        l2.setLayoutData(new GridData());
                        l2.setLayoutData(new GridData());
                        ((GridData) l2.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) l2.getLayoutData()).grabExcessHorizontalSpace = true;
                        ((GridData) l2.getLayoutData()).horizontalSpan = 2;
                    } else {
                        Label op = new Label(_searchPDateComp, SWT.NONE);
                        op.setText(NLMessages.getString("Dialog_operand")); //$NON-NLS-1$
                        op.setLayoutData(new GridData());
                        ((GridData) op.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) op.getLayoutData()).grabExcessHorizontalSpace = true;
                        ((GridData) op.getLayoutData()).horizontalSpan = 2;
                    }

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

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

                    Label notBefore = new Label(_searchPDateComp, SWT.NONE);
                    notBefore.setText(NLMessages.getString("Dialog_day")); //$NON-NLS-1$
                    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")); //$NON-NLS-1$
                    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")); //$NON-NLS-1$
                    year.setLayoutData(new GridData());
                    ((GridData) year.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) year.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) year.getLayoutData()).horizontalSpan = 3;

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

                    ((GridData) bl2.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) bl2.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) bl2.getLayoutData()).horizontalSpan = 2;

                    Label notAfter = new Label(_searchPDateComp, SWT.NONE);
                    notAfter.setText(NLMessages.getString("Dialog_day")); //$NON-NLS-1$
                    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")); //$NON-NLS-1$
                    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")); //$NON-NLS-1$
                    year2.setLayoutData(new GridData());
                    ((GridData) year2.getLayoutData()).horizontalAlignment = SWT.FILL;
                    ((GridData) year2.getLayoutData()).grabExcessHorizontalSpace = true;
                    ((GridData) year2.getLayoutData()).horizontalSpan = 3;

                    if (i != 0) {
                        Label l2 = new Label(_searchPDateComp, SWT.NONE);
                        l2.setLayoutData(new GridData());
                        l2.setLayoutData(new GridData());
                        ((GridData) l2.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) l2.getLayoutData()).grabExcessHorizontalSpace = true;
                        ((GridData) l2.getLayoutData()).horizontalSpan = 2;
                    } else {
                        Label include = new Label(_searchPDateComp, SWT.NONE);
                        include.setText(NLMessages.getString("Dialog_include")); //$NON-NLS-1$
                        include.setToolTipText(NLMessages.getString("Dialog_includeConcurrences")); //$NON-NLS-1$
                        include.setLayoutData(new GridData());
                        ((GridData) include.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) include.getLayoutData()).grabExcessHorizontalSpace = true;
                        ((GridData) include.getLayoutData()).horizontalSpan = 1;

                        Label del = new Label(_searchPDateComp, SWT.NONE);
                        del.setText(NLMessages.getString("Dialog_del")); //$NON-NLS-1$
                        del.setLayoutData(new GridData());
                        ((GridData) del.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) del.getLayoutData()).grabExcessHorizontalSpace = true;
                        ((GridData) del.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) //$NON-NLS-1$
                        {
                            return NLMessages.getString("Editor_time_" + str); //$NON-NLS-1$
                        }
                        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")); //$NON-NLS-1$
                from.setLayoutData(new GridData());
                ((GridData) from.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) from.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) from.getLayoutData()).horizontalSpan = 2;

                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);
                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")); //$NON-NLS-1$
                to.setLayoutData(new GridData());
                ((GridData) to.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) to.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) to.getLayoutData()).horizontalSpan = 2;

                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.NULL);
                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());
                    }
                });

                final Button delTagCriteria = new Button(_searchPDateComp, SWT.PUSH);
                delTagCriteria.setLayoutData(new GridData());
                delTagCriteria.setText("-"); //$NON-NLS-1$
                delTagCriteria.setData("tag", i); //$NON-NLS-1$

                delTagCriteria.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(final SelectionEvent event) {
                        buildPersonSearch(2, ((Integer) delTagCriteria.getData("tag"))); //$NON-NLS-1$
                    }
                });
            } // if date
            if (c.getType().equals("reference")) //$NON-NLS-1$
            {
                _searchPRefComp = new Composite(contentCompSearch, SWT.NONE);
                _searchPRefComp.setLayout(new GridLayout());
                ((GridLayout) _searchPRefComp.getLayout()).makeColumnsEqualWidth = true;
                ((GridLayout) _searchPRefComp.getLayout()).numColumns = 15;
                _searchPRefComp.setLayoutData(new GridData());
                ((GridData) _searchPRefComp.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) _searchPRefComp.getLayoutData()).grabExcessHorizontalSpace = true;
                // ((GridData) searchPTagComp.getLayoutData()).heightHint = 200;
                ((GridData) _searchPRefComp.getLayoutData()).grabExcessVerticalSpace = false;
                ((GridData) _searchPRefComp.getLayoutData()).horizontalSpan = 1;

                final Combo opCombo = new Combo(_searchPRefComp, 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()));
                    }
                });

                Label sem = new Label(_searchPRefComp, SWT.NONE);
                sem.setText(NLMessages.getString("Dialog_reference")); //$NON-NLS-1$
                sem.setLayoutData(new GridData());
                ((GridData) sem.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) sem.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) sem.getLayoutData()).horizontalSpan = 2;

                Label tagName = new Label(_searchPRefComp, SWT.NONE);
                tagName.setText(NLMessages.getString("Dialog_genre")); //$NON-NLS-1$
                tagName.setLayoutData(new GridData());
                ((GridData) tagName.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) tagName.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) tagName.getLayoutData()).horizontalSpan = 2;

                final Combo genreCombo = new Combo(_searchPRefComp, 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));

                }

                Label tagType = new Label(_searchPRefComp, SWT.NONE);
                tagType.setText(NLMessages.getString("Dialog_searchText")); //$NON-NLS-1$
                tagType.setLayoutData(new GridData());
                ((GridData) tagType.getLayoutData()).horizontalAlignment = SWT.FILL;
                ((GridData) tagType.getLayoutData()).grabExcessHorizontalSpace = true;
                ((GridData) tagType.getLayoutData()).horizontalSpan = 2;

                final Text searchText = new Text(_searchPRefComp, 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());
                    }
                });

                final Button fuzzyB = new Button(_searchPRefComp, 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(_searchPRefComp, 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 reference
        }
        contentCompSearch.layout();
        _scrollCompSearch.setContent(contentCompSearch);
        _scrollCompSearch.setMinSize(contentCompSearch.computeSize(SWT.DEFAULT, SWT.DEFAULT, true));
        _scrollCompSearch.layout();
        _personSearchGroup.redraw();
        _personSearchGroup.layout();
        _personSearchGroup.pack();
        _personSearchGroup.layout();
        // personSearchGroup.pack();

    }

    @Override
    public final void create() {
        super.create();
        // Set the title
        setTitle(NLMessages.getString("ExpertDialog_title")); //$NON-NLS-1$
        // Set the message
        setMessage(NLMessages.getString("Dialog_message"), IMessageProvider.INFORMATION); //$NON-NLS-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_search"), 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) {
                setReturnCode(CANCEL);
                close();
            }
        });
    }

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

        parent.setSize(450, 200);

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

        new GridData();

        _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;

        _pdrQuery = new PdrQuery();
        _criteria = new Criteria();
        _criteria.setType("tagging"); //$NON-NLS-1$

        _pdrQuery.setCriterias(new Vector<Criteria>());
        _pdrQuery.setType(1);

        _pdrQuery.getCriterias().add(_criteria);

        createPersonTabItem(_mainTabFolder);

        // parent.setLayout(layout);

        _mainTabFolder.setSelection(_facade.getRelObjTyp());
        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++;
        Button button = new Button(parent, SWT.PUSH);
        button.setText(label);
        button.setImage(_imageReg.get(IconsInternal.SEARCH));
        button.setFont(JFaceResources.getDialogFont());
        button.setData(new Integer(id));
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                //            System.out.println("OK pressed"); //$NON-NLS-1$
                if (isValidInput()) {
                    okPressed();
                }
            }
        });
        if (defaultButton) {
            Shell shell = parent.getShell();
            if (shell != null) {
                shell.setDefaultButton(button);
            }
        }
        setButtonLayoutData(button);
        return button;
    }

    /**
     * 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_search")); //$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);

        _personSearchGroup = new Group(_personComposite, SWT.SHADOW_IN);
        _personSearchGroup.setText(""); //$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 = true;
        ((GridLayout) _personSearchGroup.getLayout()).numColumns = 4;

        Button addMarkupC = new Button(_personSearchGroup, SWT.PUSH);
        addMarkupC.setText(NLMessages.getString("Dialog_add_markup_crit")); //$NON-NLS-1$
        addMarkupC.setImage(_imageReg.get(IconsInternal.MARKUP));
        addMarkupC.setFont(JFaceResources.getDialogFont());
        addMarkupC.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                buildPersonSearch(1, null);
            }
        });

        Button addRelC = new Button(_personSearchGroup, SWT.PUSH);
        addRelC.setText(NLMessages.getString("Dialog_add_rel_crit")); //$NON-NLS-1$
        addRelC.setImage(_imageReg.get(IconsInternal.RELATION));
        addRelC.setFont(JFaceResources.getDialogFont());
        addRelC.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                buildPersonSearch(3, null);
            }
        });

        Button addDateC = new Button(_personSearchGroup, SWT.PUSH);
        addDateC.setText(NLMessages.getString("Dialog_add_date_crit")); //$NON-NLS-1$
        addDateC.setImage(_imageReg.get(IconsInternal.TIME));
        addDateC.setFont(JFaceResources.getDialogFont());
        addDateC.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                buildPersonSearch(5, null);
            }
        });

        Button addRefC = new Button(_personSearchGroup, SWT.PUSH);
        addRefC.setText(NLMessages.getString("Dialog_add_ref_crit")); //$NON-NLS-1$
        addRefC.setImage(_imageReg.get(IconsInternal.REFERENCE));
        addRefC.setFont(JFaceResources.getDialogFont());
        addRefC.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                buildPersonSearch(7, null);
            }
        });

        buildPersonSearch(0, null);

        // _searchPTagComp
        // personSearchGroup
        _personSearchGroup.layout();

    }

    @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();
    }

    // We need to have the textFields into Strings because the UI gets disposed
    // and the Text Fields are not accessible any more.
    /**
     * Save input.
     */
    private void saveInput() {
        _facade.setLastExpertSearch(_pdrQuery);
        _facade.setAdvancedQuery(_pdrQuery);
    }

    /**
     * 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"); //$NON-NLS-1$
            @SuppressWarnings("unchecked")
            HashMap<String, ConfigData> inputs = (HashMap<String, ConfigData>) cv.getInput();
            if (inputs.containsKey(s)) {
                //            System.out.println("contains key s " + s); //$NON-NLS-1$
                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 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"); //$NON-NLS-1$
        ciAll.setLabel("ALL"); //$NON-NLS-1$
        ciAll.setIgnore(false);
        inputs.put("ALL", ciAll); //$NON-NLS-1$
        String[] values = null;
        if (facetType.equals("relation")) //$NON-NLS-1$
        {
            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")) //$NON-NLS-1$
                    {
                        configs.putAll(_facade.getConfigs().get(provider).getChildren().get("aodl:relation") //$NON-NLS-1$
                                .getChildren());
                    }
                }
                if (_facade.getConfigs().containsKey(_relationProvider)
                        && _facade.getConfigs().get(_relationProvider).getChildren() != null
                        && _facade.getConfigs().get(_relationProvider).getChildren().containsKey("aodl:relation")) //$NON-NLS-1$
                {
                    configs.putAll(_facade.getConfigs().get(_relationProvider).getChildren().get("aodl:relation") //$NON-NLS-1$
                            .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") //$NON-NLS-1$
                            && _facade.getConfigs().get(provider).getChildren().get("aodl:relation") //$NON-NLS-1$
                                    .getChildren() != null && _facade.getConfigs().get(provider).getChildren().get("aodl:relation").getChildren() //$NON-NLS-1$
                                    .containsKey(crit1)) {
                        configs.putAll(_facade.getConfigs().get(provider).getChildren().get("aodl:relation") //$NON-NLS-1$
                                .getChildren().get(crit1).getChildren());
                    }
                }
                //            System.out.println("relationProvider " + relationProvider); //$NON-NLS-1$
                if (_facade.getConfigs().containsKey(_relationProvider)
                        && _facade.getConfigs().get(_relationProvider).getChildren() != null
                        && _facade.getConfigs().get(_relationProvider).getChildren().containsKey("aodl:relation") //$NON-NLS-1$
                        && _facade.getConfigs().get(_relationProvider).getChildren().get("aodl:relation") //$NON-NLS-1$
                                .getChildren() != null && _facade.getConfigs().get(_relationProvider).getChildren().get("aodl:relation") //$NON-NLS-1$
                                .getChildren().containsKey(crit1)) {
                    configs.putAll(_facade.getConfigs().get(_relationProvider).getChildren().get("aodl:relation") //$NON-NLS-1$
                            .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(crit1)) {
                    configs.putAll(_facade.getConfigs().get(provider).getChildren().get(crit1).getChildren());
                }
            }
            //         System.out.println("markupprovider " + markupProvider); //$NON-NLS-1$
            if (_facade.getConfigs().containsKey(_markupProvider)
                    && _facade.getConfigs().get(_markupProvider).getChildren() != null
                    && _facade.getConfigs().get(_markupProvider).getChildren().containsKey("aodl:" + crit1)) //$NON-NLS-1$
            {
                configs.putAll(
                        _facade.getConfigs().get(_markupProvider).getChildren().get("aodl:" + crit1).getChildren()); //$NON-NLS-1$
            }

        } else if (crit1 != null && crit2 != null && crit3 == 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("aodl:" + crit1) //$NON-NLS-1$
                        && _facade.getConfigs().get(provider).getChildren().get("aodl:" + crit1) //$NON-NLS-1$
                                .getChildren() != null && _facade.getConfigs().get(provider).getChildren().get("aodl:" + crit1).getChildren() //$NON-NLS-1$
                                .containsKey(crit2)) {
                    configs.putAll(_facade.getConfigs().get(provider).getChildren().get("aodl:" + crit1) //$NON-NLS-1$
                            .getChildren().get(crit2).getChildren());
                }
            }
            //         System.out.println("markupprovider " + markupProvider); //$NON-NLS-1$
            if (_facade.getConfigs().containsKey(_markupProvider)
                    && _facade.getConfigs().get(_markupProvider).getChildren() != null
                    && _facade.getConfigs().get(_markupProvider).getChildren().containsKey("aodl:" + crit1) //$NON-NLS-1$
                    && _facade.getConfigs().get(_markupProvider).getChildren().get("aodl:" + crit1) //$NON-NLS-1$
                            .getChildren() != null && _facade.getConfigs().get(_markupProvider).getChildren().get("aodl:" + crit1).getChildren() //$NON-NLS-1$
                            .containsKey(crit2)) {
                configs.putAll(_facade.getConfigs().get(_markupProvider).getChildren().get("aodl:" + crit1) //$NON-NLS-1$
                        .getChildren().get(crit2).getChildren());
            }

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

        }
        for (String value : values) {
            //         System.out.println("value " + value); //$NON-NLS-1$
            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);
    }

}