git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorDénes Horváth <USER\denes.horvath>
Fri, 9 Aug 2019 12:56:26 +0000 (12:56 +0000)
committerDénes Horváth <USER\denes.horvath>
Fri, 9 Aug 2019 12:56:26 +0000 (12:56 +0000)
19 files changed:
server/user.jobengine.osgi.server/img/baseline_arrow_back_black_18dp.png [new file with mode: 0644]
server/user.jobengine.osgi.server/img/baseline_close_black_18dp.png [new file with mode: 0644]
server/user.jobengine.osgi.server/img/baseline_folder_black_18dp.png [new file with mode: 0644]
server/user.jobengine.osgi.server/img/baseline_insert_drive_file_black_18dp.png [new file with mode: 0644]
server/user.jobengine.osgi.server/img/baseline_refresh_black_18dp.png [new file with mode: 0644]
server/user.jobengine.osgi.server/img/outline_insert_drive_file_black_18dp.png [new file with mode: 0644]
server/user.jobengine.osgi.server/pages/directorylist.zul [new file with mode: 0644]
server/user.jobengine.osgi.server/pages/maestro.zul
server/user.jobengine.osgi.server/pages/planner.zul [new file with mode: 0644]
server/user.jobengine.osgi.server/pages/searchitems.zul
server/user.jobengine.osgi.server/pages/targets.zul [new file with mode: 0644]
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/DirectoryListModel.java [new file with mode: 0644]
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/FileSizeConverter.java [new file with mode: 0644]
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MaestroModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MenuModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/PlannerListModel.java [new file with mode: 0644]
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/RetrieveBatchSelectorModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/SearchModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/TargetsListModel.java [new file with mode: 0644]

diff --git a/server/user.jobengine.osgi.server/img/baseline_arrow_back_black_18dp.png b/server/user.jobengine.osgi.server/img/baseline_arrow_back_black_18dp.png
new file mode 100644 (file)
index 0000000..4a04f65
Binary files /dev/null and b/server/user.jobengine.osgi.server/img/baseline_arrow_back_black_18dp.png differ
diff --git a/server/user.jobengine.osgi.server/img/baseline_close_black_18dp.png b/server/user.jobengine.osgi.server/img/baseline_close_black_18dp.png
new file mode 100644 (file)
index 0000000..aa51b15
Binary files /dev/null and b/server/user.jobengine.osgi.server/img/baseline_close_black_18dp.png differ
diff --git a/server/user.jobengine.osgi.server/img/baseline_folder_black_18dp.png b/server/user.jobengine.osgi.server/img/baseline_folder_black_18dp.png
new file mode 100644 (file)
index 0000000..8870828
Binary files /dev/null and b/server/user.jobengine.osgi.server/img/baseline_folder_black_18dp.png differ
diff --git a/server/user.jobengine.osgi.server/img/baseline_insert_drive_file_black_18dp.png b/server/user.jobengine.osgi.server/img/baseline_insert_drive_file_black_18dp.png
new file mode 100644 (file)
index 0000000..3714c4f
Binary files /dev/null and b/server/user.jobengine.osgi.server/img/baseline_insert_drive_file_black_18dp.png differ
diff --git a/server/user.jobengine.osgi.server/img/baseline_refresh_black_18dp.png b/server/user.jobengine.osgi.server/img/baseline_refresh_black_18dp.png
new file mode 100644 (file)
index 0000000..b1321c3
Binary files /dev/null and b/server/user.jobengine.osgi.server/img/baseline_refresh_black_18dp.png differ
diff --git a/server/user.jobengine.osgi.server/img/outline_insert_drive_file_black_18dp.png b/server/user.jobengine.osgi.server/img/outline_insert_drive_file_black_18dp.png
new file mode 100644 (file)
index 0000000..1444639
Binary files /dev/null and b/server/user.jobengine.osgi.server/img/outline_insert_drive_file_black_18dp.png differ
diff --git a/server/user.jobengine.osgi.server/pages/directorylist.zul b/server/user.jobengine.osgi.server/pages/directorylist.zul
new file mode 100644 (file)
index 0000000..72614a7
--- /dev/null
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<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
+                                   <!-- Keresés menü -->\r
+                                   <hbox width="100%">\r
+                                               <button id="sback" onClick="@command('onSrcBack')" 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
+                                               <textbox id="sourceSearch" value="@bind(vm.searchText)" onOK="@command('refresh')" />\r
+                                               \r
+       \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('clearSrcFilter')">\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
+                                       </hbox>\r
+                                       <!-- Forrás file lista -->\r
+                                       <listbox id="srcbox" vflex="true" model="@load(vm.srcFiles)" multiple="false" checkmark="true" \r
+                                                   oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" style="border: none; background: #e3e3e3 !important;"\r
+                                                    ctrlKeys="#bak" onCtrlKey="@command('onSrcBack')" onSelect="@command('selectedItemChanged')"\r
+                                                    onAfterRender="srcbox.focus()">\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
+                                               </listhead>\r
+\r
+                                               <template name="model">\r
+                                                       <!-- listitem onDoubleClick="@command('onSourceDoubleClick',selectedItem=each)" -->\r
+                                                       <listitem onDoubleClick="@command('onSourceDoubleClick')">\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
+                                                                               <attribute name="src" if="${each.isFolder}">/img/baseline_folder_black_18dp.png</attribute>\r
+                                                                       </image>\r
+                                                               </listcell>\r
+                                                               \r
+                                                               <listcell>\r
+                                                                       <label value="@load(each.name)" visible="${!each.isFolder}" />\r
+                                                                       <a label="@load(each.name)" visible="${each.isFolder}" onClick="@command('onSourceClick',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
+                                                               </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
+                                                               <listcell><label value="@load(each.modify) @converter('formatedDate',format='yyyy.MM.dd hh:mm:ss')" /></listcell>\r
+                                                       </listitem>\r
+                                               </template>\r
+                                       </listbox> \r
+                               </div> \r
+</window>\r
+</zk>\r
index f822ee51dcf50d37ac6f3ce9dd450de034ea1cb0..ccb9d801336c5ab349557e83b63797c871f8a5eb 100644 (file)
@@ -1,51 +1,50 @@
 <?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="none" width="100%" height="100%" contentStyle="padding:0;" \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.MaestroModel')">\r
                <custom-attributes org.zkoss.zul.image.preload="true" />\r
-       <!-- borderlayout width="${myWidth}" height="${myHeight}" -->\r
-       <!-- borderlayout width="100px" height="100px" -->\r
-               <borderlayout height="100%">\r
-                       <west border="10">\r
-                               <!-- hbox height="100%" width="100%" align="center" pack="center" style="background: #008AC8;" -->\r
-                                       <listbox id="box" height="400px" multiple="false" model="@load(vm.sourceFileList)" selectedItem="@bind(vm.sourceFileList)">\r
-                                               <auxhead>\r
-                                                       <auxheader label="Forrás fájlok" colspan="1" align="center" />\r
-                                               </auxhead>\r
-                                               <listhead>\r
-                                                       <listheader label="Név" width="200px" />\r
-                                                       <!-- listheader label="Név" sort="auto(fileName)" width="200px" / -->\r
-                                                       <!-- listheader label="Hossz" sort="auto(length)" width="80px" / -->\r
-                                                       <!-- listheader label="Típus" sort="auto(type)" width="80px" / -->\r
-                                               </listhead>\r
-\r
-                                               <template name="model" >\r
-                                                       <listitem>\r
-                                                               <listcell><label value="@load(each)" /></listcell>\r
-                                                               <!-- listcell><label value="@load(each.fileName)" /></listcell -->\r
-                                                               <!-- listcell><label value="@load(each.length)" /></listcell -->\r
-                                                               <!-- listcell><label value="@load(each.type)" /></listcell -->\r
-                                                       </listitem>\r
-                                               </template>\r
-                                       </listbox> \r
-                               <!-- /hbox -->\r
+               <borderlayout width="100%" height="100%">\r
+                       <west width="40%" splittable="true">\r
+                       <panel width="100%" height="100%" border="normal" title="Source">\r
+               <panelchildren style="padding:5px;">\r
+                                       <include src="/pages/directorylist.zul" />\r
+                               </panelchildren>\r
+            </panel>\r
                        </west>\r
