Project

General

Profile

Download (5.17 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 *
3
 */
4
package eu.etaxonomy.taxeditor.editor.key.e4;
5

    
6
import javax.inject.Inject;
7

    
8
import org.eclipse.core.runtime.IProgressMonitor;
9
import org.eclipse.e4.ui.di.Focus;
10
import org.eclipse.e4.ui.di.Persist;
11
import org.eclipse.e4.ui.model.application.ui.MDirtyable;
12
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
13
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
14
import org.eclipse.jface.action.IToolBarManager;
15
import org.eclipse.jface.viewers.IBaseLabelProvider;
16
import org.eclipse.jface.viewers.IContentProvider;
17
import org.eclipse.jface.viewers.ISelectionChangedListener;
18
import org.eclipse.jface.viewers.StructuredSelection;
19
import org.eclipse.swt.widgets.Composite;
20
import org.eclipse.zest.core.viewers.AbstractZoomableViewer;
21
import org.eclipse.zest.core.viewers.GraphViewer;
22
import org.eclipse.zest.core.viewers.IZoomableWorkbenchPart;
23
import org.eclipse.zest.core.viewers.ZoomContributionViewItem;
24
import org.eclipse.zest.layouts.LayoutAlgorithm;
25
import org.eclipse.zest.layouts.LayoutStyles;
26
import org.eclipse.zest.layouts.algorithms.TreeLayoutAlgorithm;
27

    
28
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
29
import eu.etaxonomy.cdm.model.common.CdmBase;
30
import eu.etaxonomy.cdm.model.description.IIdentificationKey;
31
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
32
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
33
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
34
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
35
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
36
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
37
import eu.etaxonomy.taxeditor.workbench.part.IE4SavablePart;
38

    
39
/**
40
 *
41
 * @author pplitzner
42
 * @since Sep 28, 2017
43
 *
44
 * @param <T>
45
 */
46
public abstract class AbstractGraphKeyEditorE4<T extends IIdentificationKey>
47
implements IConversationEnabled, IE4SavablePart,
48
		IZoomableWorkbenchPart, IPostOperationEnabled,
49
		IDirtyMarkable {
50

    
51
	protected CdmFormFactory formFactory;
52
	protected Composite container;
53
	protected GraphViewer viewer;
54

    
55
	private LayoutAlgorithm layoutAlgoritm;
56
	private ZoomContributionViewItem zoomContributionViewItem;
57

    
58
	private IToolBarManager toolBarManager;
59

    
60
    private PolytomousKeyEditorInput input;
61

    
62
    @Inject
63
    protected ESelectionService selService;
64

    
65
    @Inject
66
    private MDirtyable dirty;
67

    
68
    protected ISelectionChangedListener selectionChangedListener;
69

    
70
    @Inject
71
    private MPart thisPart;
72

    
73
	@Persist
74
	public void save(IProgressMonitor monitor) {
75
		getConversationHolder().commit(true);
76
		setDirty(false);
77
		viewer.refresh();
78
	}
79

    
80
	public void init(PolytomousKeyEditorInput input) {
81
		this.input = input;
82

    
83

    
84
        viewer.setInput(getKey());
85
        if(getKey()!=null){
86
            thisPart.setLabel(getKey().toString());
87
        }
88
	}
89

    
90
	public boolean isDirty() {
91
		return dirty.isDirty();
92
	}
93

    
94
    public PolytomousKeyEditorInput getEditorInput() {
95
        return input;
96
    }
97

    
98
	//FIXME E4 migrate
99
//	private void createToolbar() {
100
//		getToolBarManager().add(getZoomContributionViewItem());
101
//	}
102

    
103
	protected abstract IBaseLabelProvider getLabelProvider();
104

    
105
	protected abstract IContentProvider getContentProvider();
106

    
107
	/**
108
	 * Return the key that this editor
109
	 *
110
	 * @return
111
	 */
112
	public abstract T getKey();
113

    
114
	@Focus
115
	public void setFocus() {
116
	    if(viewer!=null && viewer.getControl()!=null && !viewer.getControl().isDisposed()) {
117
            viewer.getControl().setFocus();
118
        }
119
	}
120

    
121
	public void refresh() {
122
		viewer.refresh();
123
	}
124

    
125
	@Override
126
	public void update(CdmDataChangeMap changeEvents) {
127

    
128
	}
129

    
130
	@Override
131
	public AbstractZoomableViewer getZoomableViewer() {
132
		return viewer;
133
	}
134

    
135
	protected LayoutAlgorithm getLayoutAlgoritm() {
136
		if (layoutAlgoritm == null) {
137
			// layoutAlgoritm = new CompositeLayoutAlgorithm(
138
			// LayoutStyles.NO_LAYOUT_NODE_RESIZING,
139
			// new LayoutAlgorithm[] {
140
			// new TreeLayoutAlgorithm(
141
			// LayoutStyles.NO_LAYOUT_NODE_RESIZING),
142
			// new HorizontalShift(
143
			// LayoutStyles.NO_LAYOUT_NODE_RESIZING) });
144

    
145
			layoutAlgoritm = new TreeLayoutAlgorithm(
146
					LayoutStyles.NO_LAYOUT_NODE_RESIZING);
147
			layoutAlgoritm.setEntityAspectRatio(0.5);
148
		}
149
		return layoutAlgoritm;
150
	}
151

    
152
	private ZoomContributionViewItem getZoomContributionViewItem() {
153
		if (zoomContributionViewItem == null) {
154
			zoomContributionViewItem = new ZoomContributionViewItem(this);
155
		}
156
		return new ZoomContributionViewItem(this);
157
	}
158

    
159
	@Override
160
	public boolean postOperation(CdmBase objectAffectedByOperation) {
161
		setDirty(true);
162
		refresh();
163

    
164
		if (objectAffectedByOperation instanceof PolytomousKeyNode) {
165
			viewer.setSelection(new StructuredSelection(
166
					objectAffectedByOperation), true);
167
		}
168

    
169
		return true;
170
	}
171

    
172
	//FIXME E4 migrate
173
//	private IToolBarManager getToolBarManager() {
174
//		if (toolBarManager == null) {
175
//			toolBarManager = getEditorSite().getActionBars()
176
//					.getToolBarManager();
177
//		}
178
//		return toolBarManager;
179
//	}
180

    
181
	public void applyLayout() {
182
		viewer.applyLayout();
183
	}
184

    
185
	@Override
186
	public boolean onComplete() {
187
		return true;
188
	}
189

    
190
	public void setDirty(boolean dirty) {
191
		this.dirty.setDirty(dirty);
192
	}
193

    
194
	@Override
195
	public void changed(Object element) {
196
		setDirty(true);
197
		viewer.update(element, null);
198
	}
199

    
200
	@Override
201
	public void forceDirty() {
202
	    changed(null);
203
	}
204

    
205
}
(1-1/2)