From a2db714b484ea32587a500775cc29d3d78c07245 Mon Sep 17 00:00:00 2001 From: Omar Sweidan Date: Tue, 7 Jun 2022 16:47:40 +0200 Subject: [PATCH] 410 feladat megoldva --- .../META-INF/MANIFEST.MF | 1 + .../src/user/commons/xml/XMLUtils.java | 39 ++++ .../server/JobEngineConfiguration.java | 8 +- .../jobengine/server/ast/JobTemplate.java | 126 ------------ .../user/jobengine/server/ast/XMLEncoder.java | 194 ++++++++++++++++++ .../pages/processVisualizer2.zul | 2 +- .../jobengine/zk/model/JobFlowChartModel.java | 10 +- 7 files changed, 247 insertions(+), 133 deletions(-) create mode 100644 server/user.jobengine.osgi.commons/src/user/commons/xml/XMLUtils.java create mode 100644 server/user.jobengine.osgi.server/src/user/jobengine/server/ast/XMLEncoder.java diff --git a/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF b/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF index 7f2eb3dc..b33352c6 100644 --- a/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF +++ b/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF @@ -50,6 +50,7 @@ Export-Package: user.commons, user.commons.server.protocol, user.commons.server.tcp, user.commons.strings, + user.commons.xml, user.mediacube.metadata.interfaces Require-Bundle: org.apache.commons.lang;bundle-version="2.4.0", user.tsm.client;bundle-version="1.2.0", diff --git a/server/user.jobengine.osgi.commons/src/user/commons/xml/XMLUtils.java b/server/user.jobengine.osgi.commons/src/user/commons/xml/XMLUtils.java new file mode 100644 index 00000000..fe896fb2 --- /dev/null +++ b/server/user.jobengine.osgi.commons/src/user/commons/xml/XMLUtils.java @@ -0,0 +1,39 @@ +package user.commons.xml; + +import java.io.IOException; +import java.io.StringWriter; + +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; + +public final class XMLUtils { + public static String getStringFromDocument(Document document) { + StringWriter writer = null; + try { + DOMSource domSource = new DOMSource(document); + writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer transformer = tf.newTransformer(); + transformer.setOutputProperty(OutputKeys.METHOD, "xml"); + transformer.transform(domSource, result); + return writer.toString(); + } catch (TransformerException ex) { + return null; + } finally { + if (writer != null) { + try { + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java index ec796c13..7580b32b 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java @@ -46,6 +46,7 @@ import user.commons.nosql.NoSQLUtils; import user.jobengine.server.ast.JSONEncoder; import user.jobengine.server.ast.JobTemplate; import user.jobengine.server.ast.Parser; +import user.jobengine.server.ast.XMLEncoder; import user.jobengine.server.scheduler.ScheduledJob; import user.jobengine.server.steps.IJobStep; @@ -163,7 +164,7 @@ public class JobEngineConfiguration implements IJobEngineConfiguration { String name = jobJSON.getString("name"); String template = jobJSON.getString("template"); - // 220426 ha a name null, akkor nem regisztralhato tobbszor ugyan az a template + // 220426 ha a name null, akkor nem regisztrálható többször ugyanaz a template // sj.setJobId(String.format("%s.%s", template, name)); sj.setJobId(String.format("%s.%s", template, RandomStringUtils.randomAlphanumeric(8))); @@ -480,8 +481,9 @@ public class JobEngineConfiguration implements IJobEngineConfiguration { } FileOutputStream fos = new FileOutputStream(filePath); logger.info("Saving job template to {}", filePath); - if (templateToSave.toXmlDocument() != null) { - writeXml(templateToSave.toXmlDocument(), fos); + if (templateToSave != null) { + XMLEncoder xmlEncoder = new XMLEncoder(); + writeXml((Document) xmlEncoder.visitJobTemplate(templateToSave, null), fos); } } } catch (FileNotFoundException e) { diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/ast/JobTemplate.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/ast/JobTemplate.java index 43164108..4ba1a588 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/ast/JobTemplate.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/ast/JobTemplate.java @@ -1,26 +1,13 @@ package user.jobengine.server.ast; import java.io.Serializable; -import java.io.StringWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.w3c.dom.Comment; -import org.w3c.dom.Document; -import org.w3c.dom.Element; /** * Gyökér osztály. @@ -228,117 +215,4 @@ public class JobTemplate extends AST implements Serializable { public Object visit(Visitor v, Object o) { return v.visitJobTemplate(this, o); } - - public Document toXmlDocument() { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder documentBuilder; - Document document = null; - try { - documentBuilder = dbf.newDocumentBuilder(); - document = documentBuilder.newDocument(); - - if (getDescription() != null) { - Comment description = document.createComment(getDescription()); - document.appendChild(description); - } - - Element root = document.createElement("jobtemplate"); - document.appendChild(root); - if (getName() != null) { - root.setAttribute("name", getName()); - } - root.setAttribute("useSessionLog", Boolean.toString(isUseSessionLog())); - - if (getDeclarationSequence() != null) { - Element declarations = document.createElement("declarations"); - root.appendChild(declarations); - Element parameters = document.createElement("parameters"); - Element variables = document.createElement("variables"); - - for (int i = 0; i < getDeclarationSequence().getDeclarations().size(); i++) { - Element declarationElement = null; - Declaration declaration = getDeclarationSequence().getDeclarations().get(i); - - if (declaration.getClass().getSimpleName().equals("ParameterDeclaration")) { - declarationElement = document.createElement("parameter"); - declarationElement.setAttribute("name", declaration.getName()); - declarationElement.setAttribute("type", declaration.getType()); - parameters.appendChild(declarationElement); - } else { - declarationElement = document.createElement("variable"); - declarationElement.setAttribute("name", declaration.getName()); - declarationElement.setAttribute("type", declaration.getType()); - variables.appendChild(declarationElement); - } - } - declarations.appendChild(parameters); - if (variables.hasChildNodes()) { - declarations.appendChild(variables); - } - } - if (getCommandSequence() != null) { - Element commands = document.createElement("commands"); - root.appendChild(commands); - for (int i = 0; i < getCommandSequence().getCommands().size(); i++) { - CallJobStepCommand cjs = (CallJobStepCommand) getCommandSequence().getCommands().get(i); - Element command = document.createElement("calljobstep"); - command.setAttribute("type", cjs.getType()); - command.setAttribute("weight", Integer.toString(cjs.getWeight())); - commands.appendChild(command); - - InputParameterSequence ips = (InputParameterSequence) cjs.getInputParameterSequence(); - Element inputs = document.createElement("inputs"); - - for (int j = 0; j < ips.getParameters().size(); j++) { - InputParameter ip = (InputParameter) (ips.getParameters().get(j)); - Element input = document.createElement("input"); - Element parameter; - if (ip.getExpression().getClass().getSimpleName().equals("VariableExpression")) { - parameter = document.createElement("variable"); - } else { - parameter = document.createElement("parameter"); - } - parameter.setAttribute("name", ip.getExpression().getName()); - input.appendChild(parameter); - inputs.appendChild(input); - } - command.appendChild(inputs); - - OutputParameterSequence ops = (OutputParameterSequence) cjs.getOutputParameterSequence(); - if (ops != null) { - Element outputs = document.createElement("outputs"); - for (int j = 0; j < ops.getParameters().size(); j++) { - OutputParameter op = (OutputParameter) (ops.getParameters().get(j)); - Element output = document.createElement("output"); - Element variable = document.createElement("variable"); - variable.setAttribute("name", op.getVariableName().getName()); - output.appendChild(variable); - outputs.appendChild(output); - } - command.appendChild(outputs); - } - } - } - } catch (ParserConfigurationException e) { - e.printStackTrace(); - } - - return document; - } - - public String getStringFromTemplate() { - try { - Document xmlDocument = this.toXmlDocument(); - DOMSource domSource = new DOMSource(xmlDocument); - StringWriter writer = new StringWriter(); - StreamResult result = new StreamResult(writer); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - transformer.transform(domSource, result); - return writer.toString(); - } catch (TransformerException ex) { - ex.printStackTrace(); - return null; - } - } } diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/ast/XMLEncoder.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/ast/XMLEncoder.java new file mode 100644 index 00000000..e4e4aeca --- /dev/null +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/ast/XMLEncoder.java @@ -0,0 +1,194 @@ +package user.jobengine.server.ast; + +import java.util.List; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +public class XMLEncoder implements Visitor { + private static final Logger logger = LogManager.getLogger(JobTemplate.class); + + @Override + public Object visitCallStepCommand(CallJobStepCommand command, Object o) { + Document document = (Document) o; + Element jobtemplate = (Element) document.getElementsByTagName("jobtemplate").item(0); + Element commands = (Element) jobtemplate.getElementsByTagName("commands").item(0); + Element newCommand = document.createElement("calljobstep"); + newCommand.setAttribute("type", command.getType()); + newCommand.setAttribute("weight", Integer.toString(command.getWeight())); + commands.appendChild(newCommand); + + Element inputs = document.createElement("inputs"); + newCommand.appendChild(inputs); + + List inputParameters = command.getInputParameterSequence().getParameters(); + for (int i = 0; i < inputParameters.size(); i++) { + Element newInput = document.createElement("input"); + Expression expression = ((InputParameter) inputParameters.get(i)).getExpression(); + String inputName = expression.getName(); + + if (expression instanceof ParameterExpression) { + Element newInputParameter = document.createElement("parameter"); + newInputParameter.setAttribute("name", inputName); + newInput.appendChild(newInputParameter); + } else { + Element newInputVariable = document.createElement("variable"); + newInputVariable.setAttribute("name", inputName); + newInput.appendChild(newInputVariable); + } + inputs.appendChild(newInput); + } + if (command.getOutputParameterSequence() != null) { + Element outputs = document.createElement("outputs"); + newCommand.appendChild(outputs); + List outputParameters = command.getOutputParameterSequence().getParameters(); + for (int i = 0; i < outputParameters.size(); i++) { + Element newOutput = document.createElement("output"); + Element newOutputVariable = document.createElement("variable"); + newOutputVariable.setAttribute("name", + ((OutputParameter) outputParameters.get(i)).getVariableName().getName()); + newOutput.appendChild(newOutputVariable); + outputs.appendChild(newOutput); + } + } + + return null; + } + + @Override + public Object visitCommandSequence(CommandSequence commandSequence, Object o) { + List commands = commandSequence.getCommands(); + if (commands != null) { + for (Command command : commands) { + command.visit(this, o); + } + } + return null; + } + + @Override + public Object visitDeclarationSequence(DeclarationSequence declarationSequence, Object o) { + List declarations = declarationSequence.getDeclarations(); + if (declarations != null) { + for (Declaration declaration : declarations) { + declaration.visit(this, o); + } + } + return null; + } + + @Override + public Object visitInputParameter(InputParameter inputParameter, Object o) { + return null; + } + + @Override + public Object visitInputParameterSequence(InputParameterSequence parameterSequence, Object o) { + return null; + } + + @Override + public Object visitJobTemplate(JobTemplate jobTemplate, Object o) { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder documentBuilder; + Document document = null; + try { + documentBuilder = dbf.newDocumentBuilder(); + document = documentBuilder.newDocument(); + Element root = document.createElement("jobtemplate"); + document.appendChild(root); + if (jobTemplate.getName() != null) { + root.setAttribute("name", jobTemplate.getName()); + } + root.setAttribute("useSessionLog", Boolean.toString(jobTemplate.isUseSessionLog())); + + Element declarations = document.createElement("declarations"); + root.appendChild(declarations); + Element parameters = document.createElement("parameters"); + Element variables = document.createElement("variables"); + declarations.appendChild(parameters); + declarations.appendChild(variables); + if (jobTemplate.getDeclarationSequence() != null) { + DeclarationSequence ds = jobTemplate.getDeclarationSequence(); + ds.visit(this, document); + } + + Element commands = document.createElement("commands"); + root.appendChild(commands); + if (jobTemplate.getCommandSequence() != null) { + CommandSequence cs = jobTemplate.getCommandSequence(); + cs.visit(this, document); + } + } catch (ParserConfigurationException e) { + logger.info("ParserConfigurationException: {}", e.getMessage()); + } + + return document; + } + + @Override + public Object visitOutputParameter(OutputParameter outputParameter, Object o) { + return null; + } + + @Override + public Object visitOutputParameterSequence(OutputParameterSequence parameterSequence, Object o) { + return null; + } + + @Override + public Object visitParameterDeclaration(ParameterDeclaration parameterDeclaration, Object o) { + Document document = (Document) o; + logger.info("document: {}", document.toString()); + Element jobtemplate = (Element) document.getElementsByTagName("jobtemplate").item(0); + Element declarations = (Element) jobtemplate.getElementsByTagName("declarations").item(0); + Element parameters = (Element) declarations.getElementsByTagName("parameters").item(0); + Element newParameter = document.createElement("parameter"); + newParameter.setAttribute("name", parameterDeclaration.getName()); + newParameter.setAttribute("type", parameterDeclaration.getType()); + parameters.appendChild(newParameter); + + return null; + } + + @Override + public Object visitParameterExpression(ParameterExpression parameterExpression, Object o) { + return null; + } + + @Override + public Object visitSendUserMessageCommand(SendUserMessageCommand command, Object o) { + return null; + } + + @Override + public Object visitVariableDeclaration(VariableDeclaration variableDeclaration, Object o) { + Document document = (Document) o; + logger.info("document: {}", document.toString()); + Element jobtemplate = (Element) document.getElementsByTagName("jobtemplate").item(0); + Element declarations = (Element) jobtemplate.getElementsByTagName("declarations").item(0); + Element variables = (Element) declarations.getElementsByTagName("variables").item(0); + Element newVariable = document.createElement("variable"); + newVariable.setAttribute("name", variableDeclaration.getName()); + newVariable.setAttribute("type", variableDeclaration.getType()); + variables.appendChild(newVariable); + + return null; + } + + @Override + public Object visitVariableExpression(VariableExpression variableExpression, Object o) { + return null; + } + + @Override + public Object visitVariableName(VariableName variableName, Object o) { + return null; + } +} diff --git a/server/user.mediacube.gui/pages/processVisualizer2.zul b/server/user.mediacube.gui/pages/processVisualizer2.zul index 7ff56283..b1610b13 100644 --- a/server/user.mediacube.gui/pages/processVisualizer2.zul +++ b/server/user.mediacube.gui/pages/processVisualizer2.zul @@ -5,7 +5,7 @@
-
diff --git a/server/user.mediacube.gui/src/user/jobengine/zk/model/JobFlowChartModel.java b/server/user.mediacube.gui/src/user/jobengine/zk/model/JobFlowChartModel.java index 1c4b5ce0..242fcbb1 100644 --- a/server/user.mediacube.gui/src/user/jobengine/zk/model/JobFlowChartModel.java +++ b/server/user.mediacube.gui/src/user/jobengine/zk/model/JobFlowChartModel.java @@ -2,6 +2,7 @@ package user.jobengine.zk.model; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.w3c.dom.Document; import org.zkoss.bind.annotation.AfterCompose; import org.zkoss.bind.annotation.BindingParam; import org.zkoss.bind.annotation.Command; @@ -19,6 +20,7 @@ import org.zkoss.zul.Tab; import com.ibm.nosql.json.api.BasicDBObject; +import user.commons.xml.XMLUtils; import user.jobengine.server.ast.CallJobStepCommand; import user.jobengine.server.ast.CommandSequence; import user.jobengine.server.ast.DeclarationSequence; @@ -32,6 +34,7 @@ import user.jobengine.server.ast.ParameterExpression; import user.jobengine.server.ast.VariableDeclaration; import user.jobengine.server.ast.VariableExpression; import user.jobengine.server.ast.VariableName; +import user.jobengine.server.ast.XMLEncoder; public class JobFlowChartModel extends BaseModel { private static final Logger logger = LogManager.getLogger(); @@ -61,15 +64,16 @@ public class JobFlowChartModel extends BaseModel { @Command public void onFlowchartDataChanged(@ContextParam(ContextType.TRIGGER_EVENT) Event event) { logger.info("onFlowchartDataChanged"); - logger.info("template: {}", JSONObjectToJobtemplate((JSONObject) ((JSONObject) event.getData()).get("model")) - .getStringFromTemplate()); + XMLEncoder xmlEncoder = new XMLEncoder(); + JobTemplate jobTemplate = JSONObjectToJobtemplate((JSONObject) ((JSONObject) event.getData()).get("model")); + Document document = (Document) xmlEncoder.visitJobTemplate(jobTemplate, null); + logger.info("converted document: {}", XMLUtils.getStringFromDocument(document)); } private JobTemplate JSONObjectToJobtemplate(JSONObject data) { JobTemplate template = new JobTemplate(); DeclarationSequence ds = new DeclarationSequence(); template.setDeclarationSequence(ds); - logger.info("template: {}", template.getStringFromTemplate()); JSONArray params = (JSONArray) data.get("params"); for (int i = 0; i < params.size(); i++) { -- 2.54.0