git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorDénes Horváth <USER\denes.horvath>
Tue, 3 Sep 2019 11:52:10 +0000 (11:52 +0000)
committerDénes Horváth <USER\denes.horvath>
Tue, 3 Sep 2019 11:52:10 +0000 (11:52 +0000)
server/user.jobengine.osgi.server/pages/directorylist.zul
server/user.jobengine.osgi.server/pages/maestro.zul
server/user.jobengine.osgi.server/pages/maestrojoblist.zul
server/user.jobengine.osgi.server/pages/targets.zul
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/DirectoryListModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MaestroJobListModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MaestroTarget.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/TargetsListModel.java

index c77a6241dce534b4c4c15cc839f714318e329e36..58ab0ba3557b557af90cc13a7e993cd0c88a3b4c 100644 (file)
@@ -2,50 +2,32 @@
 <zk xmlns:w="http://www.zkoss.org/2005/zk/client">\r
 <window id="zkwindow" border="true" width="100%" height="100%" contentStyle="padding:0;" \r
        apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('user.jobengine.zk.model.DirectoryListModel')">\r
-                                               <div id="kicsidiv" height="100%" width="100%">\r
+                                               <div height="100%" width="100%">\r
+<custom-attributes org.zkoss.zul.image.preload="true" />\r
                                    <!-- Keresés menü -->\r
                                    <hbox width="100%">\r
-                                               <button id="sback" onClick="@command('onBack')" image="/img/baseline_arrow_back_black_18dp.png">\r
-                                                       <attribute w:name="onClick"><![CDATA[\r
-                                                               var ss = zk.Widget.$(jq('$sourceSearch')),\r
-                                                               val = "";\r
-                                                               ss.setValue(val);\r
-                                                               ss.smartUpdate('value', val);\r
-                                                       ]]></attribute>\r
-                                               </button>\r
+                                               <button onClick="@command('onBack')" image="/img/baseline_arrow_back_black_18dp.png" />\r
                                                <textbox id="sourceSearch" value="@bind(vm.searchText)" onOK="@command('doSearch')" />\r
                                                <button hflex="min" image="/img/ic_search_black_18dp.png" onClick="@command('doSearch')" />\r
-                                               <button id="resetSSearch" image="/img/baseline_close_black_18dp.png" onClick="@command('clearFilter')">\r
-                                                       <attribute w:name="onClick"><![CDATA[\r
-                                                               var ss = zk.Widget.$(jq('$sourceSearch')),\r
-                                                               val = "";\r
-                                                               ss.setValue(val);\r
-                                                               ss.smartUpdate('value', val);\r
-                                                       ]]></attribute>\r
-                                               </button>\r
-                                               <button id="refreshS" image="/img/baseline_refresh_black_18dp.png" onClick="@command('refresh')"/>\r
+                                               <button image="/img/baseline_close_black_18dp.png" onClick="@command('clearFilter')" />\r
+                                               <button image="/img/baseline_refresh_black_18dp.png" onClick="@command('refresh')"/>\r
                                        </hbox>\r
                                        <!-- Forrás file lista -->\r
-                                       <listbox id="srcbox" vflex="true" model="@load(vm.files)" multiple="false" checkmark="true" \r
+                                       <listbox id="srcbox" vflex="true" sizedByContent="true" model="@load(vm.files)" multiple="false" checkmark="true" \r
                                                    oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" style="border: none; background: #e3e3e3 !important;"\r
                                                     ctrlKeys="#bak" onCtrlKey="@command('onBack')" onSelect="@command('selectedItemChanged')"\r
                                                     onAfterRender="srcbox.focus()">\r
+                                           <custom-attributes org.zkoss.zul.listbox.selectOnHighlight.disabled="true" />\r
                                                <listhead>\r
