2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
9 package eu
.etaxonomy
.taxeditor
.view
.remoteserver
;
11 import java
.util
.List
;
13 import javax
.annotation
.PostConstruct
;
14 import javax
.inject
.Inject
;
17 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
18 import org
.eclipse
.core
.runtime
.IStatus
;
19 import org
.eclipse
.core
.runtime
.Status
;
20 import org
.eclipse
.core
.runtime
.jobs
.Job
;
21 import org
.eclipse
.e4
.core
.di
.annotations
.Optional
;
22 import org
.eclipse
.e4
.ui
.di
.Focus
;
23 import org
.eclipse
.e4
.ui
.di
.UIEventTopic
;
24 import org
.eclipse
.e4
.ui
.di
.UISynchronize
;
25 import org
.eclipse
.e4
.ui
.services
.EMenuService
;
26 import org
.eclipse
.e4
.ui
.workbench
.modeling
.ESelectionService
;
27 import org
.eclipse
.jface
.viewers
.ISelectionChangedListener
;
28 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
29 import org
.eclipse
.jface
.viewers
.StructuredViewer
;
30 import org
.eclipse
.jface
.viewers
.TableViewer
;
31 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
32 import org
.eclipse
.jface
.wizard
.Wizard
;
33 import org
.eclipse
.jface
.wizard
.WizardDialog
;
34 import org
.eclipse
.swt
.SWT
;
35 import org
.eclipse
.swt
.events
.MouseEvent
;
36 import org
.eclipse
.swt
.events
.MouseListener
;
37 import org
.eclipse
.swt
.events
.SelectionAdapter
;
38 import org
.eclipse
.swt
.events
.SelectionEvent
;
39 import org
.eclipse
.swt
.layout
.FillLayout
;
40 import org
.eclipse
.swt
.widgets
.Composite
;
41 import org
.eclipse
.swt
.widgets
.Table
;
42 import org
.eclipse
.swt
.widgets
.TableColumn
;
44 import eu
.etaxonomy
.taxeditor
.event
.WorkbenchEventConstants
;
45 import eu
.etaxonomy
.taxeditor
.l10n
.Messages
;
47 import eu
.etaxonomy
.taxeditor
.remoting
.source
.CdmServerInfoConfig
;
48 import eu
.etaxonomy
.taxeditor
.view
.remoteserver
.common
.CdmRemoteServerRepository
;
49 import eu
.etaxonomy
.taxeditor
.view
.remoteserver
.common
.CdmRemoteServerViewerComparator
;
50 import eu
.etaxonomy
.taxeditor
.view
.remoteserver
.wizard
.CdmRemoteServerWizard
;
56 public class CdmRemoteServerViewPart
{
58 // private static final Logger logger = LogManager.getLogger(CdmRemoteServerViewPart.class);
61 private UISynchronize sync
;
65 private class RemoteServerJob
extends Job
{
67 private final List
<CdmServerInfoConfig
> cdmSources
;
69 public RemoteServerJob(String title
, List
<CdmServerInfoConfig
> cdmSources
) {
71 this.cdmSources
= cdmSources
;
75 public IStatus
run(final IProgressMonitor monitor
) {
77 //logger.debug("Begin of eclipse core runtime Job to Retrieve datasources"); //$NON-NLS-1$
78 monitor
.beginTask("Retrieving datasources", cdmSources
.size() + 1); //$NON-NLS-1$
82 sync
.asyncExec(()->viewer
.setInput(this.cdmSources
));
86 for(final CdmServerInfoConfig container
: cdmSources
){
88 viewer
.update(container
, null);
97 return Status
.OK_STATUS
;
101 private TableViewer viewer
;
103 // private CdmRemoteServerViewerComparator comparator;
105 public CdmRemoteServerViewPart(){
108 private ISelectionChangedListener selectionChangedListener
;
111 private ESelectionService selService
;
114 public void create(Composite parent
, EMenuService menuService
) {
115 // Create top composite
116 FillLayout fillLayout
= new FillLayout();
117 fillLayout
.marginWidth
= 0;
118 fillLayout
.marginHeight
= 0;
119 fillLayout
.type
= SWT
.VERTICAL
;
120 parent
.setLayout(fillLayout
);
122 viewer
= new TableViewer(parent
, SWT
.H_SCROLL
123 | SWT
.V_SCROLL
| SWT
.FULL_SELECTION
);
125 createColumns(viewer
);
127 viewer
.setContentProvider(new CdmRemoteServerContentProvider());
128 viewer
.setLabelProvider(new CdmRemoteServerLabelProvider());
129 // comparator = new CdmRemoteServerViewerComparator();
130 // viewer.setComparator(comparator);
132 // Propagate selection from viewer
133 selectionChangedListener
= (event
-> selService
.setSelection(event
.getSelection()));
134 viewer
.addSelectionChangedListener(selectionChangedListener
);
135 viewer
.getControl().addMouseListener(new MouseListener() {
138 public void mouseUp(MouseEvent e
) {
139 // TODO Auto-generated method stub
144 public void mouseDown(MouseEvent e
) {
145 // TODO Auto-generated method stub
150 public void mouseDoubleClick(MouseEvent e
) {
151 StructuredSelection sel
= (StructuredSelection
) viewer
.getSelection();
152 if (sel
.getFirstElement() instanceof CdmServerInfoConfig
) {
153 CdmServerInfoConfig container
= (CdmServerInfoConfig
) sel
.getFirstElement();
154 Wizard wizard
= new CdmRemoteServerWizard(container
, CdmRemoteServerWizard
.Mode
.EDIT
);
155 WizardDialog dialog
= new WizardDialog(null, wizard
);
156 int result
= dialog
.open();
157 if(result
== IStatus
.OK
){
159 viewer
.update(container
, null);
166 //create context menu
167 menuService
.registerContextMenu(viewer
.getControl(), "eu.etaxonomy.taxeditor.local.popupmenu.remoteServerViewPart");
173 // This will create the columns for the table
174 private void createColumns(TableViewer viewer
) {
175 Table table
= viewer
.getTable();
177 String
[] titles
= {"Name", "Server", "Port", "Prefix", "Check version"};
178 int[] bounds
= { 200, 200, 100, 50, 100 };
180 for (int i
= 0; i
< titles
.length
; i
++) {
181 TableViewerColumn column
= new TableViewerColumn(viewer
, SWT
.NONE
);
182 column
.getColumn().setText(titles
[i
]);
183 column
.getColumn().setWidth(bounds
[i
]);
184 column
.getColumn().setResizable(true);
185 column
.getColumn().setMoveable(true);
186 column
.getColumn().addSelectionListener(getSelectionAdapter(column
.getColumn(), i
));
189 table
.setSortColumn(column
.getColumn());
192 table
.setHeaderVisible(true);
193 table
.setLinesVisible(true);
194 table
.setSortDirection(SWT
.UP
);
199 private void updateView(@UIEventTopic(WorkbenchEventConstants
.REFRESH_DATASOURCE
)boolean refresh
){
205 public void refresh(){
206 RemoteServerJob dataSourceJob
= new RemoteServerJob(Messages
.CdmDataSourceViewPart_1
, CdmRemoteServerRepository
.getAll());
207 dataSourceJob
.schedule();
211 public void setFocus() {
212 if (viewer
.getControl() != null && !viewer
.getControl().isDisposed()) {
213 viewer
.getControl().setFocus();
219 // public void showBusy(boolean busy) {
220 // super.showBusy(busy);
221 //// viewer.getTable().setEnabled(!busy);
223 // partNameCache = getPartName();
224 // setPartName(Messages.CdmDataSourceViewPart_1);
226 // if(partNameCache != null){
227 // setPartName(partNameCache);
232 public StructuredViewer
getViewer() {
236 // public IWorkbenchSiteProgressService getService() {
240 private SelectionAdapter
getSelectionAdapter(final TableColumn column
,
242 SelectionAdapter selectionAdapter
= new SelectionAdapter() {
244 public void widgetSelected(SelectionEvent e
) {
245 // comparator.setColumn(index);
246 int dir
= viewer
.getTable().getSortDirection();
247 if (viewer
.getTable().getSortColumn() == column
) {
248 dir
= dir
== SWT
.UP ? SWT
.DOWN
: SWT
.UP
;
252 viewer
.getTable().setSortDirection(dir
);
253 viewer
.getTable().setSortColumn(column
);
257 return selectionAdapter
;