-                       <center border="0">\r
-                               <hbox height="100%" width="100%" align="bottom" pack="start" style="background: #008AC8;">\r
-                                   <image src="/img/mediacube_logo_v2_50x50.png" />\r
-                                       <label style="color:#e3e3e3;font-size:26px;font-weight:bold" value="MediaCube" />\r
-                                       </hbox>\r
+                       <center border="true">\r
+                               <panel width="100%" border="normal" title="Traffic" vflex="true">\r
+                       <panelchildren style="padding:5px;">\r
+                                       <include src="/pages/planner.zul" />\r
+                               </panelchildren>\r
+               </panel>\r
                        </center>\r
-                       <east border="0">\r
-                               <hbox height="100%" width="100%" align="bottom" pack="center" style="background: #008AC8;">\r
-                                       <image src="/img/mediacube_logo_v2_50x50.png" />\r
-                                       <label style="color:#e3e3e3;font-size:26px;font-weight:bold" value="MediaCube" />\r
-                                       </hbox>\r
+                       <east border="true" width="25%" splittable="true">\r
+                               <panel width="100%" border="normal" title="Targets" vflex="true">\r
+                               <panelchildren style="padding:5px;">\r
+                                               <include src="/pages/targets.zul" />\r
+                                       </panelchildren>\r
+               </panel>\r
                        </east>\r
-                       <south border="0">\r
-                               \r
-                               </south>\r
+                       <south border="true" height="40%" hflex="true" splittable="true">\r
+                               <panel width="100%" border="normal" title="Jobs">\r
+                               <panelchildren style="padding:5px;">\r
+                               <listbox id="jobs" height="400px" model="@load(vm.jobs)" 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
+                                       </listhead>\r
+                                       <template name="model" >\r
+                                               <listitem>\r
+                                                       <listcell><label value="@load(each)" /></listcell>\r
+                                                       </listitem>\r
+                                       </template>\r
+                               </listbox>\r
+                               </panelchildren>\r
+               </panel>\r
+                       </south>\r
                </borderlayout>\r
                <!-- include src="/pages/menu.zul" / -->\r
        <!-- /borderlayout -->\r
diff --git a/server/user.jobengine.osgi.server/pages/planner.zul b/server/user.jobengine.osgi.server/pages/planner.zul
new file mode 100644 (file)
index 0000000..cfdd4ff
--- /dev/null
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<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.PlannerListModel')">\r
+               <custom-attributes org.zkoss.zul.image.preload="true" />\r
+                                   <!-- Keresés menü -->\r
+                                   <hbox>\r
+                                               <button id="back" image="/img/baseline_arrow_back_black_18dp.png">\r
+                                                       <attribute w:name="onClick"><![CDATA[\r
+                                                               var ts = zk.Widget.$(jq('$search')),\r
+                                                               val = "";\r
+                                                               ts.setValue(val);\r
+                                                               ts.smartUpdate('value', val);\r
+                                                       ]]></attribute>\r
+                                               </button>\r
+                                               <textbox id="search" />\r
+                                               <button id="resetSearch" image="/img/baseline_close_black_18dp.png">\r
+                                                       <attribute w:name="onClick"><![CDATA[\r
+                                                               var ts = zk.Widget.$(jq('$search')),\r
+                                                               val = "";\r
+                                                               ts.setValue(val);\r
+                                                               ts.smartUpdate('value', val);\r
+                                                       ]]></attribute>\r
+                                               </button>\r
+                                               <button id="refresh" image="/img/baseline_refresh_black_18dp.png">\r
+                                               </button>\r
+                                       </hbox>\r
+                                       <!-- Gombok -->\r
+                                       <hbox pack="left" align="top" id="searchFiltersMenu">\r
+                                               <vlayout>\r
+                                                       <toolbar class="toolbar">\r
+                                                               <forEach items="@load(vm.topTypeFilterNames)">\r
+                                                                       <toolbarbutton label="@load(each)" mode="toggle" \r
+                                                                                                       checked="@bind(vm.typeFilters[each].checked) @validator(vm.allFilterCheckedValidator)" />\r
+                                                               </forEach>\r
+                                                       </toolbar>\r
+                                               </vlayout>\r
+                                       </hbox>\r
+                                       <!-- Cél file lista -->\r
+                                       <listbox id="lbox" vflex="true"  \r
+                                                   oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" style="border: none; background: #e3e3e3 !important;"\r
+                                                    onAfterRender="lbox.focus()">\r
+                                               <listhead>\r
+                                                       <listheader label="Tételek" />\r
+                                               </listhead>\r
+\r
+                                               <template name="model" hflex="max">\r
+                                                       <listitem >\r
+                                                               <listcell> label="Tételek" /></listcell>\r
+                                                       </listitem>\r
+                                               </template>\r
+                                       </listbox> \r
+\r
+</window>\r
+</zk>\r
index e2be465365e3a1e3199a5ffaa4c4f2fe45c51349..ed34b545b993fbd6bd7040c95eff9ffb13c4affa 100644 (file)
@@ -2,7 +2,7 @@
 <?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" ?>\r
 <?init class="user.jobengine.zk.util.AuthInitiator"?>\r
 \r
-<zk xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:h="xhtml">\r
+<zk xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:h="xhtml" xmlns:n="native" xmlns:c="client">\r
        <style src="/css/video-js.css" />\r
        <h:script src="/js/videojs-ie8.min.js"  />\r
        <h:script src="/js/video.js"  />\r
                \r
                function setSource(src) {\r
                        console.log("setSource", player, src);\r
-                       player.src({type: 'video/mp4', src: src});\r
+                       if (src != null) {\r
+                               player.src({type: 'video/mp4', src: src});\r
+                       }else{\r
+                               player.src({type: 'image/png', src: "/img/mediacube_logo_v2_50x50.png"});\r
+                       }\r
                }       \r
                \r
                function pushTcIn() {\r
                        var current = player.currentTime();\r
                        console.log("pushTcIn", current);\r
-                       zk.Widget.$('$videoListener').fire('onTcIn', current, {toServer:true});\r
-               }       \r
+                       zk.Widget.$('$videoListener').fire('onTcIn', {meta: current}, {toServer:true});\r
+               }\r
+               \r
+               function pushTcOut() {\r
+                       var current = player.currentTime();\r
+                       console.log("pushTcOut", current);\r
+                       zk.Widget.$('$videoListener').fire('onTcOut', {meta: current}, {toServer:true});\r
+               }\r
        </h:script>\r
 \r
        <!-- csak igy jo a list sebessege -->\r
        <div id="scdiv" width="100%" height="100%" apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('user.jobengine.zk.model.SearchModel')">\r
                <timer id="timer" delay="1" repeats="false" onTimer="@command('uiTick')" />\r
                <borderlayout width="100%" height="100%">\r
