From 2d4e24efc910dea285b7ddba1a844723d85d0316 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1s=C3=A1ry=20D=C3=A1niel?= Date: Fri, 18 Oct 2019 19:07:51 +0000 Subject: [PATCH] git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31594 --- .../run-mediacube-server-mv.launch | 30 ++ server/-configuration/scheduledjobs.json | 8 + .../tests/HSMMigrateListBuilderStepTest.java | 63 +++- .../mediacube/executors/tests/SmallTests.java | 3 +- .../mediacube/executors/tests/Support.java | 27 +- .../config/config.xml | 1 + .../config/scheduledjobs.json | 8 + .../jobtemplates/migrate-hsm.xml | 21 ++ .../jobengine/server/steps/EscortFiles.java | 7 + .../user/jobengine/server/steps/FakeStep.java | 12 + .../steps/HSMMigrateListBuilderStep.java | 123 -------- .../server/steps/HSMMigrateStep.java | 268 ++++++++++++++++++ .../src/user/commons/nosql/NoSQLUtils.java | 14 + .../metadata/interfaces/IMetadata.java | 4 + .../interfaces/IMetadataProvider.java | 4 + .../jobengine/server/JobStepExecutor.java | 20 +- .../user/jobengine/server/steps/IJobStep.java | 2 +- .../user/jobengine/server/steps/JobStep.java | 62 ++-- .../server/scheduler/CronExpressionTest.java | 20 ++ .../jobengine/server/steps/JobStepTest.java | 2 +- .../META-INF/MANIFEST.MF | 4 +- .../metadata/MyBatisMetadataProvider.java | 9 + .../mediacube/metadata/hsm/HSMContent.java | 16 ++ .../metadata/hsm/HSMMetadataProvider.java | 17 +- .../mediacube/metadata/hsm/HSMVolume.java | 10 +- .../mediacube/metadata/planair/PlanAirAD.java | 13 + .../metadata/planair/PlanAirMaterial.java | 20 ++ .../planair/PlanAirMetadataListOptions.java | 46 +++ .../planair/PlanAirMetadataProvider.java | 97 +++---- .../metadata/planair/PlanAirPromo.java | 16 ++ .../mediabube/metadata/HSMMetadataTest.java | 4 +- .../metadata/PlanAirMetadataTest.java | 32 ++- 32 files changed, 780 insertions(+), 203 deletions(-) create mode 100644 server/-configuration/run-mediacube-server-mv.launch create mode 100644 server/user.jobengine.executors/jobtemplates/migrate-hsm.xml delete mode 100644 server/user.jobengine.executors/src/user/jobengine/server/steps/HSMMigrateListBuilderStep.java create mode 100644 server/user.jobengine.executors/src/user/jobengine/server/steps/HSMMigrateStep.java create mode 100644 server/user.jobengine.osgi.server/test/user/jobengine/server/scheduler/CronExpressionTest.java create mode 100644 server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMetadataListOptions.java diff --git a/server/-configuration/run-mediacube-server-mv.launch b/server/-configuration/run-mediacube-server-mv.launch new file mode 100644 index 00000000..5a7f168a --- /dev/null +++ b/server/-configuration/run-mediacube-server-mv.launch @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/server/-configuration/scheduledjobs.json b/server/-configuration/scheduledjobs.json index d98c1e1c..e53315e8 100644 --- a/server/-configuration/scheduledjobs.json +++ b/server/-configuration/scheduledjobs.json @@ -1,4 +1,12 @@ {"joblist":[ + { + "name" : "sys: Migrate HSM", + "template": "migrate-hsm.xml", + "parameters": [ + {"name": "sourceLocation", "value": "//10.11.1.89", "type": "java.lang.String"}, + {"name": "targetLocation", "value": "c:/_video", "type": "java.lang.String"} + ] + }, { "active": false, "executeimmediate": false, diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/HSMMigrateListBuilderStepTest.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/HSMMigrateListBuilderStepTest.java index f27008c3..95577332 100644 --- a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/HSMMigrateListBuilderStepTest.java +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/HSMMigrateListBuilderStepTest.java @@ -1,16 +1,71 @@ package hu.user.mediacube.executors.tests; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import org.junit.BeforeClass; import org.junit.Test; -import user.jobengine.server.steps.HSMMigrateListBuilderStep; +import com.ibm.nosql.json.api.BasicDBObject; + +import user.jobengine.server.steps.HSMMigrateStep; +import user.mediacube.metadata.MetadataProviderFactory; +import user.mediacube.metadata.interfaces.IMetadataProvider; +import user.mediacube.metadata.interfaces.IMetadataProviderFactory; +import user.mediacube.metadata.interfaces.MetadataProviderType; public class HSMMigrateListBuilderStepTest { + @BeforeClass + static public void setUpConnection() { + System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + System.setProperty("jobengine.nosql.db.user", "db2admin"); + System.setProperty("jobengine.nosql.db.password", "password"); + } + + private HSMMigrateStep createSUT() { + HSMMigrateStep sut = new HSMMigrateStep() { + @Override + protected IMetadataProvider getMetadataProvider(MetadataProviderType type) { + IMetadataProviderFactory factory = new MetadataProviderFactory(); + return factory.getProvider(type); + } + }; + return sut; + } + @Test - public void test1() throws Exception { - HSMMigrateListBuilderStep sut = new HSMMigrateListBuilderStep(); - sut.execute("//10.11.1.89/OMARCHIVE", 0); + public void testExecute() throws Exception { + HSMMigrateStep sut = createSUT(); + sut.execute("//10.11.1.89", "/_video/migrate"); // System.out.println(Arrays.toString(sut)); } + @Test + public void testQueryException_FileNameExclude() throws Exception { + HSMMigrateStep sut = new HSMMigrateStep(); + BasicDBObject actual = sut.queryExclude("12-90670-0012"); + assertNotNull(actual); + } + + @Test + public void testQueryException_FullPathExclude() throws Exception { + HSMMigrateStep sut = new HSMMigrateStep(); + BasicDBObject actual = sut.queryExclude("/gpfs/OMARCHIVE/2011-mxf/11-01771-0002-2.mxf"); + assertNotNull(actual); + } + + @Test + public void testQueryException_NoException() throws Exception { + HSMMigrateStep sut = new HSMMigrateStep(); + BasicDBObject actual = sut.queryExclude("test.mxf"); + assertNull(actual); + } + + @Test + public void testQueryHistory() throws Exception { + HSMMigrateStep sut = new HSMMigrateStep(); + BasicDBObject actual = sut.queryFileHistory("/OMARCHIVE/6.3.4.200-TIV-TSMALL-Linuxx86_64.bin"); + assertNotNull(actual); + } } diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java index d693a2d7..0b37d49a 100644 --- a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java @@ -35,7 +35,7 @@ public class SmallTests { } @Test - public void test3() throws Exception { + public void test3() throws Throwable { TSMExtendedRetrieveStep sut = new TSMExtendedRetrieveStep(); Media mediaCubeMedia = new Media(); String targetPath = "/mnt/PROMISE/TRANSCODER/ARCHIVE_RESTORE/TTT"; @@ -67,4 +67,5 @@ public class SmallTests { void xxx(int x, boolean y) { System.out.println("call"); } + } diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java index 2a2dfd8a..b18139a3 100644 --- a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java @@ -61,11 +61,11 @@ public class Support { System.setProperty("jobengine.octopus.stories.name", "stories181217"); System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders181217"); - System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); System.setProperty("jobengine.nosql.db.user", "db2admin"); System.setProperty("jobengine.nosql.db.password", "password"); System.setProperty("nexio.host", "10.10.1.55"); - System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + System.setProperty(ItemManager.DBURL, "jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); System.setProperty(ItemManager.DBUSERNAME, "db2admin"); System.setProperty(ItemManager.DBPASSWORD, "password"); System.setProperty(LogUtils.LOGLEVEL, "INFO"); @@ -270,6 +270,29 @@ public class Support { System.out.println("itemid=" + i.getId() + " AND mediaid=" + m.getId() + " AND mediafileid=" + mf.getId()); } + @Test + public void testLoadMVExclude() throws Exception { + DB db = NoSQLUtils.getNoSQLDB(); + DBCollection collection = db.getCollection("hsm_migrate_exclude"); + List lines = Files.readAllLines(Paths.get("/opt/mv-migrate-exclude.txt")); + for (String line : lines) { + BasicDBObject d = new BasicDBObject(); + d.put("name", line.trim()); + collection.save(d); + } + + } + + @Test + public void testLoadMVExclude1() throws Exception { + DB db = NoSQLUtils.getNoSQLDB(); + DBCollection collection = db.getCollection("hsm_migrate_exclude"); + BasicDBObject d = new BasicDBObject(); + d.put("name", "/OMARCHIVE/6.3.4.200-TIV-TSMALL-Linuxx86_64.bin"); + collection.save(d); + + } + @Test public void testTSM() throws Exception { //System.setProperty("PATH", "c:\\_workspace\\USER\\MediaCube\\server\\user.tsm.client\\apilib\\;%PATH%"); diff --git a/server/user.jobengine.executors/config/config.xml b/server/user.jobengine.executors/config/config.xml index 056e06f1..a5ebba02 100644 --- a/server/user.jobengine.executors/config/config.xml +++ b/server/user.jobengine.executors/config/config.xml @@ -19,6 +19,7 @@ + diff --git a/server/user.jobengine.executors/config/scheduledjobs.json b/server/user.jobengine.executors/config/scheduledjobs.json index ca6353a9..43e716cf 100644 --- a/server/user.jobengine.executors/config/scheduledjobs.json +++ b/server/user.jobengine.executors/config/scheduledjobs.json @@ -1,4 +1,12 @@ {"joblist":[ + { + "name" : "sys: Migrate HSM", + "template": "migrate-hsm.xml", + "parameters": [ + {"name": "sourceLocation", "value": "/OMARCHIVE", "type": "java.lang.String"}, + {"name": "targetLocation", "value": "/mediacube/data", "type": "java.lang.String"} + ] + }, { "name" : "sys: Remove duplicates", "template": "duplicate-remover.xml", diff --git a/server/user.jobengine.executors/jobtemplates/migrate-hsm.xml b/server/user.jobengine.executors/jobtemplates/migrate-hsm.xml new file mode 100644 index 00000000..93f62ba7 --- /dev/null +++ b/server/user.jobengine.executors/jobtemplates/migrate-hsm.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java index 4be1b405..298b456d 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java @@ -65,6 +65,13 @@ public class EscortFiles { return String.format(KILLDATE_FILENAME, fileName, composeKillDate(days)); } + public static void createMetadata(String filePath, String fileName, String metadata, Marker marker) throws IOException { + ensureUNCFolder(filePath, STATUSFOLDER); + String metadataFileName = fileName + ".json"; + Path metadataPath = Paths.get(filePath, STATUSFOLDER, metadataFileName); + Files.write(metadataPath, metadata.getBytes()); + } + public static void createMorpheusXML(String filePath, String fileName, String content) throws IOException { ensureUNCFolder(filePath, STATUSFOLDER); Path xmlPath = Paths.get(filePath, fileName); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java index fb3c72d1..9573db74 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java @@ -5,16 +5,22 @@ import org.apache.logging.log4j.Logger; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; +import user.mediacube.metadata.interfaces.IMetadataProvider; +import user.mediacube.metadata.interfaces.IMetadataProviderFactory; +import user.mediacube.metadata.interfaces.MetadataProviderType; public class FakeStep extends JobStep { private static final Logger logger = LogManager.getLogger(); private int count = 10; private StringBuilder sb = new StringBuilder(); + private IMetadataProvider metadataProvider; @StepEntry public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { Object[] result = { itemID + 1 }; + test(); + //((MediaCubeMarker) jobRuntime.getMarker()).setTo("vasary@elgekko.net"); //logger.info(jobRuntime.getMarker(), "usefullink"); @@ -40,4 +46,10 @@ public class FakeStep extends JobStep { return result; } + public void test() { + IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class); + metadataProvider = factory.getProvider(MetadataProviderType.HSM); + logger.info(jobRuntime.getMarker(), metadataProvider); + } + } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/HSMMigrateListBuilderStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/HSMMigrateListBuilderStep.java deleted file mode 100644 index cd0e370c..00000000 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/HSMMigrateListBuilderStep.java +++ /dev/null @@ -1,123 +0,0 @@ -package user.jobengine.server.steps; - -import java.io.File; -import java.nio.file.Path; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import org.apache.commons.io.FileUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.Marker; - -import user.mediacube.metadata.MetadataProviderFactory; -import user.mediacube.metadata.hsm.HSMContent; -import user.mediacube.metadata.hsm.HSMListOptions; -import user.mediacube.metadata.interfaces.IMetadata; -import user.mediacube.metadata.interfaces.IMetadataProvider; -import user.mediacube.metadata.interfaces.IMetadataProviderFactory; -import user.mediacube.metadata.interfaces.MetadataProviderType; - -public class HSMMigrateListBuilderStep extends JobStep { - private static final Logger logger = LogManager.getLogger(); - private static final String MXFEXT = ".mxf"; - private static final String MOVEXT = ".mov"; - private Marker marker = null; - private IMetadataProvider metadataProvider; - private List archiveList; - private Map tapeContents = new LinkedHashMap<>(); - - @StepEntry - public Object[] execute(String sourcePath, int limit) { - if (jobRuntime != null) - marker = jobRuntime.getMarker(); - IMetadataProviderFactory factory = new MetadataProviderFactory(); - metadataProvider = factory.getProvider(MetadataProviderType.HSM); - archiveList = new LinkedList(); - - try { - // Files.walkFileTree(Paths.get(sourcePath), new SimpleFileVisitor() { - // @Override - // public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - // processPathItem(file); - // return super.visitFile(file, attrs); - // } - // }); - - List volumes = metadataProvider.list(null); - for (IMetadata volume : volumes) { - System.out.println("---Volume " + volume.getTitle()); - long size = 0; - List contents = getContents(volume.getTitle()); - for (IMetadata content : contents) { - HSMContent c = (HSMContent) content; - if (!tapeContents.containsKey(c.getFileName())) { - tapeContents.put(c.getFileName(), c); - System.out.println("Content " + c.getFileName() + " " + c.getSegment() + " " + c.getStart()); - size += c.getFileSize(); - } - - } - - System.out.println(">>> " + size); - } - } catch (Exception e) { - logger.catching(e); - logger.error(marker, "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", e.getMessage()); - } finally { - } - - System.out.println("Summary " + tapeContents.size()); - - return new Object[] { archiveList }; - } - - private String getCompatibleFileName(Path mediaFilePath) { - String fileName = mediaFilePath.toString().replace("\\", "/").replace("//", ""); - fileName = fileName.substring(fileName.indexOf("/")); - System.out.println("Visited " + fileName); - return fileName; - } - - private List getContents(String volumeName) { - List contents = null; - HSMListOptions listOptions = new HSMListOptions(); - listOptions.setVolumeName(volumeName); - try { - contents = metadataProvider.list(listOptions); - } catch (Exception e) { - System.out.println(e.getMessage()); - } - return contents; - } - - private boolean processPathItem(Path mediaFilePath) { - File mediaFile = mediaFilePath.toFile(); - - // if (mediaFile.length() > 0) - // return false; - - if (!mediaFile.getName().toLowerCase().endsWith(MOVEXT.toLowerCase()) && !mediaFile.getName().toLowerCase().endsWith(MXFEXT.toLowerCase())) - return false; - - String fileName = getCompatibleFileName(mediaFilePath); - - HSMContent hsmContent = null; - HSMListOptions listOptions = new HSMListOptions(); - listOptions.setFileName(fileName); - try { - List contents = metadataProvider.list(listOptions); - if (contents.size() != 1) - throw new Exception("Contents size is " + contents.size()); - hsmContent = (HSMContent) contents.get(0); - - String volumeName = hsmContent.getVolumeName(); - } catch (Exception e) { - System.out.println(e.getMessage()); - return false; - } - return true; - } -} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/HSMMigrateStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/HSMMigrateStep.java new file mode 100644 index 00000000..5e2d2a14 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/HSMMigrateStep.java @@ -0,0 +1,268 @@ +package user.jobengine.server.steps; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.io.FilenameUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import com.ibm.nosql.json.api.BasicDBObject; +import com.ibm.nosql.json.api.DB; +import com.ibm.nosql.json.api.DBCollection; +import com.ibm.nosql.json.api.QueryBuilder; + +import user.commons.MediaCubeMarker; +import user.commons.nosql.NoSQLUtils; +import user.mediacube.metadata.interfaces.IMetadata; +import user.mediacube.metadata.interfaces.IMetadataProvider; +import user.mediacube.metadata.interfaces.IMetadataProviderFactory; +import user.mediacube.metadata.interfaces.MetadataProviderType; + +public class HSMMigrateStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + private static final String MXFEXT = ".mxf"; + private static final String MOVEXT = ".mov"; + private Marker marker = null; + private IMetadataProvider hsmProvider; + private Map tapeContents = new LinkedHashMap<>(); + private DBCollection excludes; + private DBCollection fileHistory; + private DBCollection volumeHistory; + private DB db; + private IMetadataProvider planairProvider; + + private void cleanupHistory() { + if (db == null) + db = NoSQLUtils.getNoSQLDB(); + if (fileHistory == null) + fileHistory = db.getCollection("hsm_migrate_file_history"); + if (volumeHistory == null) + volumeHistory = db.getCollection("hsm_migrate_volume_history"); + fileHistory.drop(); + volumeHistory.drop(); + } + + private BasicDBObject createMetadata(String fileName) { + + Path filePath = Paths.get(fileName); + String mediaHouseId = FilenameUtils.removeExtension(filePath.getFileName().toString()); + + //get meta + + String itemHouseId = "itemHouseId"; + String itemTitle = "itemTitle"; + String itemDesc = "itemDesc"; + String mediaTitle = "mediaTitle"; + String mediaDesc = "mediaDesc"; + + BasicDBObject result = new BasicDBObject(); + result.put("itemHouseId", itemHouseId); + result.put("itemTitle", itemTitle); + result.put("itemDescription", itemDesc); + result.put("userName", "mediacube"); + result.put("mediaHouseId", fileName); + result.put("mediaTitle", mediaTitle); + result.put("mediaDescription", mediaDesc); + result.put("mediaType", "Generic"); + return result; + } + + @SuppressWarnings("serial") + @StepEntry + public Object[] execute(String sourceLocation, String targetLocation) throws Exception { + if (jobRuntime != null) + marker = jobRuntime.getMarker(); + //remove from prod + cleanupHistory(); + hsmProvider = getMetadataProvider(MetadataProviderType.HSM); + if (hsmProvider == null) + throw new NullPointerException("No HSM metadata provider available"); + planairProvider = getMetadataProvider(MetadataProviderType.PLANAIR); + if (planairProvider == null) + throw new NullPointerException("No PLANAIR metadata provider available"); + Path targetPath = Paths.get(targetLocation); + try { + List volumes = hsmProvider.list(new BasicDBObject()); + for (IMetadata volume : volumes) { + String volumeName = volume.getTitle(); + + BasicDBObject historyResult = queryVolumeHistory(volumeName); + if (historyResult != null) { + logger.info(marker, "A kazetta már feldolgozásra került: {}", volumeName); + continue; + } + logger.info(marker, "A kazetta feldolgozása elindul: {}", volumeName); + List contents = getContents(volumeName); + int p = 0; + boolean success = false; + for (IMetadata content : contents) { + BasicDBObject c = content.asJSON(); + String contentFileName = c.getString("fileName"); + long contentFileSize = NoSQLUtils.asLong(c, "fileSize"); + if (!tapeContents.containsKey(contentFileName)) { + tapeContents.put(contentFileName, c); + Path sourceFilePath = Paths.get(sourceLocation, contentFileName); + if (contentFileSize < Files.getFileStore(targetPath).getUsableSpace()) { + Path targetFilePath = Paths.get(targetLocation, sourceFilePath.getFileName().toString()); + if (processPathItem(contentFileName, sourceFilePath, targetFilePath)) { + success = true; + //throw new Exception("Teszt"); + } + } + } + setProgress(p++ * 100 / contents.size()); + } + + saveVolumeHistory(volumeName); + String subject = "A kazetta eltávolítható a HSM rendszerből: " + volumeName; + logger.info(new MediaCubeMarker() { + { + setSubject(subject); + } + }, subject); + + //ha mar sikerult valamit archivalni kilepunk + if (success) + break; + } + } catch (Exception e) { + logger.error(marker, "Hiba a migráció során. A rendszer hibaüzenete: {}", e.getMessage()); + throw e; + } + + return null; + } + + private List getContents(String volumeName) throws Exception { + List contents = null; + contents = hsmProvider.list(new BasicDBObject("volumeName", volumeName)); + return contents; + } + + protected IMetadataProvider getMetadataProvider(MetadataProviderType type) { + IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class); + if (factory == null) + return null; + return factory.getProvider(type); + } + + private BasicDBObject getPlanAirMetadata() { + // planairProvider + // List 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; + // } + return null; + } + + private boolean processPathItem(String contentFileName, Path sourceFilePath, Path targetFilePath) throws IOException { + BasicDBObject excludeResult = queryExclude(contentFileName); + if (excludeResult != null) { + logger.warn(marker, "Kivételként megjelölt: {}", sourceFilePath, excludeResult.get("name")); + return false; + } + + File mediaFile = sourceFilePath.toFile(); + if (!mediaFile.exists()) { + logger.warn(marker, "A fájl nem elérhető: {}", sourceFilePath); + return false; + } + + BasicDBObject historyResult = queryFileHistory(contentFileName); + if (historyResult != null) + return false; + + // if (!mediaFile.getName().toLowerCase().endsWith(MOVEXT.toLowerCase()) && !mediaFile.getName().toLowerCase().endsWith(MXFEXT.toLowerCase())) + // return; + // logger.info("Start copy from {} to {}", sourceFilePath, targetFilePath); + logger.warn(marker, "Migrálás: {}", sourceFilePath); + + if (!targetFilePath.toFile().exists()) + Files.copy(sourceFilePath, targetFilePath); + else + logger.warn(marker, "A fájl már létezik: {}", targetFilePath); + + String metadata = createMetadata(contentFileName).toString(); + EscortFiles.createMetadata(targetFilePath.getParent().toString(), targetFilePath.getFileName().toString(), metadata, marker); + saveFileHistory(contentFileName); + return true; + } + + public BasicDBObject queryExclude(String fileName) { + if (db == null) + db = NoSQLUtils.getNoSQLDB(); + if (excludes == null) + excludes = db.getCollection("hsm_migrate_exclude"); + Path filePath = Paths.get(fileName); + String pureFileName = FilenameUtils.removeExtension(filePath.getFileName().toString()); + QueryBuilder qb = QueryBuilder.start("name").in(Arrays.asList(fileName, pureFileName)); + BasicDBObject exceptionResult = NoSQLUtils.asSingle(excludes.find(qb.get())); + return exceptionResult; + } + + public BasicDBObject queryFileHistory(String fileName) { + if (db == null) + db = NoSQLUtils.getNoSQLDB(); + if (fileHistory == null) + fileHistory = db.getCollection("hsm_migrate_file_history"); + QueryBuilder qb = QueryBuilder.start("name").in(Arrays.asList(fileName)); + BasicDBObject historyResult = NoSQLUtils.asSingle(fileHistory.find(qb.get())); + return historyResult; + } + + public BasicDBObject queryVolumeHistory(String volumeName) { + if (db == null) + db = NoSQLUtils.getNoSQLDB(); + if (volumeHistory == null) + volumeHistory = db.getCollection("hsm_migrate_volume_history"); + QueryBuilder qb = QueryBuilder.start("name").in(Arrays.asList(volumeName)); + BasicDBObject historyResult = NoSQLUtils.asSingle(volumeHistory.find(qb.get())); + return historyResult; + } + + private void saveFileHistory(String fileName) { + if (db == null) + db = NoSQLUtils.getNoSQLDB(); + if (fileHistory == null) + fileHistory = db.getCollection("hsm_migrate_file_history"); + BasicDBObject item = new BasicDBObject(); + item.put("name", fileName); + fileHistory.save(item); + + } + + private void saveVolumeHistory(String volumeName) { + if (db == null) + db = NoSQLUtils.getNoSQLDB(); + if (volumeHistory == null) + volumeHistory = db.getCollection("hsm_migrate_volume_history"); + BasicDBObject item = new BasicDBObject(); + item.put("name", volumeName); + volumeHistory.save(item); + + } +} diff --git a/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java b/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java index ac57183a..51d0290f 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java @@ -113,6 +113,20 @@ public class NoSQLUtils { return result; } + public static BasicDBObject asSingle(DBCursor cursor) { + BasicDBObject result = null; + try { + cursor.lazyFetch(); + if (cursor.hasNext()) { + DBObject obj = cursor.next(); + result = (BasicDBObject) obj; + } + } finally { + cursor.close(); + } + return result; + } + public static String asString(BasicDBObject obj, String name) { String result = null; if (obj != null && obj.containsKey(name)) diff --git a/server/user.jobengine.osgi.commons/src/user/mediacube/metadata/interfaces/IMetadata.java b/server/user.jobengine.osgi.commons/src/user/mediacube/metadata/interfaces/IMetadata.java index d9711f75..5566a4e0 100644 --- a/server/user.jobengine.osgi.commons/src/user/mediacube/metadata/interfaces/IMetadata.java +++ b/server/user.jobengine.osgi.commons/src/user/mediacube/metadata/interfaces/IMetadata.java @@ -1,7 +1,11 @@ package user.mediacube.metadata.interfaces; +import com.ibm.nosql.json.api.BasicDBObject; + public interface IMetadata { + BasicDBObject asJSON(); + String getId(); String getTitle(); diff --git a/server/user.jobengine.osgi.commons/src/user/mediacube/metadata/interfaces/IMetadataProvider.java b/server/user.jobengine.osgi.commons/src/user/mediacube/metadata/interfaces/IMetadataProvider.java index 00dee5e9..3c6b1acd 100644 --- a/server/user.jobengine.osgi.commons/src/user/mediacube/metadata/interfaces/IMetadataProvider.java +++ b/server/user.jobengine.osgi.commons/src/user/mediacube/metadata/interfaces/IMetadataProvider.java @@ -2,7 +2,11 @@ package user.mediacube.metadata.interfaces; import java.util.List; +import com.ibm.nosql.json.api.BasicDBObject; + public interface IMetadataProvider { + List list(BasicDBObject options) throws Exception; + List list(IMetadataListOptions options) throws Exception; } diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java index 4c65cb21..897fcd76 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java @@ -10,6 +10,10 @@ import java.util.concurrent.TimeUnit; 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; @@ -58,7 +62,7 @@ public class JobStepExecutor implements IJobStepExecutor { 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); @@ -136,6 +140,7 @@ public class JobStepExecutor implements IJobStepExecutor { // 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) loader.loadClass(className); } catch (ClassNotFoundException e) { @@ -163,6 +168,19 @@ public class JobStepExecutor implements IJobStepExecutor { 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 getQueue() { return this.queue; diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/IJobStep.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/IJobStep.java index 4780fdd8..e84eb5de 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/IJobStep.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/IJobStep.java @@ -9,6 +9,6 @@ public interface IJobStep { void cleanup(); - Object[] run(IJobEngine jobEngine, IJobRuntime jobRuntime, Object[] inputs) throws Exception; + Object[] run(IJobEngine jobEngine, IJobRuntime jobRuntime, Object[] inputs) throws Throwable; } diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/JobStep.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/JobStep.java index ae4602f2..4899111c 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/JobStep.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/JobStep.java @@ -10,6 +10,10 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Marker; import org.apache.logging.log4j.MarkerManager; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.ServiceReference; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; @@ -54,6 +58,24 @@ public class JobStep implements IJobStep { public void cleanup() { } + private Object[] executeMethod(Method method, Object[] extendedInputs) throws Exception { + Object[] result; + try { + logger.info("Executing {}", method); + result = (Object[]) method.invoke(this, extendedInputs); + } catch (Exception e) { + if (e instanceof IllegalArgumentException) { + logger.error("Invokation error in {}. Invoke parameters:\r\n{}", getClass().getSimpleName(), Arrays.toString(extendedInputs)); + if (method.getParameterCount() != extendedInputs.length) { + logger.error("Expected parameter count: {}, invoke parameter count: {}", method.getGenericParameterTypes().length, extendedInputs.length); + } + } + + throw e; + } + return result; + } + public String getDescription() { return null; } @@ -73,34 +95,42 @@ public class JobStep implements IJobStep { return jobRuntime.getName(); } + protected T getService(Class serviceClass) { + T service = null; + Bundle bundle = FrameworkUtil.getBundle(JobStep.class); + if (bundle != null) { + BundleContext bundleContext = bundle.getBundleContext(); + ServiceReference serviceReference = bundleContext.getServiceReference(serviceClass); + if (serviceReference != null) { + service = bundleContext.getService(serviceReference); + } + } + return service; + } + @Override - public Object[] run(IJobEngine jobEngine, IJobRuntime jobRuntime, Object[] inputs) throws Exception { + public Object[] run(IJobEngine jobEngine, IJobRuntime jobRuntime, Object[] inputs) throws Throwable { Object[] result = null; this.jobRuntime = jobRuntime; //jobRuntime.setDescription("Feldolgozás: " + getClass().getSimpleName()); if (jobRuntime != null) jobRuntime.NotifyUpdate(); - for (Method method : this.getClass().getDeclaredMethods()) { + Method[] declaredMethods = null; + try { + declaredMethods = this.getClass().getDeclaredMethods(); + } catch (Throwable e) { + logger.error("Class analize error", e); + throw e; + } + + for (Method method : declaredMethods) { Annotation annotation = method.getAnnotation(StepEntry.class); if (annotation != null) { Object[] extendedInputs = inputs; extendedInputs = addParameter(method, extendedInputs, IJobEngine.class, jobEngine); extendedInputs = addParameter(method, extendedInputs, IJobRuntime.class, jobRuntime); - try { - logger.info("Executing {}", method); - result = (Object[]) method.invoke(this, extendedInputs); - } catch (Exception e) { - if (e instanceof IllegalArgumentException) { - logger.error("Invokation error in {}. Invoke parameters:\r\n{}", getClass().getSimpleName(), Arrays.toString(extendedInputs)); - if (method.getParameterCount() != extendedInputs.length) { - logger.error("Expected parameter count: {}, invoke parameter count: {}", method.getGenericParameterTypes().length, - extendedInputs.length); - } - } - - throw e; - } + result = executeMethod(method, extendedInputs); break; } } diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/scheduler/CronExpressionTest.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/scheduler/CronExpressionTest.java new file mode 100644 index 00000000..ced165eb --- /dev/null +++ b/server/user.jobengine.osgi.server/test/user/jobengine/server/scheduler/CronExpressionTest.java @@ -0,0 +1,20 @@ +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); + } + } +} diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/steps/JobStepTest.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/steps/JobStepTest.java index fd03db32..8d187eeb 100644 --- a/server/user.jobengine.osgi.server/test/user/jobengine/server/steps/JobStepTest.java +++ b/server/user.jobengine.osgi.server/test/user/jobengine/server/steps/JobStepTest.java @@ -75,7 +75,7 @@ public class JobStepTest { } @Test - public void testRun() throws Exception { + public void testRun() throws Throwable { // Fixture final JobStepSpy sut = new JobStepSpy(); final IJobEngine jobEngine = new JobEngine(); diff --git a/server/user.mediacube.metadata/META-INF/MANIFEST.MF b/server/user.mediacube.metadata/META-INF/MANIFEST.MF index 95a15f02..ce18ea2c 100644 --- a/server/user.mediacube.metadata/META-INF/MANIFEST.MF +++ b/server/user.mediacube.metadata/META-INF/MANIFEST.MF @@ -13,5 +13,7 @@ Require-Bundle: org.mybatis.mybatis;bundle-version="3.5.2", 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: . diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/MyBatisMetadataProvider.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/MyBatisMetadataProvider.java index c8885a23..2b0c807b 100644 --- a/server/user.mediacube.metadata/src/user/mediacube/metadata/MyBatisMetadataProvider.java +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/MyBatisMetadataProvider.java @@ -11,6 +11,8 @@ import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; +import com.ibm.nosql.json.api.BasicDBObject; + import user.mediacube.metadata.interfaces.IMetadata; import user.mediacube.metadata.interfaces.IMetadataListOptions; import user.mediacube.metadata.interfaces.IMetadataProvider; @@ -37,8 +39,15 @@ public abstract class MyBatisMetadataProvider implements IMetadataProvider { abstract protected DataSource createDataSource(); + abstract protected IMetadataListOptions createOptions(BasicDBObject options); + abstract protected String getDriverClassName(); + @Override + public List list(BasicDBObject options) throws Exception { + return list(createOptions(options)); + } + @Override public List list(IMetadataListOptions options) throws Exception { List result = null; diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMContent.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMContent.java index 080adaf5..e071330a 100644 --- a/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMContent.java +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMContent.java @@ -1,5 +1,7 @@ package user.mediacube.metadata.hsm; +import com.ibm.nosql.json.api.BasicDBObject; + import user.mediacube.metadata.interfaces.IMetadata; public class HSMContent implements IMetadata { @@ -12,6 +14,20 @@ public class HSMContent implements IMetadata { private long objectId; private int start; + @Override + public BasicDBObject asJSON() { + BasicDBObject result = new BasicDBObject(); + result.put("fileName", fileName); + result.put("fileSize", fileSize); + result.put("segment", segment); + result.put("filespaceName", filespaceName); + result.put("volumeName", volumeName); + result.put("nodeName", nodeName); + result.put("objectId", objectId); + result.put("start", start); + return result; + } + public String getFileName() { return fileName; } diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMMetadataProvider.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMMetadataProvider.java index ddd9513f..6fe18820 100644 --- a/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMMetadataProvider.java +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMMetadataProvider.java @@ -8,6 +8,8 @@ import org.apache.ibatis.datasource.pooled.PooledDataSource; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSession; +import com.ibm.nosql.json.api.BasicDBObject; + import user.mediacube.metadata.MyBatisMetadataProvider; import user.mediacube.metadata.interfaces.IMetadata; import user.mediacube.metadata.interfaces.IMetadataListOptions; @@ -27,6 +29,17 @@ public class HSMMetadataProvider extends MyBatisMetadataProvider { return new PooledDataSource(JDBC_DRIVER, JDBC_URL, JDBC_USER, JDBC_PWD); } + @Override + protected IMetadataListOptions createOptions(BasicDBObject options) { + HSMListOptions result = new HSMListOptions(); + if (options.containsKey("volumeName")) + result.setVolumeName(options.getString("volumeName")); + if (options.containsKey("fileName")) + result.setVolumeName(options.getString("fileName")); + return result; + + } + @Override protected String getDriverClassName() { return JDBC_DRIVER; @@ -38,10 +51,10 @@ public class HSMMetadataProvider extends MyBatisMetadataProvider { IHSMMaterialMapper mapper = session.getMapper(IHSMMaterialMapper.class); List result = null; - if (options == null) { + HSMListOptions listOptions = (HSMListOptions) options; + if (listOptions.getVolumeName() == null && listOptions.getFileName() == null) { result = (List) (List) mapper.getVolumeNames(); } else { - HSMListOptions listOptions = (HSMListOptions) options; if (listOptions.getVolumeName() != null) result = (List) (List) mapper.getByVolumeName(listOptions.getVolumeName()); else if (listOptions.getFileName() != null) diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMVolume.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMVolume.java index c43ca11f..6cb015a0 100644 --- a/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMVolume.java +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMVolume.java @@ -1,10 +1,19 @@ package user.mediacube.metadata.hsm; +import com.ibm.nosql.json.api.BasicDBObject; + import user.mediacube.metadata.interfaces.IMetadata; public class HSMVolume implements IMetadata { private String volumeName; + @Override + public BasicDBObject asJSON() { + BasicDBObject result = new BasicDBObject(); + result.put("volumeName", volumeName); + return result; + } + @Override public String getId() { return null; @@ -22,5 +31,4 @@ public class HSMVolume implements IMetadata { public void setVolumeName(String volumeName) { this.volumeName = volumeName; } - } diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirAD.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirAD.java index 31d61dd5..2f3a1f8a 100644 --- a/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirAD.java +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirAD.java @@ -1,5 +1,7 @@ package user.mediacube.metadata.planair; +import com.ibm.nosql.json.api.BasicDBObject; + import user.mediacube.metadata.interfaces.IMetadata; public class PlanAirAD implements IMetadata { @@ -8,6 +10,16 @@ public class PlanAirAD implements IMetadata { private int spotID;//t_SpotID private String okForAirs; //v_OkForAirs + @Override + public BasicDBObject asJSON() { + BasicDBObject result = new BasicDBObject(); + result.put("mediaID", mediaID); + result.put("title", title); + result.put("spotID", spotID); + result.put("okForAirs", okForAirs); + return result; + } + @Override public String getId() { return mediaID; @@ -21,6 +33,7 @@ public class PlanAirAD implements IMetadata { return spotID; } + @Override public String getTitle() { return title; } diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMaterial.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMaterial.java index b0d00605..3270f649 100644 --- a/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMaterial.java +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMaterial.java @@ -2,6 +2,8 @@ package user.mediacube.metadata.planair; import java.util.Date; +import com.ibm.nosql.json.api.BasicDBObject; + import user.mediacube.metadata.interfaces.IMetadata; public class PlanAirMaterial implements IMetadata { @@ -18,6 +20,24 @@ public class PlanAirMaterial implements IMetadata { private int segNr; private int segID; + @Override + public BasicDBObject asJSON() { + BasicDBObject result = new BasicDBObject(); + result.put("episodeID", episodeID); + result.put("variantID", variantID); + result.put("mediaID", mediaID); + result.put("epTitle", epTitle); + result.put("progTitle", progTitle); + result.put("episode", episode); + result.put("okForAir", okForAir); + result.put("variantNrSegments", variantNrSegments); + result.put("nextBroadcastDate", nextBroadcastDate); + result.put("firstBroadcastDate", firstBroadcastDate); + result.put("segNr", segNr); + result.put("segID", segID); + return result; + } + public short getEpisode() { return episode; } diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMetadataListOptions.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMetadataListOptions.java new file mode 100644 index 00000000..8002b855 --- /dev/null +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMetadataListOptions.java @@ -0,0 +1,46 @@ +package user.mediacube.metadata.planair; + +import java.util.Date; + +import user.mediacube.metadata.interfaces.IMetadataListOptions; +import user.mediacube.metadata.interfaces.MetadataType; + +public class PlanAirMetadataListOptions implements IMetadataListOptions { + private Date broadcastDay; + private boolean problematic; + private String search; + private MetadataType type; + + public Date getBroadcastDay() { + return broadcastDay; + } + + public String getSearch() { + return search; + } + + public MetadataType getType() { + return type; + } + + public boolean isProblematic() { + return problematic; + } + + public void setBroadcastDay(Date broadcastDay) { + this.broadcastDay = broadcastDay; + } + + public void setProblematic(boolean problematic) { + this.problematic = problematic; + } + + public void setSearch(String search) { + this.search = search; + } + + public void setType(MetadataType type) { + this.type = type; + } + +} diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMetadataProvider.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMetadataProvider.java index e24a8e27..1c3b612f 100644 --- a/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMetadataProvider.java +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMetadataProvider.java @@ -5,77 +5,78 @@ import java.util.List; import javax.sql.DataSource; import org.apache.ibatis.datasource.pooled.PooledDataSource; -import org.apache.ibatis.mapping.Environment; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSession; -import org.apache.ibatis.session.SqlSessionFactory; -import org.apache.ibatis.session.SqlSessionFactoryBuilder; -import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; -import com.microsoft.sqlserver.jdbc.SQLServerDriver; +import com.ibm.nosql.json.api.BasicDBObject; +import user.mediacube.metadata.MyBatisMetadataProvider; +import user.mediacube.metadata.hsm.HSMListOptions; import user.mediacube.metadata.interfaces.IMetadata; import user.mediacube.metadata.interfaces.IMetadataListOptions; -import user.mediacube.metadata.interfaces.IMetadataProvider; import user.mediacube.metadata.interfaces.PlanAirMetadataListOptions; -public class PlanAirMetadataProvider implements IMetadataProvider { +public class PlanAirMetadataProvider extends MyBatisMetadataProvider { private static final String JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - private static final String JDBC_URL = System.getProperty("jobengine.planair.db.url", "jdbc:sqlserver://10.10.1.45;databaseName=PA_Echo;"); + private static final String JDBC_URL = System.getProperty("jobengine.planair.db.url", "jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis;"); private static final String JDBC_USER = System.getProperty("jobengine.planair.db.user", "MAM"); - private static final String JDBC_PWD = System.getProperty("jobengine.planair.db.password", "Echotv.hu"); + private static final String JDBC_PWD = System.getProperty("jobengine.planair.db.password", "VDani"); public static final String JDBC_PROCEDURE = System.getProperty("jobengine.planair.db.procedure", "clIFsp_ORI_MAM"); - private final SqlSessionFactory sqlSessionFactory; - public PlanAirMetadataProvider() throws Exception { - try { + super(); + } - Class forName = (Class) Class.forName(JDBC_DRIVER); - sqlSessionFactory = buildqlSessionFactory(); - } catch (Exception e) { - throw e; - } + @Override + protected DataSource createDataSource() { + return new PooledDataSource(JDBC_DRIVER, JDBC_URL, JDBC_USER, JDBC_PWD); } - private SqlSessionFactory buildqlSessionFactory() { - DataSource dataSource = new PooledDataSource(JDBC_DRIVER, JDBC_URL, JDBC_USER, JDBC_PWD); - Environment environment = new Environment("Development", new JdbcTransactionFactory(), dataSource); - Configuration configuration = new Configuration(environment); - configuration.addMapper(IPlanAirMaterialMapper.class); - configuration.addMapper(IPlanAirPromoMapper.class); - configuration.addMapper(IPlanAirADMapper.class); - SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); - return builder.build(configuration); + @Override + protected IMetadataListOptions createOptions(BasicDBObject options) { + HSMListOptions result = new HSMListOptions(); + if (options.containsKey("volumeName")) + result.setVolumeName(options.getString("volumeName")); + if (options.containsKey("fileName")) + result.setVolumeName(options.getString("fileName")); + return result; } @Override - public List list(IMetadataListOptions options) throws Exception { + protected String getDriverClassName() { + return JDBC_DRIVER; + } + + @SuppressWarnings("unchecked") + @Override + protected List queryList(SqlSession session, IMetadataListOptions options) { List result = null; - try (SqlSession session = sqlSessionFactory.openSession()) { - PlanAirMetadataListOptions opt = (PlanAirMetadataListOptions) options; - int problematic = opt.isProblematic() ? 1 : 0; - switch (opt.getType()) { - case AD: - IPlanAirADMapper adMapper = session.getMapper(IPlanAirADMapper.class); - result = (List) (List) adMapper.getMaterials(problematic, opt.getSearch(), opt.getBroadcastDay()); - break; - case Material: - IPlanAirMaterialMapper materialMapper = session.getMapper(IPlanAirMaterialMapper.class); - result = (List) (List) materialMapper.getMaterials(problematic, opt.getSearch(), opt.getBroadcastDay()); - break; - case Promo: - IPlanAirPromoMapper promoMapper = session.getMapper(IPlanAirPromoMapper.class); - result = (List) (List) promoMapper.getMaterials(problematic, opt.getSearch(), opt.getBroadcastDay()); - break; - default: - throw new Exception("Missing metadata type"); - } - } catch (Exception e) { - throw e; + PlanAirMetadataListOptions opt = (PlanAirMetadataListOptions) options; + int problematic = opt.isProblematic() ? 1 : 0; + + switch (opt.getType()) { + case AD: + IPlanAirADMapper adMapper = session.getMapper(IPlanAirADMapper.class); + result = (List) (List) adMapper.getMaterials(problematic, opt.getSearch(), opt.getBroadcastDay()); + break; + case Material: + IPlanAirMaterialMapper materialMapper = session.getMapper(IPlanAirMaterialMapper.class); + result = (List) (List) materialMapper.getMaterials(problematic, opt.getSearch(), opt.getBroadcastDay()); + break; + case Promo: + IPlanAirPromoMapper promoMapper = session.getMapper(IPlanAirPromoMapper.class); + result = (List) (List) promoMapper.getMaterials(problematic, opt.getSearch(), opt.getBroadcastDay()); + break; } return result; } + @Override + protected void registerMappers(Configuration configuration) { + configuration.addMapper(IPlanAirMaterialMapper.class); + configuration.addMapper(IPlanAirPromoMapper.class); + configuration.addMapper(IPlanAirADMapper.class); + } + } diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirPromo.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirPromo.java index 195f29cf..97889483 100644 --- a/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirPromo.java +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirPromo.java @@ -2,6 +2,8 @@ package user.mediacube.metadata.planair; import java.util.Date; +import com.ibm.nosql.json.api.BasicDBObject; + import user.mediacube.metadata.interfaces.IMetadata; public class PlanAirPromo implements IMetadata { @@ -13,6 +15,19 @@ public class PlanAirPromo implements IMetadata { private int spotID;//t_SpotID private String okForAirs; //v_OkForAirs + @Override + public BasicDBObject asJSON() { + BasicDBObject result = new BasicDBObject(); + result.put("mediaID", mediaID); + result.put("title", title); + result.put("progTitle", progTitle); + result.put("episode", episode); + result.put("psStart", psStart); + result.put("spotID", spotID); + result.put("okForAirs", okForAirs); + return result; + } + public short getEpisode() { return episode; } @@ -42,6 +57,7 @@ public class PlanAirPromo implements IMetadata { return spotID; } + @Override public String getTitle() { return title; } diff --git a/server/user.mediacube.metadata/test/user/mediabube/metadata/HSMMetadataTest.java b/server/user.mediacube.metadata/test/user/mediabube/metadata/HSMMetadataTest.java index f607d6cf..7821c11e 100644 --- a/server/user.mediacube.metadata/test/user/mediabube/metadata/HSMMetadataTest.java +++ b/server/user.mediacube.metadata/test/user/mediabube/metadata/HSMMetadataTest.java @@ -7,6 +7,8 @@ import java.util.List; 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; @@ -67,7 +69,7 @@ public class HSMMetadataTest { IMetadataProvider sut = factory.getProvider(MetadataProviderType.HSM); // Exercise - List result = sut.list(null); + List result = sut.list(new BasicDBObject()); // Verify assertNotNull(result); diff --git a/server/user.mediacube.metadata/test/user/mediabube/metadata/PlanAirMetadataTest.java b/server/user.mediacube.metadata/test/user/mediabube/metadata/PlanAirMetadataTest.java index 4eb8ea4c..82711f81 100644 --- a/server/user.mediacube.metadata/test/user/mediabube/metadata/PlanAirMetadataTest.java +++ b/server/user.mediacube.metadata/test/user/mediabube/metadata/PlanAirMetadataTest.java @@ -31,6 +31,36 @@ public class PlanAirMetadataTest { 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 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 @@ -89,7 +119,7 @@ public class PlanAirMetadataTest { // Fixture PlanAirMetadataListOptions opt = new PlanAirMetadataListOptions(); opt.setType(MetadataType.Material); - opt.setSearch("105428"); + opt.setSearch("13-01734-0015-1"); test(opt); } -- 2.54.0