3.9.0 kereses alaphelyzetben, nincs leiras es file darabszam
authorelgekko <vasary@elgekko.net>
Thu, 2 Mar 2023 21:47:38 +0000 (22:47 +0100)
committerelgekko <vasary@elgekko.net>
Thu, 2 Mar 2023 21:47:38 +0000 (22:47 +0100)
30 files changed:
server/-configuration/run-mediacube-server-hirtv.launch
server/-configuration/run-mediacube-server-local.launch
server/-configuration/run-mediacube-server-mv.launch
server/-configuration/run-mediacube-server-omar.launch [deleted file]
server/-product/mediacube.product
server/-product/production/LOCAL/settings/application.yaml
server/-product/production/LOCAL/settings/jetty.xml
server/-product/production/LOCAL/settings/mediacube.yaml
server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java
server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java
server/user.jobengine.osgi.db/src/user/jobengine/search/IMediaFinder.java
server/user.jobengine.osgi.db/src/user/jobengine/search/LuceneMediaFinder.java
server/user.jobengine.osgi.db/src/user/jobengine/search/MediaFinder.java
server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportTest.java
server/user.mediacube.gui/.settings/org.eclipse.core.resources.prefs [deleted file]
server/user.mediacube.gui/index.zul
server/user.mediacube.gui/js/searchitems.js
server/user.mediacube.gui/pages/menu.zul
server/user.mediacube.gui/pages/searchitems.zul
server/user.mediacube.gui/resources/i3-label_hu.properties
server/user.mediacube.gui/src/user/jobengine/zk/model/ByteToImageConverter.java [moved from server/user.mediacube.gui/src/user/jobengine/zk/model/ByToImageConverter.java with 77% similarity]
server/user.mediacube.gui/src/user/jobengine/zk/model/CachedListModel.java
server/user.mediacube.gui/src/user/jobengine/zk/model/ColumnSizeListener.java [deleted file]
server/user.mediacube.gui/src/user/jobengine/zk/model/GridSearchModel.java
server/user.mediacube.gui/src/user/jobengine/zk/model/IndexModel.java
server/user.mediacube.gui/src/user/jobengine/zk/model/InitializedCachedListModel.java
server/user.mediacube.gui/src/user/jobengine/zk/model/ListSearchModel.java [deleted file]
server/user.mediacube.gui/src/user/jobengine/zk/model/MediaCubeConfig.java
server/user.mediacube.gui/src/user/jobengine/zk/model/TabulatorSearchModel.java
server/user.mediacube.gui/src/user/jobengine/zk/util/SessionUtil.java

index 05730822fa32b05b03a6ab86d6b3b77e7f1b4209..7da728a6e822403781c7b5af4dd177b0ac4668cf 100644 (file)
@@ -39,9 +39,6 @@
         <setEntry value="com.sun.jna@default:default"/>\r
         <setEntry value="groovy@default:default"/>\r
         <setEntry value="hu.user.zk.theme.userdark@default:default"/>\r
-        <setEntry value="io.humble.video-arch-x86_64-pc-linux-gnu6@default:default"/>\r
-        <setEntry value="io.humble.video-arch-x86_64-w64-mingw32@default:default"/>\r
-        <setEntry value="io.humble.video-noarch@default:default"/>\r
         <setEntry value="javax.annotation-api@default:default"/>\r
         <setEntry value="javax.mail@default:default"/>\r
         <setEntry value="javax.servlet-api@default:default"/>\r
index 7e57147d4c9ad08e80ef4a82f554f02fd1764983..ffcac96bebbac0cc891bf2bba07f4a431716ff65 100644 (file)
@@ -50,9 +50,6 @@
         <setEntry value="com.sun.jna@default:default"/>\r
         <setEntry value="groovy@default:default"/>\r
         <setEntry value="hu.user.zk.theme.userdark@default:default"/>\r
-        <setEntry value="io.humble.video-arch-x86_64-pc-linux-gnu6@default:default"/>\r
-        <setEntry value="io.humble.video-arch-x86_64-w64-mingw32@default:default"/>\r
-        <setEntry value="io.humble.video-noarch@default:default"/>\r
         <setEntry value="javax.annotation-api@default:default"/>\r
         <setEntry value="javax.mail@default:default"/>\r
         <setEntry value="javax.servlet-api@default:default"/>\r
index 442bcae76861abd1e9c6c8527de9a2ad65162d57..e6a4c1a480c3fce92780cb8c1b649050522c6cef 100644 (file)
@@ -12,6 +12,7 @@
     <intAttribute key="default_start_level" value="4"/>\r
     <setAttribute key="deselected_workspace_bundles"/>\r
     <booleanAttribute key="includeOptional" value="false"/>\r
+    <booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>\r
     <mapAttribute key="org.eclipse.debug.core.environmentVariables">\r
         <mapEntry key="DSMI_CONFIG" value="${workspace_loc}\-product\production\MEDIAVIVANTIS\settings\dsm.opt"/>\r
         <mapEntry key="DSMI_DIR" value="c:\apps\TSM\baclient"/>\r
@@ -49,9 +50,6 @@
         <setEntry value="com.sun.jna.platform@default:default"/>\r
         <setEntry value="com.sun.jna@default:default"/>\r
         <setEntry value="groovy@default:default"/>\r
-        <setEntry value="io.humble.video-arch-x86_64-pc-linux-gnu6@default:default"/>\r
-        <setEntry value="io.humble.video-arch-x86_64-w64-mingw32@default:default"/>\r
-        <setEntry value="io.humble.video-noarch@default:default"/>\r
         <setEntry value="javax.annotation-api@default:default"/>\r
         <setEntry value="javax.mail@default:default"/>\r
         <setEntry value="javax.servlet-api@default:default"/>\r
diff --git a/server/-configuration/run-mediacube-server-omar.launch b/server/-configuration/run-mediacube-server-omar.launch
deleted file mode 100644 (file)
index 7e9aae7..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
-<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">\r
-    <booleanAttribute key="append.args" value="true"/>\r
-    <booleanAttribute key="automaticAdd" value="false"/>\r
-    <booleanAttribute key="automaticValidate" value="true"/>\r
-    <stringAttribute key="bootstrap" value=""/>\r
-    <stringAttribute key="checked" value="[NONE]"/>\r
-    <booleanAttribute key="clearConfig" value="true"/>\r
-    <stringAttribute key="configLocation" value="${workspace_loc}\-product\production\OMAR\tmp"/>\r
-    <booleanAttribute key="default" value="true"/>\r
-    <booleanAttribute key="default_auto_start" value="false"/>\r
-    <intAttribute key="default_start_level" value="4"/>\r
-    <setAttribute key="deselected_workspace_bundles"/>\r
-    <booleanAttribute key="includeOptional" value="false"/>\r
-    <mapAttribute key="org.eclipse.debug.core.environmentVariables">\r
-        <mapEntry key="DSMI_CONFIG" value="${workspace_loc}\-product\production\OMAR\settings\dsm.opt"/>\r
-        <mapEntry key="DSMI_DIR" value="c:\Program Files\Tivoli\TSM\baclient\"/>\r
-        <mapEntry key="DSMI_LOG" value="c:\temp"/>\r
-        <mapEntry key="DSM_CONFIG" value="${workspace_loc}\-product\production\OMAR\settings\dsm.opt"/>\r
-        <mapEntry key="DSM_DIR" value="c:\Program Files\Tivoli\TSM\baclient\"/>\r
-        <mapEntry key="LD_LIBRARY_PATH" value="c:\Program Files\Tivoli\TSM\baclient\;${workspace_loc}"/>\r
-        <mapEntry key="LIBPATH" value="c:\Program Files\Tivoli\TSM\baclient\"/>\r
-        <mapEntry key="SHLIB_PATH" value="c:\Program Files\Tivoli\TSM\baclient\"/>\r
-    </mapAttribute>\r
-    <listAttribute key="org.eclipse.debug.ui.favoriteGroups">\r
-        <listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>\r
-        <listEntry value="org.eclipse.debug.ui.launchGroup.run"/>\r
-    </listAttribute>\r
-    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>\r
-    <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
-    <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>\r
-    <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
-    <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory&#13;&#10;-Dorg.eclipse.epp.logging.aeri.skipReports=true &#13;&#10;-Declipse.ignoreApp=true &#13;&#10;-Dosgi.noShutdown=true&#13;&#10;-Dlog4j.configurationFile=settings/log4j2.xml&#13;&#10;-Djetty.home=settings&#13;&#10;-Djetty.etc.config.urls=jetty.xml&#13;&#10;-Dgosh.home=configuration&#13;&#10;-Djava.io.tmpdir=tmp&#13;&#10;-Djna.library.path=${workspace_loc}&#13;&#10;-Djava.library.path=${workspace_loc}"/>\r
-    <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc}\-product\production\OMAR"/>\r
-    <stringAttribute key="pde.version" value="3.3"/>\r
-    <setAttribute key="selected_target_bundles">\r
-        <setEntry value="cglib@default:default"/>\r
-        <setEntry value="com.fasterxml.jackson.core.jackson-annotations@default:default"/>\r
-        <setEntry value="com.fasterxml.jackson.core.jackson-core@default:default"/>\r
-        <setEntry value="com.fasterxml.jackson.core.jackson-databind@default:default"/>\r
-        <setEntry value="com.fasterxml.jackson.dataformat.jackson-dataformat-yaml@default:default"/>\r
-        <setEntry value="com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default"/>\r
-        <setEntry value="com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default"/>\r
-        <setEntry value="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default"/>\r
-        <setEntry value="com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default"/>\r
-        <setEntry value="com.ibm.db2.jcc@default:default"/>\r
-        <setEntry value="com.ibm.nosql@default:default"/>\r
-        <setEntry value="com.microsoft.sqlserver.sqljdbc@default:default"/>\r
-        <setEntry value="com.sun.jna.platform@default:default"/>\r
-        <setEntry value="com.sun.jna@default:default"/>\r
-        <setEntry value="groovy@default:default"/>\r
-        <setEntry value="io.humble.video-arch-x86_64-pc-linux-gnu6@default:default"/>\r
-        <setEntry value="io.humble.video-arch-x86_64-w64-mingw32@default:default"/>\r
-        <setEntry value="io.humble.video-noarch@default:default"/>\r
-        <setEntry value="javax.annotation-api@default:default"/>\r
-        <setEntry value="javax.mail@default:default"/>\r
-        <setEntry value="javax.servlet-api@default:default"/>\r
-        <setEntry value="javax.ws.rs-api@default:default"/>\r
-        <setEntry value="jcifs@default:default"/>\r
-        <setEntry value="joda-time@default:default"/>\r
-        <setEntry value="junit@default:default"/>\r
-        <setEntry value="org.apache.aries.spifly.dynamic.bundle@default:default"/>\r
-        <setEntry value="org.apache.aries.util@default:default"/>\r
-        <setEntry value="org.apache.commons.beanutils@default:default"/>\r
-        <setEntry value="org.apache.commons.collections@default:default"/>\r
-        <setEntry value="org.apache.commons.digester@default:default"/>\r
-        <setEntry value="org.apache.commons.io@default:default"/>\r
-        <setEntry value="org.apache.commons.lang@default:default"/>\r
-        <setEntry value="org.apache.commons.net@default:default"/>\r
-        <setEntry value="org.apache.felix.gogo.command@default:default"/>\r
-        <setEntry value="org.apache.felix.gogo.runtime@default:default"/>\r
-        <setEntry value="org.apache.felix.gogo.shell@default:default"/>\r
-        <setEntry value="org.apache.httpcomponents.httpclient@default:default"/>\r
-        <setEntry value="org.apache.httpcomponents.httpcore@default:default"/>\r
-        <setEntry value="org.apache.servicemix.bundles.quartz@default:default"/>\r
-        <setEntry value="org.eclipse.equinox.common@2:true"/>\r
-        <setEntry value="org.eclipse.equinox.console@default:default"/>\r
-        <setEntry value="org.eclipse.equinox.ds@1:true"/>\r
-        <setEntry value="org.eclipse.equinox.util@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.deploy@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.http@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.io@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.osgi.boot@default:true"/>\r
-        <setEntry value="org.eclipse.jetty.schemas@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.security@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.server@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.servlet@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.util@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.webapp@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.websocket.api@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.websocket.client@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.websocket.common@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.websocket.server@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.websocket.servlet@default:default"/>\r
-        <setEntry value="org.eclipse.jetty.xml@default:default"/>\r
-        <setEntry value="org.eclipse.osgi.services@default:default"/>\r
-        <setEntry value="org.eclipse.osgi@-1:true"/>\r
-        <setEntry value="org.hamcrest.core@default:default"/>\r
-        <setEntry value="org.jboss.resteasy.client@default:default"/>\r
-        <setEntry value="org.jboss.resteasy.jaxrs-api@default:default"/>\r
-        <setEntry value="org.jboss.resteasy.jaxrs@default:default"/>\r
-        <setEntry value="org.jmock.junit4@default:default"/>\r
-        <setEntry value="org.jmock@default:default"/>\r
-        <setEntry value="org.mybatis.mybatis@default:default"/>\r
-        <setEntry value="org.objectweb.asm.commons@default:default"/>\r
-        <setEntry value="org.objectweb.asm.tree@default:default"/>\r
-        <setEntry value="org.objectweb.asm@default:default"/>\r
-        <setEntry value="org.omnifaces@default:default"/>\r
-        <setEntry value="slf4j.api@default:default"/>\r
-        <setEntry value="slf4j.simple@default:false"/>\r
-    </setAttribute>\r
-    <setAttribute key="selected_workspace_bundles">\r
-        <setEntry value="user.commons.zk@default:default"/>\r
-        <setEntry value="user.jobengine.log4j@1:true"/>\r
-        <setEntry value="user.jobengine.osgi.commons@default:true"/>\r
-        <setEntry value="user.jobengine.osgi.db@default:default"/>\r
-        <setEntry value="user.jobengine.osgi.server@default:default"/>\r
-        <setEntry value="user.jobengine.osgi.services@default:default"/>\r
-        <setEntry value="user.mediacube.gui@default:default"/>\r
-        <setEntry value="user.mediacube.metadata@default:default"/>\r
-        <setEntry value="user.tsm.client@default:default"/>\r
-    </setAttribute>\r
-    <booleanAttribute key="show_selected_only" value="false"/>\r
-    <booleanAttribute key="tracing" value="false"/>\r
-    <booleanAttribute key="useCustomFeatures" value="false"/>\r
-    <booleanAttribute key="useDefaultConfigArea" value="false"/>\r
-</launchConfiguration>\r
index 9f64903838584d6be29ffb3de821797268c8bc4e..c98528f51b6f9e82752cf738fe446455efb7b8a0 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <?pde version="3.5"?>\r
 \r
-<product name="MediaCube" uid="MediaCube" version="1.0.0" useFeatures="false" includeLaunchers="false">\r
+<product name="MediaCube" uid="MediaCube" version="1.0.0" useFeatures="false" includeLaunchers="false" autoIncludeRequirements="true">\r
 \r
    <configIni use="default">\r
       <linux>/-product/production/configuration/config.ini</linux>\r
@@ -39,9 +39,6 @@
       <plugin id="com.sun.jna.platform"/>\r
       <plugin id="groovy"/>\r
       <plugin id="hu.user.zk.theme.userdark"/>\r
-      <plugin id="io.humble.video-arch-x86_64-pc-linux-gnu6"/>\r
-      <plugin id="io.humble.video-arch-x86_64-w64-mingw32"/>\r
-      <plugin id="io.humble.video-noarch"/>\r
       <plugin id="javax.annotation-api"/>\r
       <plugin id="javax.mail"/>\r
       <plugin id="javax.servlet-api"/>\r
index ff4fd17e1300465368f192ce38e364ce59d9c221..9461a30c5fdf91964f781e0337e13e8a9d9e0d08 100644 (file)
@@ -1,18 +1,18 @@
 datasource:\r
   mediacube:\r
-    url: jdbc:db2://localvm:50000/mc\r
+    url: jdbc:db2://localvm:50000/testmc\r
     user: db2admin\r
     password: password\r
     external-indexer: true\r
     simple-search: true\r
-    login-timeout: 3\r
+    login-timeout: 5\r
     pool-size: 10\r
   mediacube-nosql:\r
-    url: jdbc:db2://localvm:50000/mc\r
+    url: jdbc:db2://localvm:50000/testmc\r
     user: db2admin\r
     password: password\r
     schema: test\r
-    login-timeout: 3\r
+    login-timeout: 5\r
   hsm: \r
     url: jdbc:db2://10.11.1.89:51500/tsmdb1\r
     user: tsminst1\r
index 5e47cacd0884cb85a638c44d539201bdb9b76518..cee4dd0261fe3a3e5a663b5ec377d94e412fb16f 100644 (file)
@@ -9,7 +9,7 @@
                                        <Ref refid="Server" />
                                </Arg>
                                <Set name="port">
-                                       <Property name="jetty.http.port" default="9080" />
+                                       <Property name="jetty.http.port" default="8080" />
                                </Set>
                        </New>
                </Arg>
index f25bc3c6121aeeb9566cd11af1fb01f4b6ba17ee..68a7c5491e405a9f96cb80ceee7a7963dcdc0d63 100644 (file)
@@ -1,5 +1,6 @@
-theme: userdark\r
+#theme: userdark\r
 jobQueuePollInterval: 1000\r
