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
|
package hu.bme.mit.inf.dslreasoner.workspace
import java.io.BufferedReader
import java.io.ByteArrayInputStream
import java.io.IOException
import java.io.InputStreamReader
import org.eclipse.core.resources.IContainer
import org.eclipse.core.resources.IFolder
import org.eclipse.core.resources.IProject
import org.eclipse.core.resources.IWorkspaceRoot
import org.eclipse.core.resources.ResourcesPlugin
import org.eclipse.core.runtime.NullProgressMonitor
import org.eclipse.emf.common.util.URI
class ProjectWorkspace extends ReasonerWorkspace{
val monitor = new NullProgressMonitor
var IContainer target;
new(String targetFolder, String prefix) {
super(targetFolder, prefix)
}
override protected getURI(String name) {
URI.createURI(targetFolder + "/" + prefix + name,true);
}
def protected getDirUri() {
URI.createURI(targetFolder,true)
}
override getWorkspaceURI() {
getDirUri
}
override init() {
target = ResourcesPlugin.workspace.root
val segments = if(dirUri.platformResource) {
dirUri.segments.subList(1,dirUri.segments.size)
} else {
throw new UnsupportedOperationException('''Only platform resources are supported, but recieved: "«dirUri»"!''')
}
for(nameSegment : segments) {
target = createContainer(target,nameSegment)
}
}
override clear() {
target.members.forEach[delete(false,monitor)]
}
def protected dispatch createContainer(IWorkspaceRoot root, String name) {
val project = root.getProject(name)
if(project.exists) {
if(!project.open) {
project.open(monitor)
}
} else {
project.create(monitor)
}
return project
}
def protected dispatch createContainer(IProject root, String name) {
val folder = root.getFolder(name);
if(!folder.exists) {
folder.create(true,true,monitor)
}
return folder
}
def protected dispatch createContainer(IFolder root, String name) {
val folder = root.getFolder(name);
if(!folder.exists) {
folder.create(true,true,monitor)
}
return folder
}
def dispatch getTargetFile(IFolder targetFolder, String name) { targetFolder.getFile(name) }
def dispatch getTargetFile(IProject targetProject, String name) { targetProject.getFile(name) }
override writeText(String name, CharSequence content) {
val file = target.getTargetFile(name);
if(!file.exists()) {
file.create(new ByteArrayInputStream(content.toString().getBytes()),true, new NullProgressMonitor());
return URI.createPlatformResourceURI(file.projectRelativePath.toString,true)
}
file.appendContents(new ByteArrayInputStream(content.toString().getBytes()),true,false,new NullProgressMonitor())
return URI.createPlatformResourceURI(file.projectRelativePath.toString,true)
}
override readText(String name) {
val file = target.getTargetFile(name)
val in = new BufferedReader(new InputStreamReader(file.contents))
var result = ""
var String line;
while ((line = in.readLine()) != null) {
result = result.concat(line)
}
return result
}
override protected renameFile(String name) {
throw new UnsupportedOperationException("TODO: auto-generated method stub")
}
override subWorkspace(String targetFolder, String prefix) {
return new ProjectWorkspace(this.targetFolder+"/"+targetFolder,this.prefix + prefix);
}
override allFiles() {
target.members.map[it.name]
}
override public getFile(String name) {
val file = target.getTargetFile(name);
val uri = if(file.isLinked()){
file.getRawLocation();
} else {
file.getLocation();
}
return uri.toFile
}
override refreshFile(String name) {
val file = target.getTargetFile(name)
file.refreshLocal(1,monitor)
}
}
|