git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorSweidan Omar <TFS\sweidan.omar>
Tue, 1 Mar 2022 14:41:04 +0000 (14:41 +0000)
committerSweidan Omar <TFS\sweidan.omar>
Tue, 1 Mar 2022 14:41:04 +0000 (14:41 +0000)
server/user.mediacube.gui/src/user/jobengine/zk/model/ListSearchModel.java

index 9331aaa009ed765a6e847bd02fb50f12205c87a3..9f964abe7127b7a952c56724de4a4b1be9687447 100644 (file)
@@ -36,7 +36,6 @@ import org.zkoss.zk.ui.event.Event;
 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.MouseEvent;\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
@@ -45,9 +44,12 @@ import org.zkoss.zul.Button;
 import org.zkoss.zul.Checkbox;\r
 import org.zkoss.zul.Column;\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
@@ -60,6 +62,7 @@ import org.zkoss.zul.Toolbarbutton;
 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
@@ -103,8 +106,9 @@ public class ListSearchModel extends AsyncBaseModel {
        private boolean itemSelected;\r
        private int descLength;\r
        private Map<String, Long> tags = null;\r
-       private List<Long> searchTags = new ArrayList<>();\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
@@ -136,7 +140,7 @@ public class ListSearchModel extends AsyncBaseModel {
 \r
        private String orderBy;\r
 \r
-       private boolean orderAscending;\r
+       private boolean isOrderAscending;\r
        private Map<String, String> topColorClasses;\r
        private int selectedListItemIndex = -1;\r
        private volatile boolean preventAfterRender;\r
@@ -152,12 +156,12 @@ public class ListSearchModel extends AsyncBaseModel {
        public ListSearchModel() {\r
                this.itemManager = ItemManager.getInstance();\r
 \r
-               typeFilters = new LinkedHashMap<>();\r
+               typeFilters = new LinkedHashMap<String, TypeFilter>();\r
                MediaCubeConfig mediaCubeConfig = SessionUtil.getMediaCubeConfig();\r
                setTopTypeFilters(mediaCubeConfig.getTopTypeFilters());\r
                setBottomTypeFilters(mediaCubeConfig.getBottomTypeFilters());\r
 \r
-               columnHeaders = new LinkedHashMap<>();\r
+               columnHeaders = new LinkedHashMap<String, String>();\r
                columnHeaders.put("ID", "mediahouseid");\r
                columnHeaders.put("Cím", "mediatitle");\r
                columnHeaders.put("Hossz", "length");\r
@@ -195,7 +199,8 @@ public class ListSearchModel extends AsyncBaseModel {
                        }\r
                };\r
 \r
-               // searchHistory = new ListModelList<>(SessionUtil.getUserSearchHistory());\r
+               // searchHistory = new\r
+               // ListModelList<String>(SessionUtil.getUserSearchHistory());\r
                // setColumnOrder();\r
                // setUserSelectedFilters();\r
        }\r
@@ -210,9 +215,9 @@ public class ListSearchModel extends AsyncBaseModel {
                // 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
 \r
                try {\r
-\r
                        Selectors.wireComponents(view, this, false);\r
                        Selectors.wireEventListeners(view, this);\r
 \r
@@ -226,8 +231,9 @@ public class ListSearchModel extends AsyncBaseModel {
                        configureSearchResultListbox();\r
                        showExternalMediaID();\r
 \r
-                       searchHistory = new ListModelList<>(SessionUtil.getUserSearchHistory());\r
+                       searchHistory = new ListModelList<String>(SessionUtil.getUserSearchHistory());\r
                        setColumnOrder();\r
+                       logger.info("columnOrder: {}", columnOrder);\r
                        setUserSelectedFilters();\r
 \r
                        if (SessionUtil.getUserPageSize() != 0) {\r
@@ -245,13 +251,16 @@ public class ListSearchModel extends AsyncBaseModel {
                        else\r
                                setSearchTags();\r
 \r
+                       Listhead head = itemsListbox.getListhead();\r
+                       head.addEventListener(ZulEvents.ON_COL_SIZE, new ColumnSizeListener(this));\r
+//                     setColumnSizes(columnSizes);\r
                } catch (Exception e) {\r
                        handleSearchError(e);\r
                }\r
 \r
        }\r
 \r
-       private void clearAllFilters() {\r
+       private void unsetAllFilters() {\r
                for (String filter : typeFilters.keySet()) {\r
                        typeFilters.get(filter).setChecked(false);\r
                }\r
@@ -265,16 +274,17 @@ public class ListSearchModel extends AsyncBaseModel {
        }\r
 \r
        private void configureSearchResultListbox() {\r
+               logger.info("configureSearchResultListbox");\r
                if (itemsListbox != null) {\r
                        if (itemsListbox.getItemCount() > 0) {\r
                                Paging paging = itemsListbox.getPagingChild();\r
                                paging.setAutohide(false);\r
 \r
                                for (Component header : itemsListbox.getHeads()) {\r
-                                       Column column = (Column) header;\r
+                                       Listhead column = (Listhead) header;\r
                                        if (columnOrder != null)\r
-                                               if (column.getLabel().equals(columnOrder.entrySet().iterator().next().getKey()))\r
-                                                       column.setSortDirection(columnOrder.entrySet().iterator().next().getValue());\r
+                                               if (column.getAttribute("label").equals(columnOrder.entrySet().iterator().next().getKey()))\r
+                                                       column.setAttribute("label", columnOrder.entrySet().iterator().next().getValue());\r
                                        column.addEventListener("onSort", evt -> doSort(evt));\r
                                }\r
                        }\r
@@ -320,6 +330,7 @@ public class ListSearchModel extends AsyncBaseModel {
        @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
@@ -333,7 +344,7 @@ public class ListSearchModel extends AsyncBaseModel {
                                SessionUtil.putUserSearchHistory(searchHistory);\r
                        }\r
 \r
-                       List<String> searchFilters = getColumnOrder();\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
@@ -342,7 +353,7 @@ public class ListSearchModel extends AsyncBaseModel {
 \r
                        SearchOptions options = SearchOptions.create().setText(searchValue).setTypes(selectedTypeIds)\r
                                        .setTags(searchTags).setFrom(searchFrom).setTo(searchTo).setMissingProxy(missingProxy)\r
-                                       .setDescLength(descLength).setOrder(orderBy, orderAscending);\r
+                                       .setDescLength(descLength).setOrder(orderBy, isOrderAscending);\r
 \r
                        validateSearchOptions(options);\r
                        searchResult = new CachedListModel(options);\r
@@ -367,19 +378,20 @@ public class ListSearchModel extends AsyncBaseModel {
                                        "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> getColumnOrder() {\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
-                       orderAscending = columnOrder.entrySet().iterator().next().getValue().equals("ascending");\r
+                       isOrderAscending = columnOrder.entrySet().iterator().next().getValue().equals("ascending");\r
                }\r
 \r
                return searchFilters;\r
        }\r
 \r
        public void doSort(Event event) throws Exception {\r
+               logger.info("doSort");\r
                if (itemsListbox.getItemCount() > 0) {\r
                        itemsListbox.getHeads().forEach(c -> ((Column) c).setSortDirection("natural"));\r
                        SortEvent evt = (SortEvent) event;\r
@@ -387,13 +399,14 @@ public class ListSearchModel extends AsyncBaseModel {
                        column.setSortDirection(evt.isAscending() ? "ascending" : "descending");\r
                        logger.info("{} {}", column.getLabel(), evt.isAscending());\r
 \r
-                       columnOrder = new HashMap<>();\r
+                       columnOrder = new HashMap<String, String>();\r
                        columnOrder.put(column.getLabel(), column.getSortDirection());\r
                        SessionUtil.putUserColumnOrder(columnOrder);\r
 \r
                        orderBy = columnHeaders.get(column.getLabel());\r
-                       orderAscending = evt.isAscending();\r
+                       isOrderAscending = evt.isAscending();\r
                        doSearch();\r
+\r
                        notifyChange("searchResult", "selectedObject", "hasLowresMediaFile", "lowresMediaFilePath");\r
                        evt.stopPropagation();\r
                }\r
@@ -593,7 +606,7 @@ public class ListSearchModel extends AsyncBaseModel {
                        Clients.showNotification("Database query error!", "error", btnSearch, "start_center", 3000);\r
                else\r
                        Clients.showNotification(e.getMessage(), "error", btnSearch, "start_center", 3000);\r
-               logger.error(e);\r
+               logger.error(e.getMessage());\r
        }\r
 \r
        private void highlight(ArchivedMedia am, boolean highlight) {\r
@@ -641,11 +654,14 @@ public class ListSearchModel extends AsyncBaseModel {
                logger.info("onAfterRenderList begin");\r
                // aszinkron fut le, kulon kezelendo a hiba\r
                try {\r
-\r
-                       if (searchResult != null)\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
@@ -663,6 +679,7 @@ public class ListSearchModel extends AsyncBaseModel {
                        if (positionToScroll != -1) {\r
                                ensureVisible(positionToScroll);\r
                        }\r
+\r
                } catch (Exception e) {\r
                        handleSearchError(e);\r
                }\r
@@ -832,18 +849,6 @@ public class ListSearchModel extends AsyncBaseModel {
                }\r
        }\r
 \r
-       @Command\r
-       public void rowMouseOut(@BindingParam("evt") MouseEvent event) {\r
-               logger.info(event);\r
-       }\r
-\r
-       // public void rowSelected(@BindingParam("item") Object media,\r
-       // @BindingParam("isChecked") boolean isChecked) {\r
-       @Command\r
-       public void rowMouseOver(@BindingParam("evt") MouseEvent event) {\r
-               logger.info(event);\r
-       }\r
-\r
        @Command\r
        @NotifyChange({ "selectedObject", "hasLowresMediaFile", "hasTSMMediaFile", "lowresMediaFilePath" })\r
        public void select(@BindingParam("selectedObject") ArchivedMedia selectedObject,\r
@@ -944,10 +949,12 @@ public class ListSearchModel extends AsyncBaseModel {
        }\r
 \r
        private void setColumnOrder() {\r
+               columnOrder = new HashMap<String, String>();\r
                if (SessionUtil.getUserColumnOrder() != null) {\r
-                       columnOrder = new HashMap<>();\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
@@ -1109,7 +1116,7 @@ public class ListSearchModel extends AsyncBaseModel {
        private void setUserSelectedFilters() {\r
                List<String> selectedFilters = SessionUtil.getUserSearchFilter();\r
                if (selectedFilters != null) {\r
-                       clearAllFilters();\r
+                       unsetAllFilters();\r
                        for (String filter : selectedFilters) {\r
                                if (typeFilters.containsKey(filter)) {\r
                                        TypeFilter typeFilter = typeFilters.get(filter);\r
@@ -1184,4 +1191,35 @@ public class ListSearchModel extends AsyncBaseModel {
                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