+searchResultsListCacheSize: 100\r
 disableHelp: true\r
 maestroDisabled: false\r
 alternateRetrieveSelector: true\r
@@ -24,9 +25,9 @@ bottomTypeFilters:
 - name: Reklám nyers\r
 authentication:\r
   authEnabled: true\r
-#  defaultUser: root\r
-#  defaultPassword: password\r
-  adHost: intra.mediavivantis.hu\r
+  defaultUser: root\r
+  defaultPassword: password\r
+  adHost: localhost\r
   adNonSecurePort: 3268\r
   adBaseDn: DC=intra,DC=mediavivantis,DC=hu\r
   adAdminMap:\r
index 9ecb34e354ed432c44fd2028ee89c3e9605d952c..287b933c2b3703367d976d557d617298de6ccd48 100644 (file)
@@ -24,12 +24,12 @@ import user.jobengine.db.ItemManagerData.MdType;
 import user.jobengine.db.ItemManagerData.SignalType;\r
 import user.jobengine.db.ItemManagerData.StaticTables;\r
 import user.jobengine.db.ItemManagerData.UserRight;\r
+import user.jobengine.search.IExecutionDurationNotification;\r
 import user.jobengine.search.SearchResult;\r
 \r
 /***\r
- * Adatbázis kezelő API. Az implementáció OSGI szolgáltatásként érhető el ezen\r
- * az interfészen keresztül. Az API főbb szolgáltatásai: az adatmodell\r
- * objektumainak létrehozása, módosítása, törlése az adatbázisban.\r
+ * Adatbázis kezelő API. Az implementáció OSGI szolgáltatásként érhető el ezen az interfészen keresztül. Az API főbb szolgáltatásai: az adatmodell objektumainak\r
+ * létrehozása, módosítása, törlése az adatbázisban.\r
  *\r
  * @author comtrans\r
  *\r
@@ -112,8 +112,7 @@ public interface IItemManager extends IEntityPersister {
        void executeUpdate(String query, IStatementDecorator decorator, IResultSetConsumer keysConsumer);\r
 \r
        /**\r
-        * A type paraméterből lekéri az entitás DAO objektumát, amin keresztül\r
-        * visszakapjuk az összes entitást.\r
+        * A type paraméterből lekéri az entitás DAO objektumát, amin keresztül visszakapjuk az összes entitást.\r
         *\r
         * @param type\r
         * @return\r
@@ -161,8 +160,7 @@ public interface IItemManager extends IEntityPersister {
        List<ItemType> getDynamicItemTypes();\r
 \r
        /**\r
-        * Elkéri a FileTypeDAO-tól a bemeneti paraméterként kapott névvel rendelekző\r
-        * FileType-ot.\r
+        * Elkéri a FileTypeDAO-tól a bemeneti paraméterként kapott névvel rendelekző FileType-ot.\r
         *\r
         * @param name\r
         * @return\r
@@ -197,8 +195,7 @@ public interface IItemManager extends IEntityPersister {
        List<IEntityBase> getFilteredScene(String name, boolean isChunked);\r
 \r
        /**\r
-        * A bemenő paraméterként kapott azonosító alaján lekéri a megfelelő Mappa\r
-        * objektumokat.\r
+        * A bemenő paraméterként kapott azonosító alaján lekéri a megfelelő Mappa objektumokat.\r
         *\r
         * @param id\r
         * @return\r
@@ -285,8 +282,7 @@ public interface IItemManager extends IEntityPersister {
        Shot getShot(long id);\r
 \r
        /**\r
-        * A bemenő paraméterként kapott azonosító alaján lekéri a megfelelő Szkript\r
-        * objektumokat.\r
+        * A bemenő paraméterként kapott azonosító alaján lekéri a megfelelő Szkript objektumokat.\r
         *\r
         * @param id\r
         * @return\r
@@ -323,8 +319,7 @@ public interface IItemManager extends IEntityPersister {
        MediaFile getSystemMediaFile(Media media);\r
 \r
        /**\r
-        * Elkér a StoreDAO-tól, egy olyan Rendszer tárolót, amely a lowres paraméterben\r
-        * kapott érték alapján vagy kisfelbontású videók tárolója, vagy nem.\r
+        * Elkér a StoreDAO-tól, egy olyan Rendszer tárolót, amely a lowres paraméterben kapott érték alapján vagy kisfelbontású videók tárolója, vagy nem.\r
         *\r
         * @param lowres\r
         * @return\r
@@ -334,8 +329,7 @@ public interface IItemManager extends IEntityPersister {
        List<Store> getTargetStores();\r
 \r
        /**\r
-        * Ha a bemeneti paraméter alapján létezik ilyen felhasználó, akkor true-val tér\r
-        * vissza.\r
+        * Ha a bemeneti paraméter alapján létezik ilyen felhasználó, akkor true-val tér vissza.\r
         *\r
         * @param userName\r
         * @param password\r
@@ -344,8 +338,7 @@ public interface IItemManager extends IEntityPersister {
        boolean getUser(String userName, String password);\r
 \r
        /**\r
-        * A bemeneti paraméterként megadott felhasználónév/jelszó páros alapján\r
-        * visszaad egy UserInfo objektumot.\r
+        * A bemeneti paraméterként megadott felhasználónév/jelszó páros alapján visszaad egy UserInfo objektumot.\r
         *\r
         * @param userName\r
         * @param password\r
@@ -364,8 +357,7 @@ public interface IItemManager extends IEntityPersister {
        void putDbContext(DefaultContext context);\r
 \r
        /**\r
-        * A bemeneti paraméterként kapott típus és azonosító lista alapján eltávolítja\r
-        * a megfelelő adatbázis bejegyzéseket.\r
+        * A bemeneti paraméterként kapott típus és azonosító lista alapján eltávolítja a megfelelő adatbázis bejegyzéseket.\r
         *\r
         * @param type\r
         * @param ids\r
@@ -373,8 +365,7 @@ public interface IItemManager extends IEntityPersister {
        void remove(Class<? extends IEntityBase> type, List<Long> ids);\r
 \r
        /**\r
-        * A bemeneti paraméterként kapott típus és azonosító alapján az objektumot\r
-        * eltávolítja az átmeneti tárolóból.\r
+        * A bemeneti paraméterként kapott típus és azonosító alapján az objektumot eltávolítja az átmeneti tárolóból.\r
         *\r
         * @param baseClass\r
         * @param key\r
@@ -384,8 +375,7 @@ public interface IItemManager extends IEntityPersister {
        void removeMediaTag(long tagId, long mediaId);\r
 \r
        /**\r
-        * A bemeneti paraméterként kapott típus és kulcs alapján elkéri a megfelelő\r
-        * objektumot az átmeneti tárolóból.\r
+        * A bemeneti paraméterként kapott típus és kulcs alapján elkéri a megfelelő objektumot az átmeneti tárolóból.\r
         *\r
         * @param baseClass\r
         * @param key\r
@@ -393,11 +383,8 @@ public interface IItemManager extends IEntityPersister {
         */\r
        IEntityBase retrieveCached(Class<? extends IEntityBase> baseClass, Object key);\r
 \r
-       SearchResult<ArchivedMedia> search(SearchOptions options);\r
-\r
        /**\r
-        * A bemeneti paraméterként kapott keresési feltételeknek megfelelő Anyagokat\r
-        * lekéri az adatbázisból és SearchResult objektumba csomagolva visszatér.\r
+        * A bemeneti paraméterként kapott keresési feltételeknek megfelelő Anyagokat lekéri az adatbázisból és SearchResult objektumba csomagolva visszatér.\r
         *\r
         * @param parameter\r
         * @return\r
@@ -407,8 +394,7 @@ public interface IItemManager extends IEntityPersister {
        SearchResult<Item> searchItem(String criteria, int fromResult, int toResult);\r
 \r
        /**\r
-        * A bemeneti paraméterként kapott keresési feltételeknek megfelelő\r
-        * Munkafolyamatokat lekéri az adaatbázisból.\r
+        * A bemeneti paraméterként kapott keresési feltételeknek megfelelő Munkafolyamatokat lekéri az adaatbázisból.\r
         *\r
         * @param parameter\r
         * @return\r
@@ -416,8 +402,7 @@ public interface IItemManager extends IEntityPersister {
        List<Job> searchJob(QueryObject parameter);\r
 \r
        /**\r
-        * A kapott három paraméter alapján létrehoz egy Signal objektumot,\r
-        * átkonvertálja bájt tömbbé és beteszi a Signalserver üzenetküldő sorába.\r
+        * A kapott három paraméter alapján létrehoz egy Signal objektumot, átkonvertálja bájt tömbbé és beteszi a Signalserver üzenetküldő sorába.\r
         *\r
         * @param id\r
         * @param signalType\r
@@ -435,8 +420,7 @@ public interface IItemManager extends IEntityPersister {
        boolean storeCached(Object key, IEntityBase entity);\r
 \r
        /**\r
-        * Kivétel dobása esetén a kivétel üzenetét és a keletkezés helyét becsomagolja\r
-        * egy string-be, majd átadja a logger-nek.\r
+        * Kivétel dobása esetén a kivétel üzenetét és a keletkezés helyét becsomagolja egy string-be, majd átadja a logger-nek.\r
         *\r
         * @param e\r
         */\r
@@ -464,7 +448,7 @@ public interface IItemManager extends IEntityPersister {
         */\r
        void truncate(Class<? extends IEntityBase> classInfo);\r
 \r
-       List<ArchivedMedia> getGroupChildren(ArchivedMedia master, String criteria);\r
-\r
        BasicDBObject simpleSearch(BasicDBObject searchParameters);\r
+\r
+       SearchResult<ArchivedMedia> search(SearchOptions options, IExecutionDurationNotification cb);\r
 }
\ No newline at end of file
index dd7f285aa4c764c676ef29743205574cc6d6a438..e7430ba3d3576f64b6fa4bb21fa12017c5256133 100644 (file)
@@ -49,6 +49,7 @@ import user.jobengine.db.ItemManagerData.MdType;
 import user.jobengine.db.ItemManagerData.SignalType;\r
 import user.jobengine.db.ItemManagerData.StaticTables;\r
 import user.jobengine.db.ItemManagerData.UserRight;\r
+import user.jobengine.search.IExecutionDurationNotification;\r
 import user.jobengine.search.IMediaFinder;\r
 import user.jobengine.search.MediaFinder;\r
 import user.jobengine.search.SearchResult;\r
@@ -1305,21 +1306,12 @@ public class ItemManager extends MemoryCache implements IItemManager {
        }\r
 \r
        @Override\r
