git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 4 Dec 2017 15:15:21 +0000 (15:15 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 4 Dec 2017 15:15:21 +0000 (15:15 +0000)
27 files changed:
server/-configuration/run-mediacube-server-bsh.launch
server/-configuration/scheduledjobs.json
server/user.jobengine.executors/config/config.xml
server/user.jobengine.executors/config/scheduledjobs.json
server/user.jobengine.executors/jobtemplates/copyforarchive-nexio-materials.xml [new file with mode: 0644]
server/user.jobengine.executors/jobtemplates/delete-materials.xml
server/user.jobengine.executors/src/user/jobengine/server/steps/CleanupMountedLocationStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/DeleteNEXIOMaterialsStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTypeDetector.java [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/OutputPathAndNameSelectorStep.java
server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java
server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioAPI.java
server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioClipEventDispatcher.java
server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDataMiner.java
server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java
server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusAPI.java
server/user.jobengine.osgi.commons/src/user/commons/remotestore/FtpDirectoryLister.java
server/user.jobengine.osgi.commons/src/user/commons/remotestore/IDirectoryLister.java
server/user.jobengine.osgi.commons/src/user/commons/remotestore/LocalDirectoryLister.java
server/user.jobengine.osgi.commons/src/user/commons/remotestore/SambaDirectoryLister.java
server/user.jobengine.osgi.commons/src/user/commons/remotestore/TSMLister.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.server/src/user/jobengine/server/JobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/ast/JobTemplate.java
server/user.jobengine.osgi.services/src/user/jobengine/osgi/ws/nexio/NexioWSServlet.java

index f957593d008b3d20ebf4c01eb927d5eefa9fa181..d0240306aea67a41d5e3a0ce5a4bdd2cf38cc942 100644 (file)
@@ -19,7 +19,7 @@
 <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.equinox.http.jetty.http.port=8080&#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/config&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#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/user/jobengine/server/steps&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;-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_v4.zenium&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;-Dnexio.host=10.10.1.555"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory&#13;&#10;-Dorg.eclipse.equinox.http.jetty.http.port=8080&#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/config&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#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/user/jobengine/server/steps&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;-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_v4.zenium&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;-Dnexio.host=10.10.1.55"/>\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.auth0.java-jwt@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.google.guava@default:default,com.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,com.sun.el.javax.el@default:default,commons-logging@default:default,javassist@default:default,javax.annotation-api@default:default,javax.inject@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.servlet.jsp-api@default:default,javax.validation.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.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang3@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.jasper.glassfish@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.jdt.core.compiler.batch@default:default,org.eclipse.jetty.client@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.jsp@default:default,org.eclipse.jetty.osgi.boot.jsp@default:false,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.jvnet.mimepull@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,org.reflections@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
index f69349ae47a889137c8a40b043f9e497a0632ca0..a430fef5f4394b44f9b5ef66d762780cea715b85 100644 (file)
        {"name": "killDateDays", "value": 1, "type": "java.lang.Integer"}\r
       ]\r
        },\r