-                       <west border="none" size="60%" splittable="true" minsize="500" onSize="@command('onWestResize', west=self)">\r
+                       <west border="none" flex="true" size="60%" splittable="true" minsize="500" onSize="@command('onWestResize', west=self)">\r
                                <div height="100%" width="100%">\r
                                        <groupbox vflex="min" closable="false">\r
                                                <vlayout>\r
                                <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 id="myVideoDiv" class="video-js vjs-default-skin vjs-big-play-centered" poster="/img/mediacube_logo_v2_50x50.png">\r
+                                                       <h:video id="myVideoDiv" class="video-js vjs-default-skin vjs-big-play-centered">\r
                                                        </h:video>\r
-                                                       <div id="videoListener" onTcIn="@command('onTcIn')" />\r
-                                                       \r
-                                                       \r
+                                                       <div id="videoListener" onTcOut="@command('onTcOut')" onTcIn="@command('onTcIn')" />\r
+\r
 <!--                                                   <iframe id="mediaPlayer" height="100%" width="100%" autohide="false" src="@load(vm.lowresMediaFilePath)"></iframe> -->\r
                                                </div>\r
                                        </north>\r
                                        <center border="none">\r
                                                <div height="100%">\r
                                                        <toolbar width="100%" style="min-height:40px; font-size:8px">\r
-                                                       <div style="max-width:450px; margin:auto;" >\r
-                                                               <div sclass="menuButtons">\r
-                                                                       <toolbarbutton image="/img/ic_compare_arrows_black_18dp.png" autodisable="self" onClick="@command('showInResults')"\r
-                                                                               disabled="@load(vm.selectedObject eq null)" label="Szinkronizálás" />\r
-                                                                       <toolbarbutton sclass="col-xs-12" image="/img/ic_shopping_cart_black_18dp.png" autodisable="self" onClick="@command('downloadMedia')"\r
-                                                                               disabled="@load(not vm.hasTSMMediaFile)" label="Kosárba" />\r
-                                                                       <toolbarbutton image="/img/baseline_share_black_18dp.png" autodisable="self" onClick="@command('copyMediaIdToClipboard')" \r
-                                                                               disabled="@load(not sessionScope.userPrincipal.editor or sessionScope.userPrincipal.anonymous or vm.selectedObject eq null)" label="Megosztás" />\r
-                                                                       <toolbarbutton image="/img/baseline_edit_black_18dp.png" autodisable="self" onClick="@command('openMetaDataDialog')"\r
-                                                                               disabled="@load(not sessionScope.userPrincipal.editor or sessionScope.userPrincipal.anonymous or vm.selectedObject eq null)" label="Szerkesztés" />\r
-                                                                       <toolbarbutton autodisable="self" onClick="pushTcIn()" label="IN" />\r
-                                                               </div>\r
+                                                               <div style="max-width:450px; margin:auto;" >\r
+                                                                       <div sclass="menuButtons">\r
+                                                                               <toolbarbutton image="/img/ic_compare_arrows_black_18dp.png" autodisable="self" onClick="@command('showInResults')"\r
+                                                                                       disabled="@load(vm.selectedObject eq null)" label="Szinkronizálás" />\r
+                                                                               <toolbarbutton sclass="col-xs-12" image="/img/ic_shopping_cart_black_18dp.png" autodisable="self" onClick="@command('downloadMedia')"\r
+                                                                                       disabled="@load(not vm.hasTSMMediaFile)" label="Kosárba" />\r
+                                                                               <toolbarbutton image="/img/baseline_share_black_18dp.png" autodisable="self" onClick="@command('copyMediaIdToClipboard')" \r
+                                                                                       disabled="@load(not sessionScope.userPrincipal.editor or sessionScope.userPrincipal.anonymous or vm.selectedObject eq null)" label="Megosztás" />\r
+                                                                               <toolbarbutton image="/img/baseline_edit_black_18dp.png" autodisable="self" onClick="@command('openMetaDataDialog')"\r
+                                                                                       disabled="@load(not sessionScope.userPrincipal.editor or sessionScope.userPrincipal.anonymous or vm.selectedObject eq null)" label="Szerkesztés" />\r
+                                                                               <separator />\r
+                                                                               <toolbarbutton autodisable="self" c:onClick="pushTcIn('${arg.field}')" label="IN" />\r
+                                                                               <toolbarbutton autodisable="self" c:onClick="pushTcOut('${arg.field}')" label="OUT" />\r
+                                                                       </div>\r
                                                                </div>\r
                                                        </toolbar>\r
                                                        <div id="mediaDetails" width="100%" vflex="true" style="padding: 4px; overflow:auto; background-color: white">\r
