/**
* 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.view;
import org.bbaw.pdr.ae.common.NLMessages;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.browser.LocationListener;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
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;
import org.eclipse.ui.part.ViewPart;
/**
* View of _browser for seeking exterenal person identifier such as pnd, lccn.
* @author cplutte
*/
public class BrowserViewPart extends ViewPart
{
/** Browser. */
private Browser _browser;
/** urls for searching external person identifier. */
private static final String PND_SEARCH = "http://tools.wmflabs.org/persondata/"; //$NON-NLS-1$
/** The LCC n_ search. */
private static final String LCCN_SEARCH = "http://catalog.loc.gov/webvoy.htm"; //$NON-NLS-1$
/** The ICC u_ search. */
private static final String ICCU_SEARCH = "http://www.sbn.it/opacsbn/opac/iccu/informazioni.jsp"; //$NON-NLS-1$
/** The VIA f_ search. */
private static final String VIAF_SEARCH = "http://www.viaf.org"; //$NON-NLS-1$
/**
* creates control for view.
* @param parent main composite.
*/
@Override
public final void createPartControl(final Composite parent)
{
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 3;
parent.setLayout(gridLayout);
ToolBar toolbar = new ToolBar(parent, SWT.NONE);
ToolItem itemBack = new ToolItem(toolbar, SWT.PUSH);
itemBack.setText(NLMessages.getString("BrowserViewPart_back"));
ToolItem itemForward = new ToolItem(toolbar, SWT.PUSH);
itemForward.setText(NLMessages.getString("BrowserViewPart_forward"));
ToolItem itemStop = new ToolItem(toolbar, SWT.PUSH);
itemStop.setText(NLMessages.getString("BrowserViewPart_stop"));
ToolItem itemRefresh = new ToolItem(toolbar, SWT.PUSH);
itemRefresh.setText(NLMessages.getString("BrowserViewPart_refresh"));
ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH);
itemGo.setText(NLMessages.getString("BrowserViewPart_go"));
new ToolItem(toolbar, SWT.SEPARATOR);
ToolItem itemPND = new ToolItem(toolbar, SWT.PUSH);
itemPND.setText("PND"); //$NON-NLS-1$
ToolItem itemLCCN = new ToolItem(toolbar, SWT.PUSH);
itemLCCN.setText("LCCN"); //$NON-NLS-1$
ToolItem itemICCU = new ToolItem(toolbar, SWT.PUSH);
itemICCU.setText("ICCU"); //$NON-NLS-1$
ToolItem itemVIAF = new ToolItem(toolbar, SWT.PUSH);
itemVIAF.setText("VIAF"); //$NON-NLS-1$
new ToolItem(toolbar, SWT.SEPARATOR);
ToolItem itemSPND = new ToolItem(toolbar, SWT.PUSH);
itemSPND.setText("SPND"); //$NON-NLS-1$
GridData data = new GridData();
data.horizontalSpan = 3;
toolbar.setLayoutData(data);
Label labelAddress = new Label(parent, SWT.NONE);
labelAddress.setText(NLMessages.getString("BrowserViewPart_address"));
final Text location = new Text(parent, SWT.BORDER);
data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.horizontalSpan = 2;
data.grabExcessHorizontalSpace = true;
location.setLayoutData(data);
_browser = new Browser(parent, SWT.NONE);
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
ISelection selection = window.getSelectionService().getSelection();
GridData layoutData = new GridData(GridData.FILL_BOTH);
layoutData.horizontalAlignment = SWT.FILL;
layoutData.verticalAlignment = SWT.FILL;
layoutData.horizontalSpan = 3;
layoutData.grabExcessHorizontalSpace = true;
layoutData.grabExcessVerticalSpace = true;
_browser.setLayoutData(layoutData);
// System.out.println("_browser menu items: " +
// _browser.getMenu().getItemCount());
final Label status = new Label(parent, SWT.NONE);
data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 2;
status.setLayoutData(data);
final ProgressBar progressBar = new ProgressBar(parent, SWT.NONE);
data = new GridData();
data.horizontalAlignment = GridData.END;
progressBar.setLayoutData(data);
/* event handling */
Listener listener = new Listener()
{
@Override
public void handleEvent(final Event event)
{
ToolItem item = (ToolItem) event.widget;
String string = item.getText();
// FIXME einkommentieren browser singlesourcen
// if
// (string.equals(NLMessages.getString("BrowserViewPart_back")))
// {
// _browser.back();
// }
// else if
// (string.equals(NLMessages.getString("BrowserViewPart_forward")))
// {
// _browser.forward();
// }
// else if
// (string.equals(NLMessages.getString("BrowserViewPart_stop")))
// {
// _browser.stop();
// }
// else if
// (string.equals(NLMessages.getString("BrowserViewPart_refresh")))
// {
// _browser.refresh();
// }
// else
if (string.equals(NLMessages.getString("BrowserViewPart_go")))
{
_browser.setUrl(location.getText());
}
else if (string.equals("PND")) //$NON-NLS-1$
{
_browser.setUrl(PND_SEARCH);
}
else if (string.equals("LCCN")) //$NON-NLS-1$
{
_browser.setUrl(LCCN_SEARCH);
}
else if (string.equals("ICCU")) //$NON-NLS-1$
{
_browser.setUrl(ICCU_SEARCH);
}
else if (string.equals("VIAF")) //$NON-NLS-1$
{
_browser.setUrl(VIAF_SEARCH);
}
else if (string.equals("SPND")) //$NON-NLS-1$
{
// TODO javascript für pnd etc. identifier und import in ae
// entwickeln.
// _browser.execute("window.scrollTo(0,100000);");
_browser.execute("a = window.find('Personennamendatei (PND)', true)"); //$NON-NLS-1$
}
}
};
_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(0);
}
});
// FIXME einkommentieren und singlesourcen
// _browser.addStatusTextListener(new StatusTextListener() {
// public void changed(StatusTextEvent event) {
// status.setText(event.text);
// }
// });
_browser.addLocationListener(new LocationListener()
{
@Override
public void changed(final LocationEvent event)
{
if (event.top)
{
location.setText(event.location);
}
}
@Override
public void changing(final LocationEvent event)
{
}
});
itemBack.addListener(SWT.Selection, listener);
itemForward.addListener(SWT.Selection, listener);
itemStop.addListener(SWT.Selection, listener);
itemRefresh.addListener(SWT.Selection, listener);
itemGo.addListener(SWT.Selection, listener);
itemPND.addListener(SWT.Selection, listener);
itemLCCN.addListener(SWT.Selection, listener);
itemICCU.addListener(SWT.Selection, listener);
itemVIAF.addListener(SWT.Selection, listener);
itemSPND.addListener(SWT.Selection, listener);
location.addListener(SWT.DefaultSelection, new Listener()
{
@Override
public void handleEvent(final Event e)
{
_browser.setUrl(location.getText());
}
});
setUrlFromSelection(selection);
createSelectionListener();
}
/** creates selection listener in view. */
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);
}
});
}
/** sets focus in view. */
@Override
public final void setFocus()
{
_browser.setFocus();
}
/**
* sets url according to selection.
* @param selection selected url.
*/
private void setUrlFromSelection(final ISelection selection)
{
if (!_browser.isDisposed())
{
_browser.setUrl(PND_SEARCH);
}
}
public void openURL(String url)
{
if (url != null)
{
_browser.setUrl(url);
}
}
}