From a4b9a945da739d8470818e1610f27d901af10527 Mon Sep 17 00:00:00 2001 From: "vasary.daniel" Date: Tue, 10 Aug 2021 07:57:38 +0000 Subject: [PATCH] git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C32298 --- .../interfaces/MetadataProviderType.java | 2 +- .../settings/application.yaml | 42 +++++++++++++++++ .../metadata/MetadataProviderFactory.java | 19 +++++++- .../metadata/hsm/HSMMetadataProvider.java | 2 +- .../planair/PlanAirMetadataProvider.java | 11 ++--- .../metadata/tsm/ITSMMaterialMapper.java | 17 +++++++ .../mediacube/metadata/tsm/TSMContent.java | 39 ++++++++++++++++ .../metadata/tsm/TSMListOptions.java | 16 +++++++ .../metadata/tsm/TSMMetadataProvider.java | 26 ++++------- .../metadata/tsm/TSMSqlProvider.java | 14 ++++++ .../test/log4j2-test.xml | 13 ++++++ .../mediabube/metadata/TSMMetadataTest.java | 46 +++++++++++++++++++ 12 files changed, 220 insertions(+), 27 deletions(-) create mode 100644 server/user.mediacube.metadata/settings/application.yaml create mode 100644 server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/ITSMMaterialMapper.java create mode 100644 server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMContent.java create mode 100644 server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMListOptions.java create mode 100644 server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMSqlProvider.java create mode 100644 server/user.mediacube.metadata/test/log4j2-test.xml create mode 100644 server/user.mediacube.metadata/test/user/mediabube/metadata/TSMMetadataTest.java diff --git a/server/user.jobengine.osgi.commons/src/user/mediacube/metadata/interfaces/MetadataProviderType.java b/server/user.jobengine.osgi.commons/src/user/mediacube/metadata/interfaces/MetadataProviderType.java index 50bc07f5..6bc1a492 100644 --- a/server/user.jobengine.osgi.commons/src/user/mediacube/metadata/interfaces/MetadataProviderType.java +++ b/server/user.jobengine.osgi.commons/src/user/mediacube/metadata/interfaces/MetadataProviderType.java @@ -1,5 +1,5 @@ package user.mediacube.metadata.interfaces; public enum MetadataProviderType { - PLANAIR, HSM + PLANAIR, HSM, TSM } diff --git a/server/user.mediacube.metadata/settings/application.yaml b/server/user.mediacube.metadata/settings/application.yaml new file mode 100644 index 00000000..29f0f569 --- /dev/null +++ b/server/user.mediacube.metadata/settings/application.yaml @@ -0,0 +1,42 @@ +datasource: + mediacube: + url: jdbc:db2://10.11.1.90:50000/mc + user: db2admin + password: password + external-indexer: false + simple-search: true + login-timeout: 3 + pool-size: 10 + mediacube-nosql: + url: jdbc:db2://10.11.1.90:50000/mc + user: db2admin + password: password + schema: test + login-timeout: 3 + hsm: + url: jdbc:db2://10.11.1.89:51500/tsmdb1 + user: tsminst1 + password: tsminst1 + tsm: + url: jdbc:db2://10.11.1.90:52500/tsmdb1 + user: tsminst1 + password: passwordpassword + planair: + url: jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis; + user: MAM + password: VDani +services: + mediacube: + proxy-root: /mediacube/data/lowres +jobs: + validate-transfers: false + copy-buffer-size: 32768 + scheduled-execution-disabled: true +tsm: + randomize-archives: true + delimiter: / + node-name: JOBENGINE + fs-name: /JOBENGINE + alternate-fs-name: /JOBENGINE + hl-name: /JOBENGINE + \ No newline at end of file diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/MetadataProviderFactory.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/MetadataProviderFactory.java index 273fa35b..fb9a34e4 100644 --- a/server/user.mediacube.metadata/src/user/mediacube/metadata/MetadataProviderFactory.java +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/MetadataProviderFactory.java @@ -7,10 +7,12 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import user.commons.configuration.IConfiguration; +import user.mediacube.metadata.hsm.HSMMetadataProvider; import user.mediacube.metadata.interfaces.IMetadataProvider; import user.mediacube.metadata.interfaces.IMetadataProviderFactory; import user.mediacube.metadata.interfaces.MetadataProviderType; import user.mediacube.metadata.planair.PlanAirMetadataProvider; +import user.mediacube.metadata.tsm.TSMMetadataProvider; public class MetadataProviderFactory implements IMetadataProviderFactory { private static Logger logger = LogManager.getLogger(); @@ -33,6 +35,7 @@ public class MetadataProviderFactory implements IMetadataProviderFactory { createProvider(MetadataProviderType.PLANAIR); createProvider(MetadataProviderType.HSM); + createProvider(MetadataProviderType.TSM); } } @@ -40,7 +43,21 @@ public class MetadataProviderFactory implements IMetadataProviderFactory { private void createProvider(MetadataProviderType type) { try { logger.info("Creating metadata provider for {}", type); - providers.put(type, new PlanAirMetadataProvider()); + + switch (type) { + case HSM: + providers.put(type, new HSMMetadataProvider()); + break; + case PLANAIR: + providers.put(type, new PlanAirMetadataProvider()); + break; + case TSM: + providers.put(type, new TSMMetadataProvider()); + break; + default: + break; + } + } catch (Exception e) { logger.error("Metadata provider not created for {}. Error: {}", type, e.getMessage()); } 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 901cdffb..a4ca431c 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 @@ -40,7 +40,7 @@ public class HSMMetadataProvider extends MyBatisMetadataProvider { if (options.containsKey("volumeName")) result.setVolumeName(options.getString("volumeName")); if (options.containsKey("fileName")) - result.setVolumeName(options.getString("fileName")); + result.setFileName(options.getString("fileName")); return result; } 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 50c42fc8..ffd1a75b 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 @@ -12,7 +12,6 @@ import com.ibm.nosql.json.api.BasicDBObject; import user.mediacube.metadata.MetadataProviderFactory; 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.PlanAirMetadataListOptions; @@ -34,11 +33,11 @@ public class PlanAirMetadataProvider extends MyBatisMetadataProvider { @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")); + PlanAirMetadataListOptions result = new PlanAirMetadataListOptions(); + // if (options.containsKey("volumeName")) + // result.setVolumeName(options.getString("volumeName")); + // if (options.containsKey("fileName")) + // result.setVolumeName(options.getString("fileName")); return result; } diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/ITSMMaterialMapper.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/ITSMMaterialMapper.java new file mode 100644 index 00000000..50d8cf48 --- /dev/null +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/ITSMMaterialMapper.java @@ -0,0 +1,17 @@ +package user.mediacube.metadata.tsm; + +import java.util.List; + +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; + +import user.mediacube.metadata.hsm.HSMSqlProvider; + +public interface ITSMMaterialMapper { + + @SelectProvider(type = HSMSqlProvider.class, method = "selectContents") + @Results(value = { @Result(property = "fileName", column = "FILE_NAME"), + @Result(property = "backupDate", column = "INSDATE") }) + public List getContents(String fileName); +} diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMContent.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMContent.java new file mode 100644 index 00000000..11fbf3e0 --- /dev/null +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMContent.java @@ -0,0 +1,39 @@ +package user.mediacube.metadata.tsm; + +import java.util.Date; + +import com.ibm.nosql.json.api.BasicDBObject; + +import user.mediacube.metadata.interfaces.IMetadata; + +public class TSMContent implements IMetadata { + private String fileName; + private Date backupDate; + + @Override + public BasicDBObject asJSON() { + BasicDBObject result = new BasicDBObject(); + result.put("fileName", fileName); + result.put("backupDate", backupDate); + return result; + } + + public String getFileName() { + return fileName; + } + + @Override + public String getTitle() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + @Override + public String getId() { + return fileName; + } + +} diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMListOptions.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMListOptions.java new file mode 100644 index 00000000..c4a17ec5 --- /dev/null +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMListOptions.java @@ -0,0 +1,16 @@ +package user.mediacube.metadata.tsm; + +import user.mediacube.metadata.interfaces.IMetadataListOptions; + +public class TSMListOptions implements IMetadataListOptions { + private String fileName; + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + +} diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMMetadataProvider.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMMetadataProvider.java index cc9bdd9d..fe71d162 100644 --- a/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMMetadataProvider.java +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMMetadataProvider.java @@ -12,16 +12,15 @@ import com.ibm.nosql.json.api.BasicDBObject; import user.mediacube.metadata.MetadataProviderFactory; import user.mediacube.metadata.MyBatisMetadataProvider; -import user.mediacube.metadata.hsm.HSMListOptions; import user.mediacube.metadata.hsm.IHSMMaterialMapper; import user.mediacube.metadata.interfaces.IMetadata; import user.mediacube.metadata.interfaces.IMetadataListOptions; public class TSMMetadataProvider extends MyBatisMetadataProvider { private static final String JDBC_DRIVER = "com.ibm.db2.jcc.DB2Driver"; - private static final String JDBC_URL = MetadataProviderFactory.getSystemConfig().value("datasource.hsm.url"); - private static final String JDBC_USER = MetadataProviderFactory.getSystemConfig().value("datasource.hsm.user"); - private static final String JDBC_PWD = MetadataProviderFactory.getSystemConfig().value("datasource.hsm.password"); + private static final String JDBC_URL = MetadataProviderFactory.getSystemConfig().value("datasource.tsm.url"); + private static final String JDBC_USER = MetadataProviderFactory.getSystemConfig().value("datasource.tsm.user"); + private static final String JDBC_PWD = MetadataProviderFactory.getSystemConfig().value("datasource.tsm.password"); public TSMMetadataProvider() throws Exception { super(); @@ -38,11 +37,9 @@ public class TSMMetadataProvider extends MyBatisMetadataProvider { @Override protected IMetadataListOptions createOptions(BasicDBObject options) { - HSMListOptions result = new HSMListOptions(); - if (options.containsKey("volumeName")) - result.setVolumeName(options.getString("volumeName")); + TSMListOptions result = new TSMListOptions(); if (options.containsKey("fileName")) - result.setVolumeName(options.getString("fileName")); + result.setFileName(options.getString("fileName")); return result; } @@ -55,18 +52,11 @@ public class TSMMetadataProvider extends MyBatisMetadataProvider { @SuppressWarnings("unchecked") @Override protected List queryList(SqlSession session, IMetadataListOptions options) { - IHSMMaterialMapper mapper = session.getMapper(IHSMMaterialMapper.class); + ITSMMaterialMapper mapper = session.getMapper(ITSMMaterialMapper.class); List result = null; - HSMListOptions listOptions = (HSMListOptions) options; - if (listOptions.getVolumeName() == null && listOptions.getFileName() == null) { - result = (List) (List) mapper.getVolumeNames(); - } else { - if (listOptions.getVolumeName() != null) - result = (List) (List) mapper.getByVolumeName(listOptions.getVolumeName()); - else if (listOptions.getFileName() != null) - result = (List) (List) mapper.getByFileName(listOptions.getFileName()); - } + TSMListOptions listOptions = (TSMListOptions) options; + result = (List) (List) mapper.getContents(listOptions.getFileName()); return result; } diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMSqlProvider.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMSqlProvider.java new file mode 100644 index 00000000..c6065fd6 --- /dev/null +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/tsm/TSMSqlProvider.java @@ -0,0 +1,14 @@ +package user.mediacube.metadata.tsm; + +import org.apache.ibatis.jdbc.SQL; + +public class TSMSqlProvider { + + public String selectContents() { + SQL sql = new SQL(); + sql.SELECT("LL_NAME", "INSDATE"); + sql.FROM("TSMDB1.BACKUP_OBJECTS"); + sql.WHERE("LL_NAME = ${fileName}"); + return sql.toString(); + } +} diff --git a/server/user.mediacube.metadata/test/log4j2-test.xml b/server/user.mediacube.metadata/test/log4j2-test.xml new file mode 100644 index 00000000..ad428dc7 --- /dev/null +++ b/server/user.mediacube.metadata/test/log4j2-test.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/user.mediacube.metadata/test/user/mediabube/metadata/TSMMetadataTest.java b/server/user.mediacube.metadata/test/user/mediabube/metadata/TSMMetadataTest.java new file mode 100644 index 00000000..12a12fa0 --- /dev/null +++ b/server/user.mediacube.metadata/test/user/mediabube/metadata/TSMMetadataTest.java @@ -0,0 +1,46 @@ +package user.mediabube.metadata; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.List; + +import org.junit.Test; + +import user.mediacube.metadata.MetadataProviderFactory; +import user.mediacube.metadata.interfaces.IMetadata; +import user.mediacube.metadata.interfaces.IMetadataProvider; +import user.mediacube.metadata.interfaces.IMetadataProviderFactory; +import user.mediacube.metadata.interfaces.MetadataProviderType; +import user.mediacube.metadata.tsm.TSMListOptions; + +public class TSMMetadataTest { + private IMetadataProviderFactory factory = new MetadataProviderFactory(); + + @Test + public void testFactoryConnection() throws Exception { + // Fixture + // Exercise + IMetadataProvider sut = factory.getProvider(MetadataProviderType.TSM); + + // Verify + assertNotNull(sut); + } + + @Test + public void testListByFileName() throws Exception { + TSMListOptions opt = new TSMListOptions(); + opt.setFileName(""); + + // Fixture + IMetadataProvider sut = factory.getProvider(MetadataProviderType.TSM); + + // Exercise + List result = sut.list(opt); + + // Verify + assertNotNull(result); + assertTrue(result.size() > 0); + System.out.println(result.get(0).getTitle()); + } +} -- 2.54.0