--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Anyag archiválás" description="Kiválasztott média nagy felbontású verziójának mentése TSM archívumba.">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="archiveItem" type="user.jobengine.server.steps.ArchiveItem" />\r
+ </parameters>\r
+ <variables>\r
+ <variable name="mediaCubeMedia" type="user.jobengine.db.Media" />\r
+ </variables>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep id="id1" type="user.jobengine.server.steps.MetadataTransformStep" 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 id="id2" type="user.jobengine.server.steps.TSMBackupStep" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="archiveItem" />\r
+ </input>\r
+ <input>\r
+ <variable name="mediaCubeMedia" />\r
+ </input>\r
+ </inputs>\r
+ <commands>\r
+ <calljobstep id="id3" type="user.jobengine.server.steps.SelenioLowresTranscodeStep" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <variable name="mediaCubeMedia" />\r
+ </input>\r
+ </inputs>\r
+ <outputs>\r
+ </outputs>\r
+ </calljobstep>\r
+ </commands>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Kézi archiválás">\r
+<declarations>\r
+ <parameters>\r
+<!-- mount -t cifs -o username=mediacube,password=Broadca5T //10.10.1.100/BRAAVOS /mnt/ISILON -->\r
+ <parameter name="inputFolder" type="java.lang.String"/>\r
+ </parameters>\r
+ <variables>\r
+ <variable name="archiveList" type="java.util.ArrayList"/>\r
+ </variables>\r
+</declarations>\r
+<commands>\r
+ <calljobstep id="step1" type="user.jobengine.server.steps.ArchiveListBuilderStep" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="inputFolder" />\r
+ </input>\r
+ </inputs>\r
+ <outputs>\r
+ <output>\r
+ <variable name="archiveList" />\r
+ </output>\r
+ </outputs>\r
+ </calljobstep>\r
+ \r
+ <calljobstep id="step2" type="user.jobengine.server.steps.ArchiveItemSubmitStep" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <variable name="archiveList" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+</commands>\r
+</jobtemplate>
\ No newline at end of file
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>\r
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dorg.eclipse.equinox.http.jetty.http.port=8080 -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.osgi.server/resources/templates" -Djobengine.db.url=jdbc:db2://localhost:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=salabakter -Djobengine.loglevel=INFO -Djobengine.rcc.host=localhost -Djobengine.rcc.defaultlowresprofile="WindowsMedia - Web Streaming - DSL or Cable Modem" -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/user/jobengine/server/steps" -Djobengine.transcoder.source=c:\_Movie\hires\ -Djetty.home="${workspace_loc:-configuration}/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Djobengine.octopus.api.address=http://10.10.1.21/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://localhost:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=salabakter -Djobengine.nosql.db.schema=test -Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; -Djobengine.nexio.db.user=sa -Djobengine.nexio.db.password=resolve -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC_v4.zenium -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json""/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dorg.eclipse.equinox.http.jetty.http.port=8080 -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}//-configuration/jobtemplates" -Djobengine.db.url=jdbc:db2://localhost:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=salabakter -Djobengine.loglevel=INFO -Djobengine.rcc.host=localhost -Djobengine.rcc.defaultlowresprofile="WindowsMedia - Web Streaming - DSL or Cable Modem" -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/user/jobengine/server/steps" -Djobengine.transcoder.source=c:\_Movie\hires\ -Djetty.home="${workspace_loc:-configuration}/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Djobengine.octopus.api.address=http://10.10.1.21/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://localhost:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=salabakter -Djobengine.nosql.db.schema=test -Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; -Djobengine.nexio.db.user=sa -Djobengine.nexio.db.password=resolve -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC_v4.zenium -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json""/>\r
<stringAttribute key="pde.version" value="3.3"/>\r
<booleanAttribute key="show_selected_only" value="false"/>\r
<stringAttribute key="target_bundles" value="cglib@default:default,com.auth0.java-jwt@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.dataformat.jackson-dataformat-yaml@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default,com.google.guava@default:default,com.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,com.sun.el.javax.el@default:default,commons-logging@default:default,javassist@default:default,javax.annotation-api@default:default,javax.inject@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.servlet.jsp-api@default:default,javax.validation.api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang3@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.jasper.glassfish@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jdt.core.compiler.batch@default:default,org.eclipse.jetty.client@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.jsp@default:default,org.eclipse.jetty.osgi.boot.jsp@default:false,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.jvnet.mimepull@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,org.reflections@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
{"joblist":[\r
{\r
"active": false,\r
- "name" : "Anyagok archiválása",\r
- "template": "archivemedia.xml",\r
+ "name" : "On-demand archiválás",\r
+ "template": "archive-ondemand.xml",\r
"executeimmediate": true,\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
- "parameters": [ {"name": "mediaFolder", "value": "/tmp", "type": "java.lang.String"} ]\r
+ "parameters": [ \r
+ {"name": "inputFolder", "value": "/mnt/ISILON/ARCHIVE", "type": "java.lang.String"} \r
+ ]\r
},\r
{\r
"active": false,\r
<outputDirectory>${project.build.directory}/products/MediaCube/win32/win32/x86_64/configuration/templates</outputDirectory>\r
<resources>\r
<resource>\r
- <directory>${basedir}/../user.jobengine.osgi.server/resources/templates</directory>\r
+ <directory>${basedir}/../-configuration/jobtemplates</directory>\r
</resource>\r
</resources>\r
</configuration>\r
<?xml version="1.0" encoding="UTF-8"?>\r
<classpath>\r
<classpathentry kind="src" path="src"/>\r
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>\r
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
<classpathentry kind="output" path="bin"/>\r
</classpath>\r
eclipse.preferences.version=1\r
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled\r
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7\r
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate\r
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8\r
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve\r
-org.eclipse.jdt.core.compiler.compliance=1.7\r
+org.eclipse.jdt.core.compiler.compliance=1.8\r
org.eclipse.jdt.core.compiler.debug.lineNumber=generate\r
org.eclipse.jdt.core.compiler.debug.localVariable=generate\r
org.eclipse.jdt.core.compiler.debug.sourceFile=generate\r
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error\r
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error\r
-org.eclipse.jdt.core.compiler.source=1.7\r
+org.eclipse.jdt.core.compiler.source=1.8\r
com.ibm.nosql;bundle-version="4.19.26",
org.apache.logging.log4j.api;bundle-version="2.8.2"
Bundle-ClassPath: .
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+++ /dev/null
-package user.jobengine.server.steps;\r
-\r
-import java.util.ArrayList;\r
-\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-\r
-import user.commons.ListUtils;\r
-import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.IJobRuntime;\r
-\r
-/**\r
- * Elinditja minden mediara az archivalo es lowres tanszkodolo jobokat.\r
- * @author robi\r
- */\r
-public class ArchiveItemJobCreatorStep extends JobStep {\r
- private static final Logger logger = LogManager.getLogger();\r
-\r
- @StepEntry\r
- public Object[] execute(ArrayList<MediaFileWrapper> wrapperList, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
- try {\r
- for (MediaFileWrapper wr : wrapperList) {\r
- try {\r
- //START ARCHIVEMEDIA JOB\r
- IJobRuntime runtime1 = jobEngine.submit("tsmbackupmediawrapper.xml", "TSMBackupMedia",\r
- ListUtils.asMap("mediaWrapper", wr));\r
-\r
- //START LOWRES TRANSCODER JOB\r
- IJobRuntime runtime2 = jobEngine.submit("lowrestranscodemedia.xml", "LowresTranscodeMedia",\r
- ListUtils.asMap("mediaWrapper", wr));\r
- } catch (Exception e1) {\r
- wr.getCatchedFile().delete();\r
- throw e1;\r
- }\r
- }\r
-\r
- } catch (Exception e) {\r
- logger.error("", e);\r
- }\r
- return new Object[] {};\r
- }\r
-\r
-}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.File;\r
+import java.nio.file.Path;\r
+import java.util.ArrayList;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.ListUtils;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+/**\r
+ * Elinditja minden mediara az archivalo folyamatot.\r
+ *\r
+ * @author robi\r
+ */\r
+public class ArchiveItemSubmitStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String JOBTEMPLATE = "archive-item.xml";\r
+ private static final String ARCHIVE_ITEM = "archiveItem";\r
+\r
+ @StepEntry\r
+ public Object[] execute(ArrayList<ArchiveItem> archiveList, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
+ try {\r
+ for (ArchiveItem archiveItem : archiveList) {\r
+ String title = "Archiválás: " + archiveItem.getMediaFile();\r
+ try {\r
+ jobEngine.submit(JOBTEMPLATE, title, ListUtils.asMap(ARCHIVE_ITEM, archiveItem));\r
+ } catch (Exception e) {\r
+ if (archiveItem != null)\r
+ removeCatchedFile(archiveItem.getCatchedFile());\r
+ throw e;\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ }\r
+ return new Object[] {};\r
+ }\r
+\r
+ private void removeCatchedFile(Path catchedFilePath) {\r
+ if (catchedFilePath != null) {\r
+ File catchedFile = catchedFilePath.toFile();\r
+ if (catchedFile.exists())\r
+ catchedFile.delete();\r
+ }\r
+ }\r
+\r
+}\r
import java.nio.file.Paths;\r
import java.nio.file.StandardOpenOption;\r
import java.util.ArrayList;\r
+import java.util.List;\r
\r
+import org.apache.commons.lang.StringUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
import user.jobengine.server.IJobRuntime;\r
\r
/**\r
- * Az archivalhato mediak listazasa MediaFileWrapper objektumokban.\r
- * A listazott media allomanyokat megjeloli .catched signal allomannyal,\r
- * hogy a legkozelebbi listazas figyelmen kivul hagyja. \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 CATCHED = "catched";\r
+ private static final String STOREFOLDER = ".STORE";\r
+ private static final String MEDIAEXT = ".mxf";\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
+\r
+ private ArchiveItem createArchiveItem(Path jsonFilePath, Path mediaFilePath, Path catchedFilePath) {\r
+ ArchiveItem result = null;\r
+ byte[] readAllBytes = null;\r
+ try {\r
+ readAllBytes = Files.readAllBytes(jsonFilePath);\r
+ BasicDBObject dbObject = (BasicDBObject) JSONUtil.jsonToDbObject(new String(readAllBytes));\r
+ if (dbObject == null)\r
+ throw new NullPointerException("Can not parse JSON file: " + jsonFilePath);\r
+ result = new ArchiveItem();\r
+ fillMetadata(result, dbObject, ITEM_HOUSEID);\r
+ fillMetadata(result, dbObject, ITEM_TITLE);\r
+ fillMetadata(result, dbObject, ITEM_DESCRIPTION);\r
+ fillMetadata(result, dbObject, MEDIA_HOUSEID);\r
+ fillMetadata(result, dbObject, MEDIA_TITLE);\r
+ fillMetadata(result, dbObject, MEDIA_DESCRIPTION);\r
+\r
+ result.setMediaFile(mediaFilePath);\r
+ result.setCatchedFile(catchedFilePath);\r
+\r
+ } catch (IOException e) {\r
+ logger.catching(e);\r
+ return null;\r
+ }\r
+ return result;\r
+ }\r
\r
- @StepEntry\r
- public Object[] execute(String mediaFolder, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
- final ArrayList<MediaFileWrapper> wrapperList = new ArrayList<MediaFileWrapper>();\r
+ private void createCatchedFile(Path catchedFilePath) {\r
+ try {\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 inputFolder, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
+ List<ArchiveItem> archiveList = new ArrayList<ArchiveItem>();\r
+ DirectoryStream<Path> directoryStream = null;\r
try {\r
- //final String mediaFolder = "/tmp";\r
- final String storeFolder = ".STORE";\r
- final String mediaExt = ".mxf";\r
- final String jsonExt = ".json";\r
- final String catchedExt = ".catched";\r
- final File storeFolderFile = new File(mediaFolder + File.separator + storeFolder);\r
-\r
- //filename filter\r
- DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() {\r
- @Override\r
- public boolean accept(Path path) throws IOException {\r
- boolean ret = false;\r
- File file = path.toFile();\r
-\r
- //check extension and dir attrib\r
- if (!file.isDirectory() && file.getName().toLowerCase().endsWith(mediaExt.toLowerCase())) {\r
- File jsonFile = new File(\r
- storeFolderFile.getAbsolutePath() + File.separator + file.getName() + jsonExt);\r
- File catchedFile = new File(\r
- storeFolderFile.getAbsolutePath() + File.separator + file.getName() + catchedExt);\r
- //check json\r
- if (jsonFile.exists()) {\r
-\r
- //check json content\r
- String jsonContent = new String(Files.readAllBytes(Paths.get(jsonFile.getAbsolutePath())));\r
- BasicDBObject dbo = (BasicDBObject) JSONUtil.jsonToDbObject(jsonContent);\r
- String itemHouseID = dbo.getString("itemHouseID");\r
- if (itemHouseID != null && !"".equals(itemHouseID)) {\r
- //check catched file existence\r
- if (!catchedFile.exists()) {\r
- //write catchedfile\r
- Files.write(Paths.get(catchedFile.getAbsolutePath()), "catched".getBytes("utf-8"),\r
- StandardOpenOption.CREATE);\r
-\r
- MediaFileWrapper mfw = new MediaFileWrapper();\r
- mfw.setMediaFile(file);\r
- mfw.setJsonFile(jsonFile);\r
- mfw.setCatchedFile(catchedFile);\r
- mfw.setJsonContent(jsonContent);\r
- wrapperList.add(mfw);\r
-\r
- ret = true;\r
- } else {\r
- //file has been already catched\r
- logger.warn(file.getName() + " file is already catched.");\r
- }\r
- } else {\r
- //there is no houseID in json file\r
- logger.warn("There is houseID member in json meta file: " + jsonFile.getName());\r
- }\r
- } else {\r
- //there is no json file\r
- logger.warn("There is no json meta for this file: " + file.getName());\r
- }\r
- }\r
- return ret;\r
- }\r
- };\r
-\r
- //list files\r
- DirectoryStream<Path> directoryStream = null;\r
- try {\r
- directoryStream = Files.newDirectoryStream(Paths.get(mediaFolder), filter);\r
- for (Path validMediaFile : directoryStream) {\r
- //filter does everything\r
- logger.info("Media file listed: " + validMediaFile.toString());\r
- }\r
- }catch(Exception e){\r
- logger.error("", e);\r
- throw e;\r
- } finally {\r
- if(directoryStream != null){\r
- directoryStream.close(); \r
+ Files.newDirectoryStream(Paths.get(inputFolder)).forEach(p -> processPathItem(p, archiveList));\r
+ } catch (Exception e) {\r
+ logger.error("", e);\r
+ } finally {\r
+ if (directoryStream != null) {\r
+ try {\r
+ directoryStream.close();\r
+ } catch (IOException e) {\r
}\r
}\r
+ }\r
+ return new Object[] { archiveList };\r
+ }\r
\r
- } catch (Exception e) {\r
- logger.error("", e);\r
+ private void fillMetadata(ArchiveItem archiveItem, BasicDBObject dbObject, String fieldName) {\r
+ if (dbObject.containsKey(fieldName))\r
+ archiveItem.setItemTitle(dbObject.getString(fieldName));\r
+ }\r
+\r
+ private void processPathItem(Path mediaFilePath, final List<ArchiveItem> archiveList) {\r
+ File mediaFile = mediaFilePath.toFile();\r
+\r
+ if (mediaFile.isDirectory() || !mediaFile.getName().toLowerCase().endsWith(MEDIAEXT.toLowerCase())) {\r
+ return;\r
+ }\r
+\r
+ Path dotStorePath = Paths.get(mediaFilePath.getParent().toString(), STOREFOLDER);\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;\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;\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;\r
}\r
\r
- return new Object[] { wrapperList };\r
+ if (StringUtils.isBlank(archiveItem.getItemHouseId())) {\r
+ logger.warn("{} has no Item HouseID specified in metadata.", mediaFile.getName());\r
+ return;\r
+ }\r
+\r
+ if (StringUtils.isBlank(archiveItem.getItemTitle())) {\r
+ logger.warn("{} has no Item Title specified in metadata.", mediaFile.getName());\r
+ return;\r
+ }\r
+\r
+ if (StringUtils.isBlank(archiveItem.getMediaHouseId())) {\r
+ logger.warn("{} has no Media HouseID specified in metadata.", mediaFile.getName());\r
+ return;\r
+ }\r
+\r
+ if (StringUtils.isBlank(archiveItem.getMediaTitle())) {\r
+ logger.warn("{} has no Media Title specified in metadata.", mediaFile.getName());\r
+ return;\r
+ }\r
+ storeArchiveItem(archiveList, archiveItem, mediaFile, catchedFile);\r
+ createCatchedFile(catchedFilePath);\r
}\r
\r
+ private void storeArchiveItem(final List<ArchiveItem> archiveList, ArchiveItem archiveItem, File mediaFile, File catchedFile) {\r
+ archiveList.add(archiveItem);\r
+ }\r
}\r
+++ /dev/null
-package user.jobengine.server.steps;\r
-\r
-import java.util.ArrayList;\r
-\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-\r
-import user.jobengine.db.IItemManager;\r
-import user.jobengine.db.Item;\r
-import user.jobengine.db.Media;\r
-import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.IJobRuntime;\r
-import user.jobengine.server.JobEngineException;\r
-\r
-/**\r
- * Itemek es mediak krealasa a MediaFileWrapper objektumok alapjan.\r
- * @author robi\r
- */\r
-public class ItemCreatorStep extends JobStep {\r
- private static final Logger logger = LogManager.getLogger();\r
- private static final String ITEM_MANAGER_IS_NULL = "ItemManager is null";\r
-\r
- @StepEntry\r
- public Object[] execute(ArrayList<MediaFileWrapper> wrapperList, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
-\r
- try {\r
- for (MediaFileWrapper wr : wrapperList) {\r
- try {\r
- IItemManager itemManager = jobEngine.getItemManager();\r
- if (itemManager == null)\r
- throw new JobEngineException(ITEM_MANAGER_IS_NULL);\r
- Item item = itemManager.getItemByHouseID(wr.getJSONString(MediaFileWrapper.ITEM_HOUSEID));\r
- if (item == null) {\r
- //add item\r
- item = itemManager.createItem(MediaFileWrapper.ITEMTYPENAME,\r
- wr.getJSONString(MediaFileWrapper.ITEM_TITLE),\r
- wr.getJSONString(MediaFileWrapper.ITEM_DESCRIPTION),\r
- wr.getJSONString(MediaFileWrapper.ITEM_HOUSEID));\r
- }\r
- //add media\r
- Media media = itemManager.createMedia(MediaFileWrapper.ITEMTYPENAME,\r
- wr.getJSONString(MediaFileWrapper.MEDIA_TITLE),\r
- wr.getJSONString(MediaFileWrapper.MEDIA_DESCRIPTION),\r
- wr.getJSONString(MediaFileWrapper.MEDIA_HOUSE_ID));\r
- item.appendMedia(media);\r
- wr.setItem(item);\r
- wr.setMedia(media);\r
- } catch (Exception e1) {\r
- wr.getCatchedFile().delete();\r
- throw e1;\r
- }\r
- }\r
- } catch (Exception e) {\r
- logger.error("", e);\r
- }\r
- return new Object[] { wrapperList };\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.jobengine.db.IItemManager;\r
+import user.jobengine.db.Item;\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 Logger logger = LogManager.getLogger();\r
+ private static final String ITEM_MANAGER_IS_NULL = "ItemManager is null";\r
+ public static final String ITEMTYPENAME = "Generic";\r
+\r
+ @StepEntry\r
+ public Object[] execute(ArchiveItem archiveItem, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
+ Media mediaCubeMedia = null;\r
+ try {\r
+ IItemManager itemManager = jobEngine.getItemManager();\r
+ if (itemManager == null)\r
+ throw new NullPointerException(ITEM_MANAGER_IS_NULL);\r
+ Item mediaCubeItem = itemManager.getItemByHouseID(archiveItem.getItemHouseId());\r
+ jobRuntime.incrementProgress(50);\r
+ if (mediaCubeItem == null)\r
+ mediaCubeItem = itemManager.createItem(ITEMTYPENAME, archiveItem.getItemTitle(), archiveItem.getItemDescription(),\r
+ archiveItem.getItemHouseId());\r
+ mediaCubeMedia = itemManager.createMedia(ITEMTYPENAME, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(),\r
+ archiveItem.getMediaHouseId());\r
+ mediaCubeItem.appendMedia(mediaCubeMedia);\r
+\r
+ itemManager.mergeItemStructure(mediaCubeItem);\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ throw e;\r
+ } finally {\r
+ jobRuntime.incrementProgress(100);\r
+ }\r
+ return new Object[] { mediaCubeMedia };\r
+ }\r
+\r
+}\r
package user.jobengine.server.steps;\r
\r
+import java.io.File;\r
import java.net.URL;\r
+import java.util.Arrays;\r
+import java.util.List;\r
\r
import javax.xml.namespace.QName;\r
\r
+import org.apache.commons.lang.StringUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
import user.commons.selenio.wsclient.AudioSource;\r
import user.commons.selenio.wsclient.Clip;\r
import user.commons.selenio.wsclient.ClipList;\r
+import user.commons.selenio.wsclient.Exception_Exception;\r
import user.commons.selenio.wsclient.FileSnapshot;\r
import user.commons.selenio.wsclient.MediaFile;\r
import user.commons.selenio.wsclient.State;\r
import user.commons.selenio.wsclient.TranscodeRequest;\r
import user.commons.selenio.wsclient.TranscodeSource;\r
import user.commons.selenio.wsclient.TranscodeTask;\r
+import user.commons.selenio.wsclient.TranscodeTask.OutputFiles;\r
import user.commons.selenio.wsclient.VideoSource;\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 SelenioLowresTranscodeStep extends JobStep {\r
\r
+ private static final String LOWRES_FILETYPE = "Low-res";\r
private static final Logger logger = LogManager.getLogger();\r
-\r
- private TranscodeMgrWS port = null;\r
+ private final List<State> showStoppers = Arrays.asList(State.CANCELLED, State.COMPLETE, State.FAILED);\r
+ private TranscodeMgrWS transcoder = null;\r
private String address = null; //"http://10.10.1.71:44000/TranscodeMgrWS?wsdl";\r
private String projectFilePath = null; //"\\\\10.10.1.71\\Data\\Blueprints\\MP4_H264_AAC_v4.zenium";\r
- //private String sourceFilePath = "\\\\10.10.1.71\\Data\\Input\\test1.mxf";\r
+ private IItemManager manager;\r
+ private Store store;\r
+ private FileType fileType;\r
+ private String outputPath;\r
\r
public SelenioLowresTranscodeStep() {\r
try {\r
address = System.getProperty("jobengine.selenio.address");\r
+ if (StringUtils.isBlank(address))\r
+ throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing.");\r
+\r
projectFilePath = System.getProperty("jobengine.selenio.projectfilepath");\r
+ if (StringUtils.isBlank(projectFilePath))\r
+ throw new NullPointerException("System is not configured properly, 'jobengine.selenio.projectfilepath' startup parameter missing.");\r
TranscodeMgrWSService service = new TranscodeMgrWSService(new URL(address),\r
new QName("http://ws.server.mediamanager.digitalrapids.ca/", "TranscodeMgrWSService"));\r
- port = service.getTranscodeMgrWSPort();\r
+ transcoder = service.getTranscodeMgrWSPort();\r
} catch (Exception e) {\r
- e.printStackTrace();\r
+ logger.catching(e);\r
}\r
}\r
\r
- @StepEntry\r
- public Object[] execute(MediaFileWrapper wrapper, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
- //UNC FILEPATH KELL!!!!\r
- TranscodeRequest transcodeRequest = buildTranscodeRequest(projectFilePath,\r
- //wrapper.getMediaFile().getAbsolutePath()\r
- "\\\\10.10.1.71\\Data\\Input\\test1.mxf");\r
- TranscodeTask tt = port.submitTranscodeTask(transcodeRequest);\r
- if (tt != null) {\r
-\r
- TranscodeTask ttq = port.getTranscodeTask(tt.getId());\r
-\r
- //logger.info("Selenio progress is {}", ttq.getProgress());\r
-\r
- // QUEUED, IN_PROGRESS, COMPLETE, FAILED, CANCELLED, POST_PROCESS, PRE_PROCESS, RESERVED;\r
- while (ttq == null || State.QUEUED.equals(ttq.getState()) || State.IN_PROGRESS.equals(ttq.getState())\r
- || State.POST_PROCESS.equals(ttq.getState()) || State.PRE_PROCESS.equals(ttq.getState())) {\r
- if (ttq == null) {\r
- logger.error(\r
- "Error in SelenioLowresTranscoderStep: The selenio returns with null for querying task: {}",\r
- tt.getId());\r
- break;\r
- }\r
-\r
- Double progress = ttq.getProgress();\r
- if (progress != null) {\r
- logger.info("Selenio progress is {}", progress);\r
- jobRuntime.incrementProgress((int) Math.round(ttq.getProgress() * 100));\r
- }\r
- Thread.sleep(2000);\r
- ttq = port.getTranscodeTask(tt.getId());\r
-\r
- }\r
-\r
- if (State.COMPLETE.equals(ttq.getState())) {\r
-\r
- jobRuntime.incrementProgress(100);\r
-\r
- // IItemManager manager = jobEngine.getItemManager();\r
- // Store lowresSystemStore = manager.getStore("Lowres");\r
- // FileType ft = manager.getFileType("Lowres video");\r
- //\r
- // OutputFiles of = ttq.getOutputFiles();\r
- // List<user.commons.selenio.wsclient.MediaFile> mfList = of.getOutputFiles();\r
- // if (mfList.size() != 1) {\r
- // throw new Exception(\r
- // "Error in SelenioLowresTranscoderStep! There are more than 1 file in the response: "\r
- // + tt.getId());\r
- // }\r
- // user.commons.selenio.wsclient.MediaFile selenioMediaFile = mfList.get(0);\r
- // File outFile = new File(selenioMediaFile.getFile());\r
- // user.jobengine.db.MediaFile mediaFile = manager.createMediaFile(outFile.getName(), ft,\r
- // lowresSystemStore, wrapper.getMedia());\r
- // mediaFile.add();\r
- logger.info("SelenioLowresTranscoderStep: The transcoding has been completed for tash: " + tt.getId());\r
-\r
- } else if (State.FAILED.equals(ttq.getState())) {\r
- logger.error("Error in SelenioLowresTranscoderStep: The selenio failed for task: {} , {}, {}",\r
- tt.getId(), tt.getEncodeDescription(), tt.getStatusDetail());\r
- } else if (State.CANCELLED.equals(ttq.getState())) {\r
- logger.info("SelenioLowresTranscoderStep: The step has been cancelled for task: {}", tt.getId());\r
- }\r
-\r
- } else {\r
- logger.error("Error in SelenioLowresTranscoderStep: The selenio returns with null for transcoding request: "\r
- + wrapper.getMediaFile().getAbsolutePath());\r
- }\r
+ private TranscodeRequest buildTranscodeRequest(String projectFilePath, String sourceFilePath) throws java.lang.Exception {\r
+ Clip clip = new Clip();\r
+ MediaFile mediaFile = new MediaFile();\r
+ mediaFile.setFile(sourceFilePath);\r
+ AudioSource audioSource = new AudioSource();\r
+ audioSource.setMediaFile(mediaFile);\r
+ clip.getAudioSource().add(audioSource);\r
\r
- return new Object[] {};\r
- }\r
+ VideoSource videoSource = new VideoSource();\r
+ videoSource.setMediaFile(mediaFile);\r
+ clip.setVideoSource(videoSource);\r
\r
- /**\r
- * Build a TranscodeRequest. Use the values provided by the user.\r
- */\r
- private TranscodeRequest buildTranscodeRequest(String projectFilePath, String sourceFilePath)\r
- throws java.lang.Exception {\r
+ ClipList clipList = new ClipList();\r
+ clipList.getClip().add(clip);\r
\r
- // Use the TranscodeRequest Transcode Manager class to create a new, empty request.\r
- TranscodeRequest transcodeRequest = new TranscodeRequest();\r
+ TranscodeSource transcodeSource = new TranscodeSource();\r
+ transcodeSource.setClipList(clipList);\r
\r
- // Get the Stream project or Kayak Transcode Blueprint specified\r
- // by the user. Store the file in a Transcode Manager FileSnapshot object.\r
- // The FileSnapshot can store the path to a file as well as the file's contents.\r
+ TranscodeRequest transcodeRequest = new TranscodeRequest();\r
FileSnapshot project = new FileSnapshot();\r
project.setFullPath(projectFilePath);\r
-\r
- // Add the project or blueprint to the transcode request. This file will\r
- // be used to process the media file input source.\r
transcodeRequest.setProject(project);\r
+ transcodeRequest.setTranscodeSource(transcodeSource);\r
\r
- // Create a clip list with the input source files provided by the end user.\r
- // The TranscodeManager ClipList is encapsulated within a TranscodeSource object\r
- // that is added to the TranscodeRequest.\r
+ TranscodeDestination transcodeDestination = new TranscodeDestination();\r
\r
- // Create an empty TranscodeSource object.\r
- TranscodeSource transcodeSource = new TranscodeSource();\r
+ transcodeDestination.setOutputWriteDirectory(outputPath);\r
+ transcodeRequest.setTranscodeDestination(transcodeDestination);\r
+ return transcodeRequest;\r
+ }\r
\r
- // Store the input file provided by the end user in a TranscodeManager\r
- // MediaFile object.\r
- MediaFile mediaFile = new MediaFile();\r
- mediaFile.setFile(sourceFilePath);\r
+ @StepEntry\r
+ public Object[] execute(ArchiveItem archiveItem, Media mediaCubeMedia, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ manager = jobEngine.getItemManager();\r
+ store = manager.getSystemStore(true);\r
+ if (store == null)\r
+ throw new NullPointerException("System is not configured properly, low-res system store definition missing.");\r
\r
- /* \r
- * Though this client only accepts one input file, only clip lists are\r
- * processed by blueprints and projects. The file must\r
- * be encapsulated within a ClipList before it is added to the \r
- * TranscodeRequest. \r
- */\r
+ StoreUri sourceStoreUri = store.getSourceStoreUri(RemoteStoreProtocol.SMB);\r
+ if (sourceStoreUri == null)\r
+ throw new NullPointerException("System is not configured properly, low-res system store SMB store URI definition missing.");\r
+ outputPath = sourceStoreUri.getRootPath();\r
\r
- // Create an empty Transcode Manager ClipList object.\r
- ClipList clipList = new ClipList();\r
+ fileType = manager.getFileType(LOWRES_FILETYPE);\r
+ if (fileType == null)\r
+ throw new NullPointerException("System is not configured properly, low-res file type definition missing.");\r
\r
- // Create Clip object for each input source file.\r
- Clip clip = new Clip();\r
+ String sourceFile = archiveItem.getMediaFile().toString();\r
+ TranscodeRequest transcodeRequest = buildTranscodeRequest(projectFilePath, sourceFile);\r
+ TranscodeTask transcodeTask = transcoder.submitTranscodeTask(transcodeRequest);\r
\r
- // A Clip always consists of one video file and at least one\r
- // audio file. Store the source files in AudioSource and VideoSource\r
- // Transcode Manager API objects.\r
- AudioSource audioSource = new AudioSource();\r
- VideoSource videoSource = new VideoSource();\r
+ if (transcodeTask == null)\r
+ throw new NullPointerException("Unable to submit transcode task, server response is empty for transcode input: " + sourceFile);\r
\r
- // In this case the client only accepts one file -- a video file.\r
- // Video files can be used as the audio source of a clip as long\r
- // as the file contains both elementary video and audio streams.\r
- //\r
- // Add the file to the AudioSource and VideoSource objects.\r
- audioSource.setMediaFile(mediaFile);\r
- videoSource.setMediaFile(mediaFile);\r
+ transcodeTask = monitor(jobRuntime, sourceFile, transcodeTask);\r
\r
- // Add the AudioSource and VideoSource objects to the Clip.\r
- // Add the Clip to the ClipList\r
- clip.getAudioSource().add(audioSource);\r
- clip.setVideoSource(videoSource);\r
- clipList.getClip().add(clip);\r
+ jobRuntime.incrementProgress(100);\r
\r
- // Add the ClipList to the TranscodeSource\r
- transcodeSource.setClipList(clipList);\r
+ //jobRuntime.setDescription(String.valueOf(jobRuntime.getDescription()) + transcodeTask.getStatusDetail());\r
+ processState(transcodeTask, jobEngine, mediaCubeMedia);\r
+ return null;\r
+ }\r
\r
- // Add the TranscodeSource to the Transcoderequest\r
- transcodeRequest.setTranscodeSource(transcodeSource);\r
+ private TranscodeTask monitor(IJobRuntime jobRuntime, String sourceFile, TranscodeTask transcodeTask) throws Exception_Exception, InterruptedException {\r
+ while (true) {\r
+ transcodeTask = transcoder.getTranscodeTask(transcodeTask.getId());\r
+ if (transcodeTask == null)\r
+ throw new NullPointerException("Unable to query transcode task, server response is empty for transcode input: " + sourceFile);\r
\r
- TranscodeDestination transcodeDestination = new TranscodeDestination();\r
- transcodeDestination.setOutputWriteDirectory("\\\\10.10.1.26\\mclowres\\www\\video");\r
- transcodeRequest.setTranscodeDestination(transcodeDestination);\r
- return transcodeRequest;\r
+ Double progress = transcodeTask.getProgress();\r
+ if (progress != null)\r
+ jobRuntime.incrementProgress((int) Math.round(progress * 100));\r
+\r
+ if (showStoppers.contains(transcodeTask.getState()))\r
+ break;\r
+\r
+ Thread.sleep(2000);\r
+ }\r
+ return transcodeTask;\r
+ }\r
+\r
+ private void onTranscodeComplete(TranscodeTask transcodeTask, IJobEngine jobEngine, Media mediaCubeMedia) {\r
+ OutputFiles of = transcodeTask.getOutputFiles();\r
+ List<user.commons.selenio.wsclient.MediaFile> outputs = of.getOutputFiles();\r
+ if (outputs.size() != 1)\r
+ throw new IndexOutOfBoundsException("There are more than 1 file in the response: " + transcodeTask.getId());\r
+\r
+ user.commons.selenio.wsclient.MediaFile selenioMediaFile = outputs.get(0);\r
+ File outFile = new File(selenioMediaFile.getFile());\r
+ user.jobengine.db.MediaFile mediaFile = manager.createMediaFile(outFile.getName(), fileType, store, mediaCubeMedia);\r
+ mediaFile.add();\r
+ }\r
+\r
+ @SuppressWarnings("incomplete-switch")\r
+ private void processState(TranscodeTask transcodeTask, IJobEngine jobEngine, Media mediaCubeMedia) throws Exception {\r
+ switch (transcodeTask.getState()) {\r
+ case CANCELLED:\r
+ throw new IllegalStateException("Transcode task was CANCELLED.");\r
+ case FAILED:\r
+ throw new IllegalStateException("Transcode task has FAILED.");\r
+ case COMPLETE:\r
+ onTranscodeComplete(transcodeTask, jobEngine, mediaCubeMedia);\r
+ break;\r
+ }\r
}\r
\r
}\r
+++ /dev/null
-package user.jobengine.server.steps;\r
-\r
-import java.io.File;\r
-import java.io.IOException;\r
-\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-\r
-import user.commons.RemoteFile;\r
-import user.commons.StoreUri;\r
-import user.commons.remotestore.IProgressEventListener;\r
-import user.commons.remotestore.IStatusEventListener;\r
-import user.commons.remotestore.ProgressEvent;\r
-import user.commons.remotestore.RemoteStoreProtocol;\r
-import user.commons.remotestore.StatusEvent;\r
-import user.jobengine.db.FileType;\r
-import user.jobengine.db.IItemManager;\r
-import user.jobengine.db.Media;\r
-import user.jobengine.db.MediaFile;\r
-import user.jobengine.db.Store;\r
-import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.IJobRuntime;\r
-import user.jobengine.server.JobEngineException;\r
-\r
-public class TSMBackupMediaWrapperStep extends JobStep {\r
- private static final Logger logger = LogManager.getLogger();\r
- private Media media;\r
- private IItemManager manager;\r
- private File file;\r
- private String sourceFile;\r
- private String sourceFileName;\r
- private Store targetStore;\r
- private StoreUri targetStoreUri;\r
- private FileType fileType;\r
-\r
- private void setAndCheck(MediaFileWrapper wrapper, IJobEngine jobEngine) throws JobEngineException, IOException {\r
- media = wrapper.getMedia();\r
- if (media == null)\r
- throw new JobEngineException("Missing Media in MediaFileWrapper parameter.");\r
- manager = jobEngine.getItemManager();\r
- if (manager == null)\r
- throw new JobEngineException("Missing ItemManager.");\r
- file = wrapper.getMediaFile();\r
- if (file == null)\r
- throw new JobEngineException("Missing File in MediaFileWrapper parameter.");\r
- sourceFile = file.getCanonicalPath();\r
- if (!file.exists())\r
- throw new JobEngineException("File not exists: " + sourceFile);\r
- sourceFileName = file.getName();\r
- targetStore = manager.getSystemStore(false);\r
- if (targetStore == null)\r
- throw new JobEngineException("Missing High-res system store.");\r
- targetStoreUri = targetStore.getSourceStoreUri(RemoteStoreProtocol.TSM);\r
- if (targetStoreUri == null)\r
- throw new JobEngineException("Missing TSM store uri from High-res system store.");\r
- fileType = manager.getFileType("High-res");\r
- if (fileType == null)\r
- throw new JobEngineException("Missing High-res file type.");\r
- }\r
-\r
- @StepEntry\r
- public Object[] execute(MediaFileWrapper wrapper, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
- try {\r
- setAndCheck(wrapper, jobEngine);\r
-\r
- StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, file.getParent());\r
-\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 remoteFile = sourceUri.transferFrom(targetStoreUri, sourceFileName, sourceFileName);\r
-\r
- MediaFile mediaFile = manager.createMediaFile(sourceFileName, fileType, targetStore, media);\r
- media.appendMediaFile(mediaFile);\r
-\r
- manager.mergeItemStructure(wrapper.getItem());\r
- } catch (Exception e) {\r
- wrapper.getCatchedFile().delete();\r
- throw e;\r
- }\r
- return new Object[] { wrapper.getItem().getMedias().get(0) };\r
- }\r
-\r
- @Override\r
- public void cleanup() {\r
- }\r
-}\r
package user.jobengine.server.steps;\r
\r
+import java.io.IOException;\r
+import java.nio.file.Path;\r
+\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\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
- // @StepEntry\r
- // public Object[] execute(Media media, IJobEngine jobEngine,\r
- // IJobRuntime jobRuntime) throws Exception {\r
- // TSMClient tsm = null;\r
- // tsm = new TSMClient("JobEngine");\r
- // tsm.connect(null, null);\r
- // log_info("Connected to TSM");\r
- // try {\r
- // log_info("Trying register filespace");\r
- // tsm.registerFilespace(File.separator + "JOBENGINE", "JOBENGINE",\r
- // 'C', "JOBENGINE", 10L * 1024L * 1024L * 1024L, 0);\r
- // } catch (Exception e) {\r
- // log_info(e.getMessage());\r
- // }\r
- //\r
- // IItemManager manager = jobEngine.getItemManager();\r
- // final IJobRuntime runtime = jobRuntime;\r
- //\r
- // Store systemStore = manager.getSystemStore(false);\r
- // Store mfStore = null;\r
- // MediaFile mediaFile = null;\r
- // for (MediaFile mf : media.getMediaFiles()) {\r
- // mediaFile = mf;\r
- // mfStore = mf.getStore();\r
- // if (mfStore.getId() == systemStore.getId())\r
- // break;\r
- // }\r
- //\r
- // if (mediaFile == null)\r
- // throw new Exception("Can not find HIRES media file");\r
- // if (mfStore == null)\r
- // throw new Exception("Can not find HIRES store");\r
- //\r
- // String path = mediaFile.getRelativePath();\r
- // int pos = path.lastIndexOf("/");\r
- // String fileName = pos > -1 ? path.substring(pos, path.length() - pos)\r
- // : path;\r
- //\r
- // try {\r
- // TSMBackupFileObject backupObject = new TSMBackupFileObject(\r
- // File.separator + "JOBENGINE", File.separator + "JOBENGINE",\r
- // File.separator + fileName);\r
- // StoreUri uri = mfStore.getSourceStoreUri(RemoteStoreProtocol.LOCAL);\r
- // // TODO RemoteFile konverzi�, MediaFile-ba be�p�teni\r
- //\r
- // String sourceFilePath = DirectoryUtils.combine(uri.getFullPath(),\r
- // fileName);\r
- // final File file = new File(sourceFilePath);\r
- // if (!file.exists())\r
- // throw new Exception("File not exists: " + sourceFilePath);\r
- // final long fileSize = file.length();\r
- // log_info("Saving: " + sourceFilePath + ", size:" + fileSize);\r
- // backupObject.setLocalFilePath(sourceFilePath);\r
- // backupObject.setListener(new TSMObjectListener() {\r
- // private long transferredBytes;\r
- // private int lastProgress;\r
- //\r
- // public void bytesWorked(long bytes) {\r
- // transferredBytes += bytes;\r
- // int progress = fileSize == 0 ? 100\r
- // : (int) (transferredBytes * 100 / fileSize);\r
- // if (progress > lastProgress + 4) {\r
- // log_info("incrementProgress: " + progress);\r
- // runtime.incrementProgress(progress);\r
- // lastProgress = progress;\r
- // }\r
- // }\r
- // });\r
- // runtime.incrementProgress(100);\r
- // tsm.send(backupObject);\r
- // } catch (Exception e) {\r
- // throw new Exception(e);\r
- // } finally {\r
- // tsm.disconnect();\r
- // log_info("Disconnected");\r
- // }\r
- // return null;\r
- // }\r
-\r
private static final Logger logger = LogManager.getLogger();\r
+ private IItemManager manager;\r
+ private Path inputFilePath;\r
+ private Store targetStore;\r
+ private StoreUri targetStoreUri;\r
+ private FileType fileType;\r
\r
@StepEntry\r
- public Object[] execute(Media media, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ public Object[] execute(ArchiveItem archiveItem, Media mediaCubeMedia, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ try {\r
+ setAndCheck(jobEngine, archiveItem, mediaCubeMedia);\r
\r
- RemoteFile result = null;\r
- final IJobRuntime runtime = jobRuntime;\r
- IItemManager manager = jobEngine.getItemManager();\r
- Store systemStore = manager.getSystemStore(false);\r
- Store mfStore = null;\r
- MediaFile mediaFile = null;\r
- for (MediaFile mf : media.getMediaFiles()) {\r
- mediaFile = mf;\r
- mfStore = mf.getStore();\r
- if (mfStore.getId() == systemStore.getId())\r
- break;\r
- }\r
+ StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, inputFilePath.getParent().toString());\r
\r
- if (mediaFile == null)\r
- throw new Exception("Can not find HIRES media file");\r
- if (mfStore == null)\r
- throw new Exception("Can not find HIRES store");\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
+ String sourceFileName = inputFilePath.toFile().getName();\r
+ RemoteFile remoteFile = sourceUri.transferFrom(targetStoreUri, sourceFileName, sourceFileName);\r
\r
- String path = mediaFile.getRelativePath();\r
- logger.info("Relative path is: " + path);\r
- if (path == null)\r
- throw new Exception("Path is null!");\r
- int pos = path.lastIndexOf("/");\r
- // String sourceFileName = pos > -1 ? path.substring(pos, path.length()\r
- // - pos) : path;\r
- String sourceFileName = pos > -1 ? path.substring(pos + 1, path.length()) : path;\r
- logger.info("SourceFileName is: " + sourceFileName);\r
- if (sourceFileName == null)\r
- throw new NullPointerException("Source FileName is null");\r
+ MediaFile mediaFile = manager.createMediaFile(sourceFileName, fileType, targetStore, mediaCubeMedia);\r
+ mediaCubeMedia.appendMediaFile(mediaFile);\r
\r
- StoreUri sourceUri = mfStore.getSourceStoreUri(RemoteStoreProtocol.LOCAL);\r
- StoreUri target = new StoreUri();\r
- target.setProtocol(RemoteStoreProtocol.TSM);\r
- logger.info("Target is: " + target.getProtocol());\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
- result = sourceUri.transferFrom(target, sourceFileName, sourceFileName);\r
- return new Object[] { result };\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ if (!archiveItem.removeCatchedFile())\r
+ logger.error("Can not delete .catched file for {}", inputFilePath.toString());\r
+ throw e;\r
+ }\r
+ return null;\r
}\r
\r
- @Override\r
- public void cleanup() {\r
+ private void setAndCheck(IJobEngine jobEngine, ArchiveItem archiveItem, Media mediaCubeMedia) throws JobEngineException, IOException {\r
+ manager = jobEngine.getItemManager();\r
+ if (manager == null)\r
+ throw new NullPointerException("Missing ItemManager.");\r
+ inputFilePath = archiveItem.getMediaFile();\r
+ if (inputFilePath == null)\r
+ throw new NullPointerException("Missing File in MediaFileWrapper parameter.");\r
+ if (!inputFilePath.toFile().exists())\r
+ throw new IOException("File not exists: " + inputFilePath.toString());\r
+ targetStore = manager.getSystemStore(false);\r
+ if (targetStore == null)\r
+ throw new NullPointerException("Missing High-res system store.");\r
+ targetStoreUri = targetStore.getSourceStoreUri(RemoteStoreProtocol.TSM);\r
+ if (targetStoreUri == null)\r
+ throw new NullPointerException("Missing TSM store uri from High-res system store.");\r
+ fileType = manager.getFileType("High-res");\r
+ if (fileType == null)\r
+ throw new NullPointerException("Missing High-res file type.");\r
+ if (mediaCubeMedia == null)\r
+ throw new NullPointerException("Input parameter 'mediaCubeMedia' is null.");\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.RemoteFile;\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.IProgressEventListener;\r
+import user.commons.remotestore.IStatusEventListener;\r
+import user.commons.remotestore.ProgressEvent;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.commons.remotestore.StatusEvent;\r
+import user.jobengine.db.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 TSMBackupStep_orig extends JobStep {\r
+ // @StepEntry\r
+ // public Object[] execute(Media media, IJobEngine jobEngine,\r
+ // IJobRuntime jobRuntime) throws Exception {\r
+ // TSMClient tsm = null;\r
+ // tsm = new TSMClient("JobEngine");\r
+ // tsm.connect(null, null);\r
+ // log_info("Connected to TSM");\r
+ // try {\r
+ // log_info("Trying register filespace");\r
+ // tsm.registerFilespace(File.separator + "JOBENGINE", "JOBENGINE",\r
+ // 'C', "JOBENGINE", 10L * 1024L * 1024L * 1024L, 0);\r
+ // } catch (Exception e) {\r
+ // log_info(e.getMessage());\r
+ // }\r
+ //\r
+ // IItemManager manager = jobEngine.getItemManager();\r
+ // final IJobRuntime runtime = jobRuntime;\r
+ //\r
+ // Store systemStore = manager.getSystemStore(false);\r
+ // Store mfStore = null;\r
+ // MediaFile mediaFile = null;\r
+ // for (MediaFile mf : media.getMediaFiles()) {\r
+ // mediaFile = mf;\r
+ // mfStore = mf.getStore();\r
+ // if (mfStore.getId() == systemStore.getId())\r
+ // break;\r
+ // }\r
+ //\r
+ // if (mediaFile == null)\r
+ // throw new Exception("Can not find HIRES media file");\r
+ // if (mfStore == null)\r
+ // throw new Exception("Can not find HIRES store");\r
+ //\r
+ // String path = mediaFile.getRelativePath();\r
+ // int pos = path.lastIndexOf("/");\r
+ // String fileName = pos > -1 ? path.substring(pos, path.length() - pos)\r
+ // : path;\r
+ //\r
+ // try {\r
+ // TSMBackupFileObject backupObject = new TSMBackupFileObject(\r
+ // File.separator + "JOBENGINE", File.separator + "JOBENGINE",\r
+ // File.separator + fileName);\r
+ // StoreUri uri = mfStore.getSourceStoreUri(RemoteStoreProtocol.LOCAL);\r
+ // // TODO RemoteFile konverzi�, MediaFile-ba be�p�teni\r
+ //\r
+ // String sourceFilePath = DirectoryUtils.combine(uri.getFullPath(),\r
+ // fileName);\r
+ // final File file = new File(sourceFilePath);\r
+ // if (!file.exists())\r
+ // throw new Exception("File not exists: " + sourceFilePath);\r
+ // final long fileSize = file.length();\r
+ // log_info("Saving: " + sourceFilePath + ", size:" + fileSize);\r
+ // backupObject.setLocalFilePath(sourceFilePath);\r
+ // backupObject.setListener(new TSMObjectListener() {\r
+ // private long transferredBytes;\r
+ // private int lastProgress;\r
+ //\r
+ // public void bytesWorked(long bytes) {\r
+ // transferredBytes += bytes;\r
+ // int progress = fileSize == 0 ? 100\r
+ // : (int) (transferredBytes * 100 / fileSize);\r
+ // if (progress > lastProgress + 4) {\r
+ // log_info("incrementProgress: " + progress);\r
+ // runtime.incrementProgress(progress);\r
+ // lastProgress = progress;\r
+ // }\r
+ // }\r
+ // });\r
+ // runtime.incrementProgress(100);\r
+ // tsm.send(backupObject);\r
+ // } catch (Exception e) {\r
+ // throw new Exception(e);\r
+ // } finally {\r
+ // tsm.disconnect();\r
+ // log_info("Disconnected");\r
+ // }\r
+ // return null;\r
+ // }\r
+\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ @StepEntry\r
+ public Object[] execute(Media media, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+\r
+ RemoteFile result = null;\r
+ final IJobRuntime runtime = jobRuntime;\r
+ IItemManager manager = jobEngine.getItemManager();\r
+ Store systemStore = manager.getSystemStore(false);\r
+ Store mfStore = null;\r
+ MediaFile mediaFile = null;\r
+ for (MediaFile mf : media.getMediaFiles()) {\r
+ mediaFile = mf;\r
+ mfStore = mf.getStore();\r
+ if (mfStore.getId() == systemStore.getId())\r
+ break;\r
+ }\r
+\r
+ if (mediaFile == null)\r
+ throw new Exception("Can not find HIRES media file");\r
+ if (mfStore == null)\r
+ throw new Exception("Can not find HIRES store");\r
+\r
+ String path = mediaFile.getRelativePath();\r
+ logger.info("Relative path is: " + path);\r
+ if (path == null)\r
+ throw new Exception("Path is null!");\r
+ int pos = path.lastIndexOf("/");\r
+ // String sourceFileName = pos > -1 ? path.substring(pos, path.length()\r
+ // - pos) : path;\r
+ String sourceFileName = pos > -1 ? path.substring(pos + 1, path.length()) : path;\r
+ logger.info("SourceFileName is: " + sourceFileName);\r
+ if (sourceFileName == null)\r
+ throw new NullPointerException("Source FileName is null");\r
+\r
+ StoreUri sourceUri = mfStore.getSourceStoreUri(RemoteStoreProtocol.LOCAL);\r
+ StoreUri target = new StoreUri();\r
+ target.setProtocol(RemoteStoreProtocol.TSM);\r
+ logger.info("Target is: " + target.getProtocol());\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
+ result = sourceUri.transferFrom(target, sourceFileName, sourceFileName);\r
+ return new Object[] { result };\r
+ }\r
+\r
+ @Override\r
+ public void cleanup() {\r
+ }\r
+}\r
public static String DBUSERNAME = "jobengine.db.user";\r
public static String DBPASSWORD = "jobengine.db.password";\r
\r
+ static ItemManager currentInstance = null;\r
+\r
+ static public ItemManager getInstance() {\r
+ return currentInstance;\r
+ }\r
+\r
private Map<Class<? extends IEntityBase>, IEntityBaseDAO> baseDAOs = new Hashtable<Class<? extends IEntityBase>, IEntityBaseDAO>();\r
private IChangeHandler itemTypeChangeFactory;\r
private int connectionPoolSize = 5;\r
+\r
private ContextPool contextPool = null;\r
String dbDriver = "com.ibm.db2.jcc.DB2Driver";\r
-\r
String dbUrl = null;\r
+\r
String dbUser = null;\r
String dbPassword = null;\r
\r
- static ItemManager currentInstance = null;\r
private SignalServer signalServer;\r
\r
- static public ItemManager getInstance() {\r
- return currentInstance;\r
- }\r
-\r
public ItemManager() {\r
initializeItemManager(signalServer);\r
connect();\r
// initializeItemManager(signalServer);\r
// }\r
\r
- private void initializeItemManager(SignalServer signalServer) {\r
- this.signalServer = signalServer;\r
- initialize();\r
- dbUrl = System.getProperty(DBURL);\r
- dbUser = System.getProperty(DBUSERNAME);\r
- dbPassword = System.getProperty(DBPASSWORD);\r
- }\r
-\r
public void activate() {\r
//logger.info("ItemManager activated.");\r
}\r
\r
- public void deactivate() {\r
- //logger.info("ItemManager deactivated.");\r
+ @Override\r
+ public void add(IEntityBase entity) {\r
+ traceIn();\r
+ IEntityBaseDAO dbmanager = getBaseDAO(entity.getClass());\r
+ dbmanager.add(entity);\r
+ traceOut();\r
}\r
\r
public synchronized void bindSignalServerService(SignalServer service) {\r
}\r
}\r
\r
- public synchronized void unbindSignalServerService(SignalServer service) {\r
- try {\r
- disconnect();\r
- logger.info("ItemManager service stopped.");\r
- } catch (Exception exc) {\r
- logger.error(exc);\r
- }\r
- }\r
-\r
- @Override\r
- public void add(IEntityBase entity) {\r
- traceIn();\r
- IEntityBaseDAO dbmanager = getBaseDAO(entity.getClass());\r
- dbmanager.add(entity);\r
- traceOut();\r
- }\r
-\r
@Override\r
public void connect() {\r
traceIn();\r
- ConnectionPoolProperties properties = new ConnectionPoolProperties(dbDriver, dbUrl, dbUser, dbPassword, false,\r
- 1000);\r
+ ConnectionPoolProperties properties = new ConnectionPoolProperties(dbDriver, dbUrl, dbUser, dbPassword, false, 1000);\r
properties.add(ResourcePool.POOLSIZE, connectionPoolSize);\r
contextPool = new ContextPool(properties);\r
\r
}\r
\r
@Override\r
- public FileType createFileType(String name, String description, String videoCodec, String audioCodec,\r
- int videoTracks, int audioTracks, float frameRate) {\r
+ public FileType createFileType(String name, String description, String videoCodec, String audioCodec, int videoTracks, int audioTracks, float frameRate) {\r
traceIn();\r
FileType entity = new FileType();\r
entity.setPersister(this);\r
}\r
\r
@Override\r
- public WorkflowAction createWorkflowAction(Timestamp touched, Timestamp started, Timestamp finished,\r
- boolean successful, String houseId, String description, String source, String destination, String tag,\r
- long size) {\r
- traceIn();\r
-\r
- WorkflowAction entity = new WorkflowAction();\r
- entity.setPersister(this);\r
- entity.setTouched(touched);\r
- entity.setStarted(started);\r
- entity.setFinished(finished);\r
- entity.setSuccessful(successful);\r
- entity.setHouseId(houseId);\r
- entity.setDescription(description);\r
- entity.setSource(source);\r
- entity.setDestination(destination);\r
- entity.setTag(tag);\r
- entity.setSize(size);\r
- traceOut();\r
- return entity;\r
+ public Item createItem(String name, String description, String houseId) {\r
+ return createItem(null, name, description, houseId);\r
}\r
\r
@Override\r
return entity;\r
}\r
\r
- @Override\r
- public Item createItem(String name, String description, String houseId) {\r
- return createItem(null, name, description, houseId);\r
- }\r
-\r
@Override\r
public ItemType createItemType(String name, String description) {\r
traceIn();\r
return entity;\r
}\r
\r
- @Override\r
- public Metadata createMetadata(MetadataElement mde, MdType... flags) {\r
- return createMetadata(mde, ListType.LABEL, GuiType.TEXTBOX, null, null, null, flags);\r
- }\r
-\r
@Override\r
public Metadata createMetadata(MetadataElement mde, GuiType guiType, MdType... flags) {\r
return createMetadata(mde, ListType.LABEL, guiType, null, null, null, flags);\r
}\r
\r
@Override\r
- public Metadata createMetadata(MetadataElement mde, ListType listType, GuiType guiType, String sqlField,\r
- StaticTables staticTable, String pojoField, MdType... flags) {\r
+ public Metadata createMetadata(MetadataElement mde, ListType listType, GuiType guiType, String sqlField, StaticTables staticTable, String pojoField,\r
+ MdType... flags) {\r
traceIn();\r
Metadata entity = new Metadata();\r
int values = MdType.getValues(flags);\r
return entity;\r
}\r
\r
+ @Override\r
+ public Metadata createMetadata(MetadataElement mde, MdType... flags) {\r
+ return createMetadata(mde, ListType.LABEL, GuiType.TEXTBOX, null, null, null, flags);\r
+ }\r
+\r
@Override\r
public MetadataElement createMetadataElement(String name, String description, MetadataType mdt) {\r
return createMetadataElement(name, description, mdt, false);\r
}\r
\r
@Override\r
- public MetadataType createMetadataType(String name, BaseType baseType, String javaType, String dataType,\r
- int length) {\r
+ public MetadataType createMetadataType(String name, BaseType baseType, String javaType, String dataType, int length) {\r
traceIn();\r
MetadataType entity = new MetadataType();\r
entity.setPersister(this);\r
}\r
\r
@Override\r
- public StoreUri createStoreUri(RemoteStoreProtocol protocol, String uri, int portNumber, boolean isStream,\r
- boolean isSource, boolean isTarget, String userName, String password, String rootPath) {\r
+ public StoreUri createStoreUri(RemoteStoreProtocol protocol, String uri, int portNumber, boolean isStream, boolean isSource, boolean isTarget,\r
+ String userName, String password, String rootPath) {\r
traceIn();\r
StoreUri entity = new StoreUri();\r
entity.setPersister(this);\r
return entity;\r
}\r
\r
+ @Override\r
+ public WorkflowAction createWorkflowAction(Timestamp touched, Timestamp started, Timestamp finished, boolean successful, String houseId, String description,\r
+ String source, String destination, String tag, long size) {\r
+ traceIn();\r
+\r
+ WorkflowAction entity = new WorkflowAction();\r
+ entity.setPersister(this);\r
+ entity.setTouched(touched);\r
+ entity.setStarted(started);\r
+ entity.setFinished(finished);\r
+ entity.setSuccessful(successful);\r
+ entity.setHouseId(houseId);\r
+ entity.setDescription(description);\r
+ entity.setSource(source);\r
+ entity.setDestination(destination);\r
+ entity.setTag(tag);\r
+ entity.setSize(size);\r
+ traceOut();\r
+ return entity;\r
+ }\r
+\r
+ public void deactivate() {\r
+ //logger.info("ItemManager deactivated.");\r
+ }\r
+\r
/**\r
* Lez�rja a kapcsolatot az Adatb�zis kontextus er�forr�s kezel�.\r
*/\r
return context;\r
}\r
\r
+ @Override\r
+ public List<ItemType> getDynamicItemTypes() {\r
+ List<ItemType> result = new ArrayList<ItemType>();\r
+ List<ItemType> itemTypes = getItemTypes();\r
+ if (itemTypes != null) {\r
+ for (ItemType it : itemTypes) {\r
+ if (!it.getIsStatic())\r
+ result.add(it);\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+\r
@Override\r
public FileType getFileType(String name) {\r
FileTypeDAO dao = (FileTypeDAO) getBaseDAO(FileType.class);\r
}\r
\r
@Override\r
- public List<IEntityBase> getShots(long id) {\r
- List<IEntityBase> result = null;\r
- ShotDAO dao = (ShotDAO) getBaseDAO(Shot.class);\r
- if (dao != null)\r
- result = dao.getShots(id);\r
+ public Item getItemByHouseID(String houseID) {\r
+ traceIn();\r
+ Item result = null;\r
+ SearchFilter filter = new SearchFilter();\r
+ filter.setMetadata(getStaticItemType().getMetadata("Anyag house ID"));\r
+ filter.setValueLogic(FilterValueLogic.EQUALS);\r
+ filter.setValues(Arrays.asList((Object) houseID));\r
+ QueryObject qo = new QueryObject();\r
+ qo.setFilters(Arrays.asList(filter));\r
+\r
+ // Exercise\r
+ List<SearchResult> searchResult = searchItem(qo);\r
+\r
+ if (searchResult != null && searchResult.size() > 0 && searchResult.get(0).getItemCount() == 1)\r
+ result = searchResult.get(0).getItems().get(0);\r
+ traceOut();\r
return result;\r
}\r
\r
+ @Override\r
+ public ItemType getItemType(String itemTypeName) {\r
+ ItemTypeDAO dbmanager = (ItemTypeDAO) getBaseDAO(ItemType.class);\r
+ return dbmanager.get(itemTypeName);\r
+ }\r
+\r
@Override\r
@SuppressWarnings("unchecked")\r
public List<ItemType> getItemTypes() {\r
return (MetadataType) get(MetadataType.class, id);\r
}\r
\r
+ @SuppressWarnings("unchecked")\r
+ @Override\r
+ public List<Job> getRunningJobs(String template) {\r
+ JobDAO dbmanager = (JobDAO) getBaseDAO(Job.class);\r
+ return (List<Job>) (List<?>) dbmanager.getAllIncomplete(template);\r
+ }\r
+\r
@Override\r
public Scene getScene(long id) {\r
return (Scene) get(Scene.class, id);\r
return (Shot) get(Shot.class, id);\r
}\r
\r
+ @Override\r
+ public List<IEntityBase> getShots(long id) {\r
+ List<IEntityBase> result = null;\r
+ ShotDAO dao = (ShotDAO) getBaseDAO(Shot.class);\r
+ if (dao != null)\r
+ result = dao.getShots(id);\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public ItemType getStaticItemType() {\r
+ ItemType result = null;\r
+ List<ItemType> itemTypes = getItemTypes();\r
+ if (itemTypes != null) {\r
+ for (ItemType it : itemTypes) {\r
+ if (it.getIsStatic()) {\r
+ result = it;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+\r
@Override\r
public Store getStore(long id) {\r
return (Store) get(Store.class, id);\r
return result;\r
}\r
\r
+ @SuppressWarnings("unchecked")\r
+ @Override\r
+ public List<WorkflowAction> getWorkflowActions(Date date) {\r
+ Calendar begin = CalendarUtils.createZeroCalendar(date);\r
+ Calendar end = CalendarUtils.createZeroCalendar(date);\r
+ end.add(Calendar.DAY_OF_YEAR, 1);\r
+ WorkflowActionDAO dao = (WorkflowActionDAO) getBaseDAO(WorkflowAction.class);\r
+ return (List<WorkflowAction>) (List<?>) dao.getWorkflowActions(new Timestamp(begin.getTimeInMillis()), new Timestamp(end.getTimeInMillis()));\r
+ }\r
+\r
void initialize() {\r
currentInstance = this;\r
super.setItemManager(this);\r
logger.info("ItemManager initialized");\r
}\r
\r
+ private void initializeItemManager(SignalServer signalServer) {\r
+ this.signalServer = signalServer;\r
+ initialize();\r
+ dbUrl = System.getProperty(DBURL);\r
+ dbUser = System.getProperty(DBUSERNAME);\r
+ dbPassword = System.getProperty(DBPASSWORD);\r
+ }\r
+\r
+ @Override\r
+ public void merge(IEntityBase entity) {\r
+ traceIn();\r
+ IEntityBaseDAO dbmanager = getBaseDAO(entity.getClass());\r
+ dbmanager.merge(entity);\r
+ traceOut();\r
+ }\r
+\r
+ @Override\r
+ public void mergeItemStructure(Item item) {\r
+ if (item.getId() == 0) {\r
+ item.add();\r
+ return;\r
+ }\r
+ List<Media> mS = item.getMedias();\r
+ if (mS == null)\r
+ return;\r
+ for (Media m : mS) {\r
+ if (m.getId() == 0) {\r
+ m.setItemId(item.getId());\r
+ m.add();\r
+ continue;\r
+ }\r
+ List<MediaFile> fS = m.getMediaFiles();\r
+ if (fS == null)\r
+ continue;\r
+ for (MediaFile f : fS) {\r
+ if (f.getId() == 0) {\r
+ f.setMediaId(m.getId());\r
+ f.add();\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
@Override\r
public void modify(IEntityBase entity) {\r
traceIn();\r
return result;\r
}\r
\r
- @Override\r
- public Item getItemByHouseID(String houseID) {\r
- traceIn();\r
- Item result = null;\r
- SearchFilter filter = new SearchFilter();\r
- filter.setMetadata(getStaticItemType().getMetadata("Anyag house ID"));\r
- filter.setValueLogic(FilterValueLogic.EQUALS);\r
- filter.setValues(Arrays.asList((Object) houseID));\r
- QueryObject qo = new QueryObject();\r
- qo.setFilters(Arrays.asList(filter));\r
-\r
- // Exercise\r
- List<SearchResult> searchResult = searchItem(qo);\r
-\r
- if (searchResult != null && searchResult.size() > 0 && searchResult.get(0).getItemCount() == 1)\r
- result = searchResult.get(0).getItems().get(0);\r
- traceOut();\r
- return result;\r
- }\r
-\r
@Override\r
public SearchResult searchItem(String criteria, int fromResult, int toResult) {\r
traceIn();\r
traceOut();\r
}\r
\r
- @Override\r
- public ItemType getStaticItemType() {\r
- ItemType result = null;\r
- List<ItemType> itemTypes = getItemTypes();\r
- if (itemTypes != null) {\r
- for (ItemType it : itemTypes) {\r
- if (it.getIsStatic()) {\r
- result = it;\r
- break;\r
- }\r
- }\r
- }\r
- return result;\r
- }\r
-\r
- @Override\r
- public List<ItemType> getDynamicItemTypes() {\r
- List<ItemType> result = new ArrayList<ItemType>();\r
- List<ItemType> itemTypes = getItemTypes();\r
- if (itemTypes != null) {\r
- for (ItemType it : itemTypes) {\r
- if (!it.getIsStatic())\r
- result.add(it);\r
- }\r
- }\r
- return result;\r
- }\r
-\r
- @Override\r
- public ItemType getItemType(String itemTypeName) {\r
- ItemTypeDAO dbmanager = (ItemTypeDAO) getBaseDAO(ItemType.class);\r
- return dbmanager.get(itemTypeName);\r
- }\r
-\r
- @SuppressWarnings("unchecked")\r
- @Override\r
- public List<Job> getRunningJobs(String template) {\r
- JobDAO dbmanager = (JobDAO) getBaseDAO(Job.class);\r
- return (List<Job>) (List<?>) dbmanager.getAllIncomplete(template);\r
- }\r
-\r
- @SuppressWarnings("unchecked")\r
- @Override\r
- public List<WorkflowAction> getWorkflowActions(Date date) {\r
- Calendar begin = CalendarUtils.createZeroCalendar(date);\r
- Calendar end = CalendarUtils.createZeroCalendar(date);\r
- end.add(Calendar.DAY_OF_YEAR, 1);\r
- WorkflowActionDAO dao = (WorkflowActionDAO) getBaseDAO(WorkflowAction.class);\r
- return (List<WorkflowAction>) (List<?>) dao.getWorkflowActions(new Timestamp(begin.getTimeInMillis()),\r
- new Timestamp(end.getTimeInMillis()));\r
- }\r
-\r
- @Override\r
- public void mergeItemStructure(Item item) {\r
- if (item.getId() == 0) {\r
- add(item);\r
- return;\r
- }\r
- List<Media> mS = item.getMedias();\r
- if (mS == null)\r
- return;\r
- for (Media m : mS) {\r
- if (m.getId() == 0) {\r
- m.setItemId(item.getId());\r
- add(m);\r
- continue;\r
- }\r
- List<MediaFile> fS = m.getMediaFiles();\r
- if (fS == null)\r
- continue;\r
- for (MediaFile f : fS) {\r
- if (f.getId() == 0) {\r
- f.setMediaId(m.getId());\r
- add(f);\r
- continue;\r
- }\r
- }\r
+ public synchronized void unbindSignalServerService(SignalServer service) {\r
+ try {\r
+ disconnect();\r
+ logger.info("ItemManager service stopped.");\r
+ } catch (Exception exc) {\r
+ logger.error(exc);\r
}\r
}\r
-\r
- @Override\r
- public void merge(IEntityBase entity) {\r
- traceIn();\r
- IEntityBaseDAO dbmanager = getBaseDAO(entity.getClass());\r
- dbmanager.merge(entity);\r
- traceOut();\r
- }\r
}\r
manager.createItemType("Generic", "Generic").add();\r
\r
if (manager.getStore("TSM") == null) {\r
- Store tsmStore = manager.createStore("TSM", true, false);\r
- StoreUri tsmStoreUri = manager.createStoreUri(RemoteStoreProtocol.TSM, "MEDIACUBE");\r
- tsmStoreUri.setSource(true);\r
- tsmStoreUri.setTarget(true);\r
- tsmStoreUri.setUserName("mediacube");\r
- tsmStoreUri.setPassword("password");\r
- tsmStore.appendStoreUri(tsmStoreUri);\r
- tsmStore.add();\r
+ Store store = manager.createStore("TSM", true, false);\r
+ StoreUri storeUri = manager.createStoreUri(RemoteStoreProtocol.TSM, "MEDIACUBE");\r
+ storeUri.setSource(true);\r
+ storeUri.setTarget(true);\r
+ storeUri.setUserName("mediacube");\r
+ storeUri.setPassword("password");\r
+ store.appendStoreUri(storeUri);\r
+ store.add();\r
+ }\r
+ if (manager.getStore("Low-res") == null) {\r
+ Store store = manager.createStore("Low-res", true, true);\r
+ StoreUri storeUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, "/mediacube/data/lowres/www/video/");\r
+ storeUri.setSource(true);\r
+ storeUri.setTarget(true);\r
+ store.appendStoreUri(storeUri);\r
+ storeUri = manager.createStoreUri(RemoteStoreProtocol.SMB, "\\\\10.10.1.26\\mclowres\\www\\video");\r
+ storeUri.setSource(true);\r
+ storeUri.setTarget(false);\r
+ store.appendStoreUri(storeUri);\r
+ store.add();\r
}\r
if (manager.getFileType("High-res") == null) {\r
- FileType fileType = manager.createFileType("High-res", "High resolution material", "MPEG Video", "PCM", 1,\r
- 8, 25);\r
+ FileType fileType = manager.createFileType("High-res", "High resolution material", "MPEG Video", "PCM", 1, 8, 25);\r
fileType.add();\r
}\r
if (manager.getFileType("Low-res") == null) {\r
}\r
\r
@Test\r
- public void testMergeItemStructure_NewItem() {\r
- Item item = manager.createItem("Generic", "Ötödik elem", "Scifi", "");\r
- Media media = manager.createMedia("Generic", "Média1", "Nagyon frankó kis mozi.", null);\r
- item.appendMedia(media);\r
- MediaFile mf = manager.createMediaFile("low.wmv", manager.getFileType("Low-res"), manager.getStore("TSM"),\r
- media);\r
- media.appendMediaFile(mf);\r
- // Exercise\r
- manager.mergeItemStructure(item);\r
- assertTrue(item.getId() > 0);\r
- assertTrue(item.getMedias().get(0).getId() > 0);\r
- assertTrue(item.getMedias().get(0).getMediaFiles().get(0).getId() > 0);\r
- }\r
-\r
- @Test\r
- public void testMergeItemStructure_NewMedia() {\r
- Item item = manager.createItem("Generic", "Ötödik elem", "Scifi", "");\r
- item.add();\r
-\r
- Media media = manager.createMedia("Generic", "Média1", "Nagyon frankó kis mozi.", null);\r
- item.appendMedia(media);\r
- MediaFile mf = manager.createMediaFile("low.wmv", manager.getFileType("Low-res"), manager.getStore("TSM"),\r
- media);\r
- media.appendMediaFile(mf);\r
- // Exercise\r
- manager.mergeItemStructure(item);\r
- assertTrue(item.getId() > 0);\r
- assertTrue(item.getMedias().get(0).getId() > 0);\r
- assertTrue(item.getMedias().get(0).getMediaFiles().get(0).getId() > 0);\r
- }\r
-\r
- @Test\r
- public void testMergeItemStructure_NewMediaFile() {\r
- Item item = manager.createItem("Generic", "Ötödik elem", "Scifi", "");\r
-\r
- Media media = manager.createMedia("Generic", "Média1", "Nagyon frankó kis mozi.", null);\r
- item.appendMedia(media);\r
- item.add();\r
+ public void testCreate() {\r
+ // Fixture\r
+ Item sut = manager.createItem("Adásanyag light", "Ötödik elem", "Scifi", null);\r
\r
- MediaFile mf = manager.createMediaFile("low.wmv", manager.getFileType("Low-res"), manager.getStore("TSM"),\r
- media);\r
- media.appendMediaFile(mf);\r
// Exercise\r
- manager.mergeItemStructure(item);\r
- assertTrue(item.getId() > 0);\r
- assertTrue(item.getMedias().get(0).getId() > 0);\r
- assertTrue(item.getMedias().get(0).getMediaFiles().get(0).getId() > 0);\r
- }\r
-\r
- @Test\r
- public void testCreateWorkflowActions_and_search() {\r
- // manager.truncate(WorkflowAction.class);\r
- // String[] tags = { "INGEST", "ARCHIVE", "TRANSCODE" };\r
- // for (int i = 0; i < 1000; i++) {\r
- // Calendar touched = Calendar.getInstance();\r
- // Calendar started = Calendar.getInstance();\r
- // Calendar finished = Calendar.getInstance();\r
- // finished.add(Calendar.HOUR_OF_DAY, 1);\r
- // String houseId = "house" + i % 10;\r
- // WorkflowAction item = manager.createWorkflowAction(new Timestamp(touched.getTimeInMillis()),\r
- // new Timestamp(started.getTimeInMillis()), new Timestamp(finished.getTimeInMillis()), true, houseId,\r
- // houseId, houseId, houseId, tags[i % 3], 1000);\r
- // item.add();\r
- // System.out.println("Created " + i + " id: " + item.getId());\r
- // }\r
- //\r
- WorkflowActionDAO dao = (WorkflowActionDAO) manager.getBaseDAO(WorkflowAction.class);\r
-\r
- Calendar begin = CalendarUtils.createZeroCalendar();\r
- Calendar end = CalendarUtils.createZeroCalendar();\r
- end.add(Calendar.DAY_OF_YEAR, 1);\r
- List<IEntityBase> workflowActions = dao.getWorkflowActions(new Timestamp(begin.getTimeInMillis()),\r
- new Timestamp(end.getTimeInMillis()));\r
- assertEquals(1000, workflowActions.size());\r
- }\r
-\r
- @Test\r
- public void testCreateManyFull() {\r
- // manager.truncate();\r
-\r
- for (int i = 0; i < 1000; i++) {\r
- Item item = manager.createItem("Generic", "Ötödik elem " + i, "Scifi", i + "");\r
- item.add();\r
-\r
- Media media = manager.createMedia("Generic", "Média1", "Nagyon frankó kis mozi.", null);\r
- item.appendMedia(media);\r
- item.add();\r
-\r
- MediaFile mf = manager.createMediaFile("low.wmv", manager.getFileType("Lowres"),\r
- manager.getStore("Local video"), media);\r
- mf.add();\r
+ sut.add();\r
\r
- System.out.println("Item created: " + i);\r
- }\r
+ // Verify\r
+ assertTrue(sut.getId() > 0);\r
}\r
\r
@Test\r
item.appendMedia(media);\r
item.add();\r
\r
- MediaFile mf = manager.createMediaFile("low.wmv", manager.getFileType("Lowres"),\r
- manager.getStore("Local video"), media);\r
+ MediaFile mf = manager.createMediaFile("low.wmv", manager.getFileType("Lowres"), manager.getStore("Local video"), media);\r
mf.add();\r
}\r
\r
}\r
\r
@Test\r
- public void testSearch() {\r
- SearchResult search = manager.searchItem("elem", 10, 20);\r
- assertEquals(1000, search.getItemCount());\r
- assertEquals(10, search.getItems().size());\r
-\r
- for (Item item : search.getItems()) {\r
- System.out.println(item.getTitle());\r
- }\r
- }\r
-\r
- @Test\r
- public void testCreate() {\r
- // Fixture\r
- Item sut = manager.createItem("Adásanyag light", "Ötödik elem", "Scifi", null);\r
-\r
- // Exercise\r
- sut.add();\r
-\r
- // Verify\r
- assertTrue(sut.getId() > 0);\r
- }\r
-\r
- @Test\r
- public void testRemove() {\r
- // Fixture\r
- Item sut = null;\r
- sut = manager.createItem("Film", "Nyolcadik kör ami törölhető", "Scifi", null);\r
- sut.setAttribute("Főszereplő", "Kovocs Géza");\r
- sut.setAttribute("Gyártás éve", 2001);\r
- sut.setAttribute("Szinkron", "Hajda Ákos");\r
- sut.add();\r
-\r
- // Exercise\r
- sut.remove();\r
-\r
- // Verify\r
- Item actual = (Item) manager.get(Item.class, sut.getId());\r
- assertNull(actual);\r
- }\r
-\r
- @Test\r
- public void testSetAttribute() {\r
- // Fixture\r
- Item sut = manager.createItem("Film", "Ötödik elem", "Scifi", null);\r
-\r
- // Exercise\r
- sut.setAttribute("Főszereplő", "Kalapács Miklós");\r
+ public void testCreateManyFull() {\r
+ // manager.truncate();\r
\r
- // Verify\r
- assertEquals("Kalapács Miklós", sut.getAttribute("Főszereplő"));\r
- }\r
+ for (int i = 0; i < 1000; i++) {\r
+ Item item = manager.createItem("Generic", "Ötödik elem " + i, "Scifi", i + "");\r
+ item.add();\r
\r
- @Test\r
- public void testSetAttributeWithWrongType() {\r
- // L�tez� dinamikus attrib�tum rossz adatttal val� felt�lt�se.\r
- // Fixture\r
- Item item = manager.createItem("Film", "Ötödik elem", "Scifi", null);\r
+ Media media = manager.createMedia("Generic", "Média1", "Nagyon frankó kis mozi.", null);\r
+ item.appendMedia(media);\r
+ item.add();\r
\r
- // Exercise\r
- item.setAttribute("F�szerepl�", 10);\r
+ MediaFile mf = manager.createMediaFile("low.wmv", manager.getFileType("Lowres"), manager.getStore("Local video"), media);\r
+ mf.add();\r
\r
- // Verify\r
- assertNull(item.getAttribute("F�szerepl�"));\r
+ System.out.println("Item created: " + i);\r
+ }\r
}\r
\r
@Test\r
assertEquals(value3, actual.getAttribute("Gyártás éve"));\r
}\r
\r
+ @Test\r
+ @SuppressWarnings("unchecked")\r
+ public void testCreateWithDomainAttribute() {\r
+ // Fixture\r
+ Item sut = null;\r
+ sut = manager.createItem("Domain", "Domain teszt record", "Scifi", null);\r
+ sut.setAttribute("Szereplők", Arrays.asList(new Domain("Kovács Gizi"), new Domain("Szekér Ivett"), new Domain("Hanka Barbara")));\r
+\r
+ // Exercise\r
+ sut.add();\r
+\r
+ // Verify\r
+ List<Domain> domains = (List<Domain>) sut.getAttribute("Szereplők");\r
+\r
+ assertNotNull(domains);\r
+ assertEquals(3, domains.size());\r
+ for (Domain d : domains) {\r
+ assertTrue(d.getId() > 0);\r
+ assertTrue(d.getDomainCategoryId() > 0);\r
+ }\r
+ }\r
+\r
@Test(expected = ItemManagerException.class)\r
public void testCreateWithUniqueAttribute() {\r
// L�trehoz�s, unique dinamikus attrib�tummal.\r
}\r
\r
@Test\r
- @SuppressWarnings("unchecked")\r
- public void testCreateWithDomainAttribute() {\r
- // Fixture\r
- Item sut = null;\r
- sut = manager.createItem("Domain", "Domain teszt record", "Scifi", null);\r
- sut.setAttribute("Szereplők",\r
- Arrays.asList(new Domain("Kovács Gizi"), new Domain("Szekér Ivett"), new Domain("Hanka Barbara")));\r
+ public void testCreateWorkflowActions_and_search() {\r
+ // manager.truncate(WorkflowAction.class);\r
+ // String[] tags = { "INGEST", "ARCHIVE", "TRANSCODE" };\r
+ // for (int i = 0; i < 1000; i++) {\r
+ // Calendar touched = Calendar.getInstance();\r
+ // Calendar started = Calendar.getInstance();\r
+ // Calendar finished = Calendar.getInstance();\r
+ // finished.add(Calendar.HOUR_OF_DAY, 1);\r
+ // String houseId = "house" + i % 10;\r
+ // WorkflowAction item = manager.createWorkflowAction(new Timestamp(touched.getTimeInMillis()),\r
+ // new Timestamp(started.getTimeInMillis()), new Timestamp(finished.getTimeInMillis()), true, houseId,\r
+ // houseId, houseId, houseId, tags[i % 3], 1000);\r
+ // item.add();\r
+ // System.out.println("Created " + i + " id: " + item.getId());\r
+ // }\r
+ //\r
+ WorkflowActionDAO dao = (WorkflowActionDAO) manager.getBaseDAO(WorkflowAction.class);\r
+\r
+ Calendar begin = CalendarUtils.createZeroCalendar();\r
+ Calendar end = CalendarUtils.createZeroCalendar();\r
+ end.add(Calendar.DAY_OF_YEAR, 1);\r
+ List<IEntityBase> workflowActions = dao.getWorkflowActions(new Timestamp(begin.getTimeInMillis()), new Timestamp(end.getTimeInMillis()));\r
+ assertEquals(1000, workflowActions.size());\r
+ }\r
\r
+ @Test\r
+ public void testMergeItemStructure_NewItem() {\r
+ Item item = manager.createItem("Generic", "Ötödik elem", "Scifi", "");\r
+ Media media = manager.createMedia("Generic", "Média1", "Nagyon frankó kis mozi.", null);\r
+ item.appendMedia(media);\r
+ MediaFile mf = manager.createMediaFile("low.wmv", manager.getFileType("Low-res"), manager.getStore("TSM"), media);\r
+ media.appendMediaFile(mf);\r
// Exercise\r
- sut.add();\r
+ manager.mergeItemStructure(item);\r
+ assertTrue(item.getId() > 0);\r
+ assertTrue(item.getMedias().get(0).getId() > 0);\r
+ assertTrue(item.getMedias().get(0).getMediaFiles().get(0).getId() > 0);\r
+ }\r
\r
- // Verify\r
- List<Domain> domains = (List<Domain>) sut.getAttribute("Szereplők");\r
+ @Test\r
+ public void testMergeItemStructure_NewMedia() {\r
+ Item item = manager.createItem("Generic", "Ötödik elem", "Scifi", "");\r
+ item.add();\r
\r
- assertNotNull(domains);\r
- assertEquals(3, domains.size());\r
- for (Domain d : domains) {\r
- assertTrue(d.getId() > 0);\r
- assertTrue(d.getDomainCategoryId() > 0);\r
- }\r
+ Media media = manager.createMedia("Generic", "Média1", "Nagyon frankó kis mozi.", null);\r
+ item.appendMedia(media);\r
+ MediaFile mf = manager.createMediaFile("low.wmv", manager.getFileType("Low-res"), manager.getStore("TSM"), media);\r
+ media.appendMediaFile(mf);\r
+ // Exercise\r
+ manager.mergeItemStructure(item);\r
+ assertTrue(item.getId() > 0);\r
+ assertTrue(item.getMedias().get(0).getId() > 0);\r
+ assertTrue(item.getMedias().get(0).getMediaFiles().get(0).getId() > 0);\r
+ }\r
+\r
+ @Test\r
+ public void testMergeItemStructure_NewMediaFile() {\r
+ Item item = manager.createItem("Generic", "Ötödik elem", "Scifi", "");\r
+\r
+ Media media = manager.createMedia("Generic", "Média1", "Nagyon frankó kis mozi.", null);\r
+ item.appendMedia(media);\r
+ item.add();\r
+\r
+ MediaFile mf = manager.createMediaFile("low.wmv", manager.getFileType("Low-res"), manager.getStore("TSM"), media);\r
+ media.appendMediaFile(mf);\r
+ // Exercise\r
+ manager.mergeItemStructure(item);\r
+ assertTrue(item.getId() > 0);\r
+ assertTrue(item.getMedias().get(0).getId() > 0);\r
+ assertTrue(item.getMedias().get(0).getMediaFiles().get(0).getId() > 0);\r
}\r
\r
@Test\r
// Fixture\r
Item item = null;\r
item = manager.createItem("Domain", "Domain teszt record", "Scifi", null);\r
- item.setAttribute("Szereplők",\r
- Arrays.asList(new Domain("Kovács Gizi"), new Domain("Szekér Ivett"), new Domain("Hanka Barbara")));\r
+ item.setAttribute("Szereplők", Arrays.asList(new Domain("Kovács Gizi"), new Domain("Szekér Ivett"), new Domain("Hanka Barbara")));\r
item.add();\r
\r
// Exercise\r
assertEquals(3, domains.size());\r
}\r
\r
+ @Test\r
+ public void testRemove() {\r
+ // Fixture\r
+ Item sut = null;\r
+ sut = manager.createItem("Film", "Nyolcadik kör ami törölhető", "Scifi", null);\r
+ sut.setAttribute("Főszereplő", "Kovocs Géza");\r
+ sut.setAttribute("Gyártás éve", 2001);\r
+ sut.setAttribute("Szinkron", "Hajda Ákos");\r
+ sut.add();\r
+\r
+ // Exercise\r
+ sut.remove();\r
+\r
+ // Verify\r
+ Item actual = (Item) manager.get(Item.class, sut.getId());\r
+ assertNull(actual);\r
+ }\r
+\r
@Test\r
public void testRemoveWithDomainAttribute() throws Exception {\r
// Fixture\r
Item sut = null;\r
sut = manager.createItem("Domain", "Domain teszt record", "Scifi", null);\r
- sut.setAttribute("Szereplők",\r
- Arrays.asList(new Domain("Kovács Gizi"), new Domain("Szekér Ivett"), new Domain("Hanka Barbara")));\r
+ sut.setAttribute("Szereplők", Arrays.asList(new Domain("Kovács Gizi"), new Domain("Szekér Ivett"), new Domain("Hanka Barbara")));\r
sut.add();\r
\r
// Exercise\r
assertNull(expected);\r
}\r
\r
+ @Test\r
+ public void testSearch() {\r
+ SearchResult search = manager.searchItem("elem", 10, 20);\r
+ assertEquals(1000, search.getItemCount());\r
+ assertEquals(10, search.getItems().size());\r
+\r
+ for (Item item : search.getItems()) {\r
+ System.out.println(item.getTitle());\r
+ }\r
+ }\r
+\r
+ @Test\r
+ public void testSearchItem_byHouseID() {\r
+\r
+ //TestDB.createStaticItemTypes();\r
+ // Fixture\r
+ // Exercise\r
+ Item result = manager.getItemByHouseID("11111");\r
+\r
+ // Verify\r
+ assertNotNull(result);\r
+ }\r
+\r
+ @Test\r
+ public void testSetAttribute() {\r
+ // Fixture\r
+ Item sut = manager.createItem("Film", "Ötödik elem", "Scifi", null);\r
+\r
+ // Exercise\r
+ sut.setAttribute("Főszereplő", "Kalapács Miklós");\r
+\r
+ // Verify\r
+ assertEquals("Kalapács Miklós", sut.getAttribute("Főszereplő"));\r
+ }\r
+\r
+ @Test\r
+ public void testSetAttributeWithWrongType() {\r
+ // L�tez� dinamikus attrib�tum rossz adatttal val� felt�lt�se.\r
+ // Fixture\r
+ Item item = manager.createItem("Film", "Ötödik elem", "Scifi", null);\r
+\r
+ // Exercise\r
+ item.setAttribute("F�szerepl�", 10);\r
+\r
+ // Verify\r
+ assertNull(item.getAttribute("F�szerepl�"));\r
+ }\r
+\r
@Test\r
public void testUpdateWithDomainAttribute() throws Exception {\r
// Fixture\r
Item sut = null;\r
sut = manager.createItem("Domain", "Domain teszt record", "Scifi", null);\r
- sut.setAttribute("Szereplők",\r
- Arrays.asList(new Domain("Kovács Gizi"), new Domain("Szekér Ivett"), new Domain("Hanka Barbara")));\r
+ sut.setAttribute("Szereplők", Arrays.asList(new Domain("Kovács Gizi"), new Domain("Szekér Ivett"), new Domain("Hanka Barbara")));\r
sut.add();\r
\r
// Exercise\r
assertNull(expected);\r
}\r
\r
- @Test\r
- public void testSearchItem_byHouseID() {\r
-\r
- //TestDB.createStaticItemTypes();\r
- // Fixture\r
- // Exercise\r
- Item result = manager.getItemByHouseID("11111");\r
-\r
- // Verify\r
- assertNotNull(result);\r
- }\r
-\r
}\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate>\r
-<declarations>\r
- <parameters>\r
- <parameter name="mediaFolder" type="java.lang.String"/>\r
- </parameters>\r
- <variables>\r
- <variable name="mediaFileWrapperList" type="java.util.ArrayList"/>\r
- </variables>\r
-</declarations>\r
-\r
-<commands>\r
- <calljobstep id="step1" type="user.jobengine.server.steps.ArchiveListBuilderStep" weight="1">\r
- <inputs>\r
- <input>\r
- <parameter name="mediaFolder" />\r
- </input>\r
- </inputs>\r
- <outputs>\r
- <output>\r
- <variable name="mediaFileWrapperList" />\r
- </output>\r
- </outputs>\r
- </calljobstep>\r
- \r
- <calljobstep id="step2" type="user.jobengine.server.steps.ItemCreatorStep" weight="1">\r
- <inputs>\r
- <input>\r
- <variable name="mediaFileWrapperList" />\r
- </input>\r
- </inputs>\r
- <outputs>\r
- <output>\r
- <variable name="mediaFileWrapperList" />\r
- </output>\r
- </outputs>\r
- </calljobstep>\r
-\r
- <calljobstep id="step3" type="user.jobengine.server.steps.ArchiveItemJobCreatorStep" weight="1">\r
- <inputs>\r
- <input>\r
- <variable name="mediaFileWrapperList" />\r
- </input>\r
- </inputs>\r
- </calljobstep>\r
- \r
-</commands>\r
-</jobtemplate>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate name="Archiválás" description="Kiálasztott média nagy felbontású verziójának mentése szalagos háttértárra.">\r
-<declarations>\r
- <parameters>\r
- <parameter name="mediaWrapper" type="user.jobengine.server.steps.MediaFileWrapper"/>\r
- </parameters>\r
-<!-- <variables> -->\r
-<!-- <variable name="media" type="user.jobengine.db.Media"/> -->\r
-<!-- </variables> -->\r
-</declarations>\r
-<commands>\r
- <calljobstep id="id1" type="user.jobengine.server.steps.TSMBackupMediaWrapperStep" weight="1">\r
- <inputs>\r
- <input>\r
- <parameter name="mediaWrapper" />\r
- </input>\r
- </inputs>\r
-<!-- <outputs> -->\r
-<!-- <output> -->\r
-<!-- <variable name="media" /> -->\r
-<!-- </output> -->\r
-<!-- </outputs> -->\r
- </calljobstep>\r
-<!-- <calljobstep id="id2" type="user.jobengine.server.steps.SetArchivedStep" weight="0"> -->\r
-<!-- <inputs> -->\r
-<!-- <input> -->\r
-<!-- <variable name="media" /> -->\r
-<!-- </input> -->\r
-<!-- </inputs> -->\r
-<!-- </calljobstep> -->\r
-</commands>\r
-</jobtemplate>
\ No newline at end of file
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.File;\r
+import java.io.Serializable;\r
+import java.nio.file.Path;\r
+\r
+public class ArchiveItem implements Serializable {\r
+ private static final long serialVersionUID = -7278747969491719357L;\r
+ private String itemTitle;\r
+ private String itemHouseId;\r
+ private String itemDescription;\r
+ private String mediaHouseId;\r
+ private String mediaTitle;\r
+ private String mediaDescription;\r
+\r
+ private Path mediaFile = null;\r
+ private Path catchedFile = null;\r
+\r
+ public Path getCatchedFile() {\r
+ return catchedFile;\r
+ }\r
+\r
+ public String getItemDescription() {\r
+ return itemDescription;\r
+ }\r
+\r
+ public String getItemHouseId() {\r
+ return itemHouseId;\r
+ }\r
+\r
+ public String getItemTitle() {\r
+ return itemTitle;\r
+ }\r
+\r
+ public String getMediaDescription() {\r
+ return mediaDescription;\r
+ }\r
+\r
+ public Path getMediaFile() {\r
+ return mediaFile;\r
+ }\r
+\r
+ public String getMediaHouseId() {\r
+ return mediaHouseId;\r
+ }\r
+\r
+ public String getMediaTitle() {\r
+ return mediaTitle;\r
+ }\r
+\r
+ public boolean removeCatchedFile() {\r
+ boolean result = false;\r
+ if (catchedFile != null) {\r
+ File file = catchedFile.toFile();\r
+ if (file.exists())\r
+ result = file.delete();\r
+ }\r
+ return result;\r
+ }\r
+\r
+ public void setCatchedFile(Path catchedFile) {\r
+ this.catchedFile = catchedFile;\r
+ }\r
+\r
+ public void setItemDescription(String itemDescription) {\r
+ this.itemDescription = itemDescription;\r
+ }\r
+\r
+ public void setItemHouseId(String itemHouseId) {\r
+ this.itemHouseId = itemHouseId;\r
+ }\r
+\r
+ public void setItemTitle(String itemTitle) {\r
+ this.itemTitle = itemTitle;\r
+ }\r
+\r
+ public void setMediaDescription(String mediaDescription) {\r
+ this.mediaDescription = mediaDescription;\r
+ }\r
+\r
+ public void setMediaFile(Path mediaFile) {\r
+ this.mediaFile = mediaFile;\r
+ }\r
+\r
+ public void setMediaHouseId(String mediaHouseId) {\r
+ this.mediaHouseId = mediaHouseId;\r
+ }\r
+\r
+ public void setMediaTitle(String mediaTitle) {\r
+ this.mediaTitle = mediaTitle;\r
+ }\r
+}\r
+++ /dev/null
-package user.jobengine.server.steps;\r
-\r
-import java.io.File;\r
-import java.io.Serializable;\r
-\r
-import com.ibm.nosql.json.JSONUtil;\r
-import com.ibm.nosql.json.api.BasicDBObject;\r
-\r
-import user.jobengine.db.Item;\r
-import user.jobengine.db.Media;\r
-\r
-public class MediaFileWrapper implements Serializable {\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_HOUSE_ID = "mediaHouseID";\r
- public static final String MEDIA_TITLE = "mediaTitle";\r
- public static final String MEDIA_DESCRIPTION = "mediaDescription";\r
- public static final String ITEMTYPENAME = "Generic";\r
-\r
- private File mediaFile = null;\r
- private File jsonFile = null;\r
- private File catchedFile = null;\r
- private String jsonContent = null;\r
- private BasicDBObject jsondbo = null;\r
- private Item item = null;\r
- private Media media = null;\r
-\r
- public File getMediaFile() {\r
- return mediaFile;\r
- }\r
-\r
- public void setMediaFile(File mediaFile) {\r
- this.mediaFile = mediaFile;\r
- }\r
-\r
- public File getJsonFile() {\r
- return jsonFile;\r
- }\r
-\r
- public void setJsonFile(File jsonFile) {\r
- this.jsonFile = jsonFile;\r
- }\r
-\r
- public File getCatchedFile() {\r
- return catchedFile;\r
- }\r
-\r
- public void setCatchedFile(File catchedFile) {\r
- this.catchedFile = catchedFile;\r
- }\r
-\r
- public String getJsonContent() {\r
- return jsonContent;\r
- }\r
-\r
- public void setJsonContent(String jsonContent) {\r
- this.jsonContent = jsonContent;\r
- }\r
-\r
- public Item getItem() {\r
- return item;\r
- }\r
-\r
- public void setItem(Item item) {\r
- this.item = item;\r
- }\r
-\r
- public String getJSONString(String varName) {\r
- String ret = null;\r
- if (jsonContent != null) {\r
- if (jsondbo == null) {\r
- jsondbo = (BasicDBObject) JSONUtil.jsonToDbObject(jsonContent);\r
- }\r
- ret = jsondbo.getString(varName);\r
- }\r
- return ret;\r
- }\r
-\r
- public Media getMedia() {\r
- return media;\r
- }\r
-\r
- public void setMedia(Media media) {\r
- this.media = media;\r
- }\r
-}\r