410 feladat megoldva
authorOmar Sweidan <omar.sweidan@userrendszerhaz.hu>
Tue, 7 Jun 2022 14:47:40 +0000 (16:47 +0200)
committerOmar Sweidan <omar.sweidan@userrendszerhaz.hu>
Tue, 7 Jun 2022 15:14:29 +0000 (17:14 +0200)
server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF
server/user.jobengine.osgi.commons/src/user/commons/xml/XMLUtils.java [new file with mode: 0644]
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java
server/user.jobengine.osgi.server/src/user/jobengine/server/ast/JobTemplate.java
server/user.jobengine.osgi.server/src/user/jobengine/server/ast/XMLEncoder.java [new file with mode: 0644]
server/user.mediacube.gui/pages/processVisualizer2.zul
server/user.mediacube.gui/src/user/jobengine/zk/model/JobFlowChartModel.java

index 7f2eb3dcf47c7e42fc97cc718babfbff2796fe78..b33352c6e0061e2a9310dd33336ee4cc168b4b88 100644 (file)
@@ -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 (file)
index 0000000..fe896fb
--- /dev/null
@@ -0,0 +1,39 @@
+package user.commons.xml;\r
+\r
+import java.io.IOException;\r
+import java.io.StringWriter;\r
+\r
+import javax.xml.transform.OutputKeys;\r
+import javax.xml.transform.Transformer;\r
+import javax.xml.transform.TransformerException;\r
+import javax.xml.transform.TransformerFactory;\r
+import javax.xml.transform.dom.DOMSource;\r
+import javax.xml.transform.stream.StreamResult;\r
+\r
+import org.w3c.dom.Document;\r
+\r
+public final class XMLUtils {\r
+       public static String getStringFromDocument(Document document) {\r
+               StringWriter writer = null;\r
+               try {\r
+                       DOMSource domSource = new DOMSource(document);\r
+                       writer = new StringWriter();\r
+                       StreamResult result = new StreamResult(writer);\r
+                       TransformerFactory tf = TransformerFactory.newInstance();\r
+                       Transformer transformer = tf.newTransformer();\r
+                       transformer.setOutputProperty(OutputKeys.METHOD, "xml");\r
+                       transformer.transform(domSource, result);\r
+                       return writer.toString();\r
+               } catch (TransformerException ex) {\r
+                       return null;\r
+               } finally {\r
+                       if (writer != null) {\r
+                               try {\r
+                                       writer.close();\r
+                               } catch (IOException e) {\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+}\r
index ec796c13ddbb8c8e139d146e1b862715a847bd26..7580b32b0e9ce37cec52820c428f2aefdc1097e1 100644 (file)
@@ -46,6 +46,7 @@ import user.commons.nosql.NoSQLUtils;
 import user.jobengine.server.ast.JSONEncoder;\r
 import user.jobengine.server.ast.JobTemplate;\r
 import user.jobengine.server.ast.Parser;\r
+import user.jobengine.server.ast.XMLEncoder;\r
 import user.jobengine.server.scheduler.ScheduledJob;\r
 import user.jobengine.server.steps.IJobStep;\r
 \r
@@ -163,7 +164,7 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
                String name = jobJSON.getString("name");\r
                String template = jobJSON.getString("template");\r
 \r
-               // 220426 ha a name null, akkor nem regisztralhato tobbszor ugyan az a template\r
+               // 220426 ha a name null, akkor nem regisztrálható többször ugyanaz a template\r
                // sj.setJobId(String.format("%s.%s", template, name));\r
                sj.setJobId(String.format("%s.%s", template, RandomStringUtils.randomAlphanumeric(8)));\r
 \r
@@ -480,8 +481,9 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
                                }\r
                                FileOutputStream fos = new FileOutputStream(filePath);\r
                                logger.info("Saving job template to {}", filePath);\r
-                               if (templateToSave.toXmlDocument() != null) {\r
-                                       writeXml(templateToSave.toXmlDocument(), fos);\r
+                               if (templateToSave != null) {\r
+                                       XMLEncoder xmlEncoder = new XMLEncoder();\r
+                                       writeXml((Document) xmlEncoder.visitJobTemplate(templateToSave, null), fos);\r
                                }\r
                        }\r
                } catch (FileNotFoundException e) {\r
index 431641085217471ce5f621ca595118612c36bde4..4ba1a588f9de10a47a6dae2ca84acde1b7f5e56d 100644 (file)
@@ -1,26 +1,13 @@
 package user.jobengine.server.ast;\r
 \r
 import java.io.Serializable;\r
-import java.io.StringWriter;\r
 import java.util.ArrayList;\r
 import java.util.HashMap;\r
 import java.util.List;\r
 import java.util.Map;\r
 \r
-import javax.xml.parsers.DocumentBuilder;\r
-import javax.xml.parsers.DocumentBuilderFactory;\r
-import javax.xml.parsers.ParserConfigurationException;\r
-import javax.xml.transform.Transformer;\r
-import javax.xml.transform.TransformerException;\r
-import javax.xml.transform.TransformerFactory;\r
-import javax.xml.transform.dom.DOMSource;\r
-import javax.xml.transform.stream.StreamResult;\r
-\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
-import org.w3c.dom.Comment;\r
-import org.w3c.dom.Document;\r
-import org.w3c.dom.Element;\r
 \r
 /**\r
  * Gyökér osztály.\r
@@ -228,117 +215,4 @@ public class JobTemplate extends AST implements Serializable {
        public Object visit(Visitor v, Object o) {\r
                return v.visitJobTemplate(this, o);\r
        }\r
-\r
-       public Document toXmlDocument() {\r
-               DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();\r
-               DocumentBuilder documentBuilder;\r
-               Document document = null;\r
-               try {\r
-                       documentBuilder = dbf.newDocumentBuilder();\r
-                       document = documentBuilder.newDocument();\r
-\r
-                       if (getDescription() != null) {\r
-                               Comment description = document.createComment(getDescription());\r
-                               document.appendChild(description);\r
-                       }\r
-\r
-                       Element root = document.createElement("jobtemplate");\r
-                       document.appendChild(root);\r
-                       if (getName() != null) {\r
-                               root.setAttribute("name", getName());\r
-                       }\r
-                       root.setAttribute("useSessionLog", Boolean.toString(isUseSessionLog()));\r
-\r
-                       if (getDeclarationSequence() != null) {\r
-                               Element declarations = document.createElement("declarations");\r
-                               root.appendChild(declarations);\r
-                               Element parameters = document.createElement("parameters");\r
-                               Element variables = document.createElement("variables");\r
-\r
-                               for (int i = 0; i < getDeclarationSequence().getDeclarations().size(); i++) {\r
-                                       Element declarationElement = null;\r
-                                       Declaration declaration = getDeclarationSequence().getDeclarations().get(i);\r
-\r
-                                       if (declaration.getClass().getSimpleName().equals("ParameterDeclaration")) {\r
-                                               declarationElement = document.createElement("parameter");\r
-                                               declarationElement.setAttribute("name", declaration.getName());\r
-                                               declarationElement.setAttribute("type", declaration.getType());\r
-                                               parameters.appendChild(declarationElement);\r
-                                       } else {\r
-                                               declarationElement = document.createElement("variable");\r
-                                               declarationElement.setAttribute("name", declaration.getName());\r
-                                               declarationElement.setAttribute("type", declaration.getType());\r
-                                               variables.appendChild(declarationElement);\r
-                                       }\r
-                               }\r
-                               declarations.appendChild(parameters);\r
-                               if (variables.hasChildNodes()) {\r
-                                       declarations.appendChild(variables);\r
-                               }\r
-                       }\r
-                       if (getCommandSequence() != null) {\r
-                               Element commands = document.createElement("commands");\r
-                               root.appendChild(commands);\r
-                               for (int i = 0; i < getCommandSequence().getCommands().size(); i++) {\r
-                                       CallJobStepCommand cjs = (CallJobStepCommand) getCommandSequence().getCommands().get(i);\r
-                                       Element command = document.createElement("calljobstep");\r
-                                       command.setAttribute("type", cjs.getType());\r
-                                       command.setAttribute("weight", Integer.toString(cjs.getWeight()));\r
-                                       commands.appendChild(command);\r
-\r
-                                       InputParameterSequence ips = (InputParameterSequence) cjs.getInputParameterSequence();\r
-                                       Element inputs = document.createElement("inputs");\r
-\r
-                                       for (int j = 0; j < ips.getParameters().size(); j++) {\r
-                                               InputParameter ip = (InputParameter) (ips.getParameters().get(j));\r
-                                               Element input = document.createElement("input");\r
-                                               Element parameter;\r
-                                               if (ip.getExpression().getClass().getSimpleName().equals("VariableExpression")) {\r
-                                                       parameter = document.createElement("variable");\r
-                                               } else {\r
-                                                       parameter = document.createElement("parameter");\r
-                                               }\r
-                                               parameter.setAttribute("name", ip.getExpression().getName());\r
-                                               input.appendChild(parameter);\r
-                                               inputs.appendChild(input);\r
-                                       }\r
-                                       command.appendChild(inputs);\r
-\r
-                                       OutputParameterSequence ops = (OutputParameterSequence) cjs.getOutputParameterSequence();\r
-                                       if (ops != null) {\r
-                                               Element outputs = document.createElement("outputs");\r
-                                               for (int j = 0; j < ops.getParameters().size(); j++) {\r
-                                                       OutputParameter op = (OutputParameter) (ops.getParameters().get(j));\r
-                                                       Element output = document.createElement("output");\r
-                                                       Element variable = document.createElement("variable");\r
-                                                       variable.setAttribute("name", op.getVariableName().getName());\r
-                                                       output.appendChild(variable);\r
-                                                       outputs.appendChild(output);\r
-                                               }\r
-                                               command.appendChild(outputs);\r
-                                       }\r
-                               }\r
-                       }\r
-               } catch (ParserConfigurationException e) {\r
-                       e.printStackTrace();\r
-               }\r
-\r
-               return document;\r
-       }\r
-\r
-       public String getStringFromTemplate() {\r
-               try {\r
-                       Document xmlDocument = this.toXmlDocument();\r
-                       DOMSource domSource = new DOMSource(xmlDocument);\r
-                       StringWriter writer = new StringWriter();\r
-                       StreamResult result = new StreamResult(writer);\r
-                       TransformerFactory tf = TransformerFactory.newInstance();\r
-                       Transformer transformer = tf.newTransformer();\r
-                       transformer.transform(domSource, result);\r
-                       return writer.toString();\r
-               } catch (TransformerException ex) {\r
-                       ex.printStackTrace();\r
-                       return null;\r
-               }\r
-       }\r
 }\r
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 (file)
index 0000000..e4e4aec
--- /dev/null
@@ -0,0 +1,194 @@
+package user.jobengine.server.ast;\r
+\r
+import java.util.List;\r
+\r
+import javax.xml.parsers.DocumentBuilder;\r
+import javax.xml.parsers.DocumentBuilderFactory;\r
+import javax.xml.parsers.ParserConfigurationException;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+\r
+public class XMLEncoder implements Visitor {\r
+       private static final Logger logger = LogManager.getLogger(JobTemplate.class);\r
+\r
+       @Override\r
+       public Object visitCallStepCommand(CallJobStepCommand command, Object o) {\r
+               Document document = (Document) o;\r
+               Element jobtemplate = (Element) document.getElementsByTagName("jobtemplate").item(0);\r
+               Element commands = (Element) jobtemplate.getElementsByTagName("commands").item(0);\r
+               Element newCommand = document.createElement("calljobstep");\r
+               newCommand.setAttribute("type", command.getType());\r
+               newCommand.setAttribute("weight", Integer.toString(command.getWeight()));\r
+               commands.appendChild(newCommand);\r
+\r
+               Element inputs = document.createElement("inputs");\r
+               newCommand.appendChild(inputs);\r
+\r
+               List<Parameter> inputParameters = command.getInputParameterSequence().getParameters();\r
+               for (int i = 0; i < inputParameters.size(); i++) {\r
+                       Element newInput = document.createElement("input");\r
+                       Expression expression = ((InputParameter) inputParameters.get(i)).getExpression();\r
+                       String inputName = expression.getName();\r
+\r
+                       if (expression instanceof ParameterExpression) {\r
+                               Element newInputParameter = document.createElement("parameter");\r
+                               newInputParameter.setAttribute("name", inputName);\r
+                               newInput.appendChild(newInputParameter);\r
+                       } else {\r
+                               Element newInputVariable = document.createElement("variable");\r
+                               newInputVariable.setAttribute("name", inputName);\r
+                               newInput.appendChild(newInputVariable);\r
+                       }\r
+                       inputs.appendChild(newInput);\r
+               }\r
+               if (command.getOutputParameterSequence() != null) {\r
+                       Element outputs = document.createElement("outputs");\r
+                       newCommand.appendChild(outputs);\r
+                       List<Parameter> outputParameters = command.getOutputParameterSequence().getParameters();\r
+                       for (int i = 0; i < outputParameters.size(); i++) {\r
+                               Element newOutput = document.createElement("output");\r
+                               Element newOutputVariable = document.createElement("variable");\r
+                               newOutputVariable.setAttribute("name",\r
+                                               ((OutputParameter) outputParameters.get(i)).getVariableName().getName());\r
+                               newOutput.appendChild(newOutputVariable);\r
+                               outputs.appendChild(newOutput);\r
+                       }\r
+               }\r
+\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Object visitCommandSequence(CommandSequence commandSequence, Object o) {\r
+               List<Command> commands = commandSequence.getCommands();\r
+               if (commands != null) {\r
+                       for (Command command : commands) {\r
+                               command.visit(this, o);\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Object visitDeclarationSequence(DeclarationSequence declarationSequence, Object o) {\r
+               List<Declaration> declarations = declarationSequence.getDeclarations();\r
+               if (declarations != null) {\r
+                       for (Declaration declaration : declarations) {\r
+                               declaration.visit(this, o);\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Object visitInputParameter(InputParameter inputParameter, Object o) {\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Object visitInputParameterSequence(InputParameterSequence parameterSequence, Object o) {\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Object visitJobTemplate(JobTemplate jobTemplate, Object o) {\r
+               DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();\r
+               DocumentBuilder documentBuilder;\r
+               Document document = null;\r
+               try {\r
+                       documentBuilder = dbf.newDocumentBuilder();\r
+                       document = documentBuilder.newDocument();\r
+                       Element root = document.createElement("jobtemplate");\r
+                       document.appendChild(root);\r
+                       if (jobTemplate.getName() != null) {\r
+                               root.setAttribute("name", jobTemplate.getName());\r
+                       }\r
+                       root.setAttribute("useSessionLog", Boolean.toString(jobTemplate.isUseSessionLog()));\r
+\r
+                       Element declarations = document.createElement("declarations");\r
+                       root.appendChild(declarations);\r
+                       Element parameters = document.createElement("parameters");\r
+                       Element variables = document.createElement("variables");\r
+                       declarations.appendChild(parameters);\r
+                       declarations.appendChild(variables);\r
+                       if (jobTemplate.getDeclarationSequence() != null) {\r
+                               DeclarationSequence ds = jobTemplate.getDeclarationSequence();\r
+                               ds.visit(this, document);\r
+                       }\r
+\r
+                       Element commands = document.createElement("commands");\r
+                       root.appendChild(commands);\r
+                       if (jobTemplate.getCommandSequence() != null) {\r
+                               CommandSequence cs = jobTemplate.getCommandSequence();\r
+                               cs.visit(this, document);\r
+                       }\r
+               } catch (ParserConfigurationException e) {\r
+                       logger.info("ParserConfigurationException: {}", e.getMessage());\r
+               }\r
+\r
+               return document;\r
+       }\r
+\r
+       @Override\r
+       public Object visitOutputParameter(OutputParameter outputParameter, Object o) {\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Object visitOutputParameterSequence(OutputParameterSequence parameterSequence, Object o) {\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Object visitParameterDeclaration(ParameterDeclaration parameterDeclaration, Object o) {\r
+               Document document = (Document) o;\r
+               logger.info("document: {}", document.toString());\r
+               Element jobtemplate = (Element) document.getElementsByTagName("jobtemplate").item(0);\r
+               Element declarations = (Element) jobtemplate.getElementsByTagName("declarations").item(0);\r
+               Element parameters = (Element) declarations.getElementsByTagName("parameters").item(0);\r
+               Element newParameter = document.createElement("parameter");\r
+               newParameter.setAttribute("name", parameterDeclaration.getName());\r
+               newParameter.setAttribute("type", parameterDeclaration.getType());\r
+               parameters.appendChild(newParameter);\r
+\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Object visitParameterExpression(ParameterExpression parameterExpression, Object o) {\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Object visitSendUserMessageCommand(SendUserMessageCommand command, Object o) {\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Object visitVariableDeclaration(VariableDeclaration variableDeclaration, Object o) {\r
+               Document document = (Document) o;\r
+               logger.info("document: {}", document.toString());\r
+               Element jobtemplate = (Element) document.getElementsByTagName("jobtemplate").item(0);\r
+               Element declarations = (Element) jobtemplate.getElementsByTagName("declarations").item(0);\r
+               Element variables = (Element) declarations.getElementsByTagName("variables").item(0);\r
+               Element newVariable = document.createElement("variable");\r
+               newVariable.setAttribute("name", variableDeclaration.getName());\r
+               newVariable.setAttribute("type", variableDeclaration.getType());\r
+               variables.appendChild(newVariable);\r
+\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Object visitVariableExpression(VariableExpression variableExpression, Object o) {\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Object visitVariableName(VariableName variableName, Object o) {\r
+               return null;\r
+       }\r
+}\r
index 7ff562836657bd0c68394e5c2599bddb8dd41f88..b1610b132bca22c2a5363b0cd177b2ef49c21657 100644 (file)
@@ -5,7 +5,7 @@
                <h:canvas id="myCanvas" width="550px" height="550px"/>\r
            </div>\r
            <div id="flowchartDataListener" onFlowchartDataChanged="@command('onFlowchartDataChanged')" />\r
-           <button label="Send data to Java" onClick="@command('getFlowchartData')"/>\r
+           <button label="Save" onClick="@command('getFlowchartData')"/>\r
        </div>\r
        <h:script src="/js/diagramflowjs.js" />\r
        <h:script src="/js/processVisualizer2.js" />\r
index 1c4b5ce0cbd3fbb4f5bc5e182a03fb83763e5784..242fcbb1a0bcffd9b5c2004982f93507a72f2e43 100644 (file)
@@ -2,6 +2,7 @@ package user.jobengine.zk.model;
 \r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
+import org.w3c.dom.Document;\r
 import org.zkoss.bind.annotation.AfterCompose;\r
 import org.zkoss.bind.annotation.BindingParam;\r
 import org.zkoss.bind.annotation.Command;\r
@@ -19,6 +20,7 @@ import org.zkoss.zul.Tab;
 \r
 import com.ibm.nosql.json.api.BasicDBObject;\r
 \r
+import user.commons.xml.XMLUtils;\r
 import user.jobengine.server.ast.CallJobStepCommand;\r
 import user.jobengine.server.ast.CommandSequence;\r
 import user.jobengine.server.ast.DeclarationSequence;\r
@@ -32,6 +34,7 @@ import user.jobengine.server.ast.ParameterExpression;
 import user.jobengine.server.ast.VariableDeclaration;\r
 import user.jobengine.server.ast.VariableExpression;\r
 import user.jobengine.server.ast.VariableName;\r
+import user.jobengine.server.ast.XMLEncoder;\r
 \r
 public class JobFlowChartModel extends BaseModel {\r
        private static final Logger logger = LogManager.getLogger();\r
@@ -61,15 +64,16 @@ public class JobFlowChartModel extends BaseModel {
        @Command\r
        public void onFlowchartDataChanged(@ContextParam(ContextType.TRIGGER_EVENT) Event event) {\r
                logger.info("onFlowchartDataChanged");\r
-               logger.info("template: {}", JSONObjectToJobtemplate((JSONObject) ((JSONObject) event.getData()).get("model"))\r
-                               .getStringFromTemplate());\r
+               XMLEncoder xmlEncoder = new XMLEncoder();\r
+               JobTemplate jobTemplate = JSONObjectToJobtemplate((JSONObject) ((JSONObject) event.getData()).get("model"));\r
+               Document document = (Document) xmlEncoder.visitJobTemplate(jobTemplate, null);\r
+               logger.info("converted document: {}", XMLUtils.getStringFromDocument(document));\r
        }\r
 \r
        private JobTemplate JSONObjectToJobtemplate(JSONObject data) {\r
                JobTemplate template = new JobTemplate();\r
                DeclarationSequence ds = new DeclarationSequence();\r
                template.setDeclarationSequence(ds);\r
-               logger.info("template: {}", template.getStringFromTemplate());\r
 \r
                JSONArray params = (JSONArray) data.get("params");\r
                for (int i = 0; i < params.size(); i++) {\r