-                                                       <listheader label="" sort="auto(isFolder)" width="8%" />\r
-                                                       <listheader label="Név" sort="auto(name)" width="40%" />\r
-                                                       <listheader label="Méret" sort="auto(size)" width="12%" />\r
-                                                       <listheader label="Létrehozva" sort="auto(created)" width="20%" />\r
-                                                       <listheader label="Módosítva" sort="auto(modify)" />\r
+                                                       <listheader label="" hflex="min" align="left" />\r
+                                                       <listheader label="Név" hflex="min" align="left" />\r
+                                                       <listheader label="Méret" hflex="min" align="left" />\r
+                                                       <listheader label="Létrehozva" hflex="min" align="left" />\r
+                                                       <listheader label="Módosítva" hflex="min" align="left" />\r
                                                </listhead>\r
 \r
                                                <template name="model">\r
                                                        <listitem onDoubleClick="@command('onDoubleClick',selectedItem=each)">\r
-                                                               <attribute w:name="onDoubleClick"><![CDATA[\r
-                                                                       var ss = zk.Widget.$(jq('$sourceSearch')),\r
-                                                                       val = "";\r
-                                                                       ss.setValue(val);\r
-                                                                       ss.smartUpdate('value', val);\r
-                                                               ]]></attribute>\r
                                                                <listcell>\r
                                                                        <image  style="margin-left:4px;margin-top:2px;vertical-align:top;">\r
                                                                                <attribute name="src" if="${!each.isFolder}">/img/outline_insert_drive_file_black_18dp.png</attribute>\r
                                                                \r
                                                                <listcell>\r
                                                                        <label value="@load(each.name)" visible="${!each.isFolder}" />\r
-                                                                       <a label="@load(each.name)" visible="${each.isFolder}" onClick="@command('onDoubleClick',selectedItem=each)">\r
-                                                                               <attribute w:name="onClick"><![CDATA[\r
-                                                                                       var ss = zk.Widget.$(jq('$sourceSearch')),\r
-                                                                                       val = "";\r
-                                                                                       ss.setValue(val);\r
-                                                                                       ss.smartUpdate('value', val);\r
-                                                                               ]]></attribute>\r
-                                                                       </a>\r
+                                                                       <a label="@load(each.name)" visible="${each.isFolder}" onClick="@command('onDoubleClick',selectedItem=each)" />\r
                                                                </listcell>\r
                                                                <listcell><label value="@load(each.size) @converter(vm.fileSizeConverter)" visible="${!each.isFolder}" /></listcell>\r
                                                                <listcell><label value="@load(each.created) @converter('formatedDate',format='yyyy.MM.dd hh:mm:ss')" /></listcell>\r
index 8807702c58fd23631c2fa8ad5970271507edd57e..2c19ec01931946c45bdc2e81de4774680a84ad4c 100644 (file)
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
+<?init class="user.jobengine.zk.util.AuthInitiator"?>\r
 <zk xmlns:w="http://www.zkoss.org/2005/zk/client">\r
 <window id="zkwindow" border="true" width="100%" height="98%" contentStyle="padding:0;" \r
        apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('user.jobengine.zk.model.MaestroModel')">\r
index b2c4acfdeb009242760f03ed1606263dda8dda0d..d8672682f42d7b51bfef2883cb27335956b39cac 100644 (file)
@@ -1,22 +1,47 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
-<zk xmlns:w="http://www.zkoss.org/2005/zk/client">\r
+<zk xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:ca="client/attribute">\r
+       <style>\r
+               .z-progressmeter { height: 16px; border: 1px solid #cfcfcf; background: #fff 0 0 repeat-x; text-align: left; overflow: hidden; // background-image:\r
+               url(/zkau/web/1bf94a1d/zul/img/misc/prgmeter-anim.gif); }\r
+       </style>\r
 <window id="zkwindow" border="true" width="100%" height="100%" contentStyle="padding:0;" \r
-       apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('user.jobengine.zk.model.MaestroJobListModel')">\r
-               <custom-attributes org.zkoss.zul.image.preload="true" />\r
+       apply="org.zkoss.bind.BindComposer"  viewModel="@id('vm') @init('user.jobengine.zk.model.MaestroJobListModel')">\r
+       <timer delay="500" repeats="true" onTimer="@command('uiTick')" />\r
+       <custom-attributes org.zkoss.zul.image.preload="true" />\r
 \r
