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

Java tutorial

Introduction

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

Source

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

import java.text.SimpleDateFormat;
import java.util.Observable;
import java.util.Observer;
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.model.ConfigData;
import org.bbaw.pdr.ae.control.core.UserRichtsChecker;
import org.bbaw.pdr.ae.control.facade.Facade;
import org.bbaw.pdr.ae.control.interfaces.IPdrIdService;
import org.bbaw.pdr.ae.metamodel.IAEPresentable;
import org.bbaw.pdr.ae.metamodel.PdrId;
import org.bbaw.pdr.ae.metamodel.Record;
import org.bbaw.pdr.ae.metamodel.Revision;
import org.bbaw.pdr.ae.model.Concurrence;
import org.bbaw.pdr.ae.model.Concurrences;
import org.bbaw.pdr.ae.model.Identifier;
import org.bbaw.pdr.ae.model.Identifiers;
import org.bbaw.pdr.ae.model.PdrObject;
import org.bbaw.pdr.ae.model.Person;
import org.bbaw.pdr.ae.model.Reference;
import org.bbaw.pdr.ae.model.User;
import org.bbaw.pdr.ae.model.ValidationStm;
import org.bbaw.pdr.ae.model.view.Facet;
import org.bbaw.pdr.ae.view.control.ViewHelper;
import org.bbaw.pdr.ae.view.control.customSWTWidges.RevisionHistoryToolTip;
import org.bbaw.pdr.ae.view.control.dialogs.SelectObjectDialog;
import org.bbaw.pdr.ae.view.control.provider.AutoCompleteNameLabelProvider;
import org.bbaw.pdr.ae.view.control.provider.FacetContentProposalProvider;
import org.bbaw.pdr.ae.view.control.provider.MarkupContentProvider;
import org.bbaw.pdr.ae.view.control.provider.MarkupLabelProvider;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.NotEnabledException;
import org.eclipse.core.commands.NotHandledException;
import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.fieldassist.ContentProposalAdapter;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.fieldassist.IContentProposalListener;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
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.FocusListener;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.IHandlerService;

/**
 * The Class PersonEditorDialog.
 * @author Christoph Plutte
 */
public class PersonEditorDialog extends TitleAreaDialog implements Observer {

    /** The Constant ID. */
    public static final String ID = "org.bbaw.pdr.ae.view.main.editors.PersonEditorDialog"; //$NON-NLS-1$
    /** date format of administrative dates in PDR. */
    private SimpleDateFormat _adminDateFormat = AEConstants.ADMINDATE_FORMAT;
    /** Instance of shared image registry. */
    private ImageRegistry _imageReg = CommonActivator.getDefault().getImageRegistry();

    /** The WHIT e_ color. */
    private static final Color WHITE_COLOR = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
    /** text of pdr identification number of person. */
    private Text _pdrID;

    /** The _facade. */
    private Facade _facade = Facade.getInstanz();

    /** The id service. */
    private IPdrIdService _idService = _facade.getIdService();
    /** local copy of current Person. */
    private Person _currentPerson;

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

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

    /** The revisor name text. */
    private Text _revisorNameText;

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

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

    /** text of concurring person ids. */
    private Text _conID1;

    /** The main tab folder. */
    private TabFolder _mainTabFolder;

    /** The front tab item. */
    private TabItem _frontTabItem;

    /** The identifier tab item. */
    private TabItem _identifierTabItem;

    /** The rights tab item. */
    private TabItem _rightsTabItem;
    /** composite for rights TabItem. */
    private Composite _rightsTableComposite;

    /** The front composite. */
    private Composite _frontComposite;
    /** composite for external person identifier. */
    private Composite _identifierComposite;
    /** composite for concurrences. */
    private Composite _conComposite;
    /** composite for rights management. */
    private Composite _rightsComposite;
    /** scroll composite for concurrences. */
    private ScrolledComposite _scrollCompCon;
    /** scroll composite for identifiers. */
    private ScrolledComposite _scrollCompIdentifier;

    /** The concurrence group. */
    private Group _concurrenceGroup;

    /** quality rating for external person identifier and concurrcence. */
    private final String[] _ratings = new String[] { "certain", "probable", "unsure" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

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

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

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

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

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

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

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

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

    /** The add identifier. */
    private Button _addIdentifier;

    /** The add concurrence. */
    private Button _addConcurrence;

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

    /** String for quality of external person identifier. */
    private GridData _gridData;

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

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

    /**
     * Instantiates a new person editor dialog.
     * @param parentShell the parent shell
     * @param currentPerson the current person
     */
    public PersonEditorDialog(final Shell parentShell, final Person currentPerson) {
        super(parentShell);
        this._currentPerson = currentPerson;
    }

    @Override
    public final void create() {
        super.create();
        // Set the title
        setTitle(NLMessages.getString("Editor_person_editor_title")); //$NON-NLS-1$
        _facade.addObserver(this);
        dialogArea.addListener(SWT.Traverse, new Listener() {
            @Override
            public void handleEvent(final Event e) {
                if (e.detail == SWT.TRAVERSE_ESCAPE) {
                    e.doit = false;
                }
            }
        });
        loadValues();

    }

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

        parent.setLayoutData(_gridData);
        // Create Add button
        // Own method as we need to overview the SelectionAdapter
        createOkButton(parent, OK, NLMessages.getString("Editor_save"), true); //$NON-NLS-1$
        // Add a SelectionListener

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

    // /** meth. creates the TabItem for concurrence fields.
    // *
    // * @param _mainTabFolder main tab folder.
    // */
    // private void createConcurrenceTabItem(final TabFolder _mainTabFolder)
    // {
    // conTabItem = new TabItem(_mainTabFolder, SWT.NONE);
    // conTabItem.setText(NLMessages.getString("Editor_concurrences"));
    //
    // _conComposite = new Composite(_mainTabFolder, SWT.NONE);
    // _conComposite.setLayout(new GridLayout());
    //
    // conTabItem.setControl(_conComposite);
    //
    //
    // Button _addConcurrence = new Button(_conComposite, SWT.PUSH);
    // _addConcurrence.setText(NLMessages.getString("Editor_addConcurrence"));
    // _addConcurrence.setImage(_imageReg.get(IconsInternal.CONCURRENCE_ADD));
    // _addConcurrence.setLayoutData(_gridData);
    // _addConcurrence.addSelectionListener(new SelectionAdapter()
    // {
    // public void widgetSelected(final SelectionEvent event)
    // {
    // loadConcurrences(1, 0, 0);
    // } });
    //
    //
    //
    // }

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

        _configProvider = Platform.getPreferencesService().getString(CommonActivator.PLUGIN_ID,
                "PRIMARY_SEMANTIC_PROVIDER", AEConstants.CLASSIFICATION_AUTHORITY, null).toUpperCase();
        String standard = "PDR";
        if (!_facade.getConfigs().containsKey(standard)) {
            for (String s : _facade.getConfigs().keySet()) {
                standard = s;
                break;
            }
        }
        if (!_facade.getConfigs().containsKey(_configProvider)) {
            _configProvider = standard;
        }
        GridData gridData = new GridData();
        gridData.verticalAlignment = GridData.FILL;
        gridData.horizontalAlignment = GridData.FILL;
        gridData.horizontalSpan = 1;
        gridData.grabExcessHorizontalSpace = true;
        gridData.grabExcessVerticalSpace = true;

        _gridData2 = new GridData();
        _gridData2.verticalAlignment = GridData.FILL;
        _gridData2.horizontalSpan = 4;
        _gridData2.grabExcessHorizontalSpace = true;
        _gridData2.grabExcessVerticalSpace = true;
        _gridData2.horizontalAlignment = SWT.FILL;
        //
        // _gridData.widthHint = 450;
        gridData.minimumWidth = 700;
        gridData.minimumHeight = 400;
        _mainTabFolder = new TabFolder(parent, SWT.TOP | SWT.FILL);
        _mainTabFolder.setLayoutData(gridData);
        _mainTabFolder.addSelectionListener(new SelectionListener() {
            @Override
            public void widgetDefaultSelected(final SelectionEvent e) {
                widgetSelected(e);
            }

            @Override
            public void widgetSelected(final SelectionEvent e) {
                if (_identifierTabItem != null) {
                    validate();
                }
            }
        });

        GridLayout layout = new GridLayout();
        layout.numColumns = 1;
        layout.makeColumnsEqualWidth = true;
        parent.setLayout(layout);

        createFrontTabItem(_mainTabFolder);
        createIdentifierTabItem(_mainTabFolder);
        // createConcurrenceTabItem(_mainTabFolder);

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

        parent.pack();
        _mainTabFolder.layout();
        _mainTabFolder.pack();
        return parent;
    }