-       public SearchResult<ArchivedMedia> search(SearchOptions options) {\r
+       public SearchResult<ArchivedMedia> search(SearchOptions options, IExecutionDurationNotification cb) {\r
                traceIn();\r
 \r
                IMediaFinder finder = createFinder();\r
 \r
-               SearchResult<ArchivedMedia> result = finder.search(options);\r
-               traceOut();\r
-               return result;\r
-       }\r
-\r
-       @Override\r
-       public List<ArchivedMedia> getGroupChildren(ArchivedMedia master, String criteria) {\r
-               traceIn();\r
-               IMediaFinder finder = createFinder();\r
-               List<ArchivedMedia> result = finder.getGroupChildren(master, criteria);\r
+               SearchResult<ArchivedMedia> result = finder.search(options, cb);\r
                traceOut();\r
                return result;\r
        }\r
index e808962a8cd8130f1033edaeb25a6beaf5204308..dd398c41087b0d894a8b0275d23e7ec358204b72 100644 (file)
@@ -1,14 +1,10 @@
 package user.jobengine.search;\r
 \r
-import java.util.List;\r
-\r
 import user.jobengine.db.ArchivedMedia;\r
 import user.jobengine.db.SearchOptions;\r
 \r
 public interface IMediaFinder {\r
 \r
-       SearchResult<ArchivedMedia> search(SearchOptions options);\r
-\r
-       List<ArchivedMedia> getGroupChildren(ArchivedMedia master, String criteria);\r
+       SearchResult<ArchivedMedia> search(SearchOptions options, IExecutionDurationNotification cb);\r
 \r
 }\r
index ddd71715e34681a7f7332d358cd4ba98db6fa923..ab2340684ff237ef0ce1312cc7168bb2e5d1821a 100644 (file)
@@ -1,7 +1,5 @@
 package user.jobengine.search;\r
 \r
-import java.util.List;\r
-\r
 import user.jobengine.db.ArchivedMedia;\r
 import user.jobengine.db.SearchOptions;\r
 \r
@@ -12,7 +10,7 @@ public class LuceneMediaFinder implements IMediaFinder {
 //     private String apiPath = "/search/*:*/0/10/1/1";\r
 \r
        @Override\r
-       public SearchResult<ArchivedMedia> search(SearchOptions options) {\r
+       public SearchResult<ArchivedMedia> search(SearchOptions options, IExecutionDurationNotification cb) {\r
                SearchResult<ArchivedMedia> ret = new SearchResult<ArchivedMedia>();\r
                // ResteasyClient client = new ResteasyClientBuilder().build();\r
                // if (criteria == "" || criteria == null)\r
@@ -41,10 +39,4 @@ public class LuceneMediaFinder implements IMediaFinder {
                return ret;\r
        }\r
 \r
-       @Override\r
-       public List<ArchivedMedia> getGroupChildren(ArchivedMedia master, String criteria) {\r
-               // TODO Auto-generated method stub\r
-               return null;\r
-       }\r
-\r
 }\r
index 39a465a7a79d60bfb1857816b4c43107443ec016..2056925ba933d95e8167e37e842903a20453c605 100644 (file)
@@ -5,8 +5,11 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;\r
 import java.sql.SQLException;\r
 import java.text.SimpleDateFormat;\r
+import java.time.Duration;\r
+import java.time.Instant;\r
 import java.util.ArrayList;\r
 import java.util.List;\r
+import java.util.Objects;\r
 \r
 import org.apache.ibatis.jdbc.SQL;\r
 import org.apache.logging.log4j.LogManager;\r
@@ -39,7 +42,7 @@ public class MediaFinder implements IMediaFinder {
                sql.append("SELECT ");\r
 \r
                if (options.isCountOnly()) {\r
-                       sql.append(" COUNT(1) AS NumberOfRecords");\r
+                       sql.append(" COUNT(1) AS totalCount");\r
                } else {\r
                        sql.append("i.id itemid,");\r
                        sql.append("i.title itemtitle,");\r
@@ -51,16 +54,18 @@ public class MediaFinder implements IMediaFinder {
                        sql.append("m.modified,");\r
                        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(String.format("HIGHLIGHT(md.description, '<span class=''rhl''>', '</span>', '%s') description,", criteriasPattern));\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("mf.houseid mediafilehouseid");\r
+//                     sql.append("vw_mf.mediafilecount");\r
                }\r
 \r
-               sql.append(" FROM ITEM i, MEDIA m, MEDIAFILE mf, MEDIADESCRIPTION md, VW_MEDIAFILES vw_mf, ITEMTYPE it");\r
+               sql.append(" FROM ITEM i, MEDIA m, MEDIAFILE mf, MEDIADESCRIPTION md, ITEMTYPE it");\r
+               // sql.append(" FROM ITEM i, MEDIA m, MEDIAFILE mf, MEDIADESCRIPTION md, VW_MEDIAFILES vw_mf, ITEMTYPE it");\r
                sql.append(" WHERE i.id = md.itemid AND m.id = md.mediaid AND mf.id = md.mediafileid");\r
-               sql.append(" AND m.id=vw_mf.mediaid AND m.itemTypeId = it.id");\r
+//             sql.append(" AND m.id=vw_mf.mediaid AND m.itemTypeId = it.id");\r
+               sql.append(" AND m.itemTypeId = it.id");\r
 \r
                StringBuilder criteriaForType = options.getCriteriaForType();\r
                if (criteriaForType != null) {\r
@@ -97,13 +102,13 @@ public class MediaFinder implements IMediaFinder {
 \r
                if (options.getTo() != null)\r
                        sql.append(String.format(" AND m.creation < '%s'", df.format(options.getTo())));\r
-               if (options.isMissingProxy())\r
-                       sql.append(" AND vw_mf.mediafilecount=1");\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
-               if (!options.isCountOnly() && (options.getToResult() != 0)) {\r
+               if (!options.isCountOnly()) {\r
                        sql.append(" ORDER BY ");\r
                        if (options.getOrderBy() == null) {\r
                                sql.append("itemtitle desc, mediaitemtypeid");\r
@@ -111,6 +116,9 @@ public class MediaFinder implements IMediaFinder {
                                sql.append(options.getOrderBy());\r
                                sql.append(options.isOrderAscending() ? " ASC" : " DESC");\r
                        }\r
+               }\r
+\r
+               if (!options.isCountOnly() && (options.getToResult() != 0)) {\r
 \r
                        sql.append(" LIMIT " + (options.getToResult() - options.getFromResult()));\r
                        sql.append(" OFFSET " + options.getFromResult());\r
@@ -131,117 +139,100 @@ public class MediaFinder implements IMediaFinder {
                return st;\r
        }\r
 \r
-       private PreparedStatement createGroupingChildrenStatement(Connection connection, String fileName, String criteria) throws SQLException {\r
-               SQL sql = new SQL();\r
-               sql.SELECT("vi.itemid", "vi.itemtitle", "vi.mediaid", "vi.mediatitle", "vi.mediaarchived archived", "vi.mediacreation creation",\r
-                               "vi.mediacreated created", "vi.mediamodified modified", "vi.medialength length", "vi.mediaitemtypeid", "vi.mediaitemtypename",\r
-                               "vi.mediahouseid", "vi.mediafilehouseid", "vf.mediafilecount");\r
-\r
-               sql.FROM("VW_ITEMS_WITH_PATH vi", "VW_MEDIAFILES vf");\r
-               sql.WHERE("vf.mediaid = vi.mediaid");\r
-               sql.AND();\r
-               sql.WHERE(String.format("vi.mediarelativepath = '%s'", fileName));\r
-               sql.ORDER_BY("vi.mediacreation DESC");\r
-               String query = sql.toString();\r
-               logger.info(query);\r
-\r
-               return connection.prepareStatement(sql.toString(), ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);\r
-       }\r
-\r
-       private PreparedStatement createGroupingStatement(Connection connection, String criteria, SearchOptions options) throws Exception {\r
-               boolean simpleSearch = manager.getSystemConfig().value("datasource.mediacube.simple-search", true);\r
-               String criteriasPattern = getCriteriasRegexPattern(criteria);\r
-\r
-               SQL innerSql = new SQL();\r
-               innerSql.SELECT("max(vi.mediaid)");\r
-               innerSql.FROM("VW_ITEMS_WITH_PATH vi", "MEDIADESCRIPTION md");\r
-               innerSql.WHERE("vi.mediafileid = md.mediafileid");\r
-\r
-               if (simpleSearch) {\r
-                       // TODO ezen az agon nem jo!!!!!\r
-                       String simpleTextCriteria = formatSimpleSearchValue(criteria);\r
-                       if (simpleTextCriteria != null && simpleTextCriteria.trim().length() > 0) {\r
-                               innerSql.AND();\r
-                               innerSql.WHERE("(");\r
-                               innerSql.WHERE(String.format("%s LIKE '%%%s%%'", "vi.mediatitle", simpleTextCriteria));\r
-                               innerSql.OR();\r
-                               innerSql.WHERE(String.format("%s LIKE '%%%s%%'", "vi.itemtitle", simpleTextCriteria));\r
-                               innerSql.OR();\r
-                               innerSql.WHERE(String.format("%s LIKE '%%%s%%'", "vi.mediarelativepath", simpleTextCriteria));\r
-                               innerSql.WHERE(")");\r
-                       }\r
-               } else {\r
-                       String textCriteria = formatSearchValue(criteria);\r
-                       if (textCriteria != null && textCriteria.trim().length() > 0) {\r
-                               innerSql.AND();\r
-                               innerSql.WHERE(String.format("CONTAINS(md.description, '%s') >= 1", textCriteria));\r
-                       }\r
-               }\r
-               innerSql.GROUP_BY("vi.mediarelativepath");\r
-\r
-               SQL mainSql = new SQL();\r
-               if (options.isCountOnly())\r
-                       mainSql.SELECT("COUNT(1) AS NumberOfRecords");\r
-               else\r
-                       mainSql.SELECT("vi.itemid", "vi.itemtitle", "vi.mediaid", "vi.mediatitle", "vi.mediarelativepath", "vi.mediaarchived", "vi.mediacreation",\r
-                                       "vi.medialength", "vf.mediafilecount",\r
-                                       String.format("HIGHLIGHT(md.description, '<span class=''rhl''>', '</span>', '%s') description", criteriasPattern));\r
-\r
-               mainSql.FROM("VW_ITEMS_WITH_PATH vi", "VW_MEDIAFILES vf", "MEDIADESCRIPTION md");\r
-               mainSql.WHERE("vf.mediaid = vi.mediaid");\r
-               mainSql.AND();\r
-               mainSql.WHERE("vi.mediafileid = md.mediafileid");\r
-               mainSql.AND();\r
-               mainSql.WHERE(String.format("vi.mediaid IN (\r\n%s\r\n)", innerSql.toString()));\r
-\r
-               StringBuilder criteriaForType = options.getCriteriaForType();\r
-               if (criteriaForType != null) {\r
-                       mainSql.AND();\r
-                       mainSql.WHERE(String.format("vi.mediaitemtypeid IN (%s)", criteriaForType.toString()));\r
-               }\r
-\r
-               StringBuilder criteriaForTag = options.getCriteriaForTag();\r
-               if (criteriaForTag != null) {\r
-                       SQL tagSql = new SQL();\r
-                       tagSql.SELECT("mediaid");\r
-                       tagSql.FROM("MEDIATAGS");\r
-                       tagSql.WHERE(String.format("vi.mediaitemtypeid IN (%s)", criteriaForTag.toString()));\r
-\r
-                       mainSql.AND();\r
-                       mainSql.WHERE(String.format("vi.mediaid IN (%s)", tagSql.toString()));\r
-               }\r
-\r
-               if (options.getFrom() != null) {\r
-                       mainSql.AND();\r
-                       mainSql.WHERE(String.format("vi.mediacreation > '%s'", df.format(options.getFrom())));\r
-               }\r
-\r
-               if (options.getTo() != null) {\r
-                       mainSql.AND();\r
-                       mainSql.WHERE(String.format("vi.mediacreation < '%s'", df.format(options.getTo())));\r
-               }\r
-\r
-               if (options.isMissingProxy()) {\r
-                       mainSql.AND();\r
-                       mainSql.WHERE("vf.mediafilecount = 1");\r
-               }\r
-\r
-               if (options.getDescLength() > 0) {\r
-                       mainSql.AND();\r
-                       mainSql.WHERE(String.format("LENGTH(vi.mediadescription) < %s", options.getDescLength()));\r
-               }\r
-\r
-               if (!options.isCountOnly() && (options.getToResult() != 0)) {\r
-                       mainSql.ORDER_BY("vi.mediacreation DESC");\r
-                       mainSql.LIMIT((options.getToResult() - options.getFromResult()));\r
-                       mainSql.OFFSET(options.getFromResult());\r
-               }\r
-\r
-               String query = mainSql.toString();\r
-               logger.info(query);\r
-               PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);\r
-               return st;\r
-       }\r
+//     private PreparedStatement createGroupingStatement(Connection connection, String criteria, SearchOptions options) throws Exception {\r
+//             boolean simpleSearch = manager.getSystemConfig().value("datasource.mediacube.simple-search", true);\r
+//             String criteriasPattern = getCriteriasRegexPattern(criteria);\r
+//\r
+//             SQL innerSql = new SQL();\r
+//             innerSql.SELECT("max(vi.mediaid)");\r
+//             innerSql.FROM("VW_ITEMS_WITH_PATH vi", "MEDIADESCRIPTION md");\r
+//             innerSql.WHERE("vi.mediafileid = md.mediafileid");\r
+//\r
+//             if (simpleSearch) {\r
+//                     // TODO ezen az agon nem jo!!!!!\r
+//                     String simpleTextCriteria = formatSimpleSearchValue(criteria);\r
+//                     if (simpleTextCriteria != null && simpleTextCriteria.trim().length() > 0) {\r
+//                             innerSql.AND();\r
+//                             innerSql.WHERE("(");\r
+//                             innerSql.WHERE(String.format("%s LIKE '%%%s%%'", "vi.mediatitle", simpleTextCriteria));\r
+//                             innerSql.OR();\r
+//                             innerSql.WHERE(String.format("%s LIKE '%%%s%%'", "vi.itemtitle", simpleTextCriteria));\r
+//                             innerSql.OR();\r
+//                             innerSql.WHERE(String.format("%s LIKE '%%%s%%'", "vi.mediarelativepath", simpleTextCriteria));\r
+//                             innerSql.WHERE(")");\r
+//                     }\r
+//             } else {\r
+//                     String textCriteria = formatSearchValue(criteria);\r
+//                     if (textCriteria != null && textCriteria.trim().length() > 0) {\r
+//                             innerSql.AND();\r
+//                             innerSql.WHERE(String.format("CONTAINS(md.description, '%s') >= 1", textCriteria));\r
+//                     }\r
+//             }\r
+//             innerSql.GROUP_BY("vi.mediarelativepath");\r
+//\r
+//             SQL mainSql = new SQL();\r
+//             if (options.isCountOnly())\r
+//                     mainSql.SELECT("COUNT(1) AS NumberOfRecords");\r
+//             else\r
+//                     mainSql.SELECT("vi.itemid", "vi.itemtitle", "vi.mediaid", "vi.mediatitle", "vi.mediarelativepath", "vi.mediaarchived", "vi.mediacreation",\r
+//                                     "vi.medialength", "vf.mediafilecount",\r
+//                                     String.format("HIGHLIGHT(md.description, '<span class=''rhl''>', '</span>', '%s') description", criteriasPattern));\r
+//\r
+//             mainSql.FROM("VW_ITEMS_WITH_PATH vi", "VW_MEDIAFILES vf", "MEDIADESCRIPTION md");\r
+//             mainSql.WHERE("vf.mediaid = vi.mediaid");\r
+//             mainSql.AND();\r
+//             mainSql.WHERE("vi.mediafileid = md.mediafileid");\r
+//             mainSql.AND();\r
+//             mainSql.WHERE(String.format("vi.mediaid IN (\r\n%s\r\n)", innerSql.toString()));\r
+//\r
+//             StringBuilder criteriaForType = options.getCriteriaForType();\r
+//             if (criteriaForType != null) {\r
+//                     mainSql.AND();\r
+//                     mainSql.WHERE(String.format("vi.mediaitemtypeid IN (%s)", criteriaForType.toString()));\r
+//             }\r
+//\r
+//             StringBuilder criteriaForTag = options.getCriteriaForTag();\r
+//             if (criteriaForTag != null) {\r
+//                     SQL tagSql = new SQL();\r
+//                     tagSql.SELECT("mediaid");\r
+//                     tagSql.FROM("MEDIATAGS");\r
+//                     tagSql.WHERE(String.format("vi.mediaitemtypeid IN (%s)", criteriaForTag.toString()));\r
+//\r
+//                     mainSql.AND();\r
+//                     mainSql.WHERE(String.format("vi.mediaid IN (%s)", tagSql.toString()));\r
+//             }\r
+//\r
+//             if (options.getFrom() != null) {\r
+//                     mainSql.AND();\r
+//                     mainSql.WHERE(String.format("vi.mediacreation > '%s'", df.format(options.getFrom())));\r
+//             }\r
+//\r
+//             if (options.getTo() != null) {\r
+//                     mainSql.AND();\r
+//                     mainSql.WHERE(String.format("vi.mediacreation < '%s'", df.format(options.getTo())));\r
+//             }\r
+//\r
+//             if (options.isMissingProxy()) {\r
+//                     mainSql.AND();\r
+//                     mainSql.WHERE("vf.mediafilecount = 1");\r
+//             }\r
+//\r
+//             if (options.getDescLength() > 0) {\r
+//                     mainSql.AND();\r
+//                     mainSql.WHERE(String.format("LENGTH(vi.mediadescription) < %s", options.getDescLength()));\r
+//             }\r
+//\r
+//             if (!options.isCountOnly() && (options.getToResult() != 0)) {\r
+//                     mainSql.ORDER_BY("vi.mediacreation DESC");\r
+//                     mainSql.LIMIT((options.getToResult() - options.getFromResult()));\r
+//                     mainSql.OFFSET(options.getFromResult());\r
+//             }\r
+//\r
+//             String query = mainSql.toString();\r
+//             logger.info(query);\r
+//             PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);\r
+//             return st;\r
+//     }\r
 \r
        private String formatSearchValue(String value) {\r
                String[] specials = new String[] { ":", "?", "%", "(", ")" };\r
@@ -268,7 +259,7 @@ public class MediaFinder implements IMediaFinder {
                return sb.toString();\r
        }\r
 \r
-       private long getNumberOfRecords(SearchOptions options) {\r
+       private long getTotalCount(SearchOptions options) {\r
                long start = System.currentTimeMillis();\r
                long result = 0;\r
 \r
@@ -278,19 +269,14 @@ public class MediaFinder implements IMediaFinder {
                DefaultContext context = manager.getDbContext();\r
                Connection connection = context.getConnection();\r
                try {\r
-                       logger.info("Checking size");\r
+                       logger.info("Query total count");\r
                        options.setCountOnly(true);\r
                        // creating a query for checking resultset size\r
-\r
-                       if (options.isGrouping())\r
-                               st = createGroupingStatement(connection, options.getText(), options);\r
-                       else\r
-                               st = createStatement(connection, options.getText(), options);\r
+                       st = createStatement(connection, options.getText(), options);\r
                        rs = st.executeQuery();\r
                        if (rs.next()) {\r
-                               result = rs.getLong("NumberOfRecords");\r
+                               result = rs.getLong("totalCount");\r
                        }\r
-\r
                        connection.commit();\r
                } catch (Exception e) {\r
                        try {\r
@@ -329,23 +315,13 @@ public class MediaFinder implements IMediaFinder {
 \r
                try {\r
                        options.setCountOnly(false);\r
-                       if (options.isGrouping())\r
-                               st = createGroupingStatement(connection, options.getText(), options);\r
-                       else\r
-                               st = createStatement(connection, options.getText(), options);\r
+                       st = createStatement(connection, options.getText(), options);\r
                        rs = st.executeQuery();\r
 \r
                        List<ArchivedMedia> resultList = null;\r
                        while (rs.next()) {\r
-\r
-                               ArchivedMedia am = null;\r
-                               if (options.isGrouping())\r
-                                       am = createGroupedArchiveMedia(rs, searchResults);\r
-                               else {\r
-                                       am = createArchiveMedia(rs);\r
-                                       am.setRelevant(rs.getString("description"));\r
-                               }\r
-\r
+                               ArchivedMedia am = createArchiveMedia(rs);\r
+                               // am.setRelevant(rs.getString("description"));\r
                                if (resultList == null) {\r
                                        resultList = new ArrayList<>();\r
                                        searchResults.setItems(resultList);\r
@@ -387,29 +363,6 @@ public class MediaFinder implements IMediaFinder {
                return result;\r
        }\r
 \r
-       private ArchivedMedia createGroupedArchiveMedia(ResultSet rs, SearchResult<ArchivedMedia> searchResult) throws SQLException {\r
-               Item item = new Item();\r
-               item.setId(rs.getLong("itemid"));\r
-               item.setTitle(rs.getString("itemtitle"));\r
-\r
-               Media media = new Media();\r
-               media.setMediaFilesName(rs.getString("mediarelativepath"));\r
-               media.setId(rs.getLong("mediaid"));\r
-               media.setTitle(rs.getString("mediatitle"));\r
-\r
-               media.setCreation(rs.getTimestamp("mediacreation"));\r
-               media.setArchived(rs.getTimestamp("mediaarchived"));\r
-               media.setLength(rs.getLong("medialength"));\r
-               media.setMediaFilesCount(rs.getInt("mediafilecount"));\r
-\r
-               ArchivedMedia am = new ArchivedMedia();\r
-               am.setMedia(media);\r
-               am.setItem(item);\r
-               am.setRelevant(rs.getString("description"));\r
-               return am;\r
-\r
-       }\r
-\r
        private ArchivedMedia createArchiveMedia(ResultSet rs) throws SQLException {\r
                ItemType it = new ItemType();\r
                it.setId(rs.getLong("mediaitemtypeid"));\r
@@ -431,8 +384,9 @@ public class MediaFinder implements IMediaFinder {
                media.setModified(rs.getTimestamp("modified"));\r
                media.setArchived(rs.getTimestamp("archived"));\r
                media.setLength(rs.getLong("length"));\r
-               media.setMediaFilesCount(rs.getInt("mediafilecount"));\r
+               // media.setMediaFilesCount(rs.getInt("mediafilecount"));\r
                media.setMediaFilesName(rs.getString("mediafilehouseid"));\r
+               media.setMediaFilesCount(1);\r
 \r
                ArchivedMedia am = new ArchivedMedia();\r
                am.setMedia(media);\r
@@ -441,12 +395,13 @@ public class MediaFinder implements IMediaFinder {
        }\r
 \r
        @Override\r
-       public SearchResult<ArchivedMedia> search(SearchOptions options) {\r
+       public SearchResult<ArchivedMedia> search(SearchOptions options, IExecutionDurationNotification cb) {\r
+               Instant started = Instant.now();\r
                manager.traceIn();\r
                SearchResult<ArchivedMedia> result = new SearchResult<>();\r
 \r
                if (options.getFromResult() == 0) {\r
-                       long numberOfRecords = getNumberOfRecords(options);\r
+                       long numberOfRecords = getTotalCount(options);\r
                        logger.info("Number of records {}", numberOfRecords);\r
 \r
                        result.setItemCount(numberOfRecords);\r
@@ -454,54 +409,12 @@ public class MediaFinder implements IMediaFinder {
 \r
                getSearchResults(result, options);\r
                manager.traceOut();\r
+               Instant finished = Instant.now();\r
+               if (Objects.nonNull(cb))\r
+                       cb.notify(Duration.between(started, finished));\r
                return result;\r
        }\r
 \r
-       @Override\r
-       public List<ArchivedMedia> getGroupChildren(ArchivedMedia master, String criteria) {\r
-               ResultSet rs = null;\r
-               PreparedStatement st = null;\r
-\r
-               DefaultContext context = manager.getDbContext();\r
-               Connection connection = context.getConnection();\r
-\r
-               List<ArchivedMedia> resultList = null;\r
-               try {\r
-                       st = createGroupingChildrenStatement(connection, master.getMedia().getMediaFilesName(), criteria);\r
-                       rs = st.executeQuery();\r
-\r
-                       while (rs.next()) {\r
-\r
-                               ArchivedMedia am = createArchiveMedia(rs);\r
-                               if (resultList == null)\r
-                                       resultList = new ArrayList<>();\r
-                               resultList.add(am);\r
-                       }\r
-                       connection.commit();\r
-               } catch (Exception e) {\r
-                       try {\r
-                               connection.rollback();\r
-                       } catch (Exception e1) {\r
-                               logger.throwing(e1);\r
-                       }\r
-                       manager.throwError(e);\r
-               } finally {\r
-                       try {\r
-                               if (rs != null)\r
-                                       rs.close();\r
-                       } catch (Exception e1) {\r
-                       }\r
-                       try {\r
-                               if (st != null)\r
-                                       st.close();\r
-                       } catch (Exception e1) {\r
-                       }\r
-\r
-                       manager.putDbContext(context);\r
-               }\r
-               return resultList;\r
-       }\r
-\r
        public BasicDBObject simpleSearch(BasicDBObject searchParameters) {\r
                BasicDBObject result = new BasicDBObject();\r
                BasicDBList items = new BasicDBList();\r
index d034aef60c364f64883d4db7b246a9910d379d2a..5472b3d5bed1ddc09777b705d984e5474abf3e87 100644 (file)
@@ -34,17 +34,17 @@ public class SupportTest {
 \r
        @BeforeClass\r
        static public void setUpConnection() {\r
-               //              System.setProperty("jobengine.octopus.rundowns.name", "rundowns180620");\r
-               //              System.setProperty("jobengine.octopus.stories.name", "stories180620");\r
-               //              System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620");\r
+               // System.setProperty("jobengine.octopus.rundowns.name", "rundowns180620");\r
+               // System.setProperty("jobengine.octopus.stories.name", "stories180620");\r
+               // System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620");\r
                //\r
-               //              System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mccache:retrieveMessagesFromServerOnGetMessage=true;");\r
-               //              System.setProperty("jobengine.nosql.db.user", "db2admin");\r
-               //              System.setProperty("jobengine.nosql.db.password", "password");\r
-               //              System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
-               //              System.setProperty(ItemManager.DBUSERNAME, "db2admin");\r
-               //              System.setProperty(ItemManager.DBPASSWORD, "password");\r
-               //              System.setProperty(LogUtils.LOGLEVEL, "INFO");\r
+               // System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mccache:retrieveMessagesFromServerOnGetMessage=true;");\r
+               // System.setProperty("jobengine.nosql.db.user", "db2admin");\r
+               // System.setProperty("jobengine.nosql.db.password", "password");\r
+               // System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+               // System.setProperty(ItemManager.DBUSERNAME, "db2admin");\r
+               // System.setProperty(ItemManager.DBPASSWORD, "password");\r
+               // System.setProperty(LogUtils.LOGLEVEL, "INFO");\r
 \r
                manager = new ItemManager();\r
                manager.connect();\r
@@ -60,21 +60,21 @@ public class SupportTest {
                System.out.println(FileSystemUtils.freeSpaceKb("/opt"));\r
        }\r
 \r
-       //      @Test\r
-       //      public void getLocalTargetStoreUriByFreeSpace() throws Exception {\r
-       //              Store s = new Store();\r
-       //              for (int i = 0; i < 5; i++) {\r
-       //                      StoreUri su = new StoreUri();\r
-       //                      su.setProtocol(RemoteStoreProtocol.LOCAL);\r
-       //                      su.setPriority(i);\r
-       //                      su.setUri("/opt");\r
-       //                      su.setTarget(true);\r
-       //                      s.appendStoreUri(su);\r
-       //              }\r
+       // @Test\r
+       // public void getLocalTargetStoreUriByFreeSpace() throws Exception {\r
+       // Store s = new Store();\r
+       // for (int i = 0; i < 5; i++) {\r
+       // StoreUri su = new StoreUri();\r
+       // su.setProtocol(RemoteStoreProtocol.LOCAL);\r
+       // su.setPriority(i);\r
+       // su.setUri("/opt");\r
+       // su.setTarget(true);\r
+       // s.appendStoreUri(su);\r
+       // }\r
        //\r
-       //              StoreUri uri = s.getLocalTargetStoreUriByFreeSpace();\r
-       //              assertEquals(uri.getPriority(), 0);\r
-       //      }\r
+       // StoreUri uri = s.getLocalTargetStoreUriByFreeSpace();\r
+       // assertEquals(uri.getPriority(), 0);\r
+       // }\r
 \r
        @Test\r
        public void mergeItemStructure() throws Exception {\r
@@ -114,6 +114,6 @@ public class SupportTest {
                List<String> dummy = null;\r
                LuceneMediaFinder luceneSearch = new LuceneMediaFinder();\r
                // luceneSearch.search(item.getDescription(), dummy, "", true, 1, 10);\r
-               luceneSearch.search(null);\r
+               luceneSearch.search(null, null);\r
        }\r
 }\r
diff --git a/server/user.mediacube.gui/.settings/org.eclipse.core.resources.prefs b/server/user.mediacube.gui/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644 (file)
index 151d9f7..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-eclipse.preferences.version=1\r
-encoding//pages/jobselector.zul=UTF-8\r
-encoding//pages/login.zul=UTF-8\r
-encoding//pages/searchitems/listresults.zul=UTF-8\r
-encoding//resources/i3-label_hu.properties=UTF-8\r
-encoding//src/user/jobengine/zk/model/ListSearchModel.java=UTF-8\r
-encoding//src/user/jobengine/zk/model/MaestroJobListModel.java=UTF-8\r
-encoding//src/user/jobengine/zk/model/MissingMaterialsModel.java=UTF-8\r
-encoding//src/user/jobengine/zk/model/RetrieveBatchSelectorModel.java=UTF-8\r
-encoding//src/user/jobengine/zk/model/RetrieveSelectorModel.java=UTF-8\r
-encoding//src/user/jobengine/zk/model/TargetsListModel.java=UTF-8\r
-encoding//src/user/jobengine/zk/util/ADHandler.java=UTF-8\r
-encoding//src/user/jobengine/zk/util/SessionUtil.java=UTF-8\r
-encoding/<project>=UTF-8\r
index 76205d89a8d92fa3673f07c2d0afc054ccaca718..f1bb3a304dea61489eaa33e442792c4b2f8166e0 100644 (file)
@@ -6,7 +6,7 @@
 \r
 <!DOCTYPE xml>\r
 <zk xmlns:w="http://www.zkoss.org/2005/zk/client">\r
-<!--   <style src="/css/archivum.css" /> -->\r
+       <style src="/css/archivum.css" />\r
        <zscript>\r
                <![CDATA[\r
                // Chrome F5 bug workaround (miscalculates 100% width on second refresh)\r
                                }\r
                        });//zk.override\r
                });//zk.afterLoad\r
+               \r
+               function logToClient(message) {\r
+                       console.log(message);\r
+               }\r
        </script>\r
        \r
 <!--   onClientInfo="onClientInfo(event)" -->\r
index a14fe5d0924655d75247fb2bb2626d3426121bcd..27c2f0e8e551a56f4ed5548578f10c7120deee30 100644 (file)
@@ -266,15 +266,15 @@ var filterTagify = new Tagify(document.querySelector('textarea[name=filterTags]'
 });\r
 \r
 function addAllTags(tags) {\r
-       console.log("Adding all tags", tags);\r
+       //console.log("Adding all tags", tags);\r
        filterTagify.settings.whitelist = tags;\r
        mediaTagify.settings.whitelist = tags;\r
 }\r
 \r
 function addMediaTags(tags) {\r
-       console.log("Clear selected tags");\r
+       //console.log("Clear selected tags");\r
        mediaTagify.removeAllTags();\r
-       console.log("Adding selected tags", tags);\r
+       //console.log("Adding selected tags", tags);\r
        mediaTagify.addTags(tags);\r
 }\r
 \r
index 6a2bffd3f543544d4a7c03bc89d587b1c173c784..365b35ab984d21638d8212d896af8b5e7bff8376 100644 (file)
                                </menupopup>\r
                        </menu>\r
                        <menuitem label="Mini monitor" onClick="@command('createFloatingJobMonitor')" />\r
-                       <menu label="Megjelenés">\r
-                               <menupopup>\r
-                                       <menuitem label="Világos" onClick="@command('applyTheme', name='silvertail')" />\r
-                                       <menuitem label="Sötét" onClick="@command('applyTheme', action='userdark')" />\r
-                               </menupopup>\r
-                       </menu>\r
+<!--                   <menu label="Megjelenés"> -->\r
+<!--                           <menupopup> -->\r
+<!--                                   <menuitem label="Világos" onClick="@command('applyTheme', name='silvertail')" /> -->\r
+<!--                                   <menuitem label="Sötét" onClick="@command('applyTheme', action='userdark')" /> -->\r
+<!--                           </menupopup> -->\r
+<!--                   </menu> -->\r
 \r
                        <menuitem id="basketIMenuItem" label="@load(lm.basketMenuLabel)" iconSclass="z-icon-shopping-cart" \r
                                style="float: right" onClick="@command('showBasket')" disabled="false" />\r
index 57b3f4a91b742ebb3995e9f9f5a1e27a229689b4..8e7baa852441090fd7f53ea7672aab1123e43cf1 100644 (file)
@@ -15,7 +15,7 @@
 <!--   <h:script src="https://vjs.zencdn.net/7.18.1/video.min.js"/> -->\r
 \r
        <style src="/css/video-js.css" />\r
-<!--   <style src="/css/searchitems.css" /> -->\r
+       <style src="/css/searchitems.css" />\r
        <style src="/css/tagify.css" />\r
        \r
        <h:script src="/js/tagify.min.js" />\r
@@ -39,7 +39,7 @@
        <!-- csak igy jo a list sebessege -->\r
 \r
        <div id="scdiv" width="100%" height="100%" viewModel="@id('vm') @init('user.jobengine.zk.model.GridSearchModel')">\r
-               <timer id="timer" delay="500" repeats="false" onTimer="@command('uiTick')" />\r
+               <timer id="timer" delay="500" repeats="true" onTimer="@command('uiTick')" />\r
                <div id="tagListener" onChange="@command('onTagChanged')" />\r
 \r
                <borderlayout width="100%" height="100%">\r
                                        \r
                                        <groupbox vflex="true" closable="false">\r
                                        \r
-                                               <tabbox id="resultsTab" vflex="true" hflex="true" orient="top">\r
-                                                       <tabs visible="true">\r
-                                                               <tab id="tab0" label="Lista"  />\r
-                                                               <tab id="tab1" label="Fa" />\r
-                                                               <tab id="tab2" label="Villám" selected="true" />\r
-                                                       </tabs>\r
-                                                       <tabpanels>\r
-                                                               <tabpanel>\r
-                                                                       <search-results />\r
-                                                               </tabpanel>                                     \r
-                                                               <tabpanel>\r
-                                                                       <grouped-search-results />\r
-                                                               </tabpanel>                                     \r
-                                                               <tabpanel>\r
-                                                                       <tabulator-search-results />\r
-                                                               </tabpanel>                                     \r
-                                                       </tabpanels>\r
-                                               </tabbox>                                       \r
+                                               <search-results />\r
+<!--                                           <tabbox id="resultsTab" vflex="true" hflex="true" orient="top"> -->\r
+<!--                                                   <tabs visible="true"> -->\r
+<!--                                                           <tab id="tab0" label="Lista"  /> -->\r
+<!--                                                           <tab id="tab1" label="Fa" /> -->\r
+<!--                                                           <tab id="tab2" label="Villám" selected="true" /> -->\r
+<!--                                                   </tabs> -->\r
+<!--                                                   <tabpanels> -->\r
+<!--                                                           <tabpanel> -->\r
+<!--                                                                   <search-results /> -->\r
+<!--                                                           </tabpanel>                                      -->\r
+<!--                                                           <tabpanel> -->\r
+<!--                                                                   <grouped-search-results /> -->\r
+<!--                                                           </tabpanel>                                      -->\r
+<!--                                                           <tabpanel> -->\r
+<!--                                                                   <tabulator-search-results /> -->\r
+<!--                                                           </tabpanel>                                      -->\r
+<!--                                                   </tabpanels> -->\r
+<!--                                           </tabbox>                                        -->\r
                                        \r
                                        </groupbox>\r
                                </div>\r
@@ -78,7 +79,9 @@
                                <borderlayout height="100%" width="100%">\r
                                        <north border="none" size="60%" splittable="true" minsize="250" collapsible="true">\r
                                                <div align="center" height="100%" width="100%">\r
-                                                       <h:video-js id="myVideoDiv" class="video-js vjs-big-play-centered"\r
+                                                       <h:video-js id="myVideoDiv" \r
+                                                               class="video-js vjs-big-play-centered"\r
+                                                               data-setup='{"inactivityTimeout": 0}'\r
                                                                style="width: 100%;height: 100%">\r
                                                        </h:video-js>\r
                                                        <div id="videoListener" onCreateBreakPoint="@command('onCreateBreakPoint')"/>\r
index cce7c797a12cd2c6e29ae78b34f41a5531cf8d33..ce48119792df9ae50f25a46ecb1b96d139779aad 100644 (file)
@@ -1,4 +1,5 @@
-version=2.8.2\r
+version=2.9.0\r
+#2.9.0 Eredeti kereses optimalizalva \r
 #2.8.2 Kereses csoportos listazasa \r
 #2.8.0 Keresofelulet modositas (hardkodolt)\r
 #2.7.9 Keresofelulet modositas (hardkodolt)\r
similarity index 77%
rename from server/user.mediacube.gui/src/user/jobengine/zk/model/ByToImageConverter.java
rename to server/user.mediacube.gui/src/user/jobengine/zk/model/ByteToImageConverter.java
index 167a48e624446579aa3fcd2573778e55cadec4c3..60ada9415409517e5c8351199194a3911c45260d 100644 (file)
@@ -8,15 +8,12 @@ import org.zkoss.image.AImage;
 import org.zkoss.io.Files;\r
 import org.zkoss.zul.Image;\r
 \r
-public class ByToImageConverter implements Converter<AImage, byte[], Image> {\r
-\r
-       private byte[] noImg = null;\r
-\r
-       public ByToImageConverter() {\r
+public class ByteToImageConverter implements Converter<AImage, byte[], Image> {\r
+       private static byte[] noImg;\r
+       static {\r
                try {\r
-                       noImg = Files.readAll(getClass().getResourceAsStream("/img/ic_play_big.png"));\r
+                       noImg = Files.readAll(ByteToImageConverter.class.getResourceAsStream("/img/ic_play_big.png"));\r
                } catch (IOException e) {\r
-                       e.printStackTrace();\r
                }\r
        }\r
 \r
index d79b7bccec8d4cc09b0684cfdc7ab5346443f11e..6c2b29c302910a56c711bcc36eb657fb70e1be81 100644 (file)
@@ -17,30 +17,35 @@ import user.jobengine.db.IItemManager;
 import user.jobengine.db.Item;\r
 import user.jobengine.db.ItemManager;\r
 import user.jobengine.db.SearchOptions;\r
+import user.jobengine.search.IExecutionDurationNotification;\r
 import user.jobengine.search.SearchResult;\r
+import user.jobengine.zk.util.SessionUtil;\r
 \r
 /**\r
- * Cache-elt modell nagy listakhoz. Cacheli a dokumentumokat a megadott\r
- * meretben. Az utoljara elkert index +- cacheSize/2\r
+ * Cache-elt modell nagy listakhoz. Cacheli a dokumentumokat a megadott meretben. Az utoljara elkert index +- cacheSize/2\r
  */\r
 public class CachedListModel extends ListModelList<ArchivedMedia> {\r
        private static final long serialVersionUID = 1L;\r
        private static final Logger logger = LogManager.getLogger();\r
-       private int cacheSize = 1000;\r
-       private HashMap<Integer, ArchivedMedia> cache = new HashMap<Integer, ArchivedMedia>();\r
-       private boolean cachedMode = true;\r
-       private int resultSetSize = -1;\r
 \r
+       private ArrayList<EventListener<Event>> eventListenerList = new ArrayList<EventListener<Event>>();\r
+       private HashMap<Integer, ArchivedMedia> cache = new HashMap<Integer, ArchivedMedia>();\r
        private ArrayList<Item> docSelection = new ArrayList<Item>();\r
+\r
+       private int resultSetSize = -1;\r
        private int cacheStart;\r
        private int cacheEnd;\r
 \r
-       private ArrayList<EventListener<Event>> eventListenerList = new ArrayList<EventListener<Event>>();\r
-       protected IItemManager itemManager = null;\r
+       protected IItemManager itemManager;\r
        private SearchOptions options;\r
+       private IExecutionDurationNotification cb;\r
+\r
+       private boolean enableCache = true;\r
+       private int cacheSize = SessionUtil.getMediaCubeConfig().getSearchResultsListCacheSize();\r
 \r
-       public CachedListModel(SearchOptions options) {\r
+       public CachedListModel(SearchOptions options, IExecutionDurationNotification cb) {\r
                this.options = options;\r
+               this.cb = cb;\r
                this.itemManager = ItemManager.getInstance();\r
                reinit();\r
        }\r
@@ -67,7 +72,7 @@ public class CachedListModel extends ListModelList<ArchivedMedia> {
        protected SearchResult<ArchivedMedia> createSearchResult(int startPos, int endPos) {\r
                options.setFromResult(startPos);\r
                options.setToResult(endPos);\r
-               SearchResult<ArchivedMedia> sr = this.itemManager.search(options);\r
+               SearchResult<ArchivedMedia> sr = itemManager.search(options, cb);\r
                return sr;\r
        }\r
 \r
@@ -102,7 +107,7 @@ public class CachedListModel extends ListModelList<ArchivedMedia> {
 \r
        @Override\r
        public ArchivedMedia getElementAt(int index) {\r
-               // logger.info("getElementAt {}", index);\r
+               logger.info("getElementAt {}", index);\r
                ArchivedMedia ret = cache.get(index);\r
                if (ret == null) {\r
                        loadCache(index);\r
@@ -134,7 +139,7 @@ public class CachedListModel extends ListModelList<ArchivedMedia> {
                        SearchResult<ArchivedMedia> sr = null;\r
                        int startPos = 0;\r
 \r
-                       if (cachedMode) {\r
+                       if (enableCache) {\r
                                int halfSize = this.cacheSize / 2;\r
                                int rowLimit = this.cacheSize; // 200\r
                                if ((forIndex - halfSize) > 0) { // forIndex=60 startPos=0\r
diff --git a/server/user.mediacube.gui/src/user/jobengine/zk/model/ColumnSizeListener.java b/server/user.mediacube.gui/src/user/jobengine/zk/model/ColumnSizeListener.java
deleted file mode 100644 (file)
index b7ff987..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-package user.jobengine.zk.model;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import org.zkoss.zk.ui.event.Event;\r
-import org.zkoss.zk.ui.event.EventListener;\r
-import org.zkoss.zul.event.ColSizeEvent;\r
-\r
-public class ColumnSizeListener implements EventListener<Event> {\r
-\r
-       public static final int WIDTH_SCALE = 17;\r
-       private ListSearchModel model;\r
-\r
-       public ColumnSizeListener(ListSearchModel listSearchModel) {\r
-               this.model = listSearchModel;\r
-       }\r
-\r
-       @Override\r
-       public void onEvent(Event inEvent) throws Exception {\r
-               ColSizeEvent event = (ColSizeEvent) inEvent;\r
-               List<String> sizesList = new ArrayList<String>();\r
-               for (int i = 0; i < 5; i++) {\r
-                       String w = event.getWidth(i);\r
-                       sizesList.add(w);\r
-               }\r
-               model.setColumnSizes(sizesList);\r
-               model.refreshColumns();\r
-       }\r
-}\r
index 9ee875291c9550bb2c5635e8b3cfc4e94d43bd9a..a4a04c70ae11d92f3a0eb7085ee633983a936803 100644 (file)
@@ -41,7 +41,6 @@ import org.zkoss.zk.ui.event.EventListener;
 import org.zkoss.zk.ui.event.Events;\r
 import org.zkoss.zk.ui.event.KeyEvent;\r
 import org.zkoss.zk.ui.event.MouseEvent;\r
-import org.zkoss.zk.ui.event.OpenEvent;\r
 import org.zkoss.zk.ui.event.SortEvent;\r
 import org.zkoss.zk.ui.select.Selectors;\r
 import org.zkoss.zk.ui.select.annotation.Wire;\r
@@ -61,13 +60,14 @@ import org.zkoss.zul.Messagebox;
 import org.zkoss.zul.Paging;\r
 import org.zkoss.zul.Panel;\r
 import org.zkoss.zul.Row;\r
-import org.zkoss.zul.Tabbox;\r
 import org.zkoss.zul.Timer;\r
 import org.zkoss.zul.Toolbar;\r
 import org.zkoss.zul.Toolbarbutton;\r
 import org.zkoss.zul.Vlayout;\r
 import org.zkoss.zul.West;\r
 import org.zkoss.zul.Window;\r
+import org.zkoss.zul.event.PagingEvent;\r
+import org.zkoss.zul.ext.Paginal;\r
 \r
 import user.commons.ListUtils;\r
 import user.commons.StoreUri;\r
@@ -102,7 +102,6 @@ public class GridSearchModel extends AsyncBaseModel {
        private Map<String, TypeFilter> typeFilters;\r
        private Map<String, String> columnHeaders;\r
        private CachedListModel searchResult = null;\r
-       private CachedListModel groupedSearchResult = null;\r
        private ArchivedMedia selectedObject = null;\r
        private Validator allFilterCheckedValidator;\r
        private Validator itemSelectedValidator;\r
@@ -116,15 +115,11 @@ public class GridSearchModel extends AsyncBaseModel {
        protected IItemManager itemManager = null;\r
        private Map<ArchivedMedia, ListModelList<ArchivedMedia>> groupItemDetails = new HashMap<>();\r
 \r
-       @Wire\r
-       Tabbox resultsTab;\r
        @Wire\r
        Timer timer;\r
        @Wire\r
        Grid itemsGrid;\r
        @Wire\r
-       Grid groupedItemsGrid;\r
-       @Wire\r
        Button backToVideoButton;\r
        @Wire\r
        Combobox search;\r
@@ -283,6 +278,11 @@ public class GridSearchModel extends AsyncBaseModel {
        private void configureSearchResultGrid() {\r
                Paging paging = itemsGrid.getPagingChild();\r
                paging.setAutohide(false);\r
+               Paginal paginal = itemsGrid.getPaginal();\r
+               paginal.addEventListener("onPaging", event -> {\r
+                       PagingEvent evt = (PagingEvent) event;\r
+                       preventAfterRender = false;\r
+               });\r
 \r
                for (Component child : itemsGrid.getColumns().getChildren()) {\r
                        Column column = (Column) child;\r
@@ -329,7 +329,6 @@ public class GridSearchModel extends AsyncBaseModel {
        @NotifyChange({ "searchResult", "groupedSearchResult", "selectedObject", "hasTSMMediaFile", "hasLowresMediaFile", "lowresMediaFilePath" })\r
        public void doSearch() {\r
                startSearch = Instant.now();\r
-\r
                try {\r
                        search.close();\r
                        search.select();\r
@@ -337,23 +336,13 @@ public class GridSearchModel extends AsyncBaseModel {
                        itemsGrid.setActivePage(0);\r
                        setSelectedObject(null);\r
 \r
-                       switch (resultsTab.getSelectedIndex()) {\r
-                       case 0:\r
-                               showExpandedSearchResult();\r
-                               break;\r
-                       case 1:\r
-                               showGroupedSearchResult();\r
-                               break;\r
-                       case 2:\r
-                               showSimpleSearchResult();\r
-                               break;\r
-                       }\r
+                       executeSearch();\r
                } catch (Exception e) {\r
                        handleSearchError(e);\r
                }\r
        }\r
 \r
-       private void showExpandedSearchResult() throws Exception {\r
+       private void executeSearch() throws Exception {\r
                String searchValue = search.getText();\r
 \r
                if (StringUtils.isNotBlank(searchValue) && !searchHistory.contains(searchValue)) {\r
@@ -379,7 +368,9 @@ public class GridSearchModel extends AsyncBaseModel {
 \r
                if (!options.isValid())\r
                        throw new Exception("Legalább egy keresési opció használata kötelező: 3 karakter, hiányzó proxy, dátum, típus, cimke!");\r
-               searchResult = new CachedListModel(options);\r
+               searchResult = new CachedListModel(options, d -> {\r
+                       SessionUtil.consoleLog(String.format("SQL execution duration %s", DurationFormatUtils.formatDuration(d.toMillis(), "H:mm:ss.S", true)));\r
+               });\r
                searchResult.addEventListener(e -> {\r
                        if (e.getName().equals(Events.ON_ERROR)) {\r
                                Exception ex = (Exception) e.getData();\r
@@ -398,45 +389,6 @@ public class GridSearchModel extends AsyncBaseModel {
                Clients.evalJavaScript(script);\r
        }\r
 \r
-       private void showGroupedSearchResult() throws Exception {\r
-               String searchValue = search.getText();\r
-\r
-               if (StringUtils.isNotBlank(searchValue) && !searchHistory.contains(searchValue)) {\r
-                       searchHistory.add(0, searchValue);\r
-                       SessionUtil.putUserSearchHistory(searchHistory);\r
-               }\r
-\r
-               List<String> searchFilters = getSelectedFilters();\r
-               SessionUtil.putUserSearchFilter(searchFilters);\r
-\r
-               if (SessionUtil.getUserColumnOrder() != null) {\r
-                       orderBy = columnHeaders.get(columnOrder.entrySet().iterator().next().getKey());\r
-                       orderAscending = columnOrder.entrySet().iterator().next().getValue().equals("ascending");\r
-               }\r
-\r
-               if (searchFilters == null || searchFilters.size() == 0)\r
-                       throw new Exception("Anyag típus kiválasztása kötelező!");\r
-\r
-               List<Long> selectedTypeIds = getTypeIDs(searchFilters);\r
-\r
-               SearchOptions options = SearchOptions.create().setText(searchValue).setTypes(selectedTypeIds).setTags(searchTags).setFrom(searchFrom).setTo(searchTo)\r
-                               .setMissingProxy(missingProxy).setDescLength(descLength).setOrder(orderBy, orderAscending).setGrouping(true);\r
-\r
-               if (!options.isValid())\r
-                       throw new Exception("Legalább egy keresési opció használata kötelező: 3 karakter, hiányzó proxy, dátum, típus, cimke!");\r
-               groupedSearchResult = new CachedListModel(options);\r
-               groupedSearchResult.addEventListener(e -> {\r
-                       if (e.getName().equals(Events.ON_ERROR)) {\r
-                               Exception ex = (Exception) e.getData();\r
-                               handleSearchError(ex);\r
-                       }\r
-               });\r
-\r
-               if (!allChecked)\r
-                       showSearchTypeWarning();\r
-\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
@@ -474,12 +426,7 @@ public class GridSearchModel extends AsyncBaseModel {
 \r
                registerTask(() -> {\r
                        logger.info("Scrolling to pos {} begin", pos);\r
-                       List<Component> children = null;\r
-\r
-                       if (resultsTab.getSelectedIndex() == 0)\r
-                               children = itemsGrid.getRows().getChildren();\r
-                       else\r
-                               children = groupedItemsGrid.getRows().getChildren();\r
+                       List<Component> children = itemsGrid.getRows().getChildren();\r
 \r
                        if (children.size() > 0) {\r
                                Component top = children.get(pos);\r
@@ -583,10 +530,6 @@ public class GridSearchModel extends AsyncBaseModel {
                return searchResult;\r
        }\r
 \r
-       public ListModelList<ArchivedMedia> getGroupedSearchResult() {\r
-               return groupedSearchResult;\r
-       }\r
-\r
        public Date getSearchTo() {\r
                return searchTo;\r
        }\r
@@ -666,11 +609,7 @@ public class GridSearchModel extends AsyncBaseModel {
                if (am == null)\r
                        return;\r
 \r
-               List<Component> components = null;\r
-               if (resultsTab.getSelectedIndex() == 0)\r
-                       components = itemsGrid.getRows().getChildren();\r
-               else\r
-                       components = groupedItemsGrid.getRows().getChildren();\r
+               List<Component> components = itemsGrid.getRows().getChildren();\r
 \r
                for (int i = 0; i < components.size(); i++) {\r
                        Row row = (Row) components.get(i);\r
@@ -719,23 +658,19 @@ public class GridSearchModel extends AsyncBaseModel {
                if (startSearch != null) {\r
                        Instant finishSearch = Instant.now();\r
                        String duration = DurationFormatUtils.formatDuration(Duration.between(startSearch, finishSearch).toMillis(), "H:mm:ss.S", true);\r
-                       logger.info("Search duration {}", duration);\r
                        startSearch = null;\r
+                       SessionUtil.consoleLog(String.format("Overall search execution duration %s", duration));\r
                }\r
 \r
-               logger.info("onAfterRenderGrid begin");\r
+               logger.info("onAfterRenderGrid start");\r
                // aszinkron fut le, kulon kezelendo a hiba\r
                try {\r
 \r
-                       if (searchResult != null)\r
-                               logger.info("isempty {}", searchResult.isEmpty());\r
-\r
                        String mediaID = SessionUtil.getQueryParameter(MEDIA_ID);\r
                        if (mediaID != null) {\r
                                selectedObject = searchResult.getElementAt(0);\r
                                highlight(selectedObject, true);\r
                                notifyChange("selectedObject", "hasLowresMediaFile", "hasTSMMediaFile", "lowresMediaFilePath");\r
-                               logger.info("onAfterRenderGrid end");\r
                        } else {\r
                                if (!preventAfterRender) {\r
                                        preventAfterRender = true;\r
@@ -747,6 +682,8 @@ public class GridSearchModel extends AsyncBaseModel {
                        }\r
                } catch (Exception e) {\r
                        handleSearchError(e);\r
+               } finally {\r
+                       logger.info("onAfterRenderGrid finish");\r
                }\r
        }\r
 \r
@@ -1101,7 +1038,6 @@ public class GridSearchModel extends AsyncBaseModel {
 \r
                if (this.rowsExpanded != rowsExpanded) {\r
                        this.rowsExpanded = rowsExpanded;\r
-                       doSearch();\r
                }\r
 \r
        }\r
@@ -1284,18 +1220,4 @@ public class GridSearchModel extends AsyncBaseModel {
                }\r
                return result;\r
        }\r
-\r
-       @Command\r
-       public void onGroupDetailRequest(@ContextParam(ContextType.TRIGGER_EVENT) OpenEvent evt, @BindingParam("item") ArchivedMedia master) {\r
-               if (!evt.isOpen())\r
-                       return;\r
-\r
-               ListModelList<ArchivedMedia> model = groupItemDetails.get(master);\r
-               if (model.size() > 0)\r
-                       return;\r
-\r
-               List<ArchivedMedia> children = itemManager.getGroupChildren(master, search.getText());\r
-               if (children != null)\r
-                       children.forEach(am -> model.add(am));\r
-       }\r
 }\r
index 8ed78c4c0758bc8af7c9edd6c67d43f38ce17ef3..ab87dfc4d361c27e3be98cbac49bdf4b998b1758 100644 (file)
@@ -27,14 +27,12 @@ public class IndexModel extends BaseModel {
        private String page;\r
        private Map<String, Object> pathMap = ListUtils.asMap("/", "searchitems", "jobs", "jobs", "missingmaterials", "missingmaterials", "newshistory",\r
                        "newshistory", "edithistory", "edithistory", "statistics", "statistics", "maestro", "maestro", "pwdgen", "pwdgen");\r
-       \r
 \r
        @AfterCompose\r
        public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
                Selectors.wireComponents(view, this, false);\r
                Selectors.wireEventListeners(view, this);\r
-               route(Executions.getCurrent().getParameter("action"), \r
-                               SessionUtil.getQueryString(Arrays.asList("action")), false);\r
+               route(Executions.getCurrent().getParameter("action"), SessionUtil.getQueryString(Arrays.asList("action")), false);\r
                SessionUtil.setAttribute(IndexModel.class.getCanonicalName(), this);\r
        }\r
 \r
@@ -50,16 +48,16 @@ public class IndexModel extends BaseModel {
                logger.info("Popped to client: {}", h);\r
                route(h.getString("action"), h.getString("query"), true);\r
        }\r
-       \r
+\r
        @Command\r
        public void onClientInfo(@ContextParam(ContextType.TRIGGER_EVENT) ClientInfoEvent event) {\r
-               logger.info("onClientInfo");\r
+               // logger.info("onClientInfo");\r
                SessionUtil.publish(event);\r
        }\r
-       \r
+\r
        public void onVisibilityChanged(@ContextParam(ContextType.TRIGGER_EVENT) Event event) {\r
                logger.info("onVisibilityChanged");\r
-               SessionUtil.publish(event);             \r
+               SessionUtil.publish(event);\r
        }\r
 \r
        public void pushClientHistory(String action, String query) {\r
index 578bb3519d98f1b9ab526a193abeeb671c34e1e6..81fe4984bc3e06fc1925adb1236ed30f4ee0bd1b 100644 (file)
@@ -12,7 +12,7 @@ public class InitializedCachedListModel extends CachedListModel {
        private long mediaID;\r
 \r
        public InitializedCachedListModel(SearchOptions options) {\r
-               super(options);\r
+               super(options, null);\r
                this.mediaID = options.getMediaId();\r
 \r
        }\r
diff --git a/server/user.mediacube.gui/src/user/jobengine/zk/model/ListSearchModel.java b/server/user.mediacube.gui/src/user/jobengine/zk/model/ListSearchModel.java
deleted file mode 100644 (file)
index 4391d7e..0000000
+++ /dev/null
@@ -1,1201 +0,0 @@
-package user.jobengine.zk.model;\r
-\r
-import static java.time.temporal.TemporalAdjusters.firstDayOfMonth;\r
-import static java.time.temporal.TemporalAdjusters.firstDayOfNextMonth;\r
-import static java.time.temporal.TemporalAdjusters.firstDayOfNextYear;\r
-import static java.time.temporal.TemporalAdjusters.firstDayOfYear;\r
-\r
-import java.nio.file.Paths;\r
-import java.time.LocalDate;\r
-import java.time.ZoneId;\r
-import java.time.ZonedDateTime;\r
-import java.time.temporal.ChronoField;\r
-import java.util.ArrayList;\r
-import java.util.Date;\r
-import java.util.HashMap;\r
-import java.util.LinkedHashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-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.BindContext;\r
-import org.zkoss.bind.ValidationContext;\r
-import org.zkoss.bind.Validator;\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.NotifyChange;\r
-import org.zkoss.json.JSONObject;\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.event.Events;\r
-import org.zkoss.zk.ui.event.KeyEvent;\r
-import org.zkoss.zk.ui.event.SortEvent;\r
-import org.zkoss.zk.ui.select.Selectors;\r
-import org.zkoss.zk.ui.select.annotation.Wire;\r
-import org.zkoss.zk.ui.util.Clients;\r
-import org.zkoss.zul.Button;\r
-import org.zkoss.zul.Checkbox;\r
-import org.zkoss.zul.Combobox;\r
-import org.zkoss.zul.Div;\r
-import org.zkoss.zul.Hbox;\r
-import org.zkoss.zul.ListModelList;\r
-import org.zkoss.zul.Listbox;\r
-import org.zkoss.zul.Listhead;\r
-import org.zkoss.zul.Listheader;\r
-import org.zkoss.zul.Listitem;\r
-import org.zkoss.zul.Menuitem;\r
-import org.zkoss.zul.Menupopup;\r
-import org.zkoss.zul.Messagebox;\r
-import org.zkoss.zul.Paging;\r
-import org.zkoss.zul.Panel;\r
-import org.zkoss.zul.Timer;\r
-import org.zkoss.zul.Toolbar;\r
-import org.zkoss.zul.Toolbarbutton;\r
-import org.zkoss.zul.Vlayout;\r
-import org.zkoss.zul.West;\r
-import org.zkoss.zul.Window;\r
-import org.zkoss.zul.event.ZulEvents;\r
-\r
-import user.commons.ListUtils;\r
-import user.commons.StoreUri;\r
-import user.commons.remotestore.RemoteStoreProtocol;\r
-import user.jobengine.db.ArchivedMedia;\r
-import user.jobengine.db.IItemManager;\r
-import user.jobengine.db.ItemManager;\r
-import user.jobengine.db.ItemType;\r
-import user.jobengine.db.MediaFile;\r
-import user.jobengine.db.SearchOptions;\r
-import user.jobengine.db.Store;\r
-import user.jobengine.gui.ComponentBinder;\r
-import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.JobEngineException;\r
-import user.jobengine.server.scheduler.ScheduledJob;\r
-import user.jobengine.zk.util.SessionUtil;\r
-\r
-public class ListSearchModel extends AsyncBaseModel {\r
-       private static final String TAGTYPE_REMOVE = "remove";\r
-       private static final String TAGTYPE_ADD = "add";\r
-       private static final String TAGEVT_TAGTEXT = "tagtext";\r
-       private static final String TAGEVT_TYPE = "type";\r
-       private static final String TAGSRC_FILTER = "filter";\r
-       private static final String TAGSRC_MEDIA = "media";\r
-       private static final String TAGEVT_SOURCE = "source";\r
-       private static final String CREATE_LOWRES_TEMPLATE = "create-lowres-ondemand.xml";\r
-       private static final String ARG = "arg";\r
-       private static final String MEDIA_ID = "showMediaID";\r
-       private static final Logger logger = LogManager.getLogger();\r
-       private List<TypeFilter> topTypeFilters;\r
-       private List<TypeFilter> bottomTypeFilters;\r
-       private Map<String, TypeFilter> typeFilters;\r
-       private Map<String, String> columnHeaders;\r
-       private CachedListModel searchResult = null;\r
-       private ArchivedMedia selectedObject = null;\r
-       private Validator allFilterCheckedValidator;\r
-       private Validator itemSelectedValidator;\r
-       private boolean allChecked = true;\r
-       private boolean rowsExpanded = true;\r
-       private boolean allSelected;\r
-       private boolean itemSelected;\r
-       private int descLength;\r
-       private Map<String, Long> tags = null;\r
-       private List<Long> searchTags = new ArrayList<Long>();\r
-       protected IItemManager itemManager = null;\r
-       private List<String> columnSizes = new ArrayList<String>();\r
-\r
-       @Wire\r
-       Timer timer;\r
-       @Wire\r
-       Listbox itemsListbox;\r
-       @Wire\r
-       Button backToVideoButton;\r
-       @Wire\r
-       Combobox search;\r
-       @Wire\r
-       Toolbar tagsToolbar;\r
-       @Wire\r
-       Button btnSearch;\r
-       @Wire\r
-       Hbox searchFiltersMenu;\r
-       @Wire\r
-       Toolbarbutton toggleShowTypeFilters;\r
-       @Wire\r
-       Panel searchDetails;\r
-       @Wire\r
-       Toolbar filterToolbar;\r
-\r
-       @Wire\r
-       Menupopup searchSettings;\r
-       @Wire\r
-       Vlayout mediaDetails;\r
-       @Wire\r
-       West searchWest;\r
-\r
-       private String orderBy;\r
-\r
-       private boolean isOrderAscending;\r
-       private Map<String, String> topColorClasses;\r
-       private int selectedListItemIndex = -1;\r
-       private volatile boolean preventAfterRender;\r
-       private int positionToScroll = -1;\r
-       private ListModelList<String> searchHistory;\r
-       private Map<String, String> columnOrder;\r
-       private Date searchFrom;\r
-       private Date searchTo;\r
-       private boolean missingProxy;\r
-       private int selectedDateOption;\r
-       private Window metaWindow;\r
-\r
-       public ListSearchModel() {\r
-               this.itemManager = ItemManager.getInstance();\r
-\r
-               typeFilters = new LinkedHashMap<String, TypeFilter>();\r
-               MediaCubeConfig mediaCubeConfig = SessionUtil.getMediaCubeConfig();\r
-               setTopTypeFilters(mediaCubeConfig.getTopTypeFilters());\r
-               setBottomTypeFilters(mediaCubeConfig.getBottomTypeFilters());\r
-\r
-               columnHeaders = new LinkedHashMap<String, String>();\r
-               columnHeaders.put("ID", "mediahouseid");\r
-               columnHeaders.put("Cím", "mediatitle");\r
-               columnHeaders.put("Hossz", "length");\r
-               columnHeaders.put("Fájlnév", "mediafilehouseid");\r
-               columnHeaders.put("Archiválva", "archived");\r
-\r
-               allFilterCheckedValidator = new Validator() {\r
-                       @Override\r
-                       public void validate(ValidationContext ctx) {\r
-                               try {\r
-\r
-                                       TypeFilter typeFilter = (TypeFilter) ctx.getProperty().getBase();\r
-                                       boolean isChecked = (boolean) ctx.getProperty().getValue();\r
-                                       typeFilter.setChecked(isChecked);\r
-                                       // logger.info("{} {}", label, isChecked);\r
-                               } catch (Exception e) {\r
-\r
-                               }\r
-                               updateAllChecked();\r
-                       }\r
-               };\r
-\r
-               itemSelectedValidator = new Validator() {\r
-                       @Override\r
-                       public void validate(ValidationContext ctx) {\r
-                               try {\r
-\r
-                                       ArchivedMedia item = (ArchivedMedia) ctx.getValidatorArg(ARG);\r
-                                       boolean select = (boolean) ctx.getProperty().getValue();\r
-                                       MenuModel model = (MenuModel) SessionUtil.getAttribute(SessionUtil.MENUMODEL);\r
-                                       model.selectArchivedMedia(item, select);\r
-                               } catch (Exception e) {\r
-\r
-                               }\r
-                       }\r
-               };\r
-\r
-               // searchHistory = new\r
-               // ListModelList<String>(SessionUtil.getUserSearchHistory());\r
-               // setColumnOrder();\r
-               // setUserSelectedFilters();\r
-       }\r
-\r
-       private void addTypeFilters(List<TypeFilter> filters) {\r
-               for (TypeFilter typeFilter : filters)\r
-                       typeFilters.put(typeFilter.getName(), typeFilter);\r
-       }\r
-\r
-       @AfterCompose\r
-       public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
-               // A MediaFileServlet a services/proxy alatt szolgal ki\r
-               // Clients.evalJavaScript("setSource('http://localhost:9080/services/proxy/20209535_1-20205617.mp4',\r
-               // 'video/mp4')");\r
-               logger.info("afterCompose");\r
-//             Clients.evalJavaScript("setSource('https://d2zihajmogu5jn.cloudfront.net/bipbop-advanced/bipbop_16x9_variant.m3u8', 'application/x-mpegURL', 100)");\r
-\r
-               try {\r
-                       Selectors.wireComponents(view, this, false);\r
-                       Selectors.wireEventListeners(view, this);\r
-\r
-                       boolean typeFiltersVisible = SessionUtil.getTypeFiltersVisibility();\r
-                       if (typeFiltersVisible) {\r
-                               toggleShowTypeFilters.setChecked(true);\r
-                               toggleTypeFiltersCheck();\r
-                               search.setFocus(true);\r
-                       }\r
-\r
-                       configureSearchResultListbox();\r
-                       showExternalMediaID();\r
-\r
-                       searchHistory = new ListModelList<String>(SessionUtil.getUserSearchHistory());\r
-                       setColumnOrder();\r
-                       logger.info("columnOrder: {}", columnOrder);\r
-                       setUserSelectedFilters();\r
-\r
-                       if (SessionUtil.getUserPageSize() != 0) {\r
-                               itemsListbox.setPageSize(SessionUtil.getUserPageSize());\r
-                       }\r
-                       setSettingsPageSize(itemsListbox.getPageSize());\r
-                       if (!allChecked)\r
-                               showSearchTypeWarning();\r
-\r
-                       tags = itemManager.getAllTags();\r
-                       // lekérdezési hiba\r
-                       if (tags == null)\r
-                               Clients.showNotification("A cimkék inicializálása sikertelen!", "error", tagsToolbar, "start_center",\r
-                                               3000);\r
-                       else\r
-                               setSearchTags();\r
-\r
-                       Listhead head = itemsListbox.getListhead();\r
-                       head.addEventListener(ZulEvents.ON_COL_SIZE, new ColumnSizeListener(this));\r
-               } catch (Exception e) {\r
-                       logger.error("error in afterCompose");\r
-                       handleSearchError(e);\r
-               }\r
-\r
-//             Clients.evalJavaScript(\r
-//                             "setSource('https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4', 'video/mp4')");\r
-\r
-       }\r
-\r
-       private void unsetAllFilters() {\r
-               for (String filter : typeFilters.keySet()) {\r
-                       typeFilters.get(filter).setChecked(false);\r
-               }\r
-       }\r
-\r
-       @Command\r
-       @NotifyChange("searchHistory")\r
-       public void clearHistory() {\r
-               setSearchHistory(new ListModelList<>());\r
-               SessionUtil.putUserSearchHistory(searchHistory);\r
-       }\r
-\r
-       private void configureSearchResultListbox() {\r
-               logger.info("configureSearchResultListbox");\r
-               if (itemsListbox != null && itemsListbox.getHeads().size() == 1) {\r
-                       Paging paging = itemsListbox.getPagingChild();\r
-                       paging.setAutohide(false);\r
-               }\r
-       }\r
-\r
-       @Command\r
-       public void copyMediaIdToClipboard() {\r
-               String port = (Executions.getCurrent().getServerPort() == 80) ? ""\r
-                               : (":" + Executions.getCurrent().getServerPort());\r
-               String baseURL = Executions.getCurrent().getScheme() + "://" + Executions.getCurrent().getServerName() + port\r
-                               + Executions.getCurrent().getContextPath();\r
-               String url = String.format("%s/?%s=%d", baseURL, MEDIA_ID, selectedObject.getMedia().getId());\r
-               String email = String.format("mailto:?subject=Média címe: %s &body=A média itt tekinthető meg: %s",\r
-                               selectedObject.getMedia().getTitle(), url);\r
-               Executions.getCurrent().sendRedirect(email);\r
-       }\r
-\r
-       @Command\r
-       public void createLowres() throws Exception {\r
-               IJobEngine jobEngine = ComponentBinder.getJobEngine();\r
-\r
-               ScheduledJob scheduledJob = jobEngine.getScheduledJob(CREATE_LOWRES_TEMPLATE);\r
-               Map<String, Object> parameters = scheduledJob.getJobParameters();\r
-               parameters.put("mediaCubeMedia", selectedObject.getMedia());\r
-               parameters.put("deleteSource", true);\r
-               parameters.put("killDateDays", 0);\r
-               parameters.put("targetNamePattern", "%s");\r
-               parameters.put("successRecipient", SessionUtil.getUserPrincipal().getEmail());\r
-\r
-               try {\r
-                       jobEngine.submit(CREATE_LOWRES_TEMPLATE, scheduledJob.getJobName(), parameters,\r
-                                       SessionUtil.getUserPrincipal().getDisplayName());\r
-                       Messagebox.show("A proxy pótlása elindult, emailben értesíti a rendszer a folyamat végeztével.",\r
-                                       "Információ", Messagebox.OK, Messagebox.INFORMATION);\r
-               } catch (JobEngineException e) {\r
-                       logger.info("Hiba a feladat indításakor", e);\r
-                       Messagebox.show("Hiba a feladat indításakor. A rendszer üzenete: " + e.getMessage(), "Hiba", Messagebox.OK,\r
-                                       Messagebox.ERROR);\r
-               }\r
-       }\r
-\r
-       @Command\r
-       @NotifyChange({ "searchResult", "selectedObject", "hasTSMMediaFile", "hasLowresMediaFile", "lowresMediaFilePath" })\r
-       public void doSearch() {\r
-               logger.info("doSearch");\r
-               try {\r
-                       search.close();\r
-                       search.select();\r
-                       searchResult = null;\r
-                       itemsListbox.setActivePage(0);\r
-                       setSelectedObject(null);\r
-                       String searchValue = search.getText();\r
-\r
-                       if (StringUtils.isNotBlank(searchValue) && !searchHistory.contains(searchValue)) {\r
-                               searchHistory.add(0, searchValue);\r
-                               SessionUtil.putUserSearchHistory(searchHistory);\r
-                       }\r
-\r
-                       List<String> searchFilters = getSearchFilters();\r
-\r
-                       if (searchFilters == null || searchFilters.size() == 0)\r
-                               throw new Exception("Anyag típus kiválasztása kötelező!");\r
-\r
-                       List<Long> selectedTypeIds = getTypeIDs(searchFilters);\r
-\r
-                       SearchOptions options = SearchOptions.create().setText(searchValue).setTypes(selectedTypeIds)\r
-                                       .setTags(searchTags).setFrom(searchFrom).setTo(searchTo).setMissingProxy(missingProxy)\r
-                                       .setDescLength(descLength).setOrder(orderBy, isOrderAscending);\r
-\r
-                       validateSearchOptions(options);\r
-                       searchResult = new CachedListModel(options);\r
-                       searchResult.addEventListener(e -> {\r
-                               if (e.getName().equals(Events.ON_ERROR)) {\r
-                                       Exception ex = (Exception) e.getData();\r
-                                       handleSearchError(ex);\r
-                               }\r
-                       });\r
-\r
-                       if (!allChecked)\r
-                               showSearchTypeWarning();\r
-\r
-               } catch (Exception e) {\r
-                       handleSearchError(e);\r
-               }\r
-       }\r
-\r
-       private void validateSearchOptions(SearchOptions options) throws Exception {\r
-               if (!options.isValid())\r
-                       throw new Exception(\r
-                                       "Legalább egy keresési opció használata kötelező: 3 karakter, hiányzó proxy, dátum, típus, cimke!");\r
-       }\r
-\r
-       private List<String> getSearchFilters() {\r
-               List<String> searchFilters = getSelectedFilters();\r
-               SessionUtil.putUserSearchFilter(searchFilters);\r
-\r
-               if (SessionUtil.getUserColumnOrder() != null) {\r
-                       orderBy = columnHeaders.get(columnOrder.entrySet().iterator().next().getKey());\r
-                       isOrderAscending = columnOrder.entrySet().iterator().next().getValue().equals("ascending");\r
-               }\r
-\r
-               return searchFilters;\r
-       }\r
-\r
-       @Command\r
-       public void doSort(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) throws Exception {\r
-               itemsListbox.getListhead().getChildren().forEach(h -> ((Listheader) h).setSortDirection("natural"));\r
-               SortEvent evt = (SortEvent) ctx.getTriggerEvent();\r
-               Listheader header = (Listheader) ctx.getComponent();\r
-               header.setSortDirection(evt.isAscending() ? "ascending" : "descending");\r
-               logger.info("header.getLabel(): {} {}", header.getLabel(), evt.isAscending() ? "ascending" : "descending");\r
-\r
-               columnOrder = new HashMap<>();\r
-               columnOrder.put(header.getLabel(), header.getSortDirection());\r
-               SessionUtil.putUserColumnOrder(columnOrder);\r
-\r
-               orderBy = columnHeaders.get(header.getLabel());\r
-               isOrderAscending = evt.isAscending();\r
-               doSearch();\r
-               notifyChange("searchResult", "selectedObject", "hasLowresMediaFile", "lowresMediaFilePath");\r
-               evt.stopPropagation();\r
-       }\r
-\r
-       @Command\r
-       public void downloadMedia() {\r
-               if (!getHasTSMMediaFile())\r
-                       return;\r
-               // Map<String, Object> arguments = new HashMap<String, Object>();\r
-               // arguments.put(MEDIACUBEMEDIA, this.selectedObject.getMedia());\r
-               // Window window = (Window)\r
-               // Executions.createComponents(PAGES_RETRIEVESELECTOR_ZUL, null,\r
-               // arguments);\r
-               // window.doModal();\r
-\r
-               MenuModel model = (MenuModel) SessionUtil.getAttribute(SessionUtil.MENUMODEL);\r
-               model.selectArchivedMedia(this.selectedObject, true);\r
-       }\r
-\r
-       void ensureVisible(int pos) {\r
-\r
-               registerTask(() -> {\r
-                       logger.info("Scrolling to pos {} begin", pos);\r
-                       List<Listitem> children = itemsListbox.getItems();\r
-                       if (children.size() > 0) {\r
-                               Component top = children.get(pos);\r
-                               Clients.scrollIntoView(top);\r
-                               logger.info("Scrolled into the {}. row on the page.", pos);\r
-                       }\r
-\r
-                       if (positionToScroll > -1) {\r
-                               highlight(selectedObject, true);\r
-                               positionToScroll = -1;\r
-                       }\r
-\r
-                       logger.info("Scrolling to pos {} end", pos);\r
-                       preventAfterRender = false;\r
-               });\r
-               timer.start();\r
-       }\r
-\r
-       public Validator getAllFilterCheckedValidator() {\r
-               return allFilterCheckedValidator;\r
-       }\r
-\r
-       public List<TypeFilter> getBottomTypeFilters() {\r
-               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
-                       List<MediaFile> mediaFiles = selectedObject.getMedia().getMediaFiles();\r
-                       if (mediaFiles != null) {\r
-                               for (MediaFile mf : mediaFiles) {\r
-                                       if (mf.getStore().isLowres()) {\r
-                                               return true;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               return ret;\r
-       }\r
-\r
-       public boolean getHasTSMMediaFile() {\r
-               return selectedObject != null;\r
-       }\r
-\r
-       public Validator getItemSelectedValidator() {\r
-               return itemSelectedValidator;\r
-       }\r
-\r
-       public String getLowresMediaFilePath() throws Exception {\r
-               String ret = null;\r
-               if (selectedObject != null) {\r
-                       List<MediaFile> mediaFiles = selectedObject.getMedia().getMediaFiles();\r
-                       if (mediaFiles != null) {\r
-                               for (MediaFile mf : mediaFiles) {\r
-                                       Store store = mf.getStore();\r
-                                       if (store == null)\r
-                                               continue;\r
-                                       // TODO a tartalek nem tud lowres lenni, de a TSM-nek nincs HTTP bejegyzese\r
-                                       // if (store.isLowres()) {\r
-                                       // StoreUri sourceStoreUri = store.getSourceStoreUri(RemoteStoreProtocol.HTTP);\r
-                                       // URL base = new URL(sourceStoreUri.toString());\r
-                                       // String relative = mf.getRelativePath().replace("\\", "/");\r
-                                       // ret = new URL(base, relative).toString();\r
-                                       // break;\r
-                                       // }\r
-\r
-                                       // relative cim a sajat kiszolgalo miatt\r
-                                       StoreUri sourceStoreUri = store.getSourceStoreUri(RemoteStoreProtocol.HTTP);\r
-\r
-                                       if (sourceStoreUri != null && sourceStoreUri.isStream()) {\r
-\r
-                                               String noProtocolUri = sourceStoreUri.toString(true);\r
-                                               String base = noProtocolUri.startsWith("/") ? noProtocolUri : sourceStoreUri.toString(false);\r
-                                               if (!base.endsWith("/"))\r
-                                                       base += "/";\r
-                                               String relative = mf.getRelativePath().replace("\\", "/");\r
-                                               ret = base + relative;\r
-                                               logger.info("Found lowres on store {}, url is {}", store.getName(), ret);\r
-                                               break;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               return ret;\r
-       }\r
-\r
-       public Date getSearchFrom() {\r
-               return searchFrom;\r
-       }\r
-\r
-       public ListModelList<String> getSearchHistory() {\r
-               return searchHistory;\r
-       }\r
-\r
-       public ListModelList<ArchivedMedia> getSearchResult() {\r
-               return searchResult;\r
-       }\r
-\r
-       public Date getSearchTo() {\r
-               return searchTo;\r
-       }\r
-\r
-       public int getSelectedDateOption() {\r
-               return selectedDateOption;\r
-       }\r
-\r
-       private List<String> getSelectedFilters() {\r
-               List<String> result = null;\r
-               for (String label : typeFilters.keySet()) {\r
-                       boolean isChecked = typeFilters.get(label).isChecked();\r
-                       if (!isChecked)\r
-                               continue;\r
-                       if (result == null)\r
-                               result = new ArrayList<>();\r
-                       result.add(label);\r
-               }\r
-               return result;\r
-       }\r
-\r
-       public ArchivedMedia getSelectedObject() {\r
-               return selectedObject;\r
-       }\r
-\r
-       public Map<String, String> getTopColorClasses() {\r
-               return topColorClasses;\r
-       }\r
-\r
-       public List<TypeFilter> getTopTypeFilters() {\r
-               return topTypeFilters;\r
-       }\r
-\r
-       public String getTSMMediaFilePath() throws Exception {\r
-               String ret = "";\r
-               if (selectedObject != null) {\r
-                       List<MediaFile> mediaFiles = selectedObject.getMedia().getMediaFiles();\r
-                       for (MediaFile mf : mediaFiles) {\r
-                               Store store = mf.getStore();\r
-                               if (mf.getStore().isSystem())\r
-                                       ret = Paths.get(store.getStoreUris().get(0).toString(false), mf.getRelativePath()).toString();\r
-                       }\r
-               }\r
-               return ret;\r
-       }\r
-\r
-       public Map<String, TypeFilter> getTypeFilters() {\r
-               return typeFilters;\r
-       }\r
-\r
-       private List<Long> getTypeIDs(List<String> searchFilters) {\r
-               if (allChecked)\r
-                       return null;\r
-               List<Long> result = null;\r
-               if (searchFilters != null) {\r
-                       for (String typeName : searchFilters) {\r
-                               ItemType itemType = itemManager.getItemType(typeName);\r
-                               if (itemType == null)\r
-                                       continue;\r
-                               if (result == null)\r
-                                       result = new ArrayList<>();\r
-                               result.add(itemType.getId());\r
-                       }\r
-               }\r
-               return result;\r
-       }\r
-\r
-       private void handleSearchError(Exception e) {\r
-\r
-               StringBuilder sb = new StringBuilder();\r
-               sb.append(e.getClass().getSimpleName());\r
-               if (e.getMessage() == null) {\r
-                       sb.append(": System message not available.");\r
-               }\r
-\r
-               Clients.showNotification(sb.toString(), "error", btnSearch, "start_center", 3000);\r
-               logger.error(sb.toString());\r
-       }\r
-\r
-       private void highlight(ArchivedMedia am, boolean highlight) {\r
-               if (am == null)\r
-                       return;\r
-               List<Listitem> components = itemsListbox.getItems();\r
-               for (int i = 0; i < components.size(); i++) {\r
-                       Listitem listitem = components.get(i);\r
-                       ArchivedMedia currentArchivedMedia = (ArchivedMedia) listitem.getValue();\r
-                       if (currentArchivedMedia != null && am.getMedia().getId() == currentArchivedMedia.getMedia().getId()) {\r
-\r
-                               if (highlight) {\r
-                                       selectedListItemIndex = i;\r
-//                                     listitem.setStyle("background: #B8BFDC;");\r
-                               } else {\r
-                                       listitem.setStyle("background: none;");\r
-                               }\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-\r
-       public boolean isAllChecked() {\r
-               return allChecked;\r
-       }\r
-\r
-       public boolean isAllSelected() {\r
-               return allSelected;\r
-       }\r
-\r
-       public boolean isItemSelected() {\r
-               return itemSelected;\r
-       }\r
-\r
-       public boolean isMissingProxy() {\r
-               return missingProxy;\r
-       }\r
-\r
-       public boolean isRowsExpanded() {\r
-               return rowsExpanded;\r
-       }\r
-\r
-       @Command\r
-       public void onAfterRenderList() {\r
-               logger.info("onAfterRenderList begin");\r
-               // aszinkron fut le, kulon kezelendo a hiba\r
-               try {\r
-                       if (searchResult != null) {\r
-                               logger.info("isEmpty {}", searchResult.isEmpty());\r
-                       }\r
-                       setColumnSizes(columnSizes);\r
-                       refreshColumns();\r
-\r
-                       String mediaID = SessionUtil.getQueryParameter(MEDIA_ID);\r
-                       logger.info("mediaID: {}", mediaID);\r
-                       if (mediaID != null) {\r
-                               selectedObject = searchResult.getElementAt(0);\r
-                               highlight(selectedObject, true);\r
-                               notifyChange("selectedObject", "hasLowresMediaFile", "hasTSMMediaFile", "lowresMediaFilePath");\r
-                               logger.info("onAfterRenderList end");\r
-                               return;\r
-                       }\r
-\r
-                       if (preventAfterRender) {\r
-                               positionToScroll = 0;\r
-                               preventAfterRender = false;\r
-                               logger.info("onAfterRenderList end");\r
-                               return;\r
-                       }\r
-                       preventAfterRender = true;\r
-\r
-                       if (positionToScroll != -1) {\r
-                               ensureVisible(positionToScroll);\r
-                       }\r
-\r
-               } catch (Exception e) {\r
-                       handleSearchError(e);\r
-               }\r
-               logger.info("onAfterRenderList end");\r
-       }\r
-\r
-       @Command\r
-       public void onChangingCombo(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {\r
-               logger.info(((KeyEvent) ctx.getTriggerEvent()).getKeyCode());\r
-               logger.info("onChanging");\r
-       }\r
-\r
-       @Command\r
-       public void onPaging() {\r
-               logger.info("onPaging");\r
-       }\r
-\r
-       @Command\r
-       public void onTagChanged(@ContextParam(ContextType.TRIGGER_EVENT) Event event) {\r
-               // source: filter | media,\r
-               // type : add | remove,\r
-               // tagtext: e.detail.data.value,\r
-               // index: e.detail.index\r
-\r
-               JSONObject jsObject = (JSONObject) event.getData();\r
-               if (!jsObject.containsKey(TAGEVT_SOURCE))\r
-                       return;\r
-               String source = String.valueOf(jsObject.get(TAGEVT_SOURCE));\r
-\r
-               if (TAGSRC_MEDIA.equals(source))\r
-                       processMediaTagChanged(jsObject);\r
-\r
-               if (TAGSRC_FILTER.equals(source))\r
-                       processFilterTagChanged(jsObject);\r
-\r
-               logger.info(event);\r
-       }\r
-\r
-       @Command\r
-       public void onCreateBreakPoint(@ContextParam(ContextType.TRIGGER_EVENT) Event event) throws Exception {\r
-               JSONObject jsObject = (JSONObject) event.getData();\r
-               Double doubleVar = 0.0;\r
-               if (!jsObject.get("meta").equals(0)) {\r
-                       doubleVar = (Double) jsObject.get("meta");\r
-               }\r
-               logger.info("Create breakpoint at {}", doubleVar);\r
-       }\r
-\r
-       @Command\r
-       public void onWestResize() {\r
-               filterToolbar.invalidate();\r
-       }\r
-\r
-       @Command\r
-       public void openMetaDataDialog() {\r
-               if (metaWindow != null)\r
-                       return;\r
-\r
-               // EventListener<Event> eventListener = e -> {\r
-               // EventQueues.lookup("my super queue", EventQueues.APPLICATION,\r
-               // true).unsubscribe(this);\r
-               // };\r
-               // EventQueues.lookup("my super queue", EventQueues.APPLICATION,\r
-               // true).subscribe(eventListener);\r
-               String template = "/pages/metadatadetails.zul";\r
-               EventListener<?> listener = e -> {\r
-                       logger.info("Meta window closed");\r
-\r
-                       notifyChange("selectedObject", "itemsList");\r
-\r
-                       metaWindow = null;\r
-               };\r
-\r
-               metaWindow = (Window) Executions.createComponents(template, null,\r
-                               ListUtils.asMap("selectedObject", selectedObject, "listener", listener));\r
-               metaWindow.doOverlapped();\r
-               metaWindow.addEventListener("onClose", listener);\r
-       }\r
-\r
-       private void processFilterTagChanged(JSONObject jsObject) {\r
-               if (tags == null)\r
-                       return;\r
-\r
-               if (!jsObject.containsKey(TAGEVT_TYPE))\r
-                       return;\r
-               String type = String.valueOf(jsObject.get(TAGEVT_TYPE));\r
-\r
-               if (!jsObject.containsKey(TAGEVT_TAGTEXT))\r
-                       return;\r
-               String tagText = String.valueOf(jsObject.get(TAGEVT_TAGTEXT));\r
-\r
-               long id = tags.get(tagText);\r
-\r
-               switch (type) {\r
-               case TAGTYPE_ADD:\r
-                       searchTags.add(id);\r
-                       break;\r
-               case TAGTYPE_REMOVE:\r
-                       searchTags.remove(id);\r
-                       break;\r
-               }\r
-       }\r
-\r
-       private void processMediaTagChanged(JSONObject jsObject) {\r
-               if (selectedObject == null || !SessionUtil.isEditor() || tags == null) {\r
-                       setMediaTags(0);\r
-                       return;\r
-               }\r
-\r
-               if (!jsObject.containsKey(TAGEVT_TYPE))\r
-                       return;\r
-               String type = String.valueOf(jsObject.get(TAGEVT_TYPE));\r
-\r
-               if (!jsObject.containsKey(TAGEVT_TAGTEXT))\r
-                       return;\r
-               String tagText = String.valueOf(jsObject.get(TAGEVT_TAGTEXT));\r
-\r
-               long id = 0;\r
-               if (tags.containsKey(tagText))\r
-                       id = tags.get(tagText);\r
-\r
-               List<String> mediaTags = selectedObject.getTags();\r
-               switch (type) {\r
-               case TAGTYPE_ADD:\r
-                       if (mediaTags.contains(tagText.toLowerCase()))\r
-                               return;\r
-                       if (id == 0) {\r
-                               id = itemManager.addMediaTag(tagText, selectedObject.getMedia().getId());\r
-                               // frissitjuk az osszes Tagify control whitelist-jet\r
-                               tags.put(tagText, id);\r
-                               setSearchTags();\r
-                       } else\r
-                               itemManager.addMediaTag(id, selectedObject.getMedia().getId());\r
-\r
-                       mediaTags.add(tagText);\r
-                       break;\r
-               case TAGTYPE_REMOVE:\r
-                       mediaTags.remove(tagText.toLowerCase());\r
-                       if (id == 0) {\r
-                               Messagebox.show("A cimke már nem található az adatbázisban: " + tagText, "Belső hiba!", Messagebox.OK,\r
-                                               Messagebox.EXCLAMATION);\r
-                               return;\r
-                       }\r
-                       itemManager.removeMediaTag(id, selectedObject.getMedia().getId());\r
-                       break;\r
-               }\r
-       }\r
-\r
-       @Command\r
-       @NotifyChange({ "selectedObject", "hasLowresMediaFile", "hasTSMMediaFile", "lowresMediaFilePath" })\r
-       public void select(@BindingParam("selectedObject") ArchivedMedia selectedObject,\r
-                       @ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {\r
-               highlight(this.selectedObject, false);\r
-               setSelectedObject(selectedObject);\r
-               highlight(this.selectedObject, true);\r
-\r
-               // scrolls the ancestor elements to make the specified element visible\r
-               Clients.scrollIntoView(mediaDetails.getFirstChild());\r
-\r
-               logger.info("Media was selected. Selected media archive: {}", selectedObject.getMedia().getId());\r
-       }\r
-\r
-       @NotifyChange({ "typeFilters", "topTypeFilters", "bottomTypeFilters" })\r
-       public void setAllChecked(boolean allChecked) {\r
-               this.allChecked = allChecked;\r
-               for (String key : typeFilters.keySet())\r
-                       typeFilters.get(key).setChecked(allChecked);\r
-               for (TypeFilter topTypeFilter : topTypeFilters)\r
-                       topTypeFilter.setChecked(allChecked);\r
-               for (TypeFilter bottomTypeFilter : bottomTypeFilters)\r
-                       bottomTypeFilter.setChecked(allChecked);\r
-       }\r
-\r
-       public void setAllFilterCheckedValidator(Validator allFilterCheckedValidator) {\r
-               this.allFilterCheckedValidator = allFilterCheckedValidator;\r
-       }\r
-\r
-       public void setAllSelected(boolean allSelected) {\r
-               this.allSelected = allSelected;\r
-               List<Listitem> listItems = itemsListbox.getItems();\r
-               for (Listitem item : listItems) {\r
-                       List<Component> children = item.getChildren();\r
-                       if (children.size() < 2)\r
-                               continue;\r
-                       Component component = children.get(1);\r
-                       if (!(component instanceof Checkbox))\r
-                               continue;\r
-                       Checkbox ck = (Checkbox) component;\r
-                       ck.setChecked(allSelected);\r
-                       MenuModel model = (MenuModel) SessionUtil.getAttribute(SessionUtil.MENUMODEL);\r
-                       model.selectArchivedMedia(item.getValue(), allSelected);\r
-               }\r
-\r
-       }\r
-\r
-       public void setBottomTypeFilters(List<TypeFilter> bottomTypeFilters) {\r
-               this.bottomTypeFilters = bottomTypeFilters;\r
-               addTypeFilters(bottomTypeFilters);\r
-\r
-       }\r
-\r
-       @Command\r
-       @NotifyChange({ "searchFrom", "searchTo", "selectedDateOption" })\r
-       public void setCalendar(@BindingParam(TAGEVT_SOURCE) Menuitem source) {\r
-               int value = Integer.parseInt(source.getValue());\r
-               LocalDate now = LocalDate.now();\r
-               ZoneId zoneId = ZoneId.systemDefault();\r
-               // az elozo, kovetkezo lepteteshez kell\r
-               selectedDateOption = value;\r
-               switch (value) {\r
-               // nap\r
-               case 1:\r
-                       searchFrom = Date.from(now.atStartOfDay(zoneId).toInstant());\r
-                       searchTo = Date.from(now.plusDays(1).atStartOfDay(zoneId).toInstant());\r
-                       break;\r
-               // het\r
-               case 2:\r
-                       ZonedDateTime zdt = now.atStartOfDay(zoneId);\r
-                       // ISO 8601, Monday is first day of week\r
-                       ZonedDateTime firstOfWeek = zdt.with(ChronoField.DAY_OF_WEEK, 1);\r
-                       searchFrom = Date.from(firstOfWeek.toInstant());\r
-                       ZonedDateTime firstOfNextWeek = firstOfWeek.plusWeeks(1);\r
-                       searchTo = Date.from(firstOfNextWeek.toInstant());\r
-                       break;\r
-               // honap\r
-               case 3:\r
-                       searchFrom = Date.from(now.with(firstDayOfMonth()).atStartOfDay(zoneId).toInstant());\r
-                       searchTo = Date.from(now.with(firstDayOfNextMonth()).atStartOfDay(zoneId).toInstant());\r
-                       break;\r
-               // ev\r
-               case 4:\r
-                       searchFrom = Date.from(now.with(firstDayOfYear()).atStartOfDay(zoneId).toInstant());\r
-                       searchTo = Date.from(now.with(firstDayOfNextYear()).atStartOfDay(zoneId).toInstant());\r
-                       break;\r
-               // elozo\r
-               case 100:\r
-                       break;\r
-               // kovetkezo\r
-               case 200:\r
-                       break;\r
-               case 300:\r
-                       searchFrom = null;\r
-                       searchTo = null;\r
-                       break;\r
-               }\r
-       }\r
-\r
-       private void setColumnOrder() {\r
-               columnOrder = new HashMap<String, String>();\r
-               if (SessionUtil.getUserColumnOrder() != null && !SessionUtil.getUserColumnOrder().isEmpty()) {\r
-                       columnOrder.put(SessionUtil.getUserColumnOrder().entrySet().iterator().next().getKey(),\r
-                                       (String) SessionUtil.getUserColumnOrder().entrySet().iterator().next().getValue());\r
-               } else {\r
-                       columnOrder.putAll(columnHeaders);\r
-               }\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
-\r
-       public void setItemSelectedValidator(Validator itemSelectedValidator) {\r
-               this.itemSelectedValidator = itemSelectedValidator;\r
-       }\r
-\r
-       private void setMediaTags(long mediaId) {\r
-               // JavaScript : addMediaTags(['aaa']);\r
-\r
-               List<String> mediaTags = null;\r
-\r
-               if (mediaId > 0)\r
-                       mediaTags = itemManager.getMediaTags(mediaId);\r
-\r
-               // inicializaljuk, hogy az addTag event ezeket mar ne akarja meg 1x hozzaadni\r
-               StringBuilder sb = new StringBuilder();\r
-               sb.insert(0, "addMediaTags([");\r
-               if (mediaTags != null) {\r
-                       if (!mediaTags.isEmpty()) {\r
-                               for (String tag : mediaTags) {\r
-                                       selectedObject.getTags().add(tag.toLowerCase());\r
-                                       if (tag.contains("'")) {\r
-                                               continue;\r
-                                       }\r
-                                       if (sb.length() > 0) {\r
-                                               sb.append(",");\r
-                                       }\r
-                                       sb.append(String.format("'%s'", tag));\r
-                               }\r
-                       }\r
-               }\r
-               sb.append("]);");\r
-\r
-               String js = sb.toString();\r
-               Clients.evalJavaScript(js);\r
-       }\r
-\r
-       public void setMissingProxy(boolean missingProxy) {\r
-               this.missingProxy = missingProxy;\r
-       }\r
-\r
-       @Command\r
-       public void setPageSize(@BindingParam(TAGEVT_SOURCE) Menuitem source) {\r
-               if (source.isChecked())\r
-                       return;\r
-               int pageSize = Integer.parseInt(source.getValue());\r
-               setSettingsPageSize(pageSize);\r
-               itemsListbox.setPageSize(pageSize);\r
-               itemsListbox.setActivePage(0);\r
-               SessionUtil.putUserPageSize(pageSize);\r
-       }\r
-\r
-       public void setRowsExpanded(boolean rowsExpanded) {\r
-               this.rowsExpanded = rowsExpanded;\r
-       }\r
-\r
-       public void setSearchFrom(Date searchFrom) {\r
-               this.searchFrom = searchFrom;\r
-       }\r
-\r
-       public void setSearchHistory(ListModelList<String> searchHistory) {\r
-               this.searchHistory = searchHistory;\r
-       }\r
-\r
-       private void setSearchTags() {\r
-               // JavaScript : addAllTags(['aaa', 'bbb', 'ccc']);\r
-               if (tags == null)\r
-                       return;\r
-\r
-               StringBuilder sb = new StringBuilder();\r
-               for (String tag : tags.keySet()) {\r
-                       if (tag.contains("'"))\r
-                               continue;\r
-                       if (sb.length() > 0)\r
-                               sb.append(",");\r
-                       sb.append(String.format("'%s'", StringUtils.escape(tag)));\r
-               }\r
-               if (sb.length() > 0) {\r
-                       sb.insert(0, "addAllTags([");\r
-                       sb.append("]);");\r
-\r
-                       String js = sb.toString();\r
-                       logger.info(js);\r
-                       Clients.evalJavaScript(js);\r
-               }\r
-       }\r
-\r
-       public void setSearchTo(Date searchTo) {\r
-               this.searchTo = searchTo;\r
-       }\r
-\r
-       public void setSelectedDateOption(int selectedDateOption) {\r
-               this.selectedDateOption = selectedDateOption;\r
-       }\r
-\r
-       @NotifyChange({ "selectedObject", "hasLowresMediaFile", "hasTSMMediaFile", "lowresMediaFilePath" })\r
-       public void setSelectedObject(ArchivedMedia selectedObject) {\r
-               logger.info("setSelectedObject");\r
-               this.selectedObject = selectedObject;\r
-               if (selectedObject != null) {\r
-                       long mediaId = selectedObject.getMedia().getId();\r
-                       selectedObject.setMedia(itemManager.getMedia(mediaId));\r
-                       selectedObject.setItem(itemManager.getItem(selectedObject.getMedia().getItemId()));\r
-\r
-                       // tags\r
-                       setMediaTags(mediaId);\r
-\r
-                       try {\r
-                               // proxy\r
-                               String video = getLowresMediaFilePath();\r
-                               if (video == null) {\r
-                                       Clients.evalJavaScript("setSource(null, null)");\r
-                               } else {\r
-                                       String srcType = null;\r
-                                       if (video.endsWith(".m3u8"))\r
-                                               srcType = "application/x-mpegURL";\r
-                                       else\r
-                                               srcType = "video/mp4";\r
-\r
-                                       Clients.evalJavaScript(String.format("setSource('%s', '%s')", video, srcType));\r
-                               }\r
-\r
-                       } catch (Exception e) {\r
-                               logger.error(e);\r
-                       }\r
-\r
-               } else {\r
-                       Clients.evalJavaScript("addMediaTags([]);");\r
-               }\r
-       }\r
-\r
-       private void setSettingsPageSize(int pageSize) {\r
-               List<Component> searchSettingItems = searchSettings.getChildren();\r
-               for (Component c : searchSettingItems) {\r
-                       if (!(c instanceof Menuitem))\r
-                               continue;\r
-                       Menuitem menuItem = (Menuitem) c;\r
-                       String value = menuItem.getValue();\r
-                       if (String.valueOf(pageSize).equals(value))\r
-                               menuItem.setChecked(true);\r
-                       else\r
-                               menuItem.setChecked(false);\r
-               }\r
-       }\r
-\r
-       public void setTopTypeFilters(List<TypeFilter> topTypeFilters) {\r
-               this.topTypeFilters = topTypeFilters;\r
-               addTypeFilters(topTypeFilters);\r
-       }\r
-\r
-       private void setUserSelectedFilters() {\r
-               List<String> selectedFilters = SessionUtil.getUserSearchFilter();\r
-               if (selectedFilters != null) {\r
-                       unsetAllFilters();\r
-                       for (String filter : selectedFilters) {\r
-                               if (typeFilters.containsKey(filter)) {\r
-                                       TypeFilter typeFilter = typeFilters.get(filter);\r
-                                       typeFilter.setChecked(true);\r
-                                       typeFilters.put(filter, typeFilter);\r
-                               }\r
-                       }\r
-                       if (typeFilters.size() != selectedFilters.size())\r
-                               allChecked = false;\r
-               }\r
-       }\r
-\r
-       private void showExternalMediaID() {\r
-               String mediaId = SessionUtil.getQueryParameter(MEDIA_ID);\r
-               if (mediaId == null)\r
-                       return;\r
-               try {\r
-                       SearchOptions options = SearchOptions.create().setMediaId(Long.parseLong(mediaId));\r
-                       searchResult = new InitializedCachedListModel(options);\r
-               } catch (Exception e) {\r
-                       Messagebox.show(e.getMessage(), "Hiba!", Messagebox.OK, Messagebox.ERROR);\r
-               }\r
-       }\r
-\r
-       @Command\r
-       @NotifyChange("itemsList")\r
-       public void showInResults() {\r
-               if (selectedObject == null)\r
-                       return;\r
-               int activePageIndex = selectedListItemIndex / itemsListbox.getPageSize();\r
-               positionToScroll = 0;\r
-               // preventAfterRender = true;\r
-               if (activePageIndex != itemsListbox.getActivePage()) {\r
-                       itemsListbox.setActivePage(activePageIndex);\r
-                       logger.info(\r
-                                       "Selected media is shown in the results, which can be found on {} page and also it will be highlighted.",\r
-                                       activePageIndex + 1);\r
-               } else {\r
-                       // TODO for debug purposes\r
-                       // onAfterRenderList();\r
-                       logger.info("Selected media is shown in the results, which can be found on opened page.");\r
-               }\r
-       }\r
-\r
-       private void showSearchTypeWarning() {\r
-               Clients.showNotification(String.format(\r
-                               "Figyelem!<br><br><span style='white-space:nowrap'> A keresés eredménye nem tartalmazza az összes típust.</span>"),\r
-                               "warning", toggleShowTypeFilters, "end_center", 3000);\r
-       }\r
-\r
-       @Command\r
-       public void toggleTypeFiltersCheck() {\r
-               boolean visible = toggleShowTypeFilters.isChecked();\r
-               toggleShowTypeFilters.setIconSclass(visible ? "z-icon-caret-up" : "z-icon-caret-down");\r
-               searchDetails.setOpen(visible);\r
-               SessionUtil.putUserTypeFiltersVisibility(visible);\r
-       }\r
-\r
-       public void updateAllChecked() {\r
-               final boolean[] check = { true };\r
-               for (String key : typeFilters.keySet()) {\r
-                       if (!typeFilters.get(key).isChecked()) {\r
-                               check[0] = false;\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               registerTask(() -> {\r
-                       allChecked = check[0];\r
-                       notifyChange("allChecked");\r
-               });\r
-               timer.start();\r
-       }\r
-\r
-       public void refreshColumns() {\r
-               refreshListboxItems();\r
-       }\r
-\r
-       private void refreshListboxItems() {\r
-               for (Listitem listitem : itemsListbox.getItems()) {\r
-                       for (int i = 0; i < 5; i++) {\r
-                               ((Div) listitem.getFirstChild().getFirstChild().getFirstChild().getChildren().get(i))\r
-                                               .setWidth(columnSizes.get(i));\r
-                       }\r
-               }\r
-       }\r
-\r
-       public void setColumnSizes(List<String> newColumnSizes) {\r
-               if (columnSizes.isEmpty()) {\r
-                       Listhead head = itemsListbox.getListhead();\r
-                       for (int i = 0; i < 5; i++) {\r
-                               Listheader header = (Listheader) head.getChildren().get(i);\r
-                               if (header.getWidth() != null) {\r
-                                       columnSizes.add(header.getWidth());\r
-                               } else {\r
-                                       columnSizes.add("174px");\r
-                               }\r
-                       }\r
-               } else {\r
-                       for (int i = 0; i < newColumnSizes.size(); i++) {\r
-                               columnSizes.set(i, newColumnSizes.get(i));\r
-                       }\r
-               }\r
-               logger.info("columnSizes: {}", columnSizes);\r
-       }\r
-}\r
index f8fe1db365826aae9f8aa3734b8ceef7a602e3fb..b2981167b937f3427bd0f2d38dd8a8137080fbcd 100644 (file)
@@ -5,6 +5,7 @@ import java.util.List;
 public class MediaCubeConfig {\r
 \r
        private int jobQueuePollInterval = 10;\r
+       private int searchResultsListCacheSize = 200;\r
        private MediaCubeAuthentication authentication;\r
        private List<TypeFilter> topTypeFilters;\r
        private List<TypeFilter> bottomTypeFilters;\r
@@ -104,4 +105,12 @@ public class MediaCubeConfig {
                this.theme = theme;\r
        }\r
 \r
+       public int getSearchResultsListCacheSize() {\r
+               return searchResultsListCacheSize;\r
+       }\r
+\r
+       public void setSearchResultsListCacheSize(int searchResultsListCacheSize) {\r
+               this.searchResultsListCacheSize = searchResultsListCacheSize;\r
+       }\r
+\r
 }\r
index 9ba3597a3c6156ce09e857fc5013b9af4ffd8d8f..d8d3368fbd946d084a3da46965e51815f01342a7 100644 (file)
@@ -18,6 +18,7 @@ import java.util.List;
 import java.util.Map;\r
 \r
 import org.apache.commons.lang.StringUtils;\r
+import org.apache.commons.lang.time.DurationFormatUtils;\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
 import org.zkoss.bind.BindContext;\r
@@ -357,7 +358,9 @@ public class TabulatorSearchModel extends AsyncBaseModel {
                        if (!allChecked)\r
                                showSearchTypeWarning();\r
 \r
-                       searchResult = new CachedListModel(options);\r
+                       searchResult = new CachedListModel(options, d -> {\r
+                               logger.info("SQL execution duration {}", DurationFormatUtils.formatDuration(d.toMillis(), "H:mm:ss.S", true));\r
+                       });\r
                        searchResult.addEventListener(e -> {\r
                                if (e.getName().equals(Events.ON_ERROR)) {\r
                                        Exception ex = (Exception) e.getData();\r
index 644abe28b54f2733c211a8ce3abfcfd2f66f8d50..84b4cf69bdbc9d132049d039ba38fe19e3bb52b9 100644 (file)
@@ -20,6 +20,7 @@ import org.zkoss.zk.ui.Sessions;
 import org.zkoss.zk.ui.event.Event;\r
 import org.zkoss.zk.ui.event.EventListener;\r
 import org.zkoss.zk.ui.event.EventQueues;\r
+import org.zkoss.zk.ui.util.Clients;\r
 \r
 import com.ibm.nosql.json.api.BasicDBList;\r
 import com.ibm.nosql.json.api.BasicDBObject;\r
@@ -67,6 +68,11 @@ public class SessionUtil implements GlobalConstants {
        // }\r
        // }\r
 \r
+       public static void consoleLog(String message) {\r
+               logger.info("Console log - {}", message);\r
+               Clients.evalJavaScript(String.format("logToClient('%s')", message));\r
+       }\r
+\r
        public static boolean authenticate(String account, String password) {\r
                MediaCubeConfig mediaCubeConfig = getMediaCubeConfig();\r
                LocalUserHandler localUserHandler = new LocalUserHandler(account, password, mediaCubeConfig.getAuthentication());\r