git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 20 May 2020 19:26:16 +0000 (19:26 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 20 May 2020 19:26:16 +0000 (19:26 +0000)
49 files changed:
server/-configuration/run-mediacube-server-user.launch
server/-configuration/scheduledjobs.json
server/-dependencies/jobengine.target
server/-dependencies/pom.xml
server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java
server/user.jobengine.executors/META-INF/MANIFEST.MF
server/user.jobengine.executors/config/config.xml
server/user.jobengine.executors/jobtemplates/copy-from-nexio.xml [new file with mode: 0644]
server/user.jobengine.executors/jobtemplates/fake.xml
server/user.jobengine.executors/src/user/jobengine/server/steps/CreateMissingLowresStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/MergeStep.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOCheckerStep.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/SubmitDownloadStep.java [new file with mode: 0644]
server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF
server/user.jobengine.osgi.commons/src/user/commons/JobStatus.java
server/user.jobengine.osgi.commons/src/user/commons/remotestore/RemoteStoreProtocol.java
server/user.jobengine.osgi.commons/src/user/commons/rest/RFC3339DateFormat.java [moved from server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/RFC3339DateFormat.java with 94% similarity]
server/user.jobengine.osgi.commons/src/user/commons/rest/ServiceObjectMapper.java [new file with mode: 0644]
server/user.jobengine.osgi.db/build-remote-sqlj.bat
server/user.jobengine.osgi.db/generated/user/jobengine/db/EntityBaseDAO.java
server/user.jobengine.osgi.db/generated/user/jobengine/db/IDAOIterProvider.java [new file with mode: 0644]
server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java
server/user.jobengine.osgi.db/src/user/jobengine/db/DynamicAttributesDAO.java
server/user.jobengine.osgi.db/src/user/jobengine/db/EntityBaseDAO.sqlj
server/user.jobengine.osgi.db/src/user/jobengine/db/IEntityBaseDAO.java
server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java
server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java
server/user.jobengine.osgi.db/src/user/jobengine/db/Media.java
server/user.jobengine.osgi.db/src/user/jobengine/db/MediaDAO.sqlj
server/user.jobengine.osgi.server/META-INF/MANIFEST.MF
server/user.jobengine.osgi.server/pages/joblist.zul
server/user.jobengine.osgi.server/src/user/jobengine/server/IProgram.java
server/user.jobengine.osgi.server/src/user/jobengine/server/Program.java
server/user.jobengine.osgi.server/src/user/jobengine/server/actions/StatusMachine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/ast/CallJobStepCommand.java
server/user.jobengine.osgi.server/src/user/jobengine/server/ast/Encoder.java
server/user.jobengine.osgi.server/src/user/jobengine/server/instructions/AssignVariableInstruction.java
server/user.jobengine.osgi.server/src/user/jobengine/server/instructions/CallJobStepInstruction.java
server/user.jobengine.osgi.server/src/user/jobengine/server/instructions/DeclareVariableInstruction.java
server/user.jobengine.osgi.server/src/user/jobengine/server/instructions/WaitForSpawnJobsInstruction.java [new file with mode: 0644]
server/user.jobengine.osgi.server/src/user/jobengine/server/messages/JobStepCompletedMessage.java
server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java
server/user.jobengine.osgi.server/src/user/jobengine/server/steps/JobStep.java
server/user.jobengine.osgi.services/META-INF/MANIFEST.MF
server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/JacksonJsonProvider.java
server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/ServiceObjectMapper.java [deleted file]
server/user.jobengine.osgi.services/src/user/jobengine/osgi/ws/mediacube/MediaCubeAPIWSSocket.java
server/user.jobengine.osgi.services/src/user/jobengine/osgi/ws/nexio/NexioWSSocket.java

index c15aaebf7fe00dbad164e53713668fe786a1ebba..6168aa1953488a2cbcc84ca72258560924d0b59a 100644 (file)
 <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>\r
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory&#13;&#10;-Dorg.eclipse.epp.logging.aeri.skipReports=true &#13;&#10;-Declipse.ignoreApp=true &#13;&#10;-Dosgi.noShutdown=true&#13;&#10;-Djobengine.jobsteps.root=&quot;${workspace_loc}/user.jobengine.executors/bin&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#13;&#10;-Djobengine.db.url=jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.db.user=db2admin&#13;&#10;-Djobengine.db.password=password&#13;&#10;-Djobengine.loglevel=INFO&#13;&#10;-Dlog4j.configurationFile=&quot;${workspace_loc}/-configuration/log4j2.xml&quot;&#13;&#10;-Djetty.home=&quot;${workspace_loc:}/-configuration/jetty&quot;&#13;&#10;-Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml&#13;&#10;-Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty&#13;&#10;-Djava.io.tmpdir=c:\temp\jetty&#13;&#10;-Djobengine.octopus.api.address=http://10.10.1.11/api/v1&#13;&#10;-Djobengine.octopus.api.user=mam&#13;&#10;-Djobengine.octopus.api.password=napocska&#13;&#10;-Djobengine.nosql.db.url=jdbc:db2://10.228.198.1:50000/mccache:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.nosql.db.user=db2admin&#13;&#10;-Djobengine.nosql.db.password=password&#13;&#10;-Djobengine.nosql.db.schema=test&#13;&#10;-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl&#13;&#10;-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium&#13;&#10;-Djobengine.transcoder.address=http://10.11.1.111:65445/api/json/v1/&#13;&#10;-Djobengine.transcoder.template=MP4&#13;&#10;-Djobengine.transcoder.version=1&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;-Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;&#13;&#10;-Djobengine.nexio.db.user=sa&#13;&#10;-Djobengine.nexio.db.password=resolve&#13;&#10;-Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis;&#13;&#10;-Djobengine.planair.db.user=MAM&#13;&#10;-Djobengine.planair.db.password=VDani&#13;&#10;-Dnexio.host=192.168.0.12&#13;&#10;-Djobengine.nexio.name=testnexioclips&#13;&#10;-Dnexio.useMOSGateway=false&#13;&#10;-Dnexio.disable=true&#13;&#10;-Djobengine.octopus.rundowns.name=rundowns181026&#13;&#10;-Djobengine.octopus.storyfolders.name=storyfolders181026&#13;&#10;-Djobengine.octopus.stories.name=stories181026&#13;&#10;-Djobengine.maestro.config=&quot;${workspace_loc}/-configuration/maestro.json&quot;&#13;&#10;-Djobengine.mediacube.config=&quot;${workspace_loc}/-configuration/mediacube.json&quot;&#13;&#10;-Dgui.statistics.disable=true&#13;&#10;-Dgui.help.disable=true&#13;&#10;-Dgui.editor.disable=true&#13;&#10;-Djobengine.mediafinder.external=false&#13;&#10;-Djobengine.mediacube.service.proxyroot=&quot;/opt&quot;&#13;&#10;-Djobengine.scheduledexecution.disabled=false&#13;&#10;-Djobengine.randomize.archives=false&#13;&#10;-Djobengine.jobsteps.config=&quot;${workspace_loc}/user.jobengine.executors/config/config.xml&quot;"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory&#13;&#10;-Dorg.eclipse.epp.logging.aeri.skipReports=true &#13;&#10;-Declipse.ignoreApp=true &#13;&#10;-Dosgi.noShutdown=true&#13;&#10;-Djobengine.jobsteps.root=&quot;${workspace_loc}/user.jobengine.executors/bin&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#13;&#10;-Djobengine.db.url=jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.db.user=db2admin&#13;&#10;-Djobengine.db.password=password&#13;&#10;-Djobengine.loglevel=INFO&#13;&#10;-Dlog4j.configurationFile=&quot;${workspace_loc}/-configuration/log4j2.xml&quot;&#13;&#10;-Djetty.home=&quot;${workspace_loc:}/-configuration/jetty&quot;&#13;&#10;-Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml&#13;&#10;-Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty&#13;&#10;-Djava.io.tmpdir=c:\temp\jetty&#13;&#10;-Djobengine.octopus.api.address=http://10.10.1.11/api/v1&#13;&#10;-Djobengine.octopus.api.user=mam&#13;&#10;-Djobengine.octopus.api.password=napocska&#13;&#10;-Djobengine.nosql.db.url=jdbc:db2://10.228.198.1:50000/mccache:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.nosql.db.user=db2admin&#13;&#10;-Djobengine.nosql.db.password=password&#13;&#10;-Djobengine.nosql.db.schema=test&#13;&#10;-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl&#13;&#10;-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium&#13;&#10;-Djobengine.transcoder.address=http://10.11.1.111:65445/api/json/v1/&#13;&#10;-Djobengine.transcoder.template=MP4&#13;&#10;-Djobengine.transcoder.version=1&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;-Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;&#13;&#10;-Djobengine.nexio.db.user=sa&#13;&#10;-Djobengine.nexio.db.password=resolve&#13;&#10;-Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis;&#13;&#10;-Djobengine.planair.db.user=MAM&#13;&#10;-Djobengine.planair.db.password=VDani&#13;&#10;-Dnexio.host=192.168.0.12&#13;&#10;-Djobengine.nexio.name=testnexioclips&#13;&#10;-Dnexio.useMOSGateway=false&#13;&#10;-Dnexio.disable=true&#13;&#10;-Djobengine.octopus.rundowns.name=rundowns181026&#13;&#10;-Djobengine.octopus.storyfolders.name=storyfolders181026&#13;&#10;-Djobengine.octopus.stories.name=stories181026&#13;&#10;-Djobengine.maestro.config=&quot;${workspace_loc}/-configuration/maestro.json&quot;&#13;&#10;-Djobengine.mediacube.config=&quot;${workspace_loc}/-configuration/mediacube.json&quot;&#13;&#10;-Dgui.statistics.disable=true&#13;&#10;-Dgui.help.disable=true&#13;&#10;-Dgui.editor.disable=true&#13;&#10;-Djobengine.mediafinder.external=false&#13;&#10;-Djobengine.mediacube.service.proxyroot=&quot;/opt&quot;&#13;&#10;-Djobengine.scheduledexecution.disabled=false&#13;&#10;-Djobengine.randomize.archives=false&#13;&#10;-Djobengine.jobsteps.config=&quot;${workspace_loc}/user.jobengine.executors/config/config.xml&quot;&#13;&#10;-Djobengine.jobsteps.groovy.root=&quot;${workspace_loc}/user.jobengine.executors/src/user/jobengine/server/steps&quot;"/>\r
 <stringAttribute key="pde.version" value="3.3"/>\r
 <booleanAttribute key="show_selected_only" value="false"/>\r
-<stringAttribute key="target_bundles" value="cglib@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default,com.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.mybatis.mybatis@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,org.omnifaces@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
+<stringAttribute key="target_bundles" value="cglib@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default,com.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,groovy@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.mybatis.mybatis@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,org.omnifaces@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
 <booleanAttribute key="tracing" value="false"/>\r
 <booleanAttribute key="useCustomFeatures" value="false"/>\r
 <booleanAttribute key="useDefaultConfigArea" value="true"/>\r
index 4693367e058fba4ec44cc80773fbd51d87a74735..5e048a7b832fd157aa07ba28536d3156c93f615e 100644 (file)
@@ -1,5 +1,20 @@
 {"joblist":[\r
        {\r
+      "template": "copy-from-nexio.xml",\r
+      "parameters": [ \r
+       {"name": "servers", "value": ["NEXIO1", "NEXIO2"], "type": "java.lang.Iterable"},\r
+      \r
+       {"name": "globalRetrievePath", "value": "file://isilon.intra.echotv.hu", "type": "java.lang.String"},\r
+       {"name": "localRetrievePath", "value": "/mnt/ISILON", "type": "java.lang.String"},\r
+       {"name": "localHiresPath", "value": "/mediacube/data/lowres/", "type": "java.lang.String" },\r
+       {"name": "globalHiresPath", "value": "L:\\", "type": "java.lang.String" },\r
+       {"name": "localLowresPath", "value": "/mnt/FIXTRANSCODER/OUTPUT", "type": "java.lang.String" },\r
+       {"name": "transcoderAddress", "value": "http://10.10.1.74:65445/api/json/v1/", "type": "java.lang.String"},\r
+       {"name": "transcoderTemplateName", "value": "MAM_proxy", "type": "java.lang.String"},\r
+       {"name": "webPath", "value": "/mediacube/data/lowres/www/video/", "type": "java.lang.String" }\r
+      ]\r
+       },      \r
+       {\r
       "active": false,\r
       "executeimmediate": false,\r
       "cronexpression": "0/10 * * * * ? *",\r
          "name" : "Teszt folyamat",\r
       "template": "fake.xml",\r
       "cronexpression": "0/20 * * * * ?",\r
-      "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
+      "parameters": [ \r
+       {"name": "itemID", "value": 1, "type": "java.lang.Long"},\r
+       {"name": "iter", "value": ["a", "b", "c"], "type": "java.lang.Iterable"}\r
+       ]\r
        },\r
        {\r
       "active": false,\r
index fdc857ea426a46d1c241a8470ce3b55c40e61314..a8e09167efdb430b17db0b6f125ad1aea2e67ea4 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
-<?pde version="3.8"?><target name="JobEngine" sequenceNumber="305">\r
+<?pde version="3.8"?><target name="JobEngine" sequenceNumber="309">\r
 <locations>\r
 <location path="${eclipse_home}" type="Profile"/>\r
 <location path="${workspace_loc}/-dependencies/target/repository/plugins" type="Directory"/>\r
@@ -17,6 +17,7 @@
 <plugin id="com.ibm.nosql"/>\r
 <plugin id="com.microsoft.sqlserver.sqljdbc"/>\r
 <plugin id="commons-logging"/>\r
+<plugin id="groovy"/>\r
 <plugin id="humble.video.linux"/>\r
 <plugin id="humble.video.noarch"/>\r
 <plugin id="humble.video.windows"/>\r
index efac04321325fa1438aa6036328987f6b611999a..0cc4847faf9d0d6f42fe5a878dfc584e0ea1ae70 100644 (file)
                                                <id>default-cli</id>\r
                                                <configuration>\r
                                                        <artifacts>\r
-<!-- \r
-                                                               <artifact>\r
-                                                                       <id>org.apache.servicemix.bundles:org.apache.servicemix.bundles.jasper:6.0.53_1</id>\r
-                                                               </artifact>\r
-                                                               <artifact>\r
-                                                                       <id>org.apache.aries:org.apache.aries.util:1.1.3</id>\r
-                                                               </artifact>\r
-                                                               <artifact>\r
-                                                                       <id>javax.transaction:javax.transaction-api:1.2</id>\r
-                                                               </artifact>\r
                                                                <artifact>\r
-                                                                       <id>org.mortbay.jasper:apache-jsp:8.0.33</id>\r
-                                                                       <source>true</source>\r
-                                                               </artifact>\r
-                                                               <artifact>\r
-                                                                       <id>org.mortbay.jasper:apache-el:8.0.33</id>\r
-                                                               </artifact>\r
-                                                               <artifact>\r
-                                                                       <id>org.eclipse.jdt.core.compiler:ecj:4.4.2</id>\r
-                                                               </artifact>\r
-                                                               <artifact>\r
-                                                                       <id>org.eclipse.jetty:jetty-jsp:9.2.22.v20170606</id>\r
-                                                                       <source>true</source>\r
+                                                                       <id>org.codehaus.groovy:groovy:3.0.3</id>\r
                                                                </artifact>\r
-                                                               <artifact>\r
-                                                                       <id>org.eclipse.tycho:org.eclipse.osgi:3.11.2.v20161107-1947</id>\r
-                                                               </artifact>\r
-                                                               <artifact>\r
-                                                                       <id>org.eclipse.jetty.osgi:jetty-osgi-boot-jsp:${jetty.version}</id>\r
-                                                               </artifact>\r
-                                                               <artifact>\r
-                                                                       <id>org.eclipse.jetty:apache-jsp:${jetty.version}</id>\r
-                                                                       <source>true</source>\r
-                                                               </artifact>\r
-                                                               <artifact>\r
-                                                                       <id>javax.servlet.jsp:javax.servlet.jsp-api:2.3.0</id>\r
-                                                               </artifact>\r
-                                                               <artifact>\r
-                                                                       <id>com.sun.org.apache:jaxp-ri:1.4</id>\r
-                                                               </artifact>\r
-                                                               <artifact>\r
-                                                                       <id>org.eclipse.platform:org.eclipse.equinox.ds:1.4.400</id>\r
-                                                               </artifact>\r
- -->\r
                                                                <artifact>\r
                                                                        <id>org.omnifaces:omnifaces:3.4.1</id>\r
                                                                </artifact>\r
index dd444539928588f81ddfded562d6c200cc15f80b..76df49e9821a05344047245ad6d9e53cfda96ef9 100644 (file)
@@ -65,9 +65,9 @@ public class Support {
                //              System.setProperty("jobengine.nosql.db.user", "db2admin");\r
                //              System.setProperty("jobengine.nosql.db.password", "password");\r
                System.setProperty("nexio.host", "10.10.1.55");\r
-               System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
-               System.setProperty(ItemManager.DBUSERNAME, "db2admin");\r
-               System.setProperty(ItemManager.DBPASSWORD, "password");\r
+               System.setProperty(ItemManager.DBURL, "jdbc:db2://10.228.212.42:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+               System.setProperty(ItemManager.DBUSERNAME, "blobtest");\r
+               System.setProperty(ItemManager.DBPASSWORD, "blobtest");\r
                System.setProperty(LogUtils.LOGLEVEL, "INFO");\r
                // System.setProperty(ItemManager.DBURL,\r
 \r
@@ -138,6 +138,12 @@ public class Support {
                return null;\r
        }\r
 \r
+       @Test\r
+       public void mediaByName() throws Exception {\r
+               Media media = manager.getMedia("DK_10103300_01");\r
+               assertNotNull(media);\r
+       }\r
+\r
        //      private void check_rd_process(List<String> allFiles, List<String> allStatus) {\r
        //              File mediaFile = mediaFilePath.toFile();\r
        //              if (mediaFile.isDirectory() || !mediaFile.getName().toUpperCase().endsWith(".MXF"))\r
index 8257a45e1d87adf429284b371f5c5d505bf1429a..f2c88b3d15c24f64e28afdaf155814ddaa468498 100644 (file)
@@ -25,7 +25,8 @@ Require-Bundle: user.jobengine.osgi.commons;bundle-version="1.0.0",
  org.jboss.resteasy.validator-provider-11;bundle-version="3.0.11"
 Bundle-ClassPath: .
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: javax.ws.rs.client,
+Import-Package: groovy.lang;version="3.0.3",
+ javax.ws.rs.client,
  javax.ws.rs.core;version="2.0.1",
  org.apache.commons.io;version="2.2.0",
  org.apache.commons.net.ftp;version="3.6.0",
index 5062fc97f7f5dc127263ed75f9b988272c03032c..4eec324f3fa9485bf4f30dd848ec7ec9bcab6ac9 100644 (file)
@@ -1,5 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <executors>\r
+       <executor className="FakeStep.java" maxConcurrent="20" isRemote="false" />\r
+       <executor className="MergeStep.java" maxConcurrent="20" isRemote="false" />\r
        <executor className="user.jobengine.server.steps.ArchiveListBuilderStep" maxConcurrent="1" isRemote="false" />\r
        <executor className="user.jobengine.server.steps.ArchiveMaterialSubmitStep" maxConcurrent="1" isRemote="false" />\r
        <executor className="user.jobengine.server.steps.BatchRetrieveForkStep" maxConcurrent="10" isRemote="false" />\r
diff --git a/server/user.jobengine.executors/jobtemplates/copy-from-nexio.xml b/server/user.jobengine.executors/jobtemplates/copy-from-nexio.xml
new file mode 100644 (file)
index 0000000..b7d6194
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate multiInstance="true" name="Fake">\r
+<declarations>\r
+       <parameters>\r
+               <parameter name="storeName" type="java.lang.String"/>\r
+       </parameters>\r
+       <variables>\r
+               <variable name="newFiles" type="java.lang.ArrayList"/>\r
+               <variable name="updatedFiles" type="java.lang.ArrayList"/>\r
+       </variables>\r
+</declarations>\r
+<commands>\r
+       <calljobstep type="NEXIOCheckerStep.java" weight="1">\r
+               <inputs>\r
+                       <input>\r
+                               <parameter name="storeName" />\r
+                       </input>\r
+               </inputs>\r
+               <outputs>\r
+                       <output>\r
+                               <variable name="newFiles" />\r
+                       </output>\r
+                       <output>\r
+                               <variable name="updatedFiles" />\r
+                       </output>\r
+               </outputs>\r
+       </calljobstep>\r
+       <calljobstep type="SubmitDownloadStep.java" weight="1">\r
+               <inputs>\r
+                       <input>\r
+                               <variable name="storeName" />\r
+                       </input>\r
+                       <input>\r
+                               <variable name="newFiles" />\r
+                       </input>\r
+                       <input>\r
+                               <variable name="updatedFiles" />\r
+                       </input>\r
+               </inputs>\r
+       </calljobstep>\r
+</commands>\r
+</jobtemplate>
\ No newline at end of file
index 6e3b7ea6515dfde050f8f0e70f1b6f88e6d215b7..bec5abeb841492ee9d91ce1bc684150478693950 100644 (file)
@@ -4,22 +4,42 @@
        <parameters>\r
                <parameter name="itemID" type="java.lang.Long"/>\r
        </parameters>\r
+       <parameters>\r
+               <parameter name="iter" type="java.lang.Iterable"/>\r
+       </parameters>\r
        <variables>\r
                <variable name="resultID" type="java.lang.Long"/>\r
+               <variable name="resultID1" type="java.lang.Long"/>\r
        </variables>\r
 </declarations>\r
 <commands>\r
-       <calljobstep id="step1" type="user.jobengine.server.steps.FakeStep" weight="1">\r
+       <calljobstep type="FakeStep.java" weight="5" forEach="iter">\r
                <inputs>\r
                        <input>\r
                                <parameter name="itemID" />\r
                        </input>\r
+                       <input>\r
+                               <parameter name="iter" />\r
+                       </input>\r
                </inputs>\r
                <outputs>\r
                        <output>\r
                                <variable name="resultID" />\r
                        </output>\r
+                       <output>\r
+                               <variable name="resultID1" />\r
+                       </output>\r
                </outputs>\r
        </calljobstep>\r
+       <calljobstep type="MergeStep.java" weight="1">\r
+               <inputs>\r
+                       <input>\r
+                               <variable name="resultID" />\r
+                       </input>\r
+                       <input>\r
+                               <variable name="resultID1" />\r
+                       </input>\r
+               </inputs>\r
+       </calljobstep>\r
 </commands>\r
 </jobtemplate>
\ No newline at end of file
index d8c18209130e57a113bd85fa2df625d2a5a386c9..9194123df38d2b3982e2dd766f5ca94a1deed638 100644 (file)
@@ -17,7 +17,6 @@ import user.jobengine.db.Media;
 import user.jobengine.db.Store;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
-import user.jobengine.server.messages.CancelRequest;\r
 \r
 public class CreateMissingLowresStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
@@ -38,7 +37,7 @@ public class CreateMissingLowresStep extends JobStep {
                        if (media == null) {\r
                                logger.info(new MediaCubeUndoMarker(marker.getSessionID()), "Nincs feldolgozandó hiány.");\r
                                // throw new Exception("Nincs feldolgozandó hiány.");\r
-                               jobEngine.sendMessage(new CancelRequest(jobRuntime.getId()));\r
+                               cancel();\r
                                return null;\r
                        }\r
 \r
index 13ab5eae28d92e16a5b001bf03df564c212b8c76..799e5abf2b518f2ce074af368e59df2e45065885 100644 (file)
@@ -1,54 +1,40 @@
 package user.jobengine.server.steps;\r
 \r
+import java.util.Arrays;\r
+\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
 \r
-import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.IJobRuntime;\r
-import user.mediacube.metadata.interfaces.IMetadataProvider;\r
-\r
 public class FakeStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
        private int count = 10;\r
-       private StringBuilder sb = new StringBuilder();\r
-       private IMetadataProvider metadataProvider;\r
 \r
        @StepEntry\r
-       public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
-               Object[] result = { itemID + 1 };\r
-\r
-               //              if (result != null)\r
-               //                      throw new Exception(\r
-               //                                      "Ez most egy nagyon hosszú hibaüzenet szeretne lenni, amit remélem hogy több sorban fogok látni. Mert ha nem! Akko lesz nemulass...");\r
-               //              Files.copy(Paths.get("/etc/security/limits.conf"), Paths.get("/etc/security/limits.conf.bak"));\r
-               //              Files.write(Paths.get("/etc/security/limits.conf"), new byte[0], StandardOpenOption.TRUNCATE_EXISTING);\r
+       public Object[] execute(long itemID, Iterable<?> iter) throws Exception {\r
 \r
-               //test();\r
-\r
-               //((MediaCubeMarker) jobRuntime.getMarker()).setTo("vasary@elgekko.net");\r
+               if (getJobRuntime().getSpawnOrder() == 0) {\r
+                       count = 5;\r
+               }\r
+               logger.info(getMarker(), "Starting params: {}, {}, spawnOrder {}", itemID, iter, getJobRuntime().getSpawnOrder());\r
 \r
-               //logger.info(jobRuntime.getMarker(), "<a href='UNC://\\10.10.1.100\\BRAAVOS\\ARCHIVE' target='blank'>usefullink</a>");\r
-               logger.info(jobRuntime.getMarker(), "Starting with {} #{}", itemID, jobRuntime.getId());\r
-               //              Message message = logger.getMessageFactory().newMessage("Starting with {} #{}", itemID, jobRuntime.getId());\r
-               //logger.error(jobRuntime.getMarker(), message, new Exception("TESZT"));\r
                try {\r
+                       int step = 100 / count;\r
                        for (int i = 0; i < count; i++) {\r
-                               //sb.append("Sikeres iteráció : ")\r
                                if (!canContinue())\r
                                        break;\r
-                               jobRuntime.incrementProgress((i + 1) * count);\r
+                               setProgress((i + 1) * step);\r
                                for (int j = 0; j < 100; j++) {\r
                                        Thread.sleep(10);\r
                                }\r
-\r
-                               //jobEngine.sendMessage(new CancelRequest(jobRuntime.getId()));\r
-                               logger.info("Progress {}", jobRuntime.getProgress());\r
+                               logger.info("Progress {}", getJobRuntime().getProgress());\r
                        }\r
 \r
                } catch (Exception e) {\r
-                       logger.error(jobRuntime.getMarker(), e.getMessage());\r
+                       logger.error(getMarker(), e.getMessage());\r
                        throw e;\r
                }\r
+               Object[] result = Arrays.asList(10, 20).toArray();\r
+               logger.info("Returning {}, {}", result[0], result[1]);\r
                return result;\r
        }\r
 \r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/MergeStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/MergeStep.java
new file mode 100644 (file)
index 0000000..abbc0b0
--- /dev/null
@@ -0,0 +1,15 @@
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+public class MergeStep extends JobStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
+       @StepEntry\r
+       public Object[] execute(long id1, long id2) throws Exception {\r
+               logger.info("MERGE {} {}", id1, id2);\r
+               return null;\r
+       }\r
+\r
+}\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOCheckerStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOCheckerStep.java
new file mode 100644 (file)
index 0000000..ae15789
--- /dev/null
@@ -0,0 +1,98 @@
+package user.jobengine.server.steps;\r
+\r
+import java.sql.Timestamp;\r
+import java.time.Instant;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.StoreUri;\r
+import user.commons.nexio.api.Clip;\r
+import user.commons.nexio.api.Controller;\r
+import user.commons.nexio.api.Mediabase;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.db.Store;\r
+\r
+public class NEXIOCheckerStep extends JobStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
+       @StepEntry\r
+       public Object[] execute(String storeName, int limit) throws Exception {\r
+               List<Media> newItems = new ArrayList<>();\r
+               List<Media> updatedItems = new ArrayList<>();\r
+               Object[] result = Arrays.asList(newItems, updatedItems).toArray();\r
+               IItemManager manager = getManager();\r
+\r
+               Store store = manager.getStore(storeName);\r
+               if (store == null)\r
+                       throw new NullPointerException("Store not available: " + storeName);\r
+\r
+               StoreUri storeUri = store.getSourceStoreUri(RemoteStoreProtocol.NEXIO);\r
+               if (storeUri == null)\r
+                       throw new NullPointerException("NEXIO StoreUri not available on: " + storeName);\r
+\r
+               Controller controller = null;\r
+\r
+               try {\r
+                       controller = new Controller(storeUri.getRootPath(), storeUri.getPortNumber());\r
+                       controller.connect();\r
+                       Mediabase mediabase = controller.getMediabase();\r
+                       //SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");\r
+                       Iterator<Clip> clips = mediabase.getClips();\r
+                       int count = limit;\r
+                       while (clips.hasNext()) {\r
+                               Clip clip = clips.next();\r
+                               //String id = clip.getId().get();\r
+                               String title = clip.getXid().get();\r
+                               Timestamp modified = Timestamp.from(clip.getModifiedTimestamp().toInstant());\r
+                               Timestamp created = Timestamp.from(clip.getRecordDateTimestamp().toInstant());\r
+                               int duration = clip.getDuration();\r
+\r
+                               Media media = manager.getMedia(title);\r
+                               if (media == null) {\r
+                                       media = new Media();\r
+                                       media.setModified(modified);\r
+                                       media.setCreated(created);\r
+                                       media.setArchived(Timestamp.from(Instant.now()));\r
+                                       media.setTitle(title);\r
+                                       media.setDescription(title);\r
+                                       media.setLength(duration);\r
+                                       newItems.add(media);\r
+                                       count--;\r
+                               } else {\r
+                                       if (media.getLength() != duration || !media.getModified().equals(modified)) {\r
+                                               media.setArchived(Timestamp.from(Instant.now()));\r
+                                               media.setModified(modified);\r
+                                               media.setLength(duration);\r
+                                               updatedItems.add(media);\r
+                                               count--;\r
+                                       }\r
+                               }\r
+\r
+                               //ha volt limit, akkor egyszer csak 0 lesz, ha nem volt akkor alapbol -1\r
+                               if (count == 0) {\r
+                                       logger.info("Limit reached: {}", limit);\r
+                                       break;\r
+                               }\r
+\r
+                       }\r
+               } catch (Exception e) {\r
+                       logger.error(e);\r
+               } finally {\r
+                       if (controller != null)\r
+                               controller.disconnect();\r
+               }\r
+\r
+               if (newItems.size() == 0 && updatedItems.size() == 0)\r
+                       cancel();\r
+\r
+               return result;\r
+       }\r
+\r
+}\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/SubmitDownloadStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/SubmitDownloadStep.java
new file mode 100644 (file)
index 0000000..01186ee
--- /dev/null
@@ -0,0 +1,44 @@
+package user.jobengine.server.steps;\r
+\r
+import java.util.List;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.ListUtils;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.db.Store;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class SubmitDownloadStep extends JobStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private static final String JOBTEMPLATE = "download-material.xml";\r
+       private static final String DOWNLOAD = "Letöltés";\r
+\r
+       @StepEntry\r
+       public Object[] execute(String storeName, List<Media> newFiles, List<Media> updatedFiles) throws Exception {\r
+               if (!getJobRuntime().forkPrepare())\r
+                       throw new Exception("Unable to fork");\r
+\r
+               IItemManager manager = getManager();\r
+               Store store = manager.getStore(storeName);\r
+               if (store == null)\r
+                       throw new NullPointerException("Store not available: " + storeName);\r
+\r
+               for (Media media : newFiles) {\r
+                       try {\r
+                               IJobRuntime runtime = getEngine().submit(getJobRuntime(), null, JOBTEMPLATE, DOWNLOAD, ListUtils.asMap("store", store, "media", media));\r
+                               if (runtime == null)\r
+                                       throw new Exception("Unable to submit job");\r
+                       } catch (Exception e) {\r
+                               logger.error(e.getMessage());\r
+                               throw e;\r
+                       }\r
+               }\r
+\r
+               getJobRuntime().forkWaitComplete();\r
+               return null;\r
+       }\r
+\r
+}\r
index aaf830e0f43d5d6d828cabeb855ced7c60671611..b04cd544fe280a645ece4e5e53e5ae63017604d7 100644 (file)
@@ -28,10 +28,13 @@ Export-Package: user.commons,
  user.commons.mediatool,
  user.commons.morpheus,
  user.commons.nexio,
+ user.commons.nexio.api,
+ user.commons.nexio.server.protocol,
  user.commons.nosql,
  user.commons.octopus,
  user.commons.rcc,
  user.commons.remotestore,
+ user.commons.rest,
  user.commons.selenio,
  user.commons.selenio.wsclient,
  user.commons.server.protocol,
index ff40329c38a8a584bafa441c2de06adb502ab43b..d8c2cfa45a03f504c6318939f768436af0a1f1bd 100644 (file)
@@ -39,7 +39,11 @@ public enum JobStatus {
        /**
         * Végrehajtás alatt - a folyamat végrehajtó futtatja a lépést.
         */
-       EXECUTING(0x1000);
+       EXECUTING(0x1000),
+       /**
+        * Végrehajtás alatt - a folyamat végrehajtó futtatja a lépést.
+        */
+       WAIT_FINISH(0x010C);
 
        private final int value;
 
index 2ace5d19e70efcd6dad401d1cd55b3a80a4eb58a..c053aacb56c0a6922c9d204495abc374cf5dfec2 100644 (file)
@@ -1,7 +1,7 @@
 package user.commons.remotestore;\r
 \r
 public enum RemoteStoreProtocol {\r
-       HTTPS("https://"), HTTP("http://"), FTP("ftp://"), SMB("smb://"), LOCAL("file://"), TSM("tsm://");\r
+       HTTPS("https://"), HTTP("http://"), FTP("ftp://"), SMB("smb://"), LOCAL("file://"), TSM("tsm://"), NEXIO("nexio://");\r
        static public RemoteStoreProtocol fromString(String data) {\r
                RemoteStoreProtocol result = null;\r
                if (data != null) {\r
diff --git a/server/user.jobengine.osgi.commons/src/user/commons/rest/ServiceObjectMapper.java b/server/user.jobengine.osgi.commons/src/user/commons/rest/ServiceObjectMapper.java
new file mode 100644 (file)
index 0000000..1cc64ce
--- /dev/null
@@ -0,0 +1,18 @@
+package user.commons.rest;\r
+\r
+import com.fasterxml.jackson.annotation.JsonInclude.Include;\r
+import com.fasterxml.jackson.databind.DeserializationFeature;\r
+import com.fasterxml.jackson.databind.ObjectMapper;\r
+import com.fasterxml.jackson.databind.SerializationFeature;\r
+import com.fasterxml.jackson.datatype.joda.JodaModule;\r
+\r
+public class ServiceObjectMapper {\r
+       private static final ObjectMapper mapper = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)\r
+                       .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).registerModule(new JodaModule()).setDateFormat(new RFC3339DateFormat())\r
+                       .setSerializationInclusion(Include.NON_NULL);\r
+       //                              .enable(SerializationFeature.INDENT_OUTPUT);\r
+\r
+       public static ObjectMapper getMapper() {\r
+               return mapper;\r
+       }\r
+}\r
index b8bb479892862c6255f0d31e8d3e1b61758d8c7d..43ab407b0b1b0147947af2cc78c9cb5025585760 100644 (file)
@@ -3,8 +3,8 @@
 \r
        ::Remote::\r
        SET REMOTE_LOCATION=/tmp/mediaarch\r
-       SET REMOTE_SERVER_HOSTKEY=ssh-ed25519 256 ea:ab:67:70:79:63:2f:6a:34:81:48:e2:b9:dd:ca:d4\r
-       SET REMOTE_SERVER_ADDRESS=scp://db2admin:password@10.10.1.27\r
+       SET REMOTE_SERVER_HOSTKEY=ssh-ed25519 256 86:5b:9b:bc:df:7b:df:90:c6:bf:60:69:d2:c9:61:62\r
+       SET REMOTE_SERVER_ADDRESS=scp://db2admin:password@10.228.198.1\r
        \r
        CALL :deploy_source\r
        if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL%\r
index 86ec7f16fb3a1474a69bdd57214965ea9e18ddaf..9cdfc3771bafb3489a5f2bd08f629840de1927d5 100644 (file)
@@ -33,6 +33,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
                try {
                        add(context, entity);
                } catch (Exception e) {
+                       //TODO reszletezes
                        throw new ItemManagerException(e);
                } finally {
                        manager.putDbContext(context);
@@ -48,7 +49,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
 
                        insert(context, entity);        
                        if (id == 0) {
-                               /*@lineinfo:generated-code*//*@lineinfo:51^4*/
+                               /*@lineinfo:generated-code*//*@lineinfo:52^4*/
 
 //  ************************************************************
 //  #sql [context] { SELECT IDENTITY_VAL_LOCAL()  INTO :id,  FROM SYSIBM.SYSDUMMY1  };
@@ -93,11 +94,11 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
 
 //  ************************************************************
 
-/*@lineinfo:user-code*//*@lineinfo:51^80*/
+/*@lineinfo:user-code*//*@lineinfo:52^80*/
                                entity.setId(id);
                        }
                        afterAdd(context, entity);
-                       /*@lineinfo:generated-code*//*@lineinfo:55^3*/
+                       /*@lineinfo:generated-code*//*@lineinfo:56^3*/
 
 //  ************************************************************
 //  #sql [context] { COMMIT  };
@@ -124,13 +125,13 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
 
 //  ************************************************************
 
-/*@lineinfo:user-code*//*@lineinfo:55^27*/
+/*@lineinfo:user-code*//*@lineinfo:56^27*/
                        if (useMemoryCache())
                                manager.storeCached(entity.getId(), entity);
                        
                } catch (Exception e) {
                        try {
-                               /*@lineinfo:generated-code*//*@lineinfo:61^4*/
+                               /*@lineinfo:generated-code*//*@lineinfo:62^4*/
 
 //  ************************************************************
 //  #sql [context] { ROLLBACK  };
@@ -157,7 +158,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
 
 //  ************************************************************
 
-/*@lineinfo:user-code*//*@lineinfo:61^30*/
+/*@lineinfo:user-code*//*@lineinfo:62^30*/
                        } catch(Exception e1) {
                        }
                        manager.throwError(e);
@@ -215,7 +216,36 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
                }
                return result;
        }
-
+       
+       @Override
+       public IEntityBase get(IDAOIterProvider provider) {
+               IEntityBase entity = null;
+               DefaultContext context = manager.getDbContext();
+               try {
+                       entity = get(context, provider);
+               } catch (Exception e) {
+                       throw new ItemManagerException(e);
+               } finally {
+                       manager.putDbContext(context);
+               }
+               return entity;
+       }
+       
+       private IEntityBase get(DefaultContext context, IDAOIterProvider provider) {
+               manager.traceIn();
+               IEntityBase entity = null;
+               try {
+                       ResultSetIterImpl iter = provider.get(context, this);
+                       checkNull(iter, ResultSetIterImpl.class);
+                       entity = getEntity(context, iter);
+                       afterGet(context, entity);
+               } catch (Exception e) {
+                       throw new ItemManagerException(e);
+               }
+               manager.traceOut();
+               return entity;
+       }       
+       
        public List<IEntityBase> getAll(DefaultContext context) {
                manager.traceIn();
                List<IEntityBase> result = null;
@@ -318,7 +348,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
                                        manager.setAllCached(getCacheType(), result);
                        }
                        
-                       /*@lineinfo:generated-code*//*@lineinfo:222^3*/
+                       /*@lineinfo:generated-code*//*@lineinfo:252^3*/
 
 //  ************************************************************
 //  #sql [context] { COMMIT  };
@@ -345,10 +375,10 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
 
 //  ************************************************************
 
-/*@lineinfo:user-code*//*@lineinfo:222^27*/
+/*@lineinfo:user-code*//*@lineinfo:252^27*/
                } catch (Exception e) {
                        try {
-                               /*@lineinfo:generated-code*//*@lineinfo:225^4*/
+                               /*@lineinfo:generated-code*//*@lineinfo:255^4*/
 
 //  ************************************************************
 //  #sql [context] { ROLLBACK  };
@@ -375,7 +405,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
 
 //  ************************************************************
 
-/*@lineinfo:user-code*//*@lineinfo:225^30*/
+/*@lineinfo:user-code*//*@lineinfo:255^30*/
                        } catch(Exception e1) {
                        }
                        manager.throwError(e);
@@ -419,7 +449,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
                        entity.checkParameter("ID", id, false);
                        update(context, entity);
                        afterModify(context, entity);
-                       /*@lineinfo:generated-code*//*@lineinfo:269^3*/
+                       /*@lineinfo:generated-code*//*@lineinfo:299^3*/
 
 //  ************************************************************
 //  #sql [context] { COMMIT  };
@@ -446,12 +476,12 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
 
 //  ************************************************************
 
-/*@lineinfo:user-code*//*@lineinfo:269^27*/
+/*@lineinfo:user-code*//*@lineinfo:299^27*/
                        if (useMemoryCache())
                                manager.storeCached(entity.getId(), entity);
                } catch (Exception e) {
                        try {
-                               /*@lineinfo:generated-code*//*@lineinfo:274^4*/
+                               /*@lineinfo:generated-code*//*@lineinfo:304^4*/
 
 //  ************************************************************
 //  #sql [context] { ROLLBACK  };
@@ -478,7 +508,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
 
 //  ************************************************************
 
-/*@lineinfo:user-code*//*@lineinfo:274^30*/
+/*@lineinfo:user-code*//*@lineinfo:304^30*/
                        } catch(Exception e1) {
                        }
                        manager.throwError(e);
@@ -507,7 +537,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
                        beforeDelete(context, entity);
                        delete(context, id);
                        afterDelete(context, entity);
-                       /*@lineinfo:generated-code*//*@lineinfo:303^3*/
+                       /*@lineinfo:generated-code*//*@lineinfo:333^3*/
 
 //  ************************************************************
 //  #sql [context] { COMMIT  };
@@ -534,12 +564,12 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
 
 //  ************************************************************
 
-/*@lineinfo:user-code*//*@lineinfo:303^27*/
+/*@lineinfo:user-code*//*@lineinfo:333^27*/
                        if (useMemoryCache())
                                manager.removeCached(getCacheType(), entity.getId());
                } catch (Exception e) {
                        try {
-                               /*@lineinfo:generated-code*//*@lineinfo:308^4*/
+                               /*@lineinfo:generated-code*//*@lineinfo:338^4*/
 
 //  ************************************************************
 //  #sql [context] { ROLLBACK  };
@@ -566,7 +596,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
 
 //  ************************************************************
 
-/*@lineinfo:user-code*//*@lineinfo:308^30*/
+/*@lineinfo:user-code*//*@lineinfo:338^30*/
                        } catch(Exception e1) {
                        }
                        manager.throwError(e);
@@ -590,7 +620,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
                try {
                        for (long id : ids)
                                delete(context, id);
-                       /*@lineinfo:generated-code*//*@lineinfo:332^3*/
+                       /*@lineinfo:generated-code*//*@lineinfo:362^3*/
 
 //  ************************************************************
 //  #sql [context] { COMMIT  };
@@ -617,14 +647,14 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
 
 //  ************************************************************
 
-/*@lineinfo:user-code*//*@lineinfo:332^27*/
+/*@lineinfo:user-code*//*@lineinfo:362^27*/
                        if (useMemoryCache()) {
                                for (long id : ids)
                                        manager.removeCached(getCacheType(), id);
                        }
                } catch (Exception e) {
                        try {
-                               /*@lineinfo:generated-code*//*@lineinfo:339^4*/
+                               /*@lineinfo:generated-code*//*@lineinfo:369^4*/
 
 //  ************************************************************
 //  #sql [context] { ROLLBACK  };
@@ -651,7 +681,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
 
 //  ************************************************************
 
-/*@lineinfo:user-code*//*@lineinfo:339^30*/
+/*@lineinfo:user-code*//*@lineinfo:369^30*/
                        } catch(Exception e1) {
                        }
                        manager.throwError(e);
@@ -665,7 +695,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
                DefaultContext context = manager.getDbContext();
                try {
                        truncateTable(context);
-                       /*@lineinfo:generated-code*//*@lineinfo:353^3*/
+                       /*@lineinfo:generated-code*//*@lineinfo:383^3*/
 
 //  ************************************************************
 //  #sql [context] { COMMIT  };
@@ -692,7 +722,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
 
 //  ************************************************************
 
-/*@lineinfo:user-code*//*@lineinfo:353^27*/
+/*@lineinfo:user-code*//*@lineinfo:383^27*/
                } catch (Exception e) {
                        throw new ItemManagerException(e);
                } finally {
diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/IDAOIterProvider.java b/server/user.jobengine.osgi.db/generated/user/jobengine/db/IDAOIterProvider.java
new file mode 100644 (file)
index 0000000..67b505e
--- /dev/null
@@ -0,0 +1,10 @@
+package user.jobengine.db;\r
+\r
+import sqlj.runtime.ref.DefaultContext;\r
+import sqlj.runtime.ref.ResultSetIterImpl;\r
+\r
+public interface IDAOIterProvider {\r
+\r
+       ResultSetIterImpl get(DefaultContext context, IEntityBaseDAO dao);\r
+\r
+}\r
index 62c64de16e72aaae58e5a0650c54b6103d9fb4fd..ab9e44fea51475b245ffc74509fdd00815e4e12c 100644 (file)
@@ -3,6 +3,8 @@ package user.commons.pool;
 import java.lang.reflect.InvocationTargetException;\r
 import java.sql.Connection;\r
 import java.sql.DriverManager;\r
+import java.sql.ResultSet;\r
+import java.sql.Statement;\r
 import java.util.Properties;\r
 \r
 import org.apache.logging.log4j.LogManager;\r
@@ -32,10 +34,15 @@ public class ContextPool extends ResourcePool {
        protected boolean checkObject(Object resourceObject) {\r
                DefaultContext context = (DefaultContext) resourceObject;\r
                boolean result = false;\r
-               try {\r
-                       result = context.getConnection().isClosed();\r
-               } catch (Exception e) {\r
-                       logger.catching(e);\r
+               String sql = "SELECT 1 FROM SYSIBM.SYSDUMMY1";\r
+               try (Statement stmt = context.getConnection().createStatement()) {\r
+                       try (ResultSet resultSet = stmt.executeQuery(sql)) {\r
+                               result = true;\r
+                       } catch (Exception e2) {\r
+                               throw e2;\r
+                       }\r
+               } catch (Exception e1) {\r
+                       logger.catching(e1);\r
                }\r
                return result;\r
        }\r
index cb5e2b923c173228c18df91576df5b65122704c5..bf3c73cf6593a0e572a9e163ab93bd3cb7e4020c 100644 (file)
@@ -291,4 +291,5 @@ public class DynamicAttributesDAO extends EntityBaseDAO {
                DomainIndexDAO indexdao = (DomainIndexDAO) manager.getBaseDAO(DomainIndex.class);\r
                indexdao.removeAll(context, entity, metadata);\r
        }\r
+\r
 }\r
index b982245011d70d238a6a80e99d9af6abe7ef0820..4cf5a483d05ef24df94995317f2678d8745e266b 100644 (file)
@@ -33,6 +33,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
                try {\r
                        add(context, entity);\r
                } catch (Exception e) {\r
+                       //TODO reszletezes\r
                        throw new ItemManagerException(e);\r
                } finally {\r
                        manager.putDbContext(context);\r
@@ -116,7 +117,36 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO {
                }\r
                return result;\r
        }\r
-\r
+       \r
+       @Override\r
+       public IEntityBase get(IDAOIterProvider provider) {\r
+               IEntityBase entity = null;\r
+               DefaultContext context = manager.getDbContext();\r
+               try {\r
+                       entity = get(context, provider);\r
+               } catch (Exception e) {\r
+                       throw new ItemManagerException(e);\r
+               } finally {\r
+                       manager.putDbContext(context);\r
+               }\r
+               return entity;\r
+       }\r
+       \r
+       private IEntityBase get(DefaultContext context, IDAOIterProvider provider) {\r
+               manager.traceIn();\r
+               IEntityBase entity = null;\r
+               try {\r
+                       ResultSetIterImpl iter = provider.get(context, this);\r
+                       checkNull(iter, ResultSetIterImpl.class);\r
+                       entity = getEntity(context, iter);\r
+                       afterGet(context, entity);\r
+               } catch (Exception e) {\r
+                       throw new ItemManagerException(e);\r
+               }\r
+               manager.traceOut();\r
+               return entity;\r
+       }       \r
+       \r
        public List<IEntityBase> getAll(DefaultContext context) {\r
                manager.traceIn();\r
                List<IEntityBase> result = null;\r
index 85e8a613c2923b3a85f94ce8cf275bb93a70dc92..fb1f94d8f25403551ad1b7dc23760ef1c6958d37 100644 (file)
@@ -7,16 +7,18 @@ import user.commons.IEntityBase;
 public interface IEntityBaseDAO {\r
        void add(IEntityBase entity);\r
 \r
+       IEntityBase get(IDAOIterProvider provider);\r
+\r
        IEntityBase get(long id);\r
 \r
        List<IEntityBase> getAll();\r
 \r
        List<IEntityBase> getAll(long id);\r
 \r
-       void modify(IEntityBase entity);\r
-\r
        void merge(IEntityBase entity);\r
 \r
+       void modify(IEntityBase entity);\r
+\r
        void remove(IEntityBase entity);\r
 \r
        void remove(List<Long> ids);\r
index 99a60ef22de7a85ffac6ebc15d9edad766450a76..b818d885d26209f6a2bf36230779fbf26e4d2e1f 100644 (file)
@@ -222,6 +222,8 @@ public interface IItemManager extends IEntityPersister {
         */\r
        Media getMedia(long id);\r
 \r
+       Media getMedia(String title);\r
+\r
        /**\r
         * Azonosító alapján elkér egy Metaadat elem objektumot.\r
         *\r
index 419efda76800f00756c1796ce1c6cd439945932b..b4043ca377c97ffe3ffb0902391916260a37bfc6 100644 (file)
@@ -24,6 +24,7 @@ import org.apache.logging.log4j.Logger;
 import com.ibm.nosql.json.api.BasicDBObject;\r
 \r
 import sqlj.runtime.ref.DefaultContext;\r
+import sqlj.runtime.ref.ResultSetIterImpl;\r
 import user.commons.BaseType;\r
 import user.commons.CalendarUtils;\r
 import user.commons.IEntityBase;\r
@@ -84,8 +85,6 @@ public class ItemManager extends MemoryCache implements IItemManager {
 \r
        public ItemManager() {\r
                initializeItemManager(signalServer);\r
-               connect();\r
-\r
                // TODO mediafinder lokalis valtozo helyett private field.\r
                // System.getProperty("jobengine.mediafinder.external") == true\r
                // System.getProperty("jobengine.mediafinder.external.url")\r
@@ -100,13 +99,9 @@ public class ItemManager extends MemoryCache implements IItemManager {
        }\r
 \r
        public void activate() {\r
-               // logger.info("ItemManager activated.");\r
+               connect();\r
        }\r
 \r
-       // public ItemManager(SignalServer signalServer) {\r
-       // initializeItemManager(signalServer);\r
-       // }\r
-\r
        @Override\r
        public void add(IEntityBase entity) {\r
                traceIn();\r
@@ -424,6 +419,7 @@ public class ItemManager extends MemoryCache implements IItemManager {
 \r
        public void deactivate() {\r
                // logger.info("ItemManager deactivated.");\r
+               disconnect();\r
        }\r
 \r
        /**\r
@@ -609,7 +605,8 @@ public class ItemManager extends MemoryCache implements IItemManager {
        @Override\r
        public DefaultContext getDbContext() {\r
                DefaultContext context = null;\r
-               context = contextPool.borrowObject();\r
+               if (contextPool != null)\r
+                       context = contextPool.borrowObject();\r
                return context;\r
        }\r
 \r
@@ -820,6 +817,20 @@ public class ItemManager extends MemoryCache implements IItemManager {
                return (Media) get(Media.class, id);\r
        }\r
 \r
+       @Override\r
+       public Media getMedia(String title) {\r
+               IEntityBaseDAO daoBase = getBaseDAO(Media.class);\r
+               return (Media) daoBase.get((context, dao) -> {\r
+                       ResultSetIterImpl result = null;\r
+                       try {\r
+                               result = ((MediaDAO) dao).selectByTitle(context, title);\r
+                       } catch (SQLException e) {\r
+                               logger.error(e.getMessage());\r
+                       }\r
+                       return result;\r
+               });\r
+       }\r
+\r
        @Override\r
        public MetadataElement getMetadataElement(long id) {\r
                return (MetadataElement) get(MetadataElement.class, id);\r
index 69f473f3a734399fe54183b7a0c98e4610ed6994..a88400cbfad7da114ce54854092248e7afb04aa3 100644 (file)
@@ -20,6 +20,7 @@ public class Media extends DynamicAttributes {
        private static final long serialVersionUID = 1L;
        private Timestamp archived = null;
        private Timestamp created = null;
+       private Timestamp modified = null;
        private String description = null;
        private String houseId = null;
        private long itemId = 0;
@@ -116,6 +117,10 @@ public class Media extends DynamicAttributes {
                return mediaFilesName;
        }
 
+       public Timestamp getModified() {
+               return modified;
+       }
+
        public byte[] getPoster() {
                return poster;
        }
@@ -166,6 +171,10 @@ public class Media extends DynamicAttributes {
                this.mediaFilesName = mediaFilesName;
        }
 
+       public void setModified(Timestamp modified) {
+               this.modified = modified;
+       }
+
        public void setPoster(byte[] poster) {
                this.poster = poster;
        }
index eadadce95cb211edd1f276869122c121846b41c9..fbcd0cce3acb7868ae214d596b31737d0160fab9 100644 (file)
@@ -7,7 +7,7 @@ import java.sql.SQLException;
 import java.util.ArrayList;\r
 import java.util.List;\r
 \r
-#sql iterator MediaIter(long id, String title, String description, long itemId, long itemTypeId, String houseId, long length, Timestamp created, Timestamp archived, byte[] poster);\r
+#sql iterator MediaIter(long id, String title, String description, long itemId, long itemTypeId, String houseId, long length, Timestamp created, Timestamp archived, Timestamp modified, byte[] poster);\r
 \r
 @SuppressWarnings("unused")\r
 class MediaDAO extends EntityBaseDAO {\r
@@ -62,6 +62,7 @@ class MediaDAO extends EntityBaseDAO {
                        entity.setLength(iterator.length());\r
                        entity.setCreated(iterator.created());\r
                        entity.setArchived(iterator.archived());\r
+                       entity.setModified(iterator.modified());\r
                        entity.setPoster(iterator.poster());\r
 \r
                        if (result == null)\r
@@ -75,21 +76,27 @@ class MediaDAO extends EntityBaseDAO {
        @Override\r
        protected ResultSetIterImpl selectByKey(DefaultContext context, long id) throws SQLException{\r
                MediaIter iter = null;\r
-               #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, POSTER FROM MEDIA WHERE ID = :id };\r
+               #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, MODIFIED, POSTER FROM MEDIA WHERE ID = :id };\r
                return iter;\r
        }\r
 \r
        @Override\r
        protected ResultSetIterImpl selectByForeignKey(DefaultContext context, long id) throws SQLException{\r
                MediaIter iter = null;\r
-               #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, POSTER FROM MEDIA WHERE ITEMID = :id };\r
+               #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, MODIFIED, POSTER FROM MEDIA WHERE ITEMID = :id };\r
+               return iter;\r
+       }\r
+       \r
+       public ResultSetIterImpl selectByTitle(DefaultContext context, String title) throws SQLException{\r
+               MediaIter iter = null;\r
+               #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, MODIFIED, POSTER FROM MEDIA WHERE TITLE = :title };\r
                return iter;\r
        }\r
        \r
        @Override\r
        protected ResultSetIterImpl selectAll(DefaultContext context) throws SQLException{\r
                MediaIter iter = null;\r
-               #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, POSTER FROM MEDIA };\r
+               #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, MODIFIED, POSTER FROM MEDIA };\r
                return iter;\r
        }\r
        \r
@@ -115,8 +122,9 @@ class MediaDAO extends EntityBaseDAO {
                long length = obj.getLength();\r
                byte[] poster = obj.getPoster();\r
                Timestamp archived = obj.getArchived();\r
+               Timestamp modified = obj.getModified();\r
 \r
-               #sql [context] { UPDATE MEDIA SET TITLE = :title, DESCRIPTION = :description, ITEMID = :itemId, ITEMTYPEID = :itemTypeId, HOUSEID = :houseId, LENGTH = :length, POSTER = :poster, ARCHIVED = :archived WHERE ID = :id };\r
+               #sql [context] { UPDATE MEDIA SET TITLE = :title, DESCRIPTION = :description, ITEMID = :itemId, ITEMTYPEID = :itemTypeId, HOUSEID = :houseId, LENGTH = :length, POSTER = :poster, ARCHIVED = :archived, MODIFIED = :modified WHERE ID = :id };\r
        }\r
        \r
        @Override\r
@@ -131,12 +139,13 @@ class MediaDAO extends EntityBaseDAO {
                long length = obj.getLength();\r
                byte[] poster = obj.getPoster();\r
                Timestamp archived = obj.getArchived();\r
+               Timestamp modified = obj.getModified();\r
                \r
-               #sql [context] { INSERT INTO MEDIA (ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, POSTER, ARCHIVED) VALUES (:id, :title, :description, :itemId, :itemTypeId, :houseId, :length, :poster, :archived) };\r
+               #sql [context] { INSERT INTO MEDIA (ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, POSTER, ARCHIVED, MODIFIED) VALUES (:id, :title, :description, :itemId, :itemTypeId, :houseId, :length, :poster, :archived, :modified) };\r
        }\r
        \r
        /**\r
-        * Beszúrja az Item objektumhoz kapcsolódó statikus/dinamikus Media adatokat. \r
+        * Besz�rja az Item objektumhoz kapcsol�d� statikus/dinamikus Media adatokat. \r
         */\r
        void addAll(DefaultContext context, IEntityBase entity) throws SQLException {\r
                manager.traceIn();\r
index ecf43fa134baf337a2e01c43f1ca0329f4cde587..fae09ebac533312a3fa1fd714bf41d2fc7f10a8d 100644 (file)
@@ -4,7 +4,11 @@ Bundle-Name: Server
 Bundle-SymbolicName: user.jobengine.osgi.server;singleton:=true
 Bundle-Version: 1.0.0
 Service-Component: OSGI-INF/component.xml, OSGI-INF/componentBinder.xml
-Import-Package: javax.servlet;version="3.1.0",
+Import-Package: com.fasterxml.jackson.jaxrs.cfg;version="2.4.5",
+ com.fasterxml.jackson.jaxrs.json;version="2.4.5",
+ com.fasterxml.jackson.module.jaxb;version="2.4.5",
+ groovy.lang;version="3.0.3",
+ javax.servlet;version="3.1.0",
  javax.servlet.http;version="3.1.0",
  javax.ws.rs.client,
  javax.ws.rs.core,
index a078b635f09a024768a988e5a6fa961dd6e7636d..0367b70ad7a64dfebe67fa7cd79d516ec6bad9a4 100644 (file)
@@ -42,6 +42,7 @@
                                        emptyMessage="Nincs futó folyamat" >\r
                                        <listhead>\r
                                                <listheader label="Id" hflex="min" align="left" sort="auto" />\r
+                                               <listheader label="ParentId" hflex="min" align="left" sort="auto" />\r
                                                <listheader label="Indítás" hflex="min" align="left" sort="auto" />\r
                                                <listheader label="Kész" hflex="min" align="left" sort="auto" />\r
                                                <listheader label="Név" hflex="min" align="left" sort="auto" />\r
@@ -55,6 +56,7 @@
                                        <template name="model">\r
                                                <listitem>\r
                                                        <listcell label="@load(each.id)" />\r
+                                                       <listcell label="@load(each.parentJobId)" />\r
                                                        <listcell label="@load(each.submitted)" />\r
                                                        <listcell label="@load(each.finished)" />\r
                                                        <listcell label="@load(each.name)" />\r
index de6e6676c83201c90d059bb9b944bb022cbbaa2d..84a27e6fd2885fa2c42f769436f37770c00114ba 100644 (file)
@@ -6,55 +6,54 @@ import user.jobengine.server.ast.JobTemplate;
 import user.jobengine.server.instructions.IInstruction;
 
 /**
- * Program leíró interface. A gépikód gyûjtõ osztája.
+ * Program le�r� interface. A g�pik�d gy�jt� oszt�ja.
  */
 public interface IProgram {
        /**
-        * Gépikódú utasítás hozzáadása.
-        * 
+        * G�pik�d� utas�t�s hozz�ad�sa.
+        *
         * @param instruction
-        *            Gepikódú utasítás.
+        *            Gepik�d� utas�t�s.
         */
        void addInstruction(IInstruction instruction);
 
        /**
-        * Program egyenlõség vizsgálata. Két program akkor lesz egyenlõ, ha
-        * utasításainak darabszáma, utasításainak típusa, utasításainak sorrendje
-        * és utasításainak paraméterei megegyeznek.
-        * 
+        * Program egyenl�s�g vizsg�lata. K�t program akkor lesz egyenl�, ha utas�t�sainak darabsz�ma, utas�t�sainak t�pusa, utas�t�sainak sorrendje �s
+        * utas�t�sainak param�terei megegyeznek.
+        *
         * @param obj
-        *            Az aktuális példánnyal összahsonlítandó példány.
-        * @return Igen - a két program megegyezik, Nem - a két program
-        *         különbözõ.Eltérõ utasításszámnál és az elsõ eltérõ utasításnál
-        *         kivételt kapunk.
+        *            Az aktu�lis p�ld�nnyal �sszahsonl�tand� p�ld�ny.
+        * @return Igen - a k�t program megegyezik, Nem - a k�t program k�l�nb�z�.Elt�r� utas�t�ssz�mn�l �s az els� elt�r� utas�t�sn�l kiv�telt kapunk.
         */
        @Override
        boolean equals(Object obj);
 
        /**
-        * Gépikódú utasítás lekérdezése.
-        * 
+        * G�pik�d� utas�t�s lek�rdez�se.
+        *
         * @param index
-        *            Utasítás sorszáma.
-        * @return Gépikódú utasítás.
+        *            Utas�t�s sorsz�ma.
+        * @return G�pik�d� utas�t�s.
         */
        IInstruction get(int index);
 
        List<IInstruction> getInstructions();
 
        /**
-        * Gépikódú utasítások számának lekérdezése.
-        * 
-        * @return Gépikódú utasítások darabszáma.
+        * G�pik�d� utas�t�sok sz�m�nak lek�rdez�se.
+        *
+        * @return G�pik�d� utas�t�sok darabsz�ma.
         */
        long getInstructionsCount();
 
+       JobTemplate getTemplate();
+
+       void removeAfter(int ip);
+
        /**
-        * Gépikódú utasítások törlése a programból.
+        * G�pik�d� utas�t�sok t�rl�se a programb�l.
         */
        void reset();
 
        void setTemplate(JobTemplate template);
-
-       JobTemplate getTemplate();
 }
index 084a6d0ee0d70331baaca0671477f332a8862184..7ea97e2fde4e6efbdf4cd867ef729607f9eeb831 100644 (file)
@@ -7,18 +7,23 @@ import user.jobengine.server.ast.JobTemplate;
 import user.jobengine.server.instructions.IInstruction;
 
 public class Program implements IProgram {
-       private final List<IInstruction> instructions;
+       private List<IInstruction> instructions;
        private JobTemplate template;
 
        public Program() {
                instructions = new ArrayList<IInstruction>();
        }
 
+       public Program(IProgram program) {
+               instructions = program.getInstructions();
+               template = program.getTemplate();
+       }
+
        @Override
        public void addInstruction(IInstruction instruction) {
                if (instruction == null)
                        throw new NullPointerException("instruction");
-               getInstructions().add(instruction);
+               instructions.add(instruction);
        }
 
        @Override
@@ -46,7 +51,7 @@ public class Program implements IProgram {
        public IInstruction get(int ip) {
                if (ip > getInstructions().size() - 1)
                        throw new IndexOutOfBoundsException("instructions");
-               return getInstructions().get(ip);
+               return instructions.get(ip);
        }
 
        @Override
@@ -56,7 +61,7 @@ public class Program implements IProgram {
 
        @Override
        public long getInstructionsCount() {
-               return getInstructions().size();
+               return instructions.size();
        }
 
        @Override
@@ -64,9 +69,19 @@ public class Program implements IProgram {
                return template;
        }
 
+       @Override
+       public void removeAfter(int ip) {
+               List<IInstruction> result = new ArrayList<>();
+
+               for (int i = 0; i <= ip; i++)
+                       result.add(instructions.get(i));
+
+               instructions = result;
+       }
+
        @Override
        public void reset() {
-               getInstructions().clear();
+               instructions.clear();
        }
 
        @Override
index a030bcdddb23a5a340656d684923d3d03cef00bc..f17572602f877aa6213477481a475d0c593c0bb6 100644 (file)
@@ -30,8 +30,10 @@ public class StatusMachine implements IStatusMachine {
                StatusMachineAction machineAction = new StatusMachineAction(jobAction, jobRuntime.getStatus());\r
                if (actions.containsKey(machineAction)) {\r
                        IJobStatusAction action = actions.get(machineAction);\r
-                       logger.debug("{} status change {} -> {}", jobRuntime, jobRuntime.getStatus(), jobAction);\r
+                       logger.info("{} status change {} -> {}", jobRuntime, jobRuntime.getStatus(), jobAction);\r
                        action.processAction(jobEngine, jobRuntime);\r
+               } else {\r
+                       logger.warn("No status processor registered for {} -> {}", jobAction, jobRuntime.getStatus());\r
                }\r
 \r
                // throw new RuntimeException("missing action: " + jobAction + ", " +\r
index 76908a52f2639ccc7c3c7b74d537593aaa79c1a3..86ca32e2f3e24466d66e16bb1a3b0283fca68f58 100644 (file)
@@ -7,6 +7,7 @@ public class CallJobStepCommand extends Command {
        private CommandSequence commandSequence = null;\r
        private String type = null;\r
        private boolean isRemote;\r
+       private String forEach;\r
 \r
        public CallJobStepCommand() {\r
        }\r
@@ -21,6 +22,10 @@ public class CallJobStepCommand extends Command {
                return commandSequence;\r
        }\r
 \r
+       public String getForEach() {\r
+               return forEach;\r
+       }\r
+\r
        public ParameterSequence getInputParameterSequence() {\r
                return inputParameterSequence;\r
        }\r
@@ -45,6 +50,10 @@ public class CallJobStepCommand extends Command {
                this.commandSequence = commandSequence;\r
        }\r
 \r
+       public void setForEach(String forEach) {\r
+               this.forEach = forEach;\r
+       }\r
+\r
        public void setInputParameterSequence(ParameterSequence parameterSequence) {\r
                this.inputParameterSequence = parameterSequence;\r
        }\r
index 2845bb77e2c5549e6da2088792b0420884104601..f078ff6db2fab246459f77818533515ca06aefc1 100644 (file)
@@ -2,6 +2,8 @@ package user.jobengine.server.ast;
 \r
 import java.util.List;\r
 \r
+import org.apache.commons.lang.StringUtils;\r
+\r
 import user.jobengine.server.IProgram;\r
 import user.jobengine.server.Program;\r
 import user.jobengine.server.instructions.AssignVariableInstruction;\r
@@ -13,6 +15,7 @@ import user.jobengine.server.instructions.GetParameterInstruction;
 import user.jobengine.server.instructions.GetVariableInstruction;\r
 import user.jobengine.server.instructions.PushToStackInstruction;\r
 import user.jobengine.server.instructions.SendMessageToUserInstruction;\r
+import user.jobengine.server.instructions.WaitForSpawnJobsInstruction;\r
 \r
 public class Encoder implements Visitor {\r
 \r
@@ -46,7 +49,7 @@ public class Encoder implements Visitor {
                }\r
 \r
                p.addInstruction(new PushToStackInstruction(command.getType()));\r
-               p.addInstruction(new CallJobStepInstruction(command.getWeight(), command.isRemote()));\r
+               p.addInstruction(new CallJobStepInstruction(command.getWeight(), command.isRemote(), command.getForEach()));\r
 \r
                if (outputs != null) {\r
                        for (@SuppressWarnings("unused")\r
@@ -54,6 +57,8 @@ public class Encoder implements Visitor {
                                p.addInstruction(new AssignVariableInstruction());\r
                        }\r
                }\r
+               if (StringUtils.isNotBlank(command.getForEach()))\r
+                       p.addInstruction(new WaitForSpawnJobsInstruction());\r
                return null;\r
        }\r
 \r
index 3e004d01d5a087b95a496fb1c69fd306907a6513..1c996764dd2305ed2c42c91dc004a6acd6774e42 100644 (file)
@@ -4,7 +4,7 @@ import user.jobengine.server.IJobEngine;
 import user.jobengine.server.IJobRuntime;
 
 /**
- * Változó értékadás utasítás.
+ * Valtozo ertekadas utasitas.
  */
 public class AssignVariableInstruction extends Instruction {
        @Override
index f08b1acc2ea30a1b85645712a1c2eb6b855df952..9784c64d64243efd2340c0f81f3c0f5ac2b8e6e1 100644 (file)
@@ -5,12 +5,14 @@ import user.jobengine.server.IJobRuntime;
 
 public class CallJobStepInstruction extends Instruction {
        private boolean isRemote;
+       private String forEach;
 
        public CallJobStepInstruction() {
        }
 
-       public CallJobStepInstruction(int weight, boolean isRemote) {
+       public CallJobStepInstruction(int weight, boolean isRemote, String forEach) {
                this.isRemote = isRemote;
+               this.forEach = forEach;
                setWeight(weight);
        }
 
@@ -20,10 +22,18 @@ public class CallJobStepInstruction extends Instruction {
                jobEngine.executeCallJobStepInstruction(jobRuntime);
        }
 
+       public String getForEach() {
+               return forEach;
+       }
+
        public boolean isRemote() {
                return isRemote;
        }
 
+       public void setForEach(String forEach) {
+               this.forEach = forEach;
+       }
+
        public void setRemote(boolean isRemote) {
                this.isRemote = isRemote;
        }
index 5b6d23d9e735d5936a30fb450fb24279fca55c66..666241908e4f8b5585e053710c04c7abc3006502 100644 (file)
@@ -4,12 +4,12 @@ import user.jobengine.server.IJobEngine;
 import user.jobengine.server.IJobRuntime;
 
 /**
- * Folyamat változó létrehozása utasítás.
+ * Folyamat valtozo letrehozasa utasatas.
  */
 public class DeclareVariableInstruction extends Instruction {
        @Override
        public void execute(IJobEngine jobEngine, IJobRuntime jobRuntime) {
                super.execute(jobEngine, jobRuntime);
-               jobEngine.executeDeclareVariableInstruction(jobRuntime);                
+               jobEngine.executeDeclareVariableInstruction(jobRuntime);
        }
 }
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/instructions/WaitForSpawnJobsInstruction.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/instructions/WaitForSpawnJobsInstruction.java
new file mode 100644 (file)
index 0000000..c8e6e7c
--- /dev/null
@@ -0,0 +1,15 @@
+package user.jobengine.server.instructions;
+
+import user.jobengine.server.IJobEngine;
+import user.jobengine.server.IJobRuntime;
+
+/**
+ * Folyamat varakozas letrehozasa
+ */
+public class WaitForSpawnJobsInstruction extends Instruction {
+       @Override
+       public void execute(IJobEngine jobEngine, IJobRuntime jobRuntime) {
+               super.execute(jobEngine, jobRuntime);
+               jobEngine.executeWaitForSpawnJobsInstruction(jobRuntime);
+       }
+}
index 5641e1d56b4d9d7ea17b6f282106f353130e7f07..881f76bd417c2d7b5dd76ef11309df0a5fd3f667 100644 (file)
@@ -3,16 +3,15 @@ package user.jobengine.server.messages;
 import user.jobengine.server.IJobEngine;
 
 /**
- * Folyamat lépés kész rendszerüzenet.
+ * Folyamat l�p�s k�sz rendszer�zenet.
  */
 public class JobStepCompletedMessage extends JobMessage {
 
        private final Object[] outputs;
 
        /**
-        * Példányosítás az egyedi azonosító és a lépés visszatérési értékeinek
-        * megadásával.
-        * 
+        * Peldanyositas az egyedi azonositoval es a lepes visszataresi ertekeivel
+        *
         * @param jobId
         * @param outputs
         */
@@ -21,12 +20,6 @@ public class JobStepCompletedMessage extends JobMessage {
                this.outputs = outputs;
        }
 
-       @Override
-       public void process(IJobEngine jobEngine) {
-               super.process(jobEngine);
-               jobEngine.processJobStepCompletedMessage(this);
-       }
-
        @Override
        public boolean equals(Object obj) {
                boolean result = super.equals(obj);
@@ -42,12 +35,16 @@ public class JobStepCompletedMessage extends JobMessage {
        }
 
        /**
-        * Lépés visszatérési értékeinek lekérdezése.
-        * 
-        * @return Lépés visszatérési értékei tábla.
+        * @return Lepes visszateresi ertekei
         */
        public Object[] getOutputs() {
                return outputs;
        }
 
+       @Override
+       public void process(IJobEngine jobEngine) {
+               super.process(jobEngine);
+               jobEngine.processJobStepCompletedMessage(this);
+       }
+
 }
index e752c0ccb10605490cf71b723d7b045757599c95..552a38d94aac4f1aa6a200740ffaf3e929395923 100644 (file)
@@ -3,6 +3,7 @@ package user.jobengine.server.scheduler;
 import java.io.File;\r
 import java.nio.file.Files;\r
 import java.nio.file.Paths;\r
+import java.util.ArrayList;\r
 import java.util.Arrays;\r
 import java.util.List;\r
 import java.util.UUID;\r
@@ -81,17 +82,30 @@ public class SchedulerService {
                if (jobParams != null) {\r
                        for (int p = 0; p < jobParams.size(); p++) {\r
                                BasicDBObject jsParam = (BasicDBObject) jobParams.get(p);\r
-                               String stringValue = jsParam.getString("value");\r
-                               if (stringValue == null)\r
-                                       continue;\r
-                               Class<?> clazz = null;\r
-                               try {\r
-                                       clazz = Class.forName(jsParam.getString("type"));\r
-                                       Object value = parseObjectFromString(stringValue, clazz);\r
-                                       sj.setJobParameter(jsParam.getString("name"), value);\r
-                               } catch (Exception e) {\r
-                                       logger.error(e);\r
+                               String n = jsParam.getString("name");\r
+                               Object v = jsParam.get("value");\r
+                               if (v instanceof BasicDBList) {\r
+                                       ArrayList<?> list = (BasicDBList) v;\r
+                                       sj.setJobParameter(n, list);\r
+                               } else {\r
+                                       if (v == null)\r
+                                               continue;\r
+\r
+                                       String sv = String.valueOf(v);\r
+\r
+                                       if ("null".equals(v))\r
+                                               continue;\r
+\r
+                                       Class<?> clazz = null;\r
+                                       try {\r
+                                               clazz = Class.forName(jsParam.getString("type"));\r
+                                               Object value = parseObjectFromString(sv, clazz);\r
+                                               sj.setJobParameter(n, value);\r
+                                       } catch (Exception e) {\r
+                                               logger.error(e);\r
+                                       }\r
                                }\r
+\r
                        }\r
                }\r
 \r
index 6959e8454266438a57fe3c5e207b409bba65eeb1..b3f8980fb3ccf6527fa781750fb5e641e73ff91e 100644 (file)
@@ -20,6 +20,7 @@ import user.commons.MediaCubeMarker;
 import user.jobengine.db.IItemManager;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.messages.CancelRequest;\r
 \r
 /**\r
  * Folyamat lépés ősosztály implementáció.\r
@@ -39,6 +40,10 @@ public class JobStep implements IJobStep {
                return result;\r
        }\r
 \r
+       protected void cancel() {\r
+               jobEngine.sendMessage(new CancelRequest(jobRuntime.getId()));\r
+       }\r
+\r
        @Override\r
        public boolean canContinue() {\r
                return !jobRuntime.isWaitingExecutor();\r
index 5c6714baec69cb6382c845577bde31c1485630e6..a9be511820eef803a0dd9eded07726e1c5e4e444 100644 (file)
@@ -36,6 +36,7 @@ Import-Package: com.fasterxml.jackson.annotation;version="2.4.5",
  user.commons.cluster,
  user.commons.nexio,
  user.commons.octopus,
+ user.commons.rest,
  user.jobengine.db,
  user.jobengine.server
 Export-Package: user.jobengine.osgi.rest,
index 706786615b153c55a2e3b26c3be27f6c9d733d23..731e94212fb158968af25473ef11188deb6af99e 100644 (file)
@@ -7,6 +7,8 @@ import javax.ws.rs.ext.Provider;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
 
+import user.commons.rest.ServiceObjectMapper;
+
 @Provider
 @Produces({ MediaType.APPLICATION_JSON })
 //@Consumes({ "application/json;charset=UTF-8" })
@@ -14,7 +16,7 @@ import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
 public class JacksonJsonProvider extends JacksonJaxbJsonProvider {
 
        public JacksonJsonProvider() {
-               ObjectMapper objectMapper = ServiceObjectMapper.createMapper();
+               ObjectMapper objectMapper = ServiceObjectMapper.getMapper();
                setMapper(objectMapper);
        }
 }
\ No newline at end of file
diff --git a/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/ServiceObjectMapper.java b/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/ServiceObjectMapper.java
deleted file mode 100644 (file)
index e08be76..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-package user.jobengine.osgi.rest;\r
-\r
-import com.fasterxml.jackson.annotation.JsonInclude.Include;\r
-import com.fasterxml.jackson.databind.DeserializationFeature;\r
-import com.fasterxml.jackson.databind.ObjectMapper;\r
-import com.fasterxml.jackson.databind.SerializationFeature;\r
-import com.fasterxml.jackson.datatype.joda.JodaModule;\r
-\r
-public class ServiceObjectMapper {\r
-\r
-       public static ObjectMapper createMapper() {\r
-               //újraindítás kell a módoosításokhoz\r
-               return new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES).disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)\r
-                               .registerModule(new JodaModule()).setDateFormat(new RFC3339DateFormat()).setSerializationInclusion(Include.NON_NULL);\r
-               //                              .enable(SerializationFeature.INDENT_OUTPUT);\r
-\r
-       }\r
-}\r
index 058879b6db0b59469d944504da948a944227d9d7..d717210752d04f701e339dc063b97683fc68062b 100644 (file)
@@ -16,10 +16,10 @@ import com.ibm.nosql.json.JSONUtil;
 import com.ibm.nosql.json.api.BasicDBObject;
 
 import user.commons.JobStatus;
+import user.commons.rest.ServiceObjectMapper;
 import user.jobengine.db.ItemManagerData.SignalType;
 import user.jobengine.db.JSONBase;
 import user.jobengine.osgi.rest.ComponentBinder;
-import user.jobengine.osgi.rest.ServiceObjectMapper;
 import user.jobengine.server.IJobChangedListener;
 import user.jobengine.server.IJobEngine;
 import user.jobengine.server.IJobRuntime;
@@ -40,7 +40,7 @@ public class MediaCubeAPIWSSocket extends WebSocketAdapter {
        private static Map<Long, IJobChangedListener> jobChangedListeners = new ConcurrentHashMap<>();
 
        public MediaCubeAPIWSSocket() {
-               mapper = ServiceObjectMapper.createMapper();
+               mapper = ServiceObjectMapper.getMapper();
                logger.info("EventSocket created");
        }
 
index 771adfa68c28f11f43f79990da0e58103d19e5d2..371264a83afcd967a547d9632c7924426c7b6d96 100644 (file)
@@ -12,8 +12,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.ibm.nosql.json.JSONUtil;
 import com.ibm.nosql.json.api.BasicDBObject;
 
+import user.commons.rest.ServiceObjectMapper;
 import user.jobengine.osgi.rest.ComponentBinder;
-import user.jobengine.osgi.rest.ServiceObjectMapper;
 
 public class NexioWSSocket extends WebSocketAdapter {
        private static final Logger logger = LogManager.getLogger();
@@ -30,7 +30,7 @@ public class NexioWSSocket extends WebSocketAdapter {
        }
 
        public NexioWSSocket() {
-               mapper = ServiceObjectMapper.createMapper();
+               mapper = ServiceObjectMapper.getMapper();
                logger.info("EventSocket created");
        }