git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 16 Sep 2020 14:15:29 +0000 (14:15 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 16 Sep 2020 14:15:29 +0000 (14:15 +0000)
32 files changed:
server/-configuration/run-mediacube-server-hirtv.launch
server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/MediaBaseTest.java
server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/FileValidatorStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/ForkDownloadStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/ForkUploadStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO1TransferToStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO2TransferToStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOArchiveCheckerStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOMetadataPersisterStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/PeableBeachMissingMaterialCheckerStep.java
server/user.jobengine.osgi.commons/src/user/commons/remotestore/FtpDirectoryLister.java
server/user.jobengine.osgi.db/migrations/scripts/011_create_temp_and_nexio_stores.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/migrations/scripts/012_ensure_tsm_store.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/migrations/scripts/013_modify_ft_triggers.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/migrations/scripts/014_create_peablebeach_beechpool_store.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/migrations/scripts/016_modify_tsm_storeuri.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/migrations/scripts/017_add_filezize_mediafile.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/migrations/scripts/018_add_related_to_job.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/migrations/scripts/019_add_lookup_related.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/migrations/scripts/020_create_peablebeach_stores.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/migrations/scripts/021_create_filezilla_store.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/migrations/scripts/022_add_lastmodified_to_mediafile.sql [moved from server/user.jobengine.osgi.db/migrations/scripts/011_add_lastmodified_to_mediafile.sql with 100% similarity]
server/user.jobengine.osgi.db/migrations/scripts/023_create_dropitem_sp.sql [new file with mode: 0644]
server/user.jobengine.osgi.db/src/user/jobengine/db/SearchOptions.java
server/user.jobengine.osgi.db/src/user/jobengine/search/MediaFinder.java
server/user.jobengine.osgi.server/pages/joblist.zul
server/user.jobengine.osgi.server/pages/searchitems/details.zul
server/user.jobengine.osgi.server/pages/searchitems/filters.zul
server/user.jobengine.osgi.server/resources/i3-label_hu.properties
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/JobListModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/SearchModel.java

index 835b327ea165ee7c6278767cdfd737c4616b4968..462450a6569a62a0e7c107dbb8ad4435904c82da 100644 (file)
@@ -19,7 +19,7 @@
 <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>\r
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory&#13;&#10;-Dorg.eclipse.epp.logging.aeri.skipReports=true &#13;&#10;-Declipse.ignoreApp=true &#13;&#10;-Dosgi.noShutdown=true&#13;&#10;&#13;&#10;-Djobengine.jobsteps.root=&quot;${workspace_loc}/user.jobengine.executors/bin&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#13;&#10;-Djobengine.jobsteps.config=&quot;${workspace_loc}/user.jobengine.executors/config/config.xml&quot;&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;&#13;&#10;-Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.db.user=db2admin&#13;&#10;-Djobengine.db.password=password&#13;&#10;-Djobengine.loglevel=INFO&#13;&#10;-Dlog4j.configurationFile=&quot;${workspace_loc}/-configuration/log4j2.xml&quot;&#13;&#10;-Djobengine.jobsteps.alternate.root=&quot;${workspace_loc}/user.jobengine.executors/bin/&quot;&#13;&#10;-Djetty.home=&quot;${workspace_loc:}/-configuration/jetty&quot;&#13;&#10;-Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml&#13;&#10;-Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty&#13;&#10;-Djava.io.tmpdir=c:\temp\jetty&#13;&#10;-Djobengine.octopus.api.address=http://10.10.1.11/api/v1&#13;&#10;-Djobengine.octopus.api.user=mam&#13;&#10;-Djobengine.octopus.api.password=napocska&#13;&#10;-Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.nosql.db.user=db2admin&#13;&#10;-Djobengine.nosql.db.password=password&#13;&#10;-Djobengine.nosql.db.schema=test&#13;&#10;-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl&#13;&#10;-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium&#13;&#10;-Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;&#13;&#10;-Djobengine.nexio.db.user=sa&#13;&#10;-Djobengine.nexio.db.password=resolve&#13;&#10;-Dnexio.host=10.10.1.55&#13;&#10;-Djobengine.nexio.name=testnexioclips&#13;&#10;-Dnexio.useMOSGateway=true&#13;&#10;-Dnexio.disable=true&#13;&#10;-Djobengine.octopus.rundowns.name=rundowns&#13;&#10;-Djobengine.octopus.storyfolders.name=storyfolders&#13;&#10;-Djobengine.octopus.stories.name=stories&#13;&#10;-Dmediacube.auth.location=&quot;${workspace_loc}/-configuration/mediacube-auth.properties&quot;&#13;&#10;-Djobengine.mediacube.config=&quot;${workspace_loc}/-configuration/mediacube.json&quot;&#13;&#10;-Djobengine.mediacube.service.proxyroot=&quot;/opt&quot;&#13;&#10;-Djobengine.randomize.archives=false"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory&#13;&#10;-Dorg.eclipse.epp.logging.aeri.skipReports=true &#13;&#10;-Declipse.ignoreApp=true &#13;&#10;-Dosgi.noShutdown=true&#13;&#10;&#13;&#10;-Djobengine.jobsteps.root=&quot;${workspace_loc}/user.jobengine.executors/bin&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#13;&#10;-Djobengine.jobsteps.config=&quot;${workspace_loc}/user.jobengine.executors/config/config.xml&quot;&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;&#13;&#10;-Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.db.user=db2admin&#13;&#10;-Djobengine.db.password=password&#13;&#10;-Djobengine.loglevel=INFO&#13;&#10;-Dlog4j.configurationFile=&quot;${workspace_loc}/-configuration/log4j2.xml&quot;&#13;&#10;-Djobengine.jobsteps.alternate.root=&quot;${workspace_loc}/user.jobengine.executors/bin/&quot;&#13;&#10;-Djetty.home=&quot;${workspace_loc:}/-configuration/jetty&quot;&#13;&#10;-Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml&#13;&#10;-Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty&#13;&#10;-Djava.io.tmpdir=c:\temp\jetty&#13;&#10;-Djobengine.octopus.api.address=http://10.10.1.11/api/v1&#13;&#10;-Djobengine.octopus.api.user=mam&#13;&#10;-Djobengine.octopus.api.password=napocska&#13;&#10;-Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.nosql.db.user=db2admin&#13;&#10;-Djobengine.nosql.db.password=password&#13;&#10;-Djobengine.nosql.db.schema=test&#13;&#10;-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl&#13;&#10;-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium&#13;&#10;-Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;&#13;&#10;-Djobengine.nexio.db.user=sa&#13;&#10;-Djobengine.nexio.db.password=resolve&#13;&#10;-Dnexio.host=10.10.1.55&#13;&#10;-Djobengine.nexio.name=testnexioclips&#13;&#10;-Dnexio.useMOSGateway=true&#13;&#10;-Dnexio.disable=true&#13;&#10;-Djobengine.octopus.rundowns.name=rundowns&#13;&#10;-Djobengine.octopus.storyfolders.name=storyfolders&#13;&#10;-Djobengine.octopus.stories.name=stories&#13;&#10;-Dmediacube.auth.location=&quot;${workspace_loc}/-configuration/mediacube-auth.properties&quot;&#13;&#10;-Djobengine.mediacube.config=&quot;${workspace_loc}/-configuration/mediacube.json&quot;&#13;&#10;-Djobengine.mediacube.service.proxyroot=&quot;/opt&quot;&#13;&#10;-Djobengine.randomize.archives=false&#13;&#10;-Dmediacube.simplesearch=true"/>\r
 <stringAttribute key="pde.version" value="3.3"/>\r
 <booleanAttribute key="show_selected_only" value="false"/>\r
 <stringAttribute key="target_bundles" value="cglib@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default,com.ibm.db2.jcc@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,groovy@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs-api@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.mybatis.mybatis@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,org.omnifaces@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
index e5d1917be93e04f2796537ad419d7f338eebb9f5..845799d5ad303f8d3516ecf0da2a13ce11c46ca7 100644 (file)
@@ -1,7 +1,5 @@
 package hu.user.mediacube.executors.tests;\r
 \r
-import java.sql.Timestamp;\r
-import java.text.SimpleDateFormat;\r
 import java.time.Duration;\r
 import java.time.Instant;\r
 import java.util.Arrays;\r
@@ -12,9 +10,6 @@ import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.output.ByteArrayOutputStream;\r
 import org.apache.commons.net.ftp.FTPClient;\r
 import org.junit.Test;\r
-import org.w3c.dom.Document;\r
-import org.w3c.dom.Node;\r
-import org.w3c.dom.NodeList;\r
 \r
 import user.commons.RemoteFile;\r
 import user.commons.StoreUri;\r
@@ -28,7 +23,6 @@ import user.commons.nexio.server.protocol.Xid;
 import user.commons.remotestore.FtpDirectoryLister;\r
 import user.commons.remotestore.IDirectoryLister;\r
 import user.commons.remotestore.RemoteStoreProtocol;\r
-import user.jobengine.server.steps.EscortFiles;\r
 \r
 public class MediaBaseTest {\r
 \r
@@ -64,26 +58,40 @@ public class MediaBaseTest {
                nexioUri.setUserName("ftp");\r
                nexioUri.setPassword("ftp");\r
                byte[] content = nexioUri.getFileWithContent("test-dani.xml").getContent();\r
-               System.out.println(new String(content));\r
-\r
-               Document document = EscortFiles.createNEXIOMeta(content);\r
-               Node firstChild = document.getFirstChild();\r
-               NodeList list = firstChild.getChildNodes();\r
-               for (int i = 0; i < list.getLength(); i++) {\r
-                       Node item = list.item(i);\r
-                       //System.out.println(item.getNodeName());\r
-                       if (item.getNodeName().equals("ModifiedTimeStamp")) {\r
-                               System.out.println(item.getTextContent());\r
-                               SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy (HH:mm:ss)");\r
-                               System.out.println(Timestamp.from(df.parse(item.getTextContent()).toInstant()));\r
-                               break;\r
-                       }\r
-               }\r
+               System.out.println("Content " + new String(content).length());\r
+\r
+               //              Document document = EscortFiles.createNEXIOMeta(content);\r
+               //              Node firstChild = document.getFirstChild();\r
+               //              NodeList list = firstChild.getChildNodes();\r
+               //              for (int i = 0; i < list.getLength(); i++) {\r
+               //                      Node item = list.item(i);\r
+               //                      //System.out.println(item.getNodeName());\r
+               //                      if (item.getNodeName().equals("ModifiedTimeStamp")) {\r
+               //                              System.out.println(item.getTextContent());\r
+               //                              SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy (HH:mm:ss)");\r
+               //                              System.out.println(Timestamp.from(df.parse(item.getTextContent()).toInstant()));\r
+               //                              break;\r
+               //                      }\r
+               //              }\r
 \r
                //              if (elementsByTagName.getLength() == 1) {\r
                //\r
                //              }\r
+\r
+               nexioUri.cleanUp();\r
+\r
+               StoreUri localUri = new StoreUri();\r
+               localUri.setProtocol(RemoteStoreProtocol.LOCAL);\r
+               localUri.setUri("/_video");\r
+\r
+               String fileName = "test-dani.mxf";\r
+               nexioUri.transferFrom(localUri, fileName, fileName);\r
+\r
+               content = nexioUri.getFileWithContent("test-dani.xml").getContent();\r
+               System.out.println("Content " + new String(content).length());\r
+\r
                nexioUri.cleanUp();\r
+               localUri.cleanUp();\r
        }\r
 \r
        @Test\r
@@ -177,26 +185,26 @@ public class MediaBaseTest {
         * 19. oldal\r
        C8 B1 00 00 00 02 00 00 00 02\r
        If not already established, sets up the interchange of data to be in Unicode, where appropriate\r
-\r
+       \r
        C1 4C 21\r
        Retrieves the first ID in the system. Mode 21 retrieves both the 8-byte ID handle and the extended ID at the same time. More traditional methods of ID retrieval use A0 14 to get the first 8-byte ID handle followed by C8 C3 to get its matching extended ID.\r
        C8 4A 25 30 30 30 30 31 32 33\r
-\r
+       \r
        Retrieves the normal set of metadata associated with the specified 8-byte ID handle retrieved in the previous command\r
        C9 C3 25 30 30 30 30 31 32 33 00\r
-\r
+       \r
        Retrieves the metadata for the specified clip in the first extended field\r
        C9 C3 25 30 30 30 30 31 32 33 nn\r
-\r
+       \r
        Retrieves the metadata for the specified clip in each of the remaining extended fields\r
        C8 84 25 30 30 30 30 31 32 33\r
-\r
+       \r
        Retrieves the special attributes associated with the specified clip\r
        C0 4D\r
-\r
+       \r
        Retrieves the next ID in the system including its 8-byte ID handle and extended ID\r
        C8 4A 25 30 30 30 30 31 32 34\r
-\r
+       \r
        Retrieves the normal set of metadata associated with the next ID in the list\r
        …\r
        Continue this cycle of retrieving the next ID in the list and its associated metadata until the server returns no more IDs * */\r
index cf9d035802a85be39ae158b2f79d424f4d93dac2..dae688609e276f48bb904e0d86563076176e86f5 100644 (file)
@@ -29,9 +29,8 @@ public class CancelableStep extends JobStep {
                //              getJobRuntime().setDescription(String.valueOf(param));\r
 \r
                try {\r
-                       //getJobRuntime().setRelated("xxx");\r
                        //logger.info(new MediaCubeMarker("vasary@elgekko.net", "TESZT"), "Heloka");\r
-                       //logger.error(getSessionMarker(), "Heloka");\r
+                       logger.error(getSessionMarker(), "Heloka");\r
                        for (int i = 0; i < count; i++) {\r
                                if (getJobRuntime().isWaitingCancel())\r
                                        break;\r
index 101c66bdfcf3a13d3ca63e60cbaa6d2c17fbf5f6..c3b51c8c9858080322e22dde92dca3832b6f5913 100644 (file)
@@ -34,7 +34,7 @@ public class FileValidatorStep extends JobStep {
 \r
                if (getJobRuntime().isWaitingCancel()) {\r
                        EscortFiles.remove(filePath);\r
-                       EscortFiles.remove(escortFilePath);\r
+                       //EscortFiles.remove(escortFilePath);\r
                        EscortFiles.remove(Paths.get(escortFile + EscortFiles.DOT_CATCHED));\r
 \r
                        Message msg = new ParameterizedMessage("A {} fájl visszatöltése kezelői beavatkozás miatt megszakadt.", fileName);\r
@@ -110,6 +110,7 @@ public class FileValidatorStep extends JobStep {
 \r
                                        EscortFiles.remove(filePath);\r
                                        EscortFiles.remove(Paths.get(escortFile));\r
+                                       //200911 a kommentet kivettem, mert ezeket is torolni kell\r
                                        EscortFiles.remove(Paths.get(escortFile + EscortFiles.DOT_CATCHED));\r
                                        throw new Exception("Length mismatch in " + filePath + ". Expected: " + expectedFrameNumber + ", found: " + frames);\r
                                }\r
index addb9f752bd8ad07b7ca810164e17a2608bb2ec8..58378efba349201226fd14541ac41c79e4d07409 100644 (file)
@@ -120,8 +120,9 @@ public class ForkDownloadStep extends JobStep {
                        StoreUri sourceStoreUri = getManager().getStoreUri(downloadable.getLong("sourceStoreUriId"));\r
                        StoreUri targetStoreUri = getManager().getStoreUri(downloadable.getLong("targetStoreUriId"));\r
 \r
-                       Store targetStore = getManager().getStore(targetStoreUri.getStoreId());\r
-                       template = targetStore.getName() + "-" + template;\r
+                       Store sourceStore = getManager().getStore(sourceStoreUri.getStoreId());\r
+                       String sourceStoreName = sourceStore.getName();\r
+                       template = sourceStoreName + "-" + template;\r
                        logger.info(getMarker(), "Starting {} for {}", template, escortFileName);\r
 \r
                        String sourceFileName = downloadable.getString("fileName");\r
@@ -143,14 +144,16 @@ public class ForkDownloadStep extends JobStep {
 \r
                        //parameterek: IJobRuntime parent, String template, String name, int priority, Map<String, Object> parameters\r
                        IJobRuntime child = getEngine().submit(null, e -> {\r
-                               if (e.getStatus().equals(JobStatus.CANCELED))\r
+                               if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED))\r
                                        EscortFiles.removeCatchedFile(escortFile);\r
                        }, template, "Archiválás", priority, IJobEngine.DEFAULT_OWNER, parameters);\r
                        if (child == null)\r
                                throw new Exception("Submit error.");\r
 \r
                        child.setDescription(sourceFileName);\r
-                       child.setRelated(downloadable.getString("title"));\r
+\r
+                       child.setRelated(downloadable.getString("title") + " / " + sourceStoreName);\r
+\r
                        EscortFiles.createCatchedFile(escortFile);\r
 \r
                } catch (Exception e) {\r
index 70da7b5e50530fcec73bd0a5a9c42556e05f84ce..68398fcf233d63d6d8759d856892110ff3836e04 100644 (file)
@@ -175,7 +175,7 @@ public class ForkUploadStep extends JobStep {
 \r
                        child.setDescription(escortFileName);\r
 \r
-                       child.setRelated(downloadable.getString("title"));\r
+                       child.setRelated(downloadable.getString("title") + " / " + targetStore.getName());\r
                        EscortFiles.createCatchedFile(escortFile);\r
                } catch (Exception e) {\r
                        logger.error(getSessionMarker(), e.getMessage());\r
index 2d7b596cde2a2bbc1b088249e09506d211ff2cf9..f089605ca9fcd78c6ba72e5ac9ebc910ae25f04e 100644 (file)
@@ -1,11 +1,33 @@
 package user.jobengine.server.steps;\r
 \r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.RemoteFile;\r
 import user.commons.StoreUri;\r
 \r
 public class NEXIO1TransferToStep extends TransferStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
        @Override\r
        @StepEntry\r
        public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception {\r
+\r
+               try {\r
+                       String title = targetFileName;\r
+                       if (title.contains("."))\r
+                               title = title.substring(0, title.lastIndexOf("."));\r
+                       RemoteFile remoteFile = targetStoreUri.getFileWithContent(title + ".xml");\r
+                       if (remoteFile != null && remoteFile.getContent() != null) {\r
+                               logger.info("File already exists on NEXIO1 {}", targetFileName);\r
+                               return null;\r
+                       }\r
+               } catch (Exception e) {\r
+                       logger.error(e.getMessage());\r
+               } finally {\r
+                       targetStoreUri.cleanUp();\r
+               }\r
+\r
                return super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName);\r
        }\r
 }\r
index 179c9d9691670f7d240822945ddd49919c5e78e0..a5374e279a9d3045297bd0f0c97dbde553bb42c6 100644 (file)
@@ -1,11 +1,32 @@
 package user.jobengine.server.steps;\r
 \r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.RemoteFile;\r
 import user.commons.StoreUri;\r
 \r
 public class NEXIO2TransferToStep extends TransferStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
        @Override\r
        @StepEntry\r
        public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception {\r
+               try {\r
+                       String title = targetFileName;\r
+                       if (title.contains("."))\r
+                               title = title.substring(0, title.lastIndexOf("."));\r
+                       RemoteFile remoteFile = targetStoreUri.getFileWithContent(title + ".xml");\r
+                       if (remoteFile != null && remoteFile.getContent() != null) {\r
+                               logger.info("File already exists on NEXIO2 {}", targetFileName);\r
+                               return null;\r
+                       }\r
+               } catch (Exception e) {\r
+                       logger.error(e.getMessage());\r
+               } finally {\r
+                       targetStoreUri.cleanUp();\r
+               }\r
+\r
                return super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName);\r
        }\r
 }\r
index c4a97867f4e31b0ad261e9a94465da6495519611..231af2a0bf32f6d422cdda7d8eb40a456d5ffbfa 100644 (file)
@@ -32,7 +32,7 @@ public class NEXIOArchiveCheckerStep extends JobStep {
 \r
                //formatum\r
                if (!(videoFormat == 3 || videoFormat == 19)) {\r
-                       logger.info(getMarker(), "{} unsupported video format", videoFormat);\r
+                       logger.debug(getMarker(), "{} unsupported video format", videoFormat);\r
                        return false;\r
                }\r
 \r
@@ -44,7 +44,7 @@ public class NEXIOArchiveCheckerStep extends JobStep {
                        return false;\r
                }\r
                if (modifiedHours < lastModifiedHours) {\r
-                       logger.info(getMarker(), "{} modification time is too cloose for now", title);\r
+                       logger.debug(getMarker(), "{} modification time is too cloose for now", title);\r
                        return false;\r
                }\r
 \r
index bf202481e15bb0218908bf1550ef8b8ccdfa48a8..ec9565f193fdcf75d921d21b40ee8d6ce9a9dead 100644 (file)
@@ -46,6 +46,7 @@ public class NEXIOMetadataPersisterStep extends JobStep {
 \r
                        //TODO mediafile lastmodified = feltoltott file nexio xml lastmodified\r
                        Timestamp lastModified = getLastModified(remoteFile);\r
+                       logger.info("Setting last modification time on {} to {}", downloadable.getString("title"), lastModified);\r
                        mediaFile.setLastModified(lastModified);\r
                        getManager().modify(mediaFile);\r
 \r
index a99e9abbdba8c5e42e0e6f5c5ee4408463f52d72..e580fa0dce40b2a732bcd26c9818d2e1e3005bce 100644 (file)
@@ -74,7 +74,6 @@ public class PeableBeachMissingMaterialCheckerStep extends JobStep {
 \r
                        if (medias != null && medias.size() > 0) {\r
                                count = medias.size();\r
-\r
                                for (MMMedia media : medias) {\r
                                        logger.info(getMarker(), "API response contains {}", media.getName());\r
                                }\r
@@ -110,11 +109,13 @@ public class PeableBeachMissingMaterialCheckerStep extends JobStep {
                        for (RemoteFile rf : remoteFiles) {\r
                                try {\r
                                        String name = rf.getName();\r
-                                       int pos = name.lastIndexOf(".");\r
-                                       if (pos > -1) {\r
-                                               name = name.substring(0, pos);\r
-                                               //logger.info(getMarker(), "Adding {}", name);\r
-                                               poolContent.add(name);\r
+                                       if (name.toLowerCase().endsWith(".mxf")) {\r
+                                               int pos = name.lastIndexOf(".");\r
+                                               if (pos > -1) {\r
+                                                       name = name.substring(0, pos);\r
+                                                       //logger.info(getMarker(), "Adding {}", name);\r
+                                                       poolContent.add(name);\r
+                                               }\r
                                        }\r
                                } catch (Exception e) {\r
                                        logger.error(e.getMessage());\r
index 57eea5dcd448a2909ec052b1f8a01b87ef181fd7..e2256c76edd05c5448005c6967b4633d9d3202e6 100644 (file)
@@ -184,6 +184,7 @@ public class FtpDirectoryLister implements IDirectoryLister {
                RemoteFile result = null;\r
                connect();\r
                if (ftpClient != null) {\r
+                       //TODO eleg a try?\r
                        try (InputStream input = ftpClient.retrieveFileStream(name)) {\r
                                checkCompletePending = true;\r
                                if (input != null) {\r
diff --git a/server/user.jobengine.osgi.db/migrations/scripts/011_create_temp_and_nexio_stores.sql b/server/user.jobengine.osgi.db/migrations/scripts/011_create_temp_and_nexio_stores.sql
new file mode 100644 (file)
index 0000000..b5dec9f
--- /dev/null
@@ -0,0 +1,37 @@
+-- // Creates MediaCube local temporary and NEXIO stores
+-- Migration SQL that makes the change goes here.
+
+INSERT INTO STORE(NAME,ISSYSTEM,ISLOWRES) VALUES
+('NEXIO1','N','N'),
+('NEXIO2','N','N'),
+('MEDIACUBE_DOWNLOADS','N','N'),
+('MEDIACUBE_UPLOADS','N','N')
+@
+
+INSERT INTO STOREURI(STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER) VALUES
+((SELECT ID FROM STORE WHERE NAME='NEXIO1'),'FTP',null,'192.168.0.98','N','Y','Y','pasa','999',null,null),
+((SELECT ID FROM STORE WHERE NAME='NEXIO1'),'NEXIO',null,'192.168.0.98','N','Y','N',null,null,null,null),
+((SELECT ID FROM STORE WHERE NAME='NEXIO2'),'FTP',null,'192.168.0.99','N','Y','Y','pasa','999',null,null),
+((SELECT ID FROM STORE WHERE NAME='NEXIO2'),'NEXIO',null,'192.168.0.99','N','Y','N',null,null,null,null),
+((SELECT ID FROM STORE WHERE NAME='MEDIACUBE_DOWNLOADS'),'LOCAL',null,'/mediacube/downloads','N','Y','Y',null,null,null,null),
+((SELECT ID FROM STORE WHERE NAME='MEDIACUBE_UPLOADS'),'LOCAL',null,'/mediacube/uploads','N','Y','Y',null,null,null,null)
+@
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='NEXIO1')
+@
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='NEXIO2')
+@
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='MEDIACUBE_DOWNLOADS')
+@
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='MEDIACUBE_UPLOADS')
+@
+DELETE FROM STORE WHERE NAME='NEXIO1'
+@
+DELETE FROM STORE WHERE NAME='NEXIO2'
+@
+DELETE FROM STORE WHERE NAME='MEDIACUBE_DOWNLOADS'
+@
+DELETE FROM STORE WHERE NAME='MEDIACUBE_UPLOADS'
+@
diff --git a/server/user.jobengine.osgi.db/migrations/scripts/012_ensure_tsm_store.sql b/server/user.jobengine.osgi.db/migrations/scripts/012_ensure_tsm_store.sql
new file mode 100644 (file)
index 0000000..0974c2a
--- /dev/null
@@ -0,0 +1,24 @@
+-- // Ensure existance of TSM store with TSM protocol
+-- Migration SQL that makes the change goes here.
+
+MERGE INTO STORE store USING (
+        VALUES ('TSM','Y','N')
+    ) AS merge (NAME,ISSYSTEM,ISLOWRES)
+    ON store.NAME = merge.NAME
+    WHEN NOT MATCHED THEN 
+               INSERT (NAME,ISSYSTEM,ISLOWRES) VALUES (merge.NAME, merge.ISSYSTEM, merge.ISLOWRES)
+    ELSE IGNORE
+@
+
+MERGE INTO STOREURI storeuri USING (
+        VALUES ((SELECT ID FROM STORE WHERE NAME='TSM'),'TSM',null,'','N','Y','Y','','',null,null)
+    ) AS merge (STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER)
+    ON (storeuri.PROTOCOL = merge.PROTOCOL AND storeuri.STOREID = merge.STOREID)
+    WHEN NOT MATCHED THEN
+        INSERT (STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER)
+        VALUES (merge.STOREID,merge.PROTOCOL,merge.DELIVERY,merge.URI,merge.ISSTREAM,merge.ISSOURCE,merge.ISTARGET,merge.USERNAME,merge.PASSWORD,merge.ROOTPATH,merge.PORTNUMBER)
+    ELSE IGNORE
+@
+-- //@UNDO
+-- SQL to undo the change goes here.
+--Nem kell undo
\ No newline at end of file
diff --git a/server/user.jobengine.osgi.db/migrations/scripts/013_modify_ft_triggers.sql b/server/user.jobengine.osgi.db/migrations/scripts/013_modify_ft_triggers.sql
new file mode 100644 (file)
index 0000000..69e9b2c
--- /dev/null
@@ -0,0 +1,44 @@
+-- // Modify ft triggers, use real tsm store to filter
+-- Migration SQL that makes the change goes here.
+
+
+CREATE OR REPLACE TRIGGER TRG_MEDIAFILE_AFTER_INSERT after insert
+on mediafile
+referencing new as n
+for each row
+
+begin atomic
+       DECLARE storeid BIGINT;
+       SET storeid = (SELECT ID FROM STORE WHERE NAME='TSM');
+
+       IF n.storeid = storeid THEN
+               insert into mediadescription (itemid, mediaid, mediafileid, description)
+               select 
+                       itemid,
+                       mediaid, 
+                       mediafileid,
+                       fulldesc(itemid, mediaid, mediafileid)
+               from vw_items 
+               where mediafileid = n.id;
+       END IF;
+end
+@
+
+CREATE OR REPLACE TRIGGER TRG_MEDIAFILE_AFTER_DELETE after delete
+on mediafile
+referencing old as o
+for each row
+begin atomic
+       DECLARE storeid BIGINT;
+       SET storeid = (SELECT ID FROM STORE WHERE NAME='TSM');
+
+       IF o.storeid = storeid THEN
+               delete from mediadescription where mediafileid = o.id;
+       END IF;
+end
+@
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+
+--nincs undo
\ No newline at end of file
diff --git a/server/user.jobengine.osgi.db/migrations/scripts/014_create_peablebeach_beechpool_store.sql b/server/user.jobengine.osgi.db/migrations/scripts/014_create_peablebeach_beechpool_store.sql
new file mode 100644 (file)
index 0000000..36c8bc7
--- /dev/null
@@ -0,0 +1,17 @@
+-- // Creates PeableBeach local BeachPool as mounted store
+-- Migration SQL that makes the change goes here.
+
+INSERT INTO STORE(NAME,ISSYSTEM,ISLOWRES) VALUES
+('PEABLEBEACH','N','N')
+@
+
+INSERT INTO STOREURI(STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER) VALUES
+((SELECT ID FROM STORE WHERE NAME='PEABLEBEACH'),'LOCAL',null,'/mnt/PEABLEBEACH/BEACHPOOL','N','Y','Y','pasa','999',null,null)
+@
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='PEABLEBEACH')
+@
+DELETE FROM STORE WHERE NAME='PEABLEBEACH'
+@
diff --git a/server/user.jobengine.osgi.db/migrations/scripts/016_modify_tsm_storeuri.sql b/server/user.jobengine.osgi.db/migrations/scripts/016_modify_tsm_storeuri.sql
new file mode 100644 (file)
index 0000000..83cbe97
--- /dev/null
@@ -0,0 +1,8 @@
+-- // Modify TSM storeuri username/password
+-- Migration SQL that makes the change goes here.
+
+UPDATE STOREURI storeuri SET USERNAME=NULL, PASSWORD=NULL WHERE PROTOCOL='TSM'
+@
+-- //@UNDO
+-- SQL to undo the change goes here.
+--Nem kell undo
\ No newline at end of file
diff --git a/server/user.jobengine.osgi.db/migrations/scripts/017_add_filezize_mediafile.sql b/server/user.jobengine.osgi.db/migrations/scripts/017_add_filezize_mediafile.sql
new file mode 100644 (file)
index 0000000..97bc1a0
--- /dev/null
@@ -0,0 +1,15 @@
+-- // Add filesize column to mediafile
+-- Migration SQL that makes the change goes here.
+
+ALTER TABLE MEDIAFILE ADD COLUMN FILESIZE BIGINT default 0
+@
+CALL SYSPROC.ADMIN_CMD ( 'REORG TABLE DB2ADMIN.MEDIAFILE' )
+@
+
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+ALTER TABLE MEDIAFILE DROP COLUMN FILESIZE
+@
+CALL SYSPROC.ADMIN_CMD ( 'REORG TABLE DB2ADMIN.MEDIAFILE' )
+@
diff --git a/server/user.jobengine.osgi.db/migrations/scripts/018_add_related_to_job.sql b/server/user.jobengine.osgi.db/migrations/scripts/018_add_related_to_job.sql
new file mode 100644 (file)
index 0000000..fddbea5
--- /dev/null
@@ -0,0 +1,39 @@
+--
+--    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.
+--
+
+-- // Alter JOB table, add RELATED column
+-- Migration SQL that makes the change goes here.
+
+ALTER TABLE JOB ADD COLUMN RELATED VARCHAR(255)
+@
+
+CREATE INDEX IDX_JOB_RELATED ON JOB ("RELATED")
+@
+
+CALL SYSPROC.ADMIN_CMD('REORG TABLE DB2ADMIN.JOB')
+@
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+
+DROP INDEX IDX_JOB_RELATED
+@
+
+ALTER TABLE JOB DROP COLUMN RELATED
+@
+
+CALL SYSPROC.ADMIN_CMD('REORG TABLE DB2ADMIN.JOB')
+@
diff --git a/server/user.jobengine.osgi.db/migrations/scripts/019_add_lookup_related.sql b/server/user.jobengine.osgi.db/migrations/scripts/019_add_lookup_related.sql
new file mode 100644 (file)
index 0000000..ef93c83
--- /dev/null
@@ -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.
+--
+
+-- // Add LOOKUP function for use dynamic like from sqlj
+-- Migration SQL that makes the change goes here.
+
+CREATE OR REPLACE FUNCTION LOOKUP(col VARCHAR(255), search VARCHAR(255))
+       RETURNS int
+       RETURN
+SELECT LOCATE(search, LOWER(col)) FROM SYSIBM.SYSDUMMY1
+@
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+
+DROP FUNCTION LOOKUP
+@
diff --git a/server/user.jobengine.osgi.db/migrations/scripts/020_create_peablebeach_stores.sql b/server/user.jobengine.osgi.db/migrations/scripts/020_create_peablebeach_stores.sql
new file mode 100644 (file)
index 0000000..b65d7e5
--- /dev/null
@@ -0,0 +1,78 @@
+-- // Creates PASAPOOL as mounted store
+-- Migration SQL that makes the change goes here.
+
+INSERT INTO STORE(NAME,ISSYSTEM,ISLOWRES) VALUES
+('PASAPOOL','N','N')
+@
+
+INSERT INTO STOREURI(STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER) VALUES
+((SELECT ID FROM STORE WHERE NAME='PASAPOOL'),'LOCAL',null,'/mnt/PEABLEBEACH/PASAPOOL','N','Y','Y',null,null,null,null)
+@
+
+INSERT INTO STORE(NAME,ISSYSTEM,ISLOWRES) VALUES
+('SELENIOPOOL','N','N')
+@
+
+INSERT INTO STOREURI(STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER) VALUES
+((SELECT ID FROM STORE WHERE NAME='SELENIOPOOL'),'LOCAL',null,'/mnt/PEABLEBEACH/SELENIOPOOL','N','Y','N',null,null,null,null)
+@
+
+INSERT INTO STORE(NAME,ISSYSTEM,ISLOWRES) VALUES
+('SELENIOPOOL_16_9','N','N')
+@
+
+INSERT INTO STOREURI(STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER) VALUES
+((SELECT ID FROM STORE WHERE NAME='SELENIOPOOL_16_9'),'LOCAL',null,'/mnt/PEABLEBEACH/SELENIOPOOL/16_9','N','Y','N',null,null,null,null)
+@
+
+INSERT INTO STORE(NAME,ISSYSTEM,ISLOWRES) VALUES
+('SELENIOPOOL_16_9_PROCESSING','N','N')
+@
+
+INSERT INTO STOREURI(STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER) VALUES
+((SELECT ID FROM STORE WHERE NAME='SELENIOPOOL_16_9_PROCESSING'),'LOCAL',null,'/mnt/PEABLEBEACH/SELENIOPOOL/16_9/PROCESSING','N','Y','N',null,null,null,null)
+@
+
+INSERT INTO STORE(NAME,ISSYSTEM,ISLOWRES) VALUES
+('SELENIOPOOL_4_3','N','N')
+@
+
+INSERT INTO STOREURI(STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER) VALUES
+((SELECT ID FROM STORE WHERE NAME='SELENIOPOOL_4_3'),'LOCAL',null,'/mnt/PEABLEBEACH/SELENIOPOOL/4_3','N','Y','N',null,null,null,null)
+@
+
+INSERT INTO STORE(NAME,ISSYSTEM,ISLOWRES) VALUES       
+('SELENIOPOOL_4_3_PROCESSING','N','N')
+@
+
+INSERT INTO STOREURI(STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER) VALUES
+((SELECT ID FROM STORE WHERE NAME='SELENIOPOOL_4_3_PROCESSING'),'LOCAL',null,'/mnt/PEABLEBEACH/SELENIOPOOL/4_3/PROCESSING','N','Y','N',null,null,null,null)
+@
+
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='PASAPOOL')
+@
+DELETE FROM STORE WHERE NAME='PASAPOOL'
+@
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='SELENIOPOOL')
+@
+DELETE FROM STORE WHERE NAME='SELENIOPOOL'
+@
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='SELENIOPOOL_16_9')
+@
+DELETE FROM STORE WHERE NAME='SELENIOPOOL_16_9'
+@
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='SELENIOPOOL_16_9_PROCESSING')
+@
+DELETE FROM STORE WHERE NAME='SELENIOPOOL_16_9_PROCESSING'
+@
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='SELENIOPOOL_4_3')
+@
+DELETE FROM STORE WHERE NAME='SELENIOPOOL_4_3'
+@
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='SELENIOPOOL_4_3_PROCESSING')
+@
+DELETE FROM STORE WHERE NAME='SELENIOPOOL_4_3_PROCESSING'
+@
diff --git a/server/user.jobengine.osgi.db/migrations/scripts/021_create_filezilla_store.sql b/server/user.jobengine.osgi.db/migrations/scripts/021_create_filezilla_store.sql
new file mode 100644 (file)
index 0000000..c7895ca
--- /dev/null
@@ -0,0 +1,33 @@
+-- // Creates PASAPOOL as mounted store
+-- Migration SQL that makes the change goes here.
+
+INSERT INTO STORE(NAME,ISSYSTEM,ISLOWRES) VALUES
+('FILEZILLA_PASARESTORE','N','N')
+@
+
+-- @DELIMITER $
+INSERT INTO STOREURI(STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER) VALUES
+((SELECT ID FROM STORE WHERE NAME='FILEZILLA_PASARESTORE'),'FTP',null,'192.168.0.101','N','N','Y','ftpuser','FtPVs3r@1','/Input/Pasa_Restore',null)
+$
+-- @DELIMITER @
+
+INSERT INTO STORE(NAME,ISSYSTEM,ISLOWRES) VALUES
+('FILEZILLA_AVID','N','N')
+@
+
+-- @DELIMITER $
+INSERT INTO STOREURI(STOREID,PROTOCOL,DELIVERY,URI,ISSTREAM,ISSOURCE,ISTARGET,USERNAME,PASSWORD,ROOTPATH,PORTNUMBER) VALUES
+((SELECT ID FROM STORE WHERE NAME='FILEZILLA_AVID'),'FTP',null,'192.168.0.101','N','N','Y','ftpuser','FtPVs3r@1','/Input/HD_to_DNxHD_MXF',null)
+$
+-- @DELIMITER @
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='FILEZILLA_PASARESTORE')
+@
+DELETE FROM STORE WHERE NAME='FILEZILLA_PASARESTORE'
+@
+DELETE FROM STOREURI WHERE STOREID=(SELECT ID FROM STORE WHERE NAME='FILEZILLA_AVID')
+@
+DELETE FROM STORE WHERE NAME='FILEZILLA_AVID'
+@
diff --git a/server/user.jobengine.osgi.db/migrations/scripts/023_create_dropitem_sp.sql b/server/user.jobengine.osgi.db/migrations/scripts/023_create_dropitem_sp.sql
new file mode 100644 (file)
index 0000000..19ef07d
--- /dev/null
@@ -0,0 +1,38 @@
+--
+--    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.
+--
+
+-- // Create DROPITEM stored procedure
+-- Migration SQL that makes the change goes here.
+
+CREATE PROCEDURE DROPITEM(vITEMID BIGINT)
+LANGUAGE SQL
+BEGIN
+       DECLARE vMEDIAFILEID BIGINT;
+       DECLARE vMEDIAID BIGINT;
+       SELECT ID INTO vMEDIAID FROM MEDIA WHERE ITEMID = vITEMID;
+       SELECT ID INTO vMEDIAFILEID FROM MEDIAFILE WHERE MEDIAID = vMEDIAID;
+
+       delete from mediafile where id = vMEDIAFILEID;
+       delete from media where id = vMEDIAID;
+       delete from item where id = vITEMID;
+END
+@
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+
+DROP PROCEDURE DROPITEM
+@
index a2041947e20d511c8b303e271c52d0ad916d3c42..3b94e5949e3bd5ac7633ad35d6ad4d56a8b698c7 100644 (file)
@@ -8,6 +8,7 @@ public class SearchOptions {
        final private List<String> filters;\r
        final private Date searchFrom;\r
        final private Date searchTo;\r
+       final private int descLength;\r
        final private String orderBy;\r
        final private boolean orderAscending;\r
        final private boolean missingProxy;\r
@@ -15,12 +16,14 @@ public class SearchOptions {
        private int fromResult;\r
        private int toResult;\r
 \r
-       public SearchOptions(String text, List<String> filters, Date searchFrom, Date searchTo, boolean missingProxy, String orderBy, boolean orderAscending) {\r
+       public SearchOptions(String text, List<String> filters, Date searchFrom, Date searchTo, boolean missingProxy, int descLength, String orderBy,\r
+                       boolean orderAscending) {\r
                this.text = text;\r
                this.filters = filters;\r
                this.searchFrom = searchFrom;\r
                this.searchTo = searchTo;\r
                this.missingProxy = missingProxy;\r
+               this.descLength = descLength;\r
                this.orderBy = orderBy;\r
                this.orderAscending = orderAscending;\r
        }\r
@@ -57,6 +60,10 @@ public class SearchOptions {
                return toResult;\r
        }\r
 \r
+       public boolean isMissingProxy() {\r
+               return missingProxy;\r
+       }\r
+\r
        public boolean isOrderAscending() {\r
                return orderAscending;\r
        }\r
@@ -73,8 +80,8 @@ public class SearchOptions {
                this.toResult = toResult;\r
        }\r
 \r
-       public boolean isMissingProxy() {\r
-               return missingProxy;\r
+       public int getDescLength() {\r
+               return descLength;\r
        }\r
 \r
 }\r
index 1f7bf393c37c718dfe177bd17058f64932b31de7..b4abceb62a8ac6d8da75db2b0653a4d3f608afba 100644 (file)
@@ -22,6 +22,7 @@ public class MediaFinder implements IMediaFinder {
        private static final Logger logger = LogManager.getLogger();\r
        private ItemManager manager = null;\r
        private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");\r
+       private boolean simpleSearch = "true".equals(System.getProperty("mediacube.simplesearch", "false"));\r
 \r
        public MediaFinder(ItemManager manager) {\r
                this.manager = manager;\r
@@ -41,39 +42,44 @@ public class MediaFinder implements IMediaFinder {
                sql.append("m.length,");\r
                sql.append("m.itemtypeid mediaitemtypeid,");\r
                sql.append(String.format("HIGHLIGHT(md.description, '<span class=''rhl''>', '</span>', '%s') description,", criteriasPattern));\r
-               // sql.append("'blabla' description,");\r
                sql.append("it.name mediaitemtypename,");\r
                sql.append("m.houseid mediahouseid,");\r
                sql.append("mf.houseid mediafilehouseid,");\r
                sql.append("vw_mf.mediafilecount");\r
-               sql.append(\r
-                               " FROM ITEM i, MEDIA m, MEDIAFILE mf, MEDIADESCRIPTION md, VW_MEDIAFILES vw_mf, ITEMTYPE it WHERE i.id = md.itemid AND m.id = md.mediaid AND mf.id = md.mediafileid AND m.id=vw_mf.mediaid AND m.itemTypeId = it.id");\r
+               sql.append(" FROM ITEM i");\r
+               sql.append(" LEFT OUTER JOIN MEDIADESCRIPTION md ON (md.itemid = i.id)");\r
+               sql.append(" LEFT OUTER JOIN MEDIA m ON (m.id = md.mediaid)");\r
+               sql.append(" LEFT OUTER JOIN MEDIAFILE mf ON (mf.id = md.mediafileid)");\r
+               sql.append(" LEFT OUTER JOIN VW_MEDIAFILES vw_mf ON (vw_mf.mediaid=m.id)");\r
+               sql.append(" LEFT OUTER JOIN ITEMTYPE it ON (it.id = m.itemTypeId)");\r
                if (typeIDs != null) {\r
                        sql.append(" AND m.itemtypeid IN ");\r
                        sql.append(typeCriteria.toString());\r
                }\r
 \r
-               // Ha csak LIKE van media.title-re, nem kell (AMC)\r
-               //              String criteria = formatSearchValue(criteria);\r
-\r
-               //              if (criteria != null && criteria.trim().length() > 0)\r
-               //                      sql.append(" AND CONTAINS(md.description, '" + criteria + "') >= 1");\r
-\r
-               if (criteria.endsWith("*"))\r
-                       criteria = criteria.replace("*", "");\r
-               if (criteria != null && criteria.trim().length() > 0)\r
-                       sql.append(" AND m.title LIKE('%" + criteria + "%')");\r
+               if (simpleSearch) {\r
+                       if (criteria.endsWith("*"))\r
+                               criteria = criteria.replace("*", "");\r
+                       if (criteria != null && criteria.trim().length() > 0)\r
+                               sql.append(" AND m.title LIKE('%" + criteria + "%')");\r
+               } else {\r
+                       criteria = formatSearchValue(criteria);\r
+                       if (criteria != null && criteria.trim().length() > 0)\r
+                               sql.append(" AND CONTAINS(md.description, '" + criteria + "') >= 1");\r
+               }\r
 \r
-               if (options.getSearchFrom() != null) {\r
+               if (options.getSearchFrom() != null)\r
                        sql.append(String.format(" AND m.archived > '%s'", df.format(options.getSearchFrom())));\r
-               }\r
-               if (options.getSearchTo() != null) {\r
+\r
+               if (options.getSearchTo() != null)\r
                        sql.append(String.format(" AND m.archived < '%s'", df.format(options.getSearchTo())));\r
-               }\r
 \r
                if (options.isMissingProxy())\r
                        sql.append(" AND vw_mf.mediafilecount=1");\r
 \r
+               if (options.getDescLength() > 0)\r
+                       sql.append(" AND LENGTH(m.description) < " + options.getDescLength());\r
+\r
                sql.append(" ORDER BY ");\r
                if (options.getOrderBy() == null) {\r
                        sql.append("itemtitle desc, mediaitemtypeid");\r
@@ -246,36 +252,36 @@ public class MediaFinder implements IMediaFinder {
                return result;\r
        }\r
 \r
-       private void setRelevant(String[] criterias, ArchivedMedia am, String content) {\r
-               if (content == null)\r
-                       return;\r
-               for (String c : criterias) {\r
-                       if (c != null && c.length() > 2) {\r
-\r
-                               int pos = content.toLowerCase().indexOf(c.toLowerCase());\r
-                               if (pos > -1) {\r
-                                       int start = 0;\r
-                                       if (pos > 100)\r
-                                               start = pos - 100;\r
-                                       else\r
-                                               start = 0;\r
-                                       int end = pos + 200;\r
-                                       if (end > content.length() - 1)\r
-                                               end = content.length() - 1;\r
-\r
-                                       String relevant = content.substring(start, pos) + "<span class='rhl'>" + content.substring(pos, pos + c.length()) + "</span>"\r
-                                                       + content.substring(pos + c.length(), end);\r
-\r
-                                       if (start > 0)\r
-                                               relevant = "..." + relevant;\r
-                                       if (end < content.length() - 1)\r
-                                               relevant = relevant + "...";\r
-\r
-                                       am.setRelevant(relevant);\r
-                                       break;\r
-                               }\r
-\r
-                       }\r
-               }\r
-       }\r
+       //      private void setRelevant(String[] criterias, ArchivedMedia am, String content) {\r
+       //              if (content == null)\r
+       //                      return;\r
+       //              for (String c : criterias) {\r
+       //                      if (c != null && c.length() > 2) {\r
+       //\r
+       //                              int pos = content.toLowerCase().indexOf(c.toLowerCase());\r
+       //                              if (pos > -1) {\r
+       //                                      int start = 0;\r
+       //                                      if (pos > 100)\r
+       //                                              start = pos - 100;\r
+       //                                      else\r
+       //                                              start = 0;\r
+       //                                      int end = pos + 200;\r
+       //                                      if (end > content.length() - 1)\r
+       //                                              end = content.length() - 1;\r
+       //\r
+       //                                      String relevant = content.substring(start, pos) + "<span class='rhl'>" + content.substring(pos, pos + c.length()) + "</span>"\r
+       //                                                      + content.substring(pos + c.length(), end);\r
+       //\r
+       //                                      if (start > 0)\r
+       //                                              relevant = "..." + relevant;\r
+       //                                      if (end < content.length() - 1)\r
+       //                                              relevant = relevant + "...";\r
+       //\r
+       //                                      am.setRelevant(relevant);\r
+       //                                      break;\r
+       //                              }\r
+       //\r
+       //                      }\r
+       //              }\r
+       //      }\r
 }\r
index 919e5c31da2d9e16831acfe53bf31211d09495af..0eb013fe702c9f173bf8bb27525dea5a3da5e4d1 100644 (file)
@@ -37,6 +37,9 @@
                        <toolbarbutton label="NEXIO szinkronizálás" iconSclass="z-icon-renren" onClick="@command('restartNexio')" visible="${not sessionScope.nexioDisable}" autodisable="self"/>\r
                </toolbar>\r
 \r
+               <div width="100%" onAfterSize='chart.setWidth(new Integer(event.getWidth()))'>\r
+                       <charts id="chart" type="spline" title="Feladatok" marginRight="10"/>\r
+               </div>\r
 \r
                <div height="100%" width="100%">\r
                        <groupbox height="94%" closable="false">\r
index af5aed5e803dd0cad6985db9d01767c5fd71a28e..e0069a4434acfedaac9e3cf00ee665cfdb39244f 100644 (file)
                                        <label multiline="true" value="@load(vm.selectedObject.media.description)" />\r
                                </div>\r
                        </div>\r
-<!--                   <div> -->\r
-<!--                           <h:textarea name='tags2' placeholder='Címkék'></h:textarea> -->\r
-<!--                           <div id="listenerDiv" onChange="@command('onTag')" /> -->\r
+                       <div>\r
+                               <h:textarea name='tags2' placeholder='Címkék'></h:textarea>\r
+                               <div id="listenerDiv" onChange="@command('onTag')" />\r
 \r
-<!--                   </div> -->\r
+                       </div>\r
                </div>\r
        </div>\r
 </zk>
\ No newline at end of file
index 107845fc0f626fef31c81e6fe61c12037519bc38..a2c6163c71df6e2eab6423bfac1b3e0a68d914d8 100644 (file)
@@ -31,6 +31,7 @@
                \r
         <datebox id="searchFrom" value="@bind(vm.searchFrom)"/>\r
         <datebox id="searchTo" value="@bind(vm.searchTo)"/>\r
+        <spinner value="@bind(vm.descLength)" tooltiptext="Leírás mező karakterszáma"/>\r
                <combobox id="search" sclass="search" hflex="1" focus="true" model="@load(vm.searchHistory)" autodrop="true" buttonVisible="false"\r
                        tooltiptext="Gépelje be a keresendő kifejezést és nyomja meg az Enter-t." onOK="@command('doSearch')">\r
                                <attribute w:name="_doKeyDown">\r
index aaf04ca2a5594717e7ed2b38429f387ddf4b9ae7..d29d6ef07313cebcd838e26324f7a977135df1f2 100644 (file)
@@ -1,4 +1,4 @@
-version=2.6.2\r
+version=2.6.4\r
 footer=2016-2020 © Copyright User Rendszerház Kft.\r
 \r
 login_info=Információ\r
index 27487b97e9de92030878eaf51a0dd2f7fc5d6e88..71af0ccecbd253ef07b3710536d02b40d0f6720c 100644 (file)
@@ -3,6 +3,7 @@ package user.jobengine.zk.model;
 import static java.util.stream.Collectors.toList;\r
 \r
 import java.util.Arrays;\r
+import java.util.Calendar;\r
 import java.util.HashSet;\r
 import java.util.List;\r
 import java.util.Map;\r
@@ -11,13 +12,24 @@ import java.util.Set;
 import org.apache.commons.lang.StringUtils;\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.annotation.AfterCompose;\r
 import org.zkoss.bind.annotation.BindingParam;\r
 import org.zkoss.bind.annotation.Command;\r
+import org.zkoss.bind.annotation.ContextParam;\r
+import org.zkoss.bind.annotation.ContextType;\r
 import org.zkoss.bind.annotation.Init;\r
 import org.zkoss.bind.annotation.NotifyChange;\r
+import org.zkoss.chart.Charts;\r
+import org.zkoss.chart.Options;\r
+import org.zkoss.chart.PlotLine;\r
+import org.zkoss.chart.Point;\r
+import org.zkoss.chart.Series;\r
+import org.zkoss.zk.ui.Component;\r
 import org.zkoss.zk.ui.Executions;\r
 import org.zkoss.zk.ui.event.Event;\r
 import org.zkoss.zk.ui.event.EventListener;\r
+import org.zkoss.zk.ui.select.Selectors;\r
+import org.zkoss.zk.ui.select.annotation.Wire;\r
 import org.zkoss.zul.ListModelList;\r
 import org.zkoss.zul.Messagebox;\r
 import org.zkoss.zul.Window;\r
@@ -50,6 +62,46 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
        private String searchText;\r
        private JobStatus searchStatus;\r
        private List<JobStatus> searchStatuses;\r
+       @Wire\r
+       Charts chart;\r
+\r
+       @AfterCompose\r
+       public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
+               Selectors.wireComponents(view, this, false);\r
+               Options options = new Options();\r
+\r
+               options.getGlobal().setUseUTC(false);\r
+               chart.setHeight(150);\r
+               chart.setOptions(options);\r
+               chart.setAnimation(false);\r
+\r
+               chart.getXAxis().setType("datetime");\r
+               chart.getXAxis().setTickPixelInterval(150);\r
+\r
+               chart.getYAxis().setTitle("Darab");\r
+               PlotLine plotLine = new PlotLine();\r
+               plotLine.setValue(0);\r
+               plotLine.setWidth(1);\r
+               plotLine.setColor("#808080");\r
+               chart.getYAxis().setMin(0);\r
+               chart.getYAxis().addPlotLine(plotLine);\r
+\r
+               chart.getTooltip().setHeaderFormat("<b>{series.name}</b><br/>");\r
+               chart.getTooltip().setPointFormat("{point.x:%Y-%m-%d %H:%M:%S}<br>{point.y}");\r
+\r
+               chart.getLegend().setEnabled(false);\r
+               chart.getExporting().setEnabled(false);\r
+\r
+               Series series = chart.getSeries();\r
+               series.setName("Feladatok");\r
+               //updateJobsChart();\r
+\r
+               int size = jobList.size();\r
+               for (int i = -19; i <= 0; i++) {\r
+                       Point point = new Point(Calendar.getInstance().getTimeInMillis() + i * 1000, size);\r
+                       series.addPoint(point);\r
+               }\r
+       }\r
 \r
        @Command\r
        public void cancelAllJobs() {\r
@@ -157,8 +209,6 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
                jobList.clear();\r
                Map<Long, IJobRuntime> jobMap = jobEngine.getJobs();\r
                jobList.addAll(jobMap.values());\r
-\r
-               //Collections.sort(jobList, (o1, o2) -> compare(o1, o2));\r
        }\r
 \r
        public boolean isAllExecutionDisabled() {\r
@@ -207,6 +257,7 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
        private void onJobCreated(IJobRuntime job) {\r
                jobList.add(job);\r
                notifyChange("jobList");\r
+               updateJobsChart();\r
        }\r
 \r
        private void onJobDeleted(IJobRuntime job) {\r
@@ -219,6 +270,12 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
                        onSelect();\r
 \r
                notifyChange("jobList");\r
+               updateJobsChart();\r
+       }\r
+\r
+       private void onJobUpdated(IJobRuntime job) {\r
+               //List<IJobRuntime> savedSelectedJobs = new ArrayList<>(selectedJobs);\r
+               jobList.notifyChange(job);\r
        }\r
 \r
        //      @Command\r
@@ -232,14 +289,8 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
        //              initializeList();\r
        //      }\r
 \r
-       private void onJobUpdated(IJobRuntime job) {\r
-               //List<IJobRuntime> savedSelectedJobs = new ArrayList<>(selectedJobs);\r
-               jobList.notifyChange(job);\r
-       }\r
-\r
        @Command\r
        public void onSelect() {\r
-               logger.info("Selection changed!");\r
                notifyChange("updatePriorityDisabled");\r
        }\r
 \r
@@ -422,4 +473,8 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
                setShutdownDisabled(false);\r
                initializeList();\r
        }\r
+\r
+       private void updateJobsChart() {\r
+               chart.getSeries().addPoint(new Point(Calendar.getInstance().getTimeInMillis(), jobList.size()), true, true, true);\r
+       }\r
 }\r
index 203955062ce147a1d436ea695a169bedd9dade8b..f61d57e3bcc1a836d369c6d570f8cb4ecd9d5340 100644 (file)
@@ -92,6 +92,7 @@ public class SearchModel extends AsyncBaseModel {
        private boolean rowsExpanded = true;\r
        private boolean allSelected;\r
        private boolean itemSelected;\r
+       private int descLength;\r
        protected IItemManager itemManager = null;\r
        @Wire\r
        Timer timer;\r
@@ -200,17 +201,6 @@ public class SearchModel extends AsyncBaseModel {
 \r
        }\r
 \r
-       @Command\r
-       public void setPageSize(@BindingParam("source") Menuitem source) {\r
-               if (source.isChecked())\r
-                       return;\r
-               int pageSize = Integer.parseInt(source.getValue());\r
-               setSettingsPageSize(pageSize);\r
-               itemsGrid.setPageSize(pageSize);\r
-               itemsGrid.setActivePage(0);\r
-               SessionUtil.putUserPageSize(pageSize);\r
-       }\r
-\r
        private void clearAllFilters() {\r
                for (String filter : typeFilters.keySet()) {\r
                        typeFilters.get(filter).setChecked(false);\r
@@ -303,7 +293,7 @@ public class SearchModel extends AsyncBaseModel {
                                throw new Exception("Legalább 3 karakter keresőszöveg, a 'hiányzó proxy' beállítás vagy egy dátum kitöltése szükséges!");\r
                        }\r
 \r
-                       SearchOptions options = new SearchOptions(searchValue, searchFilters, searchFrom, searchTo, missingProxy, orderBy, orderAscending);\r
+                       SearchOptions options = new SearchOptions(searchValue, searchFilters, searchFrom, searchTo, missingProxy, descLength, orderBy, orderAscending);\r
                        searchResult = new CachedListModel(options);\r
                        searchResult.addEventListener(e -> {\r
                                if (e.getName().equals(Events.ON_ERROR)) {\r
@@ -319,11 +309,6 @@ public class SearchModel extends AsyncBaseModel {
                }\r
        }\r
 \r
-       private void handleSearchError(Exception e) {\r
-               Clients.showNotification(e.getMessage(), "error", search, "start_center", 2000);\r
-               logger.error(e);\r
-       }\r
-\r
        public void doSort(Event event) throws Exception {\r
                itemsGrid.getColumns().getChildren().forEach(c -> ((Column) c).setSortDirection("natural"));\r
                SortEvent evt = (SortEvent) event;\r
@@ -384,6 +369,10 @@ public class SearchModel extends AsyncBaseModel {
                return bottomTypeFilters;\r
        }\r
 \r
+       public int getDescLength() {\r
+               return descLength;\r
+       }\r
+\r
        public boolean getHasLowresMediaFile() {\r
                boolean ret = false;\r
                if (selectedObject != null) {\r
@@ -507,6 +496,11 @@ public class SearchModel extends AsyncBaseModel {
                return typeFilters;\r
        }\r
 \r
+       private void handleSearchError(Exception e) {\r
+               Clients.showNotification(e.getMessage(), "error", search, "start_center", 2000);\r
+               logger.error(e);\r
+       }\r
+\r
        private void highlight(ArchivedMedia am, boolean highlight) {\r
                if (am == null)\r
                        return;\r
@@ -758,6 +752,10 @@ public class SearchModel extends AsyncBaseModel {
                }\r
        }\r
 \r
+       public void setDescLength(int descLength) {\r
+               this.descLength = descLength;\r
+       }\r
+\r
        public void setItemSelected(boolean itemSelected) {\r
                this.itemSelected = itemSelected;\r
        }\r
@@ -770,6 +768,17 @@ public class SearchModel extends AsyncBaseModel {
                this.missingProxy = missingProxy;\r
        }\r
 \r
+       @Command\r
+       public void setPageSize(@BindingParam("source") Menuitem source) {\r
+               if (source.isChecked())\r
+                       return;\r
+               int pageSize = Integer.parseInt(source.getValue());\r
+               setSettingsPageSize(pageSize);\r
+               itemsGrid.setPageSize(pageSize);\r
+               itemsGrid.setActivePage(0);\r
+               SessionUtil.putUserPageSize(pageSize);\r
+       }\r
+\r
        public void setRowsExpanded(boolean rowsExpanded) {\r
                this.rowsExpanded = rowsExpanded;\r
        }\r
@@ -852,7 +861,7 @@ public class SearchModel extends AsyncBaseModel {
        private void showExternalMediaID() {\r
                String mediaID = SessionUtil.getQueryParameter(MEDIA_ID);\r
                if (mediaID != null) {\r
-                       SearchOptions options = new SearchOptions(searchValue, null, searchFrom, searchTo, false, orderBy, orderAscending);\r
+                       SearchOptions options = new SearchOptions(searchValue, null, searchFrom, searchTo, false, 0, orderBy, orderAscending);\r
                        options.setMediaId(Long.parseLong(mediaID));\r
                        searchResult = new InitializedCachedListModel(options);\r
                }\r