/**
* 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, Jägerstr. 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.concurrences.view;
import java.text.ParseException;
import java.util.Observable;
import java.util.Observer;
import java.util.Vector;
import javax.xml.stream.XMLStreamException;
import org.bbaw.pdr.ae.common.AEConstants;
import org.bbaw.pdr.ae.common.NLMessages;
import org.bbaw.pdr.ae.control.facade.Facade;
import org.bbaw.pdr.ae.control.interfaces.AMainSearcher;
import org.bbaw.pdr.ae.control.interfaces.IDBManager;
import org.bbaw.pdr.ae.metamodel.PdrDate;
import org.bbaw.pdr.ae.model.ComplexName;
import org.bbaw.pdr.ae.model.Person;
import org.bbaw.pdr.ae.model.search.Criteria;
import org.bbaw.pdr.ae.model.search.PdrQuery;
import org.bbaw.pdr.ae.view.concurrences.control.ConcurrenceManager;
import org.bbaw.pdr.ae.view.concurrences.internal.Activator;
import org.bbaw.pdr.ae.view.control.comparator.PdrObjectViewComparator;
import org.bbaw.pdr.ae.view.control.provider.PersonVectorContentProvider;
import org.bbaw.pdr.ae.view.control.provider.TableLabelProvider;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.progress.UIJob;
/**
* The Class ConcurrenceHeadView.
* @author Christoph Plutte
*/
public class ConcurrenceHeadView extends ViewPart implements Observer
{
/** _facade singleton instance. */
private Facade _facade = Facade.getInstanz();
/** MainSearcher. */
private AMainSearcher _mainSearcher = _facade.getMainSearcher();
/** Logger. */
private ILog _iLogger = AEConstants.ILOGGER;
/** The concurrence manager. */
private ConcurrenceManager _concurrenceManager = new ConcurrenceManager();
/** The main sash form. */
private SashForm _mainSashForm;
/** The left composite. */
private Composite _leftComposite;
/** The right composite. */
private Composite _rightComposite;
/** The left button composite. */
private Composite _leftButtonComposite;
/** The right button composite. */
private Composite _rightButtonComposite;
/** The left group. */
private Group _leftGroup;
/** The right group. */
private Group _rightGroup;
/** The merge button left. */
private Button _mergeButtonLeft;
/** The merge button right. */
private Button _mergeButtonRight;
/** The set concurrence. */
private Button _setConcurrence;
/** The search button. */
private Button _searchButton;
/** The concurring person text. */
private Text _concurringPersonText;
/** The compare name. */
private boolean _compareName;
/** The compare birth. */
private boolean _compareBirth;
/** The compare death. */
private boolean _compareDeath;
/** The compare desc. */
private boolean _compareDesc;
/** The compare fuzzy. */
private boolean _compareFuzzy;
/** The person query. */
private PdrQuery _personQuery;
/** The person table viewer. */
private TableViewer _personTableViewer;
/** The parent shell. */
private Shell _parentShell;
/**
* Instantiates a new concurrence head view.
*/
public ConcurrenceHeadView()
{
}
@Override
public final void createPartControl(final Composite parent)
{
parent.setLayout(new GridLayout());
_facade.addObserver(this);
_mainSashForm = new SashForm(parent, SWT.HORIZONTAL);
_mainSashForm.setLayoutData(new GridData());
((GridData) _mainSashForm.getLayoutData()).horizontalAlignment = SWT.FILL;
((GridData) _mainSashForm.getLayoutData()).verticalAlignment = SWT.FILL;
((GridData) _mainSashForm.getLayoutData()).grabExcessHorizontalSpace = true;
((GridData) _mainSashForm.getLayoutData()).grabExcessVerticalSpace = true;
_leftComposite = new Composite(_mainSashForm, SWT.NONE);
_leftComposite.setLayout(new GridLayout());
((GridLayout) _leftComposite.getLayout()).numColumns = 1;
((GridLayout) _leftComposite.getLayout()).makeColumnsEqualWidth = false;
_leftComposite.setLayoutData(new GridData());
((GridData) _leftComposite.getLayoutData()).horizontalAlignment = SWT.FILL;
((GridData) _leftComposite.getLayoutData()).verticalAlignment = SWT.FILL;
((GridData) _leftComposite.getLayoutData()).grabExcessHorizontalSpace = true;
((GridData) _leftComposite.getLayoutData()).grabExcessVerticalSpace = true;
_leftGroup = new Group(_leftComposite, SWT.NONE);
_leftGroup.setText(NLMessages.getString("View_select_criteria_comparision"));
_leftGroup.setLayout(new GridLayout());
((GridLayout) _leftGroup.getLayout()).numColumns = 11;
((GridLayout) _leftGroup.getLayout()).makeColumnsEqualWidth = false;
_leftGroup.setLayoutData(new GridData());
((GridData) _leftGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
((GridData) _leftGroup.getLayoutData()).verticalAlignment = SWT.FILL;
((GridData) _leftGroup.getLayoutData()).grabExcessHorizontalSpace = true;
((GridData) _leftGroup.getLayoutData()).grabExcessVerticalSpace = true;
Label nameLabel = new Label(_leftGroup, SWT.NONE);
nameLabel.setText(NLMessages.getString("View_name"));
nameLabel.setLayoutData(new GridData());
Button nameButton = new Button(_leftGroup, SWT.CHECK);
nameButton.setLayoutData(new GridData());
nameButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent event)
{
_compareName = !_compareName;
}
});
Label birthLabel = new Label(_leftGroup, SWT.NONE);
birthLabel.setText("Birth");
birthLabel.setLayoutData(new GridData());
((GridData) birthLabel.getLayoutData()).horizontalIndent = 12;
Button birthButton = new Button(_leftGroup, SWT.CHECK);
birthButton.setLayoutData(new GridData());
birthButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent event)
{
_compareBirth = !_compareBirth;
}
});
Label deathLabel = new Label(_leftGroup, SWT.NONE);
deathLabel.setText("Death");
deathLabel.setLayoutData(new GridData());
((GridData) deathLabel.getLayoutData()).horizontalIndent = 12;
Button deathButton = new Button(_leftGroup, SWT.CHECK);
deathButton.setLayoutData(new GridData());
deathButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent event)
{
_compareDeath = !_compareDeath;
}
});
Label descLabel = new Label(_leftGroup, SWT.NONE);
descLabel.setText("Description");
descLabel.setLayoutData(new GridData());
((GridData) descLabel.getLayoutData()).horizontalIndent = 12;
Button descButton = new Button(_leftGroup, SWT.CHECK);
descButton.setLayoutData(new GridData());
descButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent event)
{
_compareDesc = !_compareDesc;
}
});
Label fuzzyLabel = new Label(_leftGroup, SWT.NONE);
fuzzyLabel.setText(NLMessages.getString("View_fuzzy"));
fuzzyLabel.setLayoutData(new GridData());
((GridData) fuzzyLabel.getLayoutData()).horizontalIndent = 12;
Button fuzzyButton = new Button(_leftGroup, SWT.CHECK);
fuzzyButton.setLayoutData(new GridData());
fuzzyButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent event)
{
_compareFuzzy = !_compareFuzzy;
}
});
_searchButton = new Button(_leftGroup, SWT.PUSH);
_searchButton.setLayoutData(new GridData());
_searchButton.setText(NLMessages.getString("View_search"));
_searchButton.setEnabled(_facade.getCurrentPerson() != null);
_searchButton.setToolTipText(NLMessages.getString("View_search_concurrences_tooltip"));
_searchButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent event)
{
_personQuery = new PdrQuery();
_personQuery.setType(1);
_personQuery.setCriterias(new Vector<Criteria>());
Criteria c;
Person currentPerson = _facade.getCurrentPerson();
if (_compareName && currentPerson.getBasicPersonData() != null
&& currentPerson.getBasicPersonData().getComplexNames() != null)
{
for (ComplexName cn : currentPerson.getBasicPersonData().getComplexNames())
{
if (cn.getForeName() != null && cn.getForeName().trim().length() > 0)
{
c = new Criteria();
c.setType("tagging"); //$NON-NLS-1$
c.setFuzzy(_compareFuzzy);
c.setOperator("OR"); //$NON-NLS-1$
c.setCrit0("ALL"); //$NON-NLS-1$
c.setCrit1("ALL"); //$NON-NLS-1$
c.setSearchText(cn.getForeName().trim());
_personQuery.getCriterias().add(c);
}
if (cn.getSurName() != null && cn.getSurName().trim().length() > 0)
{
c = new Criteria();
c.setType("tagging"); //$NON-NLS-1$
c.setFuzzy(_compareFuzzy);
c.setOperator("OR"); //$NON-NLS-1$
c.setCrit0("ALL"); //$NON-NLS-1$
c.setSearchText(cn.getSurName().trim());
_personQuery.getCriterias().add(c);
}
}
}
if (_compareBirth && currentPerson.getBasicPersonData() != null
&& currentPerson.getBasicPersonData().getBeginningOfLife() != null)
{
PdrDate birth = currentPerson.getBasicPersonData().getBeginningOfLife();
c = new Criteria();
c.setType("date"); //$NON-NLS-1$
c.setOperator("AND"); //$NON-NLS-1$
c.setCrit0("biographicalData"); //$NON-NLS-1$
if (_compareFuzzy)
{
c.setDateFrom(new PdrDate(birth.getYear(), 1, 1));
c.setDateTo(new PdrDate(birth.getYear(), 12, 31));
}
else
{
c.setDateFrom(new PdrDate(birth.getYear(), birth.getMonth(), 1));
c.setDateTo(new PdrDate(birth.getYear(), birth.getMonth(), 31));
}
_personQuery.getCriterias().add(c);
}
if (_compareDeath && currentPerson.getBasicPersonData() != null
&& currentPerson.getBasicPersonData().getEndOfLife() != null)
{
PdrDate death = currentPerson.getBasicPersonData().getEndOfLife();
c = new Criteria();
c.setType("date"); //$NON-NLS-1$
c.setOperator("AND"); //$NON-NLS-1$
c.setCrit0("biographicalData"); //$NON-NLS-1$
if (_compareFuzzy)
{
c.setDateFrom(new PdrDate(death.getYear(), 1, 1));
c.setDateTo(new PdrDate(death.getYear(), 12, 31));
}
else
{
c.setDateFrom(new PdrDate(death.getYear(), death.getMonth(), 1));
c.setDateTo(new PdrDate(death.getYear(), death.getMonth(), 31));
}
_personQuery.getCriterias().add(c);
}
if (_compareDesc && currentPerson.getBasicPersonData() != null
&& currentPerson.getBasicPersonData().getDescriptions() != null)
{
c = new Criteria();
c.setType("tagging"); //$NON-NLS-1$
c.setOperator("AND"); //$NON-NLS-1$
c.setFuzzy(_compareFuzzy);
c.setCrit0("principalDescription"); //$NON-NLS-1$
String search = "";
for (String s : currentPerson.getBasicPersonData().getDescriptions())
{
search += s + " ";
}
c.setSearchText(search);
_personQuery.getCriterias().add(c);
}
_personTableViewer.setContentProvider(new PersonVectorContentProvider());
_personTableViewer.setLabelProvider(new TableLabelProvider());
_personTableViewer.setComparator(new PdrObjectViewComparator());
UIJob job = new UIJob("search")
{
@Override
public IStatus runInUIThread(final IProgressMonitor monitor)
{
try
{
Vector<Person> persons = null;
persons = _mainSearcher.searchPersons(_personQuery, monitor);
if (persons != null && !persons.isEmpty())
{
for (Person p : persons)
{
if (p.getPdrId().equals(_facade.getCurrentPerson().getPdrId()))
{
persons.remove(p);
break;
}
}
}
_personTableViewer.setInput(persons);
}
catch (Exception e)
{
e.printStackTrace();
}
if (monitor.isCanceled())
{
return Status.CANCEL_STATUS;
}
return Status.OK_STATUS;
}
};
job.setUser(true);
job.schedule();
_personTableViewer.refresh();
}
});
_personTableViewer = new TableViewer(_leftGroup, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
_personTableViewer.setContentProvider(new PersonVectorContentProvider());
_personTableViewer.setLabelProvider(new TableLabelProvider());
Table table = _personTableViewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
table.setLayoutData(new GridData());
((GridData) table.getLayoutData()).horizontalAlignment = SWT.FILL;
((GridData) table.getLayoutData()).grabExcessHorizontalSpace = true;
((GridData) table.getLayoutData()).verticalAlignment = SWT.FILL;
((GridData) table.getLayoutData()).grabExcessVerticalSpace = true;
((GridData) table.getLayoutData()).horizontalSpan = 11;
String[] titles =
{"Name", "ID"}; //$NON-NLS-1$ //$NON-NLS-2$
int[] bounds =
{200, 180};
for (int i = 0; i < titles.length; i++)
{
TableViewerColumn column = new TableViewerColumn(_personTableViewer, SWT.NONE);
column.getColumn().setText(titles[i]);
column.getColumn().setWidth(bounds[i]);
column.getColumn().setResizable(true);
column.getColumn().setMoveable(true);
column.getColumn().addSelectionListener(getSelectionAdapter(_personTableViewer, column.getColumn(), i));
}
_personTableViewer.setComparator(new PdrObjectViewComparator());
_personTableViewer.addDoubleClickListener(new IDoubleClickListener()
{
@Override
public void doubleClick(final DoubleClickEvent event)
{
ISelection selection = _personTableViewer.getSelection();
Object obj = ((IStructuredSelection) selection).getFirstElement();
Person selectedP = (Person) obj;
// System.out.println("selected person: " + selectedP.getPdrId().toString()); //$NON-NLS-1$
if (selectedP != null)
{
if (!selectedP.isAspectsLoaded())
{
try
{
_mainSearcher.searchAspectsByRelatedObject(selectedP, null);
}
catch (ParseException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
_facade.setConcurringPerson(selectedP);
_mergeButtonRight.setEnabled(true);
_mergeButtonLeft.setEnabled(true);
_setConcurrence.setEnabled(true);
}
});
_leftGroup.layout();
_leftButtonComposite = new Composite(_leftComposite, SWT.NONE);
_leftButtonComposite.setLayout(new GridLayout());
((GridLayout) _leftButtonComposite.getLayout()).numColumns = 2;
((GridLayout) _leftButtonComposite.getLayout()).makeColumnsEqualWidth = false;
_leftButtonComposite.setLayoutData(new GridData());
_mergeButtonLeft = new Button(_leftButtonComposite, SWT.PUSH);
_mergeButtonLeft.setText(NLMessages.getString("View_concurrence_merge_left"));
_mergeButtonLeft.setToolTipText(NLMessages.getString("View_concurrence_merge_left_tooltip"));
_mergeButtonLeft.setLayoutData(new GridData());
((GridData) _mergeButtonLeft.getLayoutData()).horizontalAlignment = SWT.RIGHT;
_mergeButtonLeft.setEnabled(false);
_mergeButtonLeft.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent event)
{
String message = NLMessages.getString("View_concurrence_merge_left_warning");
message += "\n\n"; //$NON-NLS-1$
message += NLMessages.getString("View_concurrence_merge_left_warning2");
message += NLMessages.getString("View_lb_lb_current_person")
+ _facade.getCurrentPerson().getDisplayName();
message += NLMessages.getString("View_lb_lb_concurring_person")
+ _facade.getConcurringPerson().getDisplayName();
message += NLMessages.getString("View_lb_not_undoable");
MessageDialog messageDialog = new MessageDialog(_parentShell, "Merge Persons Info", null, //$NON-NLS-1$
message, MessageDialog.WARNING, new String[]
{NLMessages.getString("View_merge"), "Cancel"}, 1);
int returnCode = messageDialog.open();
if (returnCode == 0)
{
Person p = null;
Person oldcurrentPerson = _facade.getCurrentPerson();
try
{
p = _concurrenceManager.mergePerson(_facade.getConcurringPerson(), _facade.getCurrentPerson());
}
catch (XMLStreamException e1)
{
e1.printStackTrace();
}
catch (Exception e1)
{
e1.printStackTrace();
}
try
{
_facade.savePerson(p);
}
catch (Exception e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
IDBManager dbm = _facade.getDBManager();
try
{
dbm.delete(oldcurrentPerson.getPdrId(), "person"); //$NON-NLS-1$
}
catch (Exception e)
{
e.printStackTrace();
} //$NON-NLS-1$ //$NON-NLS-2$
_facade.deletePersonFromAllPersons(oldcurrentPerson);
_facade.setConcurringPerson(null);
_facade.refreshAllData();
}
}
}); // SelectionListener
_setConcurrence = new Button(_leftButtonComposite, SWT.PUSH);
_setConcurrence.setText(NLMessages.getString("View_concurrence_set"));
_setConcurrence.setToolTipText(NLMessages.getString("View_concurrence_set_tooltip"));
_setConcurrence.setLayoutData(new GridData());
((GridData) _setConcurrence.getLayoutData()).horizontalAlignment = SWT.RIGHT;
_setConcurrence.setEnabled(false);
_setConcurrence.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent event)
{
Person p = _concurrenceManager.setConcurrence(_facade.getCurrentPerson(), _facade.getConcurringPerson()
.getPdrId());
try
{
_facade.savePerson(p);
}
catch (Exception e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
IDBManager dbm = _facade.getDBManager();
p = _concurrenceManager.setConcurrence(_facade.getConcurringPerson(), _facade.getCurrentPerson()
.getPdrId());
try
{
_facade.savePerson(p);
}
catch (Exception e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
try
{
dbm.saveToDB(p);
}
catch (XMLStreamException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}); // SelectionListener
_rightComposite = new Composite(_mainSashForm, SWT.NONE);
_rightComposite.setLayout(new GridLayout());
((GridLayout) _rightComposite.getLayout()).numColumns = 1;
((GridLayout) _rightComposite.getLayout()).makeColumnsEqualWidth = true;
_rightComposite.setLayoutData(new GridData());
((GridData) _rightComposite.getLayoutData()).horizontalAlignment = SWT.FILL;
((GridData) _rightComposite.getLayoutData()).verticalAlignment = SWT.FILL;
((GridData) _rightComposite.getLayoutData()).grabExcessHorizontalSpace = true;
((GridData) _rightComposite.getLayoutData()).grabExcessVerticalSpace = true;
_rightGroup = new Group(_rightComposite, SWT.NONE);
_rightGroup.setText(NLMessages.getString("View_similar_person"));
_rightGroup.setLayout(new GridLayout());
((GridLayout) _rightGroup.getLayout()).numColumns = 1;
((GridLayout) _rightGroup.getLayout()).makeColumnsEqualWidth = true;
_rightGroup.setLayoutData(new GridData());
((GridData) _rightGroup.getLayoutData()).horizontalAlignment = SWT.FILL;
((GridData) _rightGroup.getLayoutData()).verticalAlignment = SWT.FILL;
((GridData) _rightGroup.getLayoutData()).grabExcessHorizontalSpace = true;
((GridData) _rightGroup.getLayoutData()).grabExcessVerticalSpace = true;
_concurringPersonText = new Text(_rightGroup, SWT.MULTI | SWT.V_SCROLL | SWT.READ_ONLY);
_concurringPersonText.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
_concurringPersonText.setLayoutData(new GridLayout());
_concurringPersonText.setLayoutData(new GridData());
((GridData) _concurringPersonText.getLayoutData()).verticalAlignment = SWT.FILL;
((GridData) _concurringPersonText.getLayoutData()).grabExcessHorizontalSpace = true;
((GridData) _concurringPersonText.getLayoutData()).grabExcessVerticalSpace = true;
((GridData) _concurringPersonText.getLayoutData()).horizontalAlignment = SWT.FILL;
_concurringPersonText.pack();
_rightGroup.layout();
_rightButtonComposite = new Composite(_rightComposite, SWT.NONE);
_rightButtonComposite.setLayout(new GridLayout());
((GridLayout) _rightButtonComposite.getLayout()).numColumns = 2;
((GridLayout) _rightButtonComposite.getLayout()).makeColumnsEqualWidth = false;
_rightButtonComposite.setLayoutData(new GridData());
_mergeButtonRight = new Button(_rightButtonComposite, SWT.PUSH);
_mergeButtonRight.setText(NLMessages.getString("View_concurrence_merge_right"));
_mergeButtonRight.setToolTipText(NLMessages.getString("View_concurrence_merge_right_tooltip"));
_mergeButtonRight.setLayoutData(new GridData());
_mergeButtonRight.setEnabled(false);
((GridData) _mergeButtonRight.getLayoutData()).horizontalAlignment = SWT.RIGHT;
_mergeButtonRight.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent event)
{
String message = NLMessages.getString("View_concurrence_merge_right_warning");
message += "\n\n"; //$NON-NLS-1$
message += NLMessages.getString("View_concurrence_merge_right_warning2");
message += NLMessages.getString("View_lb_lb_current_person")
+ _facade.getCurrentPerson().getDisplayName();
message += NLMessages.getString("View_lb_lb_concurring_person")
+ _facade.getConcurringPerson().getDisplayName();
message += NLMessages.getString("View_lb_not_undoable");
MessageDialog messageDialog = new MessageDialog(_parentShell, "Merge Persons Info", null, //$NON-NLS-1$
message, MessageDialog.WARNING, new String[]
{NLMessages.getString("View_merge"), "Cancel"}, 1); //$NON-NLS-2$
int returnCode = messageDialog.open();
if (returnCode == 0)
{
Person p = null;
try
{
p = _concurrenceManager.mergePerson(_facade.getCurrentPerson(), _facade.getConcurringPerson());
}
catch (XMLStreamException e1)
{
e1.printStackTrace();
}
catch (Exception e1)
{
e1.printStackTrace();
}
try
{
_facade.savePerson(p);
}
catch (Exception e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
IDBManager dbm = _facade.getDBManager();
p = _facade.getConcurringPerson();
try
{
dbm.delete(p.getPdrId(), "person"); //$NON-NLS-1$
}
catch (Exception e)
{
e.printStackTrace();
} //$NON-NLS-1$ //$NON-NLS-2$
_facade.deletePersonFromAllPersons(p);
_facade.setConcurringPerson(null);
_facade.refreshAllData();
}
}
}); // SelectionListener
_mainSashForm.setWeights(new int[]
{1, 1});
}
@Override
public final void dispose()
{
_facade.deleteObserver(ConcurrenceHeadView.this);
}
/**
* Gets the selection adapter.
* @param tableViewer the table viewer
* @param column the column
* @param index the index
* @return the selection adapter
*/
final SelectionAdapter getSelectionAdapter(final TableViewer tableViewer, final TableColumn column, final int index)
{
SelectionAdapter selectionAdapter = new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent e)
{
((PdrObjectViewComparator) tableViewer.getComparator()).setColumn(index);
int dir = tableViewer.getTable().getSortDirection();
if (tableViewer.getTable().getSortColumn() == column)
{
dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
}
else
{
dir = SWT.DOWN;
}
tableViewer.getTable().setSortDirection(dir);
tableViewer.getTable().setSortColumn(column);
tableViewer.refresh();
}
};
return selectionAdapter;
}
/**
* @see org.eclipse.ui.part.WorkbenchPart#setFocus()
*/
@Override
public void setFocus()
{
}
// //////////////////////// Observer //////////////////////////////////////
/**
* Show concurring person.
*/
public final void showConcurringPerson()
{
Person concurrP = _facade.getConcurringPerson();
String label = ""; //$NON-NLS-1$
if (concurrP != null)
{
label = NLMessages.getString("View_currently_selected_concurring_person");
if (concurrP.getBasicPersonData() != null)
{
label = label + concurrP.getDisplayName(); //$NON-NLS-1$
if (concurrP.getPdrId() != null)
{
label = label + "\n\nID: " + concurrP.getPdrId().toString(); //$NON-NLS-1$
}
if (concurrP.getBasicPersonData().getComplexNames().size() > 1)
{
label = label + "\n\n" + NLMessages.getString("Treeview_namevariants"); //$NON-NLS-1$ //$NON-NLS-2$
for (int i = 1; i < concurrP.getBasicPersonData().getComplexNames().size(); i++)
{
label = label + concurrP.getBasicPersonData().getComplexNames().get(i).toString(); //$NON-NLS-1$
label = label + "\n"; //$NON-NLS-1$
}
}
}
}
else
{
label = NLMessages.getString("View_no_concurring_person_selected");
}
_concurringPersonText.setText(label);
}
@Override
public final void update(final Observable o, final Object arg)
{
IStatus sAspect = new Status(IStatus.INFO, Activator.PLUGIN_ID, "TreeView update: " + arg); //$NON-NLS-1$
_iLogger.log(sAspect);
if (arg.equals("newTreeObjects")) //$NON-NLS-1$
{
if (_facade.getCurrentTreeObjects() != null && _facade.getCurrentTreeObjects().length > 0
&& _facade.getCurrentTreeObjects()[_facade.getCurrentTreeObjects().length - 1] != null)
{
_searchButton.setEnabled(true);
if (_facade.getCurrentTreeObjects()[_facade.getCurrentTreeObjects().length - 1] instanceof Person) //$NON-NLS-1$
{
_personTableViewer.setInput(null);
_personTableViewer.refresh();
_facade.setConcurringPerson(null);
showConcurringPerson();
_mergeButtonRight.setEnabled(false);
_mergeButtonLeft.setEnabled(false);
_setConcurrence.setEnabled(false);
}
}
}
else if (arg.equals("newConcurringPerson")) //$NON-NLS-1$
{
if (_facade.getConcurringPerson() != null)
{
showConcurringPerson();
}
}
else if (arg.equals("refreshAll")) //$NON-NLS-1$
{
showConcurringPerson();
_personTableViewer.setInput(null);
}
}
}