diff options
Diffstat (limited to 'jython-tosca-parser/src/main/java/org/openecomp/sdc/toscaparser/ToscaParserFactory.java')
-rw-r--r-- | jython-tosca-parser/src/main/java/org/openecomp/sdc/toscaparser/ToscaParserFactory.java | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/jython-tosca-parser/src/main/java/org/openecomp/sdc/toscaparser/ToscaParserFactory.java b/jython-tosca-parser/src/main/java/org/openecomp/sdc/toscaparser/ToscaParserFactory.java new file mode 100644 index 0000000..8bb1e17 --- /dev/null +++ b/jython-tosca-parser/src/main/java/org/openecomp/sdc/toscaparser/ToscaParserFactory.java @@ -0,0 +1,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(); + } + } +} |