diff --git a/server/user.jobengine.osgi.server/pages/targets.zul b/server/user.jobengine.osgi.server/pages/targets.zul
new file mode 100644 (file)
index 0000000..ba9f21c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<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.TargetsListModel')">\r
+       <vbox vflex="true" width="100%">\r
+                                       <vbox vflex="max" width="100%" pack="start">\r
+                                                       <checkbox label="${each.name}" onCheck="@command('onCheck', data=each)" 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
+                                               </div>\r
+                                       </div>\r
+                                       </vbox>\r
+                               </vbox>\r
+</window>\r
+</zk>\r
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/DirectoryListModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/DirectoryListModel.java
new file mode 100644 (file)
index 0000000..d1b9f33
--- /dev/null
@@ -0,0 +1,163 @@
+package user.jobengine.zk.model;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+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.Init;\r
+import org.zkoss.bind.annotation.NotifyChange;\r
+import org.zkoss.zul.ListModelList;\r
+\r
+import user.commons.RemoteFile;\r
+import user.commons.StoreUri;\r
+import user.commons.config.JSONConfig;\r
+import user.jobengine.db.Store;\r
+\r
+public class DirectoryListModel {\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private Store store = new Store();\r
+       private ListModelList<RemoteFile> files;\r
+       private List<RemoteFile> filesCopy;\r
+       private StoreUri uri;\r
+       private MaestroConfig config = null;\r
+       private FileSizeConverter fileSizeConverter = new FileSizeConverter();\r
+       private String searchText;\r
+\r
+       public void setSourceList() throws Exception {\r
+               filesCopy = new ArrayList<>(files);\r
+               files = new ListModelList<>(filesCopy);\r
+       }\r
+\r
+       public void changeSrcDirectory(RemoteFile selectedFolder) throws Exception {\r
+               if (uri.getCurrentPath() == null){\r
+                       uri.setCurrentPath(selectedFolder.getName());\r
+               }else{\r
+                       uri.setCurrentPath(uri.getCurrentPath() + "/" + selectedFolder.getName());\r
+               }\r
+\r
+               setSourceList();\r
+       }\r
+       \r
+       @Command\r
+       public void selectedItemChanged (){\r
+               Set<RemoteFile> selection = files.getSelection();\r
+               logger.info("Selected: {}", selection.size());\r
+       }\r
+\r
+       @Init\r
+       public void init() {\r
+               try {\r
+                       String key = "jobengine.maestro.config";\r
+                       config = JSONConfig.read(key, MaestroConfig.class);\r
+                       uri = config.getSourceStoreUri();\r
+\r
+                       files = new ListModelList<>(uri.getRemoteFiles()); \r
+                       setSourceList();\r
+               } catch (Exception e) {\r
+                       logger.error("A forrás file -ok nem elérhetőek: {}", e.getMessage());\r
+               }\r
+       }\r
+\r
+       @Command\r
+       @NotifyChange("srcFiles")\r
+       public void onSourceDoubleClick() {\r
+//             if (selectedSource.getIsFolder()){\r
+//                     try {\r
+//                             \r
+//                             changeSrcDirectory(selectedSource);\r
+//                     } catch (Exception e) {\r
+//                             logger.error("A forrás file -ok nem elérhetőek: {}", e);\r
+//                     }\r
+//             }\r
+       }\r
+       \r
+       @Command\r
+       @NotifyChange("srcFiles")\r
+       public void onSourceClick(@BindingParam("selectedItem") RemoteFile selectedItem) {\r
+               //selectedSource = selectedItem;\r
+               onSourceDoubleClick();\r
+       }\r
+\r
+       @Command\r
+    @NotifyChange("srcFiles")\r
+    public void refresh() throws Exception {\r
+               if (searchText == null || searchText == ""){\r
+                       setSourceList();\r
+               }else{          \r
+                       files.clear();\r
+                       for (int i=0;i<uri.getRemoteFiles().size();i++){\r
+                               if (uri.getRemoteFiles().get(i).getName().contains(searchText)){\r
+                                       files.add(uri.getRemoteFiles().get(i));\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       @Command\r
+    @NotifyChange("srcFiles")\r
+    public void clearSrcFilter() throws Exception {\r
+               files = new ListModelList<>(filesCopy);\r
+    }\r
+       \r
+       public StoreUri getSourceUri() {\r
+               return uri;\r
+       }\r
+\r
+       public void setSourceUri(StoreUri sourceUri) {\r
+               this.uri = sourceUri;\r
+       }\r
+\r
+       public List<RemoteFile> getSrcFiles() {\r
+               return files;\r
+       }\r
+\r
+       public Store getSourceStore() {\r
+               return store;\r
+       }\r
+\r
+       public void setSourceStore(Store sourceStore) {\r
+               this.store = sourceStore;\r
+       }\r
+\r
+       @Command\r
+       @NotifyChange("srcFiles")\r
+       public void onSrcBack() throws Exception{\r
+               if (uri.getCurrentPath() != null){\r
+                       if (uri.getCurrentPath().contains("/")){\r
+                               uri.setCurrentPath(uri.getCurrentPath().substring(0, uri.getCurrentPath().lastIndexOf("/")));\r
+                       }else{\r
+                               uri.setCurrentPath(null);\r
+                       }\r
+                       setSourceList();\r
+               }\r
+       }\r
+\r
+       public FileSizeConverter getFileSizeConverter() {\r
+               return fileSizeConverter;\r
+       }\r
+       \r
+       public void setFileSizeConverter(FileSizeConverter fileSizeConverter) {\r
+               this.fileSizeConverter = fileSizeConverter;\r
+       }\r
+\r
+\r
+       public List<RemoteFile> getsrcFilesCopy() {\r
+               return filesCopy;\r
+       }\r
+\r
+       public void setsrcFilesCopy(List<RemoteFile> srcFilesCopy) {\r
+               this.filesCopy = srcFilesCopy;\r
+       }\r
+\r
+       public String getSearchText() {\r
+               return searchText;\r
+       }\r
+\r
+       public void setSearchText(String searchText) {\r
+               this.searchText = searchText;\r
+       }\r
+}\r
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/FileSizeConverter.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/FileSizeConverter.java
new file mode 100644 (file)
index 0000000..09183ca
--- /dev/null
@@ -0,0 +1,20 @@
+package user.jobengine.zk.model;\r
+\r
+import org.apache.commons.io.FileUtils;\r
+import org.zkoss.bind.BindContext;\r
+import org.zkoss.bind.Converter;\r
+import org.zkoss.zul.Label;\r
+\r
+public class FileSizeConverter implements Converter<String, Long, Label> {\r
+\r
+       @Override\r
+       public String coerceToUi(Long fileSize, Label paramC, BindContext context) {\r
+               return  FileUtils.byteCountToDisplaySize(fileSize);\r
+       }\r
+\r
+       @Override\r
+       public Long coerceToBean(String paramU, Label paramC, BindContext paramBindContext) {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+}\r
index 5d93d91c3ef6a885b8a6b22d85d394a0374d6168..748b8534cf29d7da0eab21213aa6357c7f2b66ea 100644 (file)
 package user.jobengine.zk.model;\r
 \r
-import java.io.File;\r
+import java.util.ArrayList;\r
+import java.util.LinkedHashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
 \r
+import org.apache.logging.log4j.LogManager;\r
+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.Init;\r
+import org.zkoss.bind.annotation.NotifyChange;\r
+import org.zkoss.zul.ListModelList;\r
+\r
+import user.commons.RemoteFile;\r
+import user.commons.StoreUri;\r
+import user.commons.config.JSONConfig;\r
+import user.jobengine.db.Store;\r
+import user.jobengine.server.IJobEngine;\r
 \r
 public class MaestroModel {\r
-       //private ListModelList<Role> roleList = new ListModelList<Role>();\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private Store sourceStore = new Store();\r
+       private Store targetStore = new Store();\r
+       private ListModelList<RemoteFile> srcFiles;\r
+       private List<RemoteFile> srcFilesCopy;\r
+       private List<RemoteFile> trgFiles;\r
+       private RemoteFile selectedTarget;\r
+       private StoreUri sourceUri;\r
+       private StoreUri targetUri0;\r
+       private StoreUri targetUri1;\r
+       private MaestroConfig sourceConfig = null;\r
+       //private MaestroConfig targetConfig = null;\r
+       private List<MaestroTarget> targetList = null;\r
+       private static final String PROGRAM = "Műsor";\r
+       private static final String PROMO = "Promó";\r
+       private static final String AD = "Reklám";\r
+       private String[] topTypeFilterNames;\r
+       private Map<String, TypeFilter> typeFilters;\r
+       private IJobEngine jobEngine;\r
+       private FileSizeConverter fileSizeConverter = new FileSizeConverter();\r
+       private String[] jobs = new String[] { "Job1", "Job2", "Job3" };\r
+       private String searchText;\r
+\r
+       public void setSourceList() throws Exception {\r
+               srcFilesCopy = new ArrayList<>(srcFiles);\r
+               srcFiles = new ListModelList<>(srcFilesCopy);\r
+       }\r
+\r
+       public void changeSrcDirectory(RemoteFile selectedFolder) throws Exception {\r
+               if (sourceUri.getCurrentPath() == null){\r
+                       sourceUri.setCurrentPath(selectedFolder.getName());\r
+               }else{\r
+                       sourceUri.setCurrentPath(sourceUri.getCurrentPath() + "/" + selectedFolder.getName());\r
+               }\r
+\r
+               setSourceList();\r
+               //srcFiles.clear();\r
+               //srcFiles.addAll(sourceUri.getRemoteFiles());\r
+       }\r
        \r
-       //List<String> sourceFileList = new List<String>();\r
-       File folder = new File("c:/temp/");\r
-       private File[] sourceFileList = folder.listFiles();\r
-       //private ArrayList<String> sourceFileList;\r
+       public void changeTrgDirectory(RemoteFile selectedFolder) throws Exception {\r
+       /*      if (targetUri.getCurrentPath() == null){\r
+                       targetUri.setCurrentPath(selectedFolder.getName());\r
+               }else{\r
+                       targetUri.setCurrentPath(targetUri.getCurrentPath() + "/" + selectedFolder.getName());\r
+               }\r
 \r
+               trgFiles.clear();\r
+               getTargetList();\r
+       */\r
+       }\r
+       \r
+       public void loadTargets(RemoteFile selectedFolder) throws Exception {\r
+       /*      targetUri.setCurrentPath(targetUri.getUri() + "/" + selectedFolder.getName());\r
+               trgFiles = targetUri.getRemoteFiles();\r
+       */\r
+       }\r
        \r
+       public void getTargetList()  throws Exception {\r
+               /*trgFiles.clear();\r
+               targetList = sourceConfig.getTargets();\r
+               for(MaestroTarget mt : targetList){\r
+                       targetUri = mt.getStoreUri();\r
+                       trgFiles.addAll(targetUri.getRemoteFiles());\r
+               }\r
+               Collections.sort(trgFiles, new Comparator<RemoteFile>() {\r
+                         @Override\r
+                         public int compare(RemoteFile r1, RemoteFile r2) {\r
+                           return ((r1.getIsFolder() ? "0" : "1")+ r1.getName()).compareTo(((r2.getIsFolder() ? "0" : "1")+ r2.getName()));\r
+                         }\r
+                       });\r
+               */\r
+       }\r
+       \r
+       @Command\r
+       public void selectedItemChanged (){\r
+               Set<RemoteFile> selection = srcFiles.getSelection();\r
+               logger.info("Selected: {}", selection.size());\r
+       }\r
+\r
        @Init\r
        public void init() {\r
-               //File folder = new File("/Users/you/folder/");\r
-               //File[] listOfFiles = folder.listFiles();\r
+               typeFilters = new LinkedHashMap<>();\r
+               addTypeFilter(TypeFilter.as(PROGRAM, "RED200", "ic_language_black_18dp.png"));\r
+               addTypeFilter(TypeFilter.as(PROMO, "RED100", "ic_perm_camera_mic_black_18dp.png"));\r
+               addTypeFilter(TypeFilter.as(AD, "TEAL200", "ic_theaters_black_18dp.png"));\r
+               setTopTypeFilterNames(new String[] { PROGRAM, PROMO, AD });\r
+\r
+               String message = "A forrás file -ok nem elérhetőek: {}";\r
+               try {\r
+                       String key = "jobengine.maestro.config";\r
+                       sourceConfig = JSONConfig.read(key, MaestroConfig.class);\r
+                       sourceUri = sourceConfig.getSourceStoreUri();\r
+                       //sourceConfig.getTargets().get(0).getStoreUri()\r
+                       srcFiles = new ListModelList<>(sourceUri.getRemoteFiles()); \r
+                       setSourceList();\r
+                       targetUri0 = sourceConfig.getTargets().get(0).getStoreUri();\r
+                       targetUri1 = sourceConfig.getTargets().get(1).getStoreUri();\r
+\r
+                       //target files\r
+                       //message = "A cél file -ok nem elérhetőek: {}";\r
+                       //trgFiles = new ArrayList<RemoteFile>();\r
+                       //getTargetList();\r
+               } catch (Exception e) {\r
+                       logger.error(message, e.getMessage());\r
+               }\r
+       }\r
+\r
+       @Command\r
+       @NotifyChange("srcFiles")\r
+       public void onSourceDoubleClick() {\r
+//             if (selectedSource.getIsFolder()){\r
+//                     try {\r
+//                             \r
+//                             changeSrcDirectory(selectedSource);\r
+//                     } catch (Exception e) {\r
+//                             logger.error("A forrás file -ok nem elérhetőek: {}", e);\r
+//                     }\r
+//             }\r
+       }\r
+       \r
+       /*@Command\r
+       @NotifyChange("trgFiles")\r
+       public void onTargetDoubleClick() {\r
+               if (selectedTarget.getIsFolder()){\r
+                       try {\r
+                               \r
+                               changeTrgDirectory(selectedTarget);\r
+                       } catch (Exception e) {\r
+                               logger.error("A cél file -ok nem elérhetőek: {}", e);\r
+                       }\r
+               }\r
+       }*/\r
+       \r
+       @Command\r
+       @NotifyChange("srcFiles")\r
+       public void onSourceClick(@BindingParam("selectedItem") RemoteFile selectedItem) {\r
+               //selectedSource = selectedItem;\r
+               onSourceDoubleClick();\r
+       }\r
+       \r
+       /*@Command\r
+       @NotifyChange("trgFiles")\r
+       public void onTargetClick(@BindingParam("selectedItem") RemoteFile selectedItem) {\r
+               selectedTarget = selectedItem;\r
+               onTargetDoubleClick();\r
+       }*/\r
 \r
-               for (File file : getSourceFileList()) {\r
-                   if (file.isFile()) {\r
-                       System.out.println(file.getAbsoluteFile());\r
-                       System.out.println(file.getParent());\r
-                   }\r
+       @Command\r
+    @NotifyChange("srcFiles")\r
+    public void refresh() throws Exception {\r
+               if (searchText == null || searchText == ""){\r
+                       setSourceList();\r
+               }else{          \r
+                       srcFiles.clear();\r
+                       for (int i=0;i<sourceUri.getRemoteFiles().size();i++){\r
+                               if (sourceUri.getRemoteFiles().get(i).getName().contains(searchText)){\r
+                                       srcFiles.add(sourceUri.getRemoteFiles().get(i));\r
+                               }\r
+                       }\r
                }\r
-               /*sourceFileList = new ArrayList<String>(); \r
-               sourceFileList.add("Alma");\r
-               sourceFileList.add("Körte");\r
-               sourceFileList.add("Narancs");*/\r
        }\r
 \r
+       @Command\r
+    @NotifyChange("trgFiles")\r
+    public void changeTrgFilter(@BindingParam("ttext") String ttext) throws Exception {\r
+       /*      trgFiles.clear();\r
+               for (int i=0;i<targetUri.getRemoteFiles().size();i++){\r
+                       if (targetUri.getRemoteFiles().get(i).getName().contains(ttext)){\r
+                               trgFiles.add(targetUri.getRemoteFiles().get(i));\r
+                               //getTargetList();\r
+                       }\r
+               }\r
+       */\r
+    }\r
 \r
-       public File[] getSourceFileList() {\r
-               return sourceFileList;\r
+       @Command\r
+    @NotifyChange("srcFiles")\r
+    public void clearSrcFilter() throws Exception {\r
+               srcFiles = new ListModelList<>(srcFilesCopy);\r
+    }\r
+       \r
+       @Command\r
+    @NotifyChange("trgFiles")\r
+    public void clearTrgFilter() throws Exception {\r
+       /*      trgFiles.clear();\r
+               trgFiles.addAll(targetUri.getRemoteFiles());\r
+       */\r
+    }\r
+       \r
+       @Command\r
+       @NotifyChange({ "trgFiles"})\r
+       public void trg1(@BindingParam("state") boolean state ) {\r
+               if (state) {\r
+                       //sourceConfig.getTargets().get(0).getStoreUri().setUri("c:/temp1");\r
+                       sourceConfig.getTargets().get(0).setStoreUri(getTargetUri1());\r
+               }else {\r
+                       //sourceConfig.getTargets().get(0).getStoreUri().setUri("");\r
+                       sourceConfig.getTargets().get(0).setStoreUri(null);\r
+               }\r
+       }\r
+       \r
+       @Command\r
+       @NotifyChange({ "trgFiles"})\r
+       public void trg2(@BindingParam("state") boolean state ) {\r
+               if (state) {\r
+                       //sourceConfig.getTargets().get(1).getStoreUri().setUri("c:/temp2");\r
+                       sourceConfig.getTargets().get(1).setStoreUri(getTargetUri1());\r
+               }else {\r
+                       //sourceConfig.getTargets().get(1).getStoreUri().setUri("");\r
+                       sourceConfig.getTargets().get(1).setStoreUri(null);\r
+               }\r
+       }\r
+\r
+       \r
+       public StoreUri getSourceUri() {\r
+               return sourceUri;\r
        }\r
 \r
-       public void setSourceFileList(File[] sourceFileList) {\r
-               this.sourceFileList = sourceFileList;\r
+       public void setSourceUri(StoreUri sourceUri) {\r
+               this.sourceUri = sourceUri;\r
        }\r
        \r
+       public StoreUri getTargetUri0() {\r
+               return targetUri0;\r
+       }\r
+\r
+       public void setTargetUri0(StoreUri targetUri) {\r
+               this.targetUri0 = targetUri;\r
+       }\r
+       \r
+       public StoreUri getTargetUri1() {\r
+               return targetUri1;\r
+       }\r
+\r
+       public void setTargetUri1(StoreUri targetUri) {\r
+               this.targetUri1 = targetUri;\r
+       }\r
+       \r
+       /*public String getTargetUri() {\r
+               return sourceConfig.getSourceStoreUri().getUri();\r
+       }\r
+       \r
+       public void setTargetUri(String targetUri) {\r
+               sourceConfig.getSourceStoreUri().setUri(targetUri);\r
+       }*/\r
+\r
+       public List<RemoteFile> getSrcFiles() {\r
+               return srcFiles;\r
+       }\r
+\r
+       public Store getSourceStore() {\r
+               return sourceStore;\r
+       }\r
+\r
+       public void setSourceStore(Store sourceStore) {\r
+               this.sourceStore = sourceStore;\r
+       }\r
+\r
+       public List<RemoteFile> gettrgFiles() {\r
+               return trgFiles;\r
+       }\r
+\r
+       public void settrgFiles(List<RemoteFile> trgFiles) {\r
+               this.trgFiles = trgFiles;\r
+       }\r
+       \r
+       public String[] getJobs() {\r
+               return jobs;\r
+       }\r
+       \r
+       public void setJobs(String[] jobs) {\r
+               this.jobs = jobs;\r
+       }\r
+\r
+       private void addTypeFilter(TypeFilter typeFilter) {\r
+               typeFilters.put(typeFilter.getName(), typeFilter);\r
+       }\r
+       \r
+       public String[] getTopTypeFilterNames() {\r
+               return topTypeFilterNames;\r
+       }\r
+\r
+       public void setTopTypeFilterNames(String[] topTypeFilterNames) {\r
+               this.topTypeFilterNames = topTypeFilterNames;\r
+       }\r
+       \r
+       public Map<String, TypeFilter> getTypeFilters() {\r
+               return typeFilters;\r
+       }\r
+       \r
+
+       public Store getTargetStore() {\r
+               return targetStore;\r
+       }\r
+\r
+       public void setTargetStore(Store targetStore) {\r
+               this.targetStore = targetStore;\r
+       }\r
+\r
+\r
+       public IJobEngine getJobEngine() {\r
+               return jobEngine;\r
+       }\r
+\r
+       public void setJobEngine(IJobEngine jobEngine) {\r
+               this.jobEngine = jobEngine;\r
+       }\r
+       \r
+       @Command\r
+       @NotifyChange("srcFiles")\r
+       public void onSrcBack() throws Exception{\r
+               if (sourceUri.getCurrentPath() != null){\r
+                       if (sourceUri.getCurrentPath().contains("/")){\r
+                               sourceUri.setCurrentPath(sourceUri.getCurrentPath().substring(0, sourceUri.getCurrentPath().lastIndexOf("/")));\r
+                       }else{\r
+                               sourceUri.setCurrentPath(null);\r
+                       }\r
+                       setSourceList();\r
+               }\r
+       }\r
+       \r
+       @Command\r
+       @NotifyChange("trgFiles")\r
+       public void onTrgBack() throws Exception{\r
+               /*if (targetUri.getCurrentPath() != null){\r
+                       if (targetUri.getCurrentPath().contains("/")){\r
+                               targetUri.setCurrentPath(targetUri.getCurrentPath().substring(0, targetUri.getCurrentPath().lastIndexOf("/")));\r
+                       }else{\r
+                               targetUri.setCurrentPath(null);\r
+                       }\r
+                       trgFiles.clear();\r
+                       trgFiles.addAll(targetUri.getRemoteFiles());\r
+                       clearTrgFilter();\r
+               }*/\r
+       }\r
+\r
+       public FileSizeConverter getFileSizeConverter() {\r
+               return fileSizeConverter;\r
+       }\r
+       \r
+       public void setFileSizeConverter(FileSizeConverter fileSizeConverter) {\r
+               this.fileSizeConverter = fileSizeConverter;\r
+       }\r
+\r
+       public RemoteFile getSelectedTarget() {\r
+               return selectedTarget;\r
+       }\r
+\r
+       public void setSelectedTarget(RemoteFile selectedTarget) {\r
+               this.selectedTarget = selectedTarget;\r
+       }\r
+\r
+       public List<RemoteFile> getsrcFilesCopy() {\r
+               return srcFilesCopy;\r
+       }\r
+\r
+       public void setsrcFilesCopy(List<RemoteFile> srcFilesCopy) {\r
+               this.srcFilesCopy = srcFilesCopy;\r
+       }\r
+\r
+       public String getSearchText() {\r
+               return searchText;\r
+       }\r
+\r
+       public void setSearchText(String searchText) {\r
+               this.searchText = searchText;\r
+       }\r
 }\r
index 3070e6483116447ac75064e08c6dea02e300f99c..6804b3c0d8b986c28d4d0a445616e52386457a33 100644 (file)
@@ -28,7 +28,7 @@ public class MenuModel extends BaseModel {
        private static final Logger logger = LogManager.getLogger();\r
        private static final String PAGES_RETRIEVEBATCHSELECTOR_ZUL = "/pages/retrievebatchselector.zul";\r
        private String basketMenuLabel = "(0)";\r
-       private List<ArchivedMedia> basketItems;\r
+       private List<ArchivedMedia> basketItems = new ArrayList<>();\r
 \r
        @Wire\r
        Menuitem basketIMenuItem;\r
@@ -81,8 +81,7 @@ public class MenuModel extends BaseModel {
                        logger.warn("Item to select is null");\r
                        return;\r
                }\r
-               if (basketItems == null)\r
-                       basketItems = new ArrayList<>();\r
+                       \r
                if (select) {\r
                        if (!basketItems.contains(item)) {\r
                                basketItems.add(item);\r
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/PlannerListModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/PlannerListModel.java
new file mode 100644 (file)
index 0000000..50dfabb
--- /dev/null
@@ -0,0 +1,53 @@
+package user.jobengine.zk.model;\r
+\r
+import java.util.LinkedHashMap;\r
+import java.util.Map;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.annotation.Init;\r
+\r
+import user.commons.config.JSONConfig;\r
+\r
+public class PlannerListModel {\r
+       private MaestroConfig config = null;\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private static final String PROGRAM = "Műsor";\r
+       private static final String PROMO = "Promó";\r
+       private static final String AD = "Reklám";\r
+       private String[] topTypeFilterNames;\r
+       private Map<String, TypeFilter> typeFilters;\r
+       \r
+       @Init\r
+       public void init() {\r
+               typeFilters = new LinkedHashMap<>();\r
+               addTypeFilter(TypeFilter.as(PROGRAM, "RED200", "ic_language_black_18dp.png"));\r
+               addTypeFilter(TypeFilter.as(PROMO, "RED100", "ic_perm_camera_mic_black_18dp.png"));\r
+               addTypeFilter(TypeFilter.as(AD, "TEAL200", "ic_theaters_black_18dp.png"));\r
+               setTopTypeFilterNames(new String[] { PROGRAM, PROMO, AD });\r
+               \r
+               String key = "jobengine.maestro.config";\r
+               try {\r
+                       config = JSONConfig.read(key, MaestroConfig.class);\r
+               } catch (Exception e) {\r
+                       logger.error("Hiba a config file beállításánál {}", e.getMessage());\r
+               }\r
+       }\r
+       \r
+       private void addTypeFilter(TypeFilter typeFilter) {\r
+               typeFilters.put(typeFilter.getName(), typeFilter);\r
+       }\r
+       \r
+       public String[] getTopTypeFilterNames() {\r
+               return topTypeFilterNames;\r
+       }\r
+\r
+       public void setTopTypeFilterNames(String[] topTypeFilterNames) {\r
+               this.topTypeFilterNames = topTypeFilterNames;\r
+       }\r
+       \r
+       public Map<String, TypeFilter> getTypeFilters() {\r
+               return typeFilters;\r
+       }\r
+\r
+}\r
index 9b5fdca4f4f0cfd1c9ee0460b969a9b8db826da0..8eb5e2571c31b5639ef7d954d0663977097a8eb5 100644 (file)
@@ -1,8 +1,8 @@
 package user.jobengine.zk.model;\r
 \r
+import java.util.ArrayList;\r
 import java.util.List;\r
 import java.util.Map;\r
-import java.util.stream.Collectors;\r
 \r
 import org.apache.commons.lang.StringUtils;\r
 import org.apache.logging.log4j.LogManager;\r
@@ -107,9 +107,32 @@ public class RetrieveBatchSelectorModel extends BaseModel {
 \r
        public List<ArchivedMedia> getBasketItems() {\r
                setDisabled(menuModel.getBasketItems() == null || menuModel.getBasketItems().size() == 0);\r
-               return menuModel.getBasketItems();\r
-       }\r
-\r
+               List<ArchivedMedia> basketItems = menuModel.getBasketItems();\r
+               \r
+               //////////TEST CODE KESOBB TOROLNI ++++++++++++++++\r
+               if(basketItems == null) basketItems = new ArrayList<ArchivedMedia>();\r
+               if(basketItems.size() == 0){\r
+                       for(int c=0; c<20; c++){\r
+                               basketItems.add(createFakeArchivedMedia(c));\r
+                       }\r
+               }\r
+               \r
+               \r
+               return basketItems;\r
+       }\r
+\r
+       //////////TEST CODE KESOBB TOROLNI ++++++++++++++++\r
+       private ArchivedMedia createFakeArchivedMedia(int c){\r
+               ArchivedMedia ret = new ArchivedMedia();\r
+               Media media = new Media();\r
+               media.setId(c);\r
+               media.setTitle("title_" + c);\r
+               media.setMediaFilesName("mediaFilesName_" + c);\r
+               ret.setMedia(media);\r
+               return ret;\r
+       }\r
+       \r
+       \r
        public String getEmail() {\r
                return email;\r
        }\r
@@ -118,12 +141,12 @@ public class RetrieveBatchSelectorModel extends BaseModel {
                return houseId;\r
        }\r
 \r
-       private List<Media> getMedias() {\r
+       private List<ArchivedMedia> getMedias() {\r
                List<ArchivedMedia> basket = getBasketItems();\r
-               List<Media> result = basket.stream().map(i -> {\r
-                       return i.getMedia();\r
-               }).collect(Collectors.toList());\r
-               return result;\r
+//             List<Media> result = basket.stream().map(i -> {\r
+//             return i.getMedia();\r
+//     }).collect(Collectors.toList());\r
+               return basket;\r
        }\r
 \r
        public ListModel<String> getReloadTypes() {\r
index 94bba688d01e59050f2c7e8917397780d58b37d0..f0206211fcb2d0d158550e917f4f6ccf0b3b0cc8 100644 (file)
@@ -20,6 +20,7 @@ import org.zkoss.bind.annotation.Command;
 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
@@ -139,7 +140,8 @@ public class SearchModel extends AsyncBaseModel {
                addTypeFilter(TypeFilter.as(GENERIC, "YELLOW200", "ic_view_quilt_black_18dp.png"));\r
                addTypeFilter(TypeFilter.as(GENERIC_ORIGINAL, "YELLOW200", "ic_view_quilt_black_18dp.png"));\r
                topTypeFilterNames = new String[] { NEWS_MATERIAL, RAW_NEWS_MATERIAL, ECHO_RECORDING, RECORDING, GENERIC };\r
-               bottomTypeFilterNames = new String[] { ECHO_MATERIAL, MATERIAL, RAW_MATERIAL, ECHO_PROMO, PROMO, RAW_PROMO, ECHO_AD, AD, RAW_AD };\r
+               bottomTypeFilterNames = new String[] { ECHO_MATERIAL, MATERIAL, RAW_MATERIAL, ECHO_PROMO, PROMO, RAW_PROMO,\r
+                               ECHO_AD, AD, RAW_AD };\r
 \r
                columnHeaders = new LinkedHashMap<>();\r
                columnHeaders.put("ID", "mediahouseid");\r
@@ -199,7 +201,9 @@ public class SearchModel extends AsyncBaseModel {
                        itemsGrid.setPageSize(SessionUtil.getUserPageSize());\r
                setSettingsPageSize(itemsGrid.getPageSize());\r
                if (!allChecked)\r
-                       Clients.showNotification(String.format("Figyelem!<br><br><span style='white-space:nowrap'> A keresési paraméterek megváltoztak! </span>"),\r
+                       Clients.showNotification(\r
+                                       String.format(\r
+                                                       "Figyelem!<br><br><span style='white-space:nowrap'> A keresési paraméterek megváltoztak! </span>"),\r
                                        "warning", searchFiltersMenu, "end_center", 3000);\r
        }\r
 \r
@@ -231,16 +235,19 @@ public class SearchModel extends AsyncBaseModel {
 \r
        @Command\r
        public void copyMediaIdToClipboard() {\r
-               String port = (Executions.getCurrent().getServerPort() == 80) ? "" : (":" + Executions.getCurrent().getServerPort());\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", selectedObject.getMedia().getTitle(), url);\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
                // Toolkit toolkit = Toolkit.getDefaultToolkit();\r
                // Clipboard clipboard = toolkit.getSystemClipboard();\r
                // StringSelection strSel = new StringSelection(url);\r
                // clipboard.setContents(strSel, null);\r
-               // Messagebox.show("A médiához szükséges URL a vágólapra másolva, az URL a következő:\n" + email, "", Messagebox.OK, Messagebox.NONE);\r
+               // Messagebox.show("A médiához szükséges URL a vágólapra másolva, az URL\r
+               // a következő:\n" + email, "", Messagebox.OK, Messagebox.NONE);\r
                Executions.getCurrent().sendRedirect(email);\r
        }\r
 \r
@@ -302,7 +309,9 @@ public class SearchModel extends AsyncBaseModel {
                        return;\r
                // Map<String, Object> arguments = new HashMap<String, Object>();\r
                // arguments.put(MEDIACUBEMEDIA, this.selectedObject.getMedia());\r
-               // Window window = (Window) Executions.createComponents(PAGES_RETRIEVESELECTOR_ZUL, null, arguments);\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
@@ -504,8 +513,47 @@ public class SearchModel extends AsyncBaseModel {
        }\r
 \r
        @Command\r
-       public void onTcIn(@ContextParam(ContextType.TRIGGER_EVENT) Event event) {\r
-               //event.getData() a tcin\r
+       public void onTcIn(@ContextParam(ContextType.TRIGGER_EVENT) Event event) throws Exception\r
+       {\r
+               ////////////Végén törölni innen!!!\r
+               if (selectedObject == null) { \r
+                       selectedObject = new ArchivedMedia();\r
+               }\r
+               ////////////Végén törölni eddig!!!\r
+               \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
+               \r
+               if (doubleVar.floatValue() >= ((selectedObject.getTcOut() == null)?9999999999999999999999.9:selectedObject.getTcOut())){\r
+                       throw new Exception("A kilépés időpontjának későbbinek kell lennie mint a belépés időpontja!");\r
+               }else{\r
+                       selectedObject.setTcIn(new Float(doubleVar.floatValue()));\r
+               }\r
+       }\r
+       \r
+       @Command\r
+       public void onTcOut(@ContextParam(ContextType.TRIGGER_EVENT) Event event) throws Exception\r
+       {\r
+               ////////////Végén törölni innen!!!\r
+               if (selectedObject == null) { \r
+                       selectedObject = new ArchivedMedia();\r
+               }\r
+               ////////////Végén törölni eddig!!!\r
+               \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
+               \r
+               if (doubleVar.floatValue() <= ((selectedObject.getTcIn() == null)?0.0:selectedObject.getTcIn())){\r
+                       throw new Exception("A kilépés időpontjának későbbinek kell lennie mint a belépés időpontja!");\r
+               }else{\r
+                       selectedObject.setTcOut(new Float(doubleVar.floatValue()));\r
+               }\r
        }\r
 \r
        @Command\r
@@ -516,7 +564,8 @@ public class SearchModel extends AsyncBaseModel {
        @Command\r
        public void openMetaDataDialog() {\r
                String template = "/pages/metadatadetails.zul";\r
-               Window window = (Window) Executions.createComponents(template, null, ListUtils.asMap("selectedObject", selectedObject));\r
+               Window window = (Window) Executions.createComponents(template, null,\r
+                               ListUtils.asMap("selectedObject", selectedObject));\r
                window.doModal();\r
        }\r
 \r
@@ -525,7 +574,8 @@ public class SearchModel extends AsyncBaseModel {
                logger.info(event);\r
        }\r
 \r
-       // public void rowSelected(@BindingParam("item") Object media, @BindingParam("isChecked") boolean isChecked) {\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
@@ -533,10 +583,11 @@ public class SearchModel extends AsyncBaseModel {
 \r
        @Command\r
        @NotifyChange({ "selectedObject", "hasLowresMediaFile", "hasTSMMediaFile", "lowresMediaFilePath" })\r
-       public void select(@BindingParam("selectedObject") ArchivedMedia selectedObject, @ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {\r
+       public void select(@BindingParam("selectedObject") ArchivedMedia selectedObject,\r
+                       @ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {\r
                Event event = ctx.getTriggerEvent();\r
-               //Nem mindig a row a target, ha a kepre kattintunk akkor az image\r
-               //selectedRowIndex = ((Row) event.getTarget()).getIndex();\r
+               // Nem mindig a row a target, ha a kepre kattintunk akkor az image\r
+               // selectedRowIndex = ((Row) event.getTarget()).getIndex();\r
                highlight(this.selectedObject, false);\r
                setSelectedObject(selectedObject);\r
                highlight(this.selectedObject, true);\r
@@ -546,6 +597,14 @@ public class SearchModel extends AsyncBaseModel {
 \r
        @NotifyChange("typeFilters")\r
        public void setAllChecked(boolean allChecked) {\r
+               ////////////Végén törölni innen!!!\r
+               if (allChecked) {\r
+                       Clients.evalJavaScript("setSource('/img/Mediacube_todo2.mp4')");\r
+               } else {\r
+                       // Clients.evalJavaScript("setSource('/img/mediacube_logo_v2_50x50.png')");\r
+                       Clients.evalJavaScript("setSource()");\r
+               }\r
+               ////////////Végén törölni eddig!!!\r
                this.allChecked = allChecked;\r
                for (String key : typeFilters.keySet())\r
                        typeFilters.get(key).setChecked(allChecked);\r
@@ -619,9 +678,13 @@ public class SearchModel extends AsyncBaseModel {
 \r
                        try {\r
                                String video = getLowresMediaFilePath();\r
-                               Clients.evalJavaScript("setSource('" + video + "')");\r
+                               if (video.contentEquals(null)) {\r
+                                       Clients.evalJavaScript("setSource('/img/mediacube_logo_v2_50x50.png')");\r
+                               } else {\r
+                                       Clients.evalJavaScript("setSource('" + video + "')");\r
+                               }\r
 \r
-                               //ret += "&poster=/img/mediacube_logo_v2_50x50.png";\r
+                               // Clients.evalJavaScript("setSource('/img/Mediacube_todo2.mp4')");\r
 \r
                        } catch (Exception e) {\r
                                logger.error(e);\r
@@ -663,7 +726,8 @@ public class SearchModel extends AsyncBaseModel {
        private void showExternalMediaID() {\r
                String mediaID = SessionUtil.getQueryParameter(MEDIA_ID);\r
                if (mediaID != null)\r
-                       searchResult = new InitializedCachedListModel(mediaID, searchValue, new ArrayList<String>(), orderBy, orderAscending);\r
+                       searchResult = new InitializedCachedListModel(mediaID, searchValue, new ArrayList<String>(), orderBy,\r
+                                       orderAscending);\r
        }\r
 \r
        @Command\r
@@ -676,7 +740,9 @@ public class SearchModel extends AsyncBaseModel {
                // preventAfterRender = true;\r
                if (activePageIndex != itemsGrid.getActivePage()) {\r
                        itemsGrid.setActivePage(activePageIndex);\r
-                       logger.info("Selected media is shown in the results, which can be found on {} page and also it will be highlighted.", activePageIndex + 1);\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
                        onAfterRenderGrid();\r
                        logger.info("Selected media is shown in the results, which can be found on opened page.");\r
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/TargetsListModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/TargetsListModel.java
new file mode 100644 (file)
index 0000000..7ca7065
--- /dev/null
@@ -0,0 +1,37 @@
+package user.jobengine.zk.model;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+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.Init;\r
+import org.zkoss.zul.ListModelList;\r
+\r
+import user.commons.config.JSONConfig;\r
+\r
+public class TargetsListModel {\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private MaestroConfig config = null;\r
+       private ListModelList<MaestroTarget> targets;\r
+\r
+       @Init\r
+       public void init() {\r
+               String key = "jobengine.maestro.config";\r
+               try {\r
+                       config = JSONConfig.read(key, MaestroConfig.class);\r
+                       targets = new ListModelList<>(config.getTargets());\r
+               } catch (Exception e) {\r
+                       logger.error("Hiba a config file beállításánál {}", e.getMessage());\r
+               }\r
+       }\r
+\r
+       public ListModelList<MaestroTarget> getTargets() {\r
+               return targets;\r
+       }\r
+       \r
+       @Command\r
+       public void onCheck(@BindingParam("data") MaestroTarget data){\r
+               //@ContextParam(ContextType.TRIGGER_EVENT) CheckEvent event,\r
+               \r
+       }\r
+}\r