ref #6908 Migrate polytomous key list and graph editor
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / key / e4 / AbstractGraphKeyEditorE4.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.editor.key.e4;
5
6 import javax.inject.Inject;
7
8 import org.eclipse.e4.ui.di.Focus;
9 import org.eclipse.e4.ui.di.Persist;
10 import org.eclipse.e4.ui.model.application.ui.MDirtyable;
11 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
12 import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
13 import org.eclipse.jface.action.IToolBarManager;
14 import org.eclipse.jface.viewers.IBaseLabelProvider;
15 import org.eclipse.jface.viewers.IContentProvider;
16 import org.eclipse.jface.viewers.ISelectionChangedListener;
17 import org.eclipse.jface.viewers.StructuredSelection;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.zest.core.viewers.AbstractZoomableViewer;
20 import org.eclipse.zest.core.viewers.GraphViewer;
21 import org.eclipse.zest.core.viewers.IZoomableWorkbenchPart;
22 import org.eclipse.zest.core.viewers.ZoomContributionViewItem;
23 import org.eclipse.zest.layouts.LayoutAlgorithm;
24 import org.eclipse.zest.layouts.LayoutStyles;
25 import org.eclipse.zest.layouts.algorithms.TreeLayoutAlgorithm;
26
27 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
28 import eu.etaxonomy.cdm.model.common.CdmBase;
29 import eu.etaxonomy.cdm.model.description.IIdentificationKey;
30 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
31 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
32 import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
33 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
34 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
35 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
36
37 /**
38 *
39 * @author pplitzner
40 * @since Sep 28, 2017
41 *
42 * @param <T>
43 */
44 public abstract class AbstractGraphKeyEditorE4<T extends IIdentificationKey>
45 implements IConversationEnabled,
46 IZoomableWorkbenchPart, IPostOperationEnabled,
47 IDirtyMarkable {
48
49 protected CdmFormFactory formFactory;
50 protected Composite container;
51 protected GraphViewer viewer;
52
53 private LayoutAlgorithm layoutAlgoritm;
54 private ZoomContributionViewItem zoomContributionViewItem;
55
56 private IToolBarManager toolBarManager;
57
58 private PolytomousKeyEditorInput input;
59
60 @Inject
61 protected ESelectionService selService;
62
63 @Inject
64 private MDirtyable dirty;
65
66 protected ISelectionChangedListener selectionChangedListener;
67
68 @Inject
69 private MPart thisPart;
70
71 @Persist
72 public void doSave() {
73 getConversationHolder().commit(true);
74 setDirty(false);
75 viewer.refresh();
76 }
77
78 public void init(PolytomousKeyEditorInput input) {
79 this.input = input;
80 }
81
82 public boolean isDirty() {
83 return dirty.isDirty();
84 }
85
86 public PolytomousKeyEditorInput getEditorInput() {
87 return input;
88 }
89
90 //FIXME E4 migrate
91 // private void createToolbar() {
92 // getToolBarManager().add(getZoomContributionViewItem());
93 // }
94
95 protected abstract IBaseLabelProvider getLabelProvider();
96
97 protected abstract IContentProvider getContentProvider();
98
99 /**
100 * Return the key that this editor
101 *
102 * @return
103 */
104 public abstract T getKey();
105
106 @Focus
107 public void setFocus() {
108 if(viewer!=null && viewer.getControl()!=null && !viewer.getControl().isDisposed()) {
109 viewer.getControl().setFocus();
110 }
111 }
112
113 public void refresh() {
114 viewer.refresh();
115 }
116
117 @Override
118 public void update(CdmDataChangeMap changeEvents) {
119
120 }
121
122 @Override
123 public AbstractZoomableViewer getZoomableViewer() {
124 return viewer;
125 }
126
127 protected LayoutAlgorithm getLayoutAlgoritm() {
128 if (layoutAlgoritm == null) {
129 // layoutAlgoritm = new CompositeLayoutAlgorithm(
130 // LayoutStyles.NO_LAYOUT_NODE_RESIZING,
131 // new LayoutAlgorithm[] {
132 // new TreeLayoutAlgorithm(
133 // LayoutStyles.NO_LAYOUT_NODE_RESIZING),
134 // new HorizontalShift(
135 // LayoutStyles.NO_LAYOUT_NODE_RESIZING) });
136
137 layoutAlgoritm = new TreeLayoutAlgorithm(
138 LayoutStyles.NO_LAYOUT_NODE_RESIZING);
139 layoutAlgoritm.setEntityAspectRatio(0.5);
140 }
141 return layoutAlgoritm;
142 }
143
144 private ZoomContributionViewItem getZoomContributionViewItem() {
145 if (zoomContributionViewItem == null) {
146 zoomContributionViewItem = new ZoomContributionViewItem(this);
147 }
148 return new ZoomContributionViewItem(this);
149 }
150
151 @Override
152 public boolean postOperation(CdmBase objectAffectedByOperation) {
153 setDirty(true);
154 refresh();
155
156 if (objectAffectedByOperation instanceof PolytomousKeyNode) {
157 viewer.setSelection(new StructuredSelection(
158 objectAffectedByOperation), true);
159 }
160
161 return true;
162 }
163
164 //FIXME E4 migrate
165 // private IToolBarManager getToolBarManager() {
166 // if (toolBarManager == null) {
167 // toolBarManager = getEditorSite().getActionBars()
168 // .getToolBarManager();
169 // }
170 // return toolBarManager;
171 // }
172
173 public void applyLayout() {
174 viewer.applyLayout();
175 }
176
177 @Override
178 public boolean onComplete() {
179 return true;
180 }
181
182 public void setDirty(boolean dirty) {
183 this.dirty.setDirty(dirty);
184 }
185
186 @Override
187 public void changed(Object element) {
188 setDirty(true);
189 viewer.update(element, null);
190 }
191
192 @Override
193 public void forceDirty() {
194 changed(null);
195 }
196
197 }