-
Notifications
You must be signed in to change notification settings - Fork 9
/
wsAccess.js
100 lines (91 loc) · 5.25 KB
/
wsAccess.js
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
function applicationStarted(pluginWorkspaceAccess) {
Packages.java.lang.System.err.println("Application started " + pluginWorkspaceAccess);
var editorOpenListener = {
editorOpened: function (editorLocation) {
var editorAccess = pluginWorkspaceAccess.getEditorAccess(editorLocation, Packages.ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace.MAIN_EDITING_AREA);
if (editorAccess.getDocumentTypeInformation() != null) {
//It's an XML document
var content = readContent(editorAccess.createContentReader());
content = content.replaceAll("(<!DOCTYPE .*?>)", "<!--DOCTYPE DECL:$1-->");
Packages.java.lang.System.err.println("\nFile = " + editorLocation);
try {
var transformer = pluginWorkspaceAccess.getXMLUtilAccess().createXSLTTransformer(
new Packages.javax.xml.transform.stream.StreamSource(jsDirURL + "/open.xsl"),
null,
Packages.ro.sync.exml.workspace.api.util.XMLUtilAccess.TRANSFORMER_SAXON_ENTERPRISE_EDITION, false);
var sw = new Packages.java.io.StringWriter();
var streamRes = new Packages.javax.xml.transform.stream.StreamResult(sw);
transformer.transform(new Packages.javax.xml.transform.stream.StreamSource(new Packages.java.io.StringReader(content), editorAccess.getEditorLocation().toString()), streamRes);
sw.close();
var newContent = sw.toString();
newContent = newContent.replaceAll("<!--DOCTYPE DECL:(.*?)-->", "\n$1\n");
editorAccess.reloadContent(new Packages.java.io.StringReader(newContent));
//And set it as not modified
editorAccess.setModified(false);
}
catch (e1) {
e1.printStackTrace();
}
}
//Radu's comment, also add the save listener here:
var saveListener = {
//Editor is about to be saved
editorSaved: function (operationType) {
try {
Packages.java.lang.System.err.println("\nSaved");
var file = pluginWorkspaceAccess.getUtilAccess().locateFile(editorAccess.getEditorLocation());
var lastModified = -1;
if (file != null) {
lastModified = file.lastModified();
}
var content = readContent(editorAccess.createContentReader());
content = content.replaceAll("(<!DOCTYPE .*?>)", "<!--DOCTYPE DECL:$1-->");
var transformer = pluginWorkspaceAccess.getXMLUtilAccess().createXSLTTransformer(
new Packages.javax.xml.transform.stream.StreamSource(jsDirURL + "/save.xsl"), null,
Packages.ro.sync.exml.workspace.api.util.XMLUtilAccess.TRANSFORMER_SAXON_ENTERPRISE_EDITION, false);
var sw = new Packages.java.io.StringWriter();
var streamRes = new Packages.javax.xml.transform.stream.StreamResult(sw);
transformer.transform(new Packages.javax.xml.transform.stream.StreamSource(new Packages.java.io.StringReader(content), editorAccess.getEditorLocation().toString()), streamRes);
sw.close();
var newContent = sw.toString();
newContent = newContent.replaceAll("<!--DOCTYPE DECL:(.*?)-->", "\n$1\n");
var writer = new Packages.java.io.OutputStreamWriter(editorAccess.getEditorLocation().openConnection().getOutputStream(), editorAccess.getEncodingForSerialization());
writer.write(newContent);
writer.close();
if (lastModified != -1) {
//Reset the last modified flag
file.setLastModified(lastModified);
}
}
catch (e1) {
e1.printStackTrace();
}
}
};
saveListener = new JavaAdapter(Packages.ro.sync.exml.workspace.api.listeners.WSEditorListener, saveListener);
editorAccess.addEditorListener(saveListener);
}
};
editorOpenListener = new JavaAdapter(Packages.ro.sync.exml.workspace.api.listeners.WSEditorChangeListener, editorOpenListener);
pluginWorkspaceAccess.addEditorChangeListener(editorOpenListener, Packages.ro.sync.exml.workspace.api.PluginWorkspace.MAIN_EDITING_AREA);
}
function applicationClosing(pluginWorkspaceAccess) {
}
function readContent(reader){
br = new Packages.java.io.BufferedReader(reader);
line = null;
stringBuilder = new Packages.java.lang.StringBuilder();
try {
while((line = br.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append("\n");
}
} finally {
try {
reader.close();
} catch (e) {
e.print();
}
}
return stringBuilder.toString();
}