<stringAttribute key="bootstrap" value=""/>\r
<stringAttribute key="checked" value="[NONE]"/>\r
<booleanAttribute key="clearConfig" value="true"/>\r
- <stringAttribute key="configLocation" value="${workspace_loc}\-product\productionHIRTV\tmp"/>\r
+ <stringAttribute key="configLocation" value="${workspace_loc}\-product\production\HIRTV\tmp"/>\r
<booleanAttribute key="default" value="true"/>\r
<booleanAttribute key="default_auto_start" value="false"/>\r
<intAttribute key="default_start_level" value="4"/>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
+<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">\r
+ <booleanAttribute key="append.args" value="true"/>\r
+ <booleanAttribute key="automaticAdd" value="false"/>\r
+ <booleanAttribute key="automaticValidate" value="true"/>\r
+ <stringAttribute key="bootstrap" value=""/>\r
+ <stringAttribute key="checked" value="[NONE]"/>\r
+ <booleanAttribute key="clearConfig" value="true"/>\r
+ <stringAttribute key="configLocation" value="${workspace_loc}\-product\production\LOCAL\tmp"/>\r
+ <booleanAttribute key="default" value="true"/>\r
+ <booleanAttribute key="default_auto_start" value="false"/>\r
+ <intAttribute key="default_start_level" value="4"/>\r
+ <setAttribute key="deselected_workspace_bundles"/>\r
+ <booleanAttribute key="includeOptional" value="false"/>\r
+ <listAttribute key="org.eclipse.debug.ui.favoriteGroups">\r
+ <listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>\r
+ <listEntry value="org.eclipse.debug.ui.launchGroup.run"/>\r
+ </listAttribute>\r
+ <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>\r
+ <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 -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dlog4j.configurationFile=settings/log4j2.xml -Djetty.home=settings -Djetty.etc.config.urls=jetty.xml -Dgosh.home=configuration -Djava.io.tmpdir=tmp"/>\r
+ <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="C:\_workspace\USER\MediaCube\server\-product\production\LOCAL"/>\r
+ <stringAttribute key="pde.version" value="3.3"/>\r
+ <setAttribute key="selected_target_bundles">\r
+ <setEntry value="cglib@default:default"/>\r
+ <setEntry value="com.fasterxml.jackson.core.jackson-annotations@default:default"/>\r
+ <setEntry value="com.fasterxml.jackson.core.jackson-core@default:default"/>\r
+ <setEntry value="com.fasterxml.jackson.core.jackson-databind@default:default"/>\r
+ <setEntry value="com.fasterxml.jackson.dataformat.jackson-dataformat-yaml@default:default"/>\r
+ <setEntry value="com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default"/>\r
+ <setEntry value="com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default"/>\r
+ <setEntry value="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default"/>\r
+ <setEntry value="com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default"/>\r
+ <setEntry value="com.ibm.db2.jcc@default:default"/>\r
+ <setEntry value="com.ibm.nosql@default:default"/>\r
+ <setEntry value="com.microsoft.sqlserver.sqljdbc@default:default"/>\r
+ <setEntry value="com.sun.jna@default:default"/>\r
+ <setEntry value="groovy@default:default"/>\r
+ <setEntry value="io.humble.video-arch-x86_64-pc-linux-gnu6@default:default"/>\r
+ <setEntry value="io.humble.video-arch-x86_64-w64-mingw32@default:default"/>\r
+ <setEntry value="io.humble.video-noarch@default:default"/>\r
+ <setEntry value="javax.annotation-api@default:default"/>\r
+ <setEntry value="javax.mail@default:default"/>\r
+ <setEntry value="javax.servlet-api@default:default"/>\r
+ <setEntry value="javax.ws.rs-api@default:default"/>\r
+ <setEntry value="jcifs@default:default"/>\r
+ <setEntry value="joda-time@default:default"/>\r
+ <setEntry value="junit@default:default"/>\r
+ <setEntry value="org.apache.aries.spifly.dynamic.bundle@default:default"/>\r
+ <setEntry value="org.apache.aries.util@default:default"/>\r
+ <setEntry value="org.apache.commons.beanutils@default:default"/>\r
+ <setEntry value="org.apache.commons.collections@default:default"/>\r
+ <setEntry value="org.apache.commons.digester@default:default"/>\r
+ <setEntry value="org.apache.commons.io@default:default"/>\r
+ <setEntry value="org.apache.commons.lang@default:default"/>\r
+ <setEntry value="org.apache.commons.net@default:default"/>\r
+ <setEntry value="org.apache.felix.gogo.command@default:default"/>\r
+ <setEntry value="org.apache.felix.gogo.runtime@default:default"/>\r
+ <setEntry value="org.apache.felix.gogo.shell@default:default"/>\r
+ <setEntry value="org.apache.httpcomponents.httpclient@default:default"/>\r
+ <setEntry value="org.apache.httpcomponents.httpcore@default:default"/>\r
+ <setEntry value="org.apache.logging.log4j.api@1:true"/>\r
+ <setEntry value="org.apache.logging.log4j.core@default:default"/>\r
+ <setEntry value="org.apache.logging.log4j.slf4j-impl@default:default"/>\r
+ <setEntry value="org.apache.servicemix.bundles.quartz@default:default"/>\r
+ <setEntry value="org.eclipse.equinox.common@2:true"/>\r
+ <setEntry value="org.eclipse.equinox.console@default:default"/>\r
+ <setEntry value="org.eclipse.equinox.ds@1:true"/>\r
+ <setEntry value="org.eclipse.equinox.util@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.deploy@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.http@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.io@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.osgi.boot@default:true"/>\r
+ <setEntry value="org.eclipse.jetty.schemas@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.security@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.server@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.servlet@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.util@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.webapp@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.websocket.api@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.websocket.client@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.websocket.common@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.websocket.server@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.websocket.servlet@default:default"/>\r
+ <setEntry value="org.eclipse.jetty.xml@default:default"/>\r
+ <setEntry value="org.eclipse.osgi.services@default:default"/>\r
+ <setEntry value="org.eclipse.osgi@-1:true"/>\r
+ <setEntry value="org.hamcrest.core@default:default"/>\r
+ <setEntry value="org.jboss.resteasy.client@default:default"/>\r
+ <setEntry value="org.jboss.resteasy.jaxrs-api@default:default"/>\r
+ <setEntry value="org.jboss.resteasy.jaxrs@default:default"/>\r
+ <setEntry value="org.jmock.junit4@default:default"/>\r
+ <setEntry value="org.jmock@default:default"/>\r
+ <setEntry value="org.mybatis.mybatis@default:default"/>\r
+ <setEntry value="org.objectweb.asm.commons@default:default"/>\r
+ <setEntry value="org.objectweb.asm.tree@default:default"/>\r
+ <setEntry value="org.objectweb.asm@default:default"/>\r
+ <setEntry value="org.omnifaces@default:default"/>\r
+ <setEntry value="slf4j.api@default:default"/>\r
+ <setEntry value="slf4j.simple@default:false"/>\r
+ </setAttribute>\r
+ <setAttribute key="selected_workspace_bundles">\r
+ <setEntry value="user.commons.log4j2@default:false"/>\r
+ <setEntry value="user.commons.zk@default:default"/>\r
+ <setEntry value="user.jobengine.osgi.commons@default:true"/>\r
+ <setEntry value="user.jobengine.osgi.db@default:default"/>\r
+ <setEntry value="user.jobengine.osgi.server@default:default"/>\r
+ <setEntry value="user.jobengine.osgi.services@default:default"/>\r
+ <setEntry value="user.mediacube.gui@default:default"/>\r
+ <setEntry value="user.mediacube.metadata@default:default"/>\r
+ <setEntry value="user.tsm.client@default:default"/>\r
+ </setAttribute>\r
+ <booleanAttribute key="show_selected_only" value="false"/>\r
+ <booleanAttribute key="tracing" value="false"/>\r
+ <booleanAttribute key="useCustomFeatures" value="false"/>\r
+ <booleanAttribute key="useDefaultConfigArea" value="false"/>\r
+</launchConfiguration>\r
\Q/production/HIRTV/tmp/\E.*\r
\Q/production/MEDIAVIVANTIS/log/\E.*\r
\Q/production/AMC/tmp/\E.*\r
+\Q/production/LOCAL/log/\E.*\r
+\Q/production/LOCAL/tmp/\E.*\r
#This configuration file was written by: org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser\r
-#Thu Mar 04 15:26:35 CET 2021\r
+#Thu Mar 11 15:00:06 CET 2021\r
osgi.bundles=reference\:file\:cglib_2.2.2.jar@4,reference\:file\:com.fasterxml.jackson.core.jackson-annotations_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.core.jackson-core_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.core.jackson-databind_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.dataformat.jackson-dataformat-yaml_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.datatype.jackson-datatype-joda_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.jaxrs.jackson-jaxrs-base_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.module.jackson-module-jaxb-annotations_2.4.5.jar@4,reference\:file\:com.ibm.db2.jcc_1.4.0.jar@4,reference\:file\:com.ibm.nosql_4.19.26.jar@4,reference\:file\:com.microsoft.sqlserver.sqljdbc_6.0.8112.100.jar@4,reference\:file\:com.sun.jna_4.2.0.jar@4,reference\:file\:groovy_3.0.3.jar@4,reference\:file\:io.humble.video-arch-x86_64-pc-linux-gnu6_0.2.1.jar@4,reference\:file\:io.humble.video-arch-x86_64-w64-mingw32_0.2.1.jar@4,reference\:file\:io.humble.video-noarch_0.2.1.jar@4,reference\:file\:javax.annotation-api_1.2.0.jar@4,reference\:file\:javax.mail_1.5.0.b01.jar@4,reference\:file\:javax.servlet-api_3.1.0.jar@4,reference\:file\:javax.ws.rs-api_2.0.1.jar@4,reference\:file\:jcifs_1.3.17.jar@4,reference\:file\:joda-time_2.2.0.jar@4,reference\:file\:junit_4.12.0.jar@4,reference\:file\:org.apache.aries.spifly.dynamic.bundle_1.0.8.jar@4,reference\:file\:org.apache.aries.util_1.0.0.jar@4,reference\:file\:org.apache.commons.beanutils_1.8.3.jar@4,reference\:file\:org.apache.commons.collections_3.2.2.jar@4,reference\:file\:org.apache.commons.digester_3.2.0.jar@4,reference\:file\:org.apache.commons.io_2.6.0.jar@4,reference\:file\:org.apache.commons.lang_2.6.0.jar@4,reference\:file\:org.apache.commons.net_3.6.0.jar@4,reference\:file\:org.apache.felix.gogo.command_0.12.0.jar@4,reference\:file\:org.apache.felix.gogo.runtime_0.12.0.jar@4,reference\:file\:org.apache.felix.gogo.shell_0.12.0.jar@4,reference\:file\:org.apache.httpcomponents.httpclient_4.2.6.jar@4,reference\:file\:org.apache.httpcomponents.httpcore_4.2.5.jar@4,reference\:file\:org.apache.logging.log4j.api_2.8.2.jar@1\:start,reference\:file\:org.apache.logging.log4j.core_2.8.2.jar@4,reference\:file\:org.apache.logging.log4j.slf4j-impl_2.8.2.jar@4,reference\:file\:org.apache.servicemix.bundles.quartz_2.3.0.2.jar@4,reference\:file\:org.eclipse.equinox.common_3.8.0.v20160509-1230.jar@2\:start,reference\:file\:org.eclipse.equinox.console_1.1.200.v20150929-1405.jar@4,reference\:file\:org.eclipse.equinox.ds_1.4.400.v20160226-2036.jar@1\:start,reference\:file\:org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar@4,reference\:file\:org.eclipse.equinox.util_1.0.500.v20130404-1337.jar@4,reference\:file\:org.eclipse.jetty.client_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.deploy_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.http_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.io_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.osgi.boot_9.3.9.v20160517.jar@4\:start,reference\:file\:org.eclipse.jetty.schemas_3.1.0.jar@4,reference\:file\:org.eclipse.jetty.security_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.server_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.servlet_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.util_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.webapp_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.api_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.client_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.common_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.server_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.servlet_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.xml_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.osgi.services_3.2.100.v20100503.jar@4,reference\:file\:org.hamcrest.core_1.3.0.jar@4,reference\:file\:org.jboss.resteasy.client_3.0.11.Final.jar@4,reference\:file\:org.jboss.resteasy.jaxb-provider_3.0.11.Final.jar@4,reference\:file\:org.jboss.resteasy.jaxrs_3.0.11.Final.jar@4,reference\:file\:org.jboss.resteasy.jaxrs-api_3.0.11.Final.jar@4,reference\:file\:org.jmock_2.6.0.jar@4,reference\:file\:org.jmock.junit4_2.6.0.jar@4,reference\:file\:org.mybatis.mybatis_3.5.2.jar@4,reference\:file\:org.objectweb.asm_5.0.1.jar@4,reference\:file\:org.objectweb.asm.commons_5.0.1.jar@4,reference\:file\:org.objectweb.asm.tree_5.0.1.jar@4,reference\:file\:org.omnifaces_3.4.1.jar@4,reference\:file\:slf4j.api_1.7.24.jar@4,reference\:file\:slf4j.simple_1.7.2.jar@4,reference\:file\:user.commons.log4j2_1.0.0.jar@4,reference\:file\:user.commons.zk_8.0.3.jar@4,reference\:file\:user.jobengine.osgi.commons_1.0.0.jar@4\:start,reference\:file\:user.jobengine.osgi.db_1.0.0.jar@4,reference\:file\:user.jobengine.osgi.server_1.0.0.jar@4,reference\:file\:user.jobengine.osgi.services_1.0.0.jar@4,reference\:file\:user.mediacube.gui_1.0.0.jar@4,reference\:file\:user.mediacube.metadata_1.0.0.jar@4,reference\:file\:user.tsm.client_1.2.0.jar@4\r
equinox.use.ds=true\r
osgi.bundles.defaultStartLevel=4\r
<?xml version="1.0" encoding="UTF-8"?>\r
<executors>\r
+ <executor className="ServerStatusReportStep.java" maxConcurrent="1" isRemote="false" />\r
<executor className="TransferStep.java" maxConcurrent="1" isRemote="false" />\r
<executor className="TSMTransferToStep.java" maxConcurrent="4" isRemote="false" />\r
<executor className="TSMTransferFromStep.java" maxConcurrent="8" isRemote="false" />\r
{"joblist":[\r
{\r
- "template": "test-fork-cancelable.xml",\r
- "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
- },\r
- {\r
- "template": "validate-dir-mxf.xml",\r
- "parameters": [ {"name": "source", "value": "h:/TEMP/", "type": "java.lang.String"} ]\r
+ "template": "server-status-report.xml",\r
+ "name" : "MediaCube státusz",\r
+ "active": true,\r
+ "executeimmediate": false,\r
+ "cronexpression": "0 */30 * * * ?"\r
},\r
{\r
"template": "nexio1-archive-checker.xml",\r
import java.nio.file.Path;\r
import java.nio.file.Paths;\r
\r
-import org.apache.commons.io.FileUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
import org.apache.logging.log4j.Marker;\r
\r
import user.commons.RemoteFile;\r
import user.commons.StoreUri;\r
-import user.commons.mediatool.MediaInfo;\r
+import user.commons.mediaarea.MediaArea;\r
+import user.commons.strings.FileSizeUtils;\r
\r
public class PASAPOOLTransferToStep extends TransferStep {\r
private static final Logger logger = LogManager.getLogger();\r
private static final String DISPLAY_ASPECT_4_3 = "4:3";\r
private StoreUri sourceStoreUri;\r
private String sourceFileName;\r
+ private Marker marker = MarkerManager.getMarker("MEDIAPROFILE");\r
\r
@Override\r
@StepEntry\r
public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception {\r
this.sourceStoreUri = sourceStoreUri;\r
this.sourceFileName = sourceFileName;\r
- logMediaProfile();\r
long start = System.currentTimeMillis();\r
Object[] result = super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName);\r
RemoteFile remoteFile = sourceStoreUri.getRemoteFile(targetFileName);\r
long diff = (System.currentTimeMillis() - start) / 1000;\r
if (diff > 0) {\r
long bytesSpeed = remoteFile.getSize() / diff;\r
- String speed = FileUtils.byteCountToDisplaySize(bytesSpeed);\r
- logger.info(getMarker(), "{} size is {}, upload speed was {}/sec", targetFileName, FileUtils.byteCountToDisplaySize(remoteFile.getSize()), speed);\r
+ String speed = FileSizeUtils.sizeAsString(bytesSpeed);\r
+ logger.info(getMarker(), "{} size is {}, upload speed was {}/sec", targetFileName, FileSizeUtils.sizeAsString(remoteFile.getSize()), speed);\r
}\r
}\r
return result;\r
}\r
\r
- // HD\r
- // height = 1080\r
- // >PEABLEBEACH | \\10.170.100.21\media\BeachPool\r
- private boolean isHD(MediaInfo mi) {\r
- return mi.getHeight() == 1080;\r
- }\r
-\r
- // @Override\r
- // protected StoreUri getTargetStoreUri() {\r
- // StoreUri result = null;\r
- // try {\r
- // Path filePath = Paths.get(sourceStoreUri.toString(true), sourceFileName);\r
- // MediaInfo mi = new MediaInfo(filePath);\r
- // mi.process();\r
- //\r
- // if (isHD(mi)) {\r
- // result = getManager().getStoreUri("PEABLEBEACH", targetStoreUri.getProtocol());\r
- // return result;\r
- // }\r
- //\r
- // if (isSD_HIGH_16_9(mi)) {\r
- // result = getManager().getStoreUri("SELENIOPOOL_16_9", targetStoreUri.getProtocol());\r
- // return result;\r
- // }\r
- //\r
- // if (isSD_HIGH_4_3(mi)) {\r
- // result = getManager().getStoreUri("SELENIOPOOL_4_3", targetStoreUri.getProtocol());\r
- // return result;\r
- // }\r
- //\r
- // if (isSD_MAIN_422(mi)) {\r
- // result = getManager().getStoreUri("PEABLEBEACH", targetStoreUri.getProtocol());\r
- // return result;\r
- // }\r
- // } catch (Exception e) {\r
- // logger.error(getSessionMarker(), e.getMessage());\r
- // result = targetStoreUri;\r
- // }\r
- // return result;\r
- // }\r
-\r
- // SD - HIGH@HIGH / 16:9\r
- // height < 650\r
- // profile=High\r
- // aspect=16:9\r
- // >SELENIOPOOL_16_9 | \\10.170.100.21\media\SelenioPool\16_9\r
- private boolean isSD_HIGH_16_9(MediaInfo mi) {\r
- String codecProfileName = mi.getCodecProfileName();\r
- if (codecProfileName != null)\r
- codecProfileName = codecProfileName.toUpperCase();\r
- return mi.getHeight() < 650 && CODEC_PROFILE_HIGH.equals(codecProfileName) && DISPLAY_ASPECT_16_9.equals(mi.getDisplayAspect());\r
- }\r
-\r
- // SD - HIGH@HIGH / 4:3\r
- // height < 650\r
- // profile=High\r
- // aspect=4:3\r
- // >SELENIOPOOL_4_3 | \\10.170.100.21\media\SelenioPool\4_3\r
- private boolean isSD_HIGH_4_3(MediaInfo mi) {\r
- String codecProfileName = mi.getCodecProfileName();\r
- if (codecProfileName != null)\r
- codecProfileName = codecProfileName.toUpperCase();\r
- return mi.getHeight() < 650 && CODEC_PROFILE_HIGH.equals(codecProfileName) && DISPLAY_ASPECT_4_3.equals(mi.getDisplayAspect());\r
- }\r
-\r
- // SD - MAIN/422@HIGH\r
- // height < 650\r
- // profile=Main || profile=4:2:2\r
- // >PEABLEBEACH | \\10.170.100.21\media\BeachPool\r
- private boolean isSD_MAIN_422(MediaInfo mi) {\r
- String codecProfileName = mi.getCodecProfileName();\r
- if (codecProfileName != null)\r
- codecProfileName = codecProfileName.toUpperCase();\r
- return mi.getHeight() < 650 && (CODEC_PROFILE_MAIN.equals(codecProfileName) || CODEC_PROFILE_422.equals(codecProfileName));\r
- }\r
-\r
- protected void logMediaProfile() {\r
- Marker marker = MarkerManager.getMarker("MEDIAPROFILE");\r
+ @Override\r
+ protected StoreUri getTargetStoreUri(StoreUri targetStoreUri) {\r
+ StoreUri result = targetStoreUri;\r
try {\r
Path filePath = Paths.get(sourceStoreUri.toString(true), sourceFileName);\r
- MediaInfo mi = new MediaInfo(filePath);\r
+ MediaArea mi = new MediaArea(filePath);\r
mi.process();\r
- logger.info(marker, "{} data : {} {} {}", sourceFileName, mi.getCodecProfileName(), mi.getHeight(), mi.getDisplayAspect());\r
\r
if (isHD(mi)) {\r
- logger.info(marker, "{} is HD", sourceFileName);\r
- return;\r
+ logger.info(marker, "{} is MOVED_HD", sourceFileName);\r
+ result = getManager().getStoreUri("PEABLEBEACH", targetStoreUri.getProtocol());\r
+ return result;\r
}\r
\r
if (isSD_HIGH_16_9(mi)) {\r
- logger.info(marker, "{} is SD_HIGH_16_9", sourceFileName);\r
- return;\r
+ logger.info(marker, "{} is CONVSD16_9", sourceFileName);\r
+ result = getManager().getStoreUri("SELENIOPOOL_16_9", targetStoreUri.getProtocol());\r
+ return result;\r
}\r
\r
if (isSD_HIGH_4_3(mi)) {\r
- logger.info(marker, "{} is SD_HIGH_4_3", sourceFileName);\r
- return;\r
+ logger.info(marker, "{} is CONVSD4_3", sourceFileName);\r
+ result = getManager().getStoreUri("SELENIOPOOL_4_3", targetStoreUri.getProtocol());\r
+ return result;\r
}\r
\r
if (isSD_MAIN_422(mi)) {\r
- logger.info(marker, "{} is SD_MAIN_422", sourceFileName);\r
- return;\r
+ logger.info(marker, "{} is MOVED_SD", sourceFileName);\r
+ result = getManager().getStoreUri("PEABLEBEACH", targetStoreUri.getProtocol());\r
+ return result;\r
}\r
} catch (Exception e) {\r
- logger.error(marker, e.getMessage());\r
+ logger.error(getSessionMarker(), e.getMessage());\r
}\r
+ return result;\r
+ }\r
+\r
+ private boolean isHD(MediaArea mi) {\r
+ return mi.getHeight() == 1080;\r
+ }\r
+\r
+ private boolean isSD_HIGH_16_9(MediaArea mi) {\r
+ String formatProfileName = mi.getFormatProfileName();\r
+ return mi.getHeight() < 650 && formatProfileName.contains(CODEC_PROFILE_HIGH) && DISPLAY_ASPECT_16_9.equals(mi.getDisplayAspect());\r
+ }\r
+\r
+ private boolean isSD_HIGH_4_3(MediaArea mi) {\r
+ String formatProfileName = mi.getFormatProfileName();\r
+ return mi.getHeight() < 650 && formatProfileName.contains(CODEC_PROFILE_HIGH) && DISPLAY_ASPECT_4_3.equals(mi.getDisplayAspect());\r
+ }\r
+\r
+ private boolean isSD_MAIN_422(MediaArea mi) {\r
+ String formatProfileName = mi.getFormatProfileName();\r
+ return mi.getHeight() < 650 && (formatProfileName.contains(CODEC_PROFILE_MAIN) || formatProfileName.contains(CODEC_PROFILE_422));\r
}\r
\r
}\r
public class TransferStep extends JobStep {\r
private static final String DOT_PART = ".part";\r
private static final Logger logger = LogManager.getLogger();\r
- private static final boolean simulateTransferToTSM = Boolean.parseBoolean(System.getProperty("test.simulate.transfer.tsm", "false"));\r
- protected StoreUri targetStoreUri;\r
\r
@StepEntry\r
public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception {\r
try {\r
- this.targetStoreUri = targetStoreUri;\r
getJobRuntime().setCancelable(false);\r
\r
Store sourceStore = getManager().getStore(sourceStoreUri.getStoreId());\r
String description = String.format("%s -> %s : %s", sourceStore.getName(), targetStore.getName(), sourceFileName);\r
getJobRuntime().setDescription(description);\r
\r
- //logger.info(getSessionMarker(), String.valueOf(isSimulateTSMWrite(sourceStoreUri, targetStoreUri)));\r
- if (isSimulateTSMWrite(sourceStoreUri, targetStoreUri)) {\r
- logger.info(getMarker(), "Skipping real TSM write of {} from {} to {}", sourceFileName, sourceStoreUri, targetStoreUri);\r
- return null;\r
- }\r
-\r
sourceStoreUri.addProgressListener(e -> setProgress(e.getProgress()));\r
\r
- this.targetStoreUri = getTargetStoreUri();\r
- tryCopy(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName);\r
+ StoreUri currentTargetStoreUri = getTargetStoreUri(targetStoreUri);\r
+ tryCopy(sourceStoreUri, sourceFileName, currentTargetStoreUri, targetFileName);\r
} catch (Exception e) {\r
logger.error(getMarker(), "Error in transfer of {} when copying from {} to {}.", sourceFileName, sourceStoreUri, targetStoreUri);\r
throw e;\r
- // logger.error(getMarker(), "Error in transfer of {} when copying from {} to {}. Retrying after 3 seconds.", sourceFileName, sourceStoreUri,\r
- // targetStoreUri);\r
-\r
- // try {\r
- // Thread.sleep(3000);\r
- // tryCopy(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName);\r
- // } catch (Exception e1) {\r
- // logger.error(getSessionMarker(), "Error in transfer of {} when copying from {} to {}. System message is: {}", sourceFileName, sourceStoreUri,\r
- // targetStoreUri, e1.getMessage());\r
- // throw e1;\r
- // }\r
} finally {\r
if (sourceStoreUri != null)\r
sourceStoreUri.cleanUp();\r
return null;\r
}\r
\r
- protected StoreUri getTargetStoreUri() {\r
+ protected StoreUri getTargetStoreUri(StoreUri targetStoreUri) {\r
return targetStoreUri;\r
}\r
\r
return DOT_PART;\r
}\r
\r
- private boolean isSimulateTSMWrite(StoreUri sourceStoreUri, StoreUri targetStoreUri) {\r
- return simulateTransferToTSM && (RemoteStoreProtocol.TSM.equals(targetStoreUri.getProtocol()));\r
- }\r
-\r
private void tryCopy(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception {\r
String currentTargetFileName = targetFileName;\r
\r
\r
sourceStoreUri.transferFrom(targetStoreUri, sourceFileName, currentTargetFileName);\r
\r
- logger.info(getMarker(), "Transfer completed from {} as {} to {} as {}", sourceFileName, sourceStoreUri, targetStoreUri, currentTargetFileName);\r
+ logger.info(getMarker(), "Transfer of {} completed from {} to {}", sourceFileName, sourceStoreUri, currentTargetFileName);\r
\r
if (renameAfterCopy) {\r
Path tmpTargetFile = Paths.get(targetStoreUri.toString(true), currentTargetFileName);\r
public class VODTransferToStep extends TransferStep {\r
private String relativeTargetPath;\r
\r
- @Override\r
- protected StoreUri configureTargetUri(StoreUri targetStoreUri) {\r
- targetStoreUri.setRootPath(relativeTargetPath);\r
- return targetStoreUri;\r
- }\r
-\r
@StepEntry\r
public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String relativeTargetPath, String targetFileName)\r
throws Exception {\r
return super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName);\r
}\r
\r
+ @Override\r
+ protected StoreUri getTargetStoreUri(StoreUri targetStoreUri) {\r
+ StoreUri result = getManager().getStoreUri(targetStoreUri.getId());\r
+ result.setRootPath(relativeTargetPath);\r
+ return result;\r
+ }\r
+\r
}\r
#This configuration file was written by: org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser\r
-#Thu Mar 04 15:26:35 CET 2021\r
+#Thu Mar 11 15:00:06 CET 2021\r
osgi.bundles=reference\:file\:cglib_2.2.2.jar@4,reference\:file\:com.fasterxml.jackson.core.jackson-annotations_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.core.jackson-core_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.core.jackson-databind_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.dataformat.jackson-dataformat-yaml_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.datatype.jackson-datatype-joda_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.jaxrs.jackson-jaxrs-base_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.module.jackson-module-jaxb-annotations_2.4.5.jar@4,reference\:file\:com.ibm.db2.jcc_1.4.0.jar@4,reference\:file\:com.ibm.nosql_4.19.26.jar@4,reference\:file\:com.microsoft.sqlserver.sqljdbc_6.0.8112.100.jar@4,reference\:file\:com.sun.jna_4.2.0.jar@4,reference\:file\:groovy_3.0.3.jar@4,reference\:file\:io.humble.video-arch-x86_64-pc-linux-gnu6_0.2.1.jar@4,reference\:file\:io.humble.video-arch-x86_64-w64-mingw32_0.2.1.jar@4,reference\:file\:io.humble.video-noarch_0.2.1.jar@4,reference\:file\:javax.annotation-api_1.2.0.jar@4,reference\:file\:javax.mail_1.5.0.b01.jar@4,reference\:file\:javax.servlet-api_3.1.0.jar@4,reference\:file\:javax.ws.rs-api_2.0.1.jar@4,reference\:file\:jcifs_1.3.17.jar@4,reference\:file\:joda-time_2.2.0.jar@4,reference\:file\:junit_4.12.0.jar@4,reference\:file\:org.apache.aries.spifly.dynamic.bundle_1.0.8.jar@4,reference\:file\:org.apache.aries.util_1.0.0.jar@4,reference\:file\:org.apache.commons.beanutils_1.8.3.jar@4,reference\:file\:org.apache.commons.collections_3.2.2.jar@4,reference\:file\:org.apache.commons.digester_3.2.0.jar@4,reference\:file\:org.apache.commons.io_2.6.0.jar@4,reference\:file\:org.apache.commons.lang_2.6.0.jar@4,reference\:file\:org.apache.commons.net_3.6.0.jar@4,reference\:file\:org.apache.felix.gogo.command_0.12.0.jar@4,reference\:file\:org.apache.felix.gogo.runtime_0.12.0.jar@4,reference\:file\:org.apache.felix.gogo.shell_0.12.0.jar@4,reference\:file\:org.apache.httpcomponents.httpclient_4.2.6.jar@4,reference\:file\:org.apache.httpcomponents.httpcore_4.2.5.jar@4,reference\:file\:org.apache.logging.log4j.api_2.8.2.jar@1\:start,reference\:file\:org.apache.logging.log4j.core_2.8.2.jar@4,reference\:file\:org.apache.logging.log4j.slf4j-impl_2.8.2.jar@4,reference\:file\:org.apache.servicemix.bundles.quartz_2.3.0.2.jar@4,reference\:file\:org.eclipse.equinox.common_3.8.0.v20160509-1230.jar@2\:start,reference\:file\:org.eclipse.equinox.console_1.1.200.v20150929-1405.jar@4,reference\:file\:org.eclipse.equinox.ds_1.4.400.v20160226-2036.jar@1\:start,reference\:file\:org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar@4,reference\:file\:org.eclipse.equinox.util_1.0.500.v20130404-1337.jar@4,reference\:file\:org.eclipse.jetty.client_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.deploy_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.http_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.io_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.osgi.boot_9.3.9.v20160517.jar@4\:start,reference\:file\:org.eclipse.jetty.schemas_3.1.0.jar@4,reference\:file\:org.eclipse.jetty.security_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.server_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.servlet_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.util_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.webapp_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.api_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.client_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.common_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.server_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.servlet_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.xml_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.osgi.services_3.2.100.v20100503.jar@4,reference\:file\:org.hamcrest.core_1.3.0.jar@4,reference\:file\:org.jboss.resteasy.client_3.0.11.Final.jar@4,reference\:file\:org.jboss.resteasy.jaxb-provider_3.0.11.Final.jar@4,reference\:file\:org.jboss.resteasy.jaxrs_3.0.11.Final.jar@4,reference\:file\:org.jboss.resteasy.jaxrs-api_3.0.11.Final.jar@4,reference\:file\:org.jmock_2.6.0.jar@4,reference\:file\:org.jmock.junit4_2.6.0.jar@4,reference\:file\:org.mybatis.mybatis_3.5.2.jar@4,reference\:file\:org.objectweb.asm_5.0.1.jar@4,reference\:file\:org.objectweb.asm.commons_5.0.1.jar@4,reference\:file\:org.objectweb.asm.tree_5.0.1.jar@4,reference\:file\:org.omnifaces_3.4.1.jar@4,reference\:file\:slf4j.api_1.7.24.jar@4,reference\:file\:slf4j.simple_1.7.2.jar@4,reference\:file\:user.commons.log4j2_1.0.0.jar@4,reference\:file\:user.commons.zk_8.0.3.jar@4,reference\:file\:user.jobengine.osgi.commons_1.0.0.jar@4\:start,reference\:file\:user.jobengine.osgi.db_1.0.0.jar@4,reference\:file\:user.jobengine.osgi.server_1.0.0.jar@4,reference\:file\:user.jobengine.osgi.services_1.0.0.jar@4,reference\:file\:user.mediacube.gui_1.0.0.jar@4,reference\:file\:user.mediacube.metadata_1.0.0.jar@4,reference\:file\:user.tsm.client_1.2.0.jar@4\r
equinox.use.ds=true\r
osgi.bundles.defaultStartLevel=4\r
proxy-root: /mediacube/data/lowres/www/video\r
nexio:\r
host: 10.10.1.55\r
- collection-name: nexioclips\r
+ collection-name: test_nexioclips\r
use-mos-gateway: true\r
- disabled: true\r
+ disabled: false\r
octopus:\r
api:\r
address: http://10.10.1.11/api/v1\r
+++ /dev/null
-<?xml version="1.0"?>
-<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
-
-<!-- ============================================================= -->
-<!-- Configure the Jetty Server instance with an ID "Server" -->
-<!-- by adding a HTTP connector. -->
-<!-- This configuration must be used in conjunction with jetty.xml -->
-<!-- ============================================================= -->
-<Configure id="Server" class="org.eclipse.jetty.server.Server">
-
- <!-- =========================================================== -->
- <!-- Add a HTTP Connector. -->
- <!-- Configure an o.e.j.server.ServerConnector with a single -->
- <!-- HttpConnectionFactory instance using the common httpConfig -->
- <!-- instance defined in jetty.xml -->
- <!-- -->
- <!-- Consult the javadoc of o.e.j.server.ServerConnector and -->
- <!-- o.e.j.server.HttpConnectionFactory for all configuration -->
- <!-- that may be set here. -->
- <!-- =========================================================== -->
- <Call name="addConnector">
- <Arg>
- <New class="org.eclipse.jetty.server.ServerConnector">
- <Arg name="server"><Ref refid="Server" /></Arg>
- <Arg name="factories">
- <Array type="org.eclipse.jetty.server.ConnectionFactory">
- <Item>
- <New class="org.eclipse.jetty.server.HttpConnectionFactory">
- <Arg name="config"><Ref refid="httpConfig" /></Arg>
- </New>
- </Item>
- </Array>
- </Arg>
- <Set name="host"><Property name="jetty.http.host" /></Set>
- <Set name="port"><Property name="jetty.http.port" default="8888" /></Set>
- <Set name="idleTimeout"><Property name="jetty.http.idleTimeout" default="30000"/></Set>
- </New>
- </Arg>
- </Call>
-
-</Configure>
+++ /dev/null
-<?xml version="1.0"?>
-<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
-
-<!-- ============================================================= -->
-<!-- Configure the Jetty Server instance with an ID "Server" -->
-<!-- by adding a HTTP connector. -->
-<!-- This configuration must be used in conjunction with jetty.xml -->
-<!-- ============================================================= -->
-<Configure id="Server" class="org.eclipse.jetty.server.Server">
-
- <!-- =========================================================== -->
- <!-- Add a HTTP Connector. -->
- <!-- Configure an o.e.j.server.ServerConnector with a single -->
- <!-- HttpConnectionFactory instance using the common httpConfig -->
- <!-- instance defined in jetty.xml -->
- <!-- -->
- <!-- Consult the javadoc of o.e.j.server.ServerConnector and -->
- <!-- o.e.j.server.HttpConnectionFactory for all configuration -->
- <!-- that may be set here. -->
- <!-- =========================================================== -->
- <Call name="addConnector">
- <Arg>
- <New class="org.eclipse.jetty.server.ServerConnector">
- <Arg name="server"><Ref refid="Server" /></Arg>
- <Arg name="factories">
- <Array type="org.eclipse.jetty.server.ConnectionFactory">
- <Item>
- <New class="org.eclipse.jetty.server.HttpConnectionFactory">
- <Arg name="config"><Ref refid="httpConfig" /></Arg>
- </New>
- </Item>
- </Array>
- </Arg>
- <Set name="host"><Property name="jetty.http.host" /></Set>
- <Set name="port"><Property name="jetty.http.port" default="8888" /></Set>
- <Set name="idleTimeout"><Property name="jetty.http.idleTimeout" default="30000"/></Set>
- </New>
- </Arg>
- </Call>
-
-</Configure>
+++ /dev/null
-<?xml version="1.0"?>
-<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
-
-<!-- ============================================================= -->
-<!-- Configure a HTTPS connector. -->
-<!-- This configuration must be used in conjunction with jetty.xml -->
-<!-- and jetty-ssl.xml. -->
-<!-- ============================================================= -->
-<Configure id="sslConnector" class="org.eclipse.jetty.server.ServerConnector">
-
- <Call name="addIfAbsentConnectionFactory">
- <Arg>
- <New class="org.eclipse.jetty.server.SslConnectionFactory">
- <Arg name="next">http/1.1</Arg>
- <Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg>
- </New>
- </Arg>
- </Call>
-
- <Call name="addConnectionFactory">
- <Arg>
- <New class="org.eclipse.jetty.server.HttpConnectionFactory">
- <Arg name="config"><Ref refid="sslHttpConfig" /></Arg>
- <Arg name="compliance"><Call class="org.eclipse.jetty.http.HttpCompliance" name="valueOf"><Arg><Property name="jetty.http.compliance" default="RFC7230"/></Arg></Call></Arg>
- </New>
- </Arg>
- </Call>
-
-</Configure>
+++ /dev/null
-<?xml version="1.0"?>
-<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
-
-<!-- ============================================================= -->
-<!-- SSL ContextFactory configuration -->
-<!-- ============================================================= -->
-
-<!--
- To configure Includes / Excludes for Cipher Suites or Protocols see tweak-ssl.xml example at
- https://www.eclipse.org/jetty/documentation/current/configuring-ssl.html#configuring-sslcontextfactory-cipherSuites
--->
-
-<Configure id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
- <Set name="KeyStorePath"><Property name="jetty.base" default="." />/<Property name="jetty.sslContext.keyStorePath" deprecated="jetty.keystore" default="localhost.jks"/></Set>
- <Set name="KeyStorePassword"><Property name="jetty.sslContext.keyStorePassword" deprecated="jetty.keystore.password" default="password"/></Set>
- <Set name="KeyStoreType"><Property name="jetty.sslContext.keyStoreType" default="JKS"/></Set>
- <Set name="KeyStoreProvider"><Property name="jetty.sslContext.keyStoreProvider"/></Set>
- <Set name="KeyManagerPassword"><Property name="jetty.sslContext.keyManagerPassword" deprecated="jetty.keymanager.password" default="password"/></Set>
- <Set name="TrustStorePath"><Property name="jetty.base" default="." />/<Property name="jetty.sslContext.trustStorePath" deprecated="jetty.truststore" default="localhost.jks"/></Set>
- <Set name="TrustStorePassword"><Property name="jetty.sslContext.trustStorePassword" deprecated="jetty.truststore.password" default="password"/></Set>
- <Set name="TrustStoreType"><Property name="jetty.sslContext.trustStoreType"/></Set>
- <Set name="TrustStoreProvider"><Property name="jetty.sslContext.trustStoreProvider"/></Set>
- <Set name="EndpointIdentificationAlgorithm"></Set>
- <Set name="NeedClientAuth"><Property name="jetty.sslContext.needClientAuth" deprecated="jetty.ssl.needClientAuth" default="false"/></Set>
- <Set name="WantClientAuth"><Property name="jetty.sslContext.wantClientAuth" deprecated="jetty.ssl.wantClientAuth" default="false"/></Set>
- <Set name="useCipherSuitesOrder"><Property name="jetty.sslContext.useCipherSuitesOrder" default="true"/></Set>
- <Set name="sslSessionCacheSize"><Property name="jetty.sslContext.sslSessionCacheSize" default="-1"/></Set>
- <Set name="sslSessionTimeout"><Property name="jetty.sslContext.sslSessionTimeout" default="-1"/></Set>
-</Configure>
+++ /dev/null
-<?xml version="1.0"?>
-<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
-
-<!-- ============================================================= -->
-<!-- Base SSL configuration -->
-<!-- This configuration needs to be used together with 1 or more -->
-<!-- of jetty-https.xml or jetty-http2.xml -->
-<!-- ============================================================= -->
-<Configure id="Server" class="org.eclipse.jetty.server.Server">
-
- <!-- =========================================================== -->
- <!-- Add a SSL Connector with no protocol factories -->
- <!-- =========================================================== -->
- <Call name="addConnector">
- <Arg>
- <New id="sslConnector" class="org.eclipse.jetty.server.ServerConnector">
- <Arg name="server"><Ref refid="Server" /></Arg>
- <Arg name="acceptors" type="int"><Property name="jetty.ssl.acceptors" deprecated="ssl.acceptors" default="-1"/></Arg>
- <Arg name="selectors" type="int"><Property name="jetty.ssl.selectors" deprecated="ssl.selectors" default="-1"/></Arg>
- <Arg name="factories">
- <Array type="org.eclipse.jetty.server.ConnectionFactory">
- <!-- uncomment to support proxy protocol
- <Item>
- <New class="org.eclipse.jetty.server.ProxyConnectionFactory"/>
- </Item>-->
- </Array>
- </Arg>
-
- <Set name="host"><Property name="jetty.ssl.host" deprecated="jetty.host" /></Set>
- <Set name="port"><Property name="jetty.ssl.port" deprecated="ssl.port" default="8443" /></Set>
- <Set name="idleTimeout"><Property name="jetty.ssl.idleTimeout" deprecated="ssl.timeout" default="30000"/></Set>
- <Set name="soLingerTime"><Property name="jetty.ssl.soLingerTime" deprecated="ssl.soLingerTime" default="-1"/></Set>
- <Set name="acceptorPriorityDelta"><Property name="jetty.ssl.acceptorPriorityDelta" deprecated="ssl.acceptorPriorityDelta" default="0"/></Set>
- <Set name="acceptQueueSize"><Property name="jetty.ssl.acceptQueueSize" deprecated="ssl.acceptQueueSize" default="0"/></Set>
- </New>
- </Arg>
- </Call>
-
- <!-- =========================================================== -->
- <!-- Create a TLS specific HttpConfiguration based on the -->
- <!-- common HttpConfiguration defined in jetty.xml -->
- <!-- Add a SecureRequestCustomizer to extract certificate and -->
- <!-- session information -->
- <!-- =========================================================== -->
- <New id="sslHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
- <Arg><Ref refid="httpConfig"/></Arg>
- <Call name="addCustomizer">
- <Arg>
- <New class="org.eclipse.jetty.server.SecureRequestCustomizer">
- <Arg name="sniHostCheck" type="boolean"><Property name="jetty.ssl.sniHostCheck" default="true"/></Arg>
- <Arg name="stsMaxAgeSeconds" type="int"><Property name="jetty.ssl.stsMaxAgeSeconds" default="-1"/></Arg>
- <Arg name="stsIncludeSubdomains" type="boolean"><Property name="jetty.ssl.stsIncludeSubdomains" default="false"/></Arg>
- </New>
- </Arg>
- </Call>
- </New>
-
-</Configure>
+++ /dev/null
-<?xml version="1.0"?>
-<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
-
-<!-- =============================================================== -->
-<!-- Documentation of this file format can be found at: -->
-<!-- http://wiki.eclipse.org/Jetty/Reference/jetty.xml_syntax -->
-<!-- -->
-<!-- Additional configuration files are available in $JETTY_HOME/etc -->
-<!-- and can be mixed in. See start.ini file for the default -->
-<!-- configuration files. -->
-<!-- -->
-<!-- For a description of the configuration mechanism, see the -->
-<!-- output of: -->
-<!-- java -jar start.jar -? -->
-<!-- =============================================================== -->
-
-<!-- =============================================================== -->
-<!-- Configure a Jetty Server instance with an ID "Server" -->
-<!-- Other configuration files may also configure the "Server" -->
-<!-- ID, in which case they are adding configuration to the same -->
-<!-- instance. If other configuration have a different ID, they -->
-<!-- will create and configure another instance of Jetty. -->
-<!-- Consult the javadoc of o.e.j.server.Server for all -->
-<!-- configuration that may be set here. -->
-<!-- =============================================================== -->
-<Configure id="Server" class="org.eclipse.jetty.server.Server">
-
- <!-- =========================================================== -->
- <!-- Configure the Server Thread Pool. -->
- <!-- The server holds a common thread pool which is used by -->
- <!-- default as the executor used by all connectors and servlet -->
- <!-- dispatches. -->
- <!-- -->
- <!-- Configuring a fixed thread pool is vital to controlling the -->
- <!-- maximal memory footprint of the server and is a key tuning -->
- <!-- parameter for tuning. In an application that rarely blocks -->
- <!-- then maximal threads may be close to the number of 5*CPUs. -->
- <!-- In an application that frequently blocks, then maximal -->
- <!-- threads should be set as high as possible given the memory -->
- <!-- available. -->
- <!-- -->
- <!-- Consult the javadoc of o.e.j.util.thread.QueuedThreadPool -->
- <!-- for all configuration that may be set here. -->
- <!-- =========================================================== -->
- <!-- uncomment to change type of threadpool
- <Arg name="threadpool"><New id="threadpool" class="org.eclipse.jetty.util.thread.QueuedThreadPool"/></Arg>
- -->
- <Get name="ThreadPool">
- <Set name="minThreads" type="int"><Property name="jetty.threadPool.minThreads" deprecated="threads.min" default="10"/></Set>
- <Set name="maxThreads" type="int"><Property name="jetty.threadPool.maxThreads" deprecated="threads.max" default="200"/></Set>
- <Set name="idleTimeout" type="int"><Property name="jetty.threadPool.idleTimeout" deprecated="threads.timeout" default="60000"/></Set>
- <Set name="detailedDump">false</Set>
- </Get>
-
- <!-- =========================================================== -->
- <!-- Add shared Scheduler instance -->
- <!-- =========================================================== -->
- <Call name="addBean">
- <Arg>
- <New class="org.eclipse.jetty.util.thread.ScheduledExecutorScheduler"/>
- </Arg>
- </Call>
-
- <!-- =========================================================== -->
- <!-- Http Configuration. -->
- <!-- This is a common configuration instance used by all -->
- <!-- connectors that can carry HTTP semantics (HTTP, HTTPS, etc.)-->
- <!-- It configures the non wire protocol aspects of the HTTP -->
- <!-- semantic. -->
- <!-- -->
- <!-- This configuration is only defined here and is used by -->
- <!-- reference from other XML files such as jetty-http.xml, -->
- <!-- jetty-https.xml and other configuration files which -->
- <!-- instantiate the connectors. -->
- <!-- -->
- <!-- Consult the javadoc of o.e.j.server.HttpConfiguration -->
- <!-- for all configuration that may be set here. -->
- <!-- =========================================================== -->
- <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
- <Set name="secureScheme"><Property name="jetty.httpConfig.secureScheme" default="https" /></Set>
- <Set name="securePort"><Property name="jetty.httpConfig.securePort" deprecated="jetty.secure.port" default="8443" /></Set>
- <Set name="outputBufferSize"><Property name="jetty.httpConfig.outputBufferSize" deprecated="jetty.output.buffer.size" default="32768" /></Set>
- <Set name="outputAggregationSize"><Property name="jetty.httpConfig.outputAggregationSize" deprecated="jetty.output.aggregation.size" default="8192" /></Set>
- <Set name="requestHeaderSize"><Property name="jetty.httpConfig.requestHeaderSize" deprecated="jetty.request.header.size" default="8192" /></Set>
- <Set name="responseHeaderSize"><Property name="jetty.httpConfig.responseHeaderSize" deprecated="jetty.response.header.size" default="8192" /></Set>
- <Set name="sendServerVersion"><Property name="jetty.httpConfig.sendServerVersion" deprecated="jetty.send.server.version" default="true" /></Set>
- <Set name="sendDateHeader"><Property name="jetty.httpConfig.sendDateHeader" deprecated="jetty.send.date.header" default="false" /></Set>
- <Set name="headerCacheSize"><Property name="jetty.httpConfig.headerCacheSize" default="512" /></Set>
- <Set name="delayDispatchUntilContent"><Property name="jetty.httpConfig.delayDispatchUntilContent" deprecated="jetty.delayDispatchUntilContent" default="true"/></Set>
- <Set name="maxErrorDispatches"><Property name="jetty.httpConfig.maxErrorDispatches" default="10"/></Set>
- <Set name="blockingTimeout"><Property name="jetty.httpConfig.blockingTimeout" default="-1"/></Set>
- <Set name="persistentConnectionsEnabled"><Property name="jetty.httpConfig.persistentConnectionsEnabled" default="true"/></Set>
- </New>
-
- <!-- =========================================================== -->
- <!-- Set the default handler structure for the Server -->
- <!-- A handler collection is used to pass received requests to -->
- <!-- both the ContextHandlerCollection, which selects the next -->
- <!-- handler by context path and virtual host, and the -->
- <!-- DefaultHandler, which handles any requests not handled by -->
- <!-- the context handlers. -->
- <!-- Other handlers may be added to the "Handlers" collection, -->
- <!-- for example the jetty-requestlog.xml file adds the -->
- <!-- RequestLogHandler after the default handler -->
- <!-- =========================================================== -->
- <Set name="handler">
- <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
- <Set name="handlers">
- <Array type="org.eclipse.jetty.server.Handler">
- <Item>
- <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
- </Item>
- <Item>
- <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
- </Item>
- </Array>
- </Set>
- </New>
- </Set>
-
- <!-- =========================================================== -->
- <!-- extra server options -->
- <!-- =========================================================== -->
- <Set name="stopAtShutdown"><Property name="jetty.server.stopAtShutdown" default="true"/></Set>
- <Set name="stopTimeout">5000</Set>
- <Set name="dumpAfterStart"><Property name="jetty.server.dumpAfterStart" deprecated="jetty.dump.start" default="false"/></Set>
- <Set name="dumpBeforeStop"><Property name="jetty.server.dumpBeforeStop" deprecated="jetty.dump.stop" default="false"/></Set>
-
-</Configure>
+++ /dev/null
-{\r
- "topTypeFilters": [\r
- {\r
- "name": "Hír bejátszó",\r
- "color": "RED200",\r
- "icon": "ic_language_black_18dp.png"\r
- },\r
- {\r
- "name": "Hír nyers",\r
- "color": "RED100",\r
- "icon": "ic_perm_camera_mic_black_18dp.png"\r
- },\r
- {\r
- "name": "ECHO visszarögzített",\r
- "color": "BROWN100",\r
- "icon": "ic_group_work_black_18dp.png"\r
- },\r
- {\r
- "name": "Visszarögzített",\r
- "color": "BROWN100",\r
- "icon": "ic_group_work_black_18dp.png"\r
- },\r
- {\r
- "name": "Muszter DEMO",\r
- "color": "BROWN100",\r
- "icon": "ic_group_work_black_18dp.png"\r
- },\r
- {\r
- "name": "Műsor CLEAN",\r
- "color": "BROWN100",\r
- "icon": "ic_group_work_black_18dp.png"\r
- },\r
- {\r
- "name": "Egyéb",\r
- "color": "YELLOW200",\r
- "icon": "ic_view_quilt_black_18dp.png"\r
- }\r
- ],\r
- "bottomTypeFilters": [\r
- {\r
- "name": "ECHO műsor",\r
- "color": "TEAL200",\r
- "icon": "ic_theaters_black_18dp.png"\r
- },\r
- {\r
- "name": "Műsor",\r
- "color": "TEAL200",\r
- "icon": "ic_theaters_black_18dp.png"\r
- },\r
- {\r
- "name": "Műsor nyers",\r
- "color": "TEAL100",\r
- "icon": "ic_invert_colors_black_18dp.png"\r
- },\r
- {\r
- "name": "ECHO promo",\r
- "color": "INDIGO200",\r
- "icon": "ic_picture_in_picture_black_18dp.png"\r
- },\r
- {\r
- "name": "Promo",\r
- "color": "INDIGO200",\r
- "icon": "ic_picture_in_picture_black_18dp.png"\r
- },\r
- {\r
- "name": "Promo nyers",\r
- "color": "INDIGO100",\r
- "icon": "ic_bug_report_black_18dp.png"\r
- },\r
- {\r
- "name": "ECHO reklám",\r
- "color": "BLUE200",\r
- "icon": "ic_picture_in_picture_alt_black_18dp.png"\r
- },\r
- {\r
- "name": "Reklám",\r
- "color": "BLUE200",\r
- "icon": "ic_picture_in_picture_alt_black_18dp.png"\r
- },\r
- {\r
- "name": "Reklám nyers",\r
- "color": "BLUE100",\r
- "icon": "ic_settings_brightness_black_18dp.png"\r
- }\r
- ],\r
- "authentication": {\r
- "authEnabled": true,\r
- "adHost": "10.10.254.11",\r
- "adNonSecurePort": 3268,\r
- "adBaseDn": "DC=intra,DC=echotv,DC=hu",\r
- "adAdminMap": [\r
- "G_ECH_U_INFORMATIKUSOK",\r
- "G_ECH_U_MUSZAKVEZETOK",\r
- "ECH-ISILON-ADMINS"\r
- ],\r
- "adSubmitterMap": [\r
- "G_ECH_U_INFORMATIKUSOK",\r
- "G_ECH_U_MUSZAKVEZETOK",\r
- "ECH-ISILON-ADMINS",\r
- "G_ECH_U_PLAYOUT"\r
- ],\r
- "adEditorMap": [\r
- "G_ECH_U_INFORMATIKUSOK",\r
- "G_ECH_U_MUSZAKVEZETOK",\r
- "ECH-ISILON-ADMINS",\r
- "G_ECH_U_ARCHIVUM"\r
- ],\r
- "localAccounts": [\r
- {\r
- "user" : "user",\r
- "password" : "5F4DCC3B5AA765D61D8327DEB882CF99",\r
- "email" : null\r
- },\r
- {\r
- "user" : "lebony",\r
- "password" : "4E25B117B14D86D7DCECB4E433CF932C",\r
- "email" : null\r
- },\r
- {\r
- "user" : "root",\r
- "password" : "5F4DCC3B5AA765D61D8327DEB882CF99",\r
- "email" : "vasary@elgekko.net"\r
- }\r
- ],\r
- "localAdmins": [\r
- "root",\r
- "admin"\r
- ],\r
- "localSubmitters": [\r
- "lebony"\r
- ],\r
- "localEditors": [\r
- "editor"\r
- ]\r
- }\r
-}\r
-\r
-\r
-\r
--- /dev/null
+jobQueuePollInterval: 1000\r
+disableHelp: true\r
+maestroDisabled: false\r
+alternateRetrieveSelector: false\r
+disableStatistics: true\r
+disableEditor: false\r
+topTypeFilters:\r
+- name: Hír bejátszó\r
+- name: Hír nyers\r
+- name: ECHO visszarögzített\r
+- name: Visszarögzített\r
+- name: Muszter DEMO\r
+- name: Műsor CLEAN\r
+- name: Egyéb\r
+bottomTypeFilters:\r
+- name: ECHO műsor\r
+- name: Műsor\r
+- name: Műsor nyers\r
+- name: ECHO promo\r
+- name: Promo\r
+- name: Promo nyers\r
+- name: ECHO reklám\r
+- name: Reklám\r
+- name: Reklám nyers\r
+authentication:\r
+ authEnabled: true\r
+ defaultUser: root\r
+ defaultPassword: password\r
+ adHost: 10.10.254.11\r
+ adNonSecurePort: 3268\r
+ adBaseDn: DC=intra,DC=echotv,DC=hu\r
+ adAdminMap:\r
+ - G_ECH_U_INFORMATIKUSOK\r
+ - G_ECH_U_MUSZAKVEZETOK\r
+ - ECH-ISILON-ADMINS\r
+ adSubmitterMap:\r
+ - G_ECH_U_INFORMATIKUSOK\r
+ - G_ECH_U_MUSZAKVEZETOK\r
+ - ECH-ISILON-ADMINS\r
+ - G_ECH_U_PLAYOUT\r
+ adEditorMap:\r
+ - G_ECH_U_INFORMATIKUSOK\r
+ - G_ECH_U_MUSZAKVEZETOK\r
+ - ECH-ISILON-ADMINS\r
+ - G_ECH_U_ARCHIVUM\r
+ localAccounts:\r
+ - user: user\r
+ password: 5F4DCC3B5AA765D61D8327DEB882CF99\r
+ email:\r
+ - user: lebony\r
+ password: 4E25B117B14D86D7DCECB4E433CF932C\r
+ email:\r
+ - user: root\r
+ password: 5F4DCC3B5AA765D61D8327DEB882CF99\r
+ email: vasary@elgekko.net\r
+ localAdmins:\r
+ - root\r
+ - admin\r
+ localSubmitters:\r
+ - lebony\r
+ localEditors:\r
+ - editor\r
+++ /dev/null
-<?xml version="1.0"?>
-<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
-
-<!-- ============================================================= -->
-<!-- Configure the Jetty Server instance with an ID "Server" -->
-<!-- by adding a HTTP connector. -->
-<!-- This configuration must be used in conjunction with jetty.xml -->
-<!-- ============================================================= -->
-<Configure id="Server" class="org.eclipse.jetty.server.Server">
-
- <!-- =========================================================== -->
- <!-- Add a HTTP Connector. -->
- <!-- Configure an o.e.j.server.ServerConnector with a single -->
- <!-- HttpConnectionFactory instance using the common httpConfig -->
- <!-- instance defined in jetty.xml -->
- <!-- -->
- <!-- Consult the javadoc of o.e.j.server.ServerConnector and -->
- <!-- o.e.j.server.HttpConnectionFactory for all configuration -->
- <!-- that may be set here. -->
- <!-- =========================================================== -->
- <Call name="addConnector">
- <Arg>
- <New class="org.eclipse.jetty.server.ServerConnector">
- <Arg name="server"><Ref refid="Server" /></Arg>
- <Arg name="factories">
- <Array type="org.eclipse.jetty.server.ConnectionFactory">
- <Item>
- <New class="org.eclipse.jetty.server.HttpConnectionFactory">
- <Arg name="config"><Ref refid="httpConfig" /></Arg>
- </New>
- </Item>
- </Array>
- </Arg>
- <Set name="host"><Property name="jetty.http.host" /></Set>
- <Set name="port"><Property name="jetty.http.port" default="9080" /></Set>
- <Set name="idleTimeout"><Property name="jetty.http.idleTimeout" default="30000"/></Set>
- </New>
- </Arg>
- </Call>
-
-</Configure>
+++ /dev/null
-<?xml version="1.0"?>
-<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
-
-<!-- ============================================================= -->
-<!-- Configure a HTTPS connector. -->
-<!-- This configuration must be used in conjunction with jetty.xml -->
-<!-- and jetty-ssl.xml. -->
-<!-- ============================================================= -->
-<Configure id="sslConnector" class="org.eclipse.jetty.server.ServerConnector">
-
- <Call name="addIfAbsentConnectionFactory">
- <Arg>
- <New class="org.eclipse.jetty.server.SslConnectionFactory">
- <Arg name="next">http/1.1</Arg>
- <Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg>
- </New>
- </Arg>
- </Call>
-
- <Call name="addConnectionFactory">
- <Arg>
- <New class="org.eclipse.jetty.server.HttpConnectionFactory">
- <Arg name="config"><Ref refid="sslHttpConfig" /></Arg>
- <Arg name="compliance"><Call class="org.eclipse.jetty.http.HttpCompliance" name="valueOf"><Arg><Property name="jetty.http.compliance" default="RFC7230"/></Arg></Call></Arg>
- </New>
- </Arg>
- </Call>
-
-</Configure>
+++ /dev/null
-<?xml version="1.0"?>
-<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
-
-<!-- ============================================================= -->
-<!-- SSL ContextFactory configuration -->
-<!-- ============================================================= -->
-
-<!--
- To configure Includes / Excludes for Cipher Suites or Protocols see tweak-ssl.xml example at
- https://www.eclipse.org/jetty/documentation/current/configuring-ssl.html#configuring-sslcontextfactory-cipherSuites
--->
-
-<Configure id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
- <Set name="KeyStorePath"><Property name="jetty.base" default="." />/<Property name="jetty.sslContext.keyStorePath" deprecated="jetty.keystore" default="localhost.jks"/></Set>
- <Set name="KeyStorePassword"><Property name="jetty.sslContext.keyStorePassword" deprecated="jetty.keystore.password" default="password"/></Set>
- <Set name="KeyStoreType"><Property name="jetty.sslContext.keyStoreType" default="JKS"/></Set>
- <Set name="KeyStoreProvider"><Property name="jetty.sslContext.keyStoreProvider"/></Set>
- <Set name="KeyManagerPassword"><Property name="jetty.sslContext.keyManagerPassword" deprecated="jetty.keymanager.password" default="password"/></Set>
- <Set name="TrustStorePath"><Property name="jetty.base" default="." />/<Property name="jetty.sslContext.trustStorePath" deprecated="jetty.truststore" default="localhost.jks"/></Set>
- <Set name="TrustStorePassword"><Property name="jetty.sslContext.trustStorePassword" deprecated="jetty.truststore.password" default="password"/></Set>
- <Set name="TrustStoreType"><Property name="jetty.sslContext.trustStoreType"/></Set>
- <Set name="TrustStoreProvider"><Property name="jetty.sslContext.trustStoreProvider"/></Set>
- <Set name="EndpointIdentificationAlgorithm"></Set>
- <Set name="NeedClientAuth"><Property name="jetty.sslContext.needClientAuth" deprecated="jetty.ssl.needClientAuth" default="false"/></Set>
- <Set name="WantClientAuth"><Property name="jetty.sslContext.wantClientAuth" deprecated="jetty.ssl.wantClientAuth" default="false"/></Set>
- <Set name="useCipherSuitesOrder"><Property name="jetty.sslContext.useCipherSuitesOrder" default="true"/></Set>
- <Set name="sslSessionCacheSize"><Property name="jetty.sslContext.sslSessionCacheSize" default="-1"/></Set>
- <Set name="sslSessionTimeout"><Property name="jetty.sslContext.sslSessionTimeout" default="-1"/></Set>
-</Configure>
+++ /dev/null
-<?xml version="1.0"?>
-<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
-
-<!-- ============================================================= -->
-<!-- Base SSL configuration -->
-<!-- This configuration needs to be used together with 1 or more -->
-<!-- of jetty-https.xml or jetty-http2.xml -->
-<!-- ============================================================= -->
-<Configure id="Server" class="org.eclipse.jetty.server.Server">
-
- <!-- =========================================================== -->
- <!-- Add a SSL Connector with no protocol factories -->
- <!-- =========================================================== -->
- <Call name="addConnector">
- <Arg>
- <New id="sslConnector" class="org.eclipse.jetty.server.ServerConnector">
- <Arg name="server"><Ref refid="Server" /></Arg>
- <Arg name="acceptors" type="int"><Property name="jetty.ssl.acceptors" deprecated="ssl.acceptors" default="-1"/></Arg>
- <Arg name="selectors" type="int"><Property name="jetty.ssl.selectors" deprecated="ssl.selectors" default="-1"/></Arg>
- <Arg name="factories">
- <Array type="org.eclipse.jetty.server.ConnectionFactory">
- <!-- uncomment to support proxy protocol
- <Item>
- <New class="org.eclipse.jetty.server.ProxyConnectionFactory"/>
- </Item>-->
- </Array>
- </Arg>
-
- <Set name="host"><Property name="jetty.ssl.host" deprecated="jetty.host" /></Set>
- <Set name="port"><Property name="jetty.ssl.port" deprecated="ssl.port" default="444" /></Set>
- <Set name="idleTimeout"><Property name="jetty.ssl.idleTimeout" deprecated="ssl.timeout" default="30000"/></Set>
- <Set name="soLingerTime"><Property name="jetty.ssl.soLingerTime" deprecated="ssl.soLingerTime" default="-1"/></Set>
- <Set name="acceptorPriorityDelta"><Property name="jetty.ssl.acceptorPriorityDelta" deprecated="ssl.acceptorPriorityDelta" default="0"/></Set>
- <Set name="acceptQueueSize"><Property name="jetty.ssl.acceptQueueSize" deprecated="ssl.acceptQueueSize" default="0"/></Set>
- </New>
- </Arg>
- </Call>
-
- <!-- =========================================================== -->
- <!-- Create a TLS specific HttpConfiguration based on the -->
- <!-- common HttpConfiguration defined in jetty.xml -->
- <!-- Add a SecureRequestCustomizer to extract certificate and -->
- <!-- session information -->
- <!-- =========================================================== -->
- <New id="sslHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
- <Arg><Ref refid="httpConfig"/></Arg>
- <Call name="addCustomizer">
- <Arg>
- <New class="org.eclipse.jetty.server.SecureRequestCustomizer">
- <Arg name="sniHostCheck" type="boolean"><Property name="jetty.ssl.sniHostCheck" default="true"/></Arg>
- <Arg name="stsMaxAgeSeconds" type="int"><Property name="jetty.ssl.stsMaxAgeSeconds" default="-1"/></Arg>
- <Arg name="stsIncludeSubdomains" type="boolean"><Property name="jetty.ssl.stsIncludeSubdomains" default="false"/></Arg>
- </New>
- </Arg>
- </Call>
- </New>
-
-</Configure>
+++ /dev/null
-<?xml version="1.0"?>
-<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
-
-<!-- =============================================================== -->
-<!-- Documentation of this file format can be found at: -->
-<!-- http://wiki.eclipse.org/Jetty/Reference/jetty.xml_syntax -->
-<!-- -->
-<!-- Additional configuration files are available in $JETTY_HOME/etc -->
-<!-- and can be mixed in. See start.ini file for the default -->
-<!-- configuration files. -->
-<!-- -->
-<!-- For a description of the configuration mechanism, see the -->
-<!-- output of: -->
-<!-- java -jar start.jar -? -->
-<!-- =============================================================== -->
-
-<!-- =============================================================== -->
-<!-- Configure a Jetty Server instance with an ID "Server" -->
-<!-- Other configuration files may also configure the "Server" -->
-<!-- ID, in which case they are adding configuration to the same -->
-<!-- instance. If other configuration have a different ID, they -->
-<!-- will create and configure another instance of Jetty. -->
-<!-- Consult the javadoc of o.e.j.server.Server for all -->
-<!-- configuration that may be set here. -->
-<!-- =============================================================== -->
-<Configure id="Server" class="org.eclipse.jetty.server.Server">
-
- <!-- =========================================================== -->
- <!-- Configure the Server Thread Pool. -->
- <!-- The server holds a common thread pool which is used by -->
- <!-- default as the executor used by all connectors and servlet -->
- <!-- dispatches. -->
- <!-- -->
- <!-- Configuring a fixed thread pool is vital to controlling the -->
- <!-- maximal memory footprint of the server and is a key tuning -->
- <!-- parameter for tuning. In an application that rarely blocks -->
- <!-- then maximal threads may be close to the number of 5*CPUs. -->
- <!-- In an application that frequently blocks, then maximal -->
- <!-- threads should be set as high as possible given the memory -->
- <!-- available. -->
- <!-- -->
- <!-- Consult the javadoc of o.e.j.util.thread.QueuedThreadPool -->
- <!-- for all configuration that may be set here. -->
- <!-- =========================================================== -->
- <!-- uncomment to change type of threadpool
- <Arg name="threadpool"><New id="threadpool" class="org.eclipse.jetty.util.thread.QueuedThreadPool"/></Arg>
- -->
- <Get name="ThreadPool">
- <Set name="minThreads" type="int"><Property name="jetty.threadPool.minThreads" deprecated="threads.min" default="10"/></Set>
- <Set name="maxThreads" type="int"><Property name="jetty.threadPool.maxThreads" deprecated="threads.max" default="200"/></Set>
- <Set name="idleTimeout" type="int"><Property name="jetty.threadPool.idleTimeout" deprecated="threads.timeout" default="60000"/></Set>
- <Set name="detailedDump">false</Set>
- </Get>
-
- <!-- =========================================================== -->
- <!-- Add shared Scheduler instance -->
- <!-- =========================================================== -->
- <Call name="addBean">
- <Arg>
- <New class="org.eclipse.jetty.util.thread.ScheduledExecutorScheduler"/>
- </Arg>
- </Call>
-
- <!-- =========================================================== -->
- <!-- Http Configuration. -->
- <!-- This is a common configuration instance used by all -->
- <!-- connectors that can carry HTTP semantics (HTTP, HTTPS, etc.)-->
- <!-- It configures the non wire protocol aspects of the HTTP -->
- <!-- semantic. -->
- <!-- -->
- <!-- This configuration is only defined here and is used by -->
- <!-- reference from other XML files such as jetty-http.xml, -->
- <!-- jetty-https.xml and other configuration files which -->
- <!-- instantiate the connectors. -->
- <!-- -->
- <!-- Consult the javadoc of o.e.j.server.HttpConfiguration -->
- <!-- for all configuration that may be set here. -->
- <!-- =========================================================== -->
- <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
- <Set name="secureScheme"><Property name="jetty.httpConfig.secureScheme" default="https" /></Set>
- <Set name="securePort"><Property name="jetty.httpConfig.securePort" deprecated="jetty.secure.port" default="8444" /></Set>
- <Set name="outputBufferSize"><Property name="jetty.httpConfig.outputBufferSize" deprecated="jetty.output.buffer.size" default="32768" /></Set>
- <Set name="outputAggregationSize"><Property name="jetty.httpConfig.outputAggregationSize" deprecated="jetty.output.aggregation.size" default="8192" /></Set>
- <Set name="requestHeaderSize"><Property name="jetty.httpConfig.requestHeaderSize" deprecated="jetty.request.header.size" default="8192" /></Set>
- <Set name="responseHeaderSize"><Property name="jetty.httpConfig.responseHeaderSize" deprecated="jetty.response.header.size" default="8192" /></Set>
- <Set name="sendServerVersion"><Property name="jetty.httpConfig.sendServerVersion" deprecated="jetty.send.server.version" default="true" /></Set>
- <Set name="sendDateHeader"><Property name="jetty.httpConfig.sendDateHeader" deprecated="jetty.send.date.header" default="false" /></Set>
- <Set name="headerCacheSize"><Property name="jetty.httpConfig.headerCacheSize" default="512" /></Set>
- <Set name="delayDispatchUntilContent"><Property name="jetty.httpConfig.delayDispatchUntilContent" deprecated="jetty.delayDispatchUntilContent" default="true"/></Set>
- <Set name="maxErrorDispatches"><Property name="jetty.httpConfig.maxErrorDispatches" default="10"/></Set>
- <Set name="blockingTimeout"><Property name="jetty.httpConfig.blockingTimeout" default="-1"/></Set>
- <Set name="persistentConnectionsEnabled"><Property name="jetty.httpConfig.persistentConnectionsEnabled" default="true"/></Set>
- </New>
-
- <!-- =========================================================== -->
- <!-- Set the default handler structure for the Server -->
- <!-- A handler collection is used to pass received requests to -->
- <!-- both the ContextHandlerCollection, which selects the next -->
- <!-- handler by context path and virtual host, and the -->
- <!-- DefaultHandler, which handles any requests not handled by -->
- <!-- the context handlers. -->
- <!-- Other handlers may be added to the "Handlers" collection, -->
- <!-- for example the jetty-requestlog.xml file adds the -->
- <!-- RequestLogHandler after the default handler -->
- <!-- =========================================================== -->
- <Set name="handler">
- <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
- <Set name="handlers">
- <Array type="org.eclipse.jetty.server.Handler">
- <Item>
- <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
- </Item>
- <Item>
- <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
- </Item>
- </Array>
- </Set>
- </New>
- </Set>
-
- <!-- =========================================================== -->
- <!-- extra server options -->
- <!-- =========================================================== -->
- <Set name="stopAtShutdown"><Property name="jetty.server.stopAtShutdown" default="true"/></Set>
- <Set name="stopTimeout">5000</Set>
- <Set name="dumpAfterStart"><Property name="jetty.server.dumpAfterStart" deprecated="jetty.dump.start" default="false"/></Set>
- <Set name="dumpBeforeStop"><Property name="jetty.server.dumpBeforeStop" deprecated="jetty.dump.stop" default="false"/></Set>
-
-</Configure>
--- /dev/null
+prompt=mc>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<executors>\r
+ <executor className="PathItemsCollectorStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="TestForkCancelableStep.java" maxConcurrent="3" isRemote="false" />\r
+ <executor className="ArchiveRecursive.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="ArchiveListBuilderStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="ArchiveMaterialSubmitStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="BatchRetrieveForkStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="CancelableStep.java" maxConcurrent="20" isRemote="false" />\r
+ <executor className="CleanupMountedLocationStep.java" maxConcurrent="5" isRemote="false" />\r
+ <executor className="CreateArchiveItemStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="CreateMissingLowresStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="FileCopyStep.java" maxConcurrent="20" isRemote="false" />\r
+ <executor className="HSMMigrateStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="MediaToolStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="MetadataTransformStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="MXFCutterStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="OutputPathAndNameSelectorStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="TranscodeFFAStranStep.java" maxConcurrent="2" isRemote="false" />\r
+ <executor className="TSMBackupStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="TSMExtendedRetrieveStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="TSMRestoreStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="TSMSimpleRestoreStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="UpdateGhostMediaDataStep.java" maxConcurrent="1" isRemote="false" />\r
+</executors>
\ No newline at end of file
--- /dev/null
+{"joblist":[\r
+ {\r
+ "template": "sync-subtitles.xml",\r
+ "parameters": [ \r
+ {"name": "sourceFolder", "value": "/windows", "type": "java.lang.String"}, \r
+ { \r
+ "name": "filter", \r
+ "value": {\r
+ "fileName": ".*\\.(sh|ini|conf|vhost|xml|php)$"\r
+ }, \r
+ "type": "com.ibm.nosql.json.api.BasicDBObject"\r
+ } \r
+ ]\r
+ },\r
+ {\r
+ "template": "test-fork-cancelable.xml",\r
+ "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
+ },\r
+ {\r
+ "active": true,\r
+ "executeimmediate": true,\r
+ "name" : "Proxy generálás",\r
+ "template": "sys-recreate-lowres.xml",\r
+ "cronexpression": "0 */1 * * * ?",\r
+ "parameters": [ \r
+ {"name": "globalRetrievePath", "value": "file://10.11.1.90/data", "type": "java.lang.String"},\r
+ {"name": "localRetrievePath", "value": "/mediacube/data", "type": "java.lang.String"},\r
+ {"name": "localHiresPath", "value": "/mediacube/data", "type": "java.lang.String" },\r
+ {"name": "globalHiresPath", "value": "\\\\10.11.1.90\\data", "type": "java.lang.String" },\r
+ {"name": "localLowresPath", "value": "/mediacube/data/TRANSCODER_OUT", "type": "java.lang.String" },\r
+ {"name": "transcoderAddress", "value": "http://10.11.1.111:65445/api/json/v1/", "type": "java.lang.String"},\r
+ {"name": "transcoderTemplateName", "value": "MP4", "type": "java.lang.String"}\r
+ ]\r
+ },\r
+ {\r
+ "active": false,\r
+ "executeimmediate": false,\r
+ "name" : "Rekurzív archiválás a POLC/FINISHED_SHOWS mappából",\r
+ "template": "archive-recursive.xml",\r
+ "cronexpression": "0 */1 * * * ?",\r
+ "parameters": [ \r
+ {"name": "sourcePath", "value": "/mnt/POLC/FINISHED_SHOWS", "type": "java.lang.String"},\r
+ {"name": "killDateDays", "value": 1, "type": "java.lang.Integer"},\r
+ {"name": "limit", "value": 1, "type": "java.lang.Integer"}\r
+ ]\r
+ },\r
+ {\r
+ "active": false,\r
+ "executeimmediate": true,\r
+ "name" : "Limitált archiválás az PROMISE/ARCHIVE mappából",\r
+ "template": "archive-limited.xml",\r
+ "cronexpression": "0 */10 * * * ?",\r
+ "parameters": [ \r
+ {"name": "sourcePath", "value": "/mnt/PROMISE/ARCHIVE", "type": "java.lang.String"},\r
+ {"name": "globalSourcePath", "value": "\\\\10.11.1.100\\PROMISE\\ARCHIVE", "type": "java.lang.String"},\r
+ {"name": "transcoderTargetPath", "value": "/mnt/PROMISE/TRANSCODER/FFASTRANSCODER/Out", "type": "java.lang.String"},\r
+ {"name": "killDateDays", "value": -1, "type": "java.lang.Integer"},\r
+ {"name": "limit", "value": 10, "type": "java.lang.Integer"}\r
+ ]\r
+ },\r
+ {\r
+ "active": false,\r
+ "executeimmediate": false,\r
+ "name" : "Párhuzamosított teszt folyamat",\r
+ "template": "fake-noparams.xml",\r
+ "cronexpression": "0 40 22 * * ?",\r
+ "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
+ },\r
+ {\r
+ "template": "cancelable.xml"\r
+ }, \r
+ {\r
+ "active": false,\r
+ "executeimmediate": false,\r
+ "name" : "HSM migrálás",\r
+ "template": "migrate-hsm.xml",\r
+ "cronexpression": "0 0 */1 * * ?",\r
+ "parameters": [ \r
+ {"name": "sourceLocation", "value": "", "type": "java.lang.String"},\r
+ {"name": "targetLocation", "value": "/mediacube/data/ARCHIVE", "type": "java.lang.String"}\r
+ ]\r
+ },\r
+ {\r
+ "active": false,\r
+ "executeimmediate": true,\r
+ "name" : "Limitált archiválás a /mediacube/data/ARCHIVE mappából",\r
+ "template": "archive-limited.xml",\r
+ "cronexpression": "0 */10 * * * ?",\r
+ "parameters": [ \r
+ {"name": "sourcePath", "value": "/mediacube/data/ARCHIVE", "type": "java.lang.String"},\r
+ {"name": "globalSourcePath", "value": "\\\\10.11.1.90\\data\\ARCHIVE", "type": "java.lang.String"},\r
+ {"name": "transcoderTargetPath", "value": "/mnt/PROMISE/TRANSCODER/FFASTRANSCODER/Out", "type": "java.lang.String"},\r
+ {"name": "killDateDays", "value": -1, "type": "java.lang.Integer"},\r
+ {"name": "limit", "value": 1000, "type": "java.lang.Integer"}\r
+ ]\r
+ },\r
+ {\r
+ "active": false,\r
+ "executeimmediate": true,\r
+ "name" : "Lejárt /mediacube/data/ARCHIVE anyagok törlése",\r
+ "template": "delete-materials.xml",\r
+ "cronexpression": "0 */10 * * * ?",\r
+ "parameters": [ \r
+ {"name": "sourcePath", "value": "/mediacube/data/ARCHIVE", "type": "java.lang.String"}\r
+ ]\r
+ }, \r
+ {\r
+ "active": false,\r
+ "executeimmediate": true,\r
+ "name" : "Lejárt /mediacube/data/OMARCHIVE anyagok törlése",\r
+ "template": "delete-materials.xml",\r
+ "cronexpression": "0 */10 * * * ?",\r
+ "parameters": [ \r
+ {"name": "sourcePath", "value": "/mediacube/data/OMARCHIVE", "type": "java.lang.String"}\r
+ ]\r
+ }, \r
+ {\r
+ "active": false,\r
+ "executeimmediate": true,\r
+ "name" : "Lejárt /PROMISE/ARCHIVE anyagok törlése",\r
+ "template": "delete-materials.xml",\r
+ "cronexpression": "0 */10 * * * ?",\r
+ "parameters": [ \r
+ {"name": "sourcePath", "value": "/mnt/PROMISE/ARCHIVE", "type": "java.lang.String"}\r
+ ]\r
+ }, \r
+ {\r
+ "active": false,\r
+ "executeimmediate": false,\r
+ "name" : "Lejárt /POLC/FINISHED_SHOWS anyagok törlése",\r
+ "template": "delete-materials.xml",\r
+ "cronexpression": "0 * 11 * * ?",\r
+ "parameters": [ \r
+ {"name": "sourcePath", "value": "/mnt/POLC/FINISHED_SHOWS", "type": "java.lang.String"}\r
+ ]\r
+ }, \r
+ {\r
+ "name" : "SYS: batch-retrieve-ondemand",\r
+ "template": "batch-retrieve-ondemand.xml",\r
+ "active": false,\r
+ "executeimmediate": false\r
+ },\r
+ {\r
+ "name" : "SYS: retrieve-ondemand",\r
+ "template": "retrieve-ondemand.xml",\r
+ "active": false,\r
+ "executeimmediate": false,\r
+ "parameters": [ \r
+ {"name": "globalRetrievePath", "value": "file://10.11.1.100", "type": "java.lang.String"},\r
+ {"name": "localRetrievePath", "value": "/mnt/PROMISE/", "type": "java.lang.String"},\r
+ {"name": "materialOutputFolder", "value": "PLAYOUT_NLE", "type": "java.lang.String"},\r
+ {"name": "promoOutputFolder", "value": "PROMO_NLE", "type": "java.lang.String"},\r
+ {"name": "advertisementOutputFolder", "value": "REKLAM_NLE", "type": "java.lang.String"},\r
+ {"name": "octopusOutputFolder", "value": "OCTOPUS", "type": "java.lang.String"},\r
+ {"name": "genericOutputFolder", "value": "ARCHIVE_RESTORE", "type": "java.lang.String"},\r
+ {"name": "onlineOutputFolder", "value": "ONLINE", "type": "java.lang.String"},\r
+ {"name": "killDateDays", "value": 7, "type": "java.lang.Integer"},\r
+ {"name": "nexioAgency", "value": "ARCHIVE_RESTORE", "type": "java.lang.String"},\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
+ ]\r
+ },\r
+ {\r
+ "name" : "SYS: common-copy",\r
+ "template": "common-copy.xml",\r
+ "active": false,\r
+ "executeimmediate": false\r
+ },\r
+ {\r
+ "template": "create-lowres-ondemand.xml",\r
+ "active": false,\r
+ "executeimmediate": false,\r
+ "parameters": [ \r
+ {"name": "globalRetrievePath", "value": "file://10.11.1.90/data", "type": "java.lang.String"},\r
+ {"name": "localRetrievePath", "value": "/mediacube/data", "type": "java.lang.String"},\r
+ {"name": "localHiresPath", "value": "/mediacube/data", "type": "java.lang.String" },\r
+ {"name": "globalHiresPath", "value": "\\\\10.11.1.90\\data", "type": "java.lang.String" },\r
+ {"name": "localLowresPath", "value": "/mediacube/data/TRANSCODER_OUT", "type": "java.lang.String" },\r
+ {"name": "transcoderAddress", "value": "http://10.11.1.111:65445/api/json/v1/", "type": "java.lang.String"},\r
+ {"name": "transcoderTemplateName", "value": "MP4", "type": "java.lang.String"}\r
+ ]\r
+ },\r
+ {\r
+ "active": false,\r
+ "executeimmediate": false,\r
+ "template": "cancelable.xml",\r
+ "parameters": [ \r
+ {"name": "param", "value": 1, "type": "java.lang.Integer"}\r
+ ]\r
+ }\r
+]}\r
--- /dev/null
+package user.jobengine.server.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
+import java.util.LinkedList;\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
+import org.apache.logging.log4j.Marker;\r
+\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+/**\r
+ * Az archivalhato mediak listazasa MediaFileWrapper objektumokban. A listazott media allomanyokat megjeloli .catched signal allomannyal, hogy a legkozelebbi\r
+ * listazas figyelmen kivul hagyja.\r
+ *\r
+ * @author robi\r
+ */\r
+public class ArchiveListBuilderStep 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
+ private static final String TAGS = "tags";\r
+\r
+ private Marker marker;\r
+\r
+ private ArchiveItem createArchiveItem(Path jsonFilePath, Path mediaFilePath, Path catchedFilePath) {\r
+ ArchiveItem result = null;\r
+ try {\r
+ result = ArchiveItem.fromFile(jsonFilePath);\r
+ result.setMediaFile(mediaFilePath.toString());\r
+ result.setCatchedFile(catchedFilePath.toString());\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ }\r
+\r
+ return result;\r
+ }\r
+\r
+ private void createCatchedFile(Path catchedFilePath) {\r
+ try {\r
+ Files.createFile(catchedFilePath);\r
+ //Files.write(catchedFilePath, CATCHED.getBytes(UTF8), StandardOpenOption.CREATE);\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ }\r
+ }\r
+\r
+ @StepEntry\r
+ public Object[] execute(String sourcePath, int limit, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
+ marker = jobRuntime.getSessionMarker();\r
+ List<ArchiveItem> archiveList = new LinkedList<ArchiveItem>();\r
+ DirectoryStream<Path> directoryStream = null;\r
+ try {\r
+ DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get(sourcePath));\r
+ for (Path p : stream) {\r
+ processPathItem(p, archiveList);\r
+ }\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ logger.error(marker, "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", e.getMessage());\r
+ } finally {\r
+ if (directoryStream != null) {\r
+ try {\r
+ directoryStream.close();\r
+ } catch (IOException e) {\r
+ }\r
+ }\r
+ }\r
+\r
+ if (limit > 0 && archiveList.size() > limit) {\r
+ archiveList = archiveList.subList(0, limit);\r
+ logger.info(marker, "A folyamat alkalmazza a beállított {} limitet.", limit);\r
+ }\r
+\r
+ if (archiveList.size() == 0)\r
+ logger.info(marker, "Nincs archiválandó anyag.");\r
+ else\r
+ logger.info(marker, "Az archiváló folyamat {} új anyagot érzékelt.", archiveList == null ? 0 : archiveList.size());\r
+\r
+ for (ArchiveItem archiveItem : archiveList) {\r
+ createCatchedFile(Paths.get(archiveItem.getCatchedFile()));\r
+ }\r
+\r
+ return new Object[] { archiveList };\r
+ }\r
+\r
+ private boolean processPathItem(Path mediaFilePath, final List<ArchiveItem> archiveList) {\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
+ if (catchedFile.exists()) {\r
+ logger.warn("{} file is already catched.", mediaFile.getName());\r
+ return false;\r
+ }\r
+\r
+ Path jsonFilePath = Paths.get(dotStorePath.toString(), mediaFile.getName() + JSONEXT);\r
+ File jsonFile = jsonFilePath.toFile();\r
+ if (!jsonFile.exists()) {\r
+ logger.warn("{} has no json metadata.", mediaFile.getName());\r
+ return false;\r
+ }\r
+\r
+ ArchiveItem archiveItem = createArchiveItem(jsonFilePath, mediaFilePath, catchedFilePath);\r
+\r
+ if (archiveItem == null) {\r
+ logger.warn("{} has no metadata specified.", mediaFile.getName());\r
+ return false;\r
+ }\r
+\r
+ if (StringUtils.isBlank(archiveItem.getItemHouseId())) {\r
+ logger.warn("{} has no Item HouseID specified in metadata.", mediaFile.getName());\r
+ return false;\r
+ }\r
+\r
+ if (StringUtils.isBlank(archiveItem.getItemTitle())) {\r
+ logger.warn("{} has no Item Title specified in metadata.", mediaFile.getName());\r
+ return false;\r
+ }\r
+\r
+ if (StringUtils.isBlank(archiveItem.getMediaHouseId())) {\r
+ logger.warn("{} has no Media HouseID specified in metadata.", mediaFile.getName());\r
+ return false;\r
+ }\r
+\r
+ if (StringUtils.isBlank(archiveItem.getMediaTitle())) {\r
+ logger.warn("{} has no Media Title specified in metadata.", mediaFile.getName());\r
+ return false;\r
+ }\r
+\r
+ //A tenyleges archivalast vesszuk elore\r
+ if (mediaFile.length() == 0)\r
+ archiveList.add(archiveItem);\r
+ else\r
+ archiveList.add(0, archiveItem);\r
+ //createCatchedFile(catchedFilePath);\r
+ return true;\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.File;\r
+import java.util.List;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+\r
+import user.commons.ListUtils;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class ArchiveMaterialSubmitStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String JOBTEMPLATE = "archive-material.xml";\r
+ private static final String KILL_DATE_DAYS = "killDateDays";\r
+ private static final String ARCHIVE = "Archiválás";\r
+ private static final String ARCHIVE_ITEM = "archiveItem";\r
+ private Marker marker;\r
+\r
+ @StepEntry\r
+ public Object[] execute(List<ArchiveItem> archiveList, int killDateDays, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ marker = jobRuntime.getSessionMarker();\r
+ if (archiveList == null || archiveList.size() == 0)\r
+ return null;\r
+\r
+ if (jobRuntime.forkPrepare()) {\r
+ for (int i = 0; i < archiveList.size(); i++) {\r
+ ArchiveItem archiveItem = archiveList.get(i);\r
+ try {\r
+ IJobRuntime runtime = jobEngine.submit(jobRuntime, null, JOBTEMPLATE, ARCHIVE,\r
+ ListUtils.asMap(ARCHIVE_ITEM, archiveItem, KILL_DATE_DAYS, killDateDays));\r
+ \r
+ int progress = (i + 1) * 100 / archiveList.size();\r
+ setProgress(progress);\r
+ if (runtime == null)\r
+ throw new Exception("Submit returned null runtime");\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ String fileName = new File(archiveItem.getMediaFile()).getName();\r
+ logger.error(marker, "Az '{}' állomány archiválási kísérlete sikertelen. A rendszer üzenete: {}", fileName, e.getMessage());\r
+ if (!archiveItem.removeCatchedFile())\r
+ logger.error(marker, "Az '{}' állomány .catched jelző állománya nem törölhető.", fileName);\r
+ throw e;\r
+ }\r
+ }\r
+ }\r
+ jobRuntime.forkWaitComplete();\r
+ return null;\r
+ }\r
+\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.nio.file.FileVisitResult;\r
+import java.nio.file.FileVisitor;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.attribute.BasicFileAttributes;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.apache.commons.io.FilenameUtils;\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
+\r
+import user.commons.JobStatus;\r
+import user.commons.ListUtils;\r
+import user.commons.mediatool.MediaInfo;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+import user.mediacube.metadata.interfaces.IMetadata;\r
+import user.mediacube.metadata.interfaces.IMetadataProvider;\r
+import user.mediacube.metadata.interfaces.IMetadataProviderFactory;\r
+import user.mediacube.metadata.interfaces.MetadataProviderType;\r
+import user.mediacube.metadata.interfaces.MetadataType;\r
+import user.mediacube.metadata.interfaces.PlanAirMetadataListOptions;\r
+\r
+public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String JOBTEMPLATE = "archive-material.xml";\r
+ private static final String ITEM_TITLE = "itemTitle";\r
+ private static final String ITEM_HOUSEID = "itemHouseId";\r
+ private static final String MEDIA_HOUSEID = "mediaHouseId";\r
+ private static final String MEDIA_TITLE = "mediaTitle";\r
+ private static final String MEDIA_DESCRIPTION = "mediaDescription";\r
+ private static final String MEDIA_TYPE = "mediaType";\r
+ private static final String ARCHIVE = "Archiválás";\r
+ private static final String ARCHIVE_ITEM = "archiveItem";\r
+ private static final String KILL_DATE_DAYS = "killDateDays";\r
+ private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd");\r
+\r
+ private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", "VASAROLT", EscortFiles.STATUSFOLDER, EscortFiles.CONFLICTFOLDER);\r
+ private int limit;\r
+ private int submitted;\r
+ private int killDateDays;\r
+\r
+ private boolean canReadMediaInfo(Path mediaFilePath) {\r
+ boolean result = false;\r
+ try {\r
+ MediaInfo mi = new MediaInfo(mediaFilePath);\r
+ mi.process();\r
+ result = true;\r
+ } catch (Exception e) {\r
+ logger.warn(getSessionMarker(), e.getMessage());\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private void checkArchiveItem(ArchiveItem archiveItem, Path mediaPath) throws Exception {\r
+ if (archiveItem == null)\r
+ throw new Exception(mediaPath + " has no metadata specified.");\r
+\r
+ if (StringUtils.isBlank(archiveItem.getItemHouseId()))\r
+ throw new Exception(mediaPath + " has no Item HouseID specified in metadata.");\r
+\r
+ if (StringUtils.isBlank(archiveItem.getItemTitle()))\r
+ throw new Exception(mediaPath + " has no Item Title specified in metadata.");\r
+\r
+ if (StringUtils.isBlank(archiveItem.getMediaHouseId()))\r
+ throw new Exception(mediaPath + " has no Media HouseID specified in metadata.");\r
+\r
+ if (StringUtils.isBlank(archiveItem.getMediaTitle()))\r
+ throw new Exception(mediaPath + " has no Media Title specified in metadata.");\r
+ }\r
+\r
+ private ArchiveItem createArchiveItem(Path filePath) throws Exception {\r
+ ArchiveItem result = null;\r
+\r
+ String fileName = filePath.getFileName().toString();\r
+ String mediaHouseId = FilenameUtils.removeExtension(fileName);\r
+ try {\r
+ result = getPlanAirMetadata(mediaHouseId);\r
+ } catch (Exception e) {\r
+\r
+ logger.error("PlanAir metadata error", e);\r
+ //nem latja a drivert pl.\r
+ throw e;\r
+ }\r
+\r
+ if (result == null) {\r
+ result = new ArchiveItem();\r
+ BasicFileAttributes attr = Files.readAttributes(filePath, BasicFileAttributes.class);\r
+ result.setItemHouseId(df.format(attr.lastModifiedTime().toMillis()));\r
+ result.setItemTitle(filePath.getParent().toString());\r
+ result.setMediaHouseId(mediaHouseId);\r
+ result.setMediaTitle(fileName);\r
+ //TODO kesobb kivenni\r
+ //result.setMediaDescription("/OMARCHIVE");\r
+ result.setMediaType("Generic");\r
+ }\r
+\r
+ result.setMediaFile(filePath.toString());\r
+ return result;\r
+ }\r
+\r
+ @StepEntry\r
+ public Object[] execute(String sourcePath, int killDateDays, int limit) throws Exception {\r
+ this.killDateDays = killDateDays;\r
+ this.limit = limit;\r
+ try {\r
+ if (getJobRuntime().forkPrepare()) {\r
+ Files.walkFileTree(Paths.get(sourcePath), this);\r
+ }\r
+ } catch (Exception e) {\r
+ logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath, e.getMessage());\r
+ } finally {\r
+ if (submitted > 0)\r
+ getJobRuntime().forkWaitComplete();\r
+ else\r
+ getJobRuntime().cancelForkPrepare();\r
+\r
+ }\r
+ return null;\r
+ }\r
+\r
+ private ArchiveItem getPlanAirMetadata(String mediaHouseId) throws Exception {\r
+ PlanAirMetadataListOptions opt = new PlanAirMetadataListOptions();\r
+ opt.setSearch(mediaHouseId);\r
+ opt.setType(MetadataType.Material);\r
+\r
+ BasicDBObject json = null;\r
+ List<IMetadata> data = null;\r
+\r
+ IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class);\r
+ IMetadataProvider planairProvider = factory.getProvider(MetadataProviderType.PLANAIR);\r
+\r
+ ArchiveItem result = null;\r
+ data = planairProvider.list(opt);\r
+ if (data.size() != 0)\r
+ json = data.get(0).asJSON();\r
+ else {\r
+ opt.setType(MetadataType.Promo);\r
+ data = planairProvider.list(opt);\r
+ if (data.size() != 0)\r
+ json = data.get(0).asJSON();\r
+ else {\r
+ opt.setType(MetadataType.AD);\r
+ data = planairProvider.list(opt);\r
+ if (data.size() != 0)\r
+ json = data.get(0).asJSON();\r
+ }\r
+ }\r
+ if (json != null) {\r
+ result = new ArchiveItem();\r
+ result.setItemHouseId(json.getString(ITEM_HOUSEID));\r
+ result.setItemTitle(json.getString(ITEM_TITLE));\r
+ result.setMediaHouseId(json.getString(MEDIA_HOUSEID));\r
+ result.setMediaTitle(json.getString(MEDIA_TITLE));\r
+ result.setMediaDescription(json.getString(MEDIA_DESCRIPTION));\r
+ result.setMediaType(json.getString(MEDIA_TYPE));\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private boolean handleArchiveConflict(Path mediaPath) throws Exception {\r
+ boolean result = false;\r
+ String sourceFileName = mediaPath.getFileName().toString();\r
+ if (getManager().isMediaFileExists(sourceFileName)) {\r
+ EscortFiles.createMediaCatch(mediaPath);\r
+ result = true;\r
+\r
+ // try {\r
+ // Path parent = sourcePath.getParent();\r
+ // Path conflictPath = Paths.get(parent.toString(), CONFLICT);\r
+ // File folder = conflictPath.toFile();\r
+ // if (!folder.exists() || !folder.isDirectory()) {\r
+ // Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");\r
+ // FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);\r
+ // try {\r
+ // Files.createDirectories(conflictPath, attr);\r
+ // } catch (Exception e) {\r
+ // try {\r
+ // Files.createDirectory(conflictPath);\r
+ // } catch (Exception e1) {\r
+ // logger.catching(e);\r
+ // throw e;\r
+ // }\r
+ // }\r
+ // }\r
+ //\r
+ // Path conflictFile = Paths.get(conflictPath.toString(), sourceFileName);\r
+ // if (conflictFile.toFile().exists())\r
+ // conflictFile = Paths.get(conflictPath.toString(), sourceFileName + (new Date()).getTime());\r
+ // Files.move(sourcePath, conflictFile);\r
+ // result = true;\r
+ // } catch (Exception e1) {\r
+ // logger.error(getSessionMarker(), "Hiba az '{}' állomány mappába mozgatásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage());\r
+ // }\r
+ }\r
+\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public FileVisitResult postVisitDirectory(Path paramT, IOException paramIOException) throws IOException {\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+\r
+ @Override\r
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
+ Path dirName = dir.getFileName();\r
+ logger.info("PreVisit {}", dir);\r
+\r
+ if (skipPathNames.contains(dirName.toString()))\r
+ return FileVisitResult.SKIP_SUBTREE;\r
+ else\r
+ logger.info("PreVisit {}", dir);\r
+\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+\r
+ private boolean processPathItem(Path mediaPath) throws Exception {\r
+ if (submitted == limit)\r
+ return false;\r
+\r
+ // if (!"Transfered".equals(mediaPath.getParent().getFileName().toString()))\r
+ // return false;\r
+\r
+ if (mediaPath.getFileName().toString().startsWith("."))\r
+ return false;\r
+\r
+ File mediaFile = mediaPath.toFile();\r
+ if (mediaFile.isDirectory())\r
+ return false;\r
+\r
+ if (EscortFiles.isMediaCatched(mediaPath))\r
+ return false;\r
+\r
+ if (handleArchiveConflict(mediaPath))\r
+ return false;\r
+\r
+ if (!canReadMediaInfo(mediaPath))\r
+ return false;\r
+\r
+ ArchiveItem archiveItem = createArchiveItem(mediaPath);\r
+\r
+ try {\r
+ checkArchiveItem(archiveItem, mediaPath);\r
+ submitted++;\r
+\r
+ Map<String, Object> parameters = ListUtils.asMap(ARCHIVE_ITEM, archiveItem, KILL_DATE_DAYS, killDateDays);\r
+ IJobRuntime runtime = getEngine().submit(getJobRuntime(), e -> {\r
+ if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED))\r
+ EscortFiles.removeMediaCatch(mediaPath);\r
+ }, JOBTEMPLATE, ARCHIVE, 1, IJobEngine.DEFAULT_OWNER, parameters);\r
+ if (runtime == null)\r
+ throw new Exception("Submit returned null runtime");\r
+ runtime.setRelated(mediaPath.toString());\r
+ EscortFiles.createMediaCatch(mediaPath);\r
+ } catch (Exception e) {\r
+ String fileName = new File(archiveItem.getMediaFile()).getName();\r
+ logger.error(getSessionMarker(), "Az '{}' állomány archiválási kísérlete sikertelen. A rendszer üzenete: {}", fileName, e.getMessage());\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public FileVisitResult visitFile(Path filePath, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
+ //logger.info("Will archived {}", filePath);\r
+ try {\r
+ processPathItem(filePath);\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ }\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+\r
+ @Override\r
+ public FileVisitResult visitFileFailed(Path filePath, IOException paramIOException) throws IOException {\r
+ logger.info("Error archive {}", filePath);\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.MediaCubeFinishMarker;\r
+import user.commons.MediaCubeMarker;\r
+import user.jobengine.db.ArchivedMedia;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.scheduler.ScheduledJob;\r
+\r
+public class BatchRetrieveForkStep extends JobStep {\r
+ private static final String TARGET_PATH_TYPE = "targetPathType";\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String CHILD_TEMPLATE = "retrieve-ondemand.xml";\r
+ private static final String ARCHIVEDMEDIA = "archivedMedia";\r
+ private static final String RECIPIENT = "successRecipient";\r
+ private static final String HOUSEID = "houseId";\r
+ private MediaCubeMarker marker;\r
+\r
+ @StepEntry\r
+ public Object[] execute(List<ArchivedMedia> basket, String houseId, String recipient, String targetPathType, IJobEngine jobEngine, IJobRuntime jobRuntime)\r
+ throws Exception {\r
+ marker = (MediaCubeMarker) jobRuntime.getSessionMarker();\r
+\r
+ //session szinten csak a finishMarker cimzettje az erdekes, es ezt a cimet pluszban hasznalja a konfigban megadott cimmel\r
+ //a finishMarker orokli a cim bellitast a sessionMarkertol\r
+ marker.setTo(recipient);\r
+\r
+ ((MediaCubeMarker) jobRuntime.getFinishMarker()).setTo(recipient);\r
+\r
+ if (basket == null || basket.size() == 0)\r
+ return null;\r
+ setProgress(10);\r
+\r
+ MediaCubeMarker mailMarker = new MediaCubeMarker(recipient);\r
+ mailMarker.setSessionName("Archívum viszatöltés");\r
+ mailMarker.setSessionID(houseId);\r
+ logger.info(mailMarker, "A visszatöltések elindultak az alábbi állományokra:");\r
+\r
+ if (jobRuntime.forkPrepare()) {\r
+ for (ArchivedMedia archivedMedia : basket) {\r
+ logger.info(mailMarker, archivedMedia.getMedia().getMediaFilesName());\r
+ submit(archivedMedia, recipient, houseId, targetPathType, jobEngine, jobRuntime);\r
+ }\r
+ }\r
+ setProgress(50);\r
+ logger.info(new MediaCubeFinishMarker(mailMarker), "A visszatöltések végeztével megerősítő üzenetet küldünk.");\r
+ jobRuntime.forkWaitComplete();\r
+ setProgress(100);\r
+ return null;\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.getSessionMarker()).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
+\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import org.apache.commons.net.ftp.FTPClient;\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.MarkerManager;\r
+\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.FtpDirectoryLister;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+\r
+public class CancelableStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ int count = 10;\r
+\r
+ @StepEntry\r
+ public Object[] execute(int param) throws Exception {\r
+ try {\r
+\r
+ Marker marker = MarkerManager.getMarker("MEDIAPROFILE");\r
+ getJobRuntime().setRelated("TESZT" + param);\r
+\r
+ for (int i = 0; i < count; i++) {\r
+ if (getJobRuntime().isWaitingCancel())\r
+ break;\r
+ Thread.sleep(500);\r
+ /*\r
+ if (param==0)\r
+ throw new Exception();\r
+ if (param==1) {\r
+ getJobRuntime().setDisableRetry(true);\r
+ throw new Exception();\r
+ }\r
+ */\r
+ int progress = (i + 1) * 100 / count;\r
+ setProgress(progress);\r
+ }\r
+ } catch (Exception e) {\r
+ logger.info(e.getMessage());\r
+ throw e;\r
+ }\r
+ return null;\r
+ }\r
+\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.nio.file.DirectoryStream;\r
+import java.nio.file.FileVisitResult;\r
+import java.nio.file.FileVisitor;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.SimpleFileVisitor;\r
+import java.nio.file.attribute.BasicFileAttributes;\r
+import java.text.ParseException;\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.Date;\r
+import java.util.List;\r
+\r
+import org.apache.commons.io.FileUtils;\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+\r
+import user.commons.RemoteFile;\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.db.Store;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class CleanupMountedLocationStep extends JobStep implements FileVisitor<Path> {\r
+\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String PROJECTFOLDER = "PROJECT";\r
+ private static final String DATEFORMAT = "yyyyMMdd";\r
+ private static final String DOT = ".";\r
+ private static final String STATUSFOLDER = ".STATUS";\r
+ private static final String EWC2EXT = ".ewc2";\r
+ private static final String XMPEXT = ".xmp";\r
+ private static final String CATCHEDEXT = ".catched";\r
+ private static final String KILLDATEEXT = ".killdate";\r
+ private static final String JSONEXT = ".json";\r
+\r
+ private static boolean isEmpty(final Path directory) throws IOException {\r
+ try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(directory)) {\r
+ final int[] count = new int[] { 0 };\r
+ final int[] specialCount = new int[] { 0 };\r
+ dirStream.forEach(p -> {\r
+ count[0]++;\r
+ // if (p.getFileName().toString().toLowerCase().equals(PROJECTFOLDER.toLowerCase()))\r
+ // specialCount[0]++;\r
+ if (p.getFileName().toString().toLowerCase().equals(STATUSFOLDER.toLowerCase()))\r
+ specialCount[0]++;\r
+\r
+ });\r
+ if (specialCount[0] == count[0])\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+\r
+ private Marker marker;\r
+\r
+ final int[] allCount = new int[] { 0 };\r
+ final int[] currentCount = new int[] { 0 };\r
+\r
+ private Path sourcePath;\r
+ private SimpleDateFormat dateFormat;\r
+ private StoreUri tsmStoreUri;\r
+\r
+ private Date checkExpiration(List<Path> killDateFiles) {\r
+ Date killDate = null;\r
+ for (Path killDateFile : killDateFiles) {\r
+ Date currentKillDate = getKillDate(killDateFile);\r
+ if (currentKillDate == null)\r
+ continue;\r
+ if ((killDate != null && currentKillDate.after(killDate)) || killDate == null)\r
+ killDate = currentKillDate;\r
+ }\r
+ return new Date().after(killDate) ? killDate : null;\r
+ }\r
+\r
+ @StepEntry\r
+ public Object[] execute(String sourceFolder, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ marker = getSessionMarker();\r
+ sourcePath = Paths.get(sourceFolder);\r
+ DirectoryStream<Path> directoryStream = null;\r
+ if (StringUtils.isBlank(sourcePath.toString())) {\r
+ logger.error(marker, "A folyamat 'sourcePath' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'sourceFolder' input parameter missing.");\r
+ }\r
+\r
+ if (!sourcePath.toFile().exists() || !sourcePath.toFile().isDirectory()) {\r
+ logger.error(marker, "A {} mappa nem létezik.", sourceFolder);\r
+ throw new NullPointerException(String.format("Directory %s not exists.", sourceFolder));\r
+ }\r
+\r
+ Store tsmStore = getManager().getSystemStore(false);\r
+ if (tsmStore == null)\r
+ throw new NullPointerException("A TSM bejegyzés nem található!");\r
+\r
+ tsmStoreUri = tsmStore.getSourceStoreUri(RemoteStoreProtocol.TSM);\r
+ if (tsmStoreUri == null)\r
+ throw new NullPointerException("A TSM forrás elérése nem található!");\r
+\r
+ try {\r
+ setProgress(1);\r
+ dateFormat = new SimpleDateFormat(DATEFORMAT);\r
+\r
+ Files.walkFileTree(sourcePath, new SimpleFileVisitor<Path>() {\r
+ @Override\r
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {\r
+ allCount[0]++;\r
+ return super.visitFile(file, attrs);\r
+ }\r
+ });\r
+ Files.walkFileTree(sourcePath, this);\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ logger.error(marker, "Hiba a '{}' mappa feldolgozásában. A rendszer hibaüzenete: {}", sourcePath, e.getMessage());\r
+ throw e;\r
+ } finally {\r
+ if (directoryStream != null) {\r
+ try {\r
+ directoryStream.close();\r
+ } catch (IOException e) {\r
+ }\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ private Date getKillDate(Path killDateFile) {\r
+ String fileName = killDateFile.getFileName().toString();\r
+ int end = fileName.lastIndexOf(DOT);\r
+ if (end < 1)\r
+ return null;\r
+ int start = fileName.lastIndexOf(DOT, end - 1);\r
+ if (start < 0)\r
+ return null;\r
+ String strKillDate = fileName.substring(start + 1, end);\r
+ Date result = null;\r
+ if (StringUtils.isNumeric(strKillDate)) {\r
+ try {\r
+ result = dateFormat.parse(strKillDate);\r
+ } catch (ParseException e) {\r
+ logger.error(marker, "A {} fájl 'killdate' állománya hibás formátumú, a {} karaktersorozat nem konvertálható dátummá.", fileName, strKillDate);\r
+ return null;\r
+ }\r
+ } else\r
+ logger.error(marker, "A {} fájl 'killdate' állománya hibás formátumú, az dátum helyett ez áll: '{}'.", fileName, strKillDate);\r
+ return result;\r
+ }\r
+\r
+ private List<Path> getKillDateFiles(Path filePath) {\r
+ String killDateFilePattern = String.format("%s.*%s", filePath.getFileName().toString(), KILLDATEEXT);\r
+ List<Path> result = new ArrayList<>();\r
+ Path statusPath = null;\r
+ try {\r
+ statusPath = Paths.get(filePath.getParent().toString(), STATUSFOLDER);\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ return null;\r
+ }\r
+ File statusPathFile = statusPath.toFile();\r
+ if (statusPathFile.exists() && statusPathFile.isDirectory()) {\r
+ try (DirectoryStream<Path> stream = Files.newDirectoryStream(statusPath, killDateFilePattern)) {\r
+ stream.forEach(p -> result.add(p));\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ }\r
+ }\r
+ Collections.sort(result);\r
+ return result;\r
+ }\r
+\r
+ private boolean isArchived(Path filePath) {\r
+ boolean result = false;\r
+ String name = filePath.getFileName().toString();\r
+ String[] tsmName = new String[] { null };\r
+ String query = String.format("SELECT relativepath FROM MEDIAFILE WHERE houseid = '%s'", name);\r
+ getManager().executeQuery(query, rs -> {\r
+ tsmName[0] = rs.getString("relativepath");\r
+ return false;\r
+ }, null);\r
+\r
+ if (tsmName[0] != null) {\r
+ try {\r
+ RemoteFile remoteFile = tsmStoreUri.getRemoteFile(tsmName[0]);\r
+ result = remoteFile != null;\r
+ } catch (Exception e) {\r
+ logger.error(e.getMessage());\r
+ } finally {\r
+ tsmStoreUri.cleanUp();\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {\r
+ if (!dir.equals(sourcePath) && isEmpty(dir)) {\r
+ if (!removeExistingSpecialDirectory(dir, PROJECTFOLDER))\r
+ return FileVisitResult.CONTINUE;\r
+ if (!removeExistingSpecialDirectory(dir, STATUSFOLDER))\r
+ return FileVisitResult.CONTINUE;\r
+ if (removeFile(dir))\r
+ logger.info(marker, "A {} üres mappa törlése sikeres.", dir);\r
+\r
+ }\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+\r
+ @Override\r
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {\r
+\r
+ //A .-al kezdodo mappakat kihagyjuk\r
+ if (dir.getFileName().toString().startsWith("."))\r
+ return FileVisitResult.SKIP_SUBTREE;\r
+\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+\r
+ private void processPathItem(Path filePath) {\r
+ currentCount[0]++;\r
+\r
+ if (filePath.getFileName().toString().startsWith("."))\r
+ return;\r
+\r
+ int progress = currentCount[0] * 100 / allCount[0];\r
+ setProgress(progress);\r
+\r
+ logger.info("Checking {}", filePath);\r
+ List<Path> killDateFiles = getKillDateFiles(filePath);\r
+ if (killDateFiles == null || killDateFiles.size() == 0) {\r
+ logger.warn(marker, "A {} fájlhoz nem található 'killdate' állomány.", filePath);\r
+ return;\r
+ }\r
+\r
+ if (killDateFiles.size() != 1)\r
+ logger.warn(marker, "A {} fájlhoz több 'killdate' állomány található, a legújabb dátum határozza meg a törlés időpontját.", filePath);\r
+\r
+ Date killDate = checkExpiration(killDateFiles);\r
+ if (killDate == null)\r
+ return;\r
+\r
+ if (!isArchived(filePath)) {\r
+ logger.error(marker, "A(z) {} anyag törlésre van kijelölve, de nem található az archívumban.", filePath);\r
+ return;\r
+ }\r
+\r
+ if (removeFiles(filePath, killDateFiles))\r
+ logger.info(marker, "A {} fájl és kapcsolódó állományai a {} killdate bejegyzés alapján sikeresen törlődtek.", filePath.getFileName(),\r
+ dateFormat.format(killDate));\r
+ else\r
+ logger.warn(marker, "A {} fájl és kapcsolódó állományai a {} killdate bejegyzés alapján csak részlegesen vagy egyáltalán nem törlődtek.",\r
+ filePath.getFileName(), dateFormat.format(killDate));\r
+ }\r
+\r
+ private boolean removeExistingSpecialDirectory(Path dir, String folderName) throws IOException {\r
+ File projectPath = Paths.get(dir.toString(), folderName).toFile();\r
+ if (projectPath.exists() && projectPath.isDirectory()) {\r
+ FileUtils.deleteDirectory(projectPath);\r
+ if (projectPath.exists()) {\r
+ logger.warn(marker, "A {} alatti {} mappa törlése nem sikerült.", dir, folderName);\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+\r
+ private boolean removeFile(Path filePath) {\r
+ boolean result = false;\r
+ try {\r
+ //logger.error("REMOVE {}", filePath);\r
+ File file = filePath.toFile();\r
+ if (file.exists())\r
+ result = file.delete();\r
+ } catch (Exception e) {\r
+ logger.error(marker, "A {} fájl nem törölhető. A rendszer hibaüzenete: {}", filePath, e.getMessage());\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private boolean removeFiles(Path filePath, List<Path> killDateFiles) {\r
+ if (!removeFile(filePath))\r
+ return false;\r
+\r
+ removeFile(Paths.get(filePath.toString() + EWC2EXT));\r
+ removeFile(Paths.get(filePath.toString() + XMPEXT));\r
+ removeFile(Paths.get(filePath.getParent().toString(), STATUSFOLDER, filePath.getFileName().toString() + CATCHEDEXT));\r
+ removeFile(Paths.get(filePath.getParent().toString(), STATUSFOLDER, filePath.getFileName().toString() + JSONEXT));\r
+\r
+ boolean result = true;\r
+ for (Path killDateFile : killDateFiles) {\r
+ if (!removeFile(killDateFile))\r
+ result = false;\r
+ }\r
+\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {\r
+ processPathItem(file);\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+\r
+ @Override\r
+ public FileVisitResult visitFileFailed(Path file, IOException e) throws IOException {\r
+ logger.error(marker, "A {} fájl nem érhető el. A rendszer hibaüzenete: {}", file.toString(), e.getMessage());\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\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
+import com.ibm.nosql.json.api.DB;\r
+import com.ibm.nosql.json.api.DBCollection;\r
+\r
+import user.commons.nosql.NoSQLUtils;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.db.Store;\r
+\r
+public class CreateArchiveItemStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ @StepEntry\r
+ public Object[] execute(Media mediaCubeMedia, String localHiresPath) throws Exception {\r
+ DB db = NoSQLUtils.getNoSQLDB();\r
+ DBCollection collection = db.getCollection("missing_lowres");\r
+ Store highResStore = getManager().getSystemStore(false);\r
+\r
+ ArchiveItem archiveItem = null;\r
+ try {\r
+ if (mediaCubeMedia.getMediaFilesCount() != 1)\r
+ throw new Exception("Expected media count is 1, found " + mediaCubeMedia.getMediaFilesCount());\r
+ if (mediaCubeMedia.getMediaFiles().get(0).getStoreId() != highResStore.getId())\r
+ throw new Exception("Expected media store is a high-res store");\r
+\r
+ String name = mediaCubeMedia.getMediaFileRealName();\r
+ archiveItem = new ArchiveItem();\r
+ archiveItem.setMediaFile(Paths.get(localHiresPath, name).toString());\r
+ collection.save(new BasicDBObject("name", name));\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ logger.info(getMarker(), e.getMessage());\r
+ throw e;\r
+ } finally {\r
+ setProgress(100);\r
+ }\r
+ return new Object[] { archiveItem };\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\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
+import com.ibm.nosql.json.api.DB;\r
+import com.ibm.nosql.json.api.DBCollection;\r
+\r
+import user.commons.MediaCubeUndoMarker;\r
+import user.commons.nosql.NoSQLUtils;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class CreateMissingLowresStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ @StepEntry\r
+ public Object[] execute(String localHiresPath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ Object[] result = new Object[] { null, null, "%s", null, 0, true };\r
+ DB db = NoSQLUtils.getNoSQLDB();\r
+ DBCollection collection = db.getCollection("missing_lowres");\r
+ IItemManager manager = jobEngine.getItemManager();\r
+ Media media = getFirstUntranscodedMedia(manager, collection);\r
+\r
+ try {\r
+ if (media == null) {\r
+ logger.info(new MediaCubeUndoMarker(getSessionMarker().getSessionID()), "Nincs feldolgozandó hiány.");\r
+ // throw new Exception("Nincs feldolgozandó hiány.");\r
+ cancel();\r
+ return null;\r
+ }\r
+\r
+ String name = media.getMediaFileRealName();\r
+ result[0] = media;\r
+ ArchiveItem archiveItem = new ArchiveItem();\r
+ archiveItem.setMediaFile(Paths.get(localHiresPath, name).toString());\r
+ result[1] = archiveItem;\r
+ collection.save(new BasicDBObject("name", name));\r
+ logger.info(getSessionMarker(), "Processing mediaID: {}", media.getId());\r
+\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ logger.error(getSessionMarker(), e.getMessage());\r
+ throw e;\r
+ } finally {\r
+ setProgress(100);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private Media getFirstUntranscodedMedia(IItemManager manager, DBCollection collection) {\r
+ Media[] result = new Media[] { null };\r
+ //MV\r
+ String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS WHERE HOUSEID like 'M%' or HOUSEID like 'P%' or HOUSEID like 'R%' ORDER BY modified DESC";\r
+\r
+ //HTV\r
+ //String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS";\r
+ manager.executeQuery(query, rs -> {\r
+ try {\r
+ long mediaId = rs.getLong(1);\r
+ Media media = manager.getMedia(mediaId);\r
+ //a nevgeneralas miatt az eredeti MediaFilesName nem jo, a pontos nev kell nekunk\r
+ String name = media.getMediaFileRealName();\r
+ logger.info(getSessionMarker(), "Checking {}", name);\r
+ long existing = collection.find(new BasicDBObject("name", name)).count();\r
+ if (existing > 0) {\r
+ logger.info(getSessionMarker(), "{} is on missing_lowres list", name);\r
+ return true;\r
+ }\r
+\r
+ result[0] = media;\r
+ } catch (Exception e) {\r
+ logger.error(e);\r
+ }\r
+ return false;\r
+ }, null);\r
+ return result[0];\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.IProgressEventListener;\r
+import user.commons.remotestore.ProgressEvent;\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
+\r
+public class FileCopyStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private IItemManager manager;\r
+ private Marker marker;\r
+\r
+ private void check(String sourceProtocol, String sourcePath, String sourceFileName, String targetProtocol, String targetPath, String targetFileName,\r
+ IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
+ if (jobEngine == null) {\r
+ logger.error(marker, "A 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 (sourceProtocol == null) {\r
+ logger.error(marker, "A forrás protokol bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'sourceProtocol' input parameter missing.");\r
+ }\r
+ if (sourcePath == null) {\r
+ logger.error(marker, "A forrás fájl elérés bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'sourcePath' input parameter missing.");\r
+ }\r
+ if (sourceFileName == null) {\r
+ logger.error(marker, "A forrás fájlnév bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'sourceFileName' input parameter missing.");\r
+ }\r
+ if (targetProtocol == null) {\r
+ logger.error(marker, "A cél protokol bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'targetProtocol' input parameter missing.");\r
+ }\r
+ if (targetPath == null) {\r
+ logger.error(marker, "A cél fájl elérés bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'targetPath' input parameter missing.");\r
+ }\r
+ if (targetFileName == null) {\r
+ logger.error(marker, "A cél fájlnév bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'targetFileName' input parameter missing.");\r
+ }\r
+ }\r
+\r
+ @StepEntry\r
+ public Object[] execute(String sourceProtocol, String sourcePath, String sourceFileName, String targetProtocol, String targetPath, String targetFileName,\r
+ int killDateDays, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ marker = jobRuntime.getSessionMarker();\r
+\r
+ check(sourceProtocol, sourcePath, sourceFileName, targetProtocol, targetPath, targetFileName, jobEngine, jobRuntime);\r
+\r
+ StoreUri source = null;\r
+ StoreUri target = null;\r
+\r
+ try {\r
+ source = manager.createStoreUri(Enum.valueOf(RemoteStoreProtocol.class, sourceProtocol), sourcePath);\r
+ target = manager.createStoreUri(Enum.valueOf(RemoteStoreProtocol.class, targetProtocol), targetPath);\r
+ source.addProgressListener(new IProgressEventListener() {\r
+ @Override\r
+ public void progressChanged(ProgressEvent evt) {\r
+ jobRuntime.incrementProgress(evt.getProgress());\r
+ }\r
+ });\r
+\r
+ source.transferFrom(target, sourceFileName, targetFileName);\r
+ if (killDateDays > -1)\r
+ EscortFiles.createUNCKillDate(targetPath, targetFileName, killDateDays, marker);\r
+\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ throw e;\r
+ } finally {\r
+ if (source != null) {\r
+ source.cleanUp();\r
+ }\r
+ if (target != null) {\r
+ target.cleanUp();\r
+ }\r
+ }\r
+\r
+ return null;\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.nio.file.Path;\r
+import java.util.regex.Matcher;\r
+import java.util.regex.Pattern;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+public class FileSearchFilterOptions {\r
+\r
+ private BasicDBObject filter;\r
+\r
+ public FileSearchFilterOptions(BasicDBObject filter) {\r
+ this.filter = filter;\r
+ }\r
+\r
+ public boolean acceptFile(Path file) {\r
+ if (filter == null)\r
+ return true;\r
+\r
+ if (filter.containsKey("fileName")) {\r
+ //.*\.(sh|ini|conf|vhost|xml|php)$\r
+ String fileNamePattern = filter.getString("fileName");\r
+ if (fileNamePattern == null || fileNamePattern.trim().length() == 0)\r
+ return true;\r
+\r
+ Pattern pattern = Pattern.compile(fileNamePattern, Pattern.CASE_INSENSITIVE);\r
+\r
+ Matcher matcher = pattern.matcher(file.getFileName().toString());\r
+ if (matcher.find())\r
+ return true;\r
+\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
+ public boolean preAcceptDirectory(Path file) {\r
+ return true;\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.BufferedInputStream;\r
+import java.io.BufferedOutputStream;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileOutputStream;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.io.OutputStream;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.attribute.BasicFileAttributes;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Arrays;\r
+import java.util.LinkedHashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.apache.commons.io.FilenameUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\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.QueryBuilder;\r
+\r
+import user.commons.IEntityBase;\r
+import user.commons.MediaCubeMarker;\r
+import user.commons.nosql.NoSQLUtils;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.MediaFile;\r
+import user.jobengine.db.MediaFileDAO;\r
+import user.mediacube.metadata.interfaces.IMetadata;\r
+import user.mediacube.metadata.interfaces.IMetadataProvider;\r
+import user.mediacube.metadata.interfaces.IMetadataProviderFactory;\r
+import user.mediacube.metadata.interfaces.MetadataProviderType;\r
+import user.mediacube.metadata.interfaces.MetadataType;\r
+import user.mediacube.metadata.interfaces.PlanAirMetadataListOptions;\r
+\r
+public class HSMMigrateStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String MXFEXT = ".mxf";\r
+ private static final String MOVEXT = ".mov";\r
+ private Marker marker = null;\r
+ private IMetadataProvider hsmProvider;\r
+ private Map<String, BasicDBObject> tapeContents = new LinkedHashMap<>();\r
+ private DBCollection excludes;\r
+ private DBCollection fileHistory;\r
+ private DBCollection volumeHistory;\r
+ private DB db;\r
+ private IMetadataProvider planairProvider;\r
+ private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd");\r
+\r
+ private void cleanupHistory() {\r
+ if (db == null)\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ if (fileHistory == null)\r
+ fileHistory = db.getCollection("hsm_migrate_file_history");\r
+ if (volumeHistory == null)\r
+ volumeHistory = db.getCollection("hsm_migrate_volume_history");\r
+ fileHistory.drop();\r
+ volumeHistory.drop();\r
+ }\r
+\r
+ private BasicDBObject createMetadata(String volumeName, String fileName) throws Exception {\r
+\r
+ Path filePath = Paths.get(fileName);\r
+ String mediaHouseId = FilenameUtils.removeExtension(filePath.getFileName().toString());\r
+ BasicDBObject result = null;\r
+ try {\r
+ result = getPlanAirMetadata(mediaHouseId);\r
+ } catch (Exception e) {\r
+\r
+ logger.error("PlanAir metadata error", e);\r
+ //nem latja a drivert pl.\r
+ //throw e;\r
+ }\r
+\r
+ if (result == null) {\r
+ result = new BasicDBObject();\r
+ BasicFileAttributes attr = Files.readAttributes(filePath, BasicFileAttributes.class);\r
+ result.put("itemHouseId", df.format(attr.lastModifiedTime().toMillis()));\r
+ result.put("itemTitle", filePath.getParent().toString());\r
+ result.put("mediaHouseId", mediaHouseId);\r
+ result.put("mediaTitle", fileName);\r
+ result.put("mediaDescription", volumeName);\r
+ result.put("mediaType", "Generic");\r
+ }\r
+ result.put("userName", "mediacube");\r
+ return result;\r
+ }\r
+\r
+ @SuppressWarnings("serial")\r
+ @StepEntry\r
+ public Object[] execute(String sourceLocation, String targetLocation) throws Exception {\r
+ marker = getJobRuntime().getSessionMarker();\r
+ //remove from prod\r
+ //cleanupHistory();\r
+ hsmProvider = getMetadataProvider(MetadataProviderType.HSM);\r
+ if (hsmProvider == null)\r
+ throw new NullPointerException("No HSM metadata provider available");\r
+ planairProvider = getMetadataProvider(MetadataProviderType.PLANAIR);\r
+ if (planairProvider == null)\r
+ throw new NullPointerException("No PLANAIR metadata provider available");\r
+ Path targetPath = Paths.get(targetLocation);\r
+ try {\r
+ List<IMetadata> volumes = hsmProvider.list(new BasicDBObject());\r
+ for (IMetadata volume : volumes) {\r
+ String volumeName = volume.getTitle();\r
+\r
+ BasicDBObject historyResult = queryVolumeHistory(volumeName);\r
+ if (historyResult != null) {\r
+ logger.info(marker, "A kazetta már feldolgozásra került: {}", volumeName);\r
+ continue;\r
+ }\r
+ logger.info(marker, "A kazetta feldolgozása elindul: {}", volumeName);\r
+ List<IMetadata> contents = getContents(volumeName);\r
+ int p = 0;\r
+ boolean oneSuccess = false;\r
+ boolean hasError = false;\r
+ for (IMetadata content : contents) {\r
+ BasicDBObject c = content.asJSON();\r
+ String hsmFileName = c.getString("fileName");\r
+ long contentFileSize = NoSQLUtils.asLong(c, "fileSize");\r
+ if (!tapeContents.containsKey(hsmFileName)) {\r
+ tapeContents.put(hsmFileName, c);\r
+ Path sourceFilePath = Paths.get(sourceLocation, hsmFileName);\r
+ if (contentFileSize < Files.getFileStore(targetPath).getUsableSpace()) {\r
+ Path targetFilePath = Paths.get(targetLocation, sourceFilePath.getFileName().toString());\r
+\r
+ try {\r
+ if (processHSMFile(volumeName, hsmFileName, sourceFilePath, targetFilePath)) {\r
+ oneSuccess = true;\r
+ }\r
+ } catch (Exception e) {\r
+ hasError = true;\r
+ }\r
+ }\r
+ }\r
+ setProgress(p++ * 100 / contents.size());\r
+\r
+ if (getJobRuntime().isWaitingCancel()) {\r
+ logger.info("Job canceled by user");\r
+ //ne mentsuk a szalagot meg\r
+ return null;\r
+ }\r
+\r
+ }\r
+\r
+ if (oneSuccess && !hasError) {\r
+ saveVolumeHistory(volumeName);\r
+ String subject = "A kazetta eltávolítható a HSM rendszerből: " + volumeName;\r
+ logger.info(new MediaCubeMarker() {\r
+ {\r
+ setSubject(subject);\r
+ }\r
+ }, subject);\r
+ }\r
+\r
+ //ha mar sikerult valamit archivalni kilepunk\r
+ if (oneSuccess)\r
+ break;\r
+ }\r
+ } catch (Exception e) {\r
+ logger.error(marker, "Hiba a migráció során. A rendszer hibaüzenete: {}", e.getMessage());\r
+ throw e;\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ private List<IMetadata> getContents(String volumeName) throws Exception {\r
+ List<IMetadata> contents = null;\r
+ contents = hsmProvider.list(new BasicDBObject("volumeName", volumeName));\r
+ return contents;\r
+ }\r
+\r
+ protected IMetadataProvider getMetadataProvider(MetadataProviderType type) {\r
+ IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class);\r
+ if (factory == null)\r
+ return null;\r
+ return factory.getProvider(type);\r
+ }\r
+\r
+ private BasicDBObject getPlanAirMetadata(String mediaHouseId) throws Exception {\r
+ PlanAirMetadataListOptions opt = new PlanAirMetadataListOptions();\r
+ opt.setSearch(mediaHouseId);\r
+\r
+ List<IMetadata> result = null;\r
+ opt.setType(MetadataType.Material);\r
+ result = planairProvider.list(opt);\r
+ if (result.size() != 0)\r
+ return result.get(0).asJSON();\r
+\r
+ opt.setType(MetadataType.Promo);\r
+ result = planairProvider.list(opt);\r
+ if (result.size() != 0)\r
+ return result.get(0).asJSON();\r
+\r
+ opt.setType(MetadataType.AD);\r
+ result = planairProvider.list(opt);\r
+ if (result.size() != 0)\r
+ return result.get(0).asJSON();\r
+\r
+ return null;\r
+ }\r
+\r
+ //true if need copy\r
+ public boolean prepareCopy(String hsmFileName, Path source, Path target) throws IOException {\r
+ boolean result = true;\r
+ BasicDBObject excludeResult = queryExclude(hsmFileName);\r
+ if (excludeResult != null) {\r
+ logger.warn(marker, "Kivételként megjelölt: {}", hsmFileName);\r
+ return false;\r
+ }\r
+\r
+ File sourceFile = source.toFile();\r
+ File targetFile = target.toFile();\r
+\r
+ if (!sourceFile.exists()) {\r
+ logger.warn(marker, "A forrás nem elérhető: {}", source);\r
+ return false;\r
+ }\r
+\r
+ // BasicDBObject historyResult = queryFileHistory(contentFileName);\r
+ // if (historyResult != null)\r
+ // return false;\r
+\r
+ // if (!mediaFile.getName().toLowerCase().endsWith(MOVEXT.toLowerCase()) && !mediaFile.getName().toLowerCase().endsWith(MXFEXT.toLowerCase()))\r
+ // return;\r
+ // logger.info("Start copy from {} to {}", sourceFilePath, targetFilePath);\r
+\r
+ boolean targetExists = targetFile.exists();\r
+\r
+ long targetLength = targetFile.length();\r
+ long sourceLength = sourceFile.length();\r
+\r
+ if (targetLength == sourceLength) {\r
+ logger.warn(marker, "A fájl már fel van dolgozva: {}, {} -> {}", source, sourceLength, targetLength);\r
+ return false;\r
+ }\r
+\r
+ if (targetLength > sourceLength) {\r
+ logger.warn(marker, "A célfájl nagyobb, törlöm: {}", target);\r
+ Files.delete(target);\r
+ targetLength = 0;\r
+ targetExists = false;\r
+ }\r
+\r
+ if (targetExists) {\r
+ logger.warn(marker, "A fájl már létezik, a másolás folytatódik: {}, {} -> {}", target, sourceLength, targetLength);\r
+ } else\r
+ logger.warn(marker, "Migrálás: {}, {} -> {}", source, sourceLength, targetLength);\r
+\r
+ return result;\r
+ }\r
+\r
+ private boolean processHSMFile(String volumeName, String hsmFileName, Path sourceFilePath, Path targetFilePath) throws Exception {\r
+ int repeat = 4;\r
+ boolean successCopy = false;\r
+\r
+ IItemManager manager = getManager();\r
+ MediaFileDAO mfDAO = (MediaFileDAO) manager.getBaseDAO(MediaFile.class);\r
+ List<IEntityBase> mediaFiles = mfDAO.getByHouseId(sourceFilePath.getFileName().toString());\r
+ if (mediaFiles != null && mediaFiles.size() > 0) {\r
+ logger.warn(marker, "Már archivált: {}", hsmFileName);\r
+ return false;\r
+ }\r
+\r
+ if (prepareCopy(hsmFileName, sourceFilePath, targetFilePath)) {\r
+ while (repeat > 0) {\r
+ try {\r
+ resumeableCopy(sourceFilePath, targetFilePath);\r
+ repeat = 0;\r
+ successCopy = true;\r
+ } catch (Exception e) {\r
+ if (Files.exists(targetFilePath) && targetFilePath.toFile().length() == 0)\r
+ Files.delete(targetFilePath);\r
+ //logger.warn(marker, "Hiba a másolás során: {} ({})", sourceFilePath, e.getMessage());\r
+ repeat--;\r
+ }\r
+ }\r
+ }\r
+ String metadataFileName = sourceFilePath.getFileName() + EscortFiles.DOT_JSON;\r
+ Path metadataPath = Paths.get(targetFilePath.getParent().toString(), EscortFiles.STATUSFOLDER, metadataFileName);\r
+ boolean createMetadata = Files.exists(targetFilePath) && !Files.exists(metadataPath);\r
+\r
+ if (successCopy || createMetadata) {\r
+ String metadata = null;\r
+ try {\r
+ metadata = createMetadata(volumeName, hsmFileName).toPrettyString("");\r
+ EscortFiles.createMetadata(targetFilePath.getParent().toString(), targetFilePath.getFileName().toString(), metadata);\r
+ //saveFileHistory(contentFileName);\r
+\r
+ } catch (Exception e) {\r
+ logger.error(marker, "Metadata error", e);\r
+ return false;\r
+ }\r
+ return true;\r
+ }\r
+\r
+ logger.error(marker, "A fájl másolása nem lehetséges: {}", sourceFilePath);\r
+ return false;\r
+ }\r
+\r
+ public BasicDBObject queryExclude(String fileName) {\r
+ if (db == null)\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ if (excludes == null)\r
+ excludes = db.getCollection("hsm_migrate_exclude");\r
+ Path filePath = Paths.get(fileName);\r
+ String pureFileName = FilenameUtils.removeExtension(filePath.getFileName().toString());\r
+ QueryBuilder qb = QueryBuilder.start("name").in(Arrays.asList(fileName, pureFileName));\r
+ BasicDBObject exceptionResult = NoSQLUtils.asSingle(excludes.find(qb.get()));\r
+ return exceptionResult;\r
+ }\r
+\r
+ public BasicDBObject queryFileHistory(String fileName) {\r
+ if (db == null)\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ if (fileHistory == null)\r
+ fileHistory = db.getCollection("hsm_migrate_file_history");\r
+ QueryBuilder qb = QueryBuilder.start("name").in(Arrays.asList(fileName));\r
+ BasicDBObject historyResult = NoSQLUtils.asSingle(fileHistory.find(qb.get()));\r
+ return historyResult;\r
+ }\r
+\r
+ public BasicDBObject queryVolumeHistory(String volumeName) {\r
+ if (db == null)\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ if (volumeHistory == null)\r
+ volumeHistory = db.getCollection("hsm_migrate_volume_history");\r
+ QueryBuilder qb = QueryBuilder.start("name").in(Arrays.asList(volumeName));\r
+ BasicDBObject historyResult = NoSQLUtils.asSingle(volumeHistory.find(qb.get()));\r
+ return historyResult;\r
+ }\r
+\r
+ public void resumeableCopy(Path source, Path target) throws Exception {\r
+ File sourceFile = source.toFile();\r
+ File targetFile = target.toFile();\r
+ boolean targetExists = targetFile.exists();\r
+\r
+ long targetLength = targetFile.length();\r
+ long sourceLength = sourceFile.length();\r
+\r
+ try (InputStream in = new BufferedInputStream(new FileInputStream(sourceFile));\r
+ OutputStream out = new BufferedOutputStream(new FileOutputStream(targetFile, targetExists))) {\r
+\r
+ byte[] buffer = new byte[128 * 1024];\r
+ int lengthRead;\r
+\r
+ if (targetExists)\r
+ in.skip(targetLength);\r
+\r
+ while ((lengthRead = in.read(buffer)) > 0) {\r
+ out.write(buffer, 0, lengthRead);\r
+ out.flush();\r
+ targetLength = targetFile.length();\r
+ if (targetLength > sourceLength) {\r
+ throw new Exception("Hiba! A fájl túl nagy lett.");\r
+ }\r
+\r
+ if (getJobRuntime().isWaitingCancel()) {\r
+ break;\r
+ }\r
+ }\r
+\r
+ targetLength = targetFile.length();\r
+ sourceLength = sourceFile.length();\r
+ if (targetLength != sourceLength) {\r
+ throw new Exception("Hiba! A fájl mérete nem egyezik.");\r
+ }\r
+ }\r
+ }\r
+\r
+ private void saveFileHistory(String fileName) {\r
+ if (db == null)\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ if (fileHistory == null)\r
+ fileHistory = db.getCollection("hsm_migrate_file_history");\r
+ BasicDBObject item = new BasicDBObject();\r
+ item.put("name", fileName);\r
+ fileHistory.save(item);\r
+\r
+ }\r
+\r
+ private void saveVolumeHistory(String volumeName) {\r
+ if (db == null)\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ if (volumeHistory == null)\r
+ volumeHistory = db.getCollection("hsm_migrate_volume_history");\r
+ BasicDBObject item = new BasicDBObject();\r
+ item.put("name", volumeName);\r
+ volumeHistory.save(item);\r
+\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+\r
+import user.commons.RemoteFile;\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.IProgressEventListener;\r
+import user.commons.remotestore.ProgressEvent;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+//import user.jobengine.db.Media;\r
+import user.jobengine.db.ArchivedMedia;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.Store;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class MXFCutterStep extends JobStep {\r
+ private static final String TARGETNAMEPATTERN = "-ARCH-%s";\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private IItemManager manager;\r
+ private StoreUri tempTargetUri;\r
+ private StoreUri tempSourceUri;\r
+ private String sourceFileName;\r
+ private Marker marker;\r
+ private int nexioPort;\r
+ private String nexioUserName, nexioPassword;\r
+ private String nexioHost;\r
+\r
+ protected void checkTargetPath(String targetPath) {\r
+ if (StringUtils.isBlank(targetPath)) {\r
+ logger.error(marker, "A folyamat 'targetPath' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'targetPath' input parameter missing.");\r
+ }\r
+ }\r
+\r
+ protected StoreUri createTargetUri(IItemManager manager, String targetPath) throws NullPointerException {\r
+ StoreUri result = null;\r
+ result = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost);\r
+ result.setPortNumber(nexioPort);\r
+ result.setUserName(nexioUserName);\r
+ result.setPassword(nexioPassword);\r
+\r
+ return result;\r
+ }\r
+\r
+ @StepEntry\r
+ public Object[] execute(ArchivedMedia archivedMedia, String targetPath, String houseId, String successRecipient, int killDateDays, boolean useNexioTarget,\r
+ String nexioAgency, int nexioPort, String nexioUserName, String nexioPassword, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ this.nexioPort = nexioPort;\r
+ this.nexioUserName = nexioUserName;\r
+ this.nexioPassword = nexioPassword;\r
+ nexioHost = System.getProperty("nexio.host");\r
+ marker = jobRuntime.getSessionMarker();\r
+\r
+ if (useNexioTarget && archivedMedia.getTcIn() != null && archivedMedia.getTcOut() != null) {\r
+ setAndCheck(archivedMedia, houseId, targetPath, useNexioTarget, jobEngine);\r
+\r
+ final IJobRuntime runtime = jobRuntime;\r
+ sourceFileName = houseId + TARGETNAMEPATTERN;\r
+ tempSourceUri.addProgressListener(new IProgressEventListener() {\r
+ @Override\r
+ public void progressChanged(ProgressEvent evt) {\r
+ runtime.incrementProgress(evt.getProgress());\r
+ }\r
+ });\r
+\r
+ RemoteFile result = tempSourceUri.transferFrom(tempTargetUri, sourceFileName, sourceFileName);\r
+\r
+ EscortFiles.setNEXIOKillDate(killDateDays, houseId, nexioAgency, tempTargetUri);\r
+\r
+ logger.info("A {} videó kivágva {}s - {}s", sourceFileName, archivedMedia.getTcIn(), archivedMedia.getTcOut());\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ // private String getSourceFileName(ArchivedMedia archivedMedia, Store\r
+ // store) {\r
+ // List<MediaFile> mediaFiles = archivedMedia.getMedia().getMediaFiles();\r
+ // if (mediaFiles == null)\r
+ // return null;\r
+ // for (MediaFile mediaFile : mediaFiles) {\r
+ // if (mediaFile.getStore().getId() == store.getId())\r
+ // return mediaFile.getRelativePath();\r
+ // }\r
+ // return null;\r
+ // }\r
+\r
+ private void setAndCheck(ArchivedMedia archivedMedia, String houseId, String targetPath, boolean useNexioTarget, IJobEngine jobEngine) {\r
+ if (jobEngine == null) {\r
+ logger.error(marker, "A 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 (archivedMedia == 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
+ checkTargetPath(targetPath);\r
+ if (StringUtils.isBlank(houseId)) {\r
+ logger.error(marker, "A folyamat 'houseId' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'houseId' input parameter missing.");\r
+ }\r
+ Store 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
+\r
+ tempSourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, targetPath);\r
+ if (tempSourceUri == 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
+ tempTargetUri = createTargetUri(manager, targetPath);\r
+ // sourceFileName = getSourceFileName(archivedMedia, tsmStore);\r
+ if (sourceFileName == null) {\r
+ logger.error(marker, "Adatbázis bejegyzés hiba, a visszatöltendő fájl neve nem található.");\r
+ throw new NullPointerException("Database error, missing MediaFile 'relativePath'.");\r
+ }\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\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
+import org.apache.logging.log4j.Marker;\r
+\r
+import user.commons.mediatool.MediaInfo;\r
+import user.jobengine.db.Media;\r
+\r
+public class MediaToolStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private Marker marker;\r
+\r
+ @StepEntry\r
+ public Object[] execute(ArchiveItem archiveItem, Media mediaCubeMedia) throws Exception {\r
+ marker = getSessionMarker();\r
+\r
+ //TODO ez most minden esetben ujranezi\r
+ // if (mediaCubeMedia.getLength() > 0)\r
+ // return null;\r
+\r
+ Path filePath = Paths.get(archiveItem.getMediaFile());\r
+ MediaInfo mi = new MediaInfo(filePath);\r
+ try {\r
+ mi.process();\r
+ long frames = mi.getFrames();\r
+ if (frames > 0) {\r
+ mediaCubeMedia.setLength(frames);\r
+ getManager().modify(mediaCubeMedia);\r
+ }\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ logger.error(marker, "A '{}' média analizálása sikertelen. A rendszer üzenete: {}", filePath, e.getMessage());\r
+ }\r
+ return null;\r
+ }\r
+\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.File;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.attribute.FileAttribute;\r
+import java.nio.file.attribute.PosixFilePermission;\r
+import java.nio.file.attribute.PosixFilePermissions;\r
+import java.util.Date;\r
+import java.util.Set;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+\r
+import com.ibm.nosql.json.api.BasicDBList;\r
+\r
+import user.jobengine.db.Item;\r
+import user.jobengine.db.ItemManager;\r
+import user.jobengine.db.ItemType;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+/**\r
+ * Itemek es mediak krealasa a ArchiveItem objektum alapjan.\r
+ *\r
+ * @author robi\r
+ */\r
+public class MetadataTransformStep extends JobStep {\r
+ private static final String CONFLICT = ".CONFLICT";\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String ITEM_MANAGER_IS_NULL = "ItemManager is null";\r
+ public static final String DEFAULT_MEDIATYPE = "Generic";\r
+ private ItemManager itemManager;\r
+\r
+ private Marker marker;;\r
+\r
+ private void addTags(ArchiveItem archiveItem, Media mediaCubeMedia) {\r
+ BasicDBList tags = archiveItem.getTags();\r
+ if (tags != null) {\r
+ for (Object tag : tags) {\r
+\r
+ try {\r
+ String tagText = String.valueOf(tag);\r
+ itemManager.addMediaTag(tagText, mediaCubeMedia.getId());\r
+ System.out.println();\r
+\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ private void checkDuplicates(ArchiveItem archiveItem, String sourceFileName) throws Exception {\r
+ if (itemManager.isMediaFileExists(sourceFileName)) {\r
+ try {\r
+ Path sourcePath = Paths.get(archiveItem.getMediaFile());\r
+ Path parent = sourcePath.getParent();\r
+ Path conflictPath = Paths.get(parent.toString(), CONFLICT);\r
+ File folder = conflictPath.toFile();\r
+ if (!folder.exists() || !folder.isDirectory()) {\r
+ Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");\r
+ FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);\r
+ try {\r
+ Files.createDirectories(conflictPath, attr);\r
+ } catch (Exception e) {\r
+ try {\r
+ Files.createDirectory(conflictPath);\r
+ } catch (Exception e1) {\r
+ logger.catching(e);\r
+ throw e;\r
+ }\r
+ }\r
+ }\r
+\r
+ Files.move(sourcePath, Paths.get(conflictPath.toString(), sourceFileName + (new Date()).getTime()));\r
+ } catch (Exception e1) {\r
+ logger.catching(e1);\r
+ logger.error(marker, "Hiba az '{}' állomány mappába másolásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage());\r
+ }\r
+ throw new Exception("Az '" + sourceFileName + "' állomány már megtalálható az archívumban, archiválása nem lehetséges.");\r
+ }\r
+ }\r
+\r
+ private Item createItem(ArchiveItem archiveItem) {\r
+ Item mediaCubeItem = getExistingItem(archiveItem.getItemHouseId(), archiveItem.getItemTitle());\r
+ if (mediaCubeItem == null)\r
+ mediaCubeItem = itemManager.createItem(DEFAULT_MEDIATYPE, archiveItem.getItemTitle(), archiveItem.getItemDescription(),\r
+ archiveItem.getItemHouseId());\r
+ return mediaCubeItem;\r
+ }\r
+\r
+ private Media createMedia(ArchiveItem archiveItem, Item mediaCubeItem, String mediaType) {\r
+ Media mediaCubeMedia;\r
+ mediaCubeMedia = itemManager.createMedia(mediaType, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(), archiveItem.getMediaHouseId());\r
+ mediaCubeMedia.setLength(archiveItem.getDuration());\r
+ mediaCubeItem.appendMedia(mediaCubeMedia);\r
+\r
+ return mediaCubeMedia;\r
+ }\r
+\r
+ @StepEntry\r
+ public Object[] execute(ArchiveItem archiveItem, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ marker = jobRuntime.getSessionMarker();\r
+ Media mediaCubeMedia = null;\r
+ itemManager = (ItemManager) jobEngine.getItemManager();\r
+ if (itemManager == null)\r
+ throw new NullPointerException(ITEM_MANAGER_IS_NULL);\r
+ try {\r
+ File sourceMediaFile = new File(archiveItem.getMediaFile());\r
+ String sourceFileName = sourceMediaFile.getName();\r
+ checkDuplicates(archiveItem, sourceFileName);\r
+ Item mediaCubeItem = createItem(archiveItem);\r
+ jobRuntime.incrementProgress(50);\r
+ String mediaType = getCreateType(archiveItem);\r
+ mediaCubeMedia = createMedia(archiveItem, mediaCubeItem, mediaType);\r
+ //ha itemid 0 akkor merge, egyebkent media insert\r
+\r
+ if (mediaCubeItem.getId() == 0)\r
+ itemManager.mergeItemStructure(mediaCubeItem);\r
+ else {\r
+ mediaCubeMedia.setItemId(mediaCubeItem.getId());\r
+ mediaCubeMedia.add();\r
+ }\r
+\r
+ addTags(archiveItem, mediaCubeMedia);\r
+\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ String fileName = new File(archiveItem.getMediaFile()).getName();\r
+ logger.error(marker, "Az '{}' állomány nem archiválható, mert a metaadat transzformáció sikertelen. A rendszer üzenete: {}", fileName,\r
+ e.getMessage());\r
+ if (!archiveItem.removeCatchedFile())\r
+ logger.error(marker, "Az '{}' állomány .catched jelző állománya nem törölhető.", fileName);\r
+ throw e;\r
+ } finally {\r
+ jobRuntime.incrementProgress(100);\r
+ }\r
+ return new Object[] { mediaCubeMedia };\r
+ }\r
+\r
+ private String getCreateType(ArchiveItem archiveItem) {\r
+ String mediaType = archiveItem.getMediaType();\r
+ if (mediaType == null || mediaType.length() == 0)\r
+ mediaType = DEFAULT_MEDIATYPE;\r
+ else {\r
+ ItemType mediaItemType = itemManager.getItemType(mediaType);\r
+ if (mediaItemType == null)\r
+ itemManager.createItemType(mediaType, mediaType).add();\r
+ }\r
+ return mediaType;\r
+ }\r
+\r
+ private Item getExistingItem(String itemHouseId, String itemTitle) {\r
+ Item[] result = new Item[] { null };\r
+ String sql = String.format("select id from item where houseid='%s' and title='%s'", itemHouseId, itemTitle);\r
+ itemManager.executeQuery(sql, rs -> {\r
+ long id = rs.getLong("id");\r
+ result[0] = itemManager.getItem(id);\r
+ return true;\r
+ }, null);\r
+ return result[0];\r
+ }\r
+\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.IOException;\r
+import java.nio.file.FileVisitResult;\r
+import java.nio.file.FileVisitor;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.SimpleFileVisitor;\r
+import java.nio.file.attribute.BasicFileAttributes;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+\r
+import user.jobengine.db.ArchivedMedia;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class OutputPathAndNameSelectorStep extends JobStep {\r
+\r
+ private static final String TARGETNAMEPATTERN = "-ARCH-%s";\r
+\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ private Marker marker;\r
+\r
+ private void check(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder,\r
+ String octopusOutputFolder, String genericOutputFolder, String houseId, String targetPathType) {\r
+ if (StringUtils.isBlank(localRetrievePath)) {\r
+ logger.error(marker, "A folyamat 'localRetrievePath' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'localRetrievePath' input parameter missing.");\r
+ }\r
+ if (StringUtils.isBlank(materialOutputFolder)) {\r
+ logger.error(marker, "A folyamat 'materialOutputFolder' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'materialOutputFolder' input parameter missing.");\r
+ }\r
+ if (StringUtils.isBlank(promoOutputFolder)) {\r
+ logger.error(marker, "A folyamat 'promoOutputFolder' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'promoOutputFolder' input parameter missing.");\r
+ }\r
+ if (StringUtils.isBlank(advertisementOutputFolder)) {\r
+ logger.error(marker, "A folyamat 'advertisementOutputFolder' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'advertisementOutputFolder' input parameter missing.");\r
+ }\r
+ if (StringUtils.isBlank(octopusOutputFolder)) {\r
+ logger.error(marker, "A folyamat 'octopusOutputFolder' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'octopusOutputFolder' input parameter missing.");\r
+ }\r
+ if (StringUtils.isBlank(genericOutputFolder)) {\r
+ logger.error(marker, "A folyamat 'genericOutputFolder' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'genericOutputFolder' input parameter missing.");\r
+ }\r
+ if (StringUtils.isBlank(houseId)) {\r
+ logger.error(marker, "A folyamat 'houseId' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'houseId' input parameter missing.");\r
+ }\r
+ if (StringUtils.isBlank(targetPathType)) {\r
+ logger.error(marker, "A folyamat 'targetPathType' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'targetPathType' input parameter missing.");\r
+ }\r
+ }\r
+\r
+ @StepEntry\r
+ public Object[] execute(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder,\r
+ String octopusOutputFolder, String genericOutputFolder, String onlineOutputFolder, String houseId, String targetPathType,\r
+ ArchivedMedia archivedMedia, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ marker = jobRuntime.getSessionMarker();\r
+ check(localRetrievePath, materialOutputFolder, promoOutputFolder, advertisementOutputFolder, octopusOutputFolder, genericOutputFolder, houseId,\r
+ targetPathType);\r
+ Object[] result = null;\r
+ switch (Integer.parseInt(targetPathType)) {\r
+ case 0:\r
+ String outputFolder = getFolderById(materialOutputFolder, promoOutputFolder, advertisementOutputFolder, octopusOutputFolder, genericOutputFolder,\r
+ houseId, archivedMedia);\r
+ result = localTargetInit(localRetrievePath, outputFolder, houseId, jobRuntime);\r
+ break;\r
+ case 1:\r
+ result = localTargetInit(localRetrievePath, onlineOutputFolder, houseId, jobRuntime);\r
+ break;\r
+ case 2:\r
+\r
+ if (archivedMedia.getTcIn() != null && archivedMedia.getTcOut() != null)\r
+ result = new Object[] { genericOutputFolder, houseId, true };\r
+ else\r
+ result = new Object[] { null, houseId, true };\r
+ break;\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private String getFolderById(String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder, String octopusOutputFolder,\r
+ String genericOutputFolder, String houseId, ArchivedMedia archivedMedia) throws Exception {\r
+ String id = houseId.toUpperCase();\r
+ MetadataType mdType = MetadataTypeDetector.GuessMetadataType(id);\r
+ String result = null;\r
+\r
+ //a groovy nem latja enumnak, hanem az objektum tulajdonsaganak\r
+ switch (mdType.toString()) {\r
+ case "OctopusPlaceholder":\r
+ case "OctopusStory":\r
+ result = octopusOutputFolder;\r
+ break;\r
+ case "TrafficMaterial":\r
+ result = materialOutputFolder;\r
+ break;\r
+ case "TrafficPromo":\r
+ result = promoOutputFolder;\r
+ break;\r
+ case "TrafficAD":\r
+ result = advertisementOutputFolder;\r
+ break;\r
+ case "Generic":\r
+ result = genericOutputFolder;\r
+ break;\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private String getPossiblePath(String id, Path targetPath) throws IOException {\r
+ String[] result = new String[] { targetPath.toString() };\r
+ FileVisitor<Path> matcherVisitor = new SimpleFileVisitor<Path>() {\r
+ @Override\r
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {\r
+ String dirName = dir.getFileName().toString();\r
+ if (dirName.startsWith(id + "-") || dirName.equals(id)) {\r
+ result[0] = dir.toString();\r
+ return FileVisitResult.TERMINATE;\r
+ }\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+ };\r
+ Files.walkFileTree(targetPath.getParent(), matcherVisitor);\r
+ return result[0];\r
+ }\r
+\r
+ private Object[] localTargetInit(String localRetrievePath, String outputFolder, String houseId, IJobRuntime jobRuntime) throws IOException {\r
+ String id = houseId.toUpperCase();\r
+ String targetPath = getPossiblePath(id, Paths.get(localRetrievePath, outputFolder, id)).toString();\r
+ String targetNamePattern = houseId + TARGETNAMEPATTERN;\r
+ try {\r
+ EscortFiles.ensureUNCFolder(Paths.get(targetPath));\r
+ } catch (Exception e) {\r
+ logger.error(jobRuntime.getSessionMarker(), "A cél mappa '{}' nem létezik és nem hozható létre. A rendszer hibaüzenete: {}", targetPath,\r
+ e.getMessage());\r
+ throw e;\r
+ }\r
+ return new Object[] { targetPath, targetNamePattern, false };\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.IOException;\r
+import java.nio.file.FileVisitResult;\r
+import java.nio.file.FileVisitor;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.SimpleFileVisitor;\r
+import java.nio.file.attribute.BasicFileAttributes;\r
+import java.util.ArrayList;\r
+import java.util.List;\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
+/* DO NOT REMOVE!\r
+import user.jobengine.server.steps.FileSearchFilterOptions;\r
+ */\r
+\r
+public class PathItemsCollectorStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ @StepEntry\r
+ public Object[] execute(String sourceFolder, BasicDBObject filter) throws Exception {\r
+ Path sourcePath = Paths.get(sourceFolder);\r
+\r
+ List<String> files = new ArrayList<>();\r
+\r
+ //teljes rekurzivitas szuressel\r
+ FileSearchFilterOptions filterOptions = new FileSearchFilterOptions(filter);\r
+ FileVisitor<Path> visitor = new SimpleFileVisitor<Path>() {\r
+ @Override\r
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {\r
+ if (!filterOptions.preAcceptDirectory(dir))\r
+ return FileVisitResult.SKIP_SUBTREE;\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+\r
+ @Override\r
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {\r
+ if (filterOptions.acceptFile(file))\r
+ files.add(file.toString());\r
+ logger.info(file);\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+\r
+ @Override\r
+ public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+\r
+ };\r
+\r
+ try {\r
+ Files.walkFileTree(sourcePath, visitor);\r
+ } catch (Exception e) {\r
+ logger.error(getSessionMarker(), "Hiba a '{}' mappa feldolgozásában. A rendszer hibaüzenete: {}", sourcePath, e.getMessage());\r
+ logger.catching(e);\r
+ throw e;\r
+ } finally {\r
+ }\r
+ return new Object[] { files };\r
+ }\r
+}\r
--- /dev/null
+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.mediatool.Timecode;\r
+import user.commons.mediatool.Timecode.Type;\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 TSMBackupStep 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
+ Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL);\r
+ String details = String.format("%s (%s, %d bytes)", sourceFileName, timecode.toString(), sourceMediaFile.length());\r
+ getJobRuntime().setDescription(details);\r
+ try {\r
+\r
+ setAndCheck(archiveItem, mediaCubeMedia, getEngine());\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
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.db.ArchivedMedia;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class TSMExtendedRetrieveStep extends TSMRestoreStep {\r
+ private static String NEXIO_HOST = System.getProperty("nexio.host");\r
+ // private static String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host");\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ private boolean useNexioTarget;\r
+ private int nexioPort;\r
+ private String nexioUserName, nexioPassword;\r
+ private String nexioAgency;\r
+\r
+ @Override\r
+ protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) throws Exception {\r
+ if (useNexioTarget) {\r
+ EscortFiles.setNEXIOKillDate(killDateDays, targetFileName, nexioAgency, targetUri);\r
+ } else {\r
+ super.afterRestore(targetUri, targetPath, killDateDays, targetFileName);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ protected void beforeRestore(StoreUri targetURI, String targetName) throws Exception {\r
+ String newTargetName = targetName;\r
+ if (targetName.contains("."))\r
+ newTargetName = targetName.substring(0, targetName.lastIndexOf('.'));\r
+ if (useNexioTarget)\r
+ if (targetURI.fileExists(newTargetName + ".mxf"))\r
+ throw new Exception(String.format("%s-The newly created file name is existed.", getClass().getSimpleName()));\r
+ }\r
+\r
+ @Override\r
+ protected void checkTargetPath(String targetPath) {\r
+ if (!useNexioTarget)\r
+ super.checkTargetPath(targetPath);\r
+ }\r
+\r
+ @Override\r
+ protected StoreUri createTargetUri(IItemManager manager, String targetPath) throws NullPointerException {\r
+ StoreUri result = null;\r
+ logger.info(getSessionMarker(), "Create target uri {}", targetPath);\r
+ if (useNexioTarget) {\r
+ if (NEXIO_HOST == null) {\r
+ throw new NullPointerException("Missing system property on 'nexio.host' name");\r
+ }\r
+ result = manager.createStoreUri(RemoteStoreProtocol.FTP, NEXIO_HOST);\r
+ result.setPortNumber(nexioPort);\r
+ result.setUserName(nexioUserName);\r
+ result.setPassword(nexioPassword);\r
+ } else\r
+ result = super.createTargetUri(manager, targetPath);\r
+ return result;\r
+ }\r
+\r
+ @StepEntry\r
+ public Object[] execute(ArchivedMedia archivedMedia, String targetPath, String targetNamePattern, String successRecipient, int killDateDays,\r
+ String localRetrievePath, String globalRetrievePath, boolean useNexioTarget, String nexioAgency, int nexioPort, String nexioUserName,\r
+ String nexioPassword, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ this.useNexioTarget = useNexioTarget;\r
+ this.nexioAgency = nexioAgency;\r
+ this.nexioPort = nexioPort;\r
+ this.nexioUserName = nexioUserName;\r
+ this.nexioPassword = nexioPassword;\r
+ if (nexioPort == 0) {\r
+ throw new NullPointerException("System is not configured properly, 'nexioPort' input parameter missing.");\r
+ }\r
+ if (nexioUserName == null) {\r
+ throw new NullPointerException("System is not configured properly, 'nexioUserName' input parameter missing.");\r
+ }\r
+ if (nexioPassword == null) {\r
+ throw new NullPointerException("System is not configured properly, 'nexioPassword' input parameter missing.");\r
+ }\r
+ if (nexioAgency == null) {\r
+ throw new NullPointerException("System is not configured properly, 'nexioAgency' input parameter missing.");\r
+ }\r
+\r
+ return super.execute(archivedMedia.getMedia(), targetPath, targetNamePattern, successRecipient, killDateDays, localRetrievePath, globalRetrievePath,\r
+ jobEngine, jobRuntime);\r
+ }\r
+\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.IOException;\r
+import java.nio.file.Paths;\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
+import org.apache.logging.log4j.Marker;\r
+import org.apache.logging.log4j.message.Message;\r
+\r
+import user.commons.LogUtils;\r
+import user.commons.RemoteFile;\r
+import user.commons.StoreUri;\r
+import user.commons.mediatool.Timecode;\r
+import user.commons.mediatool.Timecode.Type;\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.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
+\r
+public class TSMRestoreStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private IItemManager manager;\r
+ private StoreUri targetUri;\r
+ private StoreUri sourceUri;\r
+ private String sourceFileName;\r
+ private Marker marker;\r
+\r
+ protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) throws IOException, Exception {\r
+ if (killDateDays > 0)\r
+ EscortFiles.createUNCKillDate(targetPath, targetFileName, killDateDays, marker);\r
+ }\r
+\r
+ protected void beforeRestore(StoreUri targetURI, String targetFileName) throws Exception {\r
+ }\r
+\r
+ protected void checkTargetPath(String targetPath) {\r
+ if (StringUtils.isBlank(targetPath)) {\r
+ logger.error(marker, "A folyamat 'targetPath' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'targetPath' input parameter missing.");\r
+ }\r
+ }\r
+\r
+ protected StoreUri createTargetUri(IItemManager manager, String targetPath) {\r
+ return manager.createStoreUri(RemoteStoreProtocol.LOCAL, targetPath);\r
+ }\r
+\r
+ @StepEntry\r
+ public Object[] execute(Media mediaCubeMedia, String targetPath, String targetNamePattern, String successRecipient, int killDateDays,\r
+ String localRetrievePath, String globalRetrievePath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ marker = jobRuntime.getSessionMarker();\r
+ setAndCheck(mediaCubeMedia, targetPath, targetNamePattern, localRetrievePath, globalRetrievePath, jobEngine);\r
+ String targetFileName = String.format(targetNamePattern, sourceFileName);\r
+ Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL);\r
+ try {\r
+ String details = String.format("%s (%s)", sourceFileName, timecode.toString());\r
+ jobRuntime.setDescription(details);\r
+ beforeRestore(targetUri, targetNamePattern);\r
+ final IJobRuntime runtime = jobRuntime;\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
+ RemoteFile result = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName);\r
+\r
+ String globalTargetPath = Paths.get(targetPath, targetFileName).getParent().toString().replace(Paths.get(localRetrievePath).toString(),\r
+ globalRetrievePath);\r
+\r
+ logger.info(marker,\r
+ "Az '{}' állomány visszatöltése sikeres volt '{}' néven. A célmappa a <a href='{}' target='_blank'>ide kattintva</a> nyitható meg.",\r
+ sourceFileName, targetFileName, globalTargetPath);\r
+ afterRestore(targetUri, targetPath, killDateDays, targetFileName);\r
+\r
+ } catch (Exception e) {\r
+ Message msg = LogUtils.format("Az '{}' állomány visszatöltése sikertelen. A rendszer hibaüzenete: {}", sourceFileName, e.getMessage());\r
+ logger.error(marker, msg);\r
+ // logger.error(jobRuntime.marker, msg);\r
+ logger.catching(e);\r
+ throw e;\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ private String getSourceFileName(Media mediaCubeMedia, Store store) {\r
+ List<MediaFile> mediaFiles = mediaCubeMedia.getMediaFiles();\r
+ if (mediaFiles == null)\r
+ return null;\r
+ for (MediaFile mediaFile : mediaFiles) {\r
+ if (mediaFile.getStore().getId() == store.getId())\r
+ return mediaFile.getRelativePath();\r
+ }\r
+ return null;\r
+ }\r
+\r
+ private void setAndCheck(Media mediaCubeMedia, String targetPath, String targetNamePattern, String localRetrievePath, String globalRetrievePath,\r
+ IJobEngine jobEngine) {\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 (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
+ checkTargetPath(targetPath);\r
+ if (StringUtils.isBlank(targetNamePattern)) {\r
+ logger.error(marker, "A folyamat 'targetNamePattern' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'targetNamePattern' input parameter missing.");\r
+ }\r
+ Store 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
+ sourceUri = tsmStore.getSourceStoreUri(RemoteStoreProtocol.TSM);\r
+ if (sourceUri == 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
+ targetUri = createTargetUri(manager, targetPath);\r
+ sourceFileName = getSourceFileName(mediaCubeMedia, tsmStore);\r
+ if (sourceFileName == null) {\r
+ logger.error(marker, "Adatbázis bejegyzés hiba, a visszatöltendő fájl neve nem található.");\r
+ throw new NullPointerException("Database error, missing MediaFile 'relativePath'.");\r
+ }\r
+\r
+ if (StringUtils.isBlank(localRetrievePath)) {\r
+ logger.error(marker, "A folyamat 'localRetrievePath' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'localRetrievePath' input parameter missing.");\r
+ }\r
+ if (StringUtils.isBlank(globalRetrievePath)) {\r
+ logger.error(marker, "A folyamat 'globalRetrievePath' bemeneti paramétere üres.");\r
+ throw new NullPointerException("System is not configured properly, 'globalRetrievePath' input parameter missing.");\r
+ }\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.nio.file.Files;\r
+import java.nio.file.Paths;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.StoreUri;\r
+import user.commons.mediatool.Timecode;\r
+import user.commons.mediatool.Timecode.Type;\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.Media;\r
+import user.jobengine.db.MediaFile;\r
+import user.jobengine.db.Store;\r
+\r
+public class TSMSimpleRestoreStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ @StepEntry\r
+ public Object[] execute(long mediaId, String targetPath) throws Exception {\r
+ String fileName = null;\r
+ try {\r
+ Media media = getManager().getMedia(mediaId);\r
+ MediaFile mediaFile = getManager().getSystemMediaFile(media);\r
+ fileName = mediaFile.getRelativePath();\r
+ Timecode timecode = new Timecode(media.getLength(), Type.PAL);\r
+ getJobRuntime().setDescription(String.format("%s (%s)", fileName, timecode.toString()));\r
+ Store tsmStore = getManager().getSystemStore(false);\r
+ StoreUri sourceStoreUri = getManager().getStoreUri(tsmStore.getName(), RemoteStoreProtocol.TSM);\r
+ sourceStoreUri.addProgressListener(new IProgressEventListener() {\r
+ @Override\r
+ public void progressChanged(ProgressEvent evt) {\r
+ setProgress(evt.getProgress());\r
+ }\r
+ });\r
+ sourceStoreUri.addStatusListener(new IStatusEventListener() {\r
+ @Override\r
+ public void statusChanged(StatusEvent evt) {\r
+ evt.setCancel(!canContinue());\r
+ }\r
+ });\r
+ StoreUri targetStoreUri = getManager().createStoreUri(RemoteStoreProtocol.LOCAL, targetPath);\r
+ sourceStoreUri.transferFrom(targetStoreUri, fileName, fileName + ".part");\r
+ Files.move(Paths.get(targetPath, fileName + ".part"), Paths.get(targetPath, fileName));\r
+ } catch (Exception e) {\r
+ logger.error("Az '{}' állomány visszatöltése sikertelen. A rendszer üzenete: {}", fileName, e.getMessage());\r
+ throw e;\r
+ }\r
+\r
+ return null;\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.IJob;\r
+import user.commons.JobStatus;\r
+import user.commons.ListUtils;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class TestForkCancelableStep extends JobStep {\r
+ private static final String CHILD_TITLE = "Párhuzamosított alfolyamat";\r
+ // private static final String CHILD_TEMPLATE = "fake-concurrent.xml";\r
+ private static final String CHILD_TEMPLATE = "cancelable.xml";\r
+ private static final Logger logger = LogManager.getLogger();\r
+ int count = 3;\r
+\r
+ @StepEntry\r
+ public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ for (int i = 0; i < count; i++) {\r
+ IJobRuntime rt = getEngine().submit(null, e -> {\r
+ if (e.getStatus().equals(JobStatus.SUSPENDED)) {\r
+ IJobRuntime rt = (IJobRuntime) e.getSource();\r
+ logger.info("Cleanup on SUSPEND {}, {}", rt.getId(), rt.isDisableRetry());\r
+ }\r
+ }, CHILD_TEMPLATE, "JOB " + i, 0, IJobEngine.DEFAULT_OWNER, ListUtils.asMap("param", i));\r
+ \r
+ rt.setRelated("TEST" + rt.getId());\r
+ }\r
+\r
+ logger.info("Done");\r
+ return null;\r
+ }\r
+}\r
--- /dev/null
+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.Path;\r
+import java.nio.file.Paths;\r
+\r
+import org.apache.commons.io.FilenameUtils;\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.FFAStransAPI;\r
+import user.commons.IFFAStransAPI;\r
+import user.commons.StoreUri;\r
+import user.commons.mediatool.Timecode;\r
+import user.commons.mediatool.Timecode.Type;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.db.FileType;\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.db.Store;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class TranscodeFFAStranStep extends JobStep {\r
+ private static final int POLL_INTERVALL = 3000;\r
+ private static final String MP4EXT = ".MP4";\r
+ private static final String MXFEXT = ".MXF";\r
+ private static final String LOWRES_FILETYPE = "Low-res";\r
+ private static final Logger logger = LogManager.getLogger("TranscodeFFAStranStep");\r
+ private IItemManager manager;\r
+ private Store store;\r
+ private FileType fileType;\r
+ private Media mediaCubeMedia;\r
+ private Marker marker;\r
+\r
+ @StepEntry\r
+ public Object[] execute(ArchiveItem archiveItem, Media mediaCubeMedia, String transcoderAddress, String transcoderTemplateName,\r
+ String globalHiresSourcePath, String localLowresTargetPath, boolean deleteSource, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+\r
+ this.marker = jobRuntime.getSessionMarker();\r
+ this.manager = jobEngine.getItemManager();\r
+ this.store = check(manager.getCurrentLowresStore(), "lowres Store");\r
+ this.fileType = check(manager.getFileType(LOWRES_FILETYPE), "lowres FileType");\r
+ this.mediaCubeMedia = check(mediaCubeMedia, "mediaCubeMedia");\r
+ check(archiveItem, "archiveItem");\r
+ check(transcoderAddress, "transcoderAddress");\r
+ check(transcoderTemplateName, "transcoderTemplateName");\r
+ check(globalHiresSourcePath, "globalHiresSourcePath");\r
+ check(localLowresTargetPath, "localLowresTargetPath");\r
+\r
+ File sourceMediaFile = new File(archiveItem.getMediaFile());\r
+ logger.info("Transcoding {}", archiveItem.getMediaFile());\r
+ String sourceFileName = sourceMediaFile.getName();\r
+ Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL);\r
+\r
+ String details = String.format("%s (%s, %d bytes)", sourceFileName, timecode.toString(), sourceMediaFile.length());\r
+\r
+ StoreUri storeUri = store.getTargetStoreUri(RemoteStoreProtocol.LOCAL);\r
+ if (storeUri == null)\r
+ throw new Exception("Can not detect proxy folder.");\r
+\r
+ String webPath = storeUri.toString(true);\r
+\r
+ Path targetPath = null;\r
+ try {\r
+ String targetFileName = FilenameUtils.removeExtension(sourceFileName) + MP4EXT;\r
+ targetPath = Paths.get(localLowresTargetPath, targetFileName);\r
+ if (!targetPath.toFile().exists()) {\r
+ // jobRuntime.setDescription(String.format("%s: %s", jobRuntime.getDescription(), details));\r
+ jobRuntime.setDescription(String.format("%s transzkódolása", details));\r
+ String sourceFile = Paths.get(globalHiresSourcePath, sourceFileName).toString();\r
+ IFFAStransAPI api = new FFAStransAPI(transcoderAddress, p -> {\r
+ if (p <= 100)\r
+ jobRuntime.incrementProgress(p);\r
+ });\r
+\r
+ api.submit(transcoderTemplateName, sourceFile);\r
+ api.monitor(POLL_INTERVALL);\r
+ }\r
+\r
+ //a sikeres transzkod utan nem mindig van ott egybol a fajl\r
+ long started = System.currentTimeMillis();\r
+ while (!targetPath.toFile().exists()) {\r
+ long current = System.currentTimeMillis();\r
+ //max 5 perc varakozas\r
+ if (current - started > 5 * 60 * 1000)\r
+ throw new Exception("Transcode job target file access timed out");\r
+ Thread.sleep(POLL_INTERVALL);\r
+ }\r
+\r
+ postprocess(targetPath, webPath);\r
+\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ Message m = new ParameterizedMessage("{} átkódolás hiba: {}", sourceFileName, e.getMessage());\r
+ logger.error(marker, m);\r
+ throw new Exception(m.getFormattedMessage());\r
+ } finally {\r
+ try {\r
+ if (deleteSource && sourceMediaFile != null && sourceMediaFile.exists())\r
+ sourceMediaFile.delete();\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ }\r
+ try {\r
+ if (deleteSource && targetPath != null && targetPath.toFile().exists())\r
+ Files.delete(targetPath);\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ private void postprocess(Path transcodedFilePath, String webPath) throws IOException {\r
+ Path lowresPath = null;\r
+ try {\r
+ String transcodedFileName = transcodedFilePath.getFileName().toString();\r
+ String targetPath = null;\r
+ if (transcodedFileName.indexOf(".") > 2) {\r
+ Path subdir = Paths.get(transcodedFileName.substring(0, 1), transcodedFileName.substring(1, 2), transcodedFileName.substring(2, 3));\r
+ EscortFiles.ensureUNCFolder(webPath, subdir.toString());\r
+ targetPath = Paths.get(subdir.toString(), transcodedFileName).toString();\r
+ } else {\r
+ targetPath = transcodedFileName;\r
+ }\r
+ lowresPath = Paths.get(webPath, targetPath);\r
+ int version = 1;\r
+ while (lowresPath.toFile().exists()) {\r
+ String fileName = transcodedFileName + version + MP4EXT;\r
+ lowresPath = Paths.get(lowresPath.toString().replace(transcodedFileName, fileName));\r
+ targetPath = targetPath.replace(transcodedFileName, fileName);\r
+ transcodedFileName = fileName;\r
+ version++;\r
+ }\r
+\r
+ Files.move(transcodedFilePath, lowresPath);\r
+ manager.createMediaFile(targetPath, fileType, store, mediaCubeMedia).add();\r
+ } catch (IOException e) {\r
+ logger.catching(e);\r
+ logger.error(marker, "A '{}' állomány mozgatása a '{}' helyre nem sikerült.", transcodedFilePath, lowresPath);\r
+ throw e;\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.util.List;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+\r
+import user.commons.remotestore.RemoteStoreProtocol;\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.steps.MetadataTypeDetector.MetadataType;\r
+\r
+public class UpdateGhostMediaDataStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private Marker marker;\r
+\r
+ @StepEntry\r
+ public Object[] execute(Media mediaCubeMedia, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ marker = jobRuntime.getSessionMarker();\r
+\r
+ IItemManager manager = jobEngine.getItemManager();\r
+ //Refresh from db\r
+ List<MediaFile> mediaFiles = manager.getMedia(mediaCubeMedia.getId()).getMediaFiles();\r
+ if (mediaFiles != null && mediaFiles.size() == 2) {\r
+ MediaFile lowres = null;\r
+ MediaFile highres = null;\r
+\r
+ for (MediaFile mf : mediaFiles) {\r
+ if (mf.getStore().getSourceStoreUri(RemoteStoreProtocol.HTTP) != null)\r
+ lowres = mf;\r
+ else\r
+ highres = mf;\r
+ }\r
+\r
+ if (highres == null) {\r
+ logger.info(marker, "Nincs highres mediaId: {}", mediaCubeMedia.getId());\r
+ return null;\r
+ }\r
+ if (lowres == null) {\r
+ logger.info(marker, "Nincs lowres mediaId: {}", mediaCubeMedia.getId());\r
+ return null;\r
+ }\r
+\r
+ String id = MetadataTypeDetector.truncateExtension(highres.getRelativePath());\r
+ id = MetadataTypeDetector.truncateVersion(id);\r
+ boolean detect = MetadataTypeDetector.GuessMetadataType(id) == MetadataType.OctopusPlaceholder\r
+ || MetadataTypeDetector.GuessMetadataType(id) == MetadataType.OctopusStory;\r
+ if (!detect) {\r
+ logger.info(marker, "Nem bejátszó mediaId: {}, file: {}", mediaCubeMedia.getId(), highres.getRelativePath());\r
+ return null;\r
+ }\r
+\r
+ Store highresStore = manager.getSystemStore(false);\r
+ final long sourceMediaId = lowres.getId();\r
+ final long highresMediaFileId = highres.getId();\r
+ final String highresRealtivePath = highres.getRelativePath();\r
+\r
+ manager.executeQuery("SELECT mediaid FROM mediafile WHERE relativepath=? and storeid=? and id!=?", rs -> {\r
+ long mediaId = rs.getLong(1);\r
+ Media media = manager.getMedia(mediaId);\r
+ if (media.getMediaFilesCount() == 1) {\r
+ logger.info(marker, "Hiányzó szellem lowres hozzáadása {} alapján", media.getId());\r
+\r
+ MediaFile mf = (MediaFile) manager.get(MediaFile.class, sourceMediaId);\r
+ mf.setMedia(media);\r
+ mf.setId(0);\r
+ manager.add(mf);\r
+ media.setLength(mediaCubeMedia.getLength());\r
+ manager.modify(media);\r
+ }\r
+ return true;\r
+ }, st -> {\r
+ st.setString(1, highresRealtivePath);\r
+ st.setLong(2, highresStore.getId());\r
+ st.setLong(3, highresMediaFileId);\r
+ });\r
+\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+}\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Felhasználói archiválás" useSessionLog="false">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="sourcePath" type="java.lang.String" />\r
+ <parameter name="killDateDays" type="java.lang.Integer" />\r
+ <parameter name="limit" type="java.lang.Integer" />\r
+ </parameters>\r
+ <variables>\r
+ <variable name="archiveList" type="java.util.LinkedList" />\r
+ </variables>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep id="step1" type="ArchiveListBuilderStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="sourcePath" />\r
+ </input>\r
+ <input>\r
+ <parameter name="limit" />\r
+ </input>\r
+ </inputs>\r
+ <outputs>\r
+ <output>\r
+ <variable name="archiveList" />\r
+ </output>\r
+ </outputs>\r
+ </calljobstep>\r
+\r
+ <calljobstep id="step2" type="ArchiveMaterialSubmitStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <variable name="archiveList" />\r
+ </input>\r
+ <input>\r
+ <parameter name="killDateDays" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Anyag archiválása" multiInstance="true" useSessionLog="false">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="archiveItem" type="user.jobengine.server.steps.ArchiveItem" />\r
+ <parameter name="killDateDays" type="java.lang.Integer"/>\r
+ </parameters>\r
+ <variables>\r
+ <variable name="mediaCubeMedia" type="user.jobengine.db.Media" />\r
+ </variables>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep id="id1" type="MetadataTransformStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="archiveItem" />\r
+ </input>\r
+ </inputs>\r
+ <outputs>\r
+ <output>\r
+ <variable name="mediaCubeMedia" />\r
+ </output>\r
+ </outputs>\r
+ </calljobstep>\r
+ <calljobstep type="MediaToolStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="archiveItem" />\r
+ </input>\r
+ <input>\r
+ <variable name="mediaCubeMedia" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep> \r
+ <calljobstep id="id2" type="TSMBackupStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="archiveItem" />\r
+ </input>\r
+ <input>\r
+ <variable name="mediaCubeMedia" />\r
+ </input>\r
+ <input>\r
+ <parameter name="killDateDays" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Felhasználói archiválás" useSessionLog="false">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="sourcePath" type="java.lang.String" />\r
+ <parameter name="killDateDays" type="java.lang.Integer" />\r
+ <parameter name="limit" type="java.lang.Integer" />\r
+ </parameters>\r
+ <variables>\r
+ <variable name="archiveList" type="java.util.LinkedList" />\r
+ </variables>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep id="step1" type="ArchiveListBuilderStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="sourcePath" />\r
+ </input>\r
+ <input>\r
+ <parameter name="limit" />\r
+ </input>\r
+ </inputs>\r
+ <outputs>\r
+ <output>\r
+ <variable name="archiveList" />\r
+ </output>\r
+ </outputs>\r
+ </calljobstep>\r
+\r
+ <calljobstep id="step2" type="ArchiveMaterialSubmitStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <variable name="archiveList" />\r
+ </input>\r
+ <input>\r
+ <parameter name="killDateDays" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Felhasználói archiválás" useSessionLog="false">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="sourcePath" type="java.lang.String" />\r
+ <parameter name="killDateDays" type="java.lang.Integer" />\r
+ <parameter name="limit" type="java.lang.Integer" />\r
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep id="step1" type="ArchiveRecursive.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="sourcePath" />\r
+ </input>\r
+ <input>\r
+ <parameter name="killDateDays" />\r
+ </input>\r
+ <input>\r
+ <parameter name="limit" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Archivált anyag visszatöltése" multiInstance="true" useSessionLog="false">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="basket" type="java.util.ArrayList" />\r
+ <parameter name="houseId" type="java.lang.String" />\r
+ <parameter name="recipient" type="java.lang.String" />\r
+ <parameter name="targetPathType" type="java.lang.String" />\r
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep type="BatchRetrieveForkStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="basket" />\r
+ </input>\r
+ <input>\r
+ <parameter name="houseId" />\r
+ </input>\r
+ <input>\r
+ <parameter name="recipient" />\r
+ </input>\r
+ <input>\r
+ <parameter name="targetPathType" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate multiInstance="true" useSessionLog="true">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="param" type="java.lang.Integer" />\r
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep remote="true" type="CancelableStep.java" weight="1" >\r
+ <inputs>\r
+ <input>\r
+ <parameter name="param" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Általános file másolás" multiInstance="true" useSessionLog="false">\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
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep id="id1" 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
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Hiányzó PROXY videók pótlása" useSessionLog="false">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="mediaCubeMedia" type="user.jobengine.db.Media" />\r
+ <parameter name="deleteSource" type="java.lang.Boolean"/>\r
+ <parameter name="killDateDays" type="java.lang.Integer"/>\r
+ <parameter name="successRecipient" type="java.lang.String" />\r
+ <parameter name="localHiresPath" type="java.lang.String" />\r
+ <parameter name="globalHiresPath" type="java.lang.String" />\r
+ <parameter name="localLowresPath" type="java.lang.String" />\r
+ <parameter name="transcoderAddress" type="java.lang.String" />\r
+ <parameter name="transcoderTemplateName" type="java.lang.String" />\r
+ <parameter name="localRetrievePath" type="java.lang.String" />\r
+ <parameter name="globalRetrievePath" type="java.lang.String" />\r
+ <parameter name="targetNamePattern" type="java.lang.String" />\r
+ </parameters>\r
+ <variables>\r
+ <variable name="archiveItem" type="user.jobengine.server.steps.ArchiveItem" />\r
+ </variables>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep type="CreateArchiveItemStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="mediaCubeMedia" />\r
+ </input>\r
+ <input>\r
+ <parameter name="localHiresPath" />\r
+ </input>\r
+ </inputs>\r
+ <outputs>\r
+ <output>\r
+ <variable name="archiveItem" />\r
+ </output>\r
+ </outputs>\r
+ </calljobstep>\r
+ <calljobstep type="TSMRestoreStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="mediaCubeMedia" />\r
+ </input>\r
+ <input>\r
+ <parameter name="localHiresPath" />\r
+ </input>\r
+ <input>\r
+ <parameter name="targetNamePattern" />\r
+ </input>\r
+ <input>\r
+ <parameter name="successRecipient" />\r
+ </input>\r
+ <input>\r
+ <parameter name="killDateDays" />\r
+ </input>\r
+ <input>\r
+ <parameter name="localRetrievePath" />\r
+ </input>\r
+ <input>\r
+ <parameter name="globalRetrievePath" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ <calljobstep type="MediaToolStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <variable name="archiveItem" />\r
+ </input>\r
+ <input>\r
+ <parameter name="mediaCubeMedia" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ <calljobstep type="TranscodeFFAStranStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <variable name="archiveItem" />\r
+ </input>\r
+ <input>\r
+ <parameter name="mediaCubeMedia" />\r
+ </input>\r
+ <input>\r
+ <parameter name="transcoderAddress" />\r
+ </input>\r
+ <input>\r
+ <parameter name="transcoderTemplateName" />\r
+ </input>\r
+ <input>\r
+ <parameter name="globalHiresPath" />\r
+ </input>\r
+ <input>\r
+ <parameter name="localLowresPath" />\r
+ </input>\r
+ <input>\r
+ <parameter name="deleteSource" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ <calljobstep type="UpdateGhostMediaDataStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="mediaCubeMedia" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Anyagok törlése" multiInstance="true" useSessionLog="false">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="sourcePath" type="java.lang.String"/>\r
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep id="id1" type="CleanupMountedLocationStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="sourcePath" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="HSM migráció" useSessionLog="false">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="sourceLocation" type="java.lang.String" />\r
+ <parameter name="targetLocation" type="java.lang.String" />\r
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep id="step1" type="HSMMigrateStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="sourceLocation" />\r
+ </input>\r
+ <input>\r
+ <parameter name="targetLocation" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Archivált anyag visszatöltése" multiInstance="true" useSessionLog="false">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="localRetrievePath" type="java.lang.String" />\r
+ <parameter name="globalRetrievePath" type="java.lang.String" />\r
+ <parameter name="materialOutputFolder" type="java.lang.String" />\r
+ <parameter name="promoOutputFolder" type="java.lang.String" />\r
+ <parameter name="advertisementOutputFolder" type="java.lang.String" />\r
+ <parameter name="octopusOutputFolder" type="java.lang.String" />\r
+ <parameter name="genericOutputFolder" type="java.lang.String" />\r
+ <parameter name="onlineOutputFolder" type="java.lang.String" />\r
+ <parameter name="archivedMedia" type="user.jobengine.db.ArchivedMedia" />\r
+ <parameter name="houseId" type="java.lang.String" />\r
+ <parameter name="successRecipient" type="java.lang.String" />\r
+ <parameter name="targetPathType" type="java.lang.String" />\r
+ <parameter name="killDateDays" type="java.lang.Integer"/>\r
+ <parameter name="nexioAgency" type="java.lang.String"/>\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
+ </parameters>\r
+ <variables>\r
+ <variable name="targetPath" type="java.lang.String" />\r
+ <variable name="targetNamePattern" type="java.lang.String" />\r
+ <variable name="useNexioTarget" type="java.lang.Boolean" />\r
+ </variables>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep type="OutputPathAndNameSelectorStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="localRetrievePath" />\r
+ </input>\r
+ <input>\r
+ <parameter name="materialOutputFolder" />\r
+ </input>\r
+ <input>\r
+ <parameter name="promoOutputFolder" />\r
+ </input>\r
+ <input>\r
+ <parameter name="advertisementOutputFolder" />\r
+ </input>\r
+ <input>\r
+ <parameter name="octopusOutputFolder" />\r
+ </input>\r
+ <input>\r
+ <parameter name="genericOutputFolder" />\r
+ </input>\r
+ <input>\r
+ <parameter name="onlineOutputFolder" />\r
+ </input>\r
+ <input>\r
+ <parameter name="houseId" />\r
+ </input>\r
+ <input>\r
+ <parameter name="targetPathType" />\r
+ </input>\r
+ <input>\r
+ <parameter name="archivedMedia" />\r
+ </input>\r
+ </inputs>\r
+ <outputs>\r
+ <output>\r
+ <variable name="targetPath" />\r
+ </output>\r
+ <output>\r
+ <variable name="targetNamePattern" />\r
+ </output>\r
+ <output>\r
+ <variable name="useNexioTarget" />\r
+ </output>\r
+ </outputs> \r
+ </calljobstep>\r
+ <calljobstep type="TSMExtendedRetrieveStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="archivedMedia" />\r
+ </input>\r
+ <input>\r
+ <variable name="targetPath" />\r
+ </input>\r
+ <input>\r
+ <variable name="targetNamePattern" />\r
+ </input>\r
+ <input>\r
+ <parameter name="successRecipient" />\r
+ </input>\r
+ <input>\r
+ <parameter name="killDateDays" />\r
+ </input>\r
+ <input>\r
+ <parameter name="localRetrievePath" />\r
+ </input>\r
+ <input>\r
+ <parameter name="globalRetrievePath" />\r
+ </input>\r
+ <input>\r
+ <variable name="useNexioTarget" />\r
+ </input>\r
+ <input>\r
+ <parameter name="nexioAgency" />\r
+ </input>\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
+ </inputs>\r
+ </calljobstep>\r
+ <calljobstep type="MXFCutterStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="archivedMedia" />\r
+ </input>\r
+ <input>\r
+ <variable name="targetPath" />\r
+ </input>\r
+ <input>\r
+ <parameter name="successRecipient" />\r
+ </input>\r
+ <input>\r
+ <parameter name="houseId" />\r
+ </input>\r
+ <input>\r
+ <parameter name="killDateDays" />\r
+ </input>\r
+ <input>\r
+ <variable name="useNexioTarget" />\r
+ </input>\r
+ <input>\r
+ <parameter name="nexioAgency" />\r
+ </input>\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
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Archivált anyag visszatöltése" multiInstance="true" useSessionLog="false">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="mediaId" type="java.lang.Long" />\r
+ <parameter name="targetPath" type="java.lang.String" />\r
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep type="TSMSimpleRestoreStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="mediaId" />\r
+ </input>\r
+ <input>\r
+ <parameter name="targetPath" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate>\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="sourceFolder" type="java.lang.String" />\r
+ <parameter name="filter" type="com.ibm.nosql.json.api.BasicDBObject" />\r
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep remote="true" type="PathItemsCollectorStep.java" weight="1" >\r
+ <inputs>\r
+ <input>\r
+ <parameter name="sourceFolder" />\r
+ </input>\r
+ <input>\r
+ <parameter name="filter" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Hiányzó PROXY videók pótlása" useSessionLog="false">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="localHiresPath" type="java.lang.String" />\r
+ <parameter name="globalHiresPath" type="java.lang.String" />\r
+ <parameter name="localLowresPath" type="java.lang.String" />\r
+ <parameter name="transcoderAddress" type="java.lang.String" />\r
+ <parameter name="transcoderTemplateName" type="java.lang.String" />\r
+ <parameter name="localRetrievePath" type="java.lang.String" />\r
+ <parameter name="globalRetrievePath" type="java.lang.String" />\r
+ </parameters>\r
+ <variables>\r
+ <variable name="mediaCubeMedia" type="user.jobengine.db.Media" />\r
+ <variable name="targetNamePattern" type="java.lang.String" />\r
+ <variable name="archiveItem" type="user.jobengine.server.steps.ArchiveItem" />\r
+ <variable name="killDateDays" type="java.lang.Integer"/>\r
+ <variable name="successRecipient" type="java.lang.String" />\r
+ <variable name="deleteSource" type="java.lang.Boolean"/>\r
+ </variables>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep type="CreateMissingLowresStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="localHiresPath" />\r
+ </input>\r
+ </inputs>\r
+ <outputs>\r
+ <output>\r
+ <variable name="mediaCubeMedia" />\r
+ </output>\r
+ <output>\r
+ <variable name="archiveItem" />\r
+ </output>\r
+ <output>\r
+ <variable name="targetNamePattern" />\r
+ </output>\r
+ <output>\r
+ <variable name="successRecipient" />\r
+ </output>\r
+ <output>\r
+ <variable name="killDateDays" />\r
+ </output>\r
+ <output>\r
+ <variable name="deleteSource" />\r
+ </output>\r
+ </outputs>\r
+ </calljobstep>\r
+ <calljobstep type="TSMRestoreStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <variable name="mediaCubeMedia" />\r
+ </input>\r
+ <input>\r
+ <parameter name="localHiresPath" />\r
+ </input>\r
+ <input>\r
+ <variable name="targetNamePattern" />\r
+ </input>\r
+ <input>\r
+ <variable name="successRecipient" />\r
+ </input>\r
+ <input>\r
+ <variable name="killDateDays" />\r
+ </input>\r
+ <input>\r
+ <parameter name="localRetrievePath" />\r
+ </input>\r
+ <input>\r
+ <parameter name="globalRetrievePath" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ <calljobstep type="MediaToolStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <variable name="archiveItem" />\r
+ </input>\r
+ <input>\r
+ <variable name="mediaCubeMedia" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ <calljobstep type="TranscodeFFAStranStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <variable name="archiveItem" />\r
+ </input>\r
+ <input>\r
+ <variable name="mediaCubeMedia" />\r
+ </input>\r
+ <input>\r
+ <parameter name="transcoderAddress" />\r
+ </input>\r
+ <input>\r
+ <parameter name="transcoderTemplateName" />\r
+ </input>\r
+ <input>\r
+ <parameter name="globalHiresPath" />\r
+ </input>\r
+ <input>\r
+ <parameter name="localLowresPath" />\r
+ </input>\r
+ <input>\r
+ <variable name="deleteSource" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ <calljobstep type="UpdateGhostMediaDataStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <variable name="mediaCubeMedia" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+jobtemplate:\r
+ multiInstance: true\r
+ useSessionLog: true\r
+ declarations:\r
+ parameters:\r
+ - name: param1\r
+ type: java.lang.Integer\r
+ - name: param1\r
+ type: java.lang.Integer\r
+ variables:\r
+ - name: var1\r
+ type: java.lang.Integer\r
+ - name: var1\r
+ type: java.lang.Integer\r
+ commands:\r
+ - type: Step1.java\r
+ weight: 1\r
+ inputs:\r
+ - name: param1\r
+ - name: param2\r
+ outputs:\r
+ - name: var1\r
+ - name: var2\r
+ - type: StepS.java\r
+ weight: 1\r
+ inputs:\r
+ - name: var1\r
+ - name: var2\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate multiInstance="true" useSessionLog="false">\r
+<commands>\r
+ <calljobstep type="TestForkCancelableStep.java" weight="1" />\r
+</commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+@echo off\r
+if exist tmp rmdir tmp /s /q\r
+mkdir tmp\r
+java ^\r
+-Dorg.eclipse.epp.logging.aeri.skipReports=true ^\r
+-Declipse.ignoreApp=true ^\r
+-Dosgi.noShutdown=true ^\r
+-Dlog4j.configurationFile=settings/log4j2.xml ^\r
+-Djetty.home=settings ^\r
+-Djetty.etc.config.urls=jetty.xml ^\r
+-Djava.io.tmpdir=tmp ^\r
+-Dfile.encoding=UTF-8 ^\r
+-Dgosh.home=configuration ^\r
+-jar plugins/org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar ^\r
+-Xms512m ^\r
+-Xmx1024m ^\r
+-console\r
--- /dev/null
+datasource:\r
+ mediacube:\r
+# url: jdbc:db2://192.168.100.2:50000/mc\r
+# user: db2inst1\r
+# password: password\r
+ url: jdbc:db2://10.10.1.27:50000/mc\r
+ user: db2admin\r
+ password: password\r
+ external-indexer: false\r
+ simple-search: true\r
+ login-timeout: 3\r
+ pool-size: 10\r
+ mediacube-nosql:\r
+# url: jdbc:db2://192.168.100.2:50000/mc\r
+# user: db2inst1\r
+# password: password\r
+ url: jdbc:db2://10.10.1.27:50000/mc\r
+ user: db2admin\r
+ password: password\r
+ schema: test\r
+ login-timeout: 3\r
+ hsm: \r
+ url: jdbc:db2://10.11.1.89:51500/tsmdb1\r
+ user: tsminst1\r
+ password: tsminst1\r
+ planair: \r
+ url: jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis;\r
+ user: MAM\r
+ password: VDani\r
+services:\r
+ ffmpeg:\r
+ execurable-location: /opt/ffmpeg/ffmpeg \r
+ mediacube:\r
+ proxy-root: /mediacube/data/lowres\r
+ nexio:\r
+ host: 10.10.1.55\r
+ collection-name: nexioclips\r
+ use-mos-gateway: true\r
+ disabled: true\r
+jobs:\r
+ validate-transfers: false\r
+ copy-buffer-size: 32768\r
+ scheduled-execution-disabled: true\r
+tsm:\r
+ randomize-archives: false \r
+ delimiter: /\r
+ node-name: JOBENGINE\r
+ fs-name: /JOBENGINE\r
+ alternate-fs-name: /JOBENGINE\r
+ hl-name: /JOBENGINE\r
+
\ No newline at end of file
--- /dev/null
+SErvername MEDIACUBE\r
+traceflags api\r
+tracefile /opt/mediacube/log/tsm.trace
\ No newline at end of file
--- /dev/null
+location: /Programs/ffmpeg/bin/ffmpeg.exe
+default:
+ - -v panic
+ - -stats
+ - -y
+profiles:
+- name: profile1
+ settings:
+ - setting1
+ - setting2
+- name: profile2
+ settings:
+ - setting3
+ - setting4
--- /dev/null
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+ <Call name="addConnector">
+ <Arg>
+ <New class="org.eclipse.jetty.server.ServerConnector">
+ <Arg name="server">
+ <Ref refid="Server" />
+ </Arg>
+ <Set name="port">
+ <Property name="jetty.http.port" default="9080" />
+ </Set>
+ </New>
+ </Arg>
+ </Call>
+
+<!-- <Set name="sessionIdManager"> -->
+<!-- <New id="idMgr" -->
+<!-- class="org.eclipse.jetty.server.session.DefaultSessionIdManager"> -->
+<!-- <Arg> -->
+<!-- <Ref refid="Server" /> -->
+<!-- </Arg> -->
+<!-- <Set name="workerName">node1</Set> -->
+<!-- </New> -->
+<!-- </Set> -->
+
+ <Set name="handler">
+ <New id="Handlers"
+ class="org.eclipse.jetty.server.handler.HandlerCollection">
+ <Set name="handlers">
+ <Array type="org.eclipse.jetty.server.Handler">
+ <Item>
+ <New id="Contexts"
+ class="org.eclipse.jetty.server.handler.ContextHandlerCollection" />
+ </Item>
+ <Item>
+ <New id="DefaultHandler"
+ class="org.eclipse.jetty.server.handler.DefaultHandler" />
+ </Item>
+ </Array>
+ </Set>
+ </New>
+ </Set>
+</Configure>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<Configuration status="ERROR" monitorInterval="10" packages="user.commons.log4j2.appender">\r
+ <Properties>\r
+ <Property name="logPath">log</Property>\r
+ <Property name="fileName">${logPath}/mediacube.log</Property>\r
+ <Property name="movTestName">${logPath}/movtest.log</Property>\r
+ <Property name="movTestPattern">${logPath}/$${date:yyyy-MM}/movtest-%d{MM-dd-yyyy}-%i.log.gz</Property>\r
+ <Property name="delete-materials.log">${logPath}/delete-materials.log</Property>\r
+ <Property name="delete-materials.pattern">${logPath}/$${date:yyyy-MM}/delete-materials-%d{MM-dd-yyyy}-%i.log.gz</Property>\r
+ <Property name="filePattern">${logPath}/$${date:yyyy-MM}/mediacube-%d{MM-dd-yyyy}-%i.log.gz</Property>\r
+ <Property name="markeredFileName">${logPath}/markered-mediacube.log</Property>\r
+ <Property name="markeredFilePattern">${logPath}/$${date:yyyy-MM}/markered-mediacube-%d{MM-dd-yyyy}-%i.log.gz</Property>\r
+ <Property name="fileName.err">${logPath}/mediacube-err.log</Property>\r
+ <Property name="filePattern.err">${logPath}/$${date:yyyy-MM}/mediacube-err-%d{MM-dd-yyyy}-%i.log.gz</Property>\r
+ </Properties>\r
+ <Appenders>\r
+ <Console name="Console" target="SYSTEM_OUT">\r
+ <Filters>\r
+ <MarkerFilter marker="MEDIACUBE" onMatch="DENY" onMismatch="NEUTRAL" />\r
+ </Filters>\r
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %msg (%F:%L) %n" />\r
+ </Console>\r
+ <Console name="MarkeredConsole" target="SYSTEM_ERR">\r
+ <Filters>\r
+ <MarkerFilter marker="MEDIACUBE" onMatch="ACCEPT" onMismatch="DENY" />\r
+ </Filters>\r
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg (%F:%L)%n" />\r
+ </Console>\r
+ <HTMLMailAppender name="MarkeredMail" subject="[Media Vivantis] MediaCube rendszerüzenet" to="zombori.mark@mediavivantis.hu,varga-nagy.lajos@mediavivantis.hu,vasary@elgekko.net" from="mediacubeserver@mediavivantis.hu" smtpHost="mediavivantis-hu.mail.protection.outlook.com"\r
+ smtpPort="25" smtpProtocol="smtp" ignoreExceptions="false" bufferSize="1">\r
+ <Filters>\r
+ <MarkerFilter marker="MEDIACUBE" onMatch="ACCEPT" onMismatch="DENY" />\r
+ </Filters>\r
+ <PatternLayout pattern="%d{HH:mm:ss} %-5level - %msg %n%n A küldő a %F forráskód %L. sorából a %logger{1}.%M függvény volt. %n" />\r
+ </HTMLMailAppender>\r
+ <RollingFile name="movTestName" fileName="${movTestName}" filePattern="${movTestPattern}">\r
+ <Filters>\r
+ <MarkerFilter marker="MOVTEST" onMatch="ACCEPT" onMismatch="DENY" />\r
+ </Filters>\r
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg (%F:%L)%n %throwable" />\r
+ <Policies>\r
+ <TimeBasedTriggeringPolicy />\r
+ </Policies>\r
+ </RollingFile>\r
+ <RollingFile name="delete-materials" fileName="${delete-materials.log}" filePattern="${delete-materials.pattern}">\r
+ <Filters>\r
+ <MarkerFilter marker="delete-materials.xml" onMatch="ACCEPT" onMismatch="DENY" />\r
+ </Filters>\r
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg (%F:%L)%n %throwable" />\r
+ <Policies>\r
+ <TimeBasedTriggeringPolicy />\r
+ </Policies>\r
+ </RollingFile>\r
+ <RollingFile name="MarkeredRollingFile" fileName="${markeredFileName}" filePattern="${markeredFilePattern}">\r
+ <Filters>\r
+ <MarkerFilter marker="MEDIACUBE" onMatch="ACCEPT" onMismatch="DENY" />\r
+ </Filters>\r
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg (%F:%L)%n %throwable" />\r
+ <Policies>\r
+ <TimeBasedTriggeringPolicy />\r
+ </Policies>\r
+ </RollingFile>\r
+ <RollingFile name="RollingFile" fileName="${fileName}" filePattern="${filePattern}">\r
+ <Filters>\r
+ <MarkerFilter marker="MEDIACUBE" onMatch="DENY" onMismatch="NEUTRAL" />\r
+ </Filters>\r
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %level %logger{1}.%M %msg (%F:%L)%n %throwable" />\r
+ <Policies>\r
+ <TimeBasedTriggeringPolicy />\r
+ </Policies>\r
+ </RollingFile>\r
+ <RollingFile name="RollingFileExceptions" fileName="${fileName.err}" filePattern="${filePattern.err}">\r
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} %logger{1}.%M %msg (%F:%L)%n %throwable" />\r
+ <Filters>\r
+ <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />\r
+ </Filters>\r
+ <Policies>\r
+ <TimeBasedTriggeringPolicy />\r
+ </Policies>\r
+ </RollingFile>\r
+ </Appenders>\r
+ <Loggers>\r
+ <Root level="INFO">\r
+ <AppenderRef ref="Console" />\r
+ <AppenderRef ref="MarkeredConsole" />\r
+ <AppenderRef ref="RollingFile" />\r
+ <AppenderRef ref="RollingFileExceptions" />\r
+ <AppenderRef ref="MarkeredRollingFile" />\r
+<!-- <AppenderRef ref="MarkeredMail" />-->\r
+ <AppenderRef ref="movTestName" />\r
+ <AppenderRef ref="delete-materials" />\r
+ </Root>\r
+ <Logger name="org.zkoss" level="ERROR" additivity="false" />\r
+ <Logger name="org.quartz" level="ERROR" additivity="false" />\r
+ <Logger name="org.eclipse.jetty.osgi.boot" level="ERROR" additivity="false" />\r
+\r
+<!-- <logger name="org.jboss.resteasy.core" level="debug" /> -->\r
+<!-- <logger name="org.jboss.resteasy.specimpl" level="debug" /> -->\r
+<!-- <logger name="org.jboss.resteasy.plugins.server" level="debug" /> -->\r
+<!-- <logger name="org.jboss.resteasy.plugins.providers" level="debug" /> -->\r
+<!-- <logger name="user.commons.nexio" level="debug" /> -->\r
+ </Loggers>\r
+</Configuration>
\ No newline at end of file
--- /dev/null
+sourceStoreUri:
+ name: Default
+ protocol: LOCAL
+ uri: "/mnt/NLE"
+ fileFilter: "*.mxf"
+ showDirectories: true
+alternateSourceStoreUris:
+- name: NLE1
+ protocol: LOCAL
+ uri: "/mnt/NLE/NLE1"
+ fileFilter: "*.mxf"
+ showDirectories: true
+- name: NLE2
+ protocol: LOCAL
+ uri: "/mnt/NLE/NLE2"
+ fileFilter: "*.mxf"
+ showDirectories: true
+- name: NLE3
+ protocol: LOCAL
+ uri: "/mnt/NLE/NLE3"
+ fileFilter: "*.mxf"
+ showDirectories: true
+- name: NLE4
+ protocol: LOCAL
+ uri: "/mnt/NLE/NLE4"
+ fileFilter: "*.mxf"
+ showDirectories: true
+- name: POLC
+ protocol: LOCAL
+ uri: "/mnt/POLC"
+ fileFilter: "*.mxf"
+ showDirectories: true
+targets:
+- name: FINISHED_SHOWS
+ killDateDays: 7
+ storeUri:
+ protocol: LOCAL
+ uri: "/mnt/PROMISE/FINISHED_SHOWS"
--- /dev/null
+jobQueuePollInterval: 1000\r
+disableHelp: true\r
+maestroDisabled: false\r
+alternateRetrieveSelector: false\r
+disableStatistics: true\r
+disableEditor: false\r
+topTypeFilters:\r
+- name: Hír bejátszó\r
+- name: Hír nyers\r
+- name: Visszarögzített\r
+- name: Egyéb\r
+bottomTypeFilters:\r
+- name: Műsor\r
+- name: Műsor nyers\r
+- name: Promo\r
+- name: Promo nyers\r
+- name: Reklám\r
+- name: Reklám nyers\r
+authentication:\r
+ authEnabled: true\r
+ defaultUser: root\r
+ defaultPassword: password\r
+ adHost: intra.mediavivantis.hu\r
+ adNonSecurePort: 3268\r
+ adBaseDn: DC=intra,DC=mediavivantis,DC=hu\r
+ adAdminMap:\r
+ - G_MV_U_MUSZAK\r
+ - G_MV_U_INGEST\r
+ adSubmitterMap:\r
+ - G_ECH_U_INFORMATIKUSOK\r
+ - G_ECH_U_MUSZAKVEZETOK\r
+ - ECH-ISILON-ADMINS\r
+ adEditorMap:\r
+ - G_ECH_U_INFORMATIKUSOK\r
+ - G_ECH_U_MUSZAKVEZETOK\r
+ - ECH-ISILON-ADMINS\r
+ localAccounts:\r
+ - user: user\r
+ password: 5F4DCC3B5AA765D61D8327DEB882CF99\r
+ email:\r
+ - user: lebony\r
+ password: 4E25B117B14D86D7DCECB4E433CF932C\r
+ email:\r
+ - user: root\r
+ password: 5F4DCC3B5AA765D61D8327DEB882CF99\r
+ email: vasary@elgekko.net\r
+ localAdmins:\r
+ - root\r
+ - admin\r
+ localSubmitters:\r
+ - lebony\r
+ localEditors:\r
+ - editor\r
#This configuration file was written by: org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser\r
-#Thu Mar 04 15:26:35 CET 2021\r
+#Thu Mar 11 15:00:06 CET 2021\r
osgi.bundles=reference\:file\:cglib_2.2.2.jar@4,reference\:file\:com.fasterxml.jackson.core.jackson-annotations_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.core.jackson-core_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.core.jackson-databind_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.dataformat.jackson-dataformat-yaml_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.datatype.jackson-datatype-joda_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.jaxrs.jackson-jaxrs-base_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider_2.4.5.jar@4,reference\:file\:com.fasterxml.jackson.module.jackson-module-jaxb-annotations_2.4.5.jar@4,reference\:file\:com.ibm.db2.jcc_1.4.0.jar@4,reference\:file\:com.ibm.nosql_4.19.26.jar@4,reference\:file\:com.microsoft.sqlserver.sqljdbc_6.0.8112.100.jar@4,reference\:file\:com.sun.jna_4.2.0.jar@4,reference\:file\:groovy_3.0.3.jar@4,reference\:file\:io.humble.video-arch-x86_64-pc-linux-gnu6_0.2.1.jar@4,reference\:file\:io.humble.video-arch-x86_64-w64-mingw32_0.2.1.jar@4,reference\:file\:io.humble.video-noarch_0.2.1.jar@4,reference\:file\:javax.annotation-api_1.2.0.jar@4,reference\:file\:javax.mail_1.5.0.b01.jar@4,reference\:file\:javax.servlet-api_3.1.0.jar@4,reference\:file\:javax.ws.rs-api_2.0.1.jar@4,reference\:file\:jcifs_1.3.17.jar@4,reference\:file\:joda-time_2.2.0.jar@4,reference\:file\:junit_4.12.0.jar@4,reference\:file\:org.apache.aries.spifly.dynamic.bundle_1.0.8.jar@4,reference\:file\:org.apache.aries.util_1.0.0.jar@4,reference\:file\:org.apache.commons.beanutils_1.8.3.jar@4,reference\:file\:org.apache.commons.collections_3.2.2.jar@4,reference\:file\:org.apache.commons.digester_3.2.0.jar@4,reference\:file\:org.apache.commons.io_2.6.0.jar@4,reference\:file\:org.apache.commons.lang_2.6.0.jar@4,reference\:file\:org.apache.commons.net_3.6.0.jar@4,reference\:file\:org.apache.felix.gogo.command_0.12.0.jar@4,reference\:file\:org.apache.felix.gogo.runtime_0.12.0.jar@4,reference\:file\:org.apache.felix.gogo.shell_0.12.0.jar@4,reference\:file\:org.apache.httpcomponents.httpclient_4.2.6.jar@4,reference\:file\:org.apache.httpcomponents.httpcore_4.2.5.jar@4,reference\:file\:org.apache.logging.log4j.api_2.8.2.jar@1\:start,reference\:file\:org.apache.logging.log4j.core_2.8.2.jar@4,reference\:file\:org.apache.logging.log4j.slf4j-impl_2.8.2.jar@4,reference\:file\:org.apache.servicemix.bundles.quartz_2.3.0.2.jar@4,reference\:file\:org.eclipse.equinox.common_3.8.0.v20160509-1230.jar@2\:start,reference\:file\:org.eclipse.equinox.console_1.1.200.v20150929-1405.jar@4,reference\:file\:org.eclipse.equinox.ds_1.4.400.v20160226-2036.jar@1\:start,reference\:file\:org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar@4,reference\:file\:org.eclipse.equinox.util_1.0.500.v20130404-1337.jar@4,reference\:file\:org.eclipse.jetty.client_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.deploy_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.http_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.io_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.osgi.boot_9.3.9.v20160517.jar@4\:start,reference\:file\:org.eclipse.jetty.schemas_3.1.0.jar@4,reference\:file\:org.eclipse.jetty.security_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.server_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.servlet_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.util_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.webapp_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.api_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.client_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.common_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.server_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.websocket.servlet_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.jetty.xml_9.3.9.v20160517.jar@4,reference\:file\:org.eclipse.osgi.services_3.2.100.v20100503.jar@4,reference\:file\:org.hamcrest.core_1.3.0.jar@4,reference\:file\:org.jboss.resteasy.client_3.0.11.Final.jar@4,reference\:file\:org.jboss.resteasy.jaxb-provider_3.0.11.Final.jar@4,reference\:file\:org.jboss.resteasy.jaxrs_3.0.11.Final.jar@4,reference\:file\:org.jboss.resteasy.jaxrs-api_3.0.11.Final.jar@4,reference\:file\:org.jmock_2.6.0.jar@4,reference\:file\:org.jmock.junit4_2.6.0.jar@4,reference\:file\:org.mybatis.mybatis_3.5.2.jar@4,reference\:file\:org.objectweb.asm_5.0.1.jar@4,reference\:file\:org.objectweb.asm.commons_5.0.1.jar@4,reference\:file\:org.objectweb.asm.tree_5.0.1.jar@4,reference\:file\:org.omnifaces_3.4.1.jar@4,reference\:file\:slf4j.api_1.7.24.jar@4,reference\:file\:slf4j.simple_1.7.2.jar@4,reference\:file\:user.commons.log4j2_1.0.0.jar@4,reference\:file\:user.commons.zk_8.0.3.jar@4,reference\:file\:user.jobengine.osgi.commons_1.0.0.jar@4\:start,reference\:file\:user.jobengine.osgi.db_1.0.0.jar@4,reference\:file\:user.jobengine.osgi.server_1.0.0.jar@4,reference\:file\:user.jobengine.osgi.services_1.0.0.jar@4,reference\:file\:user.mediacube.gui_1.0.0.jar@4,reference\:file\:user.mediacube.metadata_1.0.0.jar@4,reference\:file\:user.tsm.client_1.2.0.jar@4\r
equinox.use.ds=true\r
osgi.bundles.defaultStartLevel=4\r
+++ /dev/null
-SErvername MEDIACUBE\r
-*traceflags api\r
-*tracefile /opt/mediacube/log/tsm.trace
\ No newline at end of file
import com.ibm.nosql.json.api.DB;\r
import com.ibm.nosql.json.api.DBCollection;\r
\r
-import user.commons.MediaCubeMarker;\r
import user.commons.MediaCubeUndoMarker;\r
import user.commons.nosql.NoSQLUtils;\r
import user.jobengine.db.IItemManager;\r
\r
public class CreateMissingLowresStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
- private MediaCubeMarker marker;\r
\r
@StepEntry\r
public Object[] execute(String localHiresPath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
Object[] result = new Object[] { null, null, "%s", null, 0, true };\r
- marker = (MediaCubeMarker) jobRuntime.getSessionMarker();\r
DB db = NoSQLUtils.getNoSQLDB();\r
DBCollection collection = db.getCollection("missing_lowres");\r
IItemManager manager = jobEngine.getItemManager();\r
\r
try {\r
if (media == null) {\r
- logger.info(new MediaCubeUndoMarker(marker.getSessionID()), "Nincs feldolgozandó hiány.");\r
+ logger.info(new MediaCubeUndoMarker(getSessionMarker().getSessionID()), "Nincs feldolgozandó hiány.");\r
// throw new Exception("Nincs feldolgozandó hiány.");\r
cancel();\r
return null;\r
archiveItem.setMediaFile(Paths.get(localHiresPath, name).toString());\r
result[1] = archiveItem;\r
collection.save(new BasicDBObject("name", name));\r
- logger.info(marker, "Hiányzó lowres mediaId: {}", media.getId());\r
+ logger.info(getSessionMarker(), "Processing mediaID: {}", media.getId());\r
\r
} catch (Exception e) {\r
logger.catching(e);\r
- logger.info(marker, e.getMessage());\r
+ logger.error(getSessionMarker(), e.getMessage());\r
throw e;\r
} finally {\r
setProgress(100);\r
\r
private Media getFirstUntranscodedMedia(IItemManager manager, DBCollection collection) {\r
Media[] result = new Media[] { null };\r
- String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS WHERE HOUSEID like 'M%' or HOUSEID like 'P%' or HOUSEID like 'R%' ORDER BY modified DESC FETCH FIRST ROW ONLY";\r
+ //MV\r
+ String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS WHERE HOUSEID like 'M%' or HOUSEID like 'P%' or HOUSEID like 'R%' ORDER BY modified DESC";\r
+\r
+ //HTV\r
+ //String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS";\r
manager.executeQuery(query, rs -> {\r
try {\r
long mediaId = rs.getLong(1);\r
Media media = manager.getMedia(mediaId);\r
//a nevgeneralas miatt az eredeti MediaFilesName nem jo, a pontos nev kell nekunk\r
String name = media.getMediaFileRealName();\r
+ logger.info(getSessionMarker(), "Checking {}", name);\r
long existing = collection.find(new BasicDBObject("name", name)).count();\r
- if (existing > 0)\r
+ if (existing > 0) {\r
+ logger.info(getSessionMarker(), "{} is on missing_lowres list", name);\r
return true;\r
+ }\r
\r
result[0] = media;\r
} catch (Exception e) {\r
package user.jobengine.server.steps;\r
\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
import user.commons.StoreUri;\r
import user.commons.remotestore.RemoteStoreProtocol;\r
import user.jobengine.db.ArchivedMedia;\r
import user.jobengine.server.IJobRuntime;\r
\r
public class TSMExtendedRetrieveStep extends TSMRestoreStep {\r
+ private static String NEXIO_HOST = System.getProperty("nexio.host");\r
+ // private static String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host");\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
private boolean useNexioTarget;\r
private int nexioPort;\r
private String nexioUserName, nexioPassword;\r
- private String nexioHost;\r
private String nexioAgency;\r
\r
@Override\r
@Override\r
protected StoreUri createTargetUri(IItemManager manager, String targetPath) throws NullPointerException {\r
StoreUri result = null;\r
+ logger.info(getSessionMarker(), "Create target uri {}", targetPath);\r
if (useNexioTarget) {\r
- nexioHost = System.getProperty("nexio.host");\r
- if (nexioHost == null) {\r
+ if (NEXIO_HOST == null) {\r
throw new NullPointerException("Missing system property on 'nexio.host' name");\r
}\r
- result = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost);\r
+ result = manager.createStoreUri(RemoteStoreProtocol.FTP, NEXIO_HOST);\r
result.setPortNumber(nexioPort);\r
result.setUserName(nexioUserName);\r
result.setPassword(nexioPassword);\r
+cd /opt/mediacube-new
rm -fr tmp/*
rm -fr configuration/org.eclipse.osgi
-export DSMI_CONFIG=/opt/mediacube/configuration/dsm.opt
+export DSMI_CONFIG=/opt/mediacube-new/settings/dsm.opt
+export DSMI_LOG=/opt/mediacube-new/log
export DSMI_DIR=/opt/tivoli/tsm/client/api/bin64
-export DSMI_LOG=/opt/mediacube/log
export DSM_DIR=/opt/tivoli/tsm/client/api/bin64
-export LD_LIBRARY_PATH=/opt/tivoli/tsm/client/ba/bin:/opt/tivoli/tsm/client/api/bin64:/opt/mediacube
-export LIBPATH=/opt/tivoli/tsm/client/ba/bin:/opt/tivoli/tsm/client/api/bin64
-export SHLIB_PATH=/opt/tivoli/tsm/client/ba/bin:/opt/tivoli/tsm/client/api/bin64
+export LD_LIBRARY_PATH=/opt/tivoli/tsm/server/bin/dbbkapi:/opt/mediacube-new
+export LIBPATH=/opt/tivoli/tsm/server/bin/dbbkapi
+export SHLIB_PATH=/opt/tivoli/tsm/server/bin/dbbkapi
export TZ=NFT-1DFT,M3.5.0,M10.5.0
export PATH=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/bin:$PATH
java \
-Dorg.eclipse.epp.logging.aeri.skipReports=true \
-Declipse.ignoreApp=true \
-Dosgi.noShutdown=true \
--Dlog4j.configurationFile=configuration/log4j2.xml \
--Djetty.home=configuration/jetty \
--Djetty.etc.config.urls=jetty.xml,jetty-ssl.xml,jetty-ssl-context.xml,jetty-http.xml,jetty-https.xml \
+-Dlog4j.configurationFile=settings/log4j2.xml \
+-Djetty.home=settings \
+-Djetty.etc.config.urls=jetty.xml \
+-Dgosh.home=configuration \
-Djava.io.tmpdir=tmp \
+-Dfile.encoding=UTF-8 \
-jar plugins/org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar \
+-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8889 \
-Xms512m \
--Xmx1024m \
--console 5555
+-Xmx4096m \
+-console
ffmpeg:\r
execurable-location: /opt/ffmpeg/ffmpeg \r
mediacube:\r
- proxy-root: /_workspace/data/video\r
+ proxy-root: /mediacube/data/lowres\r
nexio:\r
host: 10.10.1.55\r
collection-name: nexioclips\r
--- /dev/null
+SErvername MEDIACUBE\r
+traceflags api\r
+tracefile /opt/mediacube/log/tsm.trace
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+ <name>RemoteSystemsTempFiles</name>\r
+ <comment></comment>\r
+ <projects>\r
+ </projects>\r
+ <buildSpec>\r
+ </buildSpec>\r
+ <natures>\r
+ <nature>org.eclipse.rse.ui.remoteSystemsTempNature</nature>\r
+ </natures>\r
+</projectDescription>\r
--- /dev/null
+package hu.user.mediacube.executors.tests.data;\r
+\r
+public class TestChild extends TestParent {\r
+\r
+ @Override\r
+ public void hello() {\r
+ super.hello();\r
+ System.out.println("Hello from child");\r
+ }\r
+}\r
--- /dev/null
+package hu.user.mediacube.executors.tests.data;\r
+\r
+public class TestParent {\r
+\r
+ public void hello() {\r
+ System.out.println("Hello from parent");\r
+ }\r
+}\r
--- /dev/null
+location: /Programs/ffmpeg/bin/ffmpeg.exe
+default:
+ - -v panic
+ - -stats
+ - -y
+profiles:
+- name: profile1
+ settings:
+ - setting1
+ - setting2
+- name: profile2
+ settings:
+ - setting3
+ - setting4
import java.util.LinkedHashSet;\r
import java.util.List;\r
import java.util.Map;\r
+import java.util.Map.Entry;\r
import java.util.Set;\r
import java.util.TreeMap;\r
import java.util.TreeSet;\r
+import java.util.concurrent.TimeUnit;\r
import java.util.regex.Pattern;\r
\r
import org.apache.commons.io.FileUtils;\r
import org.apache.ibatis.jdbc.SQL;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
+import org.codehaus.groovy.control.CompilationFailedException;\r
import org.junit.Test;\r
\r
import com.ibm.nosql.json.api.BasicDBList;\r
\r
@Test\r
public void test9995() throws Exception {\r
- String className = "TestStep1";\r
- String root = "/opt/steps";\r
+ String file = "/opt/test/TestChild.java";\r
+\r
+ \r
+ GroovyClassLoader cl = new GroovyClassLoader(this.getClass().getClassLoader()) {\r
+ \r
+ @Override\r
+ public Class loadClass(String name, boolean lookupScriptFiles, boolean preferClassOverScript, boolean resolve)\r
+ throws ClassNotFoundException, CompilationFailedException {\r
+ // TODO Auto-generated method stub\r
+ return super.loadClass(name, lookupScriptFiles, preferClassOverScript, resolve);\r
+ }\r
+ \r
+ };\r
\r
- try (GroovyClassLoader cl = new GroovyClassLoader(this.getClass().getClassLoader())) {\r
+ try {\r
\r
- Class<?> myClass = parseClassHierarchy(cl, root, className);\r
+ Class<?> myClass = cl.parseClass(new File(file));\r
System.out.println(myClass.getCanonicalName());\r
Method method = myClass.getMethod("execute");\r
method.invoke(myClass.newInstance());\r
- } catch (Exception e) {\r
- throw e;\r
+ System.out.println("done");\r
+ } catch (Throwable e) {\r
+ System.out.println(e.getClass().getSimpleName() + ": " + e.getMessage());\r
}\r
\r
}\r
@Test\r
public void test999991() throws Exception {\r
IConfiguration configuration = SystemConfiguration.getInstance();\r
- String executors = configuration.getConfig("jobs/executors.yaml");\r
- configuration.load(executors);\r
+ String configFile = configuration.getConfig("jobs/executors.yaml");\r
+ HashMap<String, String> settings = configuration.load(configFile, HashMap.class);\r
+ assertNotNull(settings);\r
+ }\r
+\r
+ @Test\r
+ public void test999992() throws Exception {\r
+ IConfiguration configuration = SystemConfiguration.getInstance();\r
+ String configFile = configuration.getConfig("jobs/ffmpeg.yaml");\r
+ HashMap<String, String> settings = configuration.load(configFile, HashMap.class);\r
+ assertNotNull(settings);\r
}\r
+\r
+ //AMC hianyzo hangsav hibakereses\r
+ //select finished,related from job where name='Archiválás' and finished is not null order by finished\r
+ //dsmadmc -id=support -password=userkft -TABdelimited -dataonly=yes "select backup_date ||','|| replace(replace(LL_NAME, '.mxf', ''),'/','') from backups where NODE_NAME='PASANODE' and state='ACTIVE_VERSION'"\r
+ @Test\r
+ public void test999993() throws Exception {\r
+ List<String> jobs = Files.readAllLines(Paths.get("/opt/AMC/2021/TSM-ERROR/archive-jobs"));\r
+ HashMap<String, Date> jobsMap = new HashMap<>();\r
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");\r
+\r
+ for (String line : jobs) {\r
+ String[] tokens = line.split(",");\r
+ Date dt = df.parse(tokens[0]);\r
+ String name = tokens[1];\r
+ name = name.split(" / ")[0];\r
+ Date stored = jobsMap.get(name);\r
+ if (stored == null)\r
+ jobsMap.put(name, dt);\r
+ else if (stored.before(dt))\r
+ jobsMap.put(name, dt);\r
+ // System.out.println(name);\r
+ }\r
+\r
+ List<String> tsm = Files.readAllLines(Paths.get("/opt/AMC/2021/TSM-ERROR/archive-tsm"));\r
+ HashMap<String, Date> tsmMap = new HashMap<>();\r
+ SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd-hh.mm.ss.SSSSSS");\r
+\r
+ for (String line : tsm) {\r
+ String[] tokens = line.split(",");\r
+ Date dt = df1.parse(tokens[0]);\r
+ String name = tokens[1].replace(".part", "");\r
+ tsmMap.put(name, dt);\r
+ //System.out.println(name);\r
+ }\r
+\r
+ System.out.println("NAME, TSM DATE, ARCHIVE DATE");\r
+ for (Entry<String, Date> entry : jobsMap.entrySet()) {\r
+\r
+ if (entry.getKey().contains("CCEM047245")) {\r
+ System.out.println("x");\r
+ }\r
+ Date dtTsm = tsmMap.get(entry.getKey());\r
+ if (dtTsm == null) {\r
+ continue;\r
+ }\r
+\r
+ Date dtArchive = entry.getValue();\r
+ long diffInMillies = dtArchive.getTime() - dtTsm.getTime();\r
+ long diff = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);\r
+ if (diff > 0)\r
+ System.out.println(entry.getKey() + ", " + df.format(dtTsm) + ", " + df.format(dtArchive));\r
+ }\r
+\r
+ for (Entry<String, Date> entry : jobsMap.entrySet()) {\r
+\r
+ Date dtTsm = tsmMap.get(entry.getKey());\r
+ if (dtTsm == null) {\r
+ System.out.println("Missing " + entry.getKey() + ", " + df.format(entry.getValue()));\r
+ }\r
+\r
+ }\r
+ }\r
+\r
}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.nio.file.Path;\r
+import java.util.regex.Matcher;\r
+import java.util.regex.Pattern;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+public class FileSearchFilterOptions {\r
+\r
+ private BasicDBObject filter;\r
+\r
+ public FileSearchFilterOptions(BasicDBObject filter) {\r
+ this.filter = filter;\r
+ }\r
+\r
+ public boolean acceptFile(Path file) {\r
+ if (filter == null)\r
+ return true;\r
+\r
+ if (filter.containsKey("fileName")) {\r
+ //.*\.(sh|ini|conf|vhost|xml|php)$\r
+ String fileNamePattern = filter.getString("fileName");\r
+ if (fileNamePattern == null || fileNamePattern.trim().length() == 0)\r
+ return true;\r
+\r
+ Pattern pattern = Pattern.compile(fileNamePattern, Pattern.CASE_INSENSITIVE);\r
+\r
+ Matcher matcher = pattern.matcher(file.getFileName().toString());\r
+ if (matcher.find())\r
+ return true;\r
+\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
+ public boolean preAcceptDirectory(Path file) {\r
+ return true;\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.IOException;\r
+import java.nio.file.FileVisitResult;\r
+import java.nio.file.FileVisitor;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.SimpleFileVisitor;\r
+import java.nio.file.attribute.BasicFileAttributes;\r
+import java.util.ArrayList;\r
+import java.util.List;\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
+/* DO NOT REMOVE!\r
+import user.jobengine.server.steps.FileSearchFilterOptions;\r
+*/\r
+public class PathItemsCollectorStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ @StepEntry\r
+ public Object[] execute(String sourceFolder, BasicDBObject filter) throws Exception {\r
+ Path sourcePath = Paths.get(sourceFolder);\r
+\r
+ List<String> files = new ArrayList<>();\r
+\r
+ //teljes rekurzivitas szuressel\r
+ FileSearchFilterOptions filterOptions = new FileSearchFilterOptions(filter);\r
+ FileVisitor<Path> visitor = new SimpleFileVisitor<Path>() {\r
+ @Override\r
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {\r
+ if (!filterOptions.preAcceptDirectory(dir))\r
+ return FileVisitResult.SKIP_SUBTREE;\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+\r
+ @Override\r
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {\r
+ if (filterOptions.acceptFile(file))\r
+ files.add(file.toString());\r
+ logger.info(file);\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+\r
+ @Override\r
+ public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+\r
+ };\r
+\r
+ try {\r
+ Files.walkFileTree(sourcePath, visitor);\r
+ } catch (Exception e) {\r
+ logger.error(getSessionMarker(), "Hiba a '{}' mappa feldolgozásában. A rendszer hibaüzenete: {}", sourcePath, e.getMessage());\r
+ logger.catching(e);\r
+ throw e;\r
+ } finally {\r
+ }\r
+ return new Object[] { files };\r
+ }\r
+}\r
import com.ibm.nosql.json.api.DB;\r
import com.ibm.nosql.json.api.DBCollection;\r
\r
-import user.commons.MediaCubeMarker;\r
import user.commons.MediaCubeUndoMarker;\r
import user.commons.nosql.NoSQLUtils;\r
import user.jobengine.db.IItemManager;\r
\r
public class CreateMissingLowresStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
- private MediaCubeMarker marker;\r
\r
@StepEntry\r
public Object[] execute(String localHiresPath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
Object[] result = new Object[] { null, null, "%s", null, 0, true };\r
- marker = (MediaCubeMarker) jobRuntime.getSessionMarker();\r
DB db = NoSQLUtils.getNoSQLDB();\r
DBCollection collection = db.getCollection("missing_lowres");\r
IItemManager manager = jobEngine.getItemManager();\r
\r
try {\r
if (media == null) {\r
- logger.info(new MediaCubeUndoMarker(marker.getSessionID()), "Nincs feldolgozandó hiány.");\r
+ logger.info(new MediaCubeUndoMarker(getSessionMarker().getSessionID()), "Nincs feldolgozandó hiány.");\r
// throw new Exception("Nincs feldolgozandó hiány.");\r
cancel();\r
return null;\r
archiveItem.setMediaFile(Paths.get(localHiresPath, name).toString());\r
result[1] = archiveItem;\r
collection.save(new BasicDBObject("name", name));\r
- logger.info(marker, "Hiányzó lowres mediaId: {}", media.getId());\r
+ logger.info(getSessionMarker(), "Processing mediaID: {}", media.getId());\r
\r
} catch (Exception e) {\r
logger.catching(e);\r
- logger.info(marker, e.getMessage());\r
+ logger.error(getSessionMarker(), e.getMessage());\r
throw e;\r
} finally {\r
setProgress(100);\r
\r
private Media getFirstUntranscodedMedia(IItemManager manager, DBCollection collection) {\r
Media[] result = new Media[] { null };\r
- //String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS WHERE HOUSEID like 'M%' or HOUSEID like 'P%' or HOUSEID like 'R%' ORDER BY modified DESC FETCH FIRST ROW ONLY";\r
- String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS";\r
+ //MV\r
+ String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS WHERE HOUSEID like 'M%' or HOUSEID like 'P%' or HOUSEID like 'R%' ORDER BY modified DESC";\r
+\r
+ //HTV\r
+ //String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS";\r
manager.executeQuery(query, rs -> {\r
try {\r
long mediaId = rs.getLong(1);\r
Media media = manager.getMedia(mediaId);\r
//a nevgeneralas miatt az eredeti MediaFilesName nem jo, a pontos nev kell nekunk\r
String name = media.getMediaFileRealName();\r
+ logger.info(getSessionMarker(), "Checking {}", name);\r
long existing = collection.find(new BasicDBObject("name", name)).count();\r
- if (existing > 0)\r
+ if (existing > 0) {\r
+ logger.info(getSessionMarker(), "{} is on missing_lowres list", name);\r
return true;\r
+ }\r
\r
result[0] = media;\r
} catch (Exception e) {\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.commons.configuration.SystemConfiguration;\r
import user.commons.mediatool.MediaInfo;\r
\r
public class FFMpeg {\r
\r
Files.write(Paths.get(output, "index.m3u8"), indexLines);\r
}\r
+\r
+ static public void withProfile(String input, String output, String profile, IProgressChanged progressCallback) throws Exception {\r
+ BasicDBObject config = SystemConfiguration.getInstance().load("ffmpeg.yaml", BasicDBObject.class);\r
+\r
+ StringBuilder sb = new StringBuilder();\r
+ sb.append("-v panic -stats -y")\r
+ .append("\r\n")\r
+ .append(String.format("-i %s", input))\r
+ .append("\r\n")\r
+ .append("-map 0:0 -c:v h264 -an -hls_time 100000000000 -hls_list_size 0")\r
+ .append("\r\n")\r
+ .append(String.format("-f hls %s/video.m3u8", output))\r
+ .append("\r\n");\r
+\r
+ for (int i = 0; i < 4; i++) {\r
+ sb.append(String.format("-map 0:%d -f segment -segment_time 100000000000 -segment_list_size 0", i+1))\r
+ .append("\r\n")\r
+ .append(String.format("-segment_list %s/audio%d.m3u8 -segment_format mpegts %s/audio%d%%d.aac", output, i, output, i))\r
+ .append("\r\n");\r
+ }\r
+ System.out.println(sb);\r
+ ProcessBuilder processBuilder = Cmd.create(Cmd.getFFMpegExecutable(), sb);\r
+ long allFrames[] = {0};\r
+\r
+ try {\r
+ MediaInfo mi = new MediaInfo(Paths.get(input));\r
+ mi.process();\r
+ allFrames[0] = mi.getFrames();\r
+ } catch (Exception e ){\r
+ System.err.println(e);\r
+\r
+ }\r
+\r
+ Cmd.execute(processBuilder, false, l -> {\r
+ if (allFrames[0] == 0) {\r
+ logger.debug(l);\r
+ System.out.println(l);\r
+ return;\r
+ }\r
+\r
+ if (progressCallback == null)\r
+ return;\r
+ if (l.contains(FRAME) && l.contains(FPS)) {\r
+ String p = StringUtils.substringBetween(l, FRAME, FPS);\r
+ if (p != null) {\r
+ p = p.trim();\r
+ try {\r
+ int currentFrames = Integer.parseInt(p);\r
+ progressCallback.onProgressChanged((long)currentFrames * 100 / allFrames[0]);\r
+ } catch (Exception e){}\r
+ }\r
+ }\r
+ });\r
+\r
+// #EXTM3U\r
+// #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="CH1",URI="audio0.m3u8"\r
+// #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="CH2",URI="audio1.m3u8"\r
+// #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="CH3",URI="audio2.m3u8"\r
+// #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="CH4",URI="audio3.m3u8"\r
+// #EXT-X-STREAM-INF:PROGRAM-ID=1,AUDIO="audio"\r
+// video.m3u8\r
+\r
+ if (!Paths.get(output, "video.m3u8").toFile().exists())\r
+ throw new FileNotFoundException("video.m3u8");\r
+ if (!Paths.get(output, "video0.ts").toFile().exists())\r
+ throw new FileNotFoundException("video0.ts");\r
+ for (int i = 0; i < 4; i++) {\r
+ String file = String.format("audio%d.m3u8", i);\r
+ if (!Paths.get(output, file).toFile().exists())\r
+ throw new FileNotFoundException(file);\r
+ file = String.format("audio%d0.aac", i);\r
+ if (!Paths.get(output, file).toFile().exists())\r
+ throw new FileNotFoundException(file);\r
+ }\r
+\r
+ List<String> indexLines = new ArrayList<>();\r
+ indexLines.add("#EXTM3U");\r
+ for (int i = 0; i < 4; i++) {\r
+ indexLines.add(String.format("#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=\"audio\",NAME=\"CH%d\",URI=\"audio%d.m3u8\"", i+1, i));\r
+ }\r
+ indexLines.add("#EXT-X-STREAM-INF:PROGRAM-ID=1,AUDIO=\"audio\"");\r
+ indexLines.add("video.m3u8");\r
+\r
+ Files.write(Paths.get(output, "index.m3u8"), indexLines);\r
+ }\r
+\r
}\r
package user.jobengine.server.steps;\r
\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
import user.commons.StoreUri;\r
-import user.commons.configuration.SystemConfiguration;\r
import user.commons.remotestore.RemoteStoreProtocol;\r
import user.jobengine.db.ArchivedMedia;\r
import user.jobengine.db.IItemManager;\r
import user.jobengine.server.IJobRuntime;\r
\r
public class TSMExtendedRetrieveStep extends TSMRestoreStep {\r
- private static String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host");\r
+ private static String NEXIO_HOST = System.getProperty("nexio.host");\r
+ // private static String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host");\r
+ private static final Logger logger = LogManager.getLogger();\r
\r
private boolean useNexioTarget;\r
private int nexioPort;\r
private String nexioUserName, nexioPassword;\r
- private String nexioHost;\r
private String nexioAgency;\r
\r
@Override\r
@Override\r
protected StoreUri createTargetUri(IItemManager manager, String targetPath) throws NullPointerException {\r
StoreUri result = null;\r
+ logger.info(getSessionMarker(), "Create target uri {}", targetPath);\r
if (useNexioTarget) {\r
if (NEXIO_HOST == null) {\r
throw new NullPointerException("Missing system property on 'nexio.host' name");\r
\r
String getConfig(String relativeConfigName) throws FileNotFoundException;\r
\r
- void load(String file) throws Exception;\r
-\r
<T> T load(String file, Class<? extends T> configClass) throws Exception;\r
\r
<T> T value(String fqn);\r
private Map<String, Object> settings;\r
\r
public SystemConfiguration() {\r
+ currentInstance = this;\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ private void ensureSettingsLoaded() {\r
+ if (settings != null)\r
+ return;\r
try {\r
- load(getConfig("settings/application.yaml"));\r
+ settings = load(getConfig("settings/application.yaml"), HashMap.class);\r
} catch (Exception e) {\r
logger.catching(e);\r
}\r
- currentInstance = this;\r
}\r
\r
@Override\r
throw new FileNotFoundException("Cant find configuration file " + relativeConfigName);\r
}\r
\r
- @SuppressWarnings("unchecked")\r
- @Override\r
- public void load(String file) throws Exception {\r
- logger.info("Loading system configuration {}", file);\r
- if (file != null) {\r
- String yaml = new String(Files.readAllBytes(Paths.get(file)));\r
- settings = OBJECT_MAPPER.readValue(yaml, HashMap.class);\r
- }\r
- }\r
-\r
@Override\r
public <T> T load(String file, Class<? extends T> configClass) throws Exception {\r
T result = null;\r
public <T> T value(String fqn) {\r
T result = null;\r
String[] tokens = fqn.split("\\.");\r
+\r
+ ensureSettingsLoaded();\r
+\r
Map<String, Object> parent = settings;\r
for (int i = 0; i < tokens.length - 1; i++) {\r
parent = (Map<String, Object>) parent.get(tokens[i]);\r
int count = 0;\r
try (PreparedStatement stmt = con.prepareStatement(querySQL); ResultSet rs = stmt.executeQuery();) {\r
while (rs.next()) {\r
- BasicDBObject clip = new BasicDBObject();\r
- clip.put(ID, rs.getString(ID));\r
- clip.put(LONGNAMEID, rs.getString(LONGNAMEID));\r
- clip.put(EXTAGENCY, rs.getString(EXTAGENCY));\r
- clip.put(VIDEOBITRATE, rs.getString(VIDEOBITRATE));\r
- clip.put(VIDEOFORMAT, rs.getString(VIDEOFORMAT));\r
- clip.put(DURATION, rs.getLong(DURATION));\r
\r
- Timestamp record = rs.getTimestamp(RECORDTIMESTAMP);\r
- clip.put(RECORDDATE, record);\r
- //NEXIO GW modified date nem jo a regi klippeknel\r
- Timestamp modified = rs.getTimestamp(MODIFIEDTIMESTAMP);\r
- if (modified.before(record))\r
- clip.put(MODIFIEDTIMESTAMP, record);\r
- else\r
- clip.put(MODIFIEDTIMESTAMP, modified);\r
- clip.put(KILLDATE, rs.getTimestamp(KILLDATE));\r
- collection.insert(clip);\r
- count++;\r
+ try {\r
+ BasicDBObject clip = new BasicDBObject();\r
+ clip.put(ID, rs.getString(ID));\r
+ clip.put(LONGNAMEID, rs.getString(LONGNAMEID));\r
+ clip.put(EXTAGENCY, rs.getString(EXTAGENCY));\r
+ clip.put(VIDEOBITRATE, rs.getString(VIDEOBITRATE));\r
+ clip.put(VIDEOFORMAT, rs.getString(VIDEOFORMAT));\r
+ clip.put(DURATION, rs.getLong(DURATION));\r
+\r
+ Timestamp record = rs.getTimestamp(RECORDTIMESTAMP);\r
+ clip.put(RECORDDATE, record);\r
+ //NEXIO GW modified date nem jo a regi klippeknel\r
+ Timestamp modified = rs.getTimestamp(MODIFIEDTIMESTAMP);\r
+\r
+ //neha elrontja, es ez is null\r
+ if (modified != null && modified.before(record))\r
+ clip.put(MODIFIEDTIMESTAMP, record);\r
+ else\r
+ clip.put(MODIFIEDTIMESTAMP, modified);\r
+ clip.put(KILLDATE, rs.getTimestamp(KILLDATE));\r
+ collection.insert(clip);\r
+ count++;\r
+ } catch (Exception e1) {\r
+ logger.error("Inner exception", e1);\r
+ }\r
}\r
logger.info("Transfered {} clips", count);\r
} catch (Exception e) {\r
--- /dev/null
+#
+# Copyright 2010-2017 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+## Base time zone to ensure times are consistent across machines
+time_zone=GMT+0:00
+
+## The character set that scripts are encoded with
+# script_char_set=UTF-8
+
+## JDBC connection properties.
+driver=com.ibm.db2.jcc.DB2Driver
+url=jdbc:db2://192.168.100.2:50000/mc:retrieveMessagesFromServerOnGetMessage=true;
+username=db2inst1
+password=password
+
+#
+# A NOTE ON STORED PROCEDURES AND DELIMITERS
+#
+# Stored procedures and functions commonly have nested delimiters
+# that conflict with the schema migration parsing. If you tend
+# to use procs, functions, triggers or anything that could create
+# this situation, then you may want to experiment with
+# send_full_script=true (preferred), or if you can't use
+# send_full_script, then you may have to resort to a full
+# line delimiter such as "GO" or "/" or "!RUN!".
+#
+# Also play with the autocommit settings, as some drivers
+# or databases don't support creating procs, functions or
+# even tables in a transaction, and others require it.
+#
+
+# This ignores the line delimiters and
+# simply sends the entire script at once.
+# Use with JDBC drivers that can accept large
+# blocks of delimited text at once.
+send_full_script=false
+
+# This controls how statements are delimited.
+# By default statements are delimited by an
+# end of line semicolon. Some databases may
+# (e.g. MS SQL Server) may require a full line
+# delimiter such as GO.
+# These are ignored if send_full_script is true.
+delimiter=@
+full_line_delimiter=false
+
+# If set to true, each statement is isolated
+# in its own transaction. Otherwise the entire
+# script is executed in one transaction.
+# Few databases should need this set to true,
+# but some do.
+auto_commit=false
+
+# If set to false, warnings from the database will interrupt migrations.
+ignore_warnings=false
+
+# Custom driver path to allow you to centralize your driver files
+# Default requires the drivers to be in the drivers directory of your
+# initialized migration directory (created with "migrate init")
+# driver_path=
+
+# Name of the table that tracks changes to the database
+changelog=CHANGELOG
+
+# Migrations support variable substitutions in the form of ${variable}
+# in the migration scripts. All of the above properties will be ignored though,
+# with the exception of changelog.
+# Example: The following would be referenced in a migration file as ${ip_address}
+# ip_address=192.168.0.1
+
+++ /dev/null
---
--- Copyright 2010-2016 the original author or authors.
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
--- http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
-
--- // First missing proxy
--- Migration SQL that makes the change goes here.
-
-
-
-CREATE FUNCTION FIRST_MISSING_PROXY_ID ()
- RETURNS BIGINT
- LANGUAGE SQL
- READS SQL DATA
- NO EXTERNAL ACTION
- DETERMINISTIC
- RETURN
- select m.id as mediaid from vw_mediafiles v, mediafile mf, filetype ft, media m where
- m.id=mf.mediaid and
- mf.mediaid = v.mediaid and
- v.mediafilecount=1 and
- mf.filetypeid=ft.id and
- ft.name='High-res'
- order by m.archived desc
- fetch first row only
-@
-
--- //@UNDO
--- SQL to undo the change goes here.
-DROP FUNCTION FIRST_MISSING_PROXY_ID
-@
)
@
-ALTER TABLE DB2ADMIN.MEDIADESCRIPTION
+ALTER TABLE MEDIADESCRIPTION
ADD CONSTRAINT FK_MEDIADESCRIPTION_MEDIAID
FOREIGN KEY(MEDIAID)
- REFERENCES DB2ADMIN.MEDIA(ID)
+ REFERENCES MEDIA(ID)
ON DELETE CASCADE
ON UPDATE NO ACTION
@
-ALTER TABLE DB2ADMIN.MEDIADESCRIPTION
+ALTER TABLE MEDIADESCRIPTION
ADD CONSTRAINT FK_MEDIADESCRIPTION_MEDIAFILEID
FOREIGN KEY(MEDIAFILEID)
- REFERENCES DB2ADMIN.MEDIAFILE(ID)
+ REFERENCES MEDIAFILE(ID)
ON DELETE CASCADE
ON UPDATE NO ACTION
@
-ALTER TABLE DB2ADMIN.MEDIADESCRIPTION
+ALTER TABLE MEDIADESCRIPTION
ADD CONSTRAINT FK_MEDIADESCRIPTION_ITEMID
FOREIGN KEY(ITEMID)
- REFERENCES DB2ADMIN.ITEM(ID)
+ REFERENCES ITEM(ID)
ON DELETE CASCADE
ON UPDATE NO ACTION
@
CREATE INDEX IDX_JOB_RELATED ON JOB ("RELATED")
@
-CALL SYSPROC.ADMIN_CMD('REORG TABLE DB2ADMIN.JOB')
+CALL SYSPROC.ADMIN_CMD('REORG TABLE JOB')
@
-- //@UNDO
ALTER TABLE JOB DROP COLUMN RELATED
@
-CALL SYSPROC.ADMIN_CMD('REORG TABLE DB2ADMIN.JOB')
+CALL SYSPROC.ADMIN_CMD('REORG TABLE JOB')
@
INSERT INTO STORE (NAME, ISSYSTEM, ISLOWRES) VALUES ('VOD', 'N', 'N')
@
+-- @DELIMITER ;
INSERT INTO STOREURI(STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER) VALUES
((SELECT ID FROM STORE WHERE NAME='VOD'),'FTP',null,'192.168.0.101','N','Y','Y','ftpuser','FtPVs3r@1',null,null)
-@
+;
+-- @DELIMITER @
-- //@UNDO
-- SQL to undo the change goes here.
ALTER TABLE STOREURI ALTER COLUMN USERNAME SET DATA TYPE VARCHAR(50)
@
-CALL SYSPROC.ADMIN_CMD ( 'REORG TABLE DB2ADMIN.STOREURI' )
+CALL SYSPROC.ADMIN_CMD ( 'REORG TABLE STOREURI' )
@
-- //@UNDO
ALTER TABLE STOREURI ALTER COLUMN USERNAME SET DATA TYPE VARCHAR(20)
@
-CALL SYSPROC.ADMIN_CMD ( 'REORG TABLE DB2ADMIN.STOREURI' )
+CALL SYSPROC.ADMIN_CMD ( 'REORG TABLE STOREURI' )
@
\r
boolean isService();\r
\r
+ boolean isTerminated();\r
+\r
boolean isWaitFinish();\r
\r
boolean isWaitingCancel();\r
isRunning = true;
TSMClient.SetUpMultithread();
} catch (Exception e) {
+ logger.error(e.getMessage());
logger.error(e);
}
logger.info("JobEngine started");
@Override
public void suspendExecutingJob(Throwable t, IJobRuntime jobRuntime) {
- String description = t.getMessage();
+ String description = t.getClass().getSimpleName() + " : " + t.getMessage();
jobRuntime.setDescription(description);
logger.error(description);
//TODO itt miert FINISH a kovetkezo allapot, miert nem SUSPEND
import com.ibm.nosql.json.api.BasicDBObject;\r
\r
import groovy.lang.GroovyClassLoader;\r
+import groovy.lang.GroovyCodeSource;\r
import user.commons.configuration.IConfiguration;\r
import user.commons.nosql.NoSQLUtils;\r
import user.jobengine.server.ast.Encoder;\r
BasicDBObject jsParam = (BasicDBObject) jobParams.get(p);\r
String n = jsParam.getString("name");\r
Object v = jsParam.get("value");\r
+\r
+ if (v == null)\r
+ continue;\r
+\r
if (v instanceof BasicDBList) {\r
- ArrayList<?> list = (BasicDBList) v;\r
- sj.setJobParameter(n, list);\r
- } else {\r
- if (v == null)\r
- continue;\r
-\r
- String sv = String.valueOf(v);\r
-\r
- if ("null".equals(v))\r
- continue;\r
-\r
- Class<?> clazz = null;\r
- try {\r
- clazz = Class.forName(jsParam.getString("type"));\r
- Object value = clazz.getConstructor(new Class[] { String.class }).newInstance(sv);\r
- sj.setJobParameter(n, value);\r
- } catch (Exception e) {\r
- logger.error(e);\r
- }\r
+ sj.setJobParameter(n, v);\r
+ continue;\r
+ }\r
+\r
+ if (v instanceof BasicDBObject) {\r
+ sj.setJobParameter(n, v);\r
+ continue;\r
+ }\r
+\r
+ String sv = String.valueOf(v);\r
+\r
+ if ("null".equals(v))\r
+ continue;\r
+\r
+ Class<?> clazz = null;\r
+ try {\r
+ clazz = Class.forName(jsParam.getString("type"));\r
+ Object value = clazz.getConstructor(new Class[] { String.class }).newInstance(sv);\r
+ sj.setJobParameter(n, value);\r
+ } catch (Exception e) {\r
+ logger.error(e);\r
}\r
\r
}\r
private Class<?> parseClassHierarchy(GroovyClassLoader cl, String root, String className) throws IOException {\r
Path path = Paths.get(root, className);\r
\r
- //logger.info("Loading class {} from {}", className, path.toString());\r
Class<?> result = null;\r
if (!path.toFile().exists())\r
return result;\r
List<String> lines = Files.readAllLines(path);\r
\r
for (String line : lines) {\r
- if (line.contains("extends")) {\r
+ String trimmedLine = line.trim();\r
+\r
+ if (trimmedLine.startsWith("import")) {\r
+ String[] tokens = trimmedLine.split("\\.");\r
+ String name = tokens[tokens.length - 1];\r
+ name = name.replace(";", "");\r
+ logger.info("Try loading imported file {}", name);\r
+ parseClassHierarchy(cl, root, name + ".java");\r
+ }\r
\r
- String[] tokens = line.split("extends");\r
+ if (trimmedLine.contains("extends")) {\r
+ String[] tokens = trimmedLine.split("extends");\r
String parent = tokens[tokens.length - 1];\r
parent = parent.replace("{", "").trim();\r
//logger.info("Class {} needs parent class {}", className, parent);\r
-\r
+ logger.info("Try loading parent file {}", parent);\r
parseClassHierarchy(cl, root, parent + ".java");\r
break;\r
}\r
}\r
- result = cl.parseClass(path.toFile());\r
+ GroovyCodeSource x = new GroovyCodeSource(path.toFile());\r
+ result = cl.parseClass(x, true);\r
return result;\r
}\r
}\r
return isService;
}
+ @Override
+ public boolean isTerminated() {
+ return getStatus() == JobStatus.SUSPENDED || getStatus() == JobStatus.FINISHED;
+ }
+
public boolean isTouchedByExecutor() {
if (!getStatus().equals(JobStatus.WAIT_EXECUTOR))
return false;
private Semaphore forkSempahore;
private IJobChangedListener jobChangedListener;
private List<Long> childrenIDs;
-
+
* */
@Override
\r
public IJobRuntime doJob() throws JobEngineException {\r
if (jobEngine.isScheduledExecutionDisabled()) {\r
- logger.warn("Scheduled execution is temporarly disabled, skipping execution of '{}'", jobName);\r
+ //logger.warn("Scheduled execution is temporarly disabled, skipping execution of '{}'", jobName);\r
return null;\r
}\r
return jobEngine.submit(templateName, jobName, getJobParameters());\r
\r
public IJobRuntime doJob(IJobStatusChangedListener statusListener) throws JobEngineException {\r
if (jobEngine.isScheduledExecutionDisabled()) {\r
- logger.warn("Scheduled execution is temporarly disabled, skipping execution of '{}'", jobName);\r
+ //logger.warn("Scheduled execution is temporarly disabled, skipping execution of '{}'", jobName);\r
return null;\r
}\r
return jobEngine.submit(null, statusListener, templateName, jobName, getJobParameters());\r
Bundle-SymbolicName: user.jobengine.osgi.services;singleton:=true
Bundle-Version: 1.0.0
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Service-Component: OSGI-INF/componentBinder.xml, OSGI-INF/HaltCommandProvider.xml
+Service-Component: OSGI-INF/*.xml
Bundle-ActivationPolicy: lazy
Web-ContextPath: /services
Import-Package: com.fasterxml.jackson.annotation;version="2.4.5",
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="activate" deactivate="deactivate" immediate="true" name="TestJobCommandProvider">\r
+ <service>\r
+ <provide interface="org.eclipse.osgi.framework.console.CommandProvider"/>\r
+ </service>\r
+ <implementation class="user.jobengine.osgi.console.TestJobCommandProvider"/>\r
+ <reference bind="bindJobEngine" cardinality="1..1" interface="user.jobengine.server.IJobEngine" name="IJobEngine" policy="static" unbind="unbindJobEngine"/>\r
+</scr:component>
\ No newline at end of file
--- /dev/null
+package user.jobengine.osgi.console;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+import java.util.concurrent.CountDownLatch;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.eclipse.osgi.framework.console.CommandInterpreter;\r
+import org.eclipse.osgi.framework.console.CommandProvider;\r
+\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.IJobStatusChangedListener;\r
+import user.jobengine.server.JobStatusChangedEvent;\r
+\r
+public class TestJobCommandProvider implements CommandProvider {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private IJobEngine jobEngine;\r
+\r
+ public Object _test(CommandInterpreter intp) {\r
+ if (jobEngine == null)\r
+ return "nothing to do";\r
+\r
+ CountDownLatch finishLatch = new CountDownLatch(1);\r
+\r
+ final Map<String, Object> parameters = new HashMap<>();\r
+ parameters.put("param", 100);\r
+ StringBuilder result = new StringBuilder();\r
+ try {\r
+ IJobRuntime runtime = jobEngine.submit("cancelable.xml", "Test", parameters);\r
+ runtime.addEventListener(new IJobStatusChangedListener() {\r
+ @Override\r
+ public void statusChanged(JobStatusChangedEvent event) {\r
+ IJobRuntime rt = (IJobRuntime) event.getSource();\r
+ if (rt.isTerminated()) {\r
+ finishLatch.countDown();\r
+ result.append("completed");\r
+ return;\r
+ }\r
+ //result.append(String.format("%d %s : %d", rt.getId(), rt.getName(), rt.getProgress()));\r
+ }\r
+ });\r
+\r
+ finishLatch.await();\r
+ } catch (Exception e1) {\r
+ logger.error(e1.getMessage());\r
+ }\r
+\r
+ return result.toString();\r
+ }\r
+\r
+ synchronized public void activate() {\r
+ logger.info("{} activated", getClass().getSimpleName());\r
+ }\r
+\r
+ synchronized public void bindJobEngine(IJobEngine jobEngine) {\r
+ this.jobEngine = jobEngine;\r
+ logger.info("JobEngine binded");\r
+ }\r
+\r
+ synchronized public void deactivate() {\r
+ logger.info("{} deactivated", getClass().getSimpleName());\r
+ }\r
+\r
+ @Override\r
+ public String getHelp() {\r
+ return "test - Execute Test job\n";\r
+ }\r
+\r
+ synchronized public void unbindJobEngine(IJobEngine jobEngine) {\r
+ logger.info("JobEngine unbinded");\r
+ jobEngine = null;\r
+ }\r
+}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>\r
-<window id="wndRetrieveBatch" title="Visszatöltés (v2)" width="700px" border="normal" apply="org.zkoss.bind.BindComposer"\r
+<window id="wndRetrieveBatch" title="Visszatöltés (v2)" width="700px" border="normal"\r
viewModel="@id('jlm') @init('user.jobengine.zk.model.AlternateRetrieveBatchSelectorModel')" onCancel="wndRetrieveBatch.detach()">\r
<grid>\r
<columns>\r
emptyMessage="Üres" selectedItems="@save(jlm.selectedItems)">\r
<listhead>\r
<listheader label="Azonosító" hflex="min" align="left" sort="auto" />\r
+ <listheader label="Gyűjtő" hflex="min" align="left" sort="auto" />\r
<listheader label="Cím" hflex="min" align="left" sort="auto" />\r
<listheader label="Filenév" hflex="1" align="left" sort="auto" />\r
</listhead>\r
<template name="model">\r
<listitem>\r
<listcell label="@load(each.media.id)" />\r
+ <listcell label="@load(each.item.title)" />\r
<listcell label="@load(each.media.title)" />\r
<listcell label="@load(each.media.mediaFileRealName)" />\r
</listitem>\r
<?xml version="1.0" encoding="UTF-8"?>\r
-<window id="resultWin" title="Folyamat futtatása" width="900px" border="normal" apply="org.zkoss.bind.BindComposer"\r
- viewModel="@id('jlm') @init('user.jobengine.zk.model.JobSelectorModel')" forward="onCancel=closeButton.onClick">\r
+<window id="resultWin" title="Folyamat futtatása" width="900px" border="normal" viewModel="@id('jlm') @init('user.jobengine.zk.model.JobSelectorModel')" forward="onCancel=closeButton.onClick">\r
<borderlayout height="450px">\r
<center border="none" flex="true">\r
<listbox model="@load(jlm.jobs)" selectedItem="@bind(jlm.selectedJob)">\r
-<?xml version="1.0" encoding="UTF-8"?>\r
-<window id="window" title="" width="900px" height="655px" position="top_center" sizable="true" border="normal" apply="org.zkoss.bind.BindComposer"\r
- viewModel="@id('vm') @init('user.jobengine.zk.model.MetadataDetailsModel')" forward="onCancel=closeButton.onClick">\r
- <style>\r
- .z-window-header{ background:#008ac8; color:white; font-size:16px; padding:10px; } .z-row:hover > .z-row-inner{ background:#7ad6ff40; }\r
- </style>\r
- <attribute name="onSize"><![CDATA[\r
- Integer gridHeight=Integer.parseInt(self.getHeight().replace("px",""))-48;\r
- String height= String.valueOf(gridHeight*1/18);\r
- item_houseid.setHeight(height+"px");\r
- Clients.resize(item_houseid);\r
- item_title.setHeight(height+"px");\r
- Clients.resize(item_title);\r
- item_type.setHeight(height+"px");\r
- Clients.resize(item_type);\r
- media_houseid.setHeight(height+"px");\r
- Clients.resize(media_houseid);\r
- media_title.setHeight(height+"px");\r
- Clients.resize(media_title);\r
- media_type.setHeight(height+"px");\r
- Clients.resize(media_type);\r
- height= String.valueOf(gridHeight*3/18);\r
- item_description.setHeight(height+"px");\r
- Clients.resize(item_description);\r
- height= String.valueOf(gridHeight*9/18);\r
- media_description.setHeight(height+"px");\r
- Clients.resize(media_description);\r
- height= String.valueOf(gridHeight*9/18*0.88);\r
- media_description_content.setHeight(height+"px");\r
- Clients.resize(media_description_content);\r
- ]]></attribute>\r
+<window id="metadataEditorWnd" title="Leírás szerkesztése" width="50%" height="50%" mode="overlapped" closable="true" maximizable="true" minimizable="false"\r
+ sizable="true" position="left,top" viewModel="@id('vm') @init('user.jobengine.zk.model.MetadataDetailsModel')" forward="onCancel=closeButton.onClick">\r
+\r
<vlayout height="100%">\r
- <div id="div" vflex="true" >\r
- <listbox vflex="1" style="border: none; background: #e3e3e3 !important;">\r
- <listhead>\r
- <listheader label="" width="20%" />\r
- <listheader label="" />\r
- </listhead>\r
- <listitem id="item_houseid">\r
- <listcell label="Anyag azonosítója:" />\r
- <listcell label="@load(vm.archivedMedia.item.houseId)"/>\r
- </listitem>\r
- <listitem id="item_title">\r
- <listcell label="Anyag címe:" />\r
- <listcell label="@load(vm.archivedMedia.item.title)"/>\r
- </listitem>\r
- <listitem id="item_type">\r
- <listcell label="Anyag típusa:" />\r
- <listcell label="@load(vm.archivedMedia.item.itemType.name)"/>\r
- </listitem>\r
- <listitem id="item_description">\r
- <listcell label="Anyag leírása" />\r
- <listcell><textbox rows="6" inplace="true" width="99%" value="@load(vm.archivedMedia.item.description) @save(vm.archivedMedia.item.description,before='save')"></textbox></listcell>\r
- </listitem>\r
- <listitem id="media_houseid">\r
- <listcell label="Média azonosítója:" />\r
- <listcell><textbox inplace="true" value="@load(vm.archivedMedia.media.houseId) @save(vm.archivedMedia.media.houseId,before='save')"></textbox></listcell>\r
- </listitem>\r
- <listitem id="media_title">\r
- <listcell label="Média címe:" />\r
- <listcell><textbox inplace="true" width="99%" value="@load(vm.archivedMedia.media.title) @save(vm.archivedMedia.media.title,before='save')"></textbox></listcell>\r
- </listitem>\r
- <listitem id="media_type">\r
- <listcell label="Média típusa:" />\r
- <listcell><combobox id="mediatypes" width="300px"\r
- selectedItem="@load(vm.archivedMedia.media.itemType)@save(vm.archivedMedia.media.itemType,before='save')" model="@load(vm.itemTypes)">\r
- <template name="model">\r
- <comboitem label="${each.name}" value="${each}"></comboitem>\r
- </template>\r
- </combobox></listcell>\r
- </listitem>\r
- <listitem id="media_description">\r
- <listcell label="Média leírása:" />\r
- <listcell><textbox rows="21" inplace="true" width="99%" id="media_description_content"\r
- value="@load(vm.archivedMedia.media.description) @save(vm.archivedMedia.media.description,before='save')">\r
- </textbox></listcell>\r
- </listitem>\r
- </listbox>\r
- </div>\r
- <div vflex="min">\r
- <hbox width="100%" vflex="min" pack="center" align="center">\r
- <button id="saveButton" label="Mentés" onClick="@command('save')"/>\r
+ <tabbox id="pagesTab" vflex="true" hflex="true" orient="top">\r
+ <tabs visible="true">\r
+ <tab id="tab0" label="Adatok" selected="true" />\r
+ <tab id="tab1" label="Média leírása" />\r
+ </tabs>\r
+ <tabpanels>\r
+ <tabpanel>\r
+ <listbox vflex="true" style="border: none; background: white !important;">\r
+ <listhead>\r
+ <listheader hflex="min" />\r
+ <listheader width="90%" />\r
+ </listhead>\r
+ <listitem id="item_houseid">\r
+ <listcell label="Gyűjtő azonosítója" />\r
+ <listcell label="@load(vm.archivedMedia.item.houseId)" />\r
+ </listitem>\r
+ <listitem id="item_title">\r
+ <listcell label="Gyűjtő címe" />\r
+ <listcell label="@load(vm.archivedMedia.item.title)" />\r
+ </listitem>\r
+ <listitem id="item_type">\r
+ <listcell label="Gyűjtő típusa" />\r
+ <listcell label="@load(vm.archivedMedia.item.itemType.name)" />\r
+ </listitem>\r
+ <listitem id="item_description">\r
+ <listcell label="Gyűjtő leírása" style="vertical-align: top;" />\r
+ <listcell label="@load(vm.archivedMedia.item.description)" />\r
+ </listitem>\r
+ <listitem id="media_houseid">\r
+ <listcell label="Média azonosítója" />\r
+ <listcell>\r
+ <textbox hflex="true" value="@load(vm.archivedMedia.media.houseId) @save(vm.archivedMedia.media.houseId,before='save')"></textbox>\r
+ </listcell>\r
+ </listitem>\r
+ <listitem id="media_title">\r
+ <listcell label="Média címe" />\r
+ <listcell>\r
+ <textbox hflex="true" value="@load(vm.archivedMedia.media.title) @save(vm.archivedMedia.media.title,before='save')" />\r
+ </listcell>\r
+ </listitem>\r
+ <listitem id="media_type">\r
+ <listcell label="Média típusa" />\r
+ <listcell>\r
+ <combobox id="mediatypes" hflex="true" model="@load(vm.itemTypes)"\r
+ selectedItem="@load(vm.archivedMedia.media.itemType)@save(vm.archivedMedia.media.itemType,before='save')">\r
+ <template name="model">\r
+ <comboitem label="${each.name}" value="${each}"></comboitem>\r
+ </template>\r
+ </combobox>\r
+ </listcell>\r
+ </listitem>\r
+ </listbox>\r
+ </tabpanel>\r
+ <tabpanel>\r
+ <textbox id="media_description_hidden" multiline="true" hflex="true" vflex="true"\r
+ value="@load(vm.archivedMedia.media.description) @save(vm.archivedMedia.media.description,before='save')" />\r
+ </tabpanel>\r
+ </tabpanels>\r
+ </tabbox>\r
+\r
+\r
+ <div hflex="true" vflex="min" align="center">\r
+ <button id="saveButton" label="Mentés" onClick="@command('save')" />\r
<button id="closeButton" label="Mégse" onClick="@command('close')" />\r
- </hbox>\r
</div>\r
</vlayout>\r
+ <!-- \r
+ <h:script defer="true">\r
+ var text = document.getElementById("media_description"); \r
+ \r
+ function setDescription(val) {\r
+ text.value = val;\r
+ }\r
+ \r
+ // https://stackoverflow.com/questions/454202/creating-a-textarea-with-auto-resize\r
+ var observe;\r
+ if (window.attachEvent) {\r
+ observe = function (element, event, handler) {\r
+ element.attachEvent('on'+event, handler);\r
+ };\r
+ }\r
+ else {\r
+ observe = function (element, event, handler) {\r
+ element.addEventListener(event, handler, false);\r
+ };\r
+ } \r
+ \r
+ \r
+ function resize() {\r
+ text.style.height = 'auto';\r
+ text.style.height = text.scrollHeight + 10 + 'px';\r
+ }\r
+ \r
+ function delayedResize() {\r
+ window.setTimeout(resize(), 0);\r
+ }\r
+ \r
+ \r
+ observe(text, 'change', delayedResize);\r
+ observe(text, 'cut', delayedResize);\r
+ observe(text, 'paste', delayedResize);\r
+ observe(text, 'drop', delayedResize);\r
+ observe(text, 'keydown', delayedResize);\r
+ \r
+ \r
+ \r
+ text.focus();\r
+ text.select();\r
+ resize();\r
+ \r
+ </h:script>\r
+ -->\r
</window>\r
-\r
<?xml version="1.0" encoding="UTF-8"?>\r
-<window id="wndRetrieveBatch" title="Visszatöltés" width="700px" border="normal" apply="org.zkoss.bind.BindComposer"\r
+<window id="wndRetrieveBatch" title="Visszatöltés" width="700px" border="normal" \r
viewModel="@id('jlm') @init('user.jobengine.zk.model.RetrieveBatchSelectorModel')" onCancel="wndRetrieveBatch.detach()">\r
<grid>\r
<columns>\r
emptyMessage="Üres" selectedItems="@save(jlm.selectedItems)">\r
<listhead>\r
<listheader label="Azonosító" hflex="min" align="left" sort="auto" />\r
+ <listheader label="Gyűjtő" hflex="min" align="left" sort="auto" />\r
<listheader label="Cím" hflex="min" align="left" sort="auto" />\r
<listheader label="Filenév" hflex="1" align="left" sort="auto" />\r
</listhead>\r
<template name="model">\r
<listitem>\r
<listcell label="@load(each.media.id)" />\r
+ <listcell label="@load(each.item.title)" />\r
<listcell label="@load(each.media.title)" />\r
<listcell label="@load(each.media.mediaFileRealName)" />\r
</listitem>\r
<?component name="search-results" inline="true" macroURI="searchitems/results.zul"?>\r
<?component name="item-details" inline="true" macroURI="searchitems/details.zul"?>\r
\r
-<zk xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:h="xhtml" xmlns:n="native" xmlns:c="client">\r
+<zk xmlns:h="xhtml" xmlns:n="native" xmlns:c="client">\r
<style src="/css/video-js.css" />\r
<style src="/css/searchitems.css" /> \r
<style src="/css/tagify.css" /> \r
<div id="tagListener" onChange="@command('onTagChanged')" />\r
\r
<borderlayout width="100%" height="100%">\r
- <west id="searchWest" border="none" flex="true" size="60%" splittable="true" minsize="500" onSize="@command('onWestResize', west=self)">\r
+ <west id="searchWest" border="none" flex="true" size="60%" splittable="true" minsize="500" onSize="@command('onWestResize')">\r
<div height="100%" width="100%">\r
\r
<search-filters />\r
<zk xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:h="xhtml" xmlns:c="client" height="100%" width="100%">\r
- <div height="100%">\r
- <toolbar width="100%" style="min-height:40px; font-size:8px">\r
- <div style="max-width:450px; margin:auto;">\r
- <div sclass="menuButtons">\r
- <toolbarbutton image="/img/ic_compare_arrows_black_18dp.png" autodisable="self" onClick="@command('showInResults')"\r
- disabled="@load(vm.selectedObject eq null)" label="Szinkronizálás" />\r
- <toolbarbutton sclass="col-xs-12" image="/img/ic_shopping_cart_black_18dp.png" autodisable="self" onClick="@command('downloadMedia')"\r
- disabled="@load(not vm.hasTSMMediaFile)" label="Kosárba" />\r
- <toolbarbutton image="/img/baseline_share_black_18dp.png" autodisable="self" onClick="@command('copyMediaIdToClipboard')"\r
- disabled="@load(not sessionScope.userPrincipal.editor or sessionScope.userPrincipal.anonymous or vm.selectedObject eq null)" label="Megosztás" />\r
- <toolbarbutton image="/img/baseline_edit_black_18dp.png" autodisable="self" onClick="@command('openMetaDataDialog')"\r
- disabled="@load(not sessionScope.userPrincipal.editor or sessionScope.userPrincipal.anonymous or vm.selectedObject eq null)" label="Szerkesztés" />\r
- <separator />\r
- <toolbarbutton iconSclass="z-icon-film" autodisable="self" onClick="@command('createLowres')"\r
- disabled="@load(not sessionScope.userPrincipal.editor or sessionScope.userPrincipal.anonymous or vm.selectedObject eq null)" label="Proxy pótlása" />\r
- \r
- <toolbarbutton autodisable="self" c:onClick="pushTcIn('${arg.field}')" label="IN" visible="${not sessionScope.guiEditorDisable}" />\r
- <toolbarbutton autodisable="self" c:onClick="pushTcOut('${arg.field}')" label="OUT" visible="${not sessionScope.guiEditorDisable}" />\r
- </div>\r
- </div>\r
+ <div height="100%" width="100%">\r
+ <toolbar width="100%" style="min-height:40px; font-size:8px;border-bottom:1px solid darkgray">\r
+ <toolbarbutton image="/img/ic_compare_arrows_black_18dp.png" autodisable="self" onClick="@command('showInResults')"\r
+ disabled="@load(vm.selectedObject eq null)" label="Szinkronizálás" />\r
+ <toolbarbutton sclass="col-xs-12" image="/img/ic_shopping_cart_black_18dp.png" autodisable="self" onClick="@command('downloadMedia')"\r
+ disabled="@load(not vm.hasTSMMediaFile)" label="Kosárba" />\r
+ <toolbarbutton image="/img/baseline_share_black_18dp.png" autodisable="self" onClick="@command('copyMediaIdToClipboard')"\r
+ disabled="@load(not sessionScope.userPrincipal.editor or sessionScope.userPrincipal.anonymous or vm.selectedObject eq null)" label="Megosztás" />\r
+ <toolbarbutton image="/img/outline_theaters_black_18dp.png" autodisable="self" onClick="@command('createLowres')"\r
+ disabled="@load(not sessionScope.userPrincipal.editor or sessionScope.userPrincipal.anonymous or vm.selectedObject eq null)" label="Proxy pótlása" />\r
+ <toolbarbutton image="/img/baseline_edit_black_18dp.png" autodisable="self" onClick="@command('openMetaDataDialog')"\r
+ disabled="@load(not sessionScope.userPrincipal.editor or sessionScope.userPrincipal.anonymous or vm.selectedObject eq null)" label="Szerkesztés" />\r
</toolbar>\r
\r
<div id="mediaDetails" width="100%" vflex="true" style="padding: 4px; overflow:auto; background-color: white">\r
<toolbar id="tagsToolbar" width="100%" style="background: transparent">\r
<h:textarea name='filterTags' placeholder='Címkék'></h:textarea>\r
</toolbar>\r
- <toolbar id="tb" width="100%" style="background: transparent">\r
- <toolbarbutton id="toggleShowTypeFilters" iconSclass="z-icon-caret-down" mode="toggle">\r
+ <toolbar id="filterToolbar" width="100%" style="background: transparent">\r
+ <toolbarbutton id="toggleShowTypeFilters" iconSclass="z-icon-caret-down" mode="toggle" onCheck="@command('toggleTypeFiltersCheck')">\r
+<!-- \r
<attribute name="onCheck">\r
- serachDetails.open = !serachDetails.open;\r
- self.iconSclass = serachDetails.open ? "z-icon-caret-up" : "z-icon-caret-down"; \r
+ serachDetails.open = toggleShowTypeFilters.checked;\r
+ self.iconSclass = toggleShowTypeFilters.checked ? "z-icon-caret-up" : "z-icon-caret-down"; \r
</attribute>\r
+ -->\r
</toolbarbutton>\r
<toolbarbutton iconSclass="z-icon-th" popup="searchSettings, after_start" />\r
<separator orient="vertical" />\r
}\r
\r
public boolean isMaestroAvailable() {\r
- return equals(SessionUtil.getMediaCubeConfig().isMaestroDisabled());\r
+ return !SessionUtil.getMediaCubeConfig().isMaestroDisabled();\r
}\r
\r
@Command\r
package user.jobengine.zk.model;\r
\r
+import java.util.Collections;\r
import java.util.List;\r
import java.util.ListIterator;\r
\r
public class MetadataDetailsModel extends BaseModel {\r
private static final Logger logger = LogManager.getLogger();\r
\r
- @Wire("#window")\r
- private Window wnd;\r
+ @Wire\r
+ private Window metadataEditorWnd;\r
public ArchivedMedia archivedMedia;\r
private List<ItemType> itemTypes;\r
private ItemManager manager;\r
iterator.add(archivedMedia.getMedia().getItemType());\r
}\r
}\r
+\r
+ Collections.sort(itemTypes, (i1, i2) -> {\r
+ return i1.getName().compareTo(i2.getName());\r
+ });\r
+\r
+ // String description = Strings.escape(archivedMedia.getMedia().getDescription(), Strings.ESCAPE_JAVASCRIPT);\r
+ // //String description = "Mi a szar?";\r
+ // if (description != null) {\r
+ // StringBuilder script = new StringBuilder();\r
+ // script.append("setDescription('");\r
+ // script.append(description);\r
+ // script.append("')");\r
+ // Clients.evalJavaScript(script.toString());\r
+ // }\r
}\r
\r
@Command\r
public void close() {\r
- wnd.detach();\r
+ metadataEditorWnd.detach();\r
}\r
\r
public ArchivedMedia getArchivedMedia() {\r
manager.modify(archivedMedia.getItem());\r
manager.modify(archivedMedia.getMedia());\r
logger.info("Metadata modified: {}", archivedMedia.getMedia().getId());\r
- wnd.detach();\r
+ close();\r
}\r
\r
public void setArchivedMedia(ArchivedMedia archivedMedia) {\r
import org.zkoss.zul.Menupopup;\r
import org.zkoss.zul.Messagebox;\r
import org.zkoss.zul.Paging;\r
+import org.zkoss.zul.Panel;\r
import org.zkoss.zul.Row;\r
import org.zkoss.zul.Timer;\r
import org.zkoss.zul.Toolbar;\r
Hbox searchFiltersMenu;\r
@Wire\r
Toolbarbutton toggleShowTypeFilters;\r
+ @Wire\r
+ Panel serachDetails;\r
+ @Wire\r
+ Toolbar filterToolbar;\r
\r
@Wire\r
Menupopup searchSettings;\r
//Clients.evalJavaScript("setSource('http://localhost:9080/services/proxy/20209535_1-20205617.mp4', 'video/mp4')");\r
\r
try {\r
+\r
Selectors.wireComponents(view, this, false);\r
Selectors.wireEventListeners(view, this);\r
+\r
+ boolean typeFiltersVisible = SessionUtil.getTypeFiltersVisibility();\r
+ if (typeFiltersVisible) {\r
+ toggleShowTypeFilters.setChecked(true);\r
+ toggleTypeFiltersCheck();\r
+ search.setFocus(true);\r
+ }\r
+\r
configureSearchResultGrid();\r
showExternalMediaID();\r
\r
public void onAfterRenderGrid() {\r
//aszinkron fut le, kulon kezelendo a hiba\r
try {\r
+\r
if (searchResult != null)\r
logger.info("isempty {}", searchResult.isEmpty());\r
\r
}\r
\r
@Command\r
- public void onWestResize(@BindingParam("west") West _west) {\r
- //_west.invalidate();\r
+ public void onWestResize() {\r
+ filterToolbar.invalidate();\r
}\r
\r
@Command\r
public void openMetaDataDialog() {\r
String template = "/pages/metadatadetails.zul";\r
Window window = (Window) Executions.createComponents(template, null, ListUtils.asMap("selectedObject", selectedObject));\r
- window.doModal();\r
+ window.doOverlapped();\r
+\r
}\r
\r
private void processFilterTagChanged(JSONObject jsObject) {\r
toggleShowTypeFilters, "end_center", 3000);\r
}\r
\r
+ @Command\r
+ public void toggleTypeFiltersCheck() {\r
+ boolean visible = toggleShowTypeFilters.isChecked();\r
+ toggleShowTypeFilters.setIconSclass(visible ? "z-icon-caret-up" : "z-icon-caret-down");\r
+ serachDetails.setOpen(visible);\r
+ SessionUtil.putUserTypeFiltersVisibility(visible);\r
+ }\r
+\r
public void updateAllChecked() {\r
final boolean[] check = { true };\r
for (String key : typeFilters.keySet()) {\r
private static final String SEARCH_FILTER = "searchFilter";\r
private static final String COLUMN_ORDERS = "columnOrders";\r
private static final String PAGE_SIZE = "pageSize";\r
+ private static final String TYPEFILTERS_VISIBILITY = "typeFiltersVisibility";\r
private static final String SEARCH_HISTORY = "searchHistory";\r
private static final String USER_NAME = "userName";\r
private static final String USER_SETTINGS = "userSettings";\r
return result;\r
}\r
\r
+ public static boolean getTypeFiltersVisibility() {\r
+ BasicDBObject userSettings = getUserSettings();\r
+ return userSettings.get(TYPEFILTERS_VISIBILITY) == null ? false : (boolean) userSettings.get(TYPEFILTERS_VISIBILITY);\r
+ }\r
+\r
public static Map<String, Object> getUserColumnOrder() {\r
BasicDBObject userSettings = getUserSettings();\r
return (Map<String, Object>) userSettings.get(COLUMN_ORDERS);\r
\r
}\r
\r
+ public static void putUserTypeFiltersVisibility(boolean visible) {\r
+ BasicDBObject userSettings = getUserSettings();\r
+ userSettings.put(TYPEFILTERS_VISIBILITY, visible);\r
+ putUserSettings();\r
+ }\r
+\r
static public void redirect(String path) {\r
Executions.sendRedirect(path + getQueryString());\r
}\r
import java.io.IOException;\r
import java.util.Vector;\r
\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
import user.tsm.client.api.internal.DataBlk;\r
import user.tsm.client.api.internal.DsmApiVersionEx;\r
import user.tsm.client.api.internal.DsmArchiveDelInfo;\r
import user.tsm.client.api.internal.TSMAPIConstants;\r
\r
public class TSMClient {\r
+ private static Logger logger = LogManager.getLogger();\r
private static boolean multiThread = false;\r
private static DsmApiVersionEx apiVersionEx = null;\r
\r
if (!TSMAPI.isAvailable())\r
return;\r
short rc = TSMAPI.dsmCleanUp(TSMAPIConstants.DSM_MULTITHREAD);\r
+ logger.info("dsmCleanUp {}", rc);\r
if (rc != TSMAPIConstants.DSM_RC_OK)\r
throw new TSMException(0, rc);\r
multiThread = false;\r
\r
public static void SetUpMultithread() throws TSMException {\r
if (multiThread == false) {\r
+ logger.info("TSMAPI available {}", TSMAPI.isAvailable());\r
if (!TSMAPI.isAvailable())\r
return;\r
short rc = TSMAPI.dsmSetUp(TSMAPIConstants.DSM_MULTITHREAD);\r
+ logger.info("dsmSetUp {}", rc);\r
if (rc != TSMAPIConstants.DSM_RC_OK)\r
throw new TSMException(0, rc);\r
multiThread = true;\r