From: Vásáry Dániel Date: Thu, 19 Sep 2019 11:48:15 +0000 (+0000) Subject: git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube... X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=222a49960df7c8b2353fa36b7e9a991f4420e4e3;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31534 --- diff --git a/server/-configuration/debug-mediacube-mv-8888.launch b/server/-configuration/debug-mediacube-mv-8888.launch new file mode 100644 index 00000000..d4284f2b --- /dev/null +++ b/server/-configuration/debug-mediacube-mv-8888.launch @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + 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 new file mode 100644 index 00000000..edb95216 --- /dev/null +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java @@ -0,0 +1,60 @@ +package hu.user.mediacube.executors.tests; + +import java.util.Arrays; + +import org.junit.Test; + +import user.jobengine.db.Media; +import user.jobengine.server.steps.TSMExtendedRetrieveStep; + +public class SmallTests { + class Pojo extends PojoRoot { + + @Override + public String toString() { + return "pojo"; + } + } + + class PojoRoot { + } + + @Test + public void test1() throws Exception { + Object[] sut = { 1, 5, "valami", new Pojo() }; + + System.out.println(Arrays.toString(sut)); + } + + @Test + public void test2() throws Exception { + Integer i = 5; + Boolean j = Boolean.FALSE; + xxx(i, j); + } + + @Test + public void test3() throws Exception { + TSMExtendedRetrieveStep sut = new TSMExtendedRetrieveStep(); + Media mediaCubeMedia = new Media(); + String targetPath = "/mnt/PROMISE/TRANSCODER/ARCHIVE_RESTORE/TTT"; + String targetNamePattern = "ttt-ARCH-%s"; + String successRecipient = "vasary@elgekko.net"; + Integer killDateDays = 7; + String localRetrievePath = "/mnt/PROMISE/TRANSCODER/"; + String globalRetrievePath = " file://10.11.1.100/TRANSCODER"; + Boolean useNexioTarget = false; + String nexioAgency = "ARCHIVE_RESTORE"; + Integer nexioPort = 2098; + String nexioUserName = "administrator"; + String nexioPassword = "system"; + Object[] inputs = { mediaCubeMedia, targetPath, targetNamePattern, successRecipient, killDateDays, localRetrievePath, globalRetrievePath, + useNexioTarget, nexioAgency, nexioPort, nexioUserName, nexioPassword }; + // Object[] inputs = { null, null, null, null, 0, null, null, false, null, 0, null, null }; + sut.run(null, null, inputs); + } + + void xxx(int x, boolean y) { + System.out.println("call"); + } +} diff --git a/server/hu.user.mediacube.indexer/indexer-build.launch b/server/hu.user.mediacube.indexer/indexer-build.launch index 0180b88a..c079b63d 100644 --- a/server/hu.user.mediacube.indexer/indexer-build.launch +++ b/server/hu.user.mediacube.indexer/indexer-build.launch @@ -7,7 +7,7 @@ - + diff --git a/server/hu.user.mediacube.indexer/pom.xml b/server/hu.user.mediacube.indexer/pom.xml index 9b256892..ba162dfb 100644 --- a/server/hu.user.mediacube.indexer/pom.xml +++ b/server/hu.user.mediacube.indexer/pom.xml @@ -17,6 +17,7 @@ true UTF-8 1.8 + 8.2.0 1.8 1.8 @@ -41,7 +42,17 @@ org.apache.lucene lucene-core - 8.2.0 + ${lucene.version} + + + org.apache.lucene + lucene-highlighter + ${lucene.version} + + + org.apache.lucene + lucene-misc + ${lucene.version} org.apache.lucene @@ -105,6 +116,12 @@ 5.1.8.RELEASE test + + org.springframework.boot + spring-boot-starter-test + 2.1.8.RELEASE + test + mediacube-indexer diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/JsonProperties.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/JsonProperties.java index a51ff405..3f0b92fe 100644 --- a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/JsonProperties.java +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/JsonProperties.java @@ -10,20 +10,47 @@ import org.springframework.stereotype.Component; public class JsonProperties { private String message; private String polishMessage; + private String indexLocation; + private boolean dropIndex; + private boolean resetIndex; - public String getMessage() { - return message; + public String getIndexLocation() { + return indexLocation; } - public void setMessage(String message) { - this.message = message; + public String getMessage() { + return message; } public String getPolishMessage() { return polishMessage; } + public boolean isDropIndex() { + return dropIndex; + } + + public void setDropIndex(boolean dropIndex) { + this.dropIndex = dropIndex; + } + + public void setIndexLocation(String indexLocation) { + this.indexLocation = indexLocation; + } + + public void setMessage(String message) { + this.message = message; + } + public void setPolishMessage(String polishMessage) { this.polishMessage = polishMessage; } + + public boolean isResetIndex() { + return resetIndex; + } + + public void setResetIndex(boolean resetIndex) { + this.resetIndex = resetIndex; + } } diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/RESTController.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/RESTController.java index 3deded33..58fcafcc 100644 --- a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/RESTController.java +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/RESTController.java @@ -3,7 +3,9 @@ package hu.user.mediacube.indexer; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Date; +import java.util.List; +import org.apache.lucene.document.Document; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -12,11 +14,11 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import hu.user.mediacube.indexer.lucene.LuceneIndexer; + @RestController @RequestMapping("rest") public class RESTController { - private static Logger logger = LoggerFactory.getLogger(RESTController.class); - public class CustomResponse { private int age; private String name; @@ -26,43 +28,47 @@ public class RESTController { return age; } - public void setAge(int age) { - this.age = age; + public ZonedDateTime getDate() { + return date; } public String getName() { return name; } - public void setName(String name) { - this.name = name; - } - - public ZonedDateTime getDate() { - return date; + public void setAge(int age) { + this.age = age; } public void setDate(ZonedDateTime date) { this.date = date; } + public void setName(String name) { + this.name = name; + } + } -// @Configuration -// public class JacksonConfiguration { -// -// @Bean -// public ObjectMapper objectMapper() { -// ObjectMapper mapper = new ObjectMapper(); -// mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); -// mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true); -// -// return mapper; -// } -// } + private static Logger logger = LoggerFactory.getLogger(RESTController.class); + + // @Configuration + // public class JacksonConfiguration { + // + // @Bean + // public ObjectMapper objectMapper() { + // ObjectMapper mapper = new ObjectMapper(); + // mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true); + // + // return mapper; + // } + // } @Autowired GreetingService greetingService; + @Autowired + private LuceneIndexer indexer; @GetMapping(path = "/{id}", produces = "application/json") public CustomResponse getBook(@PathVariable int id) { @@ -73,4 +79,9 @@ public class RESTController { result.setDate(ZonedDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault())); return result; } + + @GetMapping(path = "/search/{queryString}/{skipRecords}/{takeRecords}", produces = "application/json") + public List search(@PathVariable String queryString, @PathVariable int skipRecords, @PathVariable int takeRecords) { + return indexer.search(queryString, skipRecords, takeRecords); + } } \ No newline at end of file diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/MediadescriptionMapper.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/MediadescriptionMapper.java index cc7fd694..4c1dd83b 100644 --- a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/MediadescriptionMapper.java +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/MediadescriptionMapper.java @@ -16,6 +16,8 @@ import org.apache.ibatis.annotations.Update; import org.apache.ibatis.annotations.UpdateProvider; import org.apache.ibatis.type.JdbcType; +//SELECT * FROM VW_INDEXER FETCH FIRST 10000 ROWS ONLY + @Mapper public interface MediadescriptionMapper { /** diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/MediadescriptionSqlProvider.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/MediadescriptionSqlProvider.java index 712a7d22..2f91f702 100644 --- a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/MediadescriptionSqlProvider.java +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/MediadescriptionSqlProvider.java @@ -183,7 +183,7 @@ public class MediadescriptionSqlProvider { sql.FROM("DB2ADMIN.MEDIADESCRIPTION"); applyWhere(sql, example, false); - sql.FETCH_FIRST_ROWS_ONLY(1); + //sql.FETCH_FIRST_ROWS_ONLY(1); if (example != null && example.getOrderByClause() != null) { sql.ORDER_BY(example.getOrderByClause()); diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/lucene/LuceneIndexer.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/lucene/LuceneIndexer.java new file mode 100644 index 00000000..d14d62ef --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/lucene/LuceneIndexer.java @@ -0,0 +1,131 @@ +package hu.user.mediacube.indexer.lucene; + +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +import org.apache.lucene.analysis.standard.StandardAnalyzer; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field.Store; +import org.apache.lucene.document.LongPoint; +import org.apache.lucene.document.SortedNumericDocValuesField; +import org.apache.lucene.document.TextField; +import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.queryparser.classic.QueryParser; +import org.apache.lucene.search.IndexSearcher; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.ScoreDoc; +import org.apache.lucene.search.Sort; +import org.apache.lucene.search.SortField.Type; +import org.apache.lucene.search.SortedNumericSortField; +import org.apache.lucene.search.TopDocs; +import org.apache.lucene.search.uhighlight.UnifiedHighlighter; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.SimpleFSDirectory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.FileSystemUtils; + +import hu.user.mediacube.indexer.JsonProperties; +import hu.user.mediacube.indexer.db.Mediadescription; + +@Component +public class LuceneIndexer { + private static Logger logger = LoggerFactory.getLogger(LuceneIndexer.class); + private static final String DESCRIPTION = "description"; + @Autowired + private JsonProperties config; + private Directory directoryIndex; + private IndexWriterConfig indexWriterConfig; + private IndexWriter indexWritter; + private StandardAnalyzer analyzer; + + public void index(Mediadescription mediadescription, boolean commit) throws IOException { + Document document = new Document(); + document.add(new SortedNumericDocValuesField("id", mediadescription.getId())); + document.add(new LongPoint("itemid", mediadescription.getItemid())); + document.add(new LongPoint("mediaid", mediadescription.getMediaid())); + document.add(new LongPoint("mediafileid", mediadescription.getMediafileid())); + document.add(new TextField(DESCRIPTION, mediadescription.getDescription(), Store.YES)); + indexWritter.addDocument(document); + if (commit) + indexWritter.commit(); + } + + public List search(String queryString, int skipRecords, int takeRecords) { + List ret = new ArrayList(); + IndexReader indexReader = null; + IndexSearcher searcher = null; + try { + indexReader = DirectoryReader.open(directoryIndex); + searcher = new IndexSearcher(indexReader); + + Query query = new QueryParser(DESCRIPTION, analyzer).parse(queryString); + + TopDocs results = searcher.search(query, skipRecords + takeRecords, new Sort(new SortedNumericSortField("id", Type.LONG, true))); + //TopDocs results = searcher.search(query, skipRecords + takeRecords); + ScoreDoc[] scoreDocs = results.scoreDocs; + UnifiedHighlighter highlighter = new UnifiedHighlighter(searcher, analyzer); + //highlighter.setFormatter(formatter); + for (int i = skipRecords; i < results.totalHits.value; i++) { + if (i > (skipRecords + takeRecords) - 1) { + break; + } + Document doc = searcher.doc(scoreDocs[i].doc); + ret.add(doc); + + String[] fragments = highlighter.highlight(DESCRIPTION, query, results); + logger.info("Item " + doc.getValues("id")[0] + " : " + fragments[0]); + } + } catch (Exception e) { + logger.error("Search", e); + } finally { + try { + if (indexReader != null) + indexReader.close(); + } catch (IOException e) { + logger.error("Close index reader", e); + } + } + return ret; + } + + @PostConstruct + public void start() throws Exception { + try { + Path path = Paths.get(config.getIndexLocation()); + if (config.isDropIndex()) + FileSystemUtils.deleteRecursively(path); + directoryIndex = new SimpleFSDirectory(path); + analyzer = new StandardAnalyzer(); + indexWriterConfig = new IndexWriterConfig(analyzer); + indexWritter = new IndexWriter(directoryIndex, indexWriterConfig); + } catch (Exception e) { + logger.error("Could not create indexer", e); + throw e; + } + logger.info("Indexer started"); + } + + @PreDestroy + public void stop() { + try { + if (indexWritter != null) + indexWritter.close(); + } catch (IOException e) { + logger.error("IndexWriter close", e); + } + logger.info("Indexer stopped"); + } + +} diff --git a/server/hu.user.mediacube.indexer/src/main/resources/application.properties b/server/hu.user.mediacube.indexer/src/main/resources/application.properties index f156d170..9b0951ed 100644 --- a/server/hu.user.mediacube.indexer/src/main/resources/application.properties +++ b/server/hu.user.mediacube.indexer/src/main/resources/application.properties @@ -1,4 +1,5 @@ -#mybatis.config-location=classpath*:mybatis.xml +spring.main.banner-mode=off +spring.output.ansi.enabled=always spring.datasource.driver-class-name=com.ibm.db2.jcc.DB2Driver spring.datasource.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; spring.datasource.username=db2admin diff --git a/server/hu.user.mediacube.indexer/src/main/resources/base.xml b/server/hu.user.mediacube.indexer/src/main/resources/base.xml new file mode 100644 index 00000000..af37d27b --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/resources/base.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + diff --git a/server/hu.user.mediacube.indexer/src/main/resources/configprops.json b/server/hu.user.mediacube.indexer/src/main/resources/configprops.json index 14204b40..ffd97a55 100644 --- a/server/hu.user.mediacube.indexer/src/main/resources/configprops.json +++ b/server/hu.user.mediacube.indexer/src/main/resources/configprops.json @@ -1,4 +1,7 @@ { "message" : "Hy", - "polishMessage" : "Czesc" + "polishMessage" : "Czesc", + "indexLocation" : "/opt/indexer/mediacube", + "dropIndex": false, + "resetIndex": false } \ No newline at end of file diff --git a/server/hu.user.mediacube.indexer/src/main/resources/console-appender.xml b/server/hu.user.mediacube.indexer/src/main/resources/console-appender.xml new file mode 100644 index 00000000..92d0da03 --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/resources/console-appender.xml @@ -0,0 +1,14 @@ + + + + + + + + ${CONSOLE_LOG_PATTERN} + + + diff --git a/server/hu.user.mediacube.indexer/src/main/resources/defaults.xml b/server/hu.user.mediacube.indexer/src/main/resources/defaults.xml new file mode 100644 index 00000000..4d761bad --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/resources/defaults.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + diff --git a/server/hu.user.mediacube.indexer/src/main/resources/file-appender.xml b/server/hu.user.mediacube.indexer/src/main/resources/file-appender.xml new file mode 100644 index 00000000..deae1a96 --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/resources/file-appender.xml @@ -0,0 +1,21 @@ + + + + + + + + ${FILE_LOG_PATTERN} + + ${LOG_FILE} + + ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz + ${LOG_FILE_MAX_SIZE:-10MB} + ${LOG_FILE_MAX_HISTORY:-0} + + + diff --git a/server/hu.user.mediacube.indexer/src/main/resources/logback.xml b/server/hu.user.mediacube.indexer/src/main/resources/logback.xml new file mode 100644 index 00000000..d08b3fad --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/resources/logback.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/server/hu.user.mediacube.indexer/src/main/resources/mybatis.xml b/server/hu.user.mediacube.indexer/src/main/resources/mybatis.xml deleted file mode 100644 index e72703b2..00000000 --- a/server/hu.user.mediacube.indexer/src/main/resources/mybatis.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/server/hu.user.mediacube.indexer/src/main/resources/templates/hello.html b/server/hu.user.mediacube.indexer/src/main/resources/templates/hello.html deleted file mode 100644 index a761abf7..00000000 --- a/server/hu.user.mediacube.indexer/src/main/resources/templates/hello.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - Getting Started: Serving Web Content - - - -

- - \ No newline at end of file diff --git a/server/hu.user.mediacube.indexer/src/test/java/application.properties b/server/hu.user.mediacube.indexer/src/test/java/application.properties deleted file mode 100644 index 145e25ed..00000000 --- a/server/hu.user.mediacube.indexer/src/test/java/application.properties +++ /dev/null @@ -1 +0,0 @@ -mybatis.config-location=mapper.xml \ No newline at end of file diff --git a/server/hu.user.mediacube.indexer/src/test/java/hu/user/mediacube/indexer/TestDB2.java b/server/hu.user.mediacube.indexer/src/test/java/hu/user/mediacube/indexer/TestDB2.java index 77b3d307..a2d8f2e3 100644 --- a/server/hu.user.mediacube.indexer/src/test/java/hu/user/mediacube/indexer/TestDB2.java +++ b/server/hu.user.mediacube.indexer/src/test/java/hu/user/mediacube/indexer/TestDB2.java @@ -5,6 +5,7 @@ import static org.junit.Assert.assertNull; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @@ -12,7 +13,7 @@ import hu.user.mediacube.indexer.db.MediadescriptionMapper; @RunWith(SpringRunner.class) @ContextConfiguration(classes = IndexerApplication.class) - +@SpringBootTest public class TestDB2 { @Autowired diff --git a/server/hu.user.mediacube.indexer/src/test/java/hu/user/mediacube/indexer/TestJsonProperties.java b/server/hu.user.mediacube.indexer/src/test/java/hu/user/mediacube/indexer/TestJsonProperties.java index 2e4fb3f8..f769443a 100644 --- a/server/hu.user.mediacube.indexer/src/test/java/hu/user/mediacube/indexer/TestJsonProperties.java +++ b/server/hu.user.mediacube.indexer/src/test/java/hu/user/mediacube/indexer/TestJsonProperties.java @@ -5,15 +5,14 @@ import static org.junit.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; -import hu.user.mediacube.indexer.IndexerApplication; -import hu.user.mediacube.indexer.JsonProperties; - @RunWith(SpringRunner.class) @ContextConfiguration(classes = IndexerApplication.class) - +//https://stackoverflow.com/questions/29669393/override-default-spring-boot-application-properties-settings-in-junit-test +@SpringBootTest public class TestJsonProperties { @Autowired diff --git a/server/hu.user.mediacube.indexer/src/test/java/mapper.xml b/server/hu.user.mediacube.indexer/src/test/java/mapper.xml deleted file mode 100644 index aa2bee78..00000000 --- a/server/hu.user.mediacube.indexer/src/test/java/mapper.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/server/user.jobengine.executors/config/config.xml b/server/user.jobengine.executors/config/config.xml index 8e3d1772..06ad6316 100644 --- a/server/user.jobengine.executors/config/config.xml +++ b/server/user.jobengine.executors/config/config.xml @@ -22,6 +22,7 @@ + diff --git a/server/user.jobengine.executors/jobtemplates/retrieve-ondemand.xml b/server/user.jobengine.executors/jobtemplates/retrieve-ondemand.xml index 20d3b0a1..ede6854a 100644 --- a/server/user.jobengine.executors/jobtemplates/retrieve-ondemand.xml +++ b/server/user.jobengine.executors/jobtemplates/retrieve-ondemand.xml @@ -24,7 +24,6 @@ - @@ -76,7 +75,7 @@ - + diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/BatchRetrieveForkStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/BatchRetrieveForkStep.java index 547d019b..839d6495 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/BatchRetrieveForkStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/BatchRetrieveForkStep.java @@ -8,7 +8,7 @@ import org.apache.logging.log4j.Logger; import user.commons.MediaCubeFinishMarker; import user.commons.MediaCubeMarker; -import user.jobengine.db.Media; +import user.jobengine.db.ArchivedMedia; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; import user.jobengine.server.scheduler.ScheduledJob; @@ -17,13 +17,13 @@ public class BatchRetrieveForkStep extends JobStep { private static final String TARGET_PATH_TYPE = "targetPathType"; private static final Logger logger = LogManager.getLogger(); private static final String CHILD_TEMPLATE = "retrieve-ondemand.xml"; - private static final String MEDIACUBEMEDIA = "mediaCubeMedia"; + private static final String ARCHIVEDMEDIA = "archivedMedia"; private static final String RECIPIENT = "successRecipient"; private static final String HOUSEID = "houseId"; private MediaCubeMarker marker; @StepEntry - public Object[] execute(List basket, String houseId, String recipient, String targetPathType, IJobEngine jobEngine, IJobRuntime jobRuntime) + public Object[] execute(List basket, String houseId, String recipient, String targetPathType, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { marker = (MediaCubeMarker) jobRuntime.getMarker(); @@ -43,9 +43,9 @@ public class BatchRetrieveForkStep extends JobStep { logger.info(mailMarker, "A visszatöltések elindultak az alábbi állományokra:"); if (jobRuntime.forkPrepare()) { - for (Media mediaCubeMedia : basket) { - logger.info(mailMarker, mediaCubeMedia.getMediaFilesName()); - submit(mediaCubeMedia, recipient, houseId, targetPathType, jobEngine, jobRuntime); + for (ArchivedMedia archivedMedia : basket) { + logger.info(mailMarker, archivedMedia.getMedia().getMediaFilesName()); + submit(archivedMedia, recipient, houseId, targetPathType, jobEngine, jobRuntime); } } setProgress(50); @@ -55,12 +55,12 @@ public class BatchRetrieveForkStep extends JobStep { return null; } - public void submit(Media mediaCubeMedia, String recipient, String houseId, String targetPathType, IJobEngine jobEngine, IJobRuntime jobRuntime) + public void submit(ArchivedMedia archivedMedia, String recipient, String houseId, String targetPathType, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { try { ScheduledJob scheduledJob = jobEngine.getScheduledJob(CHILD_TEMPLATE); Map parameters = scheduledJob.getJobParameters(); - parameters.put(MEDIACUBEMEDIA, mediaCubeMedia); + parameters.put(ARCHIVEDMEDIA, archivedMedia); parameters.put(HOUSEID, houseId); parameters.put(RECIPIENT, recipient); parameters.put(TARGET_PATH_TYPE, targetPathType); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/OutputPathAndNameSelectorStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/OutputPathAndNameSelectorStep.java index 8cb0ed4e..746a325a 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/OutputPathAndNameSelectorStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/OutputPathAndNameSelectorStep.java @@ -27,38 +27,31 @@ public class OutputPathAndNameSelectorStep extends JobStep { private Marker marker; - private void check(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, - String advertisementOutputFolder, String octopusOutputFolder, String genericOutputFolder, String houseId, - String targetPathType) { + private void check(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder, + String octopusOutputFolder, String genericOutputFolder, String houseId, String targetPathType) { if (StringUtils.isBlank(localRetrievePath)) { logger.error(marker, "A folyamat 'localRetrievePath' bemeneti paramétere üres."); - throw new NullPointerException( - "System is not configured properly, 'localRetrievePath' input parameter missing."); + throw new NullPointerException("System is not configured properly, 'localRetrievePath' input parameter missing."); } if (StringUtils.isBlank(materialOutputFolder)) { logger.error(marker, "A folyamat 'materialOutputFolder' bemeneti paramétere üres."); - throw new NullPointerException( - "System is not configured properly, 'materialOutputFolder' input parameter missing."); + throw new NullPointerException("System is not configured properly, 'materialOutputFolder' input parameter missing."); } if (StringUtils.isBlank(promoOutputFolder)) { logger.error(marker, "A folyamat 'promoOutputFolder' bemeneti paramétere üres."); - throw new NullPointerException( - "System is not configured properly, 'promoOutputFolder' input parameter missing."); + throw new NullPointerException("System is not configured properly, 'promoOutputFolder' input parameter missing."); } if (StringUtils.isBlank(advertisementOutputFolder)) { logger.error(marker, "A folyamat 'advertisementOutputFolder' bemeneti paramétere üres."); - throw new NullPointerException( - "System is not configured properly, 'advertisementOutputFolder' input parameter missing."); + throw new NullPointerException("System is not configured properly, 'advertisementOutputFolder' input parameter missing."); } if (StringUtils.isBlank(octopusOutputFolder)) { logger.error(marker, "A folyamat 'octopusOutputFolder' bemeneti paramétere üres."); - throw new NullPointerException( - "System is not configured properly, 'octopusOutputFolder' input parameter missing."); + throw new NullPointerException("System is not configured properly, 'octopusOutputFolder' input parameter missing."); } if (StringUtils.isBlank(genericOutputFolder)) { logger.error(marker, "A folyamat 'genericOutputFolder' bemeneti paramétere üres."); - throw new NullPointerException( - "System is not configured properly, 'genericOutputFolder' input parameter missing."); + throw new NullPointerException("System is not configured properly, 'genericOutputFolder' input parameter missing."); } if (StringUtils.isBlank(houseId)) { logger.error(marker, "A folyamat 'houseId' bemeneti paramétere üres."); @@ -66,40 +59,40 @@ public class OutputPathAndNameSelectorStep extends JobStep { } if (StringUtils.isBlank(targetPathType)) { logger.error(marker, "A folyamat 'targetPathType' bemeneti paramétere üres."); - throw new NullPointerException( - "System is not configured properly, 'targetPathType' input parameter missing."); + throw new NullPointerException("System is not configured properly, 'targetPathType' input parameter missing."); } } @StepEntry - public Object[] execute(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, - String advertisementOutputFolder, String octopusOutputFolder, String genericOutputFolder, - String onlineOutputFolder, String houseId, String targetPathType, ArchivedMedia archivedMedia, - IJobEngine jobEngine, IJobRuntime jobRuntime) throws IOException { + public Object[] execute(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder, + String octopusOutputFolder, String genericOutputFolder, String onlineOutputFolder, String houseId, String targetPathType, + ArchivedMedia archivedMedia, IJobEngine jobEngine, IJobRuntime jobRuntime) throws IOException { marker = jobRuntime.getMarker(); - check(localRetrievePath, materialOutputFolder, promoOutputFolder, advertisementOutputFolder, - octopusOutputFolder, genericOutputFolder, houseId, targetPathType); + check(localRetrievePath, materialOutputFolder, promoOutputFolder, advertisementOutputFolder, octopusOutputFolder, genericOutputFolder, houseId, + targetPathType); Object[] result = null; switch (Integer.parseInt(targetPathType)) { case 0: - String outputFolder = getFolderById(materialOutputFolder, promoOutputFolder, advertisementOutputFolder, - octopusOutputFolder, genericOutputFolder, houseId, archivedMedia); + String outputFolder = getFolderById(materialOutputFolder, promoOutputFolder, advertisementOutputFolder, octopusOutputFolder, genericOutputFolder, + houseId, archivedMedia); result = localTargetInit(localRetrievePath, outputFolder, houseId, jobRuntime); + break; case 1: result = localTargetInit(localRetrievePath, onlineOutputFolder, houseId, jobRuntime); + break; case 2: if (archivedMedia.getTcIn() != null && archivedMedia.getTcOut() != null) result = new Object[] { genericOutputFolder, houseId, true }; else result = new Object[] { null, houseId, true }; + break; } return result; } - private String getFolderById(String materialOutputFolder, String promoOutputFolder, - String advertisementOutputFolder, String octopusOutputFolder, String genericOutputFolder, String houseId, - ArchivedMedia archivedMedia) { + private String getFolderById(String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder, String octopusOutputFolder, + String genericOutputFolder, String houseId, ArchivedMedia archivedMedia) { String id = houseId.toUpperCase(); MetadataType mdType = MetadataTypeDetector.GuessMetadataType(id); String result = null; @@ -142,17 +135,14 @@ public class OutputPathAndNameSelectorStep extends JobStep { return result[0]; } - private Object[] localTargetInit(String localRetrievePath, String outputFolder, String houseId, - IJobRuntime jobRuntime) throws IOException { + private Object[] localTargetInit(String localRetrievePath, String outputFolder, String houseId, IJobRuntime jobRuntime) throws IOException { String id = houseId.toUpperCase(); String targetPath = getPossiblePath(id, Paths.get(localRetrievePath, outputFolder, id)).toString(); String targetNamePattern = houseId + TARGETNAMEPATTERN; try { EscortFiles.ensureUNCFolder(Paths.get(targetPath)); } catch (Exception e) { - logger.error(jobRuntime.getMarker(), - "A cél mappa '{}' nem létezik és nem hozható létre. A rendszer hibaüzenete: {}", targetPath, - e.getMessage()); + logger.error(jobRuntime.getMarker(), "A cél mappa '{}' nem létezik és nem hozható létre. A rendszer hibaüzenete: {}", targetPath, e.getMessage()); throw e; } return new Object[] { targetPath, targetNamePattern, false }; diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMExtendedRetrieveStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMExtendedRetrieveStep.java index 4b210e92..0074883c 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMExtendedRetrieveStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMExtendedRetrieveStep.java @@ -2,8 +2,8 @@ package user.jobengine.server.steps; import user.commons.StoreUri; import user.commons.remotestore.RemoteStoreProtocol; +import user.jobengine.db.ArchivedMedia; import user.jobengine.db.IItemManager; -import user.jobengine.db.Media; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; @@ -15,8 +15,7 @@ public class TSMExtendedRetrieveStep extends TSMRestoreStep { private String nexioAgency; @Override - protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) - throws Exception { + protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) throws Exception { if (useNexioTarget) { EscortFiles.setNEXIOKillDate(killDateDays, targetFileName, nexioAgency, targetUri); } else { @@ -31,8 +30,7 @@ public class TSMExtendedRetrieveStep extends TSMRestoreStep { newTargetName = targetName.substring(0, targetName.lastIndexOf('.')); if (useNexioTarget) if (targetURI.fileExists(newTargetName + ".mxf")) - throw new Exception( - String.format("%s-The newly created file name is existed.", getClass().getSimpleName())); + throw new Exception(String.format("%s-The newly created file name is existed.", getClass().getSimpleName())); } @Override @@ -45,48 +43,43 @@ public class TSMExtendedRetrieveStep extends TSMRestoreStep { protected StoreUri createTargetUri(IItemManager manager, String targetPath) throws NullPointerException { StoreUri result = null; if (useNexioTarget) { + nexioHost = System.getProperty("nexio.host"); + if (nexioHost == null) { + throw new NullPointerException("Missing system property on 'nexio.host' name"); + } result = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost); result.setPortNumber(nexioPort); result.setUserName(nexioUserName); result.setPassword(nexioPassword); - } else result = super.createTargetUri(manager, targetPath); return result; } @StepEntry - public Object[] execute(Media mediaCubeMedia, String targetPath, String targetNamePattern, String successRecipient, - int killDateDays, String localRetrievePath, String globalRetrievePath, boolean useNexioTarget, - String nexioAgency, Integer nexioPort, String nexioUserName, String nexioPassword, IJobEngine jobEngine, - IJobRuntime jobRuntime) throws Exception { + public Object[] execute(ArchivedMedia archivedMedia, String targetPath, String targetNamePattern, String successRecipient, int killDateDays, + String localRetrievePath, String globalRetrievePath, boolean useNexioTarget, String nexioAgency, int nexioPort, String nexioUserName, + String nexioPassword, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { this.useNexioTarget = useNexioTarget; this.nexioAgency = nexioAgency; this.nexioPort = nexioPort; this.nexioUserName = nexioUserName; this.nexioPassword = nexioPassword; - nexioHost = System.getProperty("nexio.host"); - - if (nexioHost == null) { - throw new NullPointerException("Missing system property on 'nexio.host' name"); - } if (nexioPort == 0) { throw new NullPointerException("System is not configured properly, 'nexioPort' input parameter missing."); } if (nexioUserName == null) { - throw new NullPointerException( - "System is not configured properly, 'nexioUserName' input parameter missing."); + throw new NullPointerException("System is not configured properly, 'nexioUserName' input parameter missing."); } if (nexioPassword == null) { - throw new NullPointerException( - "System is not configured properly, 'nexioPassword' input parameter missing."); + throw new NullPointerException("System is not configured properly, 'nexioPassword' input parameter missing."); } if (nexioAgency == null) { throw new NullPointerException("System is not configured properly, 'nexioAgency' input parameter missing."); } - return super.execute(mediaCubeMedia, targetPath, targetNamePattern, successRecipient, killDateDays, - localRetrievePath, globalRetrievePath, jobEngine, jobRuntime); + return super.execute(archivedMedia.getMedia(), targetPath, targetNamePattern, successRecipient, killDateDays, localRetrievePath, globalRetrievePath, + jobEngine, jobRuntime); } } diff --git a/server/user.jobengine.osgi.commons/src/user/commons/Job.java b/server/user.jobengine.osgi.commons/src/user/commons/Job.java index f5973b24..87eeb59b 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/Job.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/Job.java @@ -177,6 +177,6 @@ public class Job extends Syncable implements IJob, Comparable { @Override public String toString() { - return String.format("## %d - %s - %s ##", getId(), getName(), status); + return String.format("## %d / %s / %s [%s] ##", getId(), getName(), getTemplate(), status); } } diff --git a/server/user.jobengine.osgi.db/migrations/20190909125326_init.sql b/server/user.jobengine.osgi.db/migrations/20190909125326_init.sql new file mode 100644 index 00000000..49b8925a --- /dev/null +++ b/server/user.jobengine.osgi.db/migrations/20190909125326_init.sql @@ -0,0 +1,52 @@ +-- +-- Copyright 2010-2016 the original author or authors. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- + +-- // Initial data. +-- Migration SQL that makes the change goes here. +INSERT INTO ITEMTYPE(NAME,DESCRIPTION,ISSTATIC) +VALUES +('Default','Statikus mezők leírója','Y'), +('Generic','Generic','N'), +('Visszarögzített','Visszarögzített','N'), +('Műsor','Műsor','N'), +('Reklám','Reklám','N'), +('Promo','Promo','N'), +('Hír nyers','Hír nyers','N'), +('Műsor nyers','Műsor nyers','N'), +('Hír bejátszó','Hír bejátszó','N') +@ + +INSERT INTO STORE(NAME,ISSYSTEM,ISLOWRES) VALUES +('TSM','Y','N'), +('Low-res','Y','Y') +@ + +INSERT INTO STOREURI(STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER) VALUES +((SELECT ID FROM STORE WHERE NAME='TSM'),'TSM',null,'MEDIACUBE','N','Y','Y','mediacube','password',null,null), +((SELECT ID FROM STORE WHERE NAME='Low-res'),'HTTP',null,'10.11.1.90:90','Y','Y','N',null,null,null,90), +((SELECT ID FROM STORE WHERE NAME='Low-res'),'LOCAL',null,'/mediacube/data/lowres','N','Y','Y',null,null,null,null) +@ + +-- //@UNDO +-- SQL to undo the change goes here. +DELETE FROM ITEMTYPE WHERE NAME IN ('Generic','Visszarögzített','Műsor','Reklám','Promo','Hír nyers','Műsor nyers','Hír bejátszó') +@ + +DELETE FROM STOREURI WHERE STOREID IN (SELECT ID FROM STORE WHERE NAME='Low-res' OR NAME='TSM') +@ + +DELETE FROM STORE WHERE NAME IN ('Low-res', 'TSM') +@ diff --git a/server/user.jobengine.osgi.db/migrations/20190915120000_metadata.sql b/server/user.jobengine.osgi.db/migrations/20190915120000_metadata.sql new file mode 100644 index 00000000..4a772402 --- /dev/null +++ b/server/user.jobengine.osgi.db/migrations/20190915120000_metadata.sql @@ -0,0 +1,77 @@ +-- +-- Copyright 2010-2016 the original author or authors. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- + +-- // Metadata. +-- Migration SQL that makes the change goes here. +INSERT INTO METADATATYPE(NAME,DATATYPE,LENGTH,BASETYPE,JAVATYPE) VALUES +('string255','VARCHAR',255,'VARCHAR','java.lang.String'), +('string80','VARCHAR',80,'VARCHAR','java.lang.String'), +('string40','VARCHAR',40,'VARCHAR','java.lang.String'), +('boolean1','VARCHAR',1,'BOOL','java.lang.Boolean'), +('biginteger','BIGINT',0,'BIGINT','java.lang.Long'), +('datetime1','TIMESTAMP',0,'DATETIME','java.sql.Timestamp') +@ + +INSERT INTO METADATAELEMENT(METADATATYPEID,NAME,DESCRIPTION) VALUES +((SELECT ID FROM METADATATYPE WHERE NAME='boolean1'),'Mappa','Mappa'), +((SELECT ID FROM METADATATYPE WHERE NAME='biginteger'),'Anyag ID','Anyag azonosító'), +((SELECT ID FROM METADATATYPE WHERE NAME='string80'),'Anyag cím','Anyag cím'), +((SELECT ID FROM METADATATYPE WHERE NAME='string255'),'Anyag leírás','Anyag leírás'), +((SELECT ID FROM METADATATYPE WHERE NAME='datetime1'),'Anyag létrehozva','Anyag létrehozás ideje'), +((SELECT ID FROM METADATATYPE WHERE NAME='string40'),'Anyag house ID','Anyag belső azonosító'), +((SELECT ID FROM METADATATYPE WHERE NAME='biginteger'),'Verzió ID','Verzió azonosító'), +((SELECT ID FROM METADATATYPE WHERE NAME='biginteger'),'Verzió anyag ID','Verzió anyag azonosító'), +((SELECT ID FROM METADATATYPE WHERE NAME='string80'),'Verzió cím','Verzió cím'), +((SELECT ID FROM METADATATYPE WHERE NAME='string255'),'Verzió leírás','Verzió leírás'), +((SELECT ID FROM METADATATYPE WHERE NAME='datetime1'),'Verzió létrehozva','Verzió létrehozás ideje'), +((SELECT ID FROM METADATATYPE WHERE NAME='string40'),'Verzió house ID','Verzió belső azonosító'), +((SELECT ID FROM METADATATYPE WHERE NAME='biginteger'),'Verzió hossz','Verzió hossz'), +((SELECT ID FROM METADATATYPE WHERE NAME='datetime1'),'Verzió archiválva','Verzió archiválás ideje'), +((SELECT ID FROM METADATATYPE WHERE NAME='biginteger'),'Szülő mappa','Szülő mappa') +@ + +INSERT INTO METADATA(ITEMTYPEID,METADATAELEMENTID,ISDBINDEX,ISDBUNIQUE,ISDBNULLABLE,ISLISTABLE,ISEDITABLE,ISGENERATED,ISSEARCHABLE,GUITYPE,LISTTYPE,STATICTABLE,POJOFIELD,SQLFIELD) VALUES +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Mappa') ,'Y','N','N','Y','Y','Y','Y','CHECKBOX','FOLDERICON','ITEM','isFolder','ISFOLDER'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Anyag ID') ,'N','Y','N','Y','Y','Y','Y','WHOLENUMBER','LABEL','ITEM','id','ID'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Anyag cím') ,'Y','N','N','Y','Y','N','Y','TEXTBOX','LABEL','ITEM','title','TITLE'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Anyag leírás') ,'Y','N','N','Y','Y','N','Y','MULTILINETEXTBOX','WRAPPEDLABEL','ITEM','description','DESCRIPTION'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Anyag létrehozva') ,'Y','N','N','Y','Y','Y','Y','DATETIMEPICKER','LABEL','ITEM','created','CREATED'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Anyag house ID') ,'Y','N','N','Y','Y','N','Y','TEXTBOX','LABEL','ITEM','houseId','HOUSEID'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Verzió ID') ,'N','Y','N','Y','Y','N','Y','WHOLENUMBER','LABEL','MEDIA','id','ID'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Verzió anyag ID') ,'Y','N','N','Y','Y','N','N','LABEL','LABEL','MEDIA','itemId','ITEMID'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Verzió cím') ,'Y','N','N','Y','Y','N','Y','TEXTBOX','LABEL','MEDIA','title','TITLE'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Verzió leírás') ,'Y','N','N','Y','Y','N','Y','MULTILINETEXTBOX','WRAPPEDLABEL','MEDIA','description','DESCRIPTION'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Verzió létrehozva') ,'Y','N','N','Y','Y','Y','Y','DATETIMEPICKER','LABEL','MEDIA','created','CREATED'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Verzió house ID') ,'Y','N','N','Y','Y','N','Y','TEXTBOX','LABEL','MEDIA','houseId','HOUSEID'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Verzió hossz') ,'Y','N','N','Y','Y','N','N','TIMECODE','TIMECODE','MEDIA','length','LENGTH'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Verzió archiválva') ,'Y','N','Y','Y','N','N','Y','LABEL','LABEL','MEDIA','archived','ARCHIVED'), +((SELECT ID FROM ITEMTYPE WHERE NAME='Default'),(SELECT ID FROM METADATAELEMENT WHERE NAME='Szülő mappa') ,'Y','N','N','Y','Y','N','N','LABEL','LABEL','FOLDER','parentId','PARENTID') +@ + +-- //@UNDO +-- SQL to undo the change goes here. +DELETE FROM METADATA WHERE METADATAELEMENTID IN +(SELECT id FROM METADATAELEMENT WHERE NAME IN + ('Mappa','Anyag ID','Anyag cím','Anyag leírás','Anyag létrehozva','Anyag house ID','Verzió ID','Verzió anyag ID', + 'Verzió cím','Verzió leírás','Verzió létrehozva','Verzió house ID','Verzió hossz','Verzió archiválva','Szülő mappa') +) +@ +DELETE FROM METADATAELEMENT WHERE NAME IN +('Mappa','Anyag ID','Anyag cím','Anyag leírás','Anyag létrehozva','Anyag house ID','Verzió ID','Verzió anyag ID', +'Verzió cím','Verzió leírás','Verzió létrehozva','Verzió house ID','Verzió hossz','Verzió archiválva','Szülő mappa') +@ +DELETE FROM METADATATYPE WHERE NAME IN ('string255','string80','string40','boolean1','biginteger','datetime1') +@ diff --git a/server/user.jobengine.osgi.db/migrations/20190916120000_views.sql b/server/user.jobengine.osgi.db/migrations/20190916120000_views.sql new file mode 100644 index 00000000..5f57776d --- /dev/null +++ b/server/user.jobengine.osgi.db/migrations/20190916120000_views.sql @@ -0,0 +1,30 @@ +-- +-- Copyright 2010-2016 the original author or authors. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- + +-- // General views. +-- Migration SQL that makes the change goes here. +CREATE VIEW VW_MEDIAFILES AS +SELECT + mediaid, + count(*) AS mediafilecount +FROM mediafile +GROUP BY (mediaid) +@ + +-- //@UNDO +-- SQL to undo the change goes here. +DROP VIEW VW_MEDIAFILES +@ diff --git a/server/user.jobengine.osgi.db/migrations/20190916130000_ft.sql b/server/user.jobengine.osgi.db/migrations/20190916130000_ft.sql new file mode 100644 index 00000000..f8a5b1fb --- /dev/null +++ b/server/user.jobengine.osgi.db/migrations/20190916130000_ft.sql @@ -0,0 +1,213 @@ +-- +-- Copyright 2010-2016 the original author or authors. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- + +-- // Indexer view. +-- Migration SQL that makes the change goes here. +CREATE OR REPLACE VIEW VW_ITEMS AS +SELECT + i.id AS itemid, + i.created AS itemcreated, + i.houseid AS itemhouseid, + i.title AS itemtitle, + m.id AS mediaid, + m.created AS mediacreated, + m.archived, + m.length, + it.name AS mediatype, + m.houseid AS mediahouseid, + m.title AS mediatitle, + mf.id AS mediafileid, + mf.houseid AS mediafilehouseid +FROM MEDIAFILE mf +LEFT OUTER JOIN MEDIA m ON (m.id = mf.mediaid) +LEFT OUTER JOIN ITEM i ON (i.id = m.itemid) +LEFT OUTER JOIN ITEMTYPE it ON (it.id = m.itemtypeid) +WHERE mf.storeid = (SELECT id FROM STORE WHERE name='TSM') +@ + +CREATE OR REPLACE VIEW VW_ITEMS_DESCRIPTION AS +SELECT + i.id AS itemid, + i.created AS itemcreated, + i.houseid AS itemhouseid, + i.title AS itemtitle, + i.description AS itemdescription, + m.id AS mediaid, + m.created AS mediacreated, + m.archived, + m.length, + it.name AS mediatype, + m.houseid AS mediahouseid, + m.title AS mediatitle, + m.description AS mediadescription, + mf.id AS mediafileid, + mf.houseid AS mediafilehouseid +FROM MEDIAFILE mf +LEFT OUTER JOIN MEDIA m ON (m.id = mf.mediaid) +LEFT OUTER JOIN ITEM i ON (i.id = m.itemid) +LEFT OUTER JOIN ITEMTYPE it ON (it.id = m.itemtypeid) +WHERE mf.storeid = (SELECT id FROM STORE WHERE name='TSM') +@ + +CREATE OR REPLACE FUNCTION DEFDATE(TS TIMESTAMP) + RETURNS VARCHAR(10) + RETURN +WITH tmp (dd,mm,yyyy,hh,mi,ss,nnnnnn) AS +( + SELECT + SUBSTR( DIGITS (DAY(TS)),9), + SUBSTR( DIGITS (MONTH(TS)),9) , + RTRIM(CHAR(YEAR(TS))) , + SUBSTR( DIGITS (HOUR(TS)),9), + SUBSTR( DIGITS (MINUTE(TS)),9), + SUBSTR( DIGITS (SECOND(TS)),9), + RTRIM(CHAR(MICROSECOND(TS))) + FROM SYSIBM.SYSDUMMY1 +) +SELECT yyyy || mm || dd FROM tmp +@ + + +CREATE OR REPLACE FUNCTION HUNDATE(TS TIMESTAMP) + RETURNS VARCHAR(10) + RETURN +WITH tmp (dd,mm,yyyy,hh,mi,ss,nnnnnn) AS +( + SELECT + SUBSTR( DIGITS (DAY(TS)),9), + SUBSTR( DIGITS (MONTH(TS)),9) , + RTRIM(CHAR(YEAR(TS))) , + SUBSTR( DIGITS (HOUR(TS)),9), + SUBSTR( DIGITS (MINUTE(TS)),9), + SUBSTR( DIGITS (SECOND(TS)),9), + RTRIM(CHAR(MICROSECOND(TS))) + FROM SYSIBM.SYSDUMMY1 +) +SELECT yyyy || '.' || mm || '.' || dd FROM tmp +@ + +CREATE OR REPLACE FUNCTION HIGHLIGHT(content CLOB(400000), starttag VARCHAR(20), endtag VARCHAR(20), pattern VARCHAR(1000)) + RETURNS VARCHAR(32000) + LANGUAGE SQL + NO EXTERNAL ACTION + READS SQL DATA + DETERMINISTIC +BEGIN + DECLARE RESULT VARCHAR(32000) DEFAULT ''; + DECLARE CHUNKSIZE INT DEFAULT 10000; + DECLARE CHUNK VARCHAR(10000); + DECLARE CHUNKSTART INT DEFAULT 1; + DECLARE HITSTART INT DEFAULT 1; + WHILE LENGTH(RESULT) = 0 AND CHUNKSTART < LENGTH(content) DO + SET CHUNK = DBMS_LOB.SUBSTR(content, CHUNKSIZE, CHUNKSTART); + SET HITSTART = REGEXP_INSTR(CHUNK, pattern, 1, 1, 0, 'i'); + IF HITSTART > 0 THEN + IF CHUNKSTART + HITSTART > 100 THEN + SET CHUNK = DBMS_LOB.SUBSTR(content, 200, CHUNKSTART + HITSTART - 100); + ELSE + SET CHUNK = DBMS_LOB.SUBSTR(content, 200, CHUNKSTART); + END IF; + SET CHUNK = REPLACE(CHUNK, '<', ''); + SET CHUNK = REPLACE(CHUNK, '>', ''); + SET RESULT = '...' || REGEXP_REPLACE(CHUNK, pattern, starttag||'$0'||endtag,1,0,'i') || '...'; + END IF; + SET CHUNKSTART = CHUNKSTART + CHUNKSIZE; + END WHILE; + RETURN RESULT; +END +@ + +CREATE OR REPLACE FUNCTION FULLDESC(IN initemid BIGINT, IN inmediaid BIGINT, IN inmediafileid BIGINT) + RETURNS CLOB(400000) + RETURN +SELECT + COALESCE(hundate(archived), '') || ' ' || + COALESCE(defdate(archived), '') || ' ' || + COALESCE(itemhouseid, '') || ' ' || + COALESCE(itemtitle, '') || ' ' || + COALESCE(itemdescription,'') || ' ' || + COALESCE(mediahouseid, '') || ' ' || + COALESCE(mediatitle, '') || ' ' || + COALESCE(mediadescription, '') || ' ' || + COALESCE(mediafilehouseid, '') +FROM VW_ITEMS_DESCRIPTION +WHERE itemid = initemid AND mediaid = inmediaid AND mediafileid = inmediafileid +@ + +CREATE OR REPLACE TRIGGER TRG_MEDIAFILE_AFTER_INSERT AFTER INSERT ON MEDIAFILE + REFERENCING NEW AS n + FOR EACH ROW + WHEN (n.storeid = (SELECT id FROM STORE WHERE name='TSM')) +BEGIN ATOMIC + INSERT INTO mediadescription (itemid, mediaid, mediafileid, description) + SELECT + itemid, + mediaid, + mediafileid, + fulldesc(itemid, mediaid, mediafileid) + FROM VW_ITEMS + WHERE mediafileid = n.id; +END +@ + +CREATE OR REPLACE TRIGGER TRG_MEDIAFILE_AFTER_DELETE AFTER DELETE ON MEDIAFILE + REFERENCING OLD AS o + FOR EACH ROW + WHEN (o.storeid = (SELECT id FROM STORE WHERE name='TSM')) +BEGIN ATOMIC + DELETE FROM MEDIADESCRIPTION WHERE mediafileid = o.id; +END +@ + +CREATE OR REPLACE TRIGGER TRG_MEDIA_AFTER_UPDATE AFTER UPDATE ON MEDIA + REFERENCING NEW AS n + FOR EACH ROW +BEGIN ATOMIC + UPDATE MEDIADESCRIPTION SET description = FULLDESC(itemid, mediaid, mediafileid) WHERE mediaid = n.id; +END +@ + +CREATE OR REPLACE TRIGGER TRG_ITEM_AFTER_UPDATE AFTER UPDATE ON ITEM + REFERENCING NEW AS n + FOR EACH ROW +BEGIN ATOMIC + UPDATE MEDIADESCRIPTION SET description = FULLDESC(itemid, mediaid, mediafileid) WHERE itemid = n.id; +END +@ + +-- //@UNDO +-- SQL to undo the change goes here. +DROP TRIGGER TRG_ITEM_AFTER_UPDATE +@ +DROP TRIGGER TRG_MEDIA_AFTER_UPDATE +@ +DROP TRIGGER TRG_MEDIAFILE_AFTER_DELETE +@ +DROP TRIGGER TRG_MEDIAFILE_AFTER_INSERT +@ +DROP VIEW VW_ITEMS_DESCRIPTION +@ +DROP VIEW VW_ITEMS +@ +DROP FUNCTION FULLDESC +@ +DROP FUNCTION HIGHLIGHT +@ +DROP FUNCTION HUNDATE +@ +DROP FUNCTION DEFDATE +@ + diff --git a/server/user.jobengine.osgi.db/migrations/20190917120000_indexer_view.sql b/server/user.jobengine.osgi.db/migrations/20190917120000_indexer_view.sql new file mode 100644 index 00000000..66fe6fd1 --- /dev/null +++ b/server/user.jobengine.osgi.db/migrations/20190917120000_indexer_view.sql @@ -0,0 +1,44 @@ +-- +-- Copyright 2010-2016 the original author or authors. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- + +-- // Indexer view. +-- Migration SQL that makes the change goes here. + +CREATE OR REPLACE VIEW VW_INDEXER AS +SELECT + i.id AS itemid, + i.title AS itemtitle, + m.id AS mediaid, + m.title AS mediatitle, + m.houseid AS mediahouseid, + m.archived, + m.length, + m.itemtypeid AS mediaitemtypeid, + it.name AS mediaitemtypename, + mf.id AS mediafileid, + mf.houseid AS mediafilehouseid, + vw_mf.mediafilecount +FROM ITEM i, MEDIA m, MEDIAFILE mf, VW_MEDIAFILES vw_mf, ITEMTYPE it WHERE + m.id = mf.mediaid AND + i.id = m.itemid AND + it.id = m.itemtypeid AND + vw_mf.mediaid = m.id AND + mf.storeid = (SELECT id FROM STORE WHERE name='TSM') +@ +-- //@UNDO +-- SQL to undo the change goes here. +DROP VIEW VW_INDEXER +@ diff --git a/server/user.jobengine.osgi.db/sql/4-CreateFT.sql b/server/user.jobengine.osgi.db/sql/4-CreateFT.sql new file mode 100644 index 00000000..43c20f63 --- /dev/null +++ b/server/user.jobengine.osgi.db/sql/4-CreateFT.sql @@ -0,0 +1,178 @@ +CREATE OR REPLACE FUNCTION "DB2ADMIN"."DEFDATE" (TS timestamp) +returns varchar(10) +return +with tmp (dd,mm,yyyy,hh,mi,ss,nnnnnn) as +( + select + substr( digits (day(TS)),9), + substr( digits (month(TS)),9) , + rtrim(char(year(TS))) , + substr( digits (hour(TS)),9), + substr( digits (minute(TS)),9), + substr( digits (second(TS)),9), + rtrim(char(microsecond(TS))) + from sysibm.sysdummy1 + ) +select yyyy || mm || dd from tmp +@ + + +CREATE OR REPLACE FUNCTION "DB2ADMIN"."HUNDATE" (TS timestamp) +returns varchar(10) +return +with tmp (dd,mm,yyyy,hh,mi,ss,nnnnnn) as +( + select + substr( digits (day(TS)),9), + substr( digits (month(TS)),9) , + rtrim(char(year(TS))) , + substr( digits (hour(TS)),9), + substr( digits (minute(TS)),9), + substr( digits (second(TS)),9), + rtrim(char(microsecond(TS))) + from sysibm.sysdummy1 + ) +select yyyy || '.' || mm || '.' || dd from tmp +@ + +CREATE OR REPLACE FUNCTION "DB2ADMIN"."HIGHLIGHT" (content CLOB(400000), starttag VARCHAR(20), endtag VARCHAR(20), pattern VARCHAR(1000)) + RETURNS VARCHAR(32000) + LANGUAGE SQL + NO EXTERNAL ACTION + READS SQL DATA + DETERMINISTIC +BEGIN + DECLARE RESULT VARCHAR(32000) DEFAULT ''; + DECLARE CHUNKSIZE INT DEFAULT 10000; + DECLARE CHUNK VARCHAR(10000); + DECLARE CHUNKSTART INT DEFAULT 1; + DECLARE HITSTART INT DEFAULT 1; + WHILE LENGTH(RESULT) = 0 AND CHUNKSTART < LENGTH(content) DO + SET CHUNK = DBMS_LOB.SUBSTR(content, CHUNKSIZE, CHUNKSTART); + SET HITSTART = REGEXP_INSTR(CHUNK, pattern, 1, 1, 0, 'i'); + IF HITSTART > 0 THEN + IF CHUNKSTART + HITSTART > 100 THEN + SET CHUNK = DBMS_LOB.SUBSTR(content, 200, CHUNKSTART + HITSTART - 100); + ELSE + SET CHUNK = DBMS_LOB.SUBSTR(content, 200, CHUNKSTART); + END IF; + SET CHUNK = REPLACE(CHUNK, '<', ''); + SET CHUNK = REPLACE(CHUNK, '>', ''); + SET RESULT = '...' || REGEXP_REPLACE(CHUNK, pattern, starttag||'$0'||endtag,1,0,'i') || '...'; + END IF; + SET CHUNKSTART = CHUNKSTART + CHUNKSIZE; + END WHILE; + RETURN RESULT; +END +@ + +CREATE OR REPLACE VIEW "DB2ADMIN"."VW_ITEMS" as +select +i.id as itemid, +i.created as itemcreated, +i.houseid as itemhouseid, +i.title as itemtitle, +m.id as mediaid, +m.created as mediacreated, +m.archived, +m.length, +it.name as mediatype, +m.houseid as mediahouseid, +m.title as mediatitle, +mf.id as mediafileid, +mf.houseid as mediafilehouseid +from mediafile mf +left outer join media m on (m.id = mf.mediaid) +left outer join item i on (i.id = m.itemid) +left outer join itemtype it on (it.id = m.itemtypeid) +where mf.storeid = 1 +@ + +CREATE OR REPLACE VIEW "DB2ADMIN"."VW_ITEMS_DESCRIPTION" as +select +i.id as itemid, +i.created as itemcreated, +i.houseid as itemhouseid, +i.title as itemtitle, +i.description as itemdescription, +m.id as mediaid, +m.created as mediacreated, +m.archived, +m.length, +m.description as mediadescription, +it.name as mediatype, +m.houseid as mediahouseid, +m.title as mediatitle, +mf.id as mediafileid, +mf.houseid as mediafilehouseid +from mediafile mf +left outer join media m on (m.id = mf.mediaid) +left outer join item i on (i.id = m.itemid) +left outer join itemtype it on (it.id = m.itemtypeid) +where mf.storeid = 1 +@ + +CREATE OR REPLACE FUNCTION "DB2ADMIN"."FULLDESC" (IN initemid BIGINT, IN inmediaid BIGINT, IN inmediafileid BIGINT) +returns CLOB(400000) +return +SELECT + COALESCE(hundate(archived), '') || ' ' || + COALESCE(defdate(archived), '') || ' ' || + COALESCE(itemhouseid, '') || ' ' || + COALESCE(itemtitle, '') || ' ' || + COALESCE(itemdescription,'') || ' ' || + COALESCE(mediahouseid, '') || ' ' || + COALESCE(mediatitle, '') || ' ' || + COALESCE(mediadescription, '') || ' ' || + COALESCE(mediafilehouseid, '') +from vw_items_description WHERE itemid = initemid AND mediaid = inmediaid AND mediafileid = inmediafileid +@ + +CREATE OR REPLACE TRIGGER DB2ADMIN.TRG_MEDIAFILE_AFTER_INSERT after insert +on mediafile +referencing new as n +for each row +when (n.storeid = 1) +begin atomic + insert into mediadescription (itemid, mediaid, mediafileid, description) + select + itemid, + mediaid, + mediafileid, + fulldesc(itemid, mediaid, mediafileid) + from vw_items + where mediafileid = n.id; +end +@ + +CREATE OR REPLACE TRIGGER DB2ADMIN.TRG_MEDIAFILE_AFTER_DELETE after delete +on mediafile +referencing old as o +for each row +when (o.storeid = 1) +begin atomic + delete from mediadescription where mediafileid = o.id; +end +@ + +CREATE OR REPLACE TRIGGER DB2ADMIN.TRG_MEDIA_AFTER_UPDATE after update on media +referencing new as n +for each row +begin atomic + update mediadescription SET description = fulldesc(itemid, mediaid, mediafileid) where mediaid = n.id; +end +@ + +CREATE OR REPLACE TRIGGER DB2ADMIN.TRG_ITEM_AFTER_UPDATE after update on item +referencing new as n +for each row +begin atomic + update mediadescription SET description = fulldesc(itemid, mediaid, mediafileid) where itemid = n.id; +end +@ + + +--osszes frissitese +--update mediadescription SET description = fulldesc(itemid, mediaid, mediafileid) + + diff --git a/server/user.jobengine.osgi.db/sql/4-CreateTrigger.sql b/server/user.jobengine.osgi.db/sql/4-CreateTrigger.sql deleted file mode 100644 index 409c3b4d..00000000 --- a/server/user.jobengine.osgi.db/sql/4-CreateTrigger.sql +++ /dev/null @@ -1,63 +0,0 @@ -CREATE OR REPLACE FUNCTION "DB2ADMIN"."FULLDESC" (IN initemid BIGINT, IN inmediaid BIGINT, IN inmediafileid BIGINT) -returns CLOB(400000) -return -SELECT - COALESCE(hundate(archived), '') || ' ' || - COALESCE(defdate(archived), '') || ' ' || - COALESCE(itemhouseid, '') || ' ' || - COALESCE(itemtitle, '') || ' ' || - COALESCE(itemdescription,'') || ' ' || - COALESCE(mediahouseid, '') || ' ' || - COALESCE(mediatitle, '') || ' ' || - COALESCE(mediadescription, '') || ' ' || - COALESCE(mediafilehouseid, '') -from vw_items_description WHERE itemid = initemid AND mediaid = inmediaid AND mediafileid = inmediafileid -GO - -CREATE OR REPLACE TRIGGER DB2ADMIN.TRG_MEDIAFILE_AFTER_INSERT after insert -on mediafile -referencing new as n -for each row -when (n.storeid = 1) -begin atomic - insert into mediadescription (itemid, mediaid, mediafileid, description) - select - itemid, - mediaid, - mediafileid, - fulldesc(itemid, mediaid, mediafileid) - from vw_items - where mediafileid = n.id; -end -GO - -CREATE OR REPLACE TRIGGER DB2ADMIN.TRG_MEDIAFILE_AFTER_DELETE after delete -on mediafile -referencing old as o -for each row -when (o.storeid = 1) -begin atomic - delete from mediadescription where mediafileid = o.id; -end -GO - -CREATE OR REPLACE TRIGGER DB2ADMIN.TRG_MEDIA_AFTER_UPDATE after update on media -referencing new as n -for each row -begin atomic - update mediadescription SET description = fulldesc(itemid, mediaid, mediafileid) where mediaid = n.id; -end -GO - -CREATE OR REPLACE TRIGGER DB2ADMIN.TRG_ITEM_AFTER_UPDATE after update on item -referencing new as n -for each row -begin atomic - update mediadescription SET description = fulldesc(itemid, mediaid, mediafileid) where itemid = n.id; -end -GO - ---osszes frissitese ---update mediadescription SET description = fulldesc(itemid, mediaid, mediafileid) - - diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/ArchivedMedia.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/ArchivedMedia.java index 849debed..43dc4cfe 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/ArchivedMedia.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/ArchivedMedia.java @@ -1,6 +1,9 @@ package user.jobengine.db; -public class ArchivedMedia { +import java.io.Serializable; + +public class ArchivedMedia implements Serializable { + private static final long serialVersionUID = 1L; private Item item; private Media media; private String relevant; 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 c579b22a..4c65cb21 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 @@ -93,6 +93,7 @@ public class JobStepExecutor implements IJobStepExecutor { private CountDownLatch barrier; private Class stepClass; private int maxConcurrent; + private String className; public JobStepExecutor() { } @@ -126,6 +127,7 @@ public class JobStepExecutor implements IJobStepExecutor { @Override @SuppressWarnings("unchecked") public void create(String className, int maxConcurrent) throws JobEngineException { + this.className = className; logger = LogManager.getLogger(getClass().getSimpleName() + ":" + className); logger.debug("Creating executor {}, instances {}", className, maxConcurrent); if (StringUtils.isEmpty(className)) 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 fee97cd3..ae4602f2 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 @@ -78,14 +78,29 @@ public class JobStep implements IJobStep { Object[] result = null; this.jobRuntime = jobRuntime; //jobRuntime.setDescription("Feldolgozás: " + getClass().getSimpleName()); - jobRuntime.NotifyUpdate(); - for (Method method : getClass().getDeclaredMethods()) { + + if (jobRuntime != null) + jobRuntime.NotifyUpdate(); + for (Method method : this.getClass().getDeclaredMethods()) { 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); - result = (Object[]) method.invoke(this, extendedInputs); + 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; + } break; } } diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/RetrieveBatchSelectorModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/RetrieveBatchSelectorModel.java index 8eb5e257..e634fc71 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/RetrieveBatchSelectorModel.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/RetrieveBatchSelectorModel.java @@ -77,6 +77,17 @@ public class RetrieveBatchSelectorModel extends BaseModel { wndRetrieveBatch.detach(); } + //////////TEST CODE KESOBB TOROLNI ++++++++++++++++ + private ArchivedMedia createFakeArchivedMedia(int c) { + ArchivedMedia ret = new ArchivedMedia(); + Media media = new Media(); + media.setId(c); + media.setTitle("title_" + c); + media.setMediaFilesName("mediaFilesName_" + c); + ret.setMedia(media); + return ret; + } + @Command @NotifyChange("basketItems") public void execute() { @@ -91,7 +102,8 @@ public class RetrieveBatchSelectorModel extends BaseModel { Map parameters = scheduledJob.getJobParameters(); parameters.put(HOUSEID, houseId); parameters.put(RECIPIENT, email); - parameters.put(BASKET, getMedias()); + + parameters.put(BASKET, new ArrayList(getBasketItems())); parameters.put(TARGET_PATH_TYPE, Types.valueOf(reloadTypes.getSelection().iterator().next().toString()).value); jobEngine.submit(JOBTEMPLATE, RESTORE, parameters); @@ -107,32 +119,9 @@ public class RetrieveBatchSelectorModel extends BaseModel { public List getBasketItems() { setDisabled(menuModel.getBasketItems() == null || menuModel.getBasketItems().size() == 0); - List basketItems = menuModel.getBasketItems(); - - //////////TEST CODE KESOBB TOROLNI ++++++++++++++++ - if(basketItems == null) basketItems = new ArrayList(); - if(basketItems.size() == 0){ - for(int c=0; c<20; c++){ - basketItems.add(createFakeArchivedMedia(c)); - } - } - - - return basketItems; + return menuModel.getBasketItems(); } - //////////TEST CODE KESOBB TOROLNI ++++++++++++++++ - private ArchivedMedia createFakeArchivedMedia(int c){ - ArchivedMedia ret = new ArchivedMedia(); - Media media = new Media(); - media.setId(c); - media.setTitle("title_" + c); - media.setMediaFilesName("mediaFilesName_" + c); - ret.setMedia(media); - return ret; - } - - public String getEmail() { return email; } @@ -141,14 +130,6 @@ public class RetrieveBatchSelectorModel extends BaseModel { return houseId; } - private List getMedias() { - List basket = getBasketItems(); -// List result = basket.stream().map(i -> { -// return i.getMedia(); -// }).collect(Collectors.toList()); - return basket; - } - public ListModel getReloadTypes() { return reloadTypes; }