+       {\r
+      "active": false,\r
+         "name" : "NEXIO anyagok másolása az ISILON/ARCHIVE mappába",\r
+      "template": "copyforarchive-nexio-materials.xml",\r
+      "executeimmediate": true,\r
+      "cronexpression": "0 0 0/1 1/1 * ? *",\r
+      "parameters": [ \r
+       {"name": "nexioPort", "value": 2098, "type": "java.lang.Integer"},\r
+       {"name": "nexioUserName", "value": "administrator", "type": "java.lang.String"},\r
+       {"name": "nexioPassword", "value": "system", "type": "java.lang.String"},\r
+       {"name": "archiveFtp", "value": "ftp://10.10.1.100/ARCHIVE/TEST", "type": "java.lang.String"},\r
+       {"name": "archiveUserName", "value": "administrator", "type": "java.lang.String"},\r
+       {"name": "archivePassword", "value": "system", "type": "java.lang.String"},\r
+       {"name": "daysBeforeNow", "value": 1, "type": "java.lang.Integer"}\r
+      ]\r
+       },      \r
+       \r
        {\r
       "active": false,\r
          "name" : "TRAFFIC anyagok visszatöltése",\r
@@ -61,7 +78,7 @@
       "executeimmediate": true,\r
       "cronexpression": "0 0 0/1 1/1 * ? *",\r
       "parameters": [ \r
-       {"name": "sourcePath", "value": "o:\\_OLD", "type": "java.lang.String"}\r
+       {"name": "sourcePath", "value": "q:/TEST", "type": "java.lang.String"}\r
       ]\r
        },      \r
        {\r
index 98f7388c9b89e9d6c89c787e7c4c9a248f3523e3..cd6c2e219fbf96931d68353829156a314662d63e 100644 (file)
@@ -13,4 +13,5 @@
        <executor className="user.jobengine.server.steps.TSMBackupStep" maxConcurrent="4"/>\r
        <executor className="user.jobengine.server.steps.TSMRestoreStep" maxConcurrent="2"/>\r
        <executor className="user.jobengine.server.steps.OutputPathAndNameSelectorStep" maxConcurrent="1"/>\r
+       <executor className="user.jobengine.server.steps.CopyForArchiveNEXIOMaterialsStep" maxConcurrent="1"/>\r
 </executors>
\ No newline at end of file
index f7014c1859800f72994db3ec5fb29c91473d450b..9578686786bfb55052e71fa8aab6039c258efd84 100644 (file)
        },      \r
        {\r
       "active": false,\r
-         "name" : "Anyagok törlése",\r
+         "name" : "Lejárt ISISLON/ARCHIVE anyagok törlése",\r
       "template": "delete-materials.xml",\r
       "executeimmediate": true,\r
       "cronexpression": "0 0 0/1 1/1 * ? *",\r
       "parameters": [ \r
-       {"name": "sourcePath", "value": "\\\\10.10.1.100\\BRAAVOS\\ARCHIVE", "type": "java.lang.String"},\r
-       {"name": "userName", "value": "mediacube", "type": "java.lang.String"},\r
-       {"name": "password", "value": "Broadca5T", "type": "java.lang.String"}\r
+       {"name": "sourcePath", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"}\r
       ]\r
        },      \r
        {\r
diff --git a/server/user.jobengine.executors/jobtemplates/copyforarchive-nexio-materials.xml b/server/user.jobengine.executors/jobtemplates/copyforarchive-nexio-materials.xml
new file mode 100644 (file)
index 0000000..17c4eda
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="NEXIO anyagok törlése">\r
+       <declarations>\r
+               <parameters>\r
+<!--                   A host név 'nexio.host' rendszerparaméter -->\r
+                       <parameter name="nexioPort" type="java.lang.Integer"/>\r
+                       <parameter name="nexioUserName" type="java.lang.String"/>\r
+                       <parameter name="nexioPassword" type="java.lang.String"/>\r
+                       <parameter name="archiveFtp" type="java.lang.String"/>\r
+                       <parameter name="archiveUserName" type="java.lang.String"/>\r
+                       <parameter name="archivePassword" type="java.lang.String"/>\r
+                       <parameter name="daysBeforeNow" type="java.lang.Integer"/>\r
+               </parameters>\r
+       </declarations>\r
+       <commands>\r
+               <calljobstep id="id1" type="user.jobengine.server.steps.CopyForArchiveNEXIOMaterialsStep" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="nexioPort" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="nexioUserName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="nexioPassword" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="archiveFtp" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="archiveUserName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="archivePassword" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="daysBeforeNow" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
index 87a695ec90be5068483e7cd4f3672facce1089aa..9e8c02ffcd999b2bd50b129c85401301c2424abb 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate name="Anyagok törlése">\r
+<jobtemplate name="Anyagok törlése" multiInstance="true">\r
        <declarations>\r
                <parameters>\r
                        <parameter name="sourcePath" type="java.lang.String"/>\r
index aee7cff610880932b7b94647dff5f18fd6c23fab..88f20501a54923c634f151205509030357dce07f 100644 (file)
@@ -175,7 +175,10 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor<P
 \r
                setProgress(currentCount[0] * 100 / allCount[0]);\r
 \r
-               logger.debug("Checking {}", filePath);\r
+               if (STATUSFOLDER.equals(filePath.getParent().getFileName()))\r
+                       logger.info("Skipping {}", filePath);\r
+\r
+               logger.info("Checking {}", filePath);\r
                List<Path> killDateFiles = getKillDateFiles(filePath);\r
                if (killDateFiles.size() == 0)\r
                        return;\r
@@ -230,7 +233,7 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor<P
 \r
                boolean result = true;\r
                for (Path killDateFile : killDateFiles) {\r
-                       if (removeFile(killDateFile))\r
+                       if (!removeFile(killDateFile))\r
                                result = false;\r
                }\r
 \r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java
new file mode 100644 (file)
index 0000000..17c1a65
--- /dev/null
@@ -0,0 +1,173 @@
+package user.jobengine.server.steps;\r
+\r
+import java.io.IOException;\r
+import java.net.URI;\r
+import java.net.URISyntaxException;\r
+import java.util.Calendar;\r
+import java.util.List;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+import com.ibm.nosql.json.api.DB;\r
+import com.ibm.nosql.json.api.DBCollection;\r
+import com.ibm.nosql.json.api.DBObject;\r
+\r
+import user.commons.CalendarUtils;\r
+import user.commons.StoreUri;\r
+import user.commons.nosql.NoSQLUtils;\r
+import user.commons.octopus.IOctopusAPI;\r
+import user.commons.octopus.OctopusAPI;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.JobEngineException;\r
+import user.jobengine.server.steps.MetadataTypeDetector.MetadataType;\r
+\r
+public class CopyForArchiveNEXIOMaterialsStep extends JobStep {\r
+       private static final String MXFEXT = ".MXF";\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private static final String NEXIOCLIPS = "nexioclips";\r
+       private static final String KILLDATE = "killdate";\r
+       private static final String LONGNAMEID = "longnameid";\r
+       private static final String ID = "id";\r
+       private StoreUri sourceUri;\r
+       private StoreUri targetUri;\r
+       private OctopusAPI octopusAPI;\r
+       private IItemManager manager;\r
+       private DB db;\r
+\r
+       private int check(int value, String name) {\r
+               if (value == 0) {\r
+                       logger.error(getMarker(), "A folyamat '{}' bemeneti paramétere 0.", name);\r
+                       throw new NullPointerException(String.format("System is not configured properly, missing '%s' input parameter.", name));\r
+               }\r
+               return value;\r
+       }\r
+\r
+       private String check(String value, String name) {\r
+               if (value == null) {\r
+                       logger.error(getMarker(), "A folyamat '{}' bemeneti paramétere üres.", name);\r
+                       throw new NullPointerException(String.format("System is not configured properly, missing '%s' input parameter.", name));\r
+               }\r
+               return value;\r
+       }\r
+\r
+       private BasicDBObject createMetadata(BasicDBObject rundown, BasicDBObject story, BasicDBObject mosObject) {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       @StepEntry\r
+       public Object[] execute(int nexioPort, String nexioUserName, String nexioPassword, String archiveFtp, String archiveUserName, String archivePassword,\r
+                       int daysBeforeNow, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+               setAndCheck(nexioPort, nexioUserName, nexioPassword, archiveFtp, archiveUserName, archivePassword, jobEngine);\r
+               octopusAPI = new OctopusAPI();\r
+               Calendar scheduledDate = Calendar.getInstance();\r
+               scheduledDate.add(Calendar.DAY_OF_YEAR, -1 * daysBeforeNow);\r
+               List<DBObject> rundowns = octopusAPI.getRundowns(scheduledDate.getTime());\r
+               if (rundowns == null) {\r
+                       logger.warn(getMarker(), "Nem található adástükör a {} napra.", CalendarUtils.toDateString(scheduledDate));\r
+                       return null;\r
+               }\r
+               try {\r
+                       int index = 1;\r
+                       for (DBObject r : rundowns) {\r
+                               setProgress(index * 100 / rundowns.size());\r
+                               processRundow(r);\r
+                               index++;\r
+                       }\r
+               } catch (Exception e) {\r
+                       logger.catching(e);\r
+                       logger.error(getMarker(), e.getMessage());\r
+                       throw e;\r
+               }\r
+               return null;\r
+       }\r
+\r
+       private void processMosObject(BasicDBObject rundown, BasicDBObject story, BasicDBObject mosObject) throws Exception {\r
+               String mosID = mosObject.getString(IOctopusAPI.OBJ_ID);\r
+               if (MetadataTypeDetector.GuessMetadataType(mosID) != MetadataType.OCTOPUSPLACEHOLDER) {\r
+                       logger.warn("Skipping MOS object {}", mosID);\r
+                       return;\r
+               }\r
+\r
+               DBCollection clips = db.getCollection(NEXIOCLIPS);\r
+               DBObject clip = clips.findOne(new BasicDBObject(LONGNAMEID, mosID));\r
+               if (clip == null) {\r
+                       logger.info("File NOT exists {}", mosID);\r
+                       throw new Exception("Not exists");\r
+               } else {\r
+                       logger.info("File exists {}", mosID);\r
+               }\r
+\r
+               BasicDBObject metadata = createMetadata(rundown, story, mosObject);\r
+       }\r
+\r
+       private void processRundow(DBObject r) throws Exception {\r
+               BasicDBObject rundown = (BasicDBObject) r;\r
+               long rundownID = rundown.getLong(ID);\r
+               logger.info("Processing rundown {}", rundownID);\r
+               List<DBObject> stories = octopusAPI.getRundownStories(rundownID);\r
+               if (stories == null)\r
+                       return;\r
+               for (DBObject s : stories)\r
+                       processStory(rundown, s);\r
+       }\r
+\r
+       private void processStory(BasicDBObject rundown, DBObject s) throws Exception {\r
+               BasicDBObject story = (BasicDBObject) s;\r
+               String parentStoryID = story.getString(IOctopusAPI.PARENT_STORY_ID);\r
+               logger.info("Processing story {}", parentStoryID);\r
+               List<BasicDBObject> mosObjects = NoSQLUtils.asList(story, IOctopusAPI.MOS_OBJECTS);\r
+               if (mosObjects == null)\r
+                       return;\r
+               for (BasicDBObject mosObject : mosObjects)\r
+                       processMosObject(rundown, story, mosObject);\r
+\r
+       }\r
+\r
+       private void setAndCheck(int nexioPort, String nexioUserName, String nexioPassword, String archiveFtp, String archiveUserName, String archivePassword,\r
+                       IJobEngine jobEngine) throws JobEngineException, IOException, URISyntaxException {\r
+               db = NoSQLUtils.getNoSQLDB();\r
+               if (db == null) {\r
+                       logger.error(getMarker(), "Az NoSQL adatkezelő réteg nem elérhető.");\r
+                       throw new NullPointerException("Internal error, missing NoSQL DB reference.");\r
+               }\r
+\r
+               if (jobEngine == null) {\r
+                       logger.error(getMarker(), "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(getMarker(), "Az adatbáziskezelő réteg nem elérhető.");\r
+                       throw new NullPointerException("Internal error, missing ItemManager reference.");\r
+               }\r
+               String nexioHost = System.getProperty("nexio.host");\r
+               if (StringUtils.isBlank(nexioHost)) {\r
+                       logger.error(getMarker(), "A 'nexio.host' rendszer paraméter nem található.");\r
+                       throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing.");\r
+               }\r
+               check(nexioPort, "nexioPort");\r
+               check(nexioUserName, "nexioUserName");\r
+               check(nexioPassword, "nexioPassword");\r
+\r
+               sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost);\r
+               sourceUri.setPortNumber(nexioPort);\r
+               sourceUri.setUserName(nexioUserName);\r
+               sourceUri.setPassword(nexioPassword);\r
+\r
+               check(archiveFtp, "archiveFtp");\r
+               check(archiveUserName, "archiveUserName");\r
+               check(archivePassword, "archivePassword");\r
+\r
+               targetUri = manager.createStoreUri(new URI(archiveFtp));\r
+               targetUri.setUserName(archiveUserName);\r
+               targetUri.setPassword(archivePassword);\r
+       }\r
+\r
+}\r
index 515000b880d15d803ed79123a5c8d3fc0541700e..0f872bd5ec5b22caa8fe178c07e627e021db7aab 100644 (file)
@@ -49,7 +49,7 @@ public class DeleteNEXIOMaterialsStep extends JobStep {
                        throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing.");\r
                }\r
 \r
-               DB db = NoSQLUtils.getDB();\r
+               DB db = NoSQLUtils.getNoSQLDB();\r
 \r
                DBCollection collection = db.getCollection(NEXIOCLIPS);\r
                //https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTypeDetector.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTypeDetector.java
new file mode 100644 (file)
index 0000000..bfa97f5
--- /dev/null
@@ -0,0 +1,29 @@
+package user.jobengine.server.steps;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+\r
+public class MetadataTypeDetector {\r
+       public enum MetadataType {\r
+               TRAFFIC, OCTOPUSSTORY, OCTOPUSPLACEHOLDER, GENERIC\r
+       }\r
+\r
+       private static final String REGEXP_TRAFFIC = "^[MRP]{1}[0-9]{6}[A-Z]{1}$";\r
+       private static final String REGEXP_OCTOPUSSTORYID = "^[0-9]+$";\r
+       private static final String REGEXP_OCTOPUSPLACEHOLDERID = "^[0-9]+_[0-9]+$";\r
+       private static final String REGEXP_OCTOPUSPLACEHOLDERVERSIONEDID = "^[0-9]+_[0-9]+-[0-9]{3}$";\r
+\r
+       public static MetadataType GuessMetadataType(String id) {\r
+               if (StringUtils.isBlank(id))\r
+                       return MetadataType.GENERIC;\r
+               if (id.matches(REGEXP_TRAFFIC))\r
+                       return MetadataType.TRAFFIC;\r
+               if (id.matches(REGEXP_OCTOPUSSTORYID))\r
+                       return MetadataType.OCTOPUSSTORY;\r
+               if (id.matches(REGEXP_OCTOPUSPLACEHOLDERID))\r
+                       return MetadataType.OCTOPUSPLACEHOLDER;\r
+               if (id.matches(REGEXP_OCTOPUSPLACEHOLDERVERSIONEDID))\r
+                       return MetadataType.OCTOPUSPLACEHOLDER;\r
+               return MetadataType.GENERIC;\r
+       }\r
+\r
+}\r
index 323c7e748623f4cd4d5e295e20eae565fd166260..cb85b8d00956be257157790d7cfdb2a46cfce830 100644 (file)
@@ -15,17 +15,13 @@ import org.apache.logging.log4j.Logger;
 \r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.steps.MetadataTypeDetector.MetadataType;\r
 \r
 public class OutputPathAndNameSelectorStep extends JobStep {\r
-       private enum MetadataType {\r
-               TRAFFIC, OCTOPUS, GENERIC\r
-       }\r
 \r
        private static final String TARGETNAMEPATTERN = "-ARCH-%s";\r
 \r
        private static final Logger logger = LogManager.getLogger();\r
-       private static final String REGEXP_TRAFFIC = "^[MRP]{1}[0-9]{6}[A-Z]{1}$";\r
-       private static final String REGEXP_OCTOPUSID = "^[0-9]+$";\r
 \r
        private void check(String trafficOutputPath, String octopusOutputPath, String genericOutputPath, String houseId) {\r
                if (StringUtils.isBlank(trafficOutputPath)) {\r
@@ -63,13 +59,14 @@ public class OutputPathAndNameSelectorStep extends JobStep {
                check(trafficOutputPath, octopusOutputPath, genericOutputPath, houseId);\r
 \r
                String id = houseId.toUpperCase();\r
-               MetadataType mdType = GuessMetadataType(id);\r
+               MetadataType mdType = MetadataTypeDetector.GuessMetadataType(id);\r
                String targetPath = null;\r
                switch (mdType) {\r
                case GENERIC:\r
                        targetPath = Paths.get(genericOutputPath, id).toString();\r
                        break;\r
-               case OCTOPUS:\r
+               case OCTOPUSPLACEHOLDER:\r
+               case OCTOPUSSTORY:\r
                        targetPath = Paths.get(octopusOutputPath, id).toString();\r
                        break;\r
                case TRAFFIC:\r
@@ -86,12 +83,4 @@ public class OutputPathAndNameSelectorStep extends JobStep {
                return new Object[] { targetPath, targetNamePattern };\r
        }\r
 \r
-       private MetadataType GuessMetadataType(String id) {\r
-               if (id.matches(REGEXP_TRAFFIC))\r
-                       return MetadataType.TRAFFIC;\r
-               if (id.matches(REGEXP_OCTOPUSID))\r
-                       return MetadataType.OCTOPUS;\r
-               return MetadataType.GENERIC;\r
-       }\r
-\r
 }\r
index f5d9dbe0469943589cca14284c9a8e5780f3f53c..0771926ffd07fb63848649740af459a692635ccf 100644 (file)
@@ -153,6 +153,11 @@ public class StoreUri extends EntityBase implements Serializable {
                        throw new Exception("InputLister is null.");
        }
 
+       public boolean fileExists(String fileName) throws Exception {
+               ensureLister();
+               return lister.exists(fileName);
+       }
+
        public void fireProgressEvent(ProgressEvent evt) {
                Object[] listeners = progressListenerList.getListenerList();
                for (int i = 0; i < listeners.length; i += 2) {
index 01b9d94603650ffa801f587740390570924d876d..b8c95520be5afdcaa66c458a28146d3853c02e17 100644 (file)
@@ -24,7 +24,7 @@ public class NexioAPI implements INexioAPI {
                List<DBObject> result = null;\r
                DB db;\r
                try {\r
-                       db = NoSQLUtils.getDB();\r
+                       db = NoSQLUtils.getNoSQLDB();\r
                        DBCollection collection = db.getCollection(NexioDataMiner.CLIP_COLLECTION_NAME);\r
                        DBCursor find = collection.find().sort(new BasicDBObject(MODIFIEDTIMESTAMP, new BasicDBList(-1, "$date")));\r
                        if (find.hasNext())\r
index 851fdd76dd7d5e816d83dcd9b7a2b16258372a55..712fff3efa1205b66f3cb0d4fb154c6542f92550 100644 (file)
@@ -5,6 +5,8 @@ import java.util.HashMap;
 import java.util.Iterator;\r
 import java.util.List;\r
 import java.util.Map;\r
+import java.util.concurrent.ExecutorService;\r
+import java.util.concurrent.Executors;\r
 \r
 import javax.swing.event.EventListenerList;\r
 \r
@@ -26,7 +28,6 @@ import user.commons.nexio.server.protocol.Connection;
 import user.commons.nexio.server.protocol.GetExtendedFieldCommand;\r
 import user.commons.nosql.NoSQLUtils;\r
 import user.commons.remotestore.IProgressEventListener;\r
-import user.commons.remotestore.ProgressEvent;\r
 \r
 /**\r
  * NexioWSServlet hozza letre. Indulaskor betolti a teljes nexio clip listat mongodb-be. Beregisztralja magat ClipEventListener-nek. Az erkezo esemenyekkel\r
@@ -52,6 +53,7 @@ public class NexioClipEventDispatcher implements ClipEventListener {
        public static final String CLIP_COLLECTION_NAME = "nexioclips";\r
        static private final byte[] GET_SPECIAL_ID_ATTRIBUTES_REQ = { (byte) 0xC8, (byte) 0x84 };\r
        static private final char[] hexArray = "0123456789ABCDEF".toCharArray();\r
+       private static final ExecutorService executor = Executors.newFixedThreadPool(1);\r
 \r
        public static String bytesToBin(byte[] bytes) {\r
                StringBuilder result = new StringBuilder();\r
@@ -87,64 +89,14 @@ public class NexioClipEventDispatcher implements ClipEventListener {
        }\r
 \r
        private EventListenerList progressListenerList;\r
-       private ProgressEvent progressEvent = new ProgressEvent(this, 0);\r
        private INexioChangeListener nexioChangeListener;\r
        private DB db;\r
 \r
-       //BEGIN OF R\r
-\r
-       //R\r
-       private String NEXIO_HOST = System.getProperty("nexio.host"); //"10.228.43.18"; //echo: "10.10.1.55";   vmware: "10.228.43.18"\r
-\r
+       private String NEXIO_HOST = System.getProperty("nexio.host");\r
        private Controller controller = null;\r
 \r
-       //KONSTRUKTOR\r
-       //KONSTRUKTOR\r
        public NexioClipEventDispatcher() {\r
-               try {\r
-                       this.db = NoSQLUtils.getDB();\r
-\r
-                       //                      BasicDBObject jsClip = new BasicDBObject();\r
-                       //                      jsClip.put(ID, "%00001"); //Unique internal ID\r
-                       //                      jsClip.put(LONGNAMEID, "valami1"); //Extended ID (Filename)\r
-                       //                      jsClip.put(DURATION, 100);\r
-                       //                      jsClip.put(MODIFIEDTIMESTAMP, new Date());\r
-                       //                      jsClip.put(EXTAGENCY, "TEST1");\r
-                       //                      Map<String, BasicDBObject> emptyMap = new HashMap<String, BasicDBObject>();\r
-                       //                      this.saveClipIntoMongo(jsClip, emptyMap);\r
-\r
-                       //nexio init\r
-                       this.controller = new Controller(NEXIO_HOST);\r
-                       this.controller.connect();\r
-                       //this.controller.getMediabase().getMediaListener().addClipEventListener(this);\r
-                       logger.info("NEXIO server is connected.");\r
-\r
-                       this.progressListenerList = new EventListenerList();\r
-\r
-                       this.dropAllClipsFromMongo();\r
-                       this.ensureIndexes();\r
-\r
-                       //load clips into mongo\r
-\r
-                       Thread importThread = new Thread(new Runnable() {\r
-                               @Override\r
-                               public void run() {\r
-                                       try {\r
-                                               //1. kezdeti masolas\r
-                                               copyClipsIntoMongo();\r
-                                               //2. esemeny feliratkozas\r
-                                               NexioClipEventDispatcher.this.controller.getMediabase().startMediaListener();\r
-                                               NexioClipEventDispatcher.this.controller.getMediabase().getMediaListener().addClipEventListener(NexioClipEventDispatcher.this);\r
-                                       } catch (Exception e) {\r
-                                               logger.catching(e);\r
-                                       }\r
-                               }\r
-                       });\r
-                       importThread.start();\r
-\r
-               } catch (Exception exc) {\r
-                       logger.error("", exc);\r
-               }\r
+               this.db = NoSQLUtils.getNoSQLDB();\r
        }\r
 \r
        public void addProgressListener(IProgressEventListener listener) {\r
@@ -157,7 +109,7 @@ public class NexioClipEventDispatcher implements ClipEventListener {
                        //DELETE-nel csak az id van kitoltve a CLIP-en, ezert exception jon!!!\r
                        if (evt.getEventType() == ClipEventType.CLIP_ADDED) {\r
                                //                              if (isValidClip(evt.getClip())) {\r
-                               BasicDBObject jsClip = convertClipToJSON(evt.getClip());\r
+                               BasicDBObject jsClip = clipToJSON(evt.getClip());\r
 \r
                                String fileName = jsClip.getString(LONGNAMEID);\r
                                if (fileName != null && !"".equals(fileName)) {\r
@@ -182,25 +134,7 @@ public class NexioClipEventDispatcher implements ClipEventListener {
                }\r
        }\r
 \r
-       //END OF R\r
-       /*\r
-               private void extendJSONClip(BasicDBObject jsClip, Clip clip) throws Exception {\r
-                       jsClip.put(ID, clip.getId().get()); //Unique internal ID\r
-                       jsClip.put(LONGNAMEID, clip.getXid().get()); //Extended ID (Filename)\r
-                       jsClip.put(DURATION, clip.getDuration());\r
-                       jsClip.put(MODIFIEDTIMESTAMP, clip.getModifiedTimestamp().getTime());\r
-                       jsClip.put(VIDEO_FORMAT, clip.getVideoFormat());\r
-                       jsClip.put(VIDEO_BITRATE, clip.getVideoBitrate());\r
-                       jsClip.put(FILESIZE, clip.getFileSize());\r
-                       jsClip.put(EXTAGENCY, clip.getExtendedField(GetExtendedFieldCommand.FN_AGENCY));\r
-                       //jsClip.put(RECORDDATE, new DateTime(rs.getString(i++)).toDate());\r
-                       //jsClip.put(EXTAGENCY, rs.getString(i++));\r
-                       //jsClip.put(START, rs.getString(i++));\r
-                       //System.out.println(String.format("ID = '%s'\tXID = '%s'\tDuration = '%s'\tModified = '%s'\tVideoFormat = '%s'\tVideoBitrate = '%s'", id, xid, duration, modifiedTimestamp.getTime(), videoFormat, videoBitrate));\r
-               }\r
-       */\r
-\r
-       private BasicDBObject convertClipToJSON(Clip clip) throws Exception {\r
+       private BasicDBObject clipToJSON(Clip clip) throws Exception {\r
                BasicDBObject jsClip = new BasicDBObject();\r
                try {\r
                        String xid = clip.getId().get();\r
@@ -276,7 +210,7 @@ public class NexioClipEventDispatcher implements ClipEventListener {
                        Clip clip = null;\r
                        try {\r
                                clip = clips.next();\r
-                               BasicDBObject jsonClip = convertClipToJSON(clip);\r
+                               BasicDBObject jsonClip = clipToJSON(clip);\r
                                String fileName = jsonClip.getString(LONGNAMEID);\r
                                String agency = jsonClip.getString(EXTAGENCY);\r
                                int duration = jsonClip.getInt(DURATION);\r
@@ -293,6 +227,24 @@ public class NexioClipEventDispatcher implements ClipEventListener {
                logger.info("NEXIO metadata import completed.");\r
        }\r
 \r
+       //END OF R\r
+       /*\r
+               private void extendJSONClip(BasicDBObject jsClip, Clip clip) throws Exception {\r
+                       jsClip.put(ID, clip.getId().get()); //Unique internal ID\r
+                       jsClip.put(LONGNAMEID, clip.getXid().get()); //Extended ID (Filename)\r
+                       jsClip.put(DURATION, clip.getDuration());\r
+                       jsClip.put(MODIFIEDTIMESTAMP, clip.getModifiedTimestamp().getTime());\r
+                       jsClip.put(VIDEO_FORMAT, clip.getVideoFormat());\r
+                       jsClip.put(VIDEO_BITRATE, clip.getVideoBitrate());\r
+                       jsClip.put(FILESIZE, clip.getFileSize());\r
+                       jsClip.put(EXTAGENCY, clip.getExtendedField(GetExtendedFieldCommand.FN_AGENCY));\r
+                       //jsClip.put(RECORDDATE, new DateTime(rs.getString(i++)).toDate());\r
+                       //jsClip.put(EXTAGENCY, rs.getString(i++));\r
+                       //jsClip.put(START, rs.getString(i++));\r
+                       //System.out.println(String.format("ID = '%s'\tXID = '%s'\tDuration = '%s'\tModified = '%s'\tVideoFormat = '%s'\tVideoBitrate = '%s'", id, xid, duration, modifiedTimestamp.getTime(), videoFormat, videoBitrate));\r
+               }\r
+       */\r
+\r
        public void dropAllClipsFromMongo() {\r
                db.getCollection(CLIP_COLLECTION_NAME).drop();\r
        }\r
@@ -338,14 +290,14 @@ public class NexioClipEventDispatcher implements ClipEventListener {
                }\r
 \r
                /*\r
-\r
+               \r
                                int c = connection.read(buffer, 0, 2);\r
                                //2 bytes hosszan az idokozben hozzaadott id-k szamossaga\r
                                if (c < 2) {\r
                                        throw new ProtocolException("c, 2, 2");\r
                                }\r
                                //MSB, LSB\r
-\r
+               \r
                                return nofIds;\r
                        */\r
                return ret;\r
@@ -420,6 +372,14 @@ public class NexioClipEventDispatcher implements ClipEventListener {
                }\r
        }\r
 \r
+       public void setNexioChangeListener(INexioChangeListener nexioChangeListener) {\r
+               this.nexioChangeListener = nexioChangeListener;\r
+       }\r
+\r
+       public void shutdown() {\r
+               executor.shutdownNow();\r
+       }\r
+\r
        /*\r
        BasicDBObject clip = new BasicDBObject();\r
        clip.put(LONGNAMEID, rs.getString(i++));\r
@@ -436,8 +396,31 @@ public class NexioClipEventDispatcher implements ClipEventListener {
        }\r
        */\r
 \r
-       public void setNexioChangeListener(INexioChangeListener nexioChangeListener) {\r
-               this.nexioChangeListener = nexioChangeListener;\r
+       public void startup() {\r
+               this.controller = new Controller(NEXIO_HOST);\r
+               try {\r
+                       this.controller.connect();\r
+               } catch (Exception e) {\r
+                       logger.catching(e);\r
+                       return;\r
+               }\r
+               logger.info("NEXIO server is connected.");\r
+\r
+               this.progressListenerList = new EventListenerList();\r
+               this.dropAllClipsFromMongo();\r
+               this.ensureIndexes();\r
+\r
+               executor.submit(() -> {\r
+                       try {\r
+                               //1. kezdeti masolas\r
+                               copyClipsIntoMongo();\r
+                               //2. esemeny feliratkozas\r
+                               NexioClipEventDispatcher.this.controller.getMediabase().startMediaListener();\r
+                               NexioClipEventDispatcher.this.controller.getMediabase().getMediaListener().addClipEventListener(NexioClipEventDispatcher.this);\r
+                       } catch (Exception e) {\r
+                               logger.catching(e);\r
+                       }\r
+               });\r
        }\r
 \r
        private String toUTF8(String iso88592) throws UnsupportedEncodingException {\r
index 7df5813b10746c1265702079630ca5d9cf501ccb..b937f65fdf4733cf3d1c8a7a1aff2098f410366f 100644 (file)
@@ -58,7 +58,7 @@ public class NexioDataMiner implements Runnable, INexioChangeListener {
 \r
        public NexioDataMiner() {\r
                this.progressListenerList = new EventListenerList();\r
-               db = NoSQLUtils.getDB();\r
+               db = NoSQLUtils.getNoSQLDB();\r
                ensureIndexes();\r
        }\r
 \r
index 08eb93f840233564eb5b113dd52c1be3f6c011da..e81b8f635e53a3606bf7d0d5b3e6d20be2273c0f 100644 (file)
@@ -66,7 +66,7 @@ public class NoSQLUtils {
                return result;\r
        }\r
 \r
-       public static DB getDB() {\r
+       public static DB getNoSQLDB() {\r
                DB result = null;\r
                try {\r
                        result = NoSQLClient.getDB(NoSQLUtils.Url, NoSQLUtils.User, NoSQLUtils.Pass);\r
index fa6674af55062d36e73aab326b99fcf759af463e..595fd76218ea9a690f3db1762768e6cfa6ab4831 100644 (file)
@@ -24,7 +24,7 @@ public class OctopusAPI implements IOctopusAPI {
        private DB db;\r
 \r
        public OctopusAPI() throws SQLException {\r
-               db = NoSQLUtils.getDB();\r
+               db = NoSQLUtils.getNoSQLDB();\r
        }\r
 \r
        private void addReferences(List<DBObject> result) {\r
@@ -33,11 +33,11 @@ public class OctopusAPI implements IOctopusAPI {
                                continue;\r
                        BasicDBObject story = (BasicDBObject) storyObject;\r
                        if (story.containsKey(REF_RUNDOWN) && story.get(REF_RUNDOWN) != null) {\r
-                               List<DBObject> rundowns = getReferencedObjects(result, RUNDOWN_COLLECTION_NAME, REF_RUNDOWN);\r
+                               List<DBObject> rundowns = getReferencedObjects(result, RUNDOWN_COLLECTION, REF_RUNDOWN);\r
                                story.put(REF_RUNDOWN, rundowns);\r
                        }\r
                        if (story.containsKey(REF_STORYFOLDER) && story.get(REF_STORYFOLDER) != null) {\r
-                               List<DBObject> storyFolders = getReferencedObjects(result, STORY_FOLDER_COLLECTION_NAME, REF_STORYFOLDER);\r
+                               List<DBObject> storyFolders = getReferencedObjects(result, FOLDER_COLLECTION, REF_STORYFOLDER);\r
                                story.put(REF_STORYFOLDER, storyFolders);\r
                        }\r
                }\r
@@ -74,7 +74,7 @@ public class OctopusAPI implements IOctopusAPI {
        @Override\r
        public List<DBObject> getRundowns(Date scheduledDate) {\r
                List<DBObject> result = null;\r
-               DBCollection collection = db.getCollection(RUNDOWN_COLLECTION_NAME);\r
+               DBCollection collection = db.getCollection(RUNDOWN_COLLECTION);\r
                Calendar calStart = CalendarUtils.createZeroCalendar(scheduledDate);\r
                Calendar calStop = CalendarUtils.createZeroCalendar(scheduledDate);\r
                calStop.add(Calendar.DAY_OF_MONTH, 1);\r
@@ -97,22 +97,22 @@ public class OctopusAPI implements IOctopusAPI {
 \r
        @Override\r
        public List<DBObject> getRundownsByParentStoryID(String id) {\r
-               DBCollection storyCollection = db.getCollection(STORY_COLLECTION_NAME);\r
+               DBCollection storyCollection = db.getCollection(STORY_COLLECTION);\r
                DBCursor find = storyCollection.find(new BasicDBObject(PARENT_STORY_ID, id), new BasicDBObject(REF_RUNDOWN, 1));\r
                if (!find.hasNext())\r
                        return null;\r
-               return getReferencedObjects(find.toArray(), RUNDOWN_COLLECTION_NAME, REF_RUNDOWN);\r
+               return getReferencedObjects(find.toArray(), RUNDOWN_COLLECTION, REF_RUNDOWN);\r
        }\r
 \r
        @Override\r
        public List<DBObject> getRundownsByPlaceHolderID(String id) {\r
                //db.testStoryCollection.find({"mosObjects": {$elemMatch: {"globalId": "OCTOPUS-ECHOTV-2429902"}}})\r
-               DBCollection storyCollection = db.getCollection(STORY_COLLECTION_NAME);\r
+               DBCollection storyCollection = db.getCollection(STORY_COLLECTION);\r
                BasicDBObject criteria = new BasicDBObject(MOS_OBJECTS, new BasicDBObject($ELEMMATCH, new BasicDBObject(OBJ_ID, id)));\r
                DBCursor find = storyCollection.find(criteria, new BasicDBObject(REF_RUNDOWN, 1));\r
                if (!find.hasNext())\r
                        return null;\r
-               return getReferencedObjects(find.toArray(), RUNDOWN_COLLECTION_NAME, REF_RUNDOWN);\r
+               return getReferencedObjects(find.toArray(), RUNDOWN_COLLECTION, REF_RUNDOWN);\r
        }\r
 \r
        @Override\r
@@ -120,7 +120,7 @@ public class OctopusAPI implements IOctopusAPI {
                // db.stories.find({ rundown: { $elemMatch: { id: 92950867 } }})\r
                // { rundown: { $elemMatch: { id: 44622396 } }}\r
                List<DBObject> result = null;\r
-               DBCollection collection = db.getCollection(STORY_COLLECTION_NAME);\r
+               DBCollection collection = db.getCollection(STORY_COLLECTION);\r
                DBCursor find = collection\r
                                .find(new BasicDBObject(REF_RUNDOWN, new BasicDBObject($ELEMMATCH, new BasicDBObject(ID, id))), new BasicDBObject(ID, 1)\r
                                                .append(PARENT_STORY_ID, 1).append(NAME, 1).append(MODIFIED, 1).append(REF_RUNDOWN, 1).append(FORMAT, 1).append(MOS_OBJECTS, 1))\r
@@ -133,7 +133,7 @@ public class OctopusAPI implements IOctopusAPI {
        @Override\r
        public List<DBObject> getStories() {\r
                List<DBObject> result = null;\r
-               DBCollection collection = db.getCollection(STORY_COLLECTION_NAME);\r
+               DBCollection collection = db.getCollection(STORY_COLLECTION);\r
                DBCursor find = collection.find();\r
                if (find.hasNext())\r
                        result = find.toArray();\r
@@ -143,7 +143,7 @@ public class OctopusAPI implements IOctopusAPI {
        @Override\r
        public List<DBObject> getStoriesByID(String id) {\r
                List<DBObject> result = null;\r
-               DBCollection collection = db.getCollection(STORY_COLLECTION_NAME);\r
+               DBCollection collection = db.getCollection(STORY_COLLECTION);\r
                DBCursor find = collection.find(new BasicDBObject(ID, id));\r
                if (find.hasNext()) {\r
                        result = find.toArray();\r
@@ -157,7 +157,7 @@ public class OctopusAPI implements IOctopusAPI {
                //Pattern regex = Pattern.compile(id, Pattern.CASE_INSENSITIVE);\r
                //BasicDBObject query = new BasicDBObject("id", Pattern.compile(id));\r
                List<DBObject> result = null;\r
-               DBCollection collection = db.getCollection(STORY_COLLECTION_NAME);\r
+               DBCollection collection = db.getCollection(STORY_COLLECTION);\r
                DBCursor find = collection.find(new BasicDBObject(PARENT_STORY_ID, id));\r
                if (find.hasNext()) {\r
                        result = find.toArray();\r
@@ -169,7 +169,7 @@ public class OctopusAPI implements IOctopusAPI {
        @Override\r
        public List<DBObject> getStoriesByPlaceHolderID(String id) {\r
                List<DBObject> result = new ArrayList<>();\r
-               DBCollection storyCollection = db.getCollection(STORY_COLLECTION_NAME);\r
+               DBCollection storyCollection = db.getCollection(STORY_COLLECTION);\r
                BasicDBObject criteria = new BasicDBObject(MOS_OBJECTS, new BasicDBObject($ELEMMATCH, new BasicDBObject(OBJ_ID, id)));\r
                DBCursor find = storyCollection.find(criteria);\r
                if (find.hasNext()) {\r
@@ -182,7 +182,7 @@ public class OctopusAPI implements IOctopusAPI {
        @Override\r
        public List<DBObject> getStoryFolders() {\r
                List<DBObject> result = null;\r
-               DBCollection collection = db.getCollection(STORY_FOLDER_COLLECTION_NAME);\r
+               DBCollection collection = db.getCollection(FOLDER_COLLECTION);\r
                DBCursor find = collection.find();\r
                if (find.hasNext())\r
                        result = find.toArray();\r
@@ -191,27 +191,27 @@ public class OctopusAPI implements IOctopusAPI {
 \r
        @Override\r
        public List<DBObject> getStoryFoldersByParentStoryID(String id) {\r
-               DBCollection storyCollection = db.getCollection(STORY_COLLECTION_NAME);\r
-               DBCursor find = storyCollection.find(new BasicDBObject(ID, id), new BasicDBObject(REF_STORYFOLDER, 1));\r
+               DBCollection storyCollection = db.getCollection(STORY_COLLECTION);\r
+               DBCursor find = storyCollection.find(new BasicDBObject(PARENT_STORY_ID, id), new BasicDBObject(REF_STORYFOLDER, 1));\r
                if (!find.hasNext())\r
                        return null;\r
-               return getReferencedObjects(find.toArray(), STORY_FOLDER_COLLECTION_NAME, REF_STORYFOLDER);\r
+               return getReferencedObjects(find.toArray(), FOLDER_COLLECTION, REF_STORYFOLDER);\r
        }\r
 \r
        @Override\r
        public List<DBObject> getStoryFoldersByPlaceHolderID(String id) {\r
-               DBCollection storyCollection = db.getCollection(STORY_COLLECTION_NAME);\r
+               DBCollection storyCollection = db.getCollection(STORY_COLLECTION);\r
                BasicDBObject criteria = new BasicDBObject(MOS_OBJECTS, new BasicDBObject($ELEMMATCH, new BasicDBObject(OBJ_ID, id)));\r
                DBCursor find = storyCollection.find(criteria, new BasicDBObject(REF_STORYFOLDER, 1));\r
                if (!find.hasNext())\r
                        return null;\r
-               return getReferencedObjects(find.toArray(), STORY_FOLDER_COLLECTION_NAME, REF_STORYFOLDER);\r
+               return getReferencedObjects(find.toArray(), FOLDER_COLLECTION, REF_STORYFOLDER);\r
        }\r
 \r
        @Override\r
        public List<DBObject> getStoryFolderStories(long storyFolderId) {\r
                List<DBObject> result = null;\r
-               DBCollection collection = db.getCollection(STORY_COLLECTION_NAME);\r
+               DBCollection collection = db.getCollection(STORY_COLLECTION);\r
                DBCursor find = collection\r
                                .find(new BasicDBObject(REF_STORYFOLDER, new BasicDBObject($ELEMMATCH, new BasicDBObject(ID, storyFolderId))), new BasicDBObject(ID, 1)\r
                                                .append(PARENT_STORY_ID, 1).append(NAME, 1).append(MODIFIED, 1).append(REF_STORYFOLDER, 1).append(FORMAT, 1).append(MOS_OBJECTS, 1))\r
index 6b479bcbb37a285407c8750c469e70639f6ff422..1dafa89ed675f2f687971c53f72fb2716266dccb 100644 (file)
@@ -11,6 +11,7 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.commons.net.ftp.FTP;\r
 import org.apache.commons.net.ftp.FTPClient;\r
 import org.apache.commons.net.ftp.FTPFile;\r
+import org.apache.commons.net.ftp.FTPFileFilter;\r
 \r
 import user.commons.IRemoteFileListCallback;\r
 import user.commons.RemoteFile;\r
@@ -76,25 +77,26 @@ public class FtpDirectoryLister implements IDirectoryLister {
        }\r
 \r
        private void connect() throws Exception {\r
+               if (ftpClient != null)\r
+                       return;\r
                String path = storeUri.toString(true);\r
                String[] pathElements = path.split("/");\r
-               if (ftpClient == null) {\r
-                       ftpClient = new FTPClient();\r
-                       if (storeUri.getPortNumber() != null)\r
-                               ftpClient.connect(pathElements[0], storeUri.getPortNumber().intValue());\r
-                       else\r
-                               ftpClient.connect(pathElements[0]);\r
-                       String userName = storeUri.getUserName();\r
-                       userName = StringUtils.isEmpty(userName) ? "anonymous" : userName;\r
-                       ftpClient.login(userName, storeUri.getPassword());\r
-                       ftpClient.setFileType(FTP.BINARY_FILE_TYPE);\r
-                       ftpClient.enterLocalPassiveMode();\r
-                       if (pathElements.length > 1) {\r
-                               for (int i = 1; i < pathElements.length; i++) {\r
-                                       ftpClient.changeWorkingDirectory(pathElements[i]);\r
-                               }\r
+               ftpClient = new FTPClient();\r
+               if (storeUri.getPortNumber() != null)\r
+                       ftpClient.connect(pathElements[0], storeUri.getPortNumber().intValue());\r
+               else\r
+                       ftpClient.connect(pathElements[0]);\r
+               String userName = storeUri.getUserName();\r
+               userName = StringUtils.isEmpty(userName) ? "anonymous" : userName;\r
+               ftpClient.login(userName, storeUri.getPassword());\r
+               ftpClient.setFileType(FTP.BINARY_FILE_TYPE);\r
+               ftpClient.enterLocalPassiveMode();\r
+               if (pathElements.length > 1) {\r
+                       for (int i = 1; i < pathElements.length; i++) {\r
+                               ftpClient.changeWorkingDirectory(pathElements[i]);\r
                        }\r
                }\r
+\r
        }\r
 \r
        @Override\r
@@ -107,6 +109,27 @@ public class FtpDirectoryLister implements IDirectoryLister {
                }\r
        }\r
 \r
+       @Override\r
+       public boolean exists(String fileName) throws Exception {\r
+               connect();\r
+               if (ftpClient == null)\r
+                       return false;\r
+               //              FTPFile[] files = ftpClient.listFiles(ftpClient.printWorkingDirectory(), new FTPFileFilter() {\r
+               //                      @Override\r
+               //                      public boolean accept(FTPFile paramFTPFile) {\r
+               //                              return fileName.equals(paramFTPFile.getName());\r
+               //                      }\r
+               //              });\r
+               FTPFile[] files = ftpClient.listFiles(null, new FTPFileFilter() {\r
+                       @Override\r
+                       public boolean accept(FTPFile paramFTPFile) {\r
+                               return !paramFTPFile.isDirectory() && fileName.toLowerCase().equals(paramFTPFile.getName().toLowerCase());\r
+                       }\r
+               });\r
+\r
+               return files.length == 1;\r
+       }\r
+\r
        @Override\r
        public RemoteFile get(String fileName) throws Exception {\r
                RemoteFile result = null;\r
index d3df24073e368ec4a178588d92f6d0edd829b5ee..fb4a1421fb48c21e329980175686312620eeb16e 100644 (file)
@@ -15,6 +15,8 @@ public interface IDirectoryLister {
 \r
        void delete(RemoteFile remoteFile) throws Exception;\r
 \r
+       boolean exists(String fileName) throws Exception;\r
+\r
        RemoteFile get(String fileName) throws Exception;\r
 \r
        InputStream getInputStream(RemoteFile remoteFile) throws Exception;\r
index dd9f3b8399f6f8650d5a41e227fe20deb6028806..93d9a9e4d92df6cd5affb6da39747f0ee730a763 100644 (file)
@@ -5,6 +5,8 @@ import java.io.FileInputStream;
 import java.io.FileOutputStream;\r
 import java.io.InputStream;\r
 import java.io.OutputStream;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
 import java.sql.Timestamp;\r
 import java.util.ArrayList;\r
 import java.util.Arrays;\r
@@ -44,6 +46,12 @@ public class LocalDirectoryLister implements IDirectoryLister {
 \r
        }\r
 \r
+       @Override\r
+       public boolean exists(String fileName) throws Exception {\r
+               Path path = Paths.get(storeUri.toString(true), fileName);\r
+               return path.toFile().exists();\r
+       }\r
+\r
        @Override\r
        public RemoteFile get(String fileName) throws Exception {\r
                String path = storeUri.toString(true);\r
index 9be677918936e7fdeae0a2be00cfa5388058393e..73ca4045b76740f0696334f714794660544a78e1 100644 (file)
@@ -48,6 +48,12 @@ public class SambaDirectoryLister implements IDirectoryLister {
                }\r
        }\r
 \r
+       @Override\r
+       public boolean exists(String fileName) throws Exception {\r
+               // TODO Auto-generated method stub\r
+               return false;\r
+       }\r
+\r
        @Override\r
        public RemoteFile get(String fileName) throws Exception {\r
                RemoteFile result = null;\r
index aab159d4e32678ae0baff36601a64e7f754ed8d9..ad3331db069f919e932e9fa066f044221db295fc 100644 (file)
@@ -46,6 +46,12 @@ public class TSMLister implements IDirectoryLister {
 \r
        }\r
 \r
+       @Override\r
+       public boolean exists(String fileName) throws Exception {\r
+               // TODO Auto-generated method stub\r
+               return false;\r
+       }\r
+\r
        @Override\r
        public RemoteFile get(String fileName) throws Exception {\r
                RemoteFile result = null;\r
index 251a19f0def9707d40e99682ac41ed25c252a285..73081aa46dddbe24cf75b56def500c0c8696b2e9 100644 (file)
@@ -1,5 +1,6 @@
 package user.jobengine.db;\r
 \r
+import java.net.URI;\r
 import java.sql.Timestamp;\r
 import java.util.Date;\r
 import java.util.List;\r
@@ -18,12 +19,11 @@ import user.jobengine.db.ItemManagerData.StaticTables;
 import user.jobengine.db.ItemManagerData.UserRight;\r
 \r
 /***\r
- * Adatbázis kezelő API. Az implementáció OSGI szolgáltatásként érhető el ezen\r
- * az interfészen keresztül. Az API főbb szolgáltatásai: az adatmodell\r
- * objektumainak létrehozása, módosítása, törlése az adatbázisban.\r
- * \r
+ * Adatbázis kezelő API. Az implementáció OSGI szolgáltatásként érhető el ezen az interfészen keresztül. Az API főbb szolgáltatásai: az adatmodell objektumainak\r
+ * létrehozása, módosítása, törlése az adatbázisban.\r
+ *\r
  * @author comtrans\r
- * \r
+ *\r
  */\r
 public interface IItemManager extends IEntityPersister {\r
        /**\r
@@ -33,7 +33,7 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * A megfelelő bemeneti paramétrekekkel meghívja a connect() függvényt.\r
-        * \r
+        *\r
         * @param dbUrl\r
         *            Adatbázis elérési útvonala\r
         * @param dbUser\r
@@ -43,8 +43,9 @@ public interface IItemManager extends IEntityPersister {
         */\r
        void connect(String dbUrl, String dbUser, String dbPassword);\r
 \r
-       FileType createFileType(String name, String description, String videoCodec, String audioCodec, int videoTracks,\r
-                       int audioTracks, float frameRate);\r
+       FileType createFileType(String name, String description, String videoCodec, String audioCodec, int videoTracks, int audioTracks, float frameRate);\r
+\r
+       Item createItem(String name, String description, String houseId);\r
 \r
        Item createItem(String itemTypeName, String name, String description, String houseId);\r
 \r
@@ -58,8 +59,8 @@ public interface IItemManager extends IEntityPersister {
 \r
        Metadata createMetadata(MetadataElement mde, ListType listType, GuiType guiType, MdType... flags);\r
 \r
-       Metadata createMetadata(MetadataElement mde, ListType listType, GuiType guiType, String sqlField,\r
-                       StaticTables staticTable, String pojoField, MdType... flags);\r
+       Metadata createMetadata(MetadataElement mde, ListType listType, GuiType guiType, String sqlField, StaticTables staticTable, String pojoField,\r
+                       MdType... flags);\r
 \r
        Metadata createMetadata(MetadataElement mde, MdType... flags);\r
 \r
@@ -81,17 +82,21 @@ public interface IItemManager extends IEntityPersister {
 \r
        StoreUri createStoreUri(RemoteStoreProtocol protocol, String uri);\r
 \r
-       StoreUri createStoreUri(RemoteStoreProtocol protocol, String uri, int portNumber, boolean isStream,\r
-                       boolean isSource, boolean isTarget, String userName, String password, String rootPath);\r
+       StoreUri createStoreUri(RemoteStoreProtocol protocol, String uri, int portNumber, boolean isStream, boolean isSource, boolean isTarget, String userName,\r
+                       String password, String rootPath);\r
+\r
+       StoreUri createStoreUri(URI uri);\r
 \r
        UserInfo createUser(String fullName, String userName, String password, UserRight[] rights);\r
 \r
+       WorkflowAction createWorkflowAction(Timestamp touched, Timestamp started, Timestamp finished, boolean successful, String houseId, String description,\r
+                       String source, String destination, String tag, long size);\r
+\r
        void disconnect();\r
 \r
        /**\r
-        * A type paraméterből lekéri az entitás DAO objektumát, amin keresztül\r
-        * visszakapjuk az összes entitást.\r
-        * \r
+        * A type paraméterből lekéri az entitás DAO objektumát, amin keresztül visszakapjuk az összes entitást.\r
+        *\r
         * @param type\r
         * @return\r
         */\r
@@ -99,7 +104,7 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * Entitás típus és azonosító alapján visszaad egy listát.\r
-        * \r
+        *\r
         * @param type\r
         * @param id\r
         * @return\r
@@ -108,7 +113,7 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * Visszaadja egy átmeneti tárolóban tárolt entitás listáját.\r
-        * \r
+        *\r
         * @param baseClass\r
         * @return\r
         */\r
@@ -116,7 +121,7 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * Visszaadja az entitásnak megfelelő DAO objektumot.\r
-        * \r
+        *\r
         * @param classInfo\r
         * @return\r
         */\r
@@ -125,9 +130,15 @@ public interface IItemManager extends IEntityPersister {
        Break getBreak(long id);\r
 \r
        /**\r
-        * Elkéri a FileTypeDAO-tól a bemeneti paraméterként kapott névvel\r
-        * rendelekző FileType-ot.\r
-        * \r
+        * Elkéri az összes dinamikus anyag típust.\r
+        *\r
+        * @return\r
+        */\r
+       List<ItemType> getDynamicItemTypes();\r
+\r
+       /**\r
+        * Elkéri a FileTypeDAO-tól a bemeneti paraméterként kapott névvel rendelekző FileType-ot.\r
+        *\r
         * @param name\r
         * @return\r
         */\r
@@ -135,7 +146,7 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * Visszaad egy szűrési feltételeknek megfelelő Domain listát.\r
-        * \r
+        *\r
         * @param domainCategoryId\r
         * @param filter\r
         * @return\r
@@ -144,7 +155,7 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * Visszaad egy szűrési feltételeknek megfelelő QueryObject listát.\r
-        * \r
+        *\r
         * @param filter\r
         * @param isChunked\r
         * @return\r
@@ -153,7 +164,7 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * Visszaad egy szűrési feltételeknek megfelelő Vágólista listát.\r
-        * \r
+        *\r
         * @param name\r
         * @param isChunked\r
         * @return\r
@@ -161,47 +172,27 @@ public interface IItemManager extends IEntityPersister {
        List<IEntityBase> getFilteredScene(String name, boolean isChunked);\r
 \r
        /**\r
-        * A bemenő paraméterként kapott azonosító alaján lekéri a megfelelő Mappa\r
-        * objektumokat.\r
-        * \r
+        * A bemenő paraméterként kapott azonosító alaján lekéri a megfelelő Mappa objektumokat.\r
+        *\r
         * @param id\r
         * @return\r
         */\r
        List<IEntityBase> getFolders(long id);\r
 \r
-       /**\r
-        * A bemenő paraméterként kapott azonosító alaján lekéri a megfelelő Szkript\r
-        * objektumokat.\r
-        * \r
-        * @param id\r
-        * @return\r
-        */\r
-       List<IEntityBase> getShots(long id);\r
+       Item getItemByHouseID(String houseID);\r
+\r
+       ItemType getItemType(String itemTypeName);\r
 \r
        /**\r
         * Elkéri az összes anyag típust.\r
-        * \r
+        *\r
         * @return\r
         */\r
        List<ItemType> getItemTypes();\r
 \r
-       /**\r
-        * Elkéri az összes dinamikus anyag típust.\r
-        * \r
-        * @return\r
-        */\r
-       List<ItemType> getDynamicItemTypes();\r
-\r
-       /**\r
-        * Elkéri az fix anyag típust.\r
-        * \r
-        * @return\r
-        */\r
-       ItemType getStaticItemType();\r
-\r
        /**\r
         * Azonosító alapján elkér egy Verzió objektumot.\r
-        * \r
+        *\r
         * @param id\r
         * @return\r
         */\r
@@ -209,7 +200,7 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * Azonosító alapján elkér egy Metaadat elem objektumot.\r
-        * \r
+        *\r
         * @param id\r
         * @return\r
         */\r
@@ -217,22 +208,24 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * Visszaadja az adatbázisban tárolt összes Metaadat elem listáját.\r
-        * \r
+        *\r
         * @return\r
         */\r
        List<MetadataElement> getMetadataElements();\r
 \r
        /**\r
         * Azonosító alapján elkér egy Metadatat típus objektumot.\r
-        * \r
+        *\r
         * @param id\r
         * @return\r
         */\r
        MetadataType getMetadataType(long id);\r
 \r
+       List<Job> getRunningJobs(String template);\r
+\r
        /**\r
         * Azonosító alapján elkér egy Vágólista objektumot.\r
-        * \r
+        *\r
         * @param id\r
         * @return\r
         */\r
@@ -240,7 +233,7 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * Név és időpont alapján elkéri a megfelelő Vágólista objektumokat.\r
-        * \r
+        *\r
         * @param name\r
         * @param created\r
         * @return\r
@@ -249,15 +242,30 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * Azonosító alapján elkér egy Szkript objektumot.\r
-        * \r
+        *\r
         * @param id\r
         * @return\r
         */\r
        Shot getShot(long id);\r
 \r
+       /**\r
+        * A bemenő paraméterként kapott azonosító alaján lekéri a megfelelő Szkript objektumokat.\r
+        *\r
+        * @param id\r
+        * @return\r
+        */\r
+       List<IEntityBase> getShots(long id);\r
+\r
+       /**\r
+        * Elkéri az fix anyag típust.\r
+        *\r
+        * @return\r
+        */\r
+       ItemType getStaticItemType();\r
+\r
        /**\r
         * Azonosító alapján elkér egy Tároló objektumot.\r
-        * \r
+        *\r
         * @param id\r
         * @return\r
         */\r
@@ -265,26 +273,23 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * Név alapján elkér egy Szkript objektumot.\r
-        * \r
+        *\r
         * @param name\r
         * @return\r
         */\r
        Store getStore(String name);\r
 \r
        /**\r
-        * Elkér a StoreDAO-tól, egy olyan Rendszer tárolót, amely a lowres\r
-        * paraméterben kapott érték alapján vagy kisfelbontású videók tárolója,\r
-        * vagy nem.\r
-        * \r
+        * Elkér a StoreDAO-tól, egy olyan Rendszer tárolót, amely a lowres paraméterben kapott érték alapján vagy kisfelbontású videók tárolója, vagy nem.\r
+        *\r
         * @param lowres\r
         * @return\r
         */\r
        Store getSystemStore(boolean lowres);\r
 \r
        /**\r
-        * Ha a bemeneti paraméter alapján létezik ilyen felhasználó, akkor true-val\r
-        * tér vissza.\r
-        * \r
+        * Ha a bemeneti paraméter alapján létezik ilyen felhasználó, akkor true-val tér vissza.\r
+        *\r
         * @param userName\r
         * @param password\r
         * @return\r
@@ -292,37 +297,39 @@ public interface IItemManager extends IEntityPersister {
        boolean getUser(String userName, String password);\r
 \r
        /**\r
-        * A bemeneti paraméterként megadott felhasználónév/jelszó páros alapján\r
-        * visszaad egy UserInfo objektumot.\r
-        * \r
+        * A bemeneti paraméterként megadott felhasználónév/jelszó páros alapján visszaad egy UserInfo objektumot.\r
+        *\r
         * @param userName\r
         * @param password\r
         * @return\r
         */\r
        UserInfo getUserInfo(String userName, String password);\r
 \r
+       List<WorkflowAction> getWorkflowActions(Date date);\r
+\r
+       void merge(IEntityBase entity);\r
+\r
+       void mergeItemStructure(Item item);\r
+\r
        /**\r
-        * A bemeneti paraméterként kapott típus és azonosító lista alapján\r
-        * eltávolítja a megfelelő adatbázis bejegyzéseket.\r
-        * \r
+        * A bemeneti paraméterként kapott típus és azonosító lista alapján eltávolítja a megfelelő adatbázis bejegyzéseket.\r
+        *\r
         * @param type\r
         * @param ids\r
         */\r
        void remove(Class<? extends IEntityBase> type, List<Long> ids);\r
 \r
        /**\r
-        * A bemeneti paraméterként kapott típus és azonosító alapján az objektumot\r
-        * eltávolítja az átmeneti tárolóból.\r
-        * \r
+        * A bemeneti paraméterként kapott típus és azonosító alapján az objektumot eltávolítja az átmeneti tárolóból.\r
+        *\r
         * @param baseClass\r
         * @param key\r
         */\r
        void removeCached(Class<? extends IEntityBase> baseClass, Object key);\r
 \r
        /**\r
-        * A bemeneti paraméterként kapott típus és kulcs alapján elkéri a megfelelő\r
-        * objektumot az átmeneti tárolóból.\r
-        * \r
+        * A bemeneti paraméterként kapott típus és kulcs alapján elkéri a megfelelő objektumot az átmeneti tárolóból.\r
+        *\r
         * @param baseClass\r
         * @param key\r
         * @return\r
@@ -330,28 +337,26 @@ public interface IItemManager extends IEntityPersister {
        IEntityBase retrieveCached(Class<? extends IEntityBase> baseClass, Object key);\r
 \r
        /**\r
-        * A bemeneti paraméterként kapott keresési feltételeknek megfelelő\r
-        * Anyagokat lekéri az adatbázisból és SearchResult objektumba csomagolva\r
-        * visszatér.\r
-        * \r
+        * A bemeneti paraméterként kapott keresési feltételeknek megfelelő Anyagokat lekéri az adatbázisból és SearchResult objektumba csomagolva visszatér.\r
+        *\r
         * @param parameter\r
         * @return\r
         */\r
        List<SearchResult> searchItem(QueryObject parameter);\r
 \r
+       SearchResult searchItem(String criteria, int fromResult, int toResult);\r
+\r
        /**\r
-        * A bemeneti paraméterként kapott keresési feltételeknek megfelelő\r
-        * Munkafolyamatokat lekéri az adaatbázisból.\r
-        * \r
+        * A bemeneti paraméterként kapott keresési feltételeknek megfelelő Munkafolyamatokat lekéri az adaatbázisból.\r
+        *\r
         * @param parameter\r
         * @return\r
         */\r
        List<Job> searchJob(QueryObject parameter);\r
 \r
        /**\r
-        * A kapott három paraméter alapján létrehoz egy Signal objektumot,\r
-        * átkonvertálja bájt tömbbé és beteszi a Signalserver üzenetküldő sorába.\r
-        * \r
+        * A kapott három paraméter alapján létrehoz egy Signal objektumot, átkonvertálja bájt tömbbé és beteszi a Signalserver üzenetküldő sorába.\r
+        *\r
         * @param id\r
         * @param signalType\r
         * @param staticTable\r
@@ -360,7 +365,7 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * Egy azonosítót és entitást elhelyez az átmeneti tárolóban.\r
-        * \r
+        *\r
         * @param key\r
         * @param entity\r
         * @return\r
@@ -368,22 +373,19 @@ public interface IItemManager extends IEntityPersister {
        boolean storeCached(Object key, IEntityBase entity);\r
 \r
        /**\r
-        * Kivétel dobása esetén a kivétel üzenetét és a keletkezés helyét\r
-        * becsomagolja egy string-be, majd átadja a logger-nek.\r
-        * \r
+        * Kivétel dobása esetén a kivétel üzenetét és a keletkezés helyét becsomagolja egy string-be, majd átadja a logger-nek.\r
+        *\r
         * @param e\r
         */\r
        void throwError(Exception e);\r
 \r
        /**\r
-        * Kiloggolja az kapott művelethez tartozó objektum típusát és a metódus\r
-        * nevét.\r
+        * Kiloggolja az kapott művelethez tartozó objektum típusát és a metódus nevét.\r
         */\r
        void traceIn();\r
 \r
        /**\r
-        * Kiloggolja az kapott művelet végén az objektum típusát és a metódus\r
-        * nevét.\r
+        * Kiloggolja az kapott művelet végén az objektum típusát és a metódus nevét.\r
         */\r
        void traceOut();\r
 \r
@@ -394,27 +396,8 @@ public interface IItemManager extends IEntityPersister {
 \r
        /**\r
         * Törli a bemeneti paraméterként kapott entitás adatbázis bejegyzéseit.\r
-        * \r
+        *\r
         * @param classInfo\r
         */\r
        void truncate(Class<? extends IEntityBase> classInfo);\r
-\r
-       Item createItem(String name, String description, String houseId);\r
-\r
-       SearchResult searchItem(String criteria, int fromResult, int toResult);\r
-\r
-       Item getItemByHouseID(String houseID);\r
-\r
-       List<Job> getRunningJobs(String template);\r
-\r
-       ItemType getItemType(String itemTypeName);\r
-\r
-       WorkflowAction createWorkflowAction(Timestamp touched, Timestamp started, Timestamp finished, boolean successful,\r
-                       String houseId, String description, String source, String destination, String tag, long size);\r
-\r
-       List<WorkflowAction> getWorkflowActions(Date date);\r
-\r
-       void mergeItemStructure(Item item);\r
-\r
-       void merge(IEntityBase entity);\r
 }
\ No newline at end of file
index b144e13626d11fbcec979c60fb062304eeda6940..41ceb080d7d6303ce835a6fd43e0b2b2ab30caa8 100644 (file)
@@ -1,5 +1,6 @@
 package user.jobengine.db;\r
 \r
+import java.net.URI;\r
 import java.sql.ResultSet;\r
 import java.sql.SQLException;\r
 import java.sql.Statement;\r
@@ -341,6 +342,13 @@ public class ItemManager extends MemoryCache implements IItemManager {
                return entity;\r
        }\r
 \r
+       @Override\r
+       public StoreUri createStoreUri(URI uri) {\r
+               StoreUri result = createStoreUri(RemoteStoreProtocol.fromString(uri.toString()), uri.getHost(), uri.getPort(), false, false, false, null, null, null);\r
+               result.setRootPath(uri.getPath());\r
+               return result;\r
+       }\r
+\r
        @Override\r
        public UserInfo createUser(String fullName, String userName, String password, UserRight[] rights) {\r
                traceIn();\r
index 9fa90c541eb2b3a3632ebe39d29ce7441b885038..e4052726bd505dcbbb94d1dd9b09e25e2f22d773 100644 (file)
@@ -495,6 +495,7 @@ public class JobEngine implements IJobEngine {
                        Parser parser = new Parser(stream);
                        Encoder encoder = new Encoder();
                        JobTemplate template = parser.parse();
+                       template.validate();
                        template.setFileName(fileName);
 
                        IProgram program = (IProgram) encoder.visitJobTemplate(template, null);
@@ -536,6 +537,7 @@ public class JobEngine implements IJobEngine {
                                        Parser parser = new Parser(stream);
                                        Encoder encoder = new Encoder();
                                        JobTemplate jobTemplate = parser.parse();
+                                       jobTemplate.validate();
                                        jobTemplate.setFileName(name);
                                        IProgram program = (IProgram) encoder.visitJobTemplate(jobTemplate, null);
                                        programs.put(name, program);
index 939813246d51835821a828cb5de9215260ba38c1..5819d99f97697718dfc2aa3c3b7d59278e532331 100644 (file)
@@ -1,5 +1,10 @@
 package user.jobengine.server.ast;\r
 \r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
 /**\r
  * Gy�k�r oszt�ly.\r
  */\r
@@ -28,48 +33,110 @@ public class JobTemplate extends AST {
                return declarationSequence;\r
        }\r
 \r
-       public void setCommandSequence(CommandSequence commandSequence) {\r
-               this.commandSequence = commandSequence;\r
-       }\r
-\r
-       public void setDeclarationSequence(DeclarationSequence declarationSequence) {\r
-               this.declarationSequence = declarationSequence;\r
-       }\r
-\r
-       @Override\r
-       public Object visit(Visitor v, Object o) {\r
-               return v.visitJobTemplate(this, o);\r
+       public String getDescription() {\r
+               return description;\r
        }\r
 \r
        public String getFileName() {\r
                return fileName;\r
        }\r
 \r
-       public void setFileName(String fileName) {\r
-               this.fileName = fileName;\r
-       }\r
-\r
        public String getName() {\r
                return name;\r
        }\r
 \r
-       public void setName(String name) {\r
-               this.name = name;\r
+       public boolean isMultiInstance() {\r
+               return multiInstance;\r
        }\r
 \r
-       public String getDescription() {\r
-               return description;\r
+       public void setCommandSequence(CommandSequence commandSequence) {\r
+               this.commandSequence = commandSequence;\r
+       }\r
+\r
+       public void setDeclarationSequence(DeclarationSequence declarationSequence) {\r
+               this.declarationSequence = declarationSequence;\r
        }\r
 \r
        public void setDescription(String description) {\r
                this.description = description;\r
        }\r
 \r
-       public boolean isMultiInstance() {\r
-               return multiInstance;\r
+       public void setFileName(String fileName) {\r
+               this.fileName = fileName;\r
        }\r
 \r
        public void setMultiInstance(boolean multiInstance) {\r
                this.multiInstance = multiInstance;\r
        }\r
+\r
+       public void setName(String name) {\r
+               this.name = name;\r
+       }\r
+\r
+       public List<String> validate() throws Exception {\r
+               Map<String, String> parameters = new HashMap<>();\r
+               Map<String, String> variables = new HashMap<>();\r
+               List<String> inputvariables = new ArrayList<>();\r
+               List<String> inputparameters = new ArrayList<>();\r
+               List<String> errors = new ArrayList<>();\r
+               if (declarationSequence != null) {\r
+                       for (Declaration declaration : declarationSequence.getDeclarations()) {\r
+                               if (declaration instanceof ParameterDeclaration)\r
+                                       parameters.put(declaration.getName(), declaration.getType());\r
+                               if (declaration instanceof VariableDeclaration)\r
+                                       variables.put(declaration.getName(), declaration.getType());\r
+                       }\r
+               }\r
+\r
+               if (commandSequence != null) {\r
+                       for (Command command : commandSequence.getCommands()) {\r
+                               if (command instanceof CallJobStepCommand) {\r
+                                       ParameterSequence inputParameterSequence = ((CallJobStepCommand) command).getInputParameterSequence();\r
+                                       if (inputParameterSequence != null) {\r
+                                               for (Parameter parameter : inputParameterSequence.getParameters()) {\r
+                                                       Expression expression = ((InputParameter) parameter).getExpression();\r
+                                                       if (expression instanceof VariableExpression) {\r
+                                                               if (!inputvariables.contains(expression.getName()))\r
+                                                                       inputvariables.add(expression.getName());\r
+                                                       }\r
+                                                       if (expression instanceof ParameterExpression) {\r
+                                                               if (!inputparameters.contains(expression.getName()))\r
+                                                                       inputparameters.add(expression.getName());\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                                       ParameterSequence outputParameterSequence = ((CallJobStepCommand) command).getOutputParameterSequence();\r
+                                       if (outputParameterSequence != null) {\r
+                                               for (Parameter parameter : outputParameterSequence.getParameters()) {\r
+                                                       VariableName name = ((OutputParameter) parameter).getVariableName();\r
+                                                       if (!inputvariables.contains(name.getName()))\r
+                                                               inputvariables.add(name.getName());\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       for (String input : inputvariables) {\r
+                               if (!variables.containsKey(input))\r
+                                       errors.add(String.format("Variable declaration missing for '%s'.", input));\r
+                       }\r
+                       for (String input : inputparameters) {\r
+                               if (!parameters.containsKey(input))\r
+                                       errors.add(String.format("Parameter declaration missing for '%s'.", input));\r
+                       }\r
+\r
+               }\r
+\r
+               if (errors.size() > 0) {\r
+                       StringBuilder sb = new StringBuilder();\r
+                       errors.forEach(e -> sb.append(e));\r
+                       throw new Exception("JobTemplate validation error: " + sb.toString());\r
+               }\r
+               return errors;\r
+       }\r
+\r
+       @Override\r
+       public Object visit(Visitor v, Object o) {\r
+               return v.visitJobTemplate(this, o);\r
+       }\r
 }\r
index 4dda64231e425d0d385514ee4ff7af90ecdd7104..24dced10c1585131db960e453908415e0b13ec3c 100644 (file)
@@ -37,15 +37,16 @@ public class NexioWSServlet extends WebSocketServlet implements INexioChangeList
                logger.info("NexioAPIServlet created");
                //              messagePool = new NexioAPIServletMessagePool(3, sessions);
                instance = this;
-               this.dispatcher = new NexioClipEventDispatcher();
-               this.dispatcher.setNexioChangeListener(this);
+               dispatcher = new NexioClipEventDispatcher();
+               dispatcher.setNexioChangeListener(this);
+               //dispatcher.startup();
                logger.info("NexioWSServlet has been initialized.");
                /*
                                BundleContext bundleContext = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
                                if (bundleContext != null) {
                                        ServiceRegistration<INexioChangeListener> registerService = bundleContext
                                                        .registerService(INexioChangeListener.class, this, null);
-
+               
                                        logger.info("{} successfully registered", INexioChangeListener.class.getSimpleName());
                                }
                */