blob: 8bb1e173653681cba088802b04c3af6a1847ca4e (
plain)
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
|
package org.openecomp.sdc.toscaparser;
import java.io.IOException;
import org.openecomp.sdc.toscaparser.api.ToscaTemplateFactory;
import org.openecomp.sdc.toscaparser.utils.JarExtractor;
import org.python.util.PythonInterpreter;
/**
* This is the entry point of the tosca-parser: a factory for creating {@code ToscaParser}s.
* <b>This class is not thread-safe.</b> Once you are done with all {@code ToscaParser}s
* created by this factory, the {@code ToscaParserFactory} itself must be closed either by
* calling its close() method explicitly or preferrably by creating it in a try-with-resources block:
* <pre>
try (ToscaParserFactory toscaParserFactory = new ToscaParserFactory()){
ToscaParser parser = toscaParserFactory.create()
ToscaTemplate toscaTemplate = parser.parse(toscaFilePath);
...
}
* </pre>
* @author Yaniv Nahoum
*
*/
public class ToscaParserFactory implements AutoCloseable {
private JythonRuntime jythonRuntime;
public ToscaParser create() throws IOException {
initRuntime();
ToscaTemplateFactory toscaTemplateFactory = new ToscaTemplateFactory();
PythonInterpreter pythonInterpreter = new PythonInterpreter();
return new ToscaParser(toscaTemplateFactory, pythonInterpreter);
}
private void initRuntime() throws IOException {
if (jythonRuntime == null) {
jythonRuntime = new JythonRuntime(new JarExtractor());
jythonRuntime.initialize();
}
}
@Override
public void close() throws IOException {
if (jythonRuntime != null) {
jythonRuntime.terminate();
}
}
}
|