git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 29 May 2020 14:05:34 +0000 (14:05 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 29 May 2020 14:05:34 +0000 (14:05 +0000)
17 files changed:
server/-configuration/mediacube-dev-hirtv.properties [moved from server/-configuration/mediacube-dev-bsh.properties with 57% similarity]
server/-configuration/mediacube-dev-user.properties
server/-configuration/run-mediacube-server-hirtv.launch
server/user.jobengine.executors/config/config-worker.xml
server/user.jobengine.executors/jobtemplates/common-copy.xml
server/user.jobengine.executors/jobtemplates/fork-validate-and-archive.xml [new file with mode: 0644]
server/user.jobengine.executors/jobtemplates/nexio-checker.xml
server/user.jobengine.executors/jobtemplates/validate-and-archive.xml [new file with mode: 0644]
server/user.jobengine.executors/src/hu/user/mediacube/steps/DownloadableArchive.java [deleted file]
server/user.jobengine.executors/src/hu/user/mediacube/steps/DownloadableListBuilderStep.java [deleted file]
server/user.jobengine.executors/src/user/jobengine/server/steps/DownloadableMedia.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/FileCopyStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/FrameNumberReaderStep.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOCheckerStep.java [moved from server/user.jobengine.executors/src/hu/user/mediacube/steps/NEXIOCheckerStep.java with 64% similarity]
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMWriterStep.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/ValidateAndArchiveForkStep.java [new file with mode: 0644]
server/user.jobengine.osgi.server/test/user/jobengine/server/IT/AMCTests.java

similarity index 57%
rename from server/-configuration/mediacube-dev-bsh.properties
rename to server/-configuration/mediacube-dev-hirtv.properties
index aa2884c07492486d58795a5171c70fa98c4133c2..82b95c41615930a9dcd73021862d3d6c87b5e6d6 100644 (file)
@@ -1,9 +1,13 @@
-#A user.dir mindig a test projekt mappaja, a relativ hivatkozasok ehhez kepest ertendok. \r
-#JobEngine\r
-jobengine.loglevel=INFO\r
-jobengine.jobsteps.root=../user.jobengine.osgi.server/resources/executors\r
-jobengine.jobtemplates.root=../user.jobengine.osgi.server/resources/templates\r
-jobengine.jobsteps.alternate.root=../user.jobengine.executors/bin/user/jobengine/server/steps\r
+jobengine.jobsteps.root=../user.jobengine.executors/bin\r
+jobengine.jobsteps.config=../user.jobengine.executors/config/config-worker.xml\r
+jobengine.jobtemplates.root=../user.jobengine.executors/jobtemplates\r
+jobengine.jobsteps.groovy.root=../user.jobengine.executors/src/user/jobengine/server/steps\r
+\r
+jetty.home=../-configuration/jetty\r
+jetty.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\r
+\r
+log4j.configurationFile=../-configuration/log4j2-test.xml\r
+\r
 jobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;\r
 jobengine.db.user=db2admin\r
 jobengine.db.password=password\r
@@ -16,8 +20,4 @@ jobengine.nosql.db.password=password
 jobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;\r
 jobengine.nexio.db.user=sa\r
 jobengine.nexio.db.password=resolve\r
-#System\r
-jetty.home=../user.jobengine.osgi.rest/\r
-jetty.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\r
-log4j.configuration=../-configuration/log4j.properties\r
-log4j.configurationFile=../-configuration/log4j2.xml
\ No newline at end of file
+nexio.host=10.10.1.55\r
index 6f427b536a668d280e9296227c1e8de400074024..bd090ceb6c8d17f9baa02477a8ba03189fb9c635 100644 (file)
@@ -1,4 +1,3 @@
-org.slf4j.simpleLogger.defaultLogLevel=debug\r
 jobengine.jobsteps.root=../user.jobengine.executors/bin\r
 jobengine.jobsteps.config=../user.jobengine.executors/config/config-worker.xml\r
 jobengine.jobtemplates.root=../user.jobengine.executors/jobtemplates\r
@@ -9,12 +8,13 @@ jetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-s
 \r
 log4j.configurationFile=../-configuration/log4j2-test.xml\r
 \r
-jobengine.db.url=jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true;\r
-jobengine.db.user=db2admin\r
-jobengine.db.password=password\r
-jobengine.nosql.db.url=jdbc:db2://10.228.198.1:50000/mccache:retrieveMessagesFromServerOnGetMessage=true;\r
-jobengine.nosql.db.user=db2admin\r
-jobengine.nosql.db.password=password\r
+jobengine.db.url=jdbc:db2://10.228.212.42:50000/mc:retrieveMessagesFromServerOnGetMessage=true;\r
+jobengine.db.user=blobtest\r
+jobengine.db.password=blobtest\r
+jobengine.nosql.db.url=jdbc:db2://10.228.212.42:50000/mc:retrieveMessagesFromServerOnGetMessage=true;\r
+jobengine.nosql.db.user=blobtest\r
+jobengine.nosql.db.password=blobtest\r
 \r
 #jobengine.master.server=http://localhost:8888\r
-javax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory
\ No newline at end of file
+javax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory\r
+nexio.host=10.10.1.55
\ No newline at end of file
index 18fa46004f9ba8982593424d78d4ad970e6a9fd6..7cf76446026eb909a0aee7eaf77268f3d19ccf30 100644 (file)
@@ -22,7 +22,7 @@
 <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;&#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.jobsteps.config=&quot;${workspace_loc}/user.jobengine.executors/config/config.xml&quot;&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;&#13;&#10;-Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc: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;-Djobengine.jobsteps.alternate.root=&quot;${workspace_loc}/user.jobengine.executors/bin/&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.10.1.27:50000/mc: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.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;-Dnexio.host=10.10.1.55&#13;&#10;-Djobengine.nexio.name=testnexioclips&#13;&#10;-Dnexio.useMOSGateway=true&#13;&#10;-Dnexio.disable=true&#13;&#10;-Djobengine.octopus.rundowns.name=rundowns&#13;&#10;-Djobengine.octopus.storyfolders.name=storyfolders&#13;&#10;-Djobengine.octopus.stories.name=stories&#13;&#10;-Dmediacube.auth.location=&quot;${workspace_loc}/-configuration/mediacube-auth.properties&quot;&#13;&#10;-Djobengine.mediacube.config=&quot;${workspace_loc}/-configuration/mediacube.json&quot;&#13;&#10;-Djobengine.mediacube.service.proxyroot=&quot;/opt&quot;&#13;&#10;-Djobengine.randomize.archives=false"/>\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.jackson2-provider@default:default,org.jboss.resteasy.jaxrs-api@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,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-api@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 d4dee36216c96cb6a34aaed01755784a1ce15e89..c3d9854d098e8fe8db4de2732a6e1af19fb635c5 100644 (file)
@@ -3,4 +3,5 @@
        <executor className="CancelableStep.java" maxConcurrent="1" isRemote="true" />\r
        <executor className="FakeStep.java" maxConcurrent="1" />\r
        <executor className="NEXIOCheckerStep.java" maxConcurrent="1" />\r
+       <executor className="ValidateAndArchiveForkStep.java" maxConcurrent="1" />\r
 </executors>
\ No newline at end of file
index 210b6462dab500aeada40b6b25df61e3560aa7ae..aa9cd0a5d75afb2e0c138693430d0c45d754dc50 100644 (file)
@@ -12,7 +12,7 @@
                </parameters>\r
        </declarations>\r
        <commands>\r
-               <calljobstep id="id1" type="user.jobengine.server.steps.FileCopyStep" weight="1">\r
+               <calljobstep type="FileCopyStep.java" weight="1">\r
                        <inputs>\r
                                <input>\r
                                        <parameter name="sourceProtocol" />\r
diff --git a/server/user.jobengine.executors/jobtemplates/fork-validate-and-archive.xml b/server/user.jobengine.executors/jobtemplates/fork-validate-and-archive.xml
new file mode 100644 (file)
index 0000000..d9ad1ed
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate>\r
+       <declarations>\r
+               <parameters>\r
+                       <parameter name="template" type="java.lang.String"/>\r
+                       <parameter name="sourcePath" type="java.lang.String"/>\r
+                       <parameter name="limit" type="java.lang.Integer" />\r
+               </parameters>\r
+       </declarations>\r
+       <commands>\r
+               <calljobstep type="ValidateAndArchiveForkStep.java" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="template" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="sourcePath" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="limit" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
index 332068aff7f19063192fdb64c30d5e6109af4741..a2d4d047c1c0561cddee5e121a9d02208259d617 100644 (file)
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate multiInstance="true" name="Fake">\r
+<!-- A NEXIO servert vegigolvasva, megkeresi azokat a fajlokat amik valtoztak, es a tarolo valamint a fajl nevebol kepez egy statusz fajlt.  -->\r
+<jobtemplate multiInstance="true">\r
 <declarations>\r
        <parameters>\r
                <parameter name="storeName" type="java.lang.String"/>\r
                <parameter name="outputPath" type="java.lang.String"/>\r
-               <parameter name="limit" type="int"/>\r
+               <parameter name="limit" type="java.lang.Integer"/>\r
        </parameters>\r
 </declarations>\r
 <commands>\r
                        <input>\r
                                <parameter name="storeName" />\r
                        </input>\r
+                       <input>\r
+                               <parameter name="outputPath" />\r
+                       </input>\r
+                       <input>\r
+                               <parameter name="limit" />\r
+                       </input>\r
                </inputs>\r
        </calljobstep>\r
 </commands>\r
diff --git a/server/user.jobengine.executors/jobtemplates/validate-and-archive.xml b/server/user.jobengine.executors/jobtemplates/validate-and-archive.xml
new file mode 100644 (file)
index 0000000..7344ef5
--- /dev/null
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Általános file másolás" multiInstance="true">\r
+       <declarations>\r
+               <parameters>\r
+                       <parameter name="sourceProtocol" type="java.lang.String"/>\r
+                       <parameter name="sourcePath" type="java.lang.String"/>\r
+                       <parameter name="sourceFileName" type="java.lang.String"/>\r
+                       <parameter name="targetProtocol" type="java.lang.String"/>\r
+                       <parameter name="targetPath" type="java.lang.String"/>\r
+                       <parameter name="targetFileName" type="java.lang.String"/>\r
+                       <parameter name="killDateDays" type="java.lang.Integer" />\r
+                       <parameter name="media" type="user.jobengine.db.Media"/>\r
+               </parameters>\r
+               <variables>\r
+                       <parameter name="frameNumber" type="java.lang.Long" />\r
+               </variables>\r
+       </declarations>\r
+       <commands>\r
+               <calljobstep type="FileCopyStep.java" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="sourceProtocol" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="sourcePath" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="sourceFileName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="targetProtocol" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="targetPath" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="targetFileName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="killDateDays" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+               <calljobstep type="FrameNumberReaderStep.java" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="targetPath" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="targetFileName" />\r
+                               </input>\r
+                       </inputs>\r
+                       <outputs>\r
+                               <output>\r
+                                       <variable name="frameNumber" /> \r
+                               </output>\r
+                       </outputs>\r
+               </calljobstep>\r
+               <calljobstep type="FrameNumberValidatorStep.java" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="targetPath" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="targetFileName" />\r
+                               </input>\r
+                       </inputs>\r
+                       <outputs>\r
+                               <output>\r
+                                       <variable name="frameNumber" /> \r
+                               </output>\r
+                       </outputs>\r
+               </calljobstep>\r
+               <calljobstep type="TSMBackupStep.java" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="archiveItem" />\r
+                               </input>\r
+                               <input>\r
+                                       <variable name="media" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="killDateDays" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+               \r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
diff --git a/server/user.jobengine.executors/src/hu/user/mediacube/steps/DownloadableArchive.java b/server/user.jobengine.executors/src/hu/user/mediacube/steps/DownloadableArchive.java
deleted file mode 100644 (file)
index d4a62b1..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-package hu.user.mediacube.steps;\r
-\r
-import com.ibm.nosql.json.api.BasicDBObject;\r
-\r
-public class DownloadableArchive extends BasicDBObject {\r
-\r
-}\r
diff --git a/server/user.jobengine.executors/src/hu/user/mediacube/steps/DownloadableListBuilderStep.java b/server/user.jobengine.executors/src/hu/user/mediacube/steps/DownloadableListBuilderStep.java
deleted file mode 100644 (file)
index a7d507f..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-package hu.user.mediacube.steps;\r
-\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.nio.file.DirectoryStream;\r
-import java.nio.file.Files;\r
-import java.nio.file.Path;\r
-import java.nio.file.Paths;\r
-\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-\r
-import com.ibm.nosql.json.api.BasicDBObject;\r
-\r
-import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.IJobRuntime;\r
-import user.jobengine.server.steps.JobStep;\r
-import user.jobengine.server.steps.StepEntry;\r
-\r
-public class DownloadableListBuilderStep extends JobStep {\r
-       private static final Logger logger = LogManager.getLogger();\r
-       //      private static final String UTF8 = "utf-8";\r
-       private static final String STATUSFOLDER = ".STATUS";\r
-       private static final String JSONEXT = ".json";\r
-       private static final String CATCHEDEXT = ".catched";\r
-\r
-       public static final String ITEM_TITLE = "itemTitle";\r
-       public static final String ITEM_HOUSEID = "itemHouseId";\r
-       public static final String ITEM_DESCRIPTION = "itemDescription";\r
-       public static final String MEDIA_HOUSEID = "mediaHouseId";\r
-       public static final String MEDIA_TITLE = "mediaTitle";\r
-       public static final String MEDIA_DESCRIPTION = "mediaDescription";\r
-       public static final String MEDIA_TYPE = "mediaType";\r
-       private static final String DURATION = "duration";\r
-       private static final String EXISTING_MEDIAID = "existingMediaId";\r
-\r
-       @StepEntry\r
-       public Object[] execute(String sourcePath, int limit, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
-               DirectoryStream<Path> directoryStream = null;\r
-               try {\r
-                       directoryStream = Files.newDirectoryStream(Paths.get(sourcePath));\r
-                       for (Path p : directoryStream) {\r
-                               processPathItem(p);\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.error(getSessionMarker(), e.getMessage());\r
-               } finally {\r
-                       if (directoryStream != null) {\r
-                               try {\r
-                                       directoryStream.close();\r
-                               } catch (IOException e) {\r
-                               }\r
-                       }\r
-               }\r
-\r
-               return null;\r
-       }\r
-\r
-       private String getMetadata(BasicDBObject dbObject, String fieldName) {\r
-               String result = null;\r
-               if (dbObject.containsKey(fieldName))\r
-                       result = dbObject.getString(fieldName);\r
-               return result;\r
-       }\r
-\r
-       private boolean processPathItem(Path mediaFilePath) {\r
-               File mediaFile = mediaFilePath.toFile();\r
-\r
-               //              if (mediaFile.length() > 0)\r
-               //                      return false;\r
-\r
-               if (mediaFile.isDirectory()) {\r
-                       return false;\r
-               }\r
-\r
-               Path dotStorePath = Paths.get(mediaFilePath.getParent().toString(), STATUSFOLDER);\r
-               Path catchedFilePath = Paths.get(dotStorePath.toString(), mediaFile.getName() + CATCHEDEXT);\r
-               File catchedFile = catchedFilePath.toFile();\r
-               return true;\r
-       }\r
-}\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/DownloadableMedia.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/DownloadableMedia.java
new file mode 100644 (file)
index 0000000..a42dec1
--- /dev/null
@@ -0,0 +1,7 @@
+package user.jobengine.server.steps;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+public class DownloadableMedia extends BasicDBObject {\r
+\r
+}\r
index 76edb1ce17cb0eb7e3bcfae8e16f87f79be93a4d..4d5633a6666ee285a9868a669d0f405f17d043f8 100644 (file)
@@ -75,9 +75,8 @@ public class FileCopyStep extends JobStep {
                        });\r
 \r
                        source.transferFrom(target, sourceFileName, targetFileName);\r
-                       if (killDateDays > 0) {\r
+                       if (killDateDays > -1)\r
                                EscortFiles.createUNCKillDate(targetPath, targetFileName, killDateDays, marker);\r
-                       }\r
 \r
                } catch (Exception e) {\r
                        logger.catching(e);\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/FrameNumberReaderStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/FrameNumberReaderStep.java
new file mode 100644 (file)
index 0000000..031a80b
--- /dev/null
@@ -0,0 +1,36 @@
+package user.jobengine.server.steps;\r
+\r
+import java.io.FileNotFoundException;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.util.Arrays;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.mediatool.MediaInfo;\r
+import user.jobengine.server.steps.JobStep;\r
+import user.jobengine.server.steps.StepEntry;\r
+\r
+public class FrameNumberReaderStep extends JobStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
+       @StepEntry\r
+       public Object[] execute(String sourcePath, String fileName) throws Exception {\r
+               Object result[] = null;\r
+               Path filePath = Paths.get(sourcePath, fileName);\r
+               MediaInfo mi = new MediaInfo(filePath);\r
+               try {\r
+                       if (!filePath.toFile().exists())\r
+                               throw new FileNotFoundException("File not exists: " + filePath.toString());\r
+                       mi.process();\r
+                       long frames = mi.getFrames();\r
+                       result = Arrays.asList(frames).toArray();\r
+               } catch (Exception e) {\r
+                       logger.error(e.getMessage());\r
+                       throw e;\r
+               }\r
+               return result;\r
+       }\r
+\r
+}\r
similarity index 64%
rename from server/user.jobengine.executors/src/hu/user/mediacube/steps/NEXIOCheckerStep.java
rename to server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOCheckerStep.java
index ec8177d1b2b626b35d5417e3500708abffe8ccc9..c7ac4c94d811a18bc58486afd76fdc2a9a5cfa97 100644 (file)
@@ -1,4 +1,4 @@
-package hu.user.mediacube.steps;\r
+package user.jobengine.server.steps;\r
 \r
 import java.io.IOException;\r
 import java.sql.Timestamp;\r
