/**
* 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.identifiers.dialogs;
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.config.model.ConfigData;
import org.bbaw.pdr.ae.config.model.ConfigItem;
import org.bbaw.pdr.ae.config.model.DatatypeDesc;
import org.bbaw.pdr.ae.config.model.IdentifierConfig;
import org.bbaw.pdr.ae.control.facade.Facade;
import org.bbaw.pdr.ae.model.Person;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
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.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.ISelectionService;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
/**
* @author cplutte
*
* class creates the user-preference dialog for setting user preferences.
*/
/** */
public class BrowserDialog extends TitleAreaDialog
{
/** Browser. */
private Browser _browser;
/** The url. */
private String _url;
/** The message. */
private String _message;
/** The Id text. */
private Text _idText;
/** The Id no. */
private Text _idNo;
/** The Url text. */
private Text _urlText;
/** composite of generalTabItem. */
private Composite _generalComposite;
/** singleton facade. */
private Facade _facade = Facade.getInstanz();
/** The current person. */
private Person _currentPerson;
/** The request type. */
private String _requestType;
private String _configProvider = Platform
.getPreferencesService()
.getString(CommonActivator.PLUGIN_ID, "PRIMARY_SEMANTIC_PROVIDER", AEConstants.CLASSIFICATION_AUTHORITY,
null).toUpperCase();
/**
* Instantiates a new browser dialog.
* @param url
* @param parentShell the parent shell
*/
public BrowserDialog(String url, final Shell parentShell)
{
super(parentShell);
this._url = url;
}
@Override
public final void create()
{
super.create();
_currentPerson = _facade.getCurrentPerson();
_requestType = _facade.getRequestedIdentifierType();
// System.out.println("browser requestType " + _requestType);
// choose what kind of identifier is requested.
if (_requestType != null)
{
if (_requestType.equalsIgnoreCase("pnd")) //$NON-NLS-1$
{
_message = NLMessages.getString("BrowserDialog_PNDnameFor");
}
else if (_requestType.equalsIgnoreCase("lccn")) //$NON-NLS-1$
{
_message = NLMessages.getString("BrowserDialog_LCCNnameFor");
}
else if (_requestType.equalsIgnoreCase("iccu")) //$NON-NLS-1$
{
_message = NLMessages.getString("BrowserDialog_ICCUnameFor");
}
else if (_requestType.equalsIgnoreCase("viaf")) //$NON-NLS-1$
{
_message = NLMessages.getString("BrowserDialog_VIAFnameFor");
}
else
{
_message = NLMessages.getString("BrowserDialog_errorMessageError");
}
}
if (_currentPerson.getBasicPersonData() != null
&& _currentPerson.getBasicPersonData().getComplexNames() != null
&& _currentPerson.getBasicPersonData().getComplexNames().firstElement() != null)
{
if (_currentPerson.getBasicPersonData().getComplexNames().firstElement().getSurName() != null)
{
_message += _currentPerson.getBasicPersonData().getComplexNames().firstElement().getSurName() + ", ";
}
if (_currentPerson.getBasicPersonData().getComplexNames().firstElement().getForeName() != null)
{
_message += _currentPerson.getBasicPersonData().getComplexNames().firstElement().getForeName();
}
}
// Set the title
setTitle(NLMessages.getString("BrowserDialog_titleExternalPersonIdentifier"));
// set message
setMessage(_message, IMessageProvider.INFORMATION);
}
@Override
protected final void createButtonsForButtonBar(final Composite parent)
{
GridData gridData = new GridData();
gridData.verticalAlignment = GridData.FILL;
gridData.horizontalSpan = 3;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
gridData.horizontalAlignment = SWT.CENTER;
parent.setLayoutData(gridData);
// Create Add button
// Own method as we need to overview the SelectionAdapter
// createOkButton(parent, OK,
// NLMessages.getString("BrowserDialog_save"), true);
// Add a SelectionListener
// Create Cancel button
Button cancelButton = createButton(parent, CANCEL, NLMessages.getString("BrowserDialog_close"), false);
// Add a SelectionListener
cancelButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent e)
{
setReturnCode(CANCEL);
close();
}
});
}
@Override
protected final Control createDialogArea(final Composite parent)
{
// System.out.println("requested type : " + facade.getRequestedId());
_generalComposite = new Composite(parent, SWT.NONE);
_generalComposite.setLayoutData(new GridData());
((GridData) _generalComposite.getLayoutData()).horizontalAlignment = SWT.FILL;
((GridData) _generalComposite.getLayoutData()).grabExcessHorizontalSpace = true;
_generalComposite.setLayout(new GridLayout());
((GridLayout) _generalComposite.getLayout()).makeColumnsEqualWidth = false;
((GridLayout) _generalComposite.getLayout()).numColumns = 5;
Label idLabel = new Label(_generalComposite, SWT.NONE);
idLabel.setText(NLMessages.getString("BrowserDialog_identifier"));
_idText = new Text(_generalComposite, SWT.READ_ONLY);
_idText.setText(""); //$NON-NLS-1$
_idNo = new Text(_generalComposite, SWT.BORDER);
_idNo.setText(""); //$NON-NLS-1$
Label urlLabel = new Label(_generalComposite, SWT.NONE);
urlLabel.setText(NLMessages.getString("BrowserDialog_url"));
_urlText = new Text(_generalComposite, SWT.READ_ONLY);
_urlText.setText(""); //$NON-NLS-1$
loadValues();
_generalComposite.pack();
_browser = new Browser(parent, SWT.FILL | SWT.BORDER);
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
ISelection selection = window.getSelectionService().getSelection();
setUrlFromSelection(selection);
createSelectionListener();
GridData layoutData = new GridData(GridData.FILL_BOTH);
layoutData.horizontalAlignment = SWT.FILL;
layoutData.widthHint = 800;
layoutData.heightHint = 400;
_browser.setLayoutData(layoutData);
final ProgressBar progressBar = new ProgressBar(parent, SWT.NONE);
GridData data = new GridData();
data.horizontalSpan = 3;
data = new GridData();
data.horizontalAlignment = GridData.BEGINNING;
data.verticalAlignment = GridData.END;
progressBar.setLayoutData(data);
_browser.addProgressListener(new ProgressListener()
{
@Override
public void changed(final ProgressEvent event)
{
if (event.total == 0)
{
return;
}
int ratio = event.current * 100 / event.total;
progressBar.setSelection(ratio);
}
@Override
public void completed(final ProgressEvent event)
{
progressBar.setSelection(100);
progressBar.setSelection(0);
}
});
parent.pack();
return parent;
}
/**
* creates OKButton.
* @param parent parent composite
* @param id id
* @param label label of button
* @param defaultButton is default.
* @return 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++;
Button button = new Button(parent, SWT.PUSH);
button.setText(label);
button.setFont(JFaceResources.getDialogFont());
button.setData(new Integer(id));
button.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(final SelectionEvent event)
{
if (isValidInput())
{
okPressed();
}
close();
}
});
if (defaultButton)
{
Shell shell = parent.getShell();
if (shell != null)
{
shell.setDefaultButton(button);
}
}
setButtonLayoutData(button);
return button;
}
/**
* Creates the selection listener.
*/
private void createSelectionListener()
{
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
ISelectionService selectionService = window.getSelectionService();
selectionService.addSelectionListener(new ISelectionListener()
{
@Override
public void selectionChanged(final IWorkbenchPart part, final ISelection selection)
{
setUrlFromSelection(selection);
}
});
}
@Override
protected final boolean isResizable()
{
return true;
}
/**
* checks if input is valid.
* @return true
*/
private boolean isValidInput()
{
boolean valid = true;
// if (langText.getText().length() == 0) {
// setErrorMessage("Bitte");
// valid = false;
// }
// if (lastNameText.getText().length() == 0) {
// setErrorMessage("Please maintain the last name");
// valid = false;
// }
return valid;
}
/**
* Load values.
*/
private void loadValues()
{
_facade = Facade.getInstanz();
_currentPerson = _facade.getCurrentPerson();
if (_url != null)
{
}
else
{
_requestType = _facade.getRequestedIdentifierType();
String identifier = _facade.getRequestedIdentifier();
if (_facade.getConfigs().get(_configProvider) != null
&& _facade.getConfigs().get(_configProvider).getUsage() != null
&& !_facade.getConfigs().get(_configProvider).getUsage().getIdentifiers().getChildren().isEmpty())
{
DatatypeDesc dtd = (DatatypeDesc) _facade.getConfigs().get(_configProvider);
ConfigData ids = (ConfigData) dtd.getUsage().getIdentifiers();
ConfigData ci = (ConfigData) ids.getChildren().get(_requestType);
if (ci == null)
{
ci = (IdentifierConfig) _facade.getConfigs().get(_configProvider).getUsage().getIdentifiers()
.getChildren().get(_requestType.toUpperCase());
}
if (ci != null && ci instanceof IdentifierConfig)
{
IdentifierConfig ic = (IdentifierConfig) ci;
_url = ic.getUrl();
if (ic.getPrefix() != null)
{
_url += ic.getPrefix();
}
_url += identifier;
if (ic.getSuffix() != null)
{
_url += ic.getSuffix();
}
}
}
if (identifier != null)
{
_idNo.setText(identifier);
}
}
_idText.setText(NLMessages.getString("BrowserDialog_PDR"));
if (_url != null)
{
_urlText.setText(_url);
}
}
@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()
{
// firstName = firstNameText.getText();
// lastName = lastNameText.getText();
}
/**
* Sets the url from selection.
* @param selection the new url from selection
*/
private void setUrlFromSelection(final ISelection selection)
{
if (!_browser.isDisposed() && _url != null)
{
_browser.setUrl(_url);
}
}
}