    /**
     * meth. create the TabItem for front eg. general fields and context.
     * @param mainTabFolder main tabFolder
     */
    private void createFrontTabItem(final TabFolder mainTabFolder) {

        _frontTabItem = new TabItem(mainTabFolder, SWT.NONE);
        _frontTabItem.setText(NLMessages.getString("Editor_concurrences")); //$NON-NLS-1$
        _frontComposite = new Composite(mainTabFolder, SWT.NONE);
        _frontComposite.setLayoutData(new GridData());
        ((GridData) _frontComposite.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _frontComposite.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _frontComposite.getLayoutData()).horizontalAlignment = SWT.FILL;

        _frontComposite.setLayout(new GridLayout());
        _frontTabItem.setControl(_frontComposite);

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

        Group pdrIdGroup = new Group(_frontComposite, SWT.SHADOW_IN);
        pdrIdGroup.setText(NLMessages.getString("Editor_adminData")); //$NON-NLS-1$

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

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

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

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

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

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

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

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

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

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

        Label reteste = new Label(pdrIdGroup, SWT.NONE);
        reteste.setText(NLMessages.getString("Editor_date")); //$NON-NLS-1$
        reteste.setLayoutData(new GridData());
        reteste.pack();
        _conComposite = new Composite(_frontComposite, SWT.NONE);
        _conComposite.setLayout(new GridLayout());
        _conComposite.setLayoutData(new GridData());
        ((GridData) _conComposite.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _conComposite.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _conComposite.getLayoutData()).horizontalAlignment = SWT.FILL;

        _addConcurrence = new Button(_conComposite, SWT.PUSH);
        _addConcurrence.setText(NLMessages.getString("Editor_addConcurrence")); //$NON-NLS-1$
        _addConcurrence.setToolTipText(NLMessages.getString("Editor_add_concurrence_tooltip"));
        _addConcurrence.setImage(_imageReg.get(IconsInternal.CONCURRENCE_ADD));
        _addConcurrence.setLayoutData(_gridData);
        _addConcurrence.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                loadConcurrences(1, 0, 0);
                validate();
            }
        });

        _addConcurrence.pack();
        _conComposite.pack();
        _conComposite.layout();
        _frontComposite.pack();
        _frontComposite.layout();
    }

    /**
     * meth. creates the TabItem for identifier fields such as PND, LCCN.
     * @param mainTabFolder main tab folder.
     */

    private void createIdentifierTabItem(final TabFolder mainTabFolder) {
        _identifierTabItem = new TabItem(mainTabFolder, SWT.NONE);
        _identifierTabItem.setText(NLMessages.getString("Editor_identifiers")); //$NON-NLS-1$
        _identifierComposite = new Composite(mainTabFolder, SWT.NONE);
        _identifierComposite.setLayout(new GridLayout());
        _identifierComposite.setLayoutData(new GridData());
        ((GridData) _identifierComposite.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _identifierComposite.getLayoutData()).verticalAlignment = SWT.FILL;
        ((GridData) _identifierComposite.getLayoutData()).grabExcessHorizontalSpace = true;
        ((GridData) _identifierComposite.getLayoutData()).grabExcessVerticalSpace = true;
        _identifierTabItem.setControl(_identifierComposite);

        _addIdentifier = new Button(_identifierComposite, SWT.PUSH);
        _addIdentifier.setText(NLMessages.getString("Editor_addIdentifier")); //$NON-NLS-1$
        _addIdentifier.setToolTipText(NLMessages.getString("Editor_add_identifier_tooltip"));
        _addIdentifier.setImage(_imageReg.get(IconsInternal.IDENTIFIER_ADD));
        _addIdentifier.setLayoutData(_gridData);
        _addIdentifier.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent event) {
                loadIdentifiers(true, null);
                // _identifierComposite.redraw();
                // _identifierComposite.pack();
                validate();

            }
        });

        _identifierComposite.pack();
    }

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

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

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

        ((GridData) rightsGroup.getLayoutData()).minimumHeight = 60;
        ((GridData) rightsGroup.getLayoutData()).widthHint = 600;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _rightsTableComposite.pack();
    }

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

    /**
     * checks whether input is correct. conditions:
     * @return boolean valid
     */
    private boolean isValidInput() {
        // Validator v = new Validator();
        // int error = v.isValid(_currentPerson);
        // if(error == 2000)
        // {
        // return true;
        // }
        // else if (error == 2210 || error == 2220 || error == 2230)
        // {
        // setMessage(NLMessages.getString("Editor_error2210"),
        // IMessageProvider.ERROR);
        // return false;
        // }
        // else if (error == 2310 || error == 2320 || error == 2350 || error ==
        // 2350)
        // {
        // setMessage(NLMessages.getString("Editor_error2310"),
        // IMessageProvider.ERROR);
        // return false;
        // }
        // else
        // {
        // setMessage(NLMessages.getString("Editor_error2400"),
        // IMessageProvider.ERROR);
        // return false;
        // }
        return true;
    }

    /**
     * Load concurrences.
     * @param type the type
     * @param con the con
     * @param ref the ref
     */
    private void loadConcurrences(final int type, final Integer con, final Integer ref) {
        if (_scrollCompCon != null) {
            _scrollCompCon.dispose();
        }
        if (_concurrenceGroup != null) {
            _concurrenceGroup.dispose();
        }
        _scrollCompCon = new ScrolledComposite(_frontComposite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
        _scrollCompCon.setExpandHorizontal(true);
        _scrollCompCon.setExpandVertical(true);

        _scrollCompCon.setLayout(new GridLayout());
        _scrollCompCon.setLayoutData(new GridData());
        ((GridData) _scrollCompCon.getLayoutData()).heightHint = 200;
        ((GridData) _scrollCompCon.getLayoutData()).widthHint = 600;
        // ((GridData) _scrollCompCon.getLayoutData()).verticalAlignment =
        // SWT.FILL;
        ((GridData) _scrollCompCon.getLayoutData()).horizontalAlignment = SWT.FILL;
        ((GridData) _scrollCompCon.getLayoutData()).grabExcessHorizontalSpace = true;
        // ((GridData) _scrollCompCon.getLayoutData()).grabExcessVerticalSpace =
        // true;
        _scrollCompCon.setMinHeight(1);
        _scrollCompCon.setMinWidth(1);

        Composite contentCompCon = new Composite(_scrollCompCon, SWT.NONE);
        contentCompCon.setLayout(new GridLayout());
        // contentCompCon.setSize(530, 550);

        switch (type) {
        case 0:
            break; // nix, normales laden
        case 1: // neue concurrence einfgen
            if (_currentPerson.getConcurrences() == null) {
                _currentPerson.setConcurrences(new Concurrences());
                _currentPerson.getConcurrences().setConcurrences(new Vector<Concurrence>());
            }
            Concurrence concurrence = new Concurrence();
            _currentPerson.getConcurrences().getConcurrences().add(concurrence);
            ValidationStm vs = new ValidationStm();
            vs.setAuthority(_facade.getCurrentUser().getPdrId());
            vs.setReference(new Reference());
            vs.getReference().setAuthority(_facade.getCurrentUser().getPdrId());
            concurrence.getReferences().add(vs);
            break;
        case 2: // concurrence lschen
            _currentPerson.getConcurrences().remove(con);
            break;
        case 3: // neue Reference einfgen
            ValidationStm validationStm = new ValidationStm();
            validationStm.setReference(new Reference());
            _currentPerson.getConcurrences().getConcurrences().get(con).getReferences().add(validationStm);
            break;
        case 4: // Reference lschen
            _currentPerson.getConcurrences().getConcurrences().get(con).getReferences().removeElementAt(ref);
            break;
        default:
            break;
        }

        for (int i = 0; i < _currentPerson.getConcurrences().getConcurrences().size(); i++) {
            int m = i + 1;
            final Concurrence concurrence = _currentPerson.getConcurrences().getConcurrences().get(i);
            _concurrenceGroup = new Group(contentCompCon, SWT.SHADOW_IN);
            _concurrenceGroup.setText(NLMessages.getString("Editor_concurrence") + m); //$NON-NLS-1$
            _concurrenceGroup.setLayoutData(new GridData());
            ((GridData) _concurrenceGroup.getLayoutData()).grabExcessHorizontalSpace = true;
            ((GridData) _concurrenceGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
            GridLayout layout2 = new GridLayout();
            layout2.numColumns = 6;
            layout2.makeColumnsEqualWidth = false;
            _concurrenceGroup.setLayout(layout2);
            _concurrenceGroup.setData("con", i); //$NON-NLS-1$

            Label conLabel = new Label(_concurrenceGroup, SWT.NONE);
            conLabel.setText(NLMessages.getString("Editor_space_withPerson")); //$NON-NLS-1$
            conLabel.setLayoutData(new GridData());

            final Text conID = new Text(_concurrenceGroup, SWT.BORDER);
            conID.setEditable(_mayWrite);
            conID.setBackground(WHITE_COLOR);
            conID.setLayoutData(new GridData());
            ((GridData) conID.getLayoutData()).horizontalAlignment = SWT.FILL;
            ((GridData) conID.getLayoutData()).grabExcessHorizontalSpace = true;
            ((GridData) conID.getLayoutData()).horizontalSpan = 2;
            ((GridData) conID.getLayoutData()).horizontalIndent = 8;

            final ControlDecoration decoConId = new ControlDecoration(conID, SWT.LEFT | SWT.TOP);
            ControlDecoration decoConIdInfo = new ControlDecoration(conID, SWT.LEFT | SWT.BOTTOM);
            decoConIdInfo.setDescriptionText(NLMessages.getString("Editor_concurrence_deco"));
            decoConIdInfo.setImage(FieldDecorationRegistry.getDefault()
                    .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
            decoConIdInfo.setShowOnlyOnFocus(false);

            if (concurrence.getPersonId() != null) {
                Person p = _facade.getPerson(concurrence.getPersonId());

                if (p != null) {
                    decoConId.setImage(null);
                    if (p != null) {
                        conID.setText(p.getDisplayNameWithID());
                    }
                } else {
                    conID.setText(concurrence.getPersonId().toString());
                }
            } else {
                conID.setText(""); //$NON-NLS-1$
                decoConId.setImage(FieldDecorationRegistry.getDefault()
                        .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());
            }

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

                    try {
                        keyStroke = KeyStroke.getInstance("Ctrl+Space"); //$NON-NLS-1$

                        ContentProposalAdapter adapter = new ContentProposalAdapter(conID, new TextContentAdapter(),
                                new FacetContentProposalProvider(_facade.getAllPersonsFacets()), keyStroke,
                                autoActivationCharacters);
                        adapter.setLabelProvider(new AutoCompleteNameLabelProvider());
                        adapter.addContentProposalListener(new IContentProposalListener() {
                            @Override
                            public void proposalAccepted(final IContentProposal proposal) {
                                conID.setText(proposal.getContent());
                                if (((Facet) proposal).getKey() != null) {
                                    concurrence.setPersonId(new PdrId(((Facet) proposal).getKey()));
                                    decoConId.setImage(null);
                                }
                                validate();
                            }
                        });

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

                        e1.printStackTrace();
                    }

                }

                @Override
                public void focusLost(final FocusEvent e) {
                    if (conID.getText() != null && (_facade.getPdrObject(new PdrId(conID.getText())) != null
                            || concurrence.getPersonId() != null)) {
                        decoConId.setDescriptionText(""); //$NON-NLS-1$
                        decoConId.setImage(null);
                    } else {
                        concurrence.setPersonId(null);
                        decoConId.setImage(FieldDecorationRegistry.getDefault()
                                .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                        decoConId.setDescriptionText(NLMessages.getString("Editor_missing_pdrObject"));
                    }
                    validate();

                }
            });

            conID.addKeyListener(new KeyListener() {

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

                @Override
                public void keyReleased(final KeyEvent e) {
                    if (conID.getText().length() == 23) {
                        PdrObject o = _facade.getPdrObject(new PdrId(conID.getText()));
                        if (o != null) {
                            decoConId.setImage(null);
                            concurrence.setPersonId(new PdrId(conID.getText()));
                            conID.setText(o.getDisplayNameWithID());
                        }
                    } else if (conID.getText().trim().length() == 0) {
                        concurrence.setPersonId(null);
                        decoConId.setImage(FieldDecorationRegistry.getDefault()
                                .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                    }
                    // if (conID.getText().length() == 23)
                    // {
                    // concurrence.setPersonId(new PdrId(conID.getText()));
                    // if (concurrence.isValidId())
                    // {
                    // decoConId.setImage(null);
                    // Person p = _facade.getPerson(concurrence.getPersonId());
                    // if (p != null) conID.setText(p.getDisplayNameWithID());
                    // }
                    // else
                    // {
                    // decoConId.setImage(FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());
                    // }
                    // }
                    // else if (conID.getText().length() == 0)
                    // {
                    // concurrence.setPersonId(null);
                    // decoConId.setImage(FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                    // }

                    validate();
                }
            });

            Button setConcurrence = new Button(_concurrenceGroup, SWT.PUSH);
            setConcurrence.setText(NLMessages.getString("Editor_select_dots")); //$NON-NLS-1$
            setConcurrence.setToolTipText(NLMessages.getString("Editor_open_selectObjectDialog_concurrence"));
            setConcurrence.setImage(_imageReg.get(IconsInternal.SEARCH));
            setConcurrence.setEnabled(_mayWrite);
            setConcurrence.setLayoutData(new GridData());
            setConcurrence.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(final SelectionEvent event) {
                    IWorkbench workbench = PlatformUI.getWorkbench();
                    Display display = workbench.getDisplay();
                    Shell shell = new Shell(display);
                    SelectObjectDialog dialog = new SelectObjectDialog(shell, 1);
                    dialog.open();
                    if (_facade.getRequestedId() != null) {
                        concurrence.setPersonId(_facade.getRequestedId()); //$NON-NLS-1$
                        decoConId.setImage(null);
                        PdrObject o = _facade.getPerson(concurrence.getPersonId());
                        if (o != null) {
                            conID.setText(o.getDisplayNameWithID());
                        }
                    }
                    validate();

                }
            });

            final Button delConcurrence = new Button(_concurrenceGroup, SWT.PUSH);
            delConcurrence.setToolTipText(NLMessages.getString("Editor_delete")); //$NON-NLS-1$
            delConcurrence.setImage(_imageReg.get(IconsInternal.CONCURRENCE_REMOVE));
            delConcurrence.setLayoutData(new GridData());
            delConcurrence.setData("num", i); //$NON-NLS-1$
            delConcurrence.setEnabled(_mayWrite);
            delConcurrence.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(final SelectionEvent event) {
                    //               System.out.println("del concurrence " + (Integer) delConcurrence.getData("num")); //$NON-NLS-1$ //$NON-NLS-2$
                    loadConcurrences(2, (Integer) delConcurrence.getData("num"), null); //$NON-NLS-1$
                    validate();

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

            final Button addReference = new Button(_concurrenceGroup, SWT.PUSH);
            addReference.setToolTipText(NLMessages.getString("Editor_addReference")); //$NON-NLS-1$
            addReference.setImage(_imageReg.get(IconsInternal.REFERENCE_ADD));
            addReference.setLayoutData(new GridData());
            addReference.setData("num", i); //$NON-NLS-1$
            addReference.setEnabled(_mayWrite);
            addReference.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(final SelectionEvent event) {
                    //               System.out.println("add reference " + (Integer) addReference.getData("num")); //$NON-NLS-1$ //$NON-NLS-2$
                    loadConcurrences(3, (Integer) addReference.getData("num"), null); //$NON-NLS-1$
                    validate();

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

            if (concurrence.getReferences() != null) {
                for (int j = 0; j < concurrence.getReferences().size(); j++)

                {

                    final ValidationStm validationStm = concurrence.getReferences().get(j);
                    if (validationStm.getReference() != null) {
                        Composite refComposite = new Composite(_concurrenceGroup, SWT.NONE);
                        refComposite.setLayoutData(new GridData());
                        ((GridData) refComposite.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) refComposite.getLayoutData()).grabExcessHorizontalSpace = true;
                        ((GridData) refComposite.getLayoutData()).horizontalSpan = 6;

                        refComposite.setLayout(new GridLayout(9, false));
                        // ((GridLayout) refComposite.getLayout()).numColumns =
                        // 9;
                        refComposite.setData("con", i); //$NON-NLS-1$
                        refComposite.setData("ref", j); //$NON-NLS-1$

                        Label conRef = new Label(refComposite, SWT.NONE);
                        conRef.setText(NLMessages.getString("Editor_reference")); //$NON-NLS-1$
                        conRef.setLayoutData(new GridData());

                        final Text conRefID = new Text(refComposite, SWT.BORDER);
                        conRefID.setData("con", i); //$NON-NLS-1$
                        conRefID.setData("ref", j); //$NON-NLS-1$
                        conRefID.setEditable(_mayWrite);
                        conRefID.setBackground(WHITE_COLOR);
                        conRefID.setLayoutData(new GridData());
                        ((GridData) conRefID.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) conRefID.getLayoutData()).grabExcessHorizontalSpace = true;
                        ((GridData) conRefID.getLayoutData()).horizontalSpan = 6;
                        final ControlDecoration decoConRefId = new ControlDecoration(conRefID, SWT.LEFT | SWT.TOP);
                        final ControlDecoration decoConRefIdInfo = new ControlDecoration(conRefID,
                                SWT.LEFT | SWT.BOTTOM);
                        decoConRefIdInfo.setDescriptionText(NLMessages.getString("Editor_reference_deco"));
                        decoConRefIdInfo.setImage(FieldDecorationRegistry.getDefault()
                                .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION).getImage());
                        decoConRefIdInfo.setShowOnlyOnFocus(false);

                        if (validationStm.getReference().getSourceId() != null) {
                            PdrObject o = _facade.getReference(validationStm.getReference().getSourceId());
                            if (o != null) {
                                conRefID.setText(o.getDisplayNameWithID());
                            }
                        } else {
                            conRefID.setText(""); //$NON-NLS-1$
                            decoConRefId.setImage(FieldDecorationRegistry.getDefault()
                                    .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());
                        }

                        conRefID.addFocusListener(new FocusListener() {

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

                                try {
                                    keyStroke = KeyStroke.getInstance("Ctrl+Space"); //$NON-NLS-1$
                                    ContentProposalAdapter adapter = new ContentProposalAdapter(conRefID,
                                            new TextContentAdapter(),
                                            new FacetContentProposalProvider(_facade.getAllReferenceFacets()),
                                            keyStroke, autoActivationCharacters);
                                    adapter.setLabelProvider(new AutoCompleteNameLabelProvider());
                                    adapter.addContentProposalListener(new IContentProposalListener() {

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

                                    e1.printStackTrace();
                                }

                            }

                            @Override
                            public void focusLost(final FocusEvent e) {
                                if (validationStm.getReference().getSourceId() != null && _facade
                                        .getReference(validationStm.getReference().getSourceId()) != null) {
                                    decoConRefId.setDescriptionText(""); //$NON-NLS-1$
                                    decoConRefId.setImage(null);
                                } else {
                                    validationStm.getReference().setSourceId(null);
                                    decoConRefId.setImage(FieldDecorationRegistry.getDefault()
                                            .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                    decoConRefId
                                            .setDescriptionText(NLMessages.getString("Editor_missing_pdrObject"));
                                }
                                validate();

                            }
                        });
                        conRefID.addKeyListener(new KeyListener() {

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

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

                                validate();
                            }
                        });

                        Button setReference = new Button(refComposite, SWT.PUSH);
                        setReference.setText(NLMessages.getString("Editor_select_dots")); //$NON-NLS-1$
                        setConcurrence
                                .setToolTipText(NLMessages.getString("Editor_open_selectObjectDialog_reference"));
                        setReference.setImage(_imageReg.get(IconsInternal.SEARCH));
                        setReference.setEnabled(_mayWrite);
                        setReference.setLayoutData(new GridData());
                        setReference.addSelectionListener(new SelectionAdapter() {

                            @Override
                            public void widgetSelected(final SelectionEvent event) {
                                IWorkbench workbench = PlatformUI.getWorkbench();
                                Display display = workbench.getDisplay();
                                Shell shell = new Shell(display);
                                SelectObjectDialog dialog = new SelectObjectDialog(shell, 2);
                                dialog.open();
                                if (_facade.getRequestedId() != null) {
                                    conRefID.setText(_facade.getRequestedId().toString());
                                    validationStm.getReference().setSourceId(_facade.getRequestedId()); //$NON-NLS-1$
                                    if (validationStm.getReference().isValidId()) {
                                        decoConRefId.setImage(null);
                                        decoConRefIdInfo.setImage(FieldDecorationRegistry.getDefault()
                                                .getFieldDecoration(FieldDecorationRegistry.DEC_INFORMATION)
                                                .getImage());
                                        ViewHelper.setDecoInfo(decoConRefIdInfo,
                                                validationStm.getReference().getSourceId());
                                    }
                                } else {
                                    decoConRefId.setImage(FieldDecorationRegistry.getDefault()
                                            .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                    decoConRefIdInfo.setImage(null);
                                }
                                validate();

                            }
                        });
                        // Label bl = new Label (refComposite, SWT.NONE);
                        // bl.setLayoutData(new GridData());
                        // ((GridData) bl.getLayoutData()).horizontalSpan = 1;

                        if (j > 0) {
                            final Button delReference = new Button(refComposite, SWT.PUSH);
                            delReference.setToolTipText(NLMessages.getString("Editor_deleteRef")); //$NON-NLS-1$
                            delReference.setImage(_imageReg.get(IconsInternal.REFERENCE_REMOVE));
                            delReference.setLayoutData(new GridData());
                            delReference.setData("con", i); //$NON-NLS-1$
                            delReference.setData("ref", j); //$NON-NLS-1$
                            delReference.setEnabled(_mayWrite);
                            delReference.addSelectionListener(new SelectionAdapter() {
                                @Override
                                public void widgetSelected(final SelectionEvent event) {
                                    loadConcurrences(4, (Integer) delReference.getData("con"), //$NON-NLS-1$
                                            (Integer) delReference.getData("ref")); //$NON-NLS-1$
                                    validate();

                                }
                            });
                            delReference.setLayoutData(new GridData());
                        } else {
                            ((GridData) setReference.getLayoutData()).horizontalSpan = 2;
                        }

                        Label conInternalLabel = new Label(refComposite, SWT.NONE);
                        conInternalLabel.setText(NLMessages.getString("Editor_internal")); //$NON-NLS-1$
                        conInternalLabel.setLayoutData(new GridData());

                        final Text conInternal = new Text(refComposite, SWT.BORDER);
                        conInternal.setEditable(_mayWrite);
                        conInternal.setBackground(WHITE_COLOR);
                        if (validationStm.getReference().getInternal() != null) {
                            conInternal.setText(validationStm.getReference().getInternal());
                        } else {
                            conInternal.setText(""); //$NON-NLS-1$
                        }

                        conInternal.setLayoutData(new GridData());
                        ((GridData) conInternal.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) conInternal.getLayoutData()).grabExcessHorizontalSpace = true;
                        ((GridData) conInternal.getLayoutData()).horizontalSpan = 8;
                        conInternal.addFocusListener(new FocusAdapter() {
                            @Override
                            public void focusLost(final FocusEvent e) {
                                validationStm.getReference().setInternal(conInternal.getText()); //$NON-NLS-1$
                            }
                        });

                        Label conQuallabel = new Label(refComposite, SWT.NONE);
                        conQuallabel.setText(NLMessages.getString("Editor_quality")); //$NON-NLS-1$
                        conQuallabel.setLayoutData(new GridData());
                        final ControlDecoration decoConQual = new ControlDecoration(conQuallabel,
                                SWT.LEFT | SWT.TOP);

                        SelectionListener conListener = new SelectionAdapter() {
                            @Override
                            public void widgetDefaultSelected(final SelectionEvent e) {
                            }

                            @Override
                            public void widgetSelected(final SelectionEvent e) {
                                final String qual = (String) ((Button) e.getSource()).getData("text");
                                //                          System.out.println("ref qual: " + qual); //$NON-NLS-1$
                                validationStm.getReference().setQuality(qual); //$NON-NLS-1$
                                if (validationStm.getReference().isValidQuality()) {
                                    decoConQual.setImage(null);
                                } else {
                                    decoConQual.setImage(FieldDecorationRegistry.getDefault()
                                            .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR).getImage());
                                }
                                validate();
                            }
                        };
                        final Button[] conRadios = new Button[AEConstants.REFRENCEQUALITIES.length];

                        for (int k = 0; k < AEConstants.REFRENCEQUALITIES.length; k++) {
                            conRadios[k] = new Button(refComposite, SWT.RADIO);
                            conRadios[k]
                                    .setText(NLMessages.getString("Editor_" + AEConstants.REFRENCEQUALITIES[k]));
                            conRadios[k].setData("text", AEConstants.REFRENCEQUALITIES[k]);

                            conRadios[k].addSelectionListener(conListener);
                            conRadios[k].setEnabled(_mayWrite);
                            conRadios[k].setLayoutData(new GridData());
                        }

                        if (validationStm.getReference().getQuality() != null) {
                            ViewHelper.setRadioByString(conRadios, validationStm.getReference().getQuality());
                        } else {
                            decoConQual.setImage(FieldDecorationRegistry.getDefault()
                                    .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());
                        }

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

                        Label conAuthorityLabel = new Label(refComposite, SWT.NONE);
                        conAuthorityLabel.setText(NLMessages.getString("Editor_authority")); //$NON-NLS-1$
                        conAuthorityLabel.setLayoutData(new GridData());
                        ((GridData) conAuthorityLabel.getLayoutData()).horizontalAlignment = SWT.RIGHT;

                        final Text conAuthority = new Text(refComposite, SWT.BORDER | SWT.READ_ONLY);
                        conAuthority.setEditable(false);

                        if (validationStm.getAuthority() != null) {
                            User u = null;
                            try {
                                u = _facade.getUserManager().getUserById(validationStm.getAuthority().toString());
                            } catch (Exception e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                            }
                            if (u != null) {
                                conAuthority.setText(u.getDisplayName());
                            } else {
                                conAuthority.setText(validationStm.getAuthority().toString());
                            }
                        } else {
                            conAuthority.setText(_facade.getCurrentUser().getPdrId().toString());
                            validationStm.setAuthority(_facade.getCurrentUser().getPdrId());
                        }

                        conAuthority.setLayoutData(new GridData());
                        ((GridData) conAuthority.getLayoutData()).horizontalAlignment = SWT.FILL;
                        ((GridData) conAuthority.getLayoutData()).horizontalSpan = 2;

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

                        Label refauthority = new Label(refComposite, SWT.NONE);

                        if (validationStm.getAuthority() != null) {
                            User u = null;
                            try {
                                u = _facade.getUserManager().getUserById(validationStm.getAuthority().toString());
                            } catch (Exception e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                            }
                            if (u != null) {
                                refauthority
                                        .setText(NLMessages.getString("Editor_user") + ": " + u.getDisplayName());
                            } else {
                                refauthority.setText(NLMessages.getString("Editor_user") + ": "
                                        + validationStm.getAuthority().toString());
                            }
                        } else {
                            refauthority.setText(NLMessages.getString("Editor_user") + ": "
                                    + _facade.getCurrentUser().getPdrId().toString());
                            validationStm.setAuthority(_facade.getCurrentUser().getPdrId());
                        }

                        refauthority.setLayoutData(new GridData());
                        ((GridData) refauthority.getLayoutData()).horizontalSpan = 3;

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

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

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

                    }
                }
                _concurrenceGroup.pack();
                _concurrenceGroup.layout();
            }

        }

        contentCompCon.layout();
        _scrollCompCon.setContent(contentCompCon);
        Point point = contentCompCon.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
        Point mp = _mainTabFolder.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
        if (point.x > mp.x - 20) {
            point.x = mp.x - 20;
        }
        _scrollCompCon.setMinSize(point);
        _scrollCompCon.layout();
        contentCompCon.pack();
        contentCompCon.layout();
        _frontComposite.redraw();
        _frontComposite.layout();

    }

    /**
     * Load identifiers.
     * @param add the add
     * @param del the del
     */
    private void loadIdentifiers(final boolean add, final Integer del) {
        if (_scrollCompIdentifier != null) {
            _scrollCompIdentifier.dispose();
        }
        _scrollCompIdentifier = new ScrolledComposite(_identifierComposite,
                SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
        _scrollCompIdentifier.setExpandHorizontal(true);
        _scrollCompIdentifier.setExpandVertical(true);
        _scrollCompIdentifier.setMinSize(SWT.DEFAULT, SWT.DEFAULT);
        _scrollCompIdentifier.setLayoutData(new GridData());
        ((GridData) _scrollCompIdentifier.getLayoutData()).heightHint = 300;
        ((GridData) _scrollCompIdentifier.getLayoutData()).widthHint = 580;

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

        _scrollCompIdentifier.setLayout(new GridLayout());

        Composite contentCompIdentifier = new Composite(_scrollCompIdentifier, SWT.NONE);
        contentCompIdentifier.setLayout(new GridLayout());
        _scrollCompIdentifier.setContent(contentCompIdentifier);

        if (add && _currentPerson.getIdentifiers() == null) {
            _currentPerson.setIdentifiers(new Identifiers());
            _currentPerson.getIdentifiers().setIdentifiers(new Vector<Identifier>());
            _currentPerson.getIdentifiers().getIdentifiers().add(new Identifier());
        } else if (add) {
            _currentPerson.getIdentifiers().getIdentifiers().add(new Identifier());

        }
        if (del != null) {
            //         System.out.println("old size " + _currentPerson.getIdentifiers().getIdentifiers().size()); //$NON-NLS-1$
            _currentPerson.getIdentifiers().remove(del);
        }

        for (int i = 0; i < _currentPerson.getIdentifiers().getIdentifiers().size(); i++) {
            int m = i + 1;
            final Identifier identifier = _currentPerson.getIdentifiers().getIdentifiers().get(i);
            final Group idGroup = new Group(contentCompIdentifier, SWT.SHADOW_IN);
            idGroup.setText(NLMessages.getString("Editor_externalIdentifiers") + m); //$NON-NLS-1$
            idGroup.setLayoutData(new GridData());
            idGroup.setLayout(new GridLayout());
            idGroup.setData("num", i); //$NON-NLS-1$
            ((GridData) idGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
            ((GridData) idGroup.getLayoutData()).grabExcessHorizontalSpace = true;
            ((GridLayout) idGroup.getLayout()).numColumns = 5;
            ((GridLayout) idGroup.getLayout()).makeColumnsEqualWidth = false;

            // final Combo externalIdentifierCombo = new Combo(idGroup,
            // SWT.DROP_DOWN | SWT.READ_ONLY);
            // externalIdentifierCombo.setLayoutData(new GridData());
            // externalIdentifierCombo.setEnabled(_mayWrite);
            // externalIdentifierCombo.setBackground(WHITE_COLOR);
            // // ((GridData)
            // // externalIdentifierCombo.getLayoutData()).horizontalAlignment
            // // = SWT.FILL;
            // // ((GridData)
            // //
            // externalIdentifierCombo.getLayoutData()).grabExcessHorizontalSpace
            // // = true;
            // for (String sdt : AEConstants.EXTERNAL_IDENTIFIER_PROVIDER)
            // {
            // externalIdentifierCombo.add(sdt);
            // }

            final Combo idProviderCombo = new Combo(idGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
            idProviderCombo.setEnabled(_mayWrite);
            idProviderCombo.setBackground(WHITE_COLOR);
            final ComboViewer idProviderComboViewer = new ComboViewer(idProviderCombo);
            idProviderComboViewer.setContentProvider(new MarkupContentProvider());
            idProviderComboViewer.setLabelProvider(new MarkupLabelProvider());

            idProviderCombo.setLayoutData(new GridData());
            ((GridData) idProviderCombo.getLayoutData()).grabExcessHorizontalSpace = true;
            ((GridData) idProviderCombo.getLayoutData()).horizontalAlignment = SWT.FILL;
            ((GridData) idProviderCombo.getLayoutData()).horizontalIndent = 6;
            if (_facade.getConfigs().get(_configProvider) != null
                    && _facade.getConfigs().get(_configProvider).getUsage() != null && !_facade.getConfigs()
                            .get(_configProvider).getUsage().getIdentifiers().getChildren().isEmpty()) {
                ConfigData cd = _facade.getConfigs().get(_configProvider).getUsage().getIdentifiers();
                idProviderComboViewer.setInput(cd.getChildren());

            }
            idProviderComboViewer.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) {
                        identifier.setProvider(cp.getValue());
                        validate();
                    }

                }

            });

            if (identifier.getProvider() != null) {
                ViewHelper.setComboViewerByString(idProviderComboViewer, identifier.getProvider(), true);
            } else if (idProviderCombo.getItemCount() > 0) {
                idProviderComboViewer.setSelection(new StructuredSelection(idProviderComboViewer.getElementAt(0)));
            }

            final Text idText = new Text(idGroup, SWT.BORDER);
            idText.setLayoutData(new GridData());
            idText.setEditable(_mayWrite);
            idText.setBackground(WHITE_COLOR);
            ((GridData) idText.getLayoutData()).horizontalSpan = 3;
            ((GridData) idText.getLayoutData()).horizontalAlignment = SWT.FILL;
            ((GridData) idText.getLayoutData()).grabExcessHorizontalSpace = true;
            ((GridData) idText.getLayoutData()).horizontalIndent = 8;

            final ControlDecoration decoIdent = new ControlDecoration(idText, SWT.LEFT | SWT.TOP);
            if (identifier.getIdentifier() != null) {
                idText.setText(identifier.getIdentifier()); //$NON-NLS-1$
            } else {
                idText.setText(""); //$NON-NLS-1$
                decoIdent.setImage(FieldDecorationRegistry.getDefault()
                        .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());
            }

            idText.addFocusListener(new FocusAdapter() {
                @Override
                public void focusLost(final FocusEvent e) {
                    identifier.setIdentifier(idText.getText()); //$NON-NLS-1$
                    if (identifier.isValidId()) {
                        decoIdent.setImage(null);
                    } else {
                        decoIdent.setImage(FieldDecorationRegistry.getDefault()
                                .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());
                    }
                    validate();
                }
            });
            idText.addKeyListener(new KeyListener() {

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

                @Override
                public void keyReleased(final KeyEvent e) {
                    //               System.out.println("key released"); //$NON-NLS-1$
                    identifier.setIdentifier(idText.getText()); //$NON-NLS-1$
                    if (identifier.isValidId()) {
                        decoIdent.setImage(null);
                    } else {
                        decoIdent.setImage(FieldDecorationRegistry.getDefault()
                                .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());
                    }
                    validate();
                }
            });

            final Button showData = new Button(idGroup, SWT.PUSH);
            showData.setText(NLMessages.getString("Editor_showData")); //$NON-NLS-1$
            showData.setToolTipText(NLMessages.getString("Editor_showData_tooltip"));
            showData.setImage(_imageReg.get(IconsInternal.BROWSER));
            showData.setLayoutData(new GridData());
            showData.setData("num", i); //$NON-NLS-1$
            showData.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(final SelectionEvent event) {

                    IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench()
                            .getService(IHandlerService.class);
                    _facade.setRequestedIdentifierType(identifier.getProvider()); //$NON-NLS-1$
                    _facade.setRequestedIdentifier(identifier.getIdentifier()); //$NON-NLS-1$
                    try {
                        handlerService.executeCommand("org.bbaw.pdr.ae.view.identifiers.commands" + //$NON-NLS-1$
                        ".OpenBrowserDialog", null); //$NON-NLS-1$
                    } catch (ExecutionException e) {
                        e.printStackTrace();
                    } catch (NotDefinedException e) {
                        e.printStackTrace();
                    } catch (NotEnabledException e) {
                        e.printStackTrace();
                    } catch (NotHandledException e) {
                        e.printStackTrace();
                    }
                }
            });

            Label qualityLabel = new Label(idGroup, SWT.NONE);
            qualityLabel.setText(""); //$NON-NLS-1$
            qualityLabel.setLayoutData(new GridData());
            final ControlDecoration decoIdentQual = new ControlDecoration(qualityLabel, SWT.LEFT | SWT.TOP);
            // final String qual = "";
            SelectionListener idListener = new SelectionAdapter() {
                @Override
                public void widgetDefaultSelected(final SelectionEvent e) {

                    validate();

                }

                @Override
                public void widgetSelected(final SelectionEvent e) {
                    final String qual = (String) ((Button) e.getSource()).getData("text");
                    //                 System.out.println("pnd qual: " + pndQual); //$NON-NLS-1$
                    identifier.setQuality(qual); //$NON-NLS-1$
                    if (identifier.isValidQuality()) {
                        decoIdentQual.setImage(null);
                    } else {
                        decoIdentQual.setImage(FieldDecorationRegistry.getDefault()
                                .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());
                    }
                    validate();
                }
            };

            final Button[] radios = new Button[_ratings.length];

            for (int j = 0; j < _ratings.length; j++) {
                radios[j] = new Button(idGroup, SWT.RADIO);
                radios[j].setText(NLMessages.getString("Editor_" + _ratings[j]));
                radios[j].setData("text", _ratings[j]);
                radios[j].setEnabled(_mayWrite);
                radios[j].setLayoutData(new GridData());
                radios[j].addSelectionListener(idListener);
            }

            if (identifier.getQuality() != null) {
                ViewHelper.setRadioByString(radios, identifier.getQuality());
            } else {
                decoIdentQual.setImage(FieldDecorationRegistry.getDefault()
                        .getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED).getImage());

            }
            Label b = new Label(idGroup, SWT.NONE);
            b.setText(""); //$NON-NLS-1$
            b.setLayoutData(new GridData());
            Label idAuthorityLabel = new Label(idGroup, SWT.NONE);
            idAuthorityLabel.setText(NLMessages.getString("Editor_createdBy")); //$NON-NLS-1$
            idAuthorityLabel.setLayoutData(new GridData());

            final Text idAuthorityText = new Text(idGroup, SWT.BORDER | SWT.READ_ONLY);
            idAuthorityText.setData("num", i); //$NON-NLS-1$

            if (identifier.getAuthority() != null) {
                User u = null;
                try {
                    u = _facade.getUserManager().getUserById(identifier.getAuthority().toString());
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                if (u != null) {
                    idAuthorityText.setText(u.getDisplayName());
                } else {
                    idAuthorityText.setText(identifier.getAuthority().toString());
                }
            } else {
                idAuthorityText.setText(_facade.getCurrentUser().getPdrId().toString());
                identifier.setAuthority(_facade.getCurrentUser().getPdrId());
            }

            idAuthorityText.setLayoutData(new GridData());
            ((GridData) idAuthorityText.getLayoutData()).horizontalSpan = 3;
            ((GridData) idAuthorityText.getLayoutData()).horizontalAlignment = SWT.FILL;
            ((GridData) idAuthorityText.getLayoutData()).grabExcessHorizontalSpace = true;
            ((GridData) idAuthorityText.getLayoutData()).horizontalIndent = 8;
            final Button delIdentifier = new Button(idGroup, SWT.PUSH);
            delIdentifier.setText(NLMessages.getString("Editor_delete")); //$NON-NLS-1$
            delIdentifier.setToolTipText(NLMessages.getString("Editor_remove_identifier_tooltip"));
            delIdentifier.setImage(_imageReg.get(IconsInternal.IDENTIFIER_REMOVE));
            delIdentifier.setLayoutData(new GridData());
            delIdentifier.setData("num", i); //$NON-NLS-1$
            delIdentifier.setEnabled(_mayWrite);

            delIdentifier.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(final SelectionEvent event) {
                    //               System.out.println("del identifier " + (Integer) delIdentifier.getData("num")); //$NON-NLS-1$ //$NON-NLS-2$
                    loadIdentifiers(false, (Integer) delIdentifier.getData("num")); //$NON-NLS-1$
                    validate();

                }
            });
            idGroup.layout();
            idGroup.pack();
        } // idGroup
        contentCompIdentifier.redraw();
        contentCompIdentifier.layout();

        _scrollCompIdentifier.setContent(contentCompIdentifier);
        Point point = contentCompIdentifier.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
        Point mp = _mainTabFolder.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
        if (point.x > mp.x - 20) {
            point.x = mp.x - 20;
        }
        _scrollCompIdentifier.setMinSize(point);
        _scrollCompIdentifier.layout();
        _identifierComposite.redraw();
        _identifierComposite.layout();

        // _scrollCompIdentifier.setSize(DIALOG_DEFAULT_BOUNDS,
        // DIALOG_DEFAULT_BOUNDS);
        _identifierComposite.update();
    }

    /**
     * Load relation p.
     * @param selectedPerson the selected person
     */
    private void loadRelationP(final Person selectedPerson) {
        _conID1.setText(selectedPerson.getPdrId().toString());
    }

    /**
     * loads values into fields.
     * @throws XQException
     */
    private void loadValues() {
        Revision revision = new Revision();
        revision.setRevisor(new String(_facade.getCurrentUser().getDisplayName()));
        revision.setTimeStamp(_facade.getCurrentDate());
        revision.setAuthority(_facade.getCurrentUser().getPdrId().clone());
        if (_currentPerson.isNew()) {
            revision.setRef(0);
            Record record = new Record();
            record.getRevisions().add(revision);
            _currentPerson.setRecord(record);
        }

        _mayWrite = new UserRichtsChecker().mayWrite(_currentPerson);
        _addConcurrence.setEnabled(_mayWrite);
        _addIdentifier.setEnabled(_mayWrite);
        if (!_mayWrite) {
            setMessage(NLMessages.getString("Editor_message_noWriting_person"));
        }
        if (_currentPerson != null) {

            //         System.out.println("im person editor person not null"); //$NON-NLS-1$
            // Front
            if (_currentPerson.getPdrId() != null) {
                _pdrID.setText(_currentPerson.getPdrId().toString());
                // _pdrID.pack();
            }

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

                if (_currentPerson.getRecord().getRevisions().size() > 1) {
                    if (_currentPerson.getRecord().getRevisions().lastElement().getAuthority() != null) {

                        _creatorNameText.setText(_facade.getObjectDisplayName(
                                _currentPerson.getRecord().getRevisions().lastElement().getAuthority()));

                    } else {
                        _revisorNameText.setText(NLMessages.getString("Editor_revisor_name_notFound"));
                    }
                    _revisionTimeText.setText(_adminDateFormat
                            .format(_currentPerson.getRecord().getRevisions().lastElement().getTimeStamp()));
                    // revisorName.pack();
                    // _revisionTimeText.pack();

                    // String ttHist = NLMessages.getString("Editor_createdBy")
                    //               + _currentPerson.getRecord().getRevisions().firstElement().getAuthority().toString() //$NON-NLS-1$
                    // + NLMessages.getString("Editor_date")
                    // + adminDateFormat.format(_currentPerson.getRecord()
                    //               .getRevisions().firstElement().getTimeStamp()) + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
                    // for (int i = 1; i <
                    // _currentPerson.getRecord().getRevisions().size(); i++)
                    // {
                    // if
                    // (_currentPerson.getRecord().getRevisions().get(i).getAuthority()
                    // != null
                    // &&
                    // _currentPerson.getRecord().getRevisions().get(i).getTimeStamp()
                    // != null)
                    // {
                    //                        ttHist = ttHist + i + NLMessages.getString("Editor_revisionedBy"); //$NON-NLS-1$
                    // String id =
                    // _currentPerson.getRecord().getRevisions().get(i).getAuthority().toString();
                    // User user = null;
                    // try {
                    // user = userManager.getUserById(id);
                    // } catch (XQException e) {
                    // id =
                    // NLMessages.getString("Editor_user_name_notFound + id");
                    // e.printStackTrace();
                    // }
                    // if (user != null) ttHist += user.getDisplayName();
                    // else ttHist += id;
                    // ttHist += NLMessages
                    // .getString("Editor_space_date_space") + adminDateFormat
                    //               .format(_currentPerson.getRecord().getRevisions().get(i).getTimeStamp()) + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
                    // }
                    // }
                    final RevisionHistoryToolTip historyToolTip = new RevisionHistoryToolTip(_historyLabel,
                            _currentPerson.getRecord());
                    historyToolTip.setShift(new Point(-25, -25));
                    historyToolTip.setPopupDelay(0);
                    historyToolTip.setHideOnMouseDown(true);
                    historyToolTip.activate();
                    _historyLabel.addMouseListener(new MouseListener() {

                        @Override
                        public void mouseDoubleClick(final MouseEvent e) {
                        }

                        @Override
                        public void mouseDown(final MouseEvent e) {
                            historyToolTip.show(new Point(e.x, e.y));
                        }

                        @Override
                        public void mouseUp(final MouseEvent e) {
                            historyToolTip.show(new Point(e.x, e.y));
                        }
                    });
                    // _historyLabel.setToolTipText(ttHist);

                }
            } else {
                _creatorNameText.setText(_facade.getCurrentUser().getDisplayName());
                _creationTimeText.setText(_adminDateFormat.format(_facade.getCurrentDate()));
                _currentPerson.setNew(true);

            }
            // _creationTimeText.setText(cp.getRecord().getRevisions().get(0).getTimeStamp());

            // Identifier
            if (_currentPerson.getIdentifiers() != null) {
                loadIdentifiers(false, null);
            }

            // Concurrence
            if (_currentPerson.getConcurrences() != null) {
                loadConcurrences(0, null, null);

            }

            // new RightsChecker();
            // if(!rc._mayWrite(_currentPerson)){
            // if(false){
            //
            // pndID.setEnabled(false);
            //
            // for(int i=0;i<3;i++){
            // pndRadios[i].setEnabled(false);
            // }
            // lccnID.setEnabled(false);
            // for(int i=0;i<3;i++){
            // lccnRadios[i].setEnabled(false);
            // }
            // iccuID.setEnabled(false);
            // for(int i=0;i<3;i++){
            // iccuRadios[i].setEnabled(false);
            // }
            // viafID.setEnabled(false);
            // for(int i=0;i<3;i++){
            // viafRadios[i].setEnabled(false);
            // }
            // _conComposite.setEnabled(false);
            // _rightsComposite.setEnabled(false);
            // setMessage(NLMessages.getString("Editor_errorMessageNoWritingRights"),
            // IMessageProvider.INFORMATION);
            // }else{
            // _identifierComposite.setEnabled(true);
            // _conComposite.setEnabled(true);
            // _rightsComposite.setEnabled(true);
            // }

        } else { // if currentPerson = null, create new person.
            _creatorNameText.setText(_facade.getCurrentUser().getDisplayName()); //$NON-NLS-1$
            _creationTimeText.setText(_facade.getCurrentDateAsString());
            setMessage("", IMessageProvider.INFORMATION); //$NON-NLS-1$

        }

        validate();

    }

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

        _currentPerson.setDirty(true);

        // hier wird injestet
        try {
            _facade.savePerson(_currentPerson);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // hier wird die zuvor geclonte person fr die person mit der gleichen
        // id im allperson
        // vector eingetauscht und auerdem als currentPerson gesetzt.

    }

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

    @Override
    public final void update(final Observable o, final Object arg) {
        if (arg.equals("newSelectedPerson")) //$NON-NLS-1$
        {
            if (_facade.getSelectedPerson() != null) {
                loadRelationP(_facade.getSelectedPerson());
            }
        }
    }

    /**
     * Validate.
     */
    private void validate() {
        boolean valid = true;

        if (_currentPerson.getConcurrences() != null && _currentPerson.getConcurrences().isValid()) {
            _frontTabItem.setImage(_imageReg.get(IconsInternal.CONCURRENCE));

        } else if (_currentPerson.getConcurrences() != null && !_currentPerson.getConcurrences().isValid()) {
            _frontTabItem.setImage(_imageReg.get(IconsInternal.CONCURRENCE_ERROR));
            valid = false;
        } else {
            _frontTabItem.setImage(_imageReg.get(IconsInternal.CONCURRENCE));
        }
        if (_currentPerson.getIdentifiers() != null && _currentPerson.getIdentifiers().isValid()) {
            _identifierTabItem.setImage(_imageReg.get(IconsInternal.IDENTIFIER));

        } else if (_currentPerson.getIdentifiers() != null && !_currentPerson.getIdentifiers().isValid()) {
            _identifierTabItem.setImage(_imageReg.get(IconsInternal.IDENTIFIER_ERROR));
            valid = false;
        } else {
            _identifierTabItem.setImage(_imageReg.get(IconsInternal.IDENTIFIER));
        }
        _saveButton.setEnabled(valid && _mayWrite);
    }

}