-               <listbox id="jobs" height="400px" model="@load(vm.jobList)" multiple="false" checkmark="false"\r
+       <!-- div id="scdiv" width="100%" height="100%" apply="org.zkoss.bind.BindComposer" -->\r
+               <listbox height="400px" model="@load(vm.jobList)" multiple="false" checkmark="false"\r
                        oddRowSclass="listbox-odd-style" sclass="listbox-normal-style">\r
-                       <auxhead sclass="category-center">\r
-                               <auxheader label="Jobok" colspan="6"/>\r
-                       </auxhead>\r
                        <listhead>\r
-                               <listheader label="" sort="auto(isFolder)" width="8%" />\r
+                               <!-- listheader label="" sort="auto(isFolder)" width="8%" / -->\r
+                               <listheader label="Id" hflex="min" align="left" sort="auto" />\r
+                                               <listheader label="Indítás" hflex="min" align="left" sort="auto" />\r
+                                               <listheader label="Kész" hflex="min" align="left" sort="auto" />\r
+                                               <listheader label="Név" hflex="min" align="left" sort="auto" />\r
+                                               <listheader label="Prioritás" hflex="min" align="left" sort="auto" />\r
+                                               <listheader label="Állapot" hflex="min" align="left" sort="auto" />\r
+                                               <listheader label="Készültség" width="100px" align="left" sort="auto" />\r
+                                               <listheader label="Üzenet" hflex="max" align="left" sort="auto" />\r
+                                               <listheader label="Paraméterek" hflex="min" align="left" sort="auto" />\r
                        </listhead>\r
                        <template name="model" >\r
                                <listitem>\r
-                                       <listcell><label value="@load(each)" /></listcell>\r
+                                       <listcell label="@load(each.id)" />\r
+                                       <listcell label="@load(each.submitted)" />\r
+                                       <listcell label="@load(each.finished)" />\r
+                                       <listcell label="@load(each.name)" />\r
+                                       <listcell label="@load(each.priority)" />\r
+                                       <listcell label="@load(each.status)" />\r
+                                       <listcell>\r
+                                               <progressmeter ca:data-animationspeed="-1" value="@load(each.progress)" width="100%" />\r
+                                       </listcell>\r
+                                       <listcell label="@load(each.description)" />\r
+                                       <listcell>\r
+                                               <a href="javascript:void(0);" label="Paraméterek" onClick="@command('showParameters', item=each)" />\r
+                                       </listcell>\r
                                </listitem>\r
                        </template>\r
                </listbox>\r
+       <!-- /div -->\r
 </window>\r
 </zk>
\ No newline at end of file
index 9f3a8e4be9ab3551ba525e34057bb05ba80384ea..85b96a76024332e3a59aea70016e2f13c47dab6d 100644 (file)
@@ -3,19 +3,16 @@
 <window id="zkwindow" border="true" width="100%" height="100%" contentStyle="padding:0;" \r
        apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('user.jobengine.zk.model.TargetsListModel')">\r
        <vbox vflex="true" width="100%">\r
-                                       <vbox vflex="max" width="100%" pack="start">\r
-                                                       <checkbox label="${each.name}" onCheck="@command('onCheck', targetName=self.label, isChecked=self.checked)" forEach="${vm.targets}" />\r
-                                       </vbox>\r
+               <vbox vflex="max" width="100%" pack="start">\r
+                       <checkbox label="${each.name}" onCheck="@command('onCheck', targetName=self.label, isChecked=self.checked)" forEach="${vm.targets}" />\r
+               </vbox>\r
 \r
-                                       <vbox vflex="min" pack="end" align="end" width="100%" class="bottomright">\r
-                                       <div align="" >\r
-                                               <div class="bottomright">\r
-                                                       <button id="vegrehajt" label="Végrehajt" width="150px" height="80px"\r
-                                                        disabled="@command('notChecked') @global-command('notSelected')"\r
-                                                        onClick="@command('submitJob') @global-command('executeJob')" />\r
-                                               </div>\r
-                                       </div>\r
-                                       </vbox>\r
-                               </vbox>\r
+               <vbox vflex="1" pack="end" align="end" width="97%" class="bottomright">\r
+                       <button label="Végrehajt" width="150px" height="80px"\r
+                        disabled="@load(!vm.executeEnabled)"\r
+                        onClick="@command('createJob')" />\r
+                        <separator />\r
+               </vbox>\r
+       </vbox>\r
 </window>\r
 </zk>\r
