ref #10287: open edit wizard by double click
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / remoteserver / CdmRemoteServerViewPart.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9 package eu.etaxonomy.taxeditor.view.remoteserver;
10
11 import java.util.List;
12
13 import javax.annotation.PostConstruct;
14 import javax.inject.Inject;
15
16
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;
43
44 import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
45 import eu.etaxonomy.taxeditor.l10n.Messages;
46
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;
51
52 /**
53 * @author kluther
54 * @date 20.01.2023
55 */
56 public class CdmRemoteServerViewPart {
57
58 // private static final Logger logger = LogManager.getLogger(CdmRemoteServerViewPart.class);
59
60 @Inject
61 private UISynchronize sync;
62
63
64
65 private class RemoteServerJob extends Job{
66
67 private final List<CdmServerInfoConfig> cdmSources;
68
69 public RemoteServerJob(String title, List<CdmServerInfoConfig> cdmSources) {
70 super(title);
71 this.cdmSources = cdmSources;
72 }
73
74 @Override
75 public IStatus run(final IProgressMonitor monitor) {
76 try{
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$
79
80
81
82 sync.asyncExec(()->viewer.setInput(this.cdmSources));
83
84 monitor.worked(1);
85
86 for(final CdmServerInfoConfig container : cdmSources){
87 sync.asyncExec(()-> {
88 viewer.update(container, null);
89 }
90 );
91 monitor.worked(1);
92 }
93
94 }finally{
95 monitor.done();
96 }
97 return Status.OK_STATUS;
98 }
99 }
100
101 private TableViewer viewer;
102
103 // private CdmRemoteServerViewerComparator comparator;
104
105 public CdmRemoteServerViewPart(){
106 }
107
108 private ISelectionChangedListener selectionChangedListener;
109
110 @Inject
111 private ESelectionService selService;
112
113 @PostConstruct
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);
121
122 viewer = new TableViewer(parent, SWT.H_SCROLL
123 | SWT.V_SCROLL | SWT.FULL_SELECTION);
124
125 createColumns(viewer);
126
127 viewer.setContentProvider(new CdmRemoteServerContentProvider());
128 viewer.setLabelProvider(new CdmRemoteServerLabelProvider());
129 // comparator = new CdmRemoteServerViewerComparator();
130 // viewer.setComparator(comparator);
131
132 // Propagate selection from viewer
133 selectionChangedListener = (event -> selService.setSelection(event.getSelection()));
134 viewer.addSelectionChangedListener(selectionChangedListener);
135 viewer.getControl().addMouseListener(new MouseListener() {
136
137 @Override
138 public void mouseUp(MouseEvent e) {
139 // TODO Auto-generated method stub
140
141 }
142
143 @Override
144 public void mouseDown(MouseEvent e) {
145 // TODO Auto-generated method stub
146
147 }
148
149 @Override
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){
158 if(viewer != null){
159 viewer.update(container, null);
160 }
161 }
162 }
163 }
164 });
165
166 //create context menu
167 menuService.registerContextMenu(viewer.getControl(), "eu.etaxonomy.taxeditor.local.popupmenu.remoteServerViewPart");
168
169 refresh();
170 }
171
172
173 // This will create the columns for the table
174 private void createColumns(TableViewer viewer) {
175 Table table = viewer.getTable();
176
177 String[] titles = {"Name", "Server", "Port", "Prefix", "Check version"};
178 int[] bounds = { 200, 200, 100, 50, 100 };
179
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));
187
188 if(i == 1){
189 table.setSortColumn(column.getColumn());
190 }
191 }
192 table.setHeaderVisible(true);
193 table.setLinesVisible(true);
194 table.setSortDirection(SWT.UP);
195 }
196
197 @Inject
198 @Optional
199 private void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_DATASOURCE)boolean refresh){
200 if(refresh){
201 refresh();
202 }
203 }
204
205 public void refresh(){
206 RemoteServerJob dataSourceJob = new RemoteServerJob(Messages.CdmDataSourceViewPart_1, CdmRemoteServerRepository.getAll());
207 dataSourceJob.schedule();
208 }
209
210 @Focus
211 public void setFocus() {
212 if (viewer.getControl() != null && !viewer.getControl().isDisposed()) {
213 viewer.getControl().setFocus();
214 }
215 }
216
217 //FIXME E4 migrate
218 // @Override
219 // public void showBusy(boolean busy) {
220 // super.showBusy(busy);
221 //// viewer.getTable().setEnabled(!busy);
222 // if(busy){
223 // partNameCache = getPartName();
224 // setPartName(Messages.CdmDataSourceViewPart_1);
225 // }else{
226 // if(partNameCache != null){
227 // setPartName(partNameCache);
228 // }
229 // }
230 // }
231
232 public StructuredViewer getViewer() {
233 return viewer;
234 }
235
236 // public IWorkbenchSiteProgressService getService() {
237 // return service;
238 // }
239
240 private SelectionAdapter getSelectionAdapter(final TableColumn column,
241 final int index) {
242 SelectionAdapter selectionAdapter = new SelectionAdapter() {
243 @Override
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;
249 } else {
250 dir = SWT.DOWN;
251 }
252 viewer.getTable().setSortDirection(dir);
253 viewer.getTable().setSortColumn(column);
254 viewer.refresh();
255 }
256 };
257 return selectionAdapter;
258 }
259
260
261
262 }