/
ComposerFormEditor.java
executable file
·154 lines (123 loc) · 4.26 KB
/
ComposerFormEditor.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package com.dubture.composer.ui.editor.composer;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.SharedHeaderFormEditor;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.getcomposer.ComposerPackage;
public class ComposerFormEditor extends SharedHeaderFormEditor {
protected boolean dirty = false;
protected ComposerPackage composerPackage;
protected IDocumentProvider documentProvider;
// TODO JsonTextEditor some day...
protected ComposerTextEditor textEditor = new ComposerTextEditor();
public ComposerFormEditor() {
super();
documentProvider = textEditor.getDocumentProvider();
}
@Override
protected void setInput(IEditorInput input) {
super.setInput(input);
try {
documentProvider.connect(input);
// TODO some sort of listener to get notified when the file changes
//
// 1) document listener: documentProvider.getDocument(input).addDocumentListener
// 2) documentProvider.addElementStateListener()
// 3) Resource Listener
//
// see: https://github.com/pulse00/Composer-Eclipse-Plugin/issues/23
} catch (CoreException e) {
e.printStackTrace();
}
}
@Override
public void init(IEditorSite site, IEditorInput input)
throws PartInitException {
super.init(site, input);
// eclipse way to get input, unfortunately does not exist for some
// reasons?
// File json = ((IFileEditorInput) input).getFile().getFullPath().toFile();
// workaround
// String composerJsonFilePath =
// ResourcesPlugin.getWorkspace().getRoot().getLocation().toString() +
// ((IFileEditorInput) input).getFile().getFullPath().toString();
//
// composerFile = new File(composerJsonFilePath);
// ok, cool way here we go
String json = documentProvider.getDocument(input).get();
composerPackage = new ComposerPackage(json);
composerPackage.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
if (e.getOldValue() != e.getNewValue()) {
// System.out.println("Composer Property Changed: " + e.getPropertyName() + ", old: " + e.getOldValue() + ", new: " + e.getNewValue());
setDirty(true);
}
}
});
}
@Override
protected void createHeaderContents(IManagedForm headerForm) {
ScrolledForm header = headerForm.getForm();
header.setText("Composer");
FormToolkit toolkit = headerForm.getToolkit();
toolkit.decorateFormHeading(header.getForm());
}
@Override
protected void addPages() {
try {
addOverview();
addDependencies();
// addDependencyGraph();
setActivePage(DependenciesPage.ID);
// Aww, can't use jsonedit here :(
// addPage(new JsonTextEditor(), getEditorInput());
} catch (PartInitException e) {
e.printStackTrace();
}
}
protected void addOverview() throws PartInitException {
addPage(new OverviewPage(this, OverviewPage.ID, "Overview"));
}
protected void addDependencies() throws PartInitException {
addPage(new DependenciesPage(this, DependenciesPage.ID, "Dependencies"));
}
protected void addDependencyGraph() throws PartInitException {
addPage(new DependencyGraphPage(this, DependencyGraphPage.ID, "Dependency Graph"));
}
public void doSave(IProgressMonitor monitor) {
try {
IDocument document = documentProvider.getDocument(getEditorInput());
documentProvider.aboutToChange(getEditorInput());
document.set(composerPackage.toJson());
documentProvider.saveDocument(monitor, getEditorInput(), document, true);
documentProvider.changed(getEditorInput());
setDirty(false);
} catch (Exception e) {
e.printStackTrace();
}
}
public void doSaveAs() {
}
public boolean isSaveAsAllowed() {
return false;
}
public boolean isDirty() {
return this.dirty;
}
public void setDirty(boolean value) {
this.dirty = value;
editorDirtyStateChanged();
}
public ComposerPackage getComposerPackge() {
return composerPackage;
}
}