index e35f0a30e95058023a7f1f5a48fd4fc599cbdb14..08fe20764ef3982c1d871e32605a004393042f59 100644 (file)
@@ -30,6 +30,7 @@ public class DirectoryListModel {
        private FileSizeConverter fileSizeConverter = new FileSizeConverter();\r
        private String searchText;\r
 \r
+       @NotifyChange("searchText")\r
        public void changeDirectory(RemoteFile selectedFolder) throws Exception {\r
                setSearchText(null);\r
                if (uri.getCurrentPath() == null) {\r
@@ -42,12 +43,13 @@ public class DirectoryListModel {
        }\r
 \r
        @Command\r
-       @NotifyChange("files")\r
+       @NotifyChange({ "files", "searchText" })\r
        public void clearFilter() throws Exception {\r
-               //files = new ListModelList<>(filesCopy);\r
+               // files = new ListModelList<>(filesCopy);\r
                setSearchText(null);\r
                files.clear();\r
                files.addAll(filesCopy);\r
+               selectedItemChanged();\r
        }\r
 \r
        @Command\r
@@ -120,21 +122,23 @@ public class DirectoryListModel {
                        } else {\r
                                uri.setCurrentPath(null);\r
                        }\r
-                       setSourceList();\r
                }\r
+               setSourceList();\r
+               selectedItemChanged();\r
        }\r
 \r
        @Command\r
-       @NotifyChange({ "files", "searchText" })\r
+       @NotifyChange("searchText")\r
        public void onDoubleClick(@BindingParam("selectedItem") RemoteFile selectedItem) {\r
                if (selectedItem.getIsFolder()) {\r
                        try {\r
-\r
                                changeDirectory(selectedItem);\r
                        } catch (Exception e) {\r
                                logger.error("A forrás file -ok nem elérhetőek: {}", e);\r
                        }\r
                }\r
+\r
+               selectedItemChanged();\r
        }\r
 \r
        @Command\r
@@ -145,7 +149,7 @@ public class DirectoryListModel {
                        files.addAll(uri.getRemoteFiles());\r
                } else {\r
                        files.clear();\r
-                       //List<RemoteFile> currList = new ArrayList<>;\r
+                       // List<RemoteFile> currList = new ArrayList<>;\r
                        List<RemoteFile> currList = uri.getRemoteFiles();\r
                        for (int i = 0; i < currList.size(); i++) {\r
                                if (currList.get(i).getName().contains(searchText)) {\r
@@ -158,9 +162,10 @@ public class DirectoryListModel {
        }\r
 \r
        @Command\r
+       @NotifyChange("executeEnabled")\r
        public void selectedItemChanged() {\r
                Set<RemoteFile> selection = files.getSelection();\r
-               logger.info("Selected: {}", selection.size());\r
+               // logger.info("Selected: {}", selection.size());\r
 \r
                Map<String, Object> args = new HashMap<>();\r
                args.put("sourcedata", selection);\r
@@ -180,8 +185,8 @@ public class DirectoryListModel {
        }\r
 \r
        public void setSourceList() throws Exception {\r
-               //files = new ListModelList<>(filesCopy);\r
-               //files = new ListModelList<>(uri.getRemoteFiles());\r
+               // files = new ListModelList<>(filesCopy);\r
+               // files = new ListModelList<>(uri.getRemoteFiles());\r
                files.clear();\r
                files.addAll(uri.getRemoteFiles());\r
                filesCopy = new ArrayList<>(files);\r
index cd77d228b11cc836233286c6c98f85e4eb9a2967..bebeeea69eefc85bce05b93436576d8e6611c885 100644 (file)
@@ -7,6 +7,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;\r
 import org.zkoss.bind.annotation.BindingParam;\r
 import org.zkoss.bind.annotation.Command;\r
+import org.zkoss.bind.annotation.GlobalCommand;\r
 import org.zkoss.bind.annotation.Init;\r
 import org.zkoss.bind.annotation.NotifyChange;\r
 import org.zkoss.zk.ui.Executions;\r
@@ -22,6 +23,7 @@ import user.jobengine.server.IJobEngine;
 import user.jobengine.server.IJobRuntime;\r
 import user.jobengine.server.JobChangedEvent;\r
 import user.jobengine.server.JobEngine;\r
+import user.jobengine.server.JobEngineException;\r
 import user.jobengine.zk.util.SessionUtil;\r
 \r
 public class MaestroJobListModel extends AsyncBaseModel implements IJobChangedListener {\r
@@ -71,8 +73,8 @@ public class MaestroJobListModel extends AsyncBaseModel implements IJobChangedLi
        private void initializeList() {\r
                jobList.clear();\r
                Map<Long, IJobRuntime> jobMap = jobEngine.getJobs();\r
-               for (int i=0;i<jobMap.size();i++){\r
-                       if (jobMap.get(i).getOwner() == currentUser){\r
+               for (int i = 0; i < jobMap.size(); i++) {\r
+                       if (jobMap.get(i).getOwner() == currentUser) {\r
                                jobList.add(i, jobMap.get(i));\r
                        }\r
                }\r
@@ -114,7 +116,6 @@ public class MaestroJobListModel extends AsyncBaseModel implements IJobChangedLi
                this.jobList = jobList;\r
        }\r
 \r
-\r
        public void setNewPriority(int newPriority) {\r
                this.newPriority = newPriority;\r
        }\r
@@ -130,4 +131,23 @@ public class MaestroJobListModel extends AsyncBaseModel implements IJobChangedLi
                Window window = (Window) Executions.createComponents(template, null, ListUtils.asMap("jobRuntime", jobRuntime));\r
                window.doModal();\r
        }\r
+\r
+       @GlobalCommand\r
+       @NotifyChange({ "jobList" })\r
+       public void submitJob() {\r
+               // public void submitJob(@BindingParam("targets") MaestroTarget targets)\r
+               // {\r
+               IJobRuntime job;\r
+               String template = "fake.xml";\r
+               // Map<String, Object> args = new HashMap<>();\r
+               // args.put("targets", targets);\r
+               try {\r
+                       // jobEngine.submit(template, "fakeJob", null, currentUser);\r
+                       job = jobEngine.submit(template, "fakeJob", ListUtils.asMap("itemID", 0), currentUser);\r
+                       // jobList.add(job);\r
+               } catch (JobEngineException e) {\r
+                       logger.info("Hiba a job indításakor", e);\r
+               }\r
+       }\r
+\r
 }\r
index f1e5999759b2ecbcc45b458f63d270ab686b8af0..8b4786d72f3fd29fd2500631379aa36db47901ff 100644 (file)
@@ -5,6 +5,7 @@ import user.commons.StoreUri;
 public class MaestroTarget {\r
        private String name;\r
        private StoreUri storeUri;\r
+       private Boolean selected;\r
 \r
        public String getName() {\r
                return name;\r
@@ -14,10 +15,22 @@ public class MaestroTarget {
                return storeUri;\r
        }\r
 \r
+       public Boolean isSelected() {\r
+               if (selected == null) {\r
+                       return false;\r
+               } else {\r
+                       return selected;\r
+               }\r
+       }\r
+\r
        public void setName(String name) {\r
                this.name = name;\r
        }\r
 \r
+       public void setSelected(Boolean selected) {\r
+               this.selected = selected;\r
+       }\r
+\r
        public void setStoreUri(StoreUri storeUri) {\r
                this.storeUri = storeUri;\r
        }\r
index edc47d39ee85e1f9b07d93b2e35f483978637ecf..25e7cf86b21a62693c845abed877b275a688eaee 100644 (file)
@@ -4,6 +4,7 @@ import java.util.Set;
 \r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.BindUtils;\r
 import org.zkoss.bind.annotation.BindingParam;\r
 import org.zkoss.bind.annotation.Command;\r
 import org.zkoss.bind.annotation.GlobalCommand;\r
@@ -20,6 +21,45 @@ public class TargetsListModel {
        private MaestroConfig config = null;\r
        private ListModelList<MaestroTarget> targets;\r
        private boolean executeEnabled;\r
+       Set<RemoteFile> sourceData;\r
+       Set<IMetadata> metaData;\r
+\r
+       public boolean conditionsOk() {\r
+               boolean srcMetaOk = false;\r
+               boolean ret = false;\r
+               if (sourceData != null && metaData != null) {\r
+                       if (!sourceData.isEmpty() && !metaData.isEmpty()) {\r
+                               srcMetaOk = true;\r
+                       }\r
+               }\r
+\r
+               // Végén törölni !!! ////////////////////////////////////////\r
+               if (sourceData != null) {\r
+                       if (!sourceData.isEmpty()) {\r
+                               srcMetaOk = true;\r
+                       }\r
+               }\r
+               // Végén törölni !!! ////////////////////////////////////////\r
+\r
+               if (srcMetaOk) {\r
+                       for (int i = 0; i < targets.size(); i++) {\r
+                               if (targets.get(i).isSelected().booleanValue()) {\r
+                                       ret = true;\r
+                                       break;\r
+                               }\r
+                       }\r
+               }\r
+               return ret;\r
+       }\r
+\r
+       @Command\r
+       public void createJob() {\r
+               Set<MaestroTarget> selection = targets.getSelection();\r
+\r
+               // Map<String, Object> args = new HashMap<>();\r
+               // args.put("targets", selection);\r
+               BindUtils.postGlobalCommand(null, null, "submitJob", null);\r
+       }\r
 \r
        public ListModelList<MaestroTarget> getTargets() {\r
                return targets;\r
@@ -34,28 +74,42 @@ public class TargetsListModel {
                } catch (Exception e) {\r
                        logger.error("Hiba a config file beállításánál {}", e.getMessage());\r
                }\r
+               setExecuteEnabled(false);\r
        }\r
 \r
+       @Command\r
        public boolean isExecuteEnabled() {\r
                return executeEnabled;\r
        }\r
 \r
        @Command\r
-       public void onCheck(@BindingParam("data") MaestroTarget data) {\r
-               //@ContextParam(ContextType.TRIGGER_EVENT) CheckEvent event,\r
-\r
+       @NotifyChange("executeEnabled")\r
+       public void onCheck(@BindingParam("targetName") String targetName, @BindingParam("isChecked") Boolean isChecked) {\r
+               // public void onCheck(@BindingParam("sourcedata") Set<RemoteFile>\r
+               // sourceData, @BindingParam("metadata") Set<IMetadata> metaData) {\r
+               // @ContextParam(ContextType.TRIGGER_EVENT) CheckEvent event,\r
+               for (int i = 0; i < targets.size(); i++) {\r
+                       if (targets.get(i).getName() == targetName) {\r
+                               targets.get(i).setSelected(isChecked.booleanValue());\r
+                       }\r
+               }\r
+               setExecuteEnabled(conditionsOk());\r
        }\r
 \r
+       @Command\r
+       @NotifyChange("executeEnabled")\r
        public void setExecuteEnabled(boolean executeEnabled) {\r
                this.executeEnabled = executeEnabled;\r
        }\r
 \r
-       @NotifyChange("executeEnabled")\r
        @GlobalCommand\r
+       @NotifyChange("executeEnabled")\r
        public void updateExecuteState(@BindingParam("sourcedata") Set<RemoteFile> sourceData, @BindingParam("metadata") Set<IMetadata> metaData) {\r
-               logger.info("{}", sourceData);\r
-               logger.info("{}", metaData);\r
-\r
+               this.sourceData = sourceData;\r
+               this.metaData = metaData;\r
+               setExecuteEnabled(conditionsOk());\r
+               // logger.info("{}", sourceData);\r
+               // logger.info("{}", metaData);\r
        }\r
 \r
 }\r