package copyto.ui.internal.preferences; import java.util.Collection; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.window.Window; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import osgiutils.services.DefaultCollectionServiceRunnable; import osgiutils.services.Services; import copyto.core.Target; import copyto.core.TargetFactories; import copyto.core.TargetFactoryDescriptor; import copyto.core.models.AbstractTargetModel; import copyto.ui.internal.Messages; import eclipseutils.jface.databinding.TableEditor; class TargetEditor extends TableEditor<Target> { protected TargetEditor(Composite parent, Collection<Target> items, int flags) { super(parent, items, flags); } @Override protected String[] getColumnNames() { return new String[] { "name", "summary" }; //$NON-NLS-1$ //$NON-NLS-2$ } @Override protected String[] getColumnLabels() { return new String[] { Messages.TargetFieldEditor_NameColumn, Messages.TargetFieldEditor_URLColumn }; } @Override protected Target createItem(Shell shell) { Collection<TargetFactoryDescriptor> descs = Services.run(TargetFactories.class, new DefaultCollectionServiceRunnable<TargetFactories, TargetFactoryDescriptor>() { public Collection<TargetFactoryDescriptor> run(TargetFactories service) { return service.findAll(); } }); if (descs.isEmpty()) { return null; } if (descs.size() == 1) { TargetFactoryDescriptor desc = descs.iterator().next(); Target target = desc.getFactory().createTarget(); if (new EditDialog(shell, target, getItems()).open() == Window.OK) { return target; } } else { return null; } return null; } @Override protected void editItem(final Shell shell, final Target item) { new EditDialog(shell, item, getItems()).open(); } @Override protected void createCustomButtons(final Composite parent) { // createTestButton(parent); createCopyButton(parent); createPasteButton(parent); } private void createPasteButton(final Composite parent) { final Button pasteButton = createPushButton(parent, Messages.TargetFieldEditor_Paste); pasteButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { final Clipboard clipboard = new Clipboard(Display.getDefault()); try { final String base64 = (String) clipboard .getContents(TextTransfer.getInstance()); final AbstractTargetModel item = AbstractTargetModel.valueOf(base64); if (item != null) { add(item, true); } } catch (final Exception ex) { MessageDialog.openError(pasteButton.getShell(), Messages.TargetFieldEditor_PasteError_Title, Messages.TargetFieldEditor_PasteError_Message); ex.printStackTrace(); } finally { clipboard.dispose(); } } }); } private void createCopyButton(final Composite parent) { final Button copyButton = createPushButton(parent, Messages.TargetFieldEditor_Copy); enableWithSelection(copyButton, SWT.SINGLE); copyButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { visitViewerSelection(Messages.TargetFieldEditor_CopyJob, new Visitor<Target>() { public void visit(final Target item, final IProgressMonitor monitor) { final String base64 = ((AbstractTargetModel)item).toBase64(); Display.getDefault().asyncExec(new Runnable() { public void run() { final Clipboard clipboard = new Clipboard( Display.getDefault()); try { clipboard .setContents( new Object[] { base64 }, new Transfer[] { TextTransfer .getInstance() }); } finally { clipboard.dispose(); } } }); } }); } }); } @SuppressWarnings("unused") private void createTestButton(final Composite parent) { final Button testButton = createPushButton(parent, Messages.TargetFieldEditor_Test); testButton.setToolTipText(Messages.TargetFieldEditor_TestDesc); enableWithSelection(testButton, SWT.SINGLE | SWT.MULTI); testButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent event) { testButton.setEnabled(false); visitViewerSelection(Messages.TargetFieldEditor_TestJob, new Visitor<Target>() { public void visit(final Target target, final IProgressMonitor monitor) { monitor.beginTask( NLS.bind( Messages.TargetFieldEditor_TestProgress, target.getName(), null), IProgressMonitor.UNKNOWN); for (int i = 0; i < 10; ++i) { //((AbstractTargetModel)target).testConnection(); } } }); testButton.setEnabled(true); } }); } }