@@ -16,21 +16,17 @@ import user.commons.nexio.server.protocol.ProtocolException;
 import user.commons.remotestore.RemoteStoreProtocol;\r
 import user.jobengine.db.Media;\r
 import user.jobengine.db.Store;\r
-import user.jobengine.server.steps.EscortFiles;\r
-import user.jobengine.server.steps.JobStep;\r
-import user.jobengine.server.steps.StepEntry;\r
 \r
 public class NEXIOCheckerStep extends JobStep {\r
        private static final String DOT_MXF = ".MXF";\r
        private static final Logger logger = LogManager.getLogger();\r
 \r
-       private DownloadableArchive createArchive(String title, Timestamp modified, Timestamp created, int duration) {\r
-               DownloadableArchive archive = new DownloadableArchive();\r
+       private DownloadableMedia createArchive(String title, Timestamp modified, Timestamp created, int duration) {\r
+               DownloadableMedia archive = new DownloadableMedia();\r
                archive.append("title", title);\r
                archive.append("fileName", title + DOT_MXF);\r
                archive.append("modified", modified);\r
                archive.append("created", created);\r
-               archive.append("duration", duration);\r
                return archive;\r
        }\r
 \r
@@ -48,13 +44,13 @@ public class NEXIOCheckerStep extends JobStep {
 \r
                try {\r
                        if (storeUri.getPortNumber() == 0)\r
-                               controller = new Controller(storeUri.getRootPath(), storeUri.getPortNumber());\r
+                               controller = new Controller(storeUri.getUri(), storeUri.getPortNumber());\r
                        else\r
-                               controller = new Controller(storeUri.getRootPath());\r
+                               controller = new Controller(storeUri.getUri());\r
                        controller.connect();\r
                        Mediabase mediabase = controller.getMediabase();\r
                        Iterator<Clip> clips = mediabase.getClips();\r
-                       processClips(outputPath, limit, clips);\r
+                       processClips(storeName, outputPath, limit, clips);\r
                } catch (Exception e) {\r
                        logger.error(getSessionMarker(), e.getMessage());\r
                        throw e;\r
@@ -66,13 +62,15 @@ public class NEXIOCheckerStep extends JobStep {
                return null;\r
        }\r
 \r
-       private void processClips(String outputPath, int limit, Iterator<Clip> clips) throws ClipNotFoundException, IOException, ProtocolException {\r
+       private void processClips(String storeName, String outputPath, int limit, Iterator<Clip> clips)\r
+                       throws ClipNotFoundException, IOException, ProtocolException {\r
                int count = limit;\r
                while (clips.hasNext()) {\r
 \r
-                       //megszakithatosag\r
-                       if (getJobRuntime().isWaitingCancel())\r
+                       if (getJobRuntime().isWaitingCancel()) {\r
+                               cancel();\r
                                break;\r
+                       }\r
 \r
                        Clip clip = clips.next();\r
                        String title = clip.getXid().get();\r
@@ -80,12 +78,20 @@ public class NEXIOCheckerStep extends JobStep {
                        Timestamp created = Timestamp.from(clip.getRecordDateTimestamp().toInstant());\r
                        int duration = clip.getDuration();\r
 \r
+                       //TODO a rogzites alatt allo klippeket kiszurni\r
+\r
                        Media media = getManager().getMedia(title);\r
-                       boolean create = media == null || media.getLength() != duration || !media.getModified().equals(modified) || !media.getCreated().equals(created);\r
+\r
+                       boolean create = media == null;\r
+                       create |= create || !media.getModified().equals(modified);\r
+                       create |= create || !media.getCreated().equals(created);\r
+                       //a regi moziknal nincs hossz mentve\r
+                       create |= create || (media.getLength() > 0 && media.getLength() != duration);\r
+\r
                        if (create) {\r
-                               DownloadableArchive archive = createArchive(title, modified, created, duration);\r
+                               DownloadableMedia archive = createArchive(title, modified, created, duration);\r
                                //letezik : mar hozzadva\r
-                               if (tryAdd(outputPath, archive))\r
+                               if (tryAdd(storeName, outputPath, archive, media))\r
                                        count--;\r
                        }\r
 \r
@@ -98,9 +104,10 @@ public class NEXIOCheckerStep extends JobStep {
                }\r
        }\r
 \r
-       private boolean tryAdd(String outputPath, DownloadableArchive archive) throws IOException {\r
+       private boolean tryAdd(String storeName, String outputPath, DownloadableMedia archive, Media media) throws IOException {\r
                boolean result = false;\r
-               String fileName = archive.getString("fileName");\r
+               String fileName = storeName + "." + archive.getString("fileName");\r
+\r
                if (!EscortFiles.isMetadataExists(outputPath, fileName)) {\r
                        String metadata = archive.toPrettyString("");\r
                        EscortFiles.createMetadata(outputPath, fileName, metadata);\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMWriterStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMWriterStep.java
new file mode 100644 (file)
index 0000000..d933b2b
--- /dev/null
@@ -0,0 +1,205 @@
+package user.jobengine.server.steps;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.nio.file.Files;\r
+import java.nio.file.attribute.BasicFileAttributes;\r
+import java.sql.Timestamp;\r
+import java.util.Date;\r
+import java.util.List;\r
+\r
+import org.apache.commons.lang.RandomStringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+import org.apache.logging.log4j.message.Message;\r
+import org.apache.logging.log4j.message.ParameterizedMessage;\r
+\r
+import user.commons.RemoteFile;\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.IProgressEventListener;\r
+import user.commons.remotestore.IStatusEventListener;\r
+import user.commons.remotestore.ProgressEvent;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.commons.remotestore.StatusEvent;\r
+import user.jobengine.db.FileType;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.db.MediaFile;\r
+import user.jobengine.db.Store;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.JobEngineException;\r
+\r
+public class TSMWriterStep extends JobStep {\r
+       private static final String MXFEXT = ".MXF";\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private IItemManager manager;\r
+       private File sourceMediaFile;\r
+       private Store tsmStore;\r
+       private StoreUri targetUri;\r
+       private FileType fileType;\r
+       private Marker marker;\r
+\r
+       @StepEntry\r
+       public Object[] execute(ArchiveItem archiveItem, Media mediaCubeMedia, int killDateDays) throws Exception {\r
+               marker = getSessionMarker();\r
+\r
+               File sourceMediaFile = new File(archiveItem.getMediaFile());\r
+               String sourceFileName = sourceMediaFile.getName();\r
+               String details = String.format("%s (%d bytes)", sourceFileName, sourceMediaFile.length());\r
+               try {\r
+\r
+                       setAndCheck(archiveItem, mediaCubeMedia, getEngine());\r
+\r
+                       getJobRuntime().setDescription(details);\r
+\r
+                       //TODO mxf helyett az osszes kiterjesztest!!!!!\r
+                       //A dupla ellenorzes a napon beluli ismetlesek miatt kell\r
+                       long existingMediaId = archiveItem.getExistingMediaId();\r
+                       if (sourceMediaFile.length() == 0 && existingMediaId == 0) {\r
+                               existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, ""));\r
+                               if (existingMediaId == 0)\r
+                                       existingMediaId = -1;\r
+                       }\r
+\r
+                       if (existingMediaId == 0)\r
+                               existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, ""));\r
+\r
+                       boolean randomizeName = Boolean.parseBoolean(System.getProperty("jobengine.randomize.archives", "false"));\r
+\r
+                       String targetFileName;\r
+                       if (randomizeName) {\r
+                               // a-z, A-Z, 0-9. For example: WRMcpIk7, s57JwCVA\r
+                               //veletlenszeru neveket adunk!\r
+                               targetFileName = String.format("%s-%s", RandomStringUtils.randomAlphanumeric(8), sourceFileName);\r
+                       } else\r
+                               targetFileName = sourceFileName;\r
+\r
+                       if (existingMediaId == 0) {\r
+                               StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, sourceMediaFile.getParent().toString());\r
+\r
+                               final IJobRuntime runtime = getJobRuntime();\r
+                               sourceUri.addProgressListener(new IProgressEventListener() {\r
+                                       @Override\r
+                                       public void progressChanged(ProgressEvent evt) {\r
+                                               runtime.incrementProgress(evt.getProgress());\r
+                                       }\r
+                               });\r
+                               sourceUri.addStatusListener(new IStatusEventListener() {\r
+                                       @Override\r
+                                       public void statusChanged(StatusEvent evt) {\r
+                                               evt.setCancel(!canContinue());\r
+                                       }\r
+                               });\r
+\r
+                               RemoteFile remoteFile = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName);\r
+                       }\r
+\r
+                       if (existingMediaId > 0)\r
+                               logger.info(marker, "Az '{}' TSM mentése nem szükséges, mert már megtalálható az archívumban.", sourceFileName);\r
+\r
+                       //Fel kell szabadítani, hogy a kovetkezo archivalaskor is nekifusson\r
+                       if (existingMediaId == -1) {\r
+                               logger.info(marker, "Az '{}' mentése jelenleg nem lehetséges, mert a szükséges metaadat még nem található meg az archívumban.", sourceFileName);\r
+                               if (!archiveItem.removeCatchedFile())\r
+                                       logger.error(marker,\r
+                                                       "Az '{}' állomány .catched jelző állománya nem törölhető. Az újabb archiválási kísérlethez annak kézi eltávolítása szükséges!",\r
+                                                       sourceMediaFile.getName());\r
+                               mediaCubeMedia.remove();\r
+                       } else {\r
+                               saveMetadata(mediaCubeMedia, sourceMediaFile, targetFileName, existingMediaId);\r
+                               logger.info(marker, "Az '{}' archiválása sikeres.", sourceFileName);\r
+                               if (killDateDays != 0)\r
+                                       EscortFiles.createUNCKillDate(sourceMediaFile.getParent(), sourceFileName, killDateDays, marker);\r
+                       }\r
+\r
+               } catch (Exception e) {\r
+                       logger.catching(e);\r
+                       Message m = new ParameterizedMessage("Az '{}' állomány archiválása sikertelen. A rendszer hibaüzenete: {}", details, e.getMessage());\r
+                       logger.error(marker, m);\r
+                       if (!archiveItem.removeCatchedFile())\r
+                               logger.error(marker,\r
+                                               "Az '{}' állomány .catched jelző állománya nem törölhető. Az újabb archiválási kísérlethez annak kézi eltávolítása szükséges!",\r
+                                               sourceMediaFile.getName());\r
+                       throw new Exception(m.getFormattedMessage());\r
+               }\r
+               return null;\r
+       }\r
+\r
+       private void saveMetadata(Media mediaCubeMedia, File sourceFile, String targetFileName, long existingMediaId) {\r
+\r
+               if (existingMediaId == 0) {\r
+                       MediaFile mediaFile = manager.createMediaFile(targetFileName, fileType, tsmStore, mediaCubeMedia);\r
+                       mediaFile.setHouseId(sourceFile.getName());\r
+                       mediaFile.add();\r
+               } else {\r
+                       Media existingMedia = manager.getMedia(existingMediaId);\r
+                       List<MediaFile> mediaFiles = existingMedia.getMediaFiles();\r
+                       if (mediaFiles != null) {\r
+                               for (MediaFile mf : mediaFiles) {\r
+                                       mf.setPersister(manager);\r
+                                       mf.setId(0);\r
+                                       mf.setMedia(mediaCubeMedia);\r
+                                       mf.add();\r
+                               }\r
+                       }\r
+               }\r
+               mediaCubeMedia.setPersister(manager);\r
+\r
+               try {\r
+                       BasicFileAttributes attr = Files.readAttributes(sourceFile.toPath(), BasicFileAttributes.class);\r
+                       mediaCubeMedia.setArchived(new Timestamp(attr.creationTime().toMillis()));\r
+               } catch (IOException e) {\r
+                       logger.catching(e);\r
+                       mediaCubeMedia.setArchived(new Timestamp(new Date().getTime()));\r
+               }\r
+\r
+               mediaCubeMedia.modify();\r
+       }\r
+\r
+       private void setAndCheck(ArchiveItem archiveItem, Media mediaCubeMedia, IJobEngine jobEngine) throws JobEngineException, IOException {\r
+               if (jobEngine == null) {\r
+                       logger.error(marker, "Az folyamatkezelő réteg nem elérhető.");\r
+                       throw new NullPointerException("Internal error, missing JobEngine reference.");\r
+               }\r
+               manager = jobEngine.getItemManager();\r
+               if (manager == null) {\r
+                       logger.error(marker, "Az adatbáziskezelő réteg nem elérhető.");\r
+                       throw new NullPointerException("Internal error, missing ItemManager reference.");\r
+               }\r
+               if (archiveItem == null) {\r
+                       logger.error(marker, "A folyamat 'archiveItem' bemeneti paramétere üres.");\r
+                       throw new NullPointerException("System is not configured properly, missing 'archiveItem' input parameter.");\r
+               }\r
+               sourceMediaFile = new File(archiveItem.getMediaFile());\r
+               if (sourceMediaFile == null) {\r
+                       logger.error(marker, "A folyamat 'archiveItem' bemeneti paraméter 'mediaFile' értéke üres.");\r
+                       throw new NullPointerException("System is not configured properly, missing 'mediaFile' value in 'archiveItem' input parameter.");\r
+               }\r
+               if (!sourceMediaFile.exists()) {\r
+                       logger.error(marker, "Az {} állomány nem létezik vagy nem érhető el.", sourceMediaFile.getName());\r
+                       throw new IOException(String.format("Input file {} not exists or unreachable.", sourceMediaFile.getName()));\r
+               }\r
+               tsmStore = manager.getSystemStore(false);\r
+               if (tsmStore == null) {\r
+                       logger.error(marker, "A TSM rendszer beállítás nem elérhető.");\r
+                       throw new NullPointerException("System is not configured properly, missing TSM Store.");\r
+               }\r
+               targetUri = tsmStore.getSourceStoreUri(RemoteStoreProtocol.TSM);\r
+               if (targetUri == null) {\r
+                       logger.error(marker, "A TSM rendszer beállítás paraméterei nem elérhetőek.");\r
+                       throw new NullPointerException("System is not configured properly, missing TSM StoreUri.");\r
+               }\r
+               fileType = manager.getFileType("High-res");\r
+               if (fileType == null) {\r
+                       logger.error(marker, "Adatbázis bejegyzés hiba, a 'High-res' FileType nem található.");\r
+                       throw new NullPointerException("System is not configured properly, missing 'High-res' FileType.");\r
+               }\r
+               if (mediaCubeMedia == null) {\r
+                       logger.error(marker, "A folyamat 'mediaCubeMedia' bemeneti paramétere üres.");\r
+                       throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+               }\r
+\r
+       }\r
+}\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ValidateAndArchiveForkStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ValidateAndArchiveForkStep.java
new file mode 100644 (file)
index 0000000..cd55002
--- /dev/null
@@ -0,0 +1,104 @@
+package user.jobengine.server.steps;\r
+\r
+import java.io.IOException;\r
+import java.nio.file.DirectoryStream;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import com.ibm.nosql.json.util.JSON;\r
+\r
+import user.jobengine.db.ArchivedMedia;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class ValidateAndArchiveForkStep extends JobStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private static final String JOB_TEMPLATE = "validate-and-archive.xml";\r
+\r
+       @StepEntry\r
+       public Object[] execute(String template, String sourcePath, int limit) {\r
+               DirectoryStream<Path> directoryStream = null;\r
+               int count = limit;\r
+               try {\r
+                       if (getJobRuntime().forkPrepare()) {\r
+                               directoryStream = Files.newDirectoryStream(Paths.get(sourcePath));\r
+                               if (directoryStream != null) {\r
+                                       for (Path p : directoryStream) {\r
+\r
+                                               if (getJobRuntime().isWaitingCancel()) {\r
+                                                       cancel();\r
+                                                       break;\r
+                                               }\r
+\r
+                                               if (processPathItem(template, p))\r
+                                                       count--;\r
+\r
+                                               if (count == 0)\r
+                                                       break;\r
+                                       }\r
+                               }\r
+\r
+                               getJobRuntime().forkWaitComplete();\r
+                       }\r
+\r
+                       setProgress(100);\r
+               } catch (Exception e) {\r
+                       logger.error(getSessionMarker(), e.getMessage());\r
+               } finally {\r
+                       if (directoryStream != null) {\r
+                               try {\r
+                                       directoryStream.close();\r
+                               } catch (IOException e) {\r
+                               }\r
+                       }\r
+               }\r
+\r
+               return null;\r
+       }\r
+\r
+       private boolean processPathItem(String template, Path escortFile) throws IOException {\r
+               if (escortFile.toFile().isDirectory())\r
+                       return false;\r
+\r
+               String fileName = escortFile.getFileName().toString();\r
+               //minimum 3 karakter: STORENAME.FILENAME.MXF.JSON\r
+               long dotCount = fileName.chars().filter(ch -> ch == '.').count();\r
+               if (dotCount < 4)\r
+                       return false;\r
+\r
+               byte[] bytes = Files.readAllBytes(escortFile);\r
+               String content = new String(bytes);\r
+               if (content != null) {\r
+                       try {\r
+                               DownloadableMedia archive = (DownloadableMedia) JSON.parse(content);\r
+                               logger.info("Starting {}", template);\r
+                       } catch (Exception e) {\r
+                               logger.error(e.getMessage());\r
+                       }\r
+\r
+               }\r
+\r
+               return true;\r
+       }\r
+\r
+       public void submit(ArchivedMedia archivedMedia, String recipient, String houseId, String targetPathType, IJobEngine jobEngine, IJobRuntime jobRuntime)\r
+                       throws Exception {\r
+               //              try {\r
+               //                      ScheduledJob scheduledJob = jobEngine.getScheduledJob(CHILD_TEMPLATE);\r
+               //                      Map<String, Object> parameters = scheduledJob.getJobParameters();\r
+               //                      parameters.put(ARCHIVEDMEDIA, archivedMedia);\r
+               //                      parameters.put(HOUSEID, houseId);\r
+               //                      parameters.put(RECIPIENT, recipient);\r
+               //                      parameters.put(TARGET_PATH_TYPE, targetPathType);\r
+               //                      IJobRuntime child = jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, String.format("Visszatöltés %s részére", recipient), parameters);\r
+               //                      ((MediaCubeMarker) child.getMarker()).setTo(recipient);\r
+               //              } catch (Exception e) {\r
+               //                      logger.catching(e);\r
+               //                      logger.error(marker, "Hiba a kötegelt visszatöltésben. A rendszer üzenete: {}", e.getMessage());\r
+               //              }\r
+       }\r
+}\r
index 73d157a9cd444966ca0aa992e7bfcd5eb93cca6e..adc30eaacfdffeb127a730b71586c3faaff89517 100644 (file)
@@ -1,14 +1,18 @@
 package user.jobengine.server.IT;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 
 import java.io.FileInputStream;
 import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.CountDownLatch;
 
+import org.apache.commons.io.FileUtils;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -26,6 +30,7 @@ import user.jobengine.server.JobEngine;
 public class AMCTests {
        private static IItemManager manager;
        private static IJobEngine jobEngine;
+       private static final String output = "/opt/NEXIO";;
 
        @BeforeClass
        public static void initialize() throws Exception {
@@ -52,32 +57,57 @@ public class AMCTests {
        }
 
        @Test
-       public void testNexioCheckerStep() throws Exception {
-               Store nexioStore = manager.createStore("NEXIO", false, false);
-               nexioStore.add();
+       public void testForkValidateAndArchive() throws Exception {
+               Files.createDirectories(Paths.get(output));
+               DownloadableArchive media = new DownloadableArchive();
+       }
 
+       @Test
+       public void testNexioChecker() throws Exception {
                //Tesztelni a HirTV-n lehet
-               StoreUri storeUri = manager.createStoreUri(RemoteStoreProtocol.NEXIO, "10.10.1.55");
-               storeUri.setStoreId(nexioStore.getId());
-               storeUri.add();
-
+               String storeName = "NEXIO";
+               Store nexioStore = manager.getStore(storeName);
+               StoreUri storeUri = null;
+               if (nexioStore == null) {
+                       nexioStore = manager.createStore(storeName, false, false);
+                       nexioStore.add();
+
+                       storeUri = manager.createStoreUri(RemoteStoreProtocol.NEXIO, System.getProperty("nexio.host"));
+                       storeUri.setSource(true);
+                       storeUri.setTarget(true);
+                       storeUri.setStoreId(nexioStore.getId());
+                       storeUri.add();
+               } else {
+                       storeUri = nexioStore.getSourceStoreUri(RemoteStoreProtocol.NEXIO);
+                       storeUri.setPersister(manager);
+                       nexioStore.setPersister(manager);
+               }
                CountDownLatch finishLatch = new CountDownLatch(1);
 
+               Files.createDirectories(Paths.get(output));
+
                Map<String, Object> jobParams = new HashMap<>();
-               jobParams.put("storeName", "NEXIO");
-               jobParams.put("outputPath", "/opt");
+               jobParams.put("storeName", storeName);
+               jobParams.put("outputPath", output);
                jobParams.put("limit", 1);
 
+               jobEngine.addJobChangedEventListener(e -> {
+               });
+
                IJobRuntime jobRuntime = jobEngine.submit(null, e -> {
                        if (e.isRuntimeTerminated())
                                finishLatch.countDown();
-               }, "nexio-check.xml", "NEXIO check", jobParams);
+               }, "nexio-checker.xml", "NEXIO check", jobParams);
 
-               finishLatch.await();
+               if (jobRuntime != null)
+                       finishLatch.await();
 
                storeUri.remove();
                nexioStore.remove();
 
+               FileUtils.deleteDirectory(Paths.get(output).toFile());
+
+               assertNotNull(jobRuntime);
                assertEquals(JobStatus.FINISHED, jobRuntime.getStatus());
        }