--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
+<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">\r
+<booleanAttribute key="append.args" value="true"/>\r
+<booleanAttribute key="automaticAdd" value="false"/>\r
+<booleanAttribute key="automaticValidate" value="true"/>\r
+<stringAttribute key="bootstrap" value=""/>\r
+<stringAttribute key="checked" value="[NONE]"/>\r
+<booleanAttribute key="clearConfig" value="true"/>\r
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/run-mediacube-server-mv"/>\r
+<booleanAttribute key="default" value="true"/>\r
+<booleanAttribute key="default_auto_start" value="false"/>\r
+<intAttribute key="default_start_level" value="4"/>\r
+<booleanAttribute key="includeOptional" value="false"/>\r
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">\r
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>\r
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>\r
+</listAttribute>\r
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/" -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 -Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty -Djava.io.tmpdir=c:\temp\jetty -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.transcoder.address=http://10.11.1.111:65445/api/json/v1/ -Djobengine.transcoder.template=MP4 -Djobengine.transcoder.version=1 -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; -Djobengine.nexio.db.user=sa -Djobengine.nexio.db.password=resolve -Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis; -Djobengine.planair.db.user=MAM -Djobengine.planair.db.password=VDani -Dnexio.host=192.168.0.12 -Djobengine.nexio.name=testnexioclips -Dnexio.useMOSGateway=false -Dnexio.disable=true -Djobengine.octopus.rundowns.name=rundowns181026 -Djobengine.octopus.storyfolders.name=storyfolders181026 -Djobengine.octopus.stories.name=stories181026 -Djobengine.maestro.config="${workspace_loc}/-configuration/maestro.json" -Djobengine.mediacube.config="${workspace_loc}/-configuration/mediacube.json" -Dgui.statistics.disable=true -Dgui.help.disable=true -Dgui.editor.disable=true -Djobengine.mediafinder.external=false"/>\r
+<stringAttribute key="pde.version" value="3.3"/>\r
+<booleanAttribute key="show_selected_only" value="false"/>\r
+<stringAttribute key="target_bundles" value="cglib@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default,com.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jackson2-provider@default:default,org.jboss.resteasy.jaxrs-api@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.mybatis.mybatis@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
+<booleanAttribute key="tracing" value="false"/>\r
+<booleanAttribute key="useCustomFeatures" value="false"/>\r
+<booleanAttribute key="useDefaultConfigArea" value="true"/>\r
+<stringAttribute key="workspace_bundles" value="user.commons.log4j2@default:false,user.jobengine.osgi.commons@default:true,user.jobengine.osgi.db@default:default,user.jobengine.osgi.server@default:default,user.jobengine.osgi.services@default:default,user.mediacube.metadata@default:default,user.tsm.client@default:default"/>\r
+</launchConfiguration>\r
{"joblist":[\r
+ {\r
+ "name" : "sys: Migrate HSM",\r
+ "template": "migrate-hsm.xml",\r
+ "parameters": [ \r
+ {"name": "sourceLocation", "value": "//10.11.1.89", "type": "java.lang.String"},\r
+ {"name": "targetLocation", "value": "c:/_video", "type": "java.lang.String"}\r
+ ]\r
+ },\r
{\r
"active": false,\r
"executeimmediate": false,\r
package hu.user.mediacube.executors.tests;\r
\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.junit.Assert.assertNull;\r
+\r
+import org.junit.BeforeClass;\r
import org.junit.Test;\r
\r
-import user.jobengine.server.steps.HSMMigrateListBuilderStep;\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+import user.jobengine.server.steps.HSMMigrateStep;\r
+import user.mediacube.metadata.MetadataProviderFactory;\r
+import user.mediacube.metadata.interfaces.IMetadataProvider;\r
+import user.mediacube.metadata.interfaces.IMetadataProviderFactory;\r
+import user.mediacube.metadata.interfaces.MetadataProviderType;\r
\r
public class HSMMigrateListBuilderStepTest {\r
\r
+ @BeforeClass\r
+ static public void setUpConnection() {\r
+ System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+ System.setProperty("jobengine.nosql.db.user", "db2admin");\r
+ System.setProperty("jobengine.nosql.db.password", "password");\r
+ }\r
+\r
+ private HSMMigrateStep createSUT() {\r
+ HSMMigrateStep sut = new HSMMigrateStep() {\r
+ @Override\r
+ protected IMetadataProvider getMetadataProvider(MetadataProviderType type) {\r
+ IMetadataProviderFactory factory = new MetadataProviderFactory();\r
+ return factory.getProvider(type);\r
+ }\r
+ };\r
+ return sut;\r
+ }\r
+\r
@Test\r
- public void test1() throws Exception {\r
- HSMMigrateListBuilderStep sut = new HSMMigrateListBuilderStep();\r
- sut.execute("//10.11.1.89/OMARCHIVE", 0);\r
+ public void testExecute() throws Exception {\r
+ HSMMigrateStep sut = createSUT();\r
+ sut.execute("//10.11.1.89", "/_video/migrate");\r
// System.out.println(Arrays.toString(sut));\r
}\r
\r
+ @Test\r
+ public void testQueryException_FileNameExclude() throws Exception {\r
+ HSMMigrateStep sut = new HSMMigrateStep();\r
+ BasicDBObject actual = sut.queryExclude("12-90670-0012");\r
+ assertNotNull(actual);\r
+ }\r
+\r
+ @Test\r
+ public void testQueryException_FullPathExclude() throws Exception {\r
+ HSMMigrateStep sut = new HSMMigrateStep();\r
+ BasicDBObject actual = sut.queryExclude("/gpfs/OMARCHIVE/2011-mxf/11-01771-0002-2.mxf");\r
+ assertNotNull(actual);\r
+ }\r
+\r
+ @Test\r
+ public void testQueryException_NoException() throws Exception {\r
+ HSMMigrateStep sut = new HSMMigrateStep();\r
+ BasicDBObject actual = sut.queryExclude("test.mxf");\r
+ assertNull(actual);\r
+ }\r
+\r
+ @Test\r
+ public void testQueryHistory() throws Exception {\r
+ HSMMigrateStep sut = new HSMMigrateStep();\r
+ BasicDBObject actual = sut.queryFileHistory("/OMARCHIVE/6.3.4.200-TIV-TSMALL-Linuxx86_64.bin");\r
+ assertNotNull(actual);\r
+ }\r
}\r
}\r
\r
@Test\r
- public void test3() throws Exception {\r
+ public void test3() throws Throwable {\r
TSMExtendedRetrieveStep sut = new TSMExtendedRetrieveStep();\r
Media mediaCubeMedia = new Media();\r
String targetPath = "/mnt/PROMISE/TRANSCODER/ARCHIVE_RESTORE/TTT";\r
void xxx(int x, boolean y) {\r
System.out.println("call");\r
}\r
+\r
}\r
System.setProperty("jobengine.octopus.stories.name", "stories181217");\r
System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders181217");\r
\r
- System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+ System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
System.setProperty("jobengine.nosql.db.user", "db2admin");\r
System.setProperty("jobengine.nosql.db.password", "password");\r
System.setProperty("nexio.host", "10.10.1.55");\r
- System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+ System.setProperty(ItemManager.DBURL, "jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
System.setProperty(ItemManager.DBUSERNAME, "db2admin");\r
System.setProperty(ItemManager.DBPASSWORD, "password");\r
System.setProperty(LogUtils.LOGLEVEL, "INFO");\r
System.out.println("itemid=" + i.getId() + " AND mediaid=" + m.getId() + " AND mediafileid=" + mf.getId());\r
}\r
\r
+ @Test\r
+ public void testLoadMVExclude() throws Exception {\r
+ DB db = NoSQLUtils.getNoSQLDB();\r
+ DBCollection collection = db.getCollection("hsm_migrate_exclude");\r
+ List<String> lines = Files.readAllLines(Paths.get("/opt/mv-migrate-exclude.txt"));\r
+ for (String line : lines) {\r
+ BasicDBObject d = new BasicDBObject();\r
+ d.put("name", line.trim());\r
+ collection.save(d);\r
+ }\r
+\r
+ }\r
+\r
+ @Test\r
+ public void testLoadMVExclude1() throws Exception {\r
+ DB db = NoSQLUtils.getNoSQLDB();\r
+ DBCollection collection = db.getCollection("hsm_migrate_exclude");\r
+ BasicDBObject d = new BasicDBObject();\r
+ d.put("name", "/OMARCHIVE/6.3.4.200-TIV-TSMALL-Linuxx86_64.bin");\r
+ collection.save(d);\r
+\r
+ }\r
+\r
@Test\r
public void testTSM() throws Exception {\r
//System.setProperty("PATH", "c:\\_workspace\\USER\\MediaCube\\server\\user.tsm.client\\apilib\\;%PATH%");\r
<executor className="user.jobengine.server.steps.FakeNoParamsStep" maxConcurrent="20"/>\r
<executor className="user.jobengine.server.steps.FakeStep" maxConcurrent="20"/>\r
<executor className="user.jobengine.server.steps.GenerateMorpheusMetadataStep" maxConcurrent="10"/>\r
+ <executor className="user.jobengine.server.steps.HSMMigrateStep" maxConcurrent="1"/>\r
<executor className="user.jobengine.server.steps.ImportMORPHEUSMissingMaterialsStep" maxConcurrent="1"/>\r
<executor className="user.jobengine.server.steps.ImportStatisticsStep" maxConcurrent="7"/>\r
<executor className="user.jobengine.server.steps.MetadataTransformStep" maxConcurrent="1"/>\r
{"joblist":[\r
+ {\r
+ "name" : "sys: Migrate HSM",\r
+ "template": "migrate-hsm.xml",\r
+ "parameters": [ \r
+ {"name": "sourceLocation", "value": "/OMARCHIVE", "type": "java.lang.String"},\r
+ {"name": "targetLocation", "value": "/mediacube/data", "type": "java.lang.String"}\r
+ ]\r
+ },\r
{\r
"name" : "sys: Remove duplicates",\r
"template": "duplicate-remover.xml",\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="HSM migráció">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="sourceLocation" type="java.lang.String" />\r
+ <parameter name="targetLocation" type="java.lang.String" />\r
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep id="step1" type="user.jobengine.server.steps.HSMMigrateStep" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="sourceLocation" />\r
+ </input>\r
+ <input>\r
+ <parameter name="targetLocation" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
return String.format(KILLDATE_FILENAME, fileName, composeKillDate(days));\r
}\r
\r
+ public static void createMetadata(String filePath, String fileName, String metadata, Marker marker) throws IOException {\r
+ ensureUNCFolder(filePath, STATUSFOLDER);\r
+ String metadataFileName = fileName + ".json";\r
+ Path metadataPath = Paths.get(filePath, STATUSFOLDER, metadataFileName);\r
+ Files.write(metadataPath, metadata.getBytes());\r
+ }\r
+\r
public static void createMorpheusXML(String filePath, String fileName, String content) throws IOException {\r
ensureUNCFolder(filePath, STATUSFOLDER);\r
Path xmlPath = Paths.get(filePath, fileName);\r
\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
+import user.mediacube.metadata.interfaces.IMetadataProvider;\r
+import user.mediacube.metadata.interfaces.IMetadataProviderFactory;\r
+import user.mediacube.metadata.interfaces.MetadataProviderType;\r
\r
public class FakeStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
private int count = 10;\r
private StringBuilder sb = new StringBuilder();\r
+ private IMetadataProvider metadataProvider;\r
\r
@StepEntry\r
public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
Object[] result = { itemID + 1 };\r
\r
+ test();\r
+\r
//((MediaCubeMarker) jobRuntime.getMarker()).setTo("vasary@elgekko.net");\r
\r
//logger.info(jobRuntime.getMarker(), "<a href='UNC://\\10.10.1.100\\BRAAVOS\\ARCHIVE' target='blank'>usefullink</a>");\r
return result;\r
}\r
\r
+ public void test() {\r
+ IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class);\r
+ metadataProvider = factory.getProvider(MetadataProviderType.HSM);\r
+ logger.info(jobRuntime.getMarker(), metadataProvider);\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.LinkedHashMap;\r
-import java.util.LinkedList;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import org.apache.commons.io.FileUtils;\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-import org.apache.logging.log4j.Marker;\r
-\r
-import user.mediacube.metadata.MetadataProviderFactory;\r
-import user.mediacube.metadata.hsm.HSMContent;\r
-import user.mediacube.metadata.hsm.HSMListOptions;\r
-import user.mediacube.metadata.interfaces.IMetadata;\r
-import user.mediacube.metadata.interfaces.IMetadataProvider;\r
-import user.mediacube.metadata.interfaces.IMetadataProviderFactory;\r
-import user.mediacube.metadata.interfaces.MetadataProviderType;\r
-\r
-public class HSMMigrateListBuilderStep extends JobStep {\r
- private static final Logger logger = LogManager.getLogger();\r
- private static final String MXFEXT = ".mxf";\r
- private static final String MOVEXT = ".mov";\r
- private Marker marker = null;\r
- private IMetadataProvider metadataProvider;\r
- private List<ArchiveItem> archiveList;\r
- private Map<String, HSMContent> tapeContents = new LinkedHashMap<>();\r
-\r
- @StepEntry\r
- public Object[] execute(String sourcePath, int limit) {\r
- if (jobRuntime != null)\r
- marker = jobRuntime.getMarker();\r
- IMetadataProviderFactory factory = new MetadataProviderFactory();\r
- metadataProvider = factory.getProvider(MetadataProviderType.HSM);\r
- archiveList = new LinkedList<ArchiveItem>();\r
-\r
- try {\r
- // Files.walkFileTree(Paths.get(sourcePath), new SimpleFileVisitor<Path>() {\r
- // @Override\r
- // public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {\r
- // processPathItem(file);\r
- // return super.visitFile(file, attrs);\r
- // }\r
- // });\r
-\r
- List<IMetadata> volumes = metadataProvider.list(null);\r
- for (IMetadata volume : volumes) {\r
- System.out.println("---Volume " + volume.getTitle());\r
- long size = 0;\r
- List<IMetadata> contents = getContents(volume.getTitle());\r
- for (IMetadata content : contents) {\r
- HSMContent c = (HSMContent) content;\r
- if (!tapeContents.containsKey(c.getFileName())) {\r
- tapeContents.put(c.getFileName(), c);\r
- System.out.println("Content " + c.getFileName() + " " + c.getSegment() + " " + c.getStart());\r
- size += c.getFileSize();\r
- }\r
-\r
- }\r
-\r
- System.out.println(">>> " + size);\r
- }\r
- } catch (Exception e) {\r
- logger.catching(e);\r
- logger.error(marker, "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", e.getMessage());\r
- } finally {\r
- }\r
-\r
- System.out.println("Summary " + tapeContents.size());\r
-\r
- return new Object[] { archiveList };\r
- }\r
-\r
- private String getCompatibleFileName(Path mediaFilePath) {\r
- String fileName = mediaFilePath.toString().replace("\\", "/").replace("//", "");\r
- fileName = fileName.substring(fileName.indexOf("/"));\r
- System.out.println("Visited " + fileName);\r
- return fileName;\r
- }\r
-\r
- private List<IMetadata> getContents(String volumeName) {\r
- List<IMetadata> contents = null;\r
- HSMListOptions listOptions = new HSMListOptions();\r
- listOptions.setVolumeName(volumeName);\r
- try {\r
- contents = metadataProvider.list(listOptions);\r
- } catch (Exception e) {\r
- System.out.println(e.getMessage());\r
- }\r
- return contents;\r
- }\r
-\r
- private boolean processPathItem(Path mediaFilePath) {\r
- File mediaFile = mediaFilePath.toFile();\r
-\r
- // if (mediaFile.length() > 0)\r
- // return false;\r
-\r
- if (!mediaFile.getName().toLowerCase().endsWith(MOVEXT.toLowerCase()) && !mediaFile.getName().toLowerCase().endsWith(MXFEXT.toLowerCase()))\r
- return false;\r
-\r
- String fileName = getCompatibleFileName(mediaFilePath);\r
-\r
- HSMContent hsmContent = null;\r
- HSMListOptions listOptions = new HSMListOptions();\r
- listOptions.setFileName(fileName);\r
- try {\r
- List<IMetadata> contents = metadataProvider.list(listOptions);\r
- if (contents.size() != 1)\r
- throw new Exception("Contents size is " + contents.size());\r
- hsmContent = (HSMContent) contents.get(0);\r
-\r
- String volumeName = hsmContent.getVolumeName();\r
- } catch (Exception e) {\r
- System.out.println(e.getMessage());\r
- return false;\r
- }\r
- return true;\r
- }\r
-}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.util.Arrays;\r
+import java.util.LinkedHashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.apache.commons.io.FilenameUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+import com.ibm.nosql.json.api.DB;\r
+import com.ibm.nosql.json.api.DBCollection;\r
+import com.ibm.nosql.json.api.QueryBuilder;\r
+\r
+import user.commons.MediaCubeMarker;\r
+import user.commons.nosql.NoSQLUtils;\r
+import user.mediacube.metadata.interfaces.IMetadata;\r
+import user.mediacube.metadata.interfaces.IMetadataProvider;\r
+import user.mediacube.metadata.interfaces.IMetadataProviderFactory;\r
+import user.mediacube.metadata.interfaces.MetadataProviderType;\r
+\r
+public class HSMMigrateStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String MXFEXT = ".mxf";\r
+ private static final String MOVEXT = ".mov";\r
+ private Marker marker = null;\r
+ private IMetadataProvider hsmProvider;\r
+ private Map<String, BasicDBObject> tapeContents = new LinkedHashMap<>();\r
+ private DBCollection excludes;\r
+ private DBCollection fileHistory;\r
+ private DBCollection volumeHistory;\r
+ private DB db;\r
+ private IMetadataProvider planairProvider;\r
+\r
+ private void cleanupHistory() {\r
+ if (db == null)\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ if (fileHistory == null)\r
+ fileHistory = db.getCollection("hsm_migrate_file_history");\r
+ if (volumeHistory == null)\r
+ volumeHistory = db.getCollection("hsm_migrate_volume_history");\r
+ fileHistory.drop();\r
+ volumeHistory.drop();\r
+ }\r
+\r
+ private BasicDBObject createMetadata(String fileName) {\r
+\r
+ Path filePath = Paths.get(fileName);\r
+ String mediaHouseId = FilenameUtils.removeExtension(filePath.getFileName().toString());\r
+\r
+ //get meta\r
+\r
+ String itemHouseId = "itemHouseId";\r
+ String itemTitle = "itemTitle";\r
+ String itemDesc = "itemDesc";\r
+ String mediaTitle = "mediaTitle";\r
+ String mediaDesc = "mediaDesc";\r
+\r
+ BasicDBObject result = new BasicDBObject();\r
+ result.put("itemHouseId", itemHouseId);\r
+ result.put("itemTitle", itemTitle);\r
+ result.put("itemDescription", itemDesc);\r
+ result.put("userName", "mediacube");\r
+ result.put("mediaHouseId", fileName);\r
+ result.put("mediaTitle", mediaTitle);\r
+ result.put("mediaDescription", mediaDesc);\r
+ result.put("mediaType", "Generic");\r
+ return result;\r
+ }\r
+\r
+ @SuppressWarnings("serial")\r
+ @StepEntry\r
+ public Object[] execute(String sourceLocation, String targetLocation) throws Exception {\r
+ if (jobRuntime != null)\r
+ marker = jobRuntime.getMarker();\r
+ //remove from prod\r
+ cleanupHistory();\r
+ hsmProvider = getMetadataProvider(MetadataProviderType.HSM);\r
+ if (hsmProvider == null)\r
+ throw new NullPointerException("No HSM metadata provider available");\r
+ planairProvider = getMetadataProvider(MetadataProviderType.PLANAIR);\r
+ if (planairProvider == null)\r
+ throw new NullPointerException("No PLANAIR metadata provider available");\r
+ Path targetPath = Paths.get(targetLocation);\r
+ try {\r
+ List<IMetadata> volumes = hsmProvider.list(new BasicDBObject());\r
+ for (IMetadata volume : volumes) {\r
+ String volumeName = volume.getTitle();\r
+\r
+ BasicDBObject historyResult = queryVolumeHistory(volumeName);\r
+ if (historyResult != null) {\r
+ logger.info(marker, "A kazetta már feldolgozásra került: {}", volumeName);\r
+ continue;\r
+ }\r
+ logger.info(marker, "A kazetta feldolgozása elindul: {}", volumeName);\r
+ List<IMetadata> contents = getContents(volumeName);\r
+ int p = 0;\r
+ boolean success = false;\r
+ for (IMetadata content : contents) {\r
+ BasicDBObject c = content.asJSON();\r
+ String contentFileName = c.getString("fileName");\r
+ long contentFileSize = NoSQLUtils.asLong(c, "fileSize");\r
+ if (!tapeContents.containsKey(contentFileName)) {\r
+ tapeContents.put(contentFileName, c);\r
+ Path sourceFilePath = Paths.get(sourceLocation, contentFileName);\r
+ if (contentFileSize < Files.getFileStore(targetPath).getUsableSpace()) {\r
+ Path targetFilePath = Paths.get(targetLocation, sourceFilePath.getFileName().toString());\r
+ if (processPathItem(contentFileName, sourceFilePath, targetFilePath)) {\r
+ success = true;\r
+ //throw new Exception("Teszt");\r
+ }\r
+ }\r
+ }\r
+ setProgress(p++ * 100 / contents.size());\r
+ }\r
+\r
+ saveVolumeHistory(volumeName);\r
+ String subject = "A kazetta eltávolítható a HSM rendszerből: " + volumeName;\r
+ logger.info(new MediaCubeMarker() {\r
+ {\r
+ setSubject(subject);\r
+ }\r
+ }, subject);\r
+\r
+ //ha mar sikerult valamit archivalni kilepunk\r
+ if (success)\r
+ break;\r
+ }\r
+ } catch (Exception e) {\r
+ logger.error(marker, "Hiba a migráció során. A rendszer hibaüzenete: {}", e.getMessage());\r
+ throw e;\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ private List<IMetadata> getContents(String volumeName) throws Exception {\r
+ List<IMetadata> contents = null;\r
+ contents = hsmProvider.list(new BasicDBObject("volumeName", volumeName));\r
+ return contents;\r
+ }\r
+\r
+ protected IMetadataProvider getMetadataProvider(MetadataProviderType type) {\r
+ IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class);\r
+ if (factory == null)\r
+ return null;\r
+ return factory.getProvider(type);\r
+ }\r
+\r
+ private BasicDBObject getPlanAirMetadata() {\r
+ // planairProvider\r
+ // List<IMetadata> result = null;\r
+ // opt.setType(MetadataType.Material);\r
+ // result = sut.list(opt);\r
+ // if (result.size() != 0) {\r
+ // System.out.println("Found as MATERIAL");\r
+ // return;\r
+ // }\r
+ // opt.setType(MetadataType.Promo);\r
+ // result = sut.list(opt);\r
+ // if (result.size() != 0) {\r
+ // System.out.println("Found as PROMO");\r
+ // return;\r
+ // }\r
+ // opt.setType(MetadataType.AD);\r
+ // result = sut.list(opt);\r
+ // if (result.size() != 0) {\r
+ // System.out.println("Found as AD");\r
+ // return;\r
+ // }\r
+ return null;\r
+ }\r
+\r
+ private boolean processPathItem(String contentFileName, Path sourceFilePath, Path targetFilePath) throws IOException {\r
+ BasicDBObject excludeResult = queryExclude(contentFileName);\r
+ if (excludeResult != null) {\r
+ logger.warn(marker, "Kivételként megjelölt: {}", sourceFilePath, excludeResult.get("name"));\r
+ return false;\r
+ }\r
+\r
+ File mediaFile = sourceFilePath.toFile();\r
+ if (!mediaFile.exists()) {\r
+ logger.warn(marker, "A fájl nem elérhető: {}", sourceFilePath);\r
+ return false;\r
+ }\r
+\r
+ BasicDBObject historyResult = queryFileHistory(contentFileName);\r
+ if (historyResult != null)\r
+ return false;\r
+\r
+ // if (!mediaFile.getName().toLowerCase().endsWith(MOVEXT.toLowerCase()) && !mediaFile.getName().toLowerCase().endsWith(MXFEXT.toLowerCase()))\r
+ // return;\r
+ // logger.info("Start copy from {} to {}", sourceFilePath, targetFilePath);\r
+ logger.warn(marker, "Migrálás: {}", sourceFilePath);\r
+\r
+ if (!targetFilePath.toFile().exists())\r
+ Files.copy(sourceFilePath, targetFilePath);\r
+ else\r
+ logger.warn(marker, "A fájl már létezik: {}", targetFilePath);\r
+\r
+ String metadata = createMetadata(contentFileName).toString();\r
+ EscortFiles.createMetadata(targetFilePath.getParent().toString(), targetFilePath.getFileName().toString(), metadata, marker);\r
+ saveFileHistory(contentFileName);\r
+ return true;\r
+ }\r
+\r
+ public BasicDBObject queryExclude(String fileName) {\r
+ if (db == null)\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ if (excludes == null)\r
+ excludes = db.getCollection("hsm_migrate_exclude");\r
+ Path filePath = Paths.get(fileName);\r
+ String pureFileName = FilenameUtils.removeExtension(filePath.getFileName().toString());\r
+ QueryBuilder qb = QueryBuilder.start("name").in(Arrays.asList(fileName, pureFileName));\r
+ BasicDBObject exceptionResult = NoSQLUtils.asSingle(excludes.find(qb.get()));\r
+ return exceptionResult;\r
+ }\r
+\r
+ public BasicDBObject queryFileHistory(String fileName) {\r
+ if (db == null)\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ if (fileHistory == null)\r
+ fileHistory = db.getCollection("hsm_migrate_file_history");\r
+ QueryBuilder qb = QueryBuilder.start("name").in(Arrays.asList(fileName));\r
+ BasicDBObject historyResult = NoSQLUtils.asSingle(fileHistory.find(qb.get()));\r
+ return historyResult;\r
+ }\r
+\r
+ public BasicDBObject queryVolumeHistory(String volumeName) {\r
+ if (db == null)\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ if (volumeHistory == null)\r
+ volumeHistory = db.getCollection("hsm_migrate_volume_history");\r
+ QueryBuilder qb = QueryBuilder.start("name").in(Arrays.asList(volumeName));\r
+ BasicDBObject historyResult = NoSQLUtils.asSingle(volumeHistory.find(qb.get()));\r
+ return historyResult;\r
+ }\r
+\r
+ private void saveFileHistory(String fileName) {\r
+ if (db == null)\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ if (fileHistory == null)\r
+ fileHistory = db.getCollection("hsm_migrate_file_history");\r
+ BasicDBObject item = new BasicDBObject();\r
+ item.put("name", fileName);\r
+ fileHistory.save(item);\r
+\r
+ }\r
+\r
+ private void saveVolumeHistory(String volumeName) {\r
+ if (db == null)\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ if (volumeHistory == null)\r
+ volumeHistory = db.getCollection("hsm_migrate_volume_history");\r
+ BasicDBObject item = new BasicDBObject();\r
+ item.put("name", volumeName);\r
+ volumeHistory.save(item);\r
+\r
+ }\r
+}\r
return result;\r
}\r
\r
+ public static BasicDBObject asSingle(DBCursor cursor) {\r
+ BasicDBObject result = null;\r
+ try {\r
+ cursor.lazyFetch();\r
+ if (cursor.hasNext()) {\r
+ DBObject obj = cursor.next();\r
+ result = (BasicDBObject) obj;\r
+ }\r
+ } finally {\r
+ cursor.close();\r
+ }\r
+ return result;\r
+ }\r
+\r
public static String asString(BasicDBObject obj, String name) {\r
String result = null;\r
if (obj != null && obj.containsKey(name))\r
package user.mediacube.metadata.interfaces;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
public interface IMetadata {\r
\r
+ BasicDBObject asJSON();\r
+\r
String getId();\r
\r
String getTitle();\r
\r
import java.util.List;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
public interface IMetadataProvider {\r
\r
+ List<IMetadata> list(BasicDBObject options) throws Exception;\r
+\r
List<IMetadata> list(IMetadataListOptions options) throws Exception;\r
}\r
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.wiring.BundleWiring;
import user.commons.JobStatus;
import user.jobengine.server.messages.JobStepCompletedMessage;
outputs = step.run(jobEngine, jobRuntime, inputs);
jobEngine.sendMessage(new JobStepCompletedMessage(jobRuntime.getId(), outputs));
- } catch (Exception e) {
+ } catch (Throwable e) {
logger.error("Error in {}", jobRuntime);
Throwable t = e.getCause() == null ? e : e.getCause();
logger.catching(t);
// JobEngineException("Illegal concurrent instance count. Must be greater then 0.");
//DynamicClassLoader loader = new DynamicClassLoader(getClass().getClassLoader());
try {
+ //ClassLoader parentClassLoader = getParentClassLoader();
URLClassLoader loader = URLClassLoader.newInstance(DynamicClassLocator.makeURLs(), getClass().getClassLoader());
stepClass = (Class<IJobStep>) loader.loadClass(className);
} catch (ClassNotFoundException e) {
return maxConcurrent;
}
+ private ClassLoader getParentClassLoader() {
+ ClassLoader parentClassLoader = getClass().getClassLoader();
+ Bundle bundle = FrameworkUtil.getBundle(getClass());
+ if (bundle != null) {
+ BundleContext bundleContext = bundle.getBundleContext();
+ if (bundleContext != null) {
+ BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
+ parentClassLoader = bundleWiring.getClassLoader();
+ }
+ }
+ return parentClassLoader;
+ }
+
@Override
public PriorityBlockingQueue<IJobRuntime> getQueue() {
return this.queue;
\r
void cleanup();\r
\r
- Object[] run(IJobEngine jobEngine, IJobRuntime jobRuntime, Object[] inputs) throws Exception;\r
+ Object[] run(IJobEngine jobEngine, IJobRuntime jobRuntime, Object[] inputs) throws Throwable;\r
\r
}\r
import org.apache.logging.log4j.Logger;\r
import org.apache.logging.log4j.Marker;\r
import org.apache.logging.log4j.MarkerManager;\r
+import org.osgi.framework.Bundle;\r
+import org.osgi.framework.BundleContext;\r
+import org.osgi.framework.FrameworkUtil;\r
+import org.osgi.framework.ServiceReference;\r
\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
public void cleanup() {\r
}\r
\r
+ private Object[] executeMethod(Method method, Object[] extendedInputs) throws Exception {\r
+ Object[] result;\r
+ try {\r
+ logger.info("Executing {}", method);\r
+ result = (Object[]) method.invoke(this, extendedInputs);\r
+ } catch (Exception e) {\r
+ if (e instanceof IllegalArgumentException) {\r
+ logger.error("Invokation error in {}. Invoke parameters:\r\n{}", getClass().getSimpleName(), Arrays.toString(extendedInputs));\r
+ if (method.getParameterCount() != extendedInputs.length) {\r
+ logger.error("Expected parameter count: {}, invoke parameter count: {}", method.getGenericParameterTypes().length, extendedInputs.length);\r
+ }\r
+ }\r
+\r
+ throw e;\r
+ }\r
+ return result;\r
+ }\r
+\r
public String getDescription() {\r
return null;\r
}\r
return jobRuntime.getName();\r
}\r
\r
+ protected <T> T getService(Class<T> serviceClass) {\r
+ T service = null;\r
+ Bundle bundle = FrameworkUtil.getBundle(JobStep.class);\r
+ if (bundle != null) {\r
+ BundleContext bundleContext = bundle.getBundleContext();\r
+ ServiceReference<T> serviceReference = bundleContext.getServiceReference(serviceClass);\r
+ if (serviceReference != null) {\r
+ service = bundleContext.getService(serviceReference);\r
+ }\r
+ }\r
+ return service;\r
+ }\r
+\r
@Override\r
- public Object[] run(IJobEngine jobEngine, IJobRuntime jobRuntime, Object[] inputs) throws Exception {\r
+ public Object[] run(IJobEngine jobEngine, IJobRuntime jobRuntime, Object[] inputs) throws Throwable {\r
Object[] result = null;\r
this.jobRuntime = jobRuntime;\r
//jobRuntime.setDescription("Feldolgozás: " + getClass().getSimpleName());\r
\r
if (jobRuntime != null)\r
jobRuntime.NotifyUpdate();\r
- for (Method method : this.getClass().getDeclaredMethods()) {\r
+ Method[] declaredMethods = null;\r
+ try {\r
+ declaredMethods = this.getClass().getDeclaredMethods();\r
+ } catch (Throwable e) {\r
+ logger.error("Class analize error", e);\r
+ throw e;\r
+ }\r
+\r
+ for (Method method : declaredMethods) {\r
Annotation annotation = method.getAnnotation(StepEntry.class);\r
if (annotation != null) {\r
Object[] extendedInputs = inputs;\r
extendedInputs = addParameter(method, extendedInputs, IJobEngine.class, jobEngine);\r
extendedInputs = addParameter(method, extendedInputs, IJobRuntime.class, jobRuntime);\r
- try {\r
- logger.info("Executing {}", method);\r
- result = (Object[]) method.invoke(this, extendedInputs);\r
- } catch (Exception e) {\r
- if (e instanceof IllegalArgumentException) {\r
- logger.error("Invokation error in {}. Invoke parameters:\r\n{}", getClass().getSimpleName(), Arrays.toString(extendedInputs));\r
- if (method.getParameterCount() != extendedInputs.length) {\r
- logger.error("Expected parameter count: {}, invoke parameter count: {}", method.getGenericParameterTypes().length,\r
- extendedInputs.length);\r
- }\r
- }\r
-\r
- throw e;\r
- }\r
+ result = executeMethod(method, extendedInputs);\r
break;\r
}\r
}\r
--- /dev/null
+package user.jobengine.server.scheduler;
+
+import java.util.Date;
+
+import org.junit.Test;
+import org.quartz.CronExpression;
+
+public class CronExpressionTest {
+
+ @Test
+ public void test1() throws Exception {
+
+ CronExpression ce = new CronExpression("0/30 0 15-8 * * ?");
+ Date nextTime = new Date();
+ for (int i = 0; i < 1000; i++) {
+ nextTime = ce.getNextValidTimeAfter(nextTime);
+ System.out.println(nextTime);
+ }
+ }
+}
}\r
\r
@Test\r
- public void testRun() throws Exception {\r
+ public void testRun() throws Throwable {\r
// Fixture\r
final JobStepSpy sut = new JobStepSpy();\r
final IJobEngine jobEngine = new JobEngine();\r
com.microsoft.sqlserver.sqljdbc,
com.ibm.db2jcc4;bundle-version="4.19.26"
Bundle-ActivationPolicy: lazy
-Import-Package: user.mediacube.metadata.interfaces
+Import-Package: com.ibm.nosql.bson,
+ com.ibm.nosql.json.api,
+ user.mediacube.metadata.interfaces
Bundle-ClassPath: .
import org.apache.ibatis.session.SqlSessionFactoryBuilder;\r
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
import user.mediacube.metadata.interfaces.IMetadata;\r
import user.mediacube.metadata.interfaces.IMetadataListOptions;\r
import user.mediacube.metadata.interfaces.IMetadataProvider;\r
\r
abstract protected DataSource createDataSource();\r
\r
+ abstract protected IMetadataListOptions createOptions(BasicDBObject options);\r
+\r
abstract protected String getDriverClassName();\r
\r
+ @Override\r
+ public List<IMetadata> list(BasicDBObject options) throws Exception {\r
+ return list(createOptions(options));\r
+ }\r
+\r
@Override\r
public List<IMetadata> list(IMetadataListOptions options) throws Exception {\r
List<IMetadata> result = null;\r
package user.mediacube.metadata.hsm;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
import user.mediacube.metadata.interfaces.IMetadata;\r
\r
public class HSMContent implements IMetadata {\r
private long objectId;\r
private int start;\r
\r
+ @Override\r
+ public BasicDBObject asJSON() {\r
+ BasicDBObject result = new BasicDBObject();\r
+ result.put("fileName", fileName);\r
+ result.put("fileSize", fileSize);\r
+ result.put("segment", segment);\r
+ result.put("filespaceName", filespaceName);\r
+ result.put("volumeName", volumeName);\r
+ result.put("nodeName", nodeName);\r
+ result.put("objectId", objectId);\r
+ result.put("start", start);\r
+ return result;\r
+ }\r
+\r
public String getFileName() {\r
return fileName;\r
}\r
import org.apache.ibatis.session.Configuration;\r
import org.apache.ibatis.session.SqlSession;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
import user.mediacube.metadata.MyBatisMetadataProvider;\r
import user.mediacube.metadata.interfaces.IMetadata;\r
import user.mediacube.metadata.interfaces.IMetadataListOptions;\r
return new PooledDataSource(JDBC_DRIVER, JDBC_URL, JDBC_USER, JDBC_PWD);\r
}\r
\r
+ @Override\r
+ protected IMetadataListOptions createOptions(BasicDBObject options) {\r
+ HSMListOptions result = new HSMListOptions();\r
+ if (options.containsKey("volumeName"))\r
+ result.setVolumeName(options.getString("volumeName"));\r
+ if (options.containsKey("fileName"))\r
+ result.setVolumeName(options.getString("fileName"));\r
+ return result;\r
+\r
+ }\r
+\r
@Override\r
protected String getDriverClassName() {\r
return JDBC_DRIVER;\r
IHSMMaterialMapper mapper = session.getMapper(IHSMMaterialMapper.class);\r
List<IMetadata> result = null;\r
\r
- if (options == null) {\r
+ HSMListOptions listOptions = (HSMListOptions) options;\r
+ if (listOptions.getVolumeName() == null && listOptions.getFileName() == null) {\r
result = (List<IMetadata>) (List<?>) mapper.getVolumeNames();\r
} else {\r
- HSMListOptions listOptions = (HSMListOptions) options;\r
if (listOptions.getVolumeName() != null)\r
result = (List<IMetadata>) (List<?>) mapper.getByVolumeName(listOptions.getVolumeName());\r
else if (listOptions.getFileName() != null)\r
package user.mediacube.metadata.hsm;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
import user.mediacube.metadata.interfaces.IMetadata;\r
\r
public class HSMVolume implements IMetadata {\r
private String volumeName;\r
\r
+ @Override\r
+ public BasicDBObject asJSON() {\r
+ BasicDBObject result = new BasicDBObject();\r
+ result.put("volumeName", volumeName);\r
+ return result;\r
+ }\r
+\r
@Override\r
public String getId() {\r
return null;\r
public void setVolumeName(String volumeName) {\r
this.volumeName = volumeName;\r
}\r
-\r
}\r
package user.mediacube.metadata.planair;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
import user.mediacube.metadata.interfaces.IMetadata;\r
\r
public class PlanAirAD implements IMetadata {\r
private int spotID;//t_SpotID\r
private String okForAirs; //v_OkForAirs\r
\r
+ @Override\r
+ public BasicDBObject asJSON() {\r
+ BasicDBObject result = new BasicDBObject();\r
+ result.put("mediaID", mediaID);\r
+ result.put("title", title);\r
+ result.put("spotID", spotID);\r
+ result.put("okForAirs", okForAirs);\r
+ return result;\r
+ }\r
+\r
@Override\r
public String getId() {\r
return mediaID;\r
return spotID;\r
}\r
\r
+ @Override\r
public String getTitle() {\r
return title;\r
}\r
\r
import java.util.Date;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
import user.mediacube.metadata.interfaces.IMetadata;\r
\r
public class PlanAirMaterial implements IMetadata {\r
private int segNr;\r
private int segID;\r
\r
+ @Override\r
+ public BasicDBObject asJSON() {\r
+ BasicDBObject result = new BasicDBObject();\r
+ result.put("episodeID", episodeID);\r
+ result.put("variantID", variantID);\r
+ result.put("mediaID", mediaID);\r
+ result.put("epTitle", epTitle);\r
+ result.put("progTitle", progTitle);\r
+ result.put("episode", episode);\r
+ result.put("okForAir", okForAir);\r
+ result.put("variantNrSegments", variantNrSegments);\r
+ result.put("nextBroadcastDate", nextBroadcastDate);\r
+ result.put("firstBroadcastDate", firstBroadcastDate);\r
+ result.put("segNr", segNr);\r
+ result.put("segID", segID);\r
+ return result;\r
+ }\r
+\r
public short getEpisode() {\r
return episode;\r
}\r
--- /dev/null
+package user.mediacube.metadata.planair;\r
+\r
+import java.util.Date;\r
+\r
+import user.mediacube.metadata.interfaces.IMetadataListOptions;\r
+import user.mediacube.metadata.interfaces.MetadataType;\r
+\r
+public class PlanAirMetadataListOptions implements IMetadataListOptions {\r
+ private Date broadcastDay;\r
+ private boolean problematic;\r
+ private String search;\r
+ private MetadataType type;\r
+\r
+ public Date getBroadcastDay() {\r
+ return broadcastDay;\r
+ }\r
+\r
+ public String getSearch() {\r
+ return search;\r
+ }\r
+\r
+ public MetadataType getType() {\r
+ return type;\r
+ }\r
+\r
+ public boolean isProblematic() {\r
+ return problematic;\r
+ }\r
+\r
+ public void setBroadcastDay(Date broadcastDay) {\r
+ this.broadcastDay = broadcastDay;\r
+ }\r
+\r
+ public void setProblematic(boolean problematic) {\r
+ this.problematic = problematic;\r
+ }\r
+\r
+ public void setSearch(String search) {\r
+ this.search = search;\r
+ }\r
+\r
+ public void setType(MetadataType type) {\r
+ this.type = type;\r
+ }\r
+\r
+}\r
import javax.sql.DataSource;\r
\r
import org.apache.ibatis.datasource.pooled.PooledDataSource;\r
-import org.apache.ibatis.mapping.Environment;\r
import org.apache.ibatis.session.Configuration;\r
import org.apache.ibatis.session.SqlSession;\r
-import org.apache.ibatis.session.SqlSessionFactory;\r
-import org.apache.ibatis.session.SqlSessionFactoryBuilder;\r
-import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;\r
\r
-import com.microsoft.sqlserver.jdbc.SQLServerDriver;\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
\r
+import user.mediacube.metadata.MyBatisMetadataProvider;\r
+import user.mediacube.metadata.hsm.HSMListOptions;\r
import user.mediacube.metadata.interfaces.IMetadata;\r
import user.mediacube.metadata.interfaces.IMetadataListOptions;\r
-import user.mediacube.metadata.interfaces.IMetadataProvider;\r
import user.mediacube.metadata.interfaces.PlanAirMetadataListOptions;\r
\r
-public class PlanAirMetadataProvider implements IMetadataProvider {\r
+public class PlanAirMetadataProvider extends MyBatisMetadataProvider {\r
private static final String JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";\r
- private static final String JDBC_URL = System.getProperty("jobengine.planair.db.url", "jdbc:sqlserver://10.10.1.45;databaseName=PA_Echo;");\r
+ private static final String JDBC_URL = System.getProperty("jobengine.planair.db.url", "jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis;");\r
private static final String JDBC_USER = System.getProperty("jobengine.planair.db.user", "MAM");\r
- private static final String JDBC_PWD = System.getProperty("jobengine.planair.db.password", "Echotv.hu");\r
+ private static final String JDBC_PWD = System.getProperty("jobengine.planair.db.password", "VDani");\r
public static final String JDBC_PROCEDURE = System.getProperty("jobengine.planair.db.procedure", "clIFsp_ORI_MAM");\r
\r
- private final SqlSessionFactory sqlSessionFactory;\r
-\r
public PlanAirMetadataProvider() throws Exception {\r
- try {\r
+ super();\r
+ }\r
\r
- Class<SQLServerDriver> forName = (Class<SQLServerDriver>) Class.forName(JDBC_DRIVER);\r
- sqlSessionFactory = buildqlSessionFactory();\r
- } catch (Exception e) {\r
- throw e;\r
- }\r
+ @Override\r
+ protected DataSource createDataSource() {\r
+ return new PooledDataSource(JDBC_DRIVER, JDBC_URL, JDBC_USER, JDBC_PWD);\r
}\r
\r
- private SqlSessionFactory buildqlSessionFactory() {\r
- DataSource dataSource = new PooledDataSource(JDBC_DRIVER, JDBC_URL, JDBC_USER, JDBC_PWD);\r
- Environment environment = new Environment("Development", new JdbcTransactionFactory(), dataSource);\r
- Configuration configuration = new Configuration(environment);\r
- configuration.addMapper(IPlanAirMaterialMapper.class);\r
- configuration.addMapper(IPlanAirPromoMapper.class);\r
- configuration.addMapper(IPlanAirADMapper.class);\r
- SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();\r
- return builder.build(configuration);\r
+ @Override\r
+ protected IMetadataListOptions createOptions(BasicDBObject options) {\r
+ HSMListOptions result = new HSMListOptions();\r
+ if (options.containsKey("volumeName"))\r
+ result.setVolumeName(options.getString("volumeName"));\r
+ if (options.containsKey("fileName"))\r
+ result.setVolumeName(options.getString("fileName"));\r
+ return result;\r
}\r
\r
@Override\r
- public List<IMetadata> list(IMetadataListOptions options) throws Exception {\r
+ protected String getDriverClassName() {\r
+ return JDBC_DRIVER;\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ @Override\r
+ protected List<IMetadata> queryList(SqlSession session, IMetadataListOptions options) {\r
List<IMetadata> result = null;\r
- try (SqlSession session = sqlSessionFactory.openSession()) {\r
- PlanAirMetadataListOptions opt = (PlanAirMetadataListOptions) options;\r
- int problematic = opt.isProblematic() ? 1 : 0;\r
\r
- switch (opt.getType()) {\r
- case AD:\r
- IPlanAirADMapper adMapper = session.getMapper(IPlanAirADMapper.class);\r
- result = (List<IMetadata>) (List<?>) adMapper.getMaterials(problematic, opt.getSearch(), opt.getBroadcastDay());\r
- break;\r
- case Material:\r
- IPlanAirMaterialMapper materialMapper = session.getMapper(IPlanAirMaterialMapper.class);\r
- result = (List<IMetadata>) (List<?>) materialMapper.getMaterials(problematic, opt.getSearch(), opt.getBroadcastDay());\r
- break;\r
- case Promo:\r
- IPlanAirPromoMapper promoMapper = session.getMapper(IPlanAirPromoMapper.class);\r
- result = (List<IMetadata>) (List<?>) promoMapper.getMaterials(problematic, opt.getSearch(), opt.getBroadcastDay());\r
- break;\r
- default:\r
- throw new Exception("Missing metadata type");\r
- }\r
- } catch (Exception e) {\r
- throw e;\r
+ PlanAirMetadataListOptions opt = (PlanAirMetadataListOptions) options;\r
+ int problematic = opt.isProblematic() ? 1 : 0;\r
+\r
+ switch (opt.getType()) {\r
+ case AD:\r
+ IPlanAirADMapper adMapper = session.getMapper(IPlanAirADMapper.class);\r
+ result = (List<IMetadata>) (List<?>) adMapper.getMaterials(problematic, opt.getSearch(), opt.getBroadcastDay());\r
+ break;\r
+ case Material:\r
+ IPlanAirMaterialMapper materialMapper = session.getMapper(IPlanAirMaterialMapper.class);\r
+ result = (List<IMetadata>) (List<?>) materialMapper.getMaterials(problematic, opt.getSearch(), opt.getBroadcastDay());\r
+ break;\r
+ case Promo:\r
+ IPlanAirPromoMapper promoMapper = session.getMapper(IPlanAirPromoMapper.class);\r
+ result = (List<IMetadata>) (List<?>) promoMapper.getMaterials(problematic, opt.getSearch(), opt.getBroadcastDay());\r
+ break;\r
}\r
return result;\r
}\r
\r
+ @Override\r
+ protected void registerMappers(Configuration configuration) {\r
+ configuration.addMapper(IPlanAirMaterialMapper.class);\r
+ configuration.addMapper(IPlanAirPromoMapper.class);\r
+ configuration.addMapper(IPlanAirADMapper.class);\r
+ }\r
+\r
}\r
\r
import java.util.Date;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
import user.mediacube.metadata.interfaces.IMetadata;\r
\r
public class PlanAirPromo implements IMetadata {\r
private int spotID;//t_SpotID\r
private String okForAirs; //v_OkForAirs\r
\r
+ @Override\r
+ public BasicDBObject asJSON() {\r
+ BasicDBObject result = new BasicDBObject();\r
+ result.put("mediaID", mediaID);\r
+ result.put("title", title);\r
+ result.put("progTitle", progTitle);\r
+ result.put("episode", episode);\r
+ result.put("psStart", psStart);\r
+ result.put("spotID", spotID);\r
+ result.put("okForAirs", okForAirs);\r
+ return result;\r
+ }\r
+\r
public short getEpisode() {\r
return episode;\r
}\r
return spotID;\r
}\r
\r
+ @Override\r
public String getTitle() {\r
return title;\r
}\r
import org.junit.Test;
+import com.ibm.nosql.json.api.BasicDBObject;
+
import user.mediacube.metadata.MetadataProviderFactory;
import user.mediacube.metadata.hsm.HSMListOptions;
import user.mediacube.metadata.interfaces.IMetadata;
IMetadataProvider sut = factory.getProvider(MetadataProviderType.HSM);
// Exercise
- List<IMetadata> result = sut.list(null);
+ List<IMetadata> result = sut.list(new BasicDBObject());
// Verify
assertNotNull(result);
assertTrue(result.size() > 0);
}
+ @Test
+ public void testAllSearch() throws Exception {
+ // Fixture
+ PlanAirMetadataListOptions opt = new PlanAirMetadataListOptions();
+ opt.setSearch("09-00165-0006-1");
+ IMetadataProvider sut = factory.getProvider(MetadataProviderType.PLANAIR);
+
+ List<IMetadata> result = null;
+ opt.setType(MetadataType.Material);
+ result = sut.list(opt);
+ if (result.size() != 0) {
+ System.out.println("Found as MATERIAL");
+ return;
+ }
+ opt.setType(MetadataType.Promo);
+ result = sut.list(opt);
+ if (result.size() != 0) {
+ System.out.println("Found as PROMO");
+ return;
+ }
+ opt.setType(MetadataType.AD);
+ result = sut.list(opt);
+ if (result.size() != 0) {
+ System.out.println("Found as AD");
+ return;
+ }
+
+ System.out.println("Not exists");
+ }
+
@Test
public void testFactoryConnection() throws Exception {
// Fixture
// Fixture
PlanAirMetadataListOptions opt = new PlanAirMetadataListOptions();
opt.setType(MetadataType.Material);
- opt.setSearch("105428");
+ opt.setSearch("13-01734-0015-1");
test(opt);
}