git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Tue, 10 Apr 2018 14:43:59 +0000 (14:43 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Tue, 10 Apr 2018 14:43:59 +0000 (14:43 +0000)
23 files changed:
server/-configuration/scheduledjobs.json
server/user.jobengine.executors/config/config.xml
server/user.jobengine.executors/jobtemplates/batch-retrieve-ondemand.xml [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/BatchRetrieveForkStep.java [new file with mode: 0644]
server/user.jobengine.osgi.commons/src/user/commons/nosql/NoSQLUtils.java
server/user.jobengine.osgi.db/src/user/jobengine/db/ItemDAOEx.java
server/user.jobengine.osgi.db/src/user/jobengine/db/Media.java
server/user.jobengine.osgi.server/META-INF/MANIFEST.MF
server/user.jobengine.osgi.server/css/archivum.css
server/user.jobengine.osgi.server/img/ic_remove_shopping_cart_black_18dp.png [new file with mode: 0644]
server/user.jobengine.osgi.server/img/ic_search_black_18dp.png [new file with mode: 0644]
server/user.jobengine.osgi.server/pages/mediaplayer.jsp
server/user.jobengine.osgi.server/pages/retrievebatchselector.zul
server/user.jobengine.osgi.server/pages/searchitems.zul
server/user.jobengine.osgi.server/resources/i3-label_hu.properties
server/user.jobengine.osgi.server/src/user/jobengine/server/IJobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MenuModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MissingMaterialsModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/RetrieveBatchSelectorModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/RetrieveSelectorModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/SearchModel.java

index b2fc4826da6b7c4062004120e53e56bec4de430b..bf3faacbe298dfdeeec333154db50a0900846c4f 100644 (file)
@@ -1,4 +1,24 @@
 {"joblist":[\r
+       {\r
+         "name" : "SYS: batch-retrieve-ondemand",\r
+      "template": "batch-retrieve-ondemand.xml",\r
+      "parameters": [ \r
+       {"name": "trafficOutputPath", "value": "/mnt/ISILON/PLAYOUT_NLE", "type": "java.lang.String"},\r
+       {"name": "octopusOutputPath", "value": "/mnt/ISILON/OCTOPUS", "type": "java.lang.String"},\r
+       {"name": "genericOutputPath", "value": "/mnt/ISILON/ARCHIVE_RESTORE", "type": "java.lang.String"},\r
+       {"name": "killDateDays", "value": 7, "type": "java.lang.Integer"}\r
+      ]\r
+       },\r
+       {\r
+         "name" : "SYS: retrieve-ondemand",\r
+      "template": "retrieve-ondemand.xml",\r
+      "parameters": [ \r
+       {"name": "trafficOutputPath", "value": "/mnt/ISILON/PLAYOUT_NLE", "type": "java.lang.String"},\r
+       {"name": "octopusOutputPath", "value": "/mnt/ISILON/OCTOPUS", "type": "java.lang.String"},\r
+       {"name": "genericOutputPath", "value": "/mnt/ISILON/ARCHIVE_RESTORE", "type": "java.lang.String"},\r
+       {"name": "killDateDays", "value": 7, "type": "java.lang.Integer"}\r
+      ]\r
+       },\r
        {\r
       "active": false,\r
       "executeimmediate": false,\r
       "template": "fake.xml",\r
       "cronexpression": "0 40 22 * * ?",\r
       "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
+       },\r
+       {\r
+      "active": false,\r
+      "executeimmediate": false,\r
+         "name" : "",\r
+      "cronexpression": "",\r
+      "template": "retrieve-ondemand.xml",\r
+      "parameters": [ \r
+       {"name": "trafficOutputPath", "value": "/mnt/ISILON/PLAYOUT_NLE", "type": "java.lang.String"}, \r
+       {"name": "octopusOutputPath", "value": "/mnt/ISILON/OCTOPUS", "type": "java.lang.String"}, \r
+       {"name": "genericOutputPath", "value": "/mnt/ISILON/ARCHIVE_RESTORE", "type": "java.lang.String"},\r
+       {"name": "basket", "type": "java.lang.ArrayList"},\r
+       {"name": "houseId", "type": "java.lang.String"},\r
+       {"name": "successRecipient", "type": "java.lang.String"},\r
+       {"name": "killDateDays", "type": "java.lang.Integer"}\r
+      ]\r
        }\r
 ]}\r
 \r
index 7331063beadd8cc7c8b540c896afe4e080bf8c87..5e56e335797cd2c5a29f9eee08d163ad85ea256b 100644 (file)
@@ -2,6 +2,7 @@
 <executors>\r
        <executor className="user.jobengine.server.steps.ArchiveListBuilderStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.ArchiveMaterialSubmitStep" maxConcurrent="1"/>\r
+       <executor className="user.jobengine.server.steps.BatchRetrieveForkStep" maxConcurrent="10"/>\r
        <executor className="user.jobengine.server.steps.CheckMORPHEUSMissingMaterialsStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.CheckTRAFFICMissingMaterialsStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.CleanupMountedLocationStep" maxConcurrent="10"/>\r
diff --git a/server/user.jobengine.executors/jobtemplates/batch-retrieve-ondemand.xml b/server/user.jobengine.executors/jobtemplates/batch-retrieve-ondemand.xml
new file mode 100644 (file)
index 0000000..14cebcd
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Archivált anyag visszatöltése" multiInstance="true">\r
+       <declarations>\r
+               <parameters>\r
+                       <parameter name="trafficOutputPath" type="java.lang.String" />\r
+                       <parameter name="octopusOutputPath" type="java.lang.String" />\r
+                       <parameter name="genericOutputPath" type="java.lang.String" />\r
+                       <parameter name="basket" type="java.util.ArrayList" />\r
+                       <parameter name="houseId" type="java.lang.String" />\r
+                       <parameter name="recipient" type="java.lang.String" />\r
+                       <parameter name="killDateDays" type="java.lang.Integer"/>\r
+               </parameters>\r
+       </declarations>\r
+       <commands>\r
+               <calljobstep type="user.jobengine.server.steps.BatchRetrieveForkStep" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="trafficOutputPath" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="octopusOutputPath" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="genericOutputPath" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="basket" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="houseId" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="recipient" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="killDateDays" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/BatchRetrieveForkStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/BatchRetrieveForkStep.java
new file mode 100644 (file)
index 0000000..b743b70
--- /dev/null
@@ -0,0 +1,56 @@
+package user.jobengine.server.steps;\r
+\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.MediaCubeMarker;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.scheduler.ScheduledJob;\r
+\r
+public class BatchRetrieveForkStep extends JobStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private static final String CHILD_TEMPLATE = "retrieve-ondemand.xml";\r
+       private static final String MEDIACUBEMEDIA = "mediaCubeMedia";\r
+       private static final String RECIPIENT = "successRecipient";\r
+       private static final String HOUSEID = "houseId";\r
+       private MediaCubeMarker marker;\r
+\r
+       @StepEntry\r
+       public Object[] execute(String trafficOutputPath, String octopusOutputPath, String genericOutputPath, List<Media> basket, String houseId, String recipient,\r
+                       int killDateDays, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+               marker = (MediaCubeMarker) jobRuntime.getMarker();\r
+               marker.setTo(recipient);\r
+               setProgress(10);\r
+               if (jobRuntime.forkPrepare()) {\r
+                       for (Media mediaCubeMedia : basket) {\r
+                               submit(trafficOutputPath, octopusOutputPath, genericOutputPath, mediaCubeMedia, recipient, houseId, killDateDays, jobEngine, jobRuntime);\r
+                       }\r
+               }\r
+               setProgress(50);\r
+               jobRuntime.forkWaitComplete();\r
+               setProgress(100);\r
+               return null;\r
+       }\r
+\r
+       public void submit(String trafficOutputPath, String octopusOutputPath, String genericOutputPath, Media mediaCubeMedia, String recipient, String houseId,\r
+                       int killDateDays, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+               try {\r
+                       ScheduledJob scheduledJob = jobEngine.getScheduledJob(CHILD_TEMPLATE);\r
+                       Map<String, Object> parameters = scheduledJob.getJobParameters();\r
+                       parameters.put(MEDIACUBEMEDIA, mediaCubeMedia);\r
+                       parameters.put(HOUSEID, houseId);\r
+                       parameters.put(RECIPIENT, recipient);\r
+                       IJobRuntime child = jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, String.format("Visszatöltés %s részére", recipient), parameters);\r
+               } catch (Exception e) {\r
+                       logger.catching(e);\r
+                       logger.error(marker, "Hiba a kötegelt visszatöltésben. A rendszer üzenete: {}", e.getMessage());\r
+               }\r
+\r
+       }\r
+\r
+}\r
index 4938a66a1ff8265cd43a1c5c9a678d11904d781e..a4705e22e74b6e2c54d2f4f3a4557fab3e2a8a28 100644 (file)
@@ -27,6 +27,13 @@ public class NoSQLUtils {
                obj.put(name, current + value);\r
        }\r
 \r
+       public static boolean asBool(BasicDBObject obj, String name) {\r
+               boolean result = false;\r
+               if (obj != null && obj.containsKey(name))\r
+                       result = obj.getBoolean(name);\r
+               return result;\r
+       }\r
+\r
        public static BasicDBList asDBList(BasicDBObject obj, String name) {\r
                BasicDBList result = null;\r
                if (obj.containsKey(name) && (obj.get(name) instanceof BasicDBList))\r
index 4a248c2e3633171133c072bbf3d04ac720b2ef8a..fe496d0494b73e956e14301e08725902acce3920 100644 (file)
@@ -480,7 +480,7 @@ public class ItemDAOEx {
                                        if (end > content.length() - 1)\r
                                                end = content.length() - 1;\r
 \r
-                                       String relevant = content.substring(start, pos) + "<b>" + content.substring(pos, pos + c.length()) + "</b>"\r
+                                       String relevant = content.substring(start, pos) + "<span class='rhl'>" + content.substring(pos, pos + c.length()) + "</span>"\r
                                                        + content.substring(pos + c.length(), end);\r
 \r
                                        if (start > 0)\r
index 696f24ba5a71d3153d339316898b3612365263ad..3d2fdbc330b418279913f9ed9b16472f0732552f 100644 (file)
@@ -9,7 +9,7 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import user.commons.TimestampAdapter;
 
 /**
- * Verzi� Pojo oszt�ly.
+ * Medi Pojo osztaly.
  *
  * @author User
  *
index 51b3e2210ad9b9c7c370ef0c18f07ec857fa388a..1da0b30f115ef3cfebf7c82c6b3359df653a91e9 100644 (file)
@@ -27,6 +27,7 @@ Export-Package: user.jobengine.osgi.server,
  user.jobengine.server.ast,
  user.jobengine.server.messagequeue,
  user.jobengine.server.messages,
+ user.jobengine.server.scheduler,
  user.jobengine.server.steps
 DynamicImport-Package: *
 Bundle-ClassPath: .,
index 695d890599606a4922148e368204f0bf7c9e2371..51cd06c80abbad8d0dd2cdc57015ad5081ff5411 100644 (file)
@@ -154,7 +154,7 @@ body *:not([class*="z-icon-"]) {
 \r
 .listbox-normal-style .z-listitem .z-listcell {\r
     border-left: 1px solid gray;\r
-    border-bottom: 1px solid blue;\r
+    border-bottom: 1px solid gray;\r
 }\r
 \r
 .z-treerow, .z-tree-body{\r
diff --git a/server/user.jobengine.osgi.server/img/ic_remove_shopping_cart_black_18dp.png b/server/user.jobengine.osgi.server/img/ic_remove_shopping_cart_black_18dp.png
new file mode 100644 (file)
index 0000000..3ba8574
Binary files /dev/null and b/server/user.jobengine.osgi.server/img/ic_remove_shopping_cart_black_18dp.png differ
diff --git a/server/user.jobengine.osgi.server/img/ic_search_black_18dp.png b/server/user.jobengine.osgi.server/img/ic_search_black_18dp.png
new file mode 100644 (file)
index 0000000..f0d4e97
Binary files /dev/null and b/server/user.jobengine.osgi.server/img/ic_search_black_18dp.png differ
index 5aec32ff387ff2cceef578e5629e825877a739e7..d51833ef46e27c611254968bb955aaa289b14421 100644 (file)
@@ -34,8 +34,7 @@
 <body>\r
 \r
        <script>\r
-               console.log('URL is: <%=mediaURL%>\r
-               ');\r
+               //console.log('URL is: <%=mediaURL%> ');\r
        </script>\r
        <center>\r
        <video id="myVideoDiv"\r
index 98045733f8142a1593c8382cf2debdbb3329702a..fcfd7e158b54da577c364af739d431b73a2d9b4c 100644 (file)
@@ -3,8 +3,8 @@
        viewModel="@id('jlm') @init('user.jobengine.zk.model.RetrieveBatchSelectorModel')" onCancel="wndRetrieveBatch.detach()">\r
        <grid>\r
                <columns>\r
-                       <column width="120px" />\r
-                       <column width="100%" />\r
+                       <column hflex="min" />\r
+                       <column hflex="1" />\r
                </columns>\r
                <rows>\r
                        <row>\r
                        </row>\r
                        <row>\r
                                <cell colspan="2">\r
-                                       <listbox id="basketList" height="200px" sizedByContent="false" model="@load(jlm.basketItems)" multiple="true"\r
-                                               style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" emptyMessage="Üres">\r
+                                       <listbox ctrlKeys="#del" onCtrlKey="@command('remove')" height="400px" id="basketList" sizedByContent="false" model="@load(jlm.basketItems)" multiple="true" checkmark="true" \r
+                                               style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" emptyMessage="Üres" \r
+                                               selectedItems="@save(jlm.selectedItems)">\r
                                                <listhead>\r
                                                        <listheader label="Azonosító" hflex="min" align="left" sort="auto" />\r
                                                        <listheader label="Cím" hflex="min" align="left" sort="auto" />\r
-                                                       <listheader label="Filenév" hflex="min" align="left" sort="auto" />\r
+                                                       <listheader label="Filenév" hflex="1" align="left" sort="auto" />\r
                                                </listhead>\r
 \r
                                                <template name="model">\r
                                                        <listitem>\r
                                                                <listcell label="@load(each.media.id)" />\r
                                                                <listcell label="@load(each.media.title)" />\r
-                                                               <listcell label="@load(each.media.mediaFilesName)">></listcell>\r
+                                                               <listcell label="@load(each.media.mediaFilesName)" />\r
                                                        </listitem>\r
                                                </template>\r
                                        </listbox>\r
                                </cell>\r
                        </row>\r
+                       <row>\r
+                               <cell colspan="2">\r
+                                       <toolbar vflex="min" style="font-size:8px">\r
+                                               <toolbarbutton id="remove" image="/img/ic_remove_shopping_cart_black_18dp.png" autodisable="self" onClick="@command('remove')"/>\r
+                                       </toolbar>\r
+                               </cell>\r
+                       </row>\r
                </rows>\r
        </grid>\r
-       <vbox>\r
-\r
-       </vbox>\r
-       <hbox width="100%" pack="center">\r
+       <hbox width="100%" pack="center" align="center">\r
                <button id="cancel" label="Mégsem" autodisable="execute,cancel" onClick="wndRetrieveBatch.detach()" />\r
-               <button id="execute" label="Végrehajtás" autodisable="execute,cancel" onClick="@command('execute')" />\r
+               <button id="execute" label="Végrehajtás" autodisable="execute,cancel" disabled="@load(jlm.disabled)" onClick="@command('execute')" />\r
        </hbox>\r
 </window>\r
index 9fcd7c2a83e05f91f3a8f19acbd056dc197c2cc6..6d4ea9c01b38c0c59a55e8a54aa295e5969992a6 100644 (file)
@@ -12,7 +12,6 @@
        <style>\r
 .myimg {\r
        margin: 5px; border: 1px solid #CFCFCF;\r
-       cursor: pointer;\r
 }\r
 div.z-row-content span {\r
        font-family: Tahoma,Arial,serif;\r
@@ -21,34 +20,61 @@ div.z-row-content span {
     padding: 3px 6px;\r
 }\r
 .heavy {\r
-       font-weight:bold;\r
+       font-weight: bold;\r
+       font-family: Tahoma,Arial,serif;\r
+}\r
+.ir {\r
+       font-weight: bold;\r
+       font-family: Tahoma,Arial,serif;\r
+       text-color: green;\r
 }\r
-\r
 .details {\r
     padding: 5px;\r
     line-height: 1.5em;\r
        font-size: 10px;\r
-       border-bottom: 1px solid #ebebeb;\r
 }\r
 .relevant {\r
     padding: 8px;\r
        font-size: 10px;\r
+}\r
+.rhl {\r
+       color: #E53935;\r
+       font-weight: bold;\r
+}\r
+\r
+.z-row:hover > .z-row-inner, .z-row:hover > .z-cell {\r
+        background: none;\r
+}\r
+.z-row:hover>.z-row-inner>.z-row-content{\r
+               text-color: black;\r
 }\r
        </style>\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="100" repeats="true" onTimer="@command('uiTick')" />\r
                <borderlayout>\r
-                       <west border="none" size="60%" splittable="true" minsize="250">\r
+                       <west border="none" size="60%" splittable="true" minsize="500">\r
                                <div height="100%" width="100%">\r
                                        <groupbox vflex="min" closable="false">\r
-                                               <textbox style="border:none" instant="true" value="@bind(vm.searchValue)" width="100%"\r
-                                                       tooltiptext="Gépelje be a keresendő kifejezést és nyomja meg az Enter-t." onOK="@command('doSearch')" />\r
-                                               <toolbar vflex="min" style="font-size:8px">\r
-                                                       <checkbox checked="@bind(vm.allChecked)" />\r
-                                                       <forEach items="@load(vm.typeFilterNames)" >\r
-                                                               <toolbarbutton label="@load(each)" mode="toggle" checked="@bind(vm.typeFilters[each]) @validator(vm.allFilterCheckedValidator)" />\r
-                                                       </forEach>                                                      \r
-                                               </toolbar>\r
+                                               <hbox hflex="1" pack="center" align="center">\r
+                                                       <button hflex="min" label="Típusok" popup="filter"/>\r
+                                                       <textbox focus="true" width="300px" instant="true" value="@bind(vm.searchValue)"  tooltiptext="Gépelje be a keresendő kifejezést és nyomja meg az Enter-t." onOK="@command('doSearch')" />\r
+                                                       <button hflex="min" image="/img/ic_search_black_18dp.png" onClick="@command('doSearch')" />\r
+                                                       <popup id="filter">\r
+                                                               <vlayout vflex="min">\r
+                                                                       <checkbox label="Összes típus" checked="@bind(vm.allChecked)" />\r
+                                                                       <separator/>\r
+                                                                       <forEach items="@load(vm.typeFilterNames)" >\r
+                                                                               <checkbox label="@load(each)" checked="@bind(vm.typeFilters[each]) @validator(vm.allFilterCheckedValidator)" />\r
+                                                                       </forEach>                                                      \r
+                                                               </vlayout>                                                  \r
+                                                   </popup>                                                    \r
+                                               </hbox>\r
+<!--                                           <toolbar style="font-size:8px"> -->\r
+<!--                                                   <checkbox checked="@bind(vm.allChecked)" /> -->\r
+<!--                                                   <forEach items="@load(vm.typeFilterNames)" > -->\r
+<!--                                                           <toolbarbutton label="@load(each)" mode="toggle" checked="@bind(vm.typeFilters[each]) @validator(vm.allFilterCheckedValidator)" /> -->\r
+<!--                                                   </forEach>                                                       -->\r
+<!--                                           </toolbar> -->\r
                                        </groupbox>\r
                                        <groupbox vflex="true" closable="false">\r
                                                <grid id="itemsGrid" sizedByContent="false" span="true" vflex="true" hflex="true" mold="paging" autopaging="false"\r
@@ -67,28 +93,24 @@ div.z-row-content span {
                                                                <column label="Fájlnév" hflex="min" align="left" />\r
                                                                <column label="Megtekinthető" hflex="min" align="right" />\r
                                                        </columns>\r
-                                                       <rows id="rows">\r
+                                                       <rows id="rows" style="cursor: pointer;" >\r
                                                                <template name="model">\r
-                                                                       <row onClick="@command('selectMediaArchive', selectedObject=each)">\r
-<!--                                                                           <attribute name="style" if="${vm.isSelected(each)}"> -->\r
-<!--                                                                                   background: green; -->\r
-<!--                                                                           </attribute>                                                                                             -->\r
-<!--                                                                           <attribute name="style" if="${not vm.isSelected(each)}"> -->\r
-<!--                                                                                   background: white; -->\r
-<!--                                                                           </attribute>                                                                                             -->\r
-                                                                               <detail open="@load(vm.rowsExpanded)" style="border-bottom: 1px solid gray">\r
-                                                                                       <hlayout>\r
+                                                                       <row onClick="@command('selectMediaArchive', selectedObject=each)" onMouseOver="@Command('rowMouseOver', evt=event)" onMouseOut="@Command('rowMouseOut', evt=event)"\r
+                                                                       style="background: none;">\r
+                                                                               <detail open="@load(vm.rowsExpanded)">\r
+                                                                                       <hlayout style="border-bottom: 1px solid #ebebeb; width: 100%;">\r
                                                                                                <image tooltiptext="Kattints a lejátszáshoz!" width="140px" height="90px" \r
                                                                                                sclass="myimg" content="@load(each.media.poster) @converter('user.jobengine.zk.model.ByToImageConverter')" \r
                                                                                                onClick="@command('selectMediaArchive', selectedObject=each)" />\r
                                                                                                <div sclass="details">\r
                                                                                                        <div>\r
-                                                                                                               <label style="border-left: 1px solid #008AC8; border-bottom: 1px solid #008AC8; padding: 4px; margin: 2px" value="@load(each.media.itemType.name)" />\r
                                                                                                                <label style="font: 20px Century Gothic; color: #008AC8;" value="@load(each.item.title)" />\r
+                                                                                                               <label style="" value="@load(each.media.length)" />\r
+                                                                                                               <label style="border-left: 1px solid #008AC8; border-bottom: 1px solid #008AC8; padding: 4px;" value="@load(each.media.itemType.name)" />\r
                                                                                                        </div>\r
                                                                                                        <html sclass="relevant">\r
                                                                                                        <![CDATA[\r
-                                                                                                           <div>${each.relevant}</div>\r
+                                                                                                           <div style='width: 90%'>${each.relevant}</div>\r
                                                                                                        ]]>\r
                                                                                                        </html>                                                                                                 \r
                                                                                                </div>\r
@@ -97,7 +119,7 @@ div.z-row-content span {
                                                                                <checkbox checked="@save(vm.itemSelected) @validator(vm.itemSelectedValidator, arg=each)" />\r
                                                                                <label value="@load(each.media.houseId)" />\r
                                                                                <label value="@load(each.media.title)" />\r
-                                                                               <label value="@load(each.media.houseId)" />\r
+                                                                               <label value="@load(each.media.mediaFilesName)" />\r
                                                                                <checkbox checked="@load(each.media.mediaFilesCount > 1)" w:onCheck="this.setChecked(!this.isChecked())" />\r
                                                                        </row>\r
                                                                </template>\r
@@ -122,7 +144,7 @@ div.z-row-content span {
 \r
                                                <groupbox closable="false" mold="3d" width="100%" height="100%">\r
                                                        <caption>\r
-                                                               <button label="Visszatöltés" onClick="@command('downloadMedia')" autodisable="self" disabled="@load(not vm.hasTSMMediaFile)"\r
+                                                               <button label="Kosárba" onClick="@command('downloadMedia')" autodisable="self" disabled="@load(not vm.hasTSMMediaFile)"\r
                                                                        sclass="buttonboldfont" />\r
                                                        </caption>\r
 \r
index 31802809299c6c61f0f00807ab356f44892010e6..893d9e3cbf63427bf0afd370685cb94fa9c2ef5a 100644 (file)
@@ -1,4 +1,4 @@
-version=2.3.3\r
+version=2.3.4\r
 footer=2016 © Copyright User Rendszerház Kft.\r
 \r
 login_info=Információ\r
index 7de9089bb0742e5e21b5e0a84cfb9f2be793e61c..e6f53d7c36452d0cd5c90f7cacd4d0e9d2589f7b 100644 (file)
@@ -6,6 +6,7 @@ import user.commons.Job;
 import user.jobengine.db.IItemManager;
 import user.jobengine.server.messagequeue.IUserMessageQueues;
 import user.jobengine.server.messages.IJobMessage;
+import user.jobengine.server.scheduler.ScheduledJob;
 import user.jobengine.server.scheduler.SchedulerService;
 
 public interface IJobEngine {
@@ -59,6 +60,8 @@ public interface IJobEngine {
 
        Map<String, IProgram> getPrograms();
 
+       ScheduledJob getScheduledJob(String template);
+
        SchedulerService getScheduler();
 
        IUserMessageQueues getUserMessageQueues();
index e35b6c6167d50a2fc58f163a613f2c74a76a3748..80d4429e0e59a1b20c930f336d9037ea63faff65 100644 (file)
@@ -22,10 +22,13 @@ import java.util.concurrent.atomic.AtomicLong;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import com.ibm.nosql.json.api.BasicDBObject;
+
 import user.commons.Job;
 import user.commons.JobStatus;
 import user.commons.RemoteFile;
 import user.commons.StoreUri;
+import user.commons.nosql.NoSQLUtils;
 import user.commons.remotestore.DirectoryUtils;
 import user.commons.remotestore.RemoteStoreProtocol;
 import user.jobengine.db.IItemManager;
@@ -43,6 +46,7 @@ import user.jobengine.server.messagequeue.UserMessageQueues;
 import user.jobengine.server.messages.IJobMessage;
 import user.jobengine.server.messages.JobStepCompletedMessage;
 import user.jobengine.server.messages.UserReplyMessage;
+import user.jobengine.server.scheduler.ScheduledJob;
 import user.jobengine.server.scheduler.SchedulerService;
 import user.jobengine.server.steps.IJobStep;
 import user.tsm.client.TSMClient;
@@ -430,6 +434,21 @@ public class JobEngine implements IJobEngine {
                return programs;
        }
 
+       @Override
+       public ScheduledJob getScheduledJob(String template) {
+               List<BasicDBObject> jobs = NoSQLUtils.asList(schedulerService.getScheduleJobs());
+               BasicDBObject importJob = null;
+               for (BasicDBObject job : jobs) {
+                       if (template.equals(job.getString("template"))) {
+                               importJob = job;
+                               break;
+                       }
+               }
+               if (importJob == null)
+                       throw new NullPointerException("Missing template: " + template);
+               return schedulerService.createScheduledJob(importJob);
+       }
+
        @Override
        public SchedulerService getScheduler() {
                return schedulerService;
index cd4722f00949faa01adceb80072bb8bcdaf2b4fe..dd93f6995e4613baf2c0a4c0f5280539d540ab97 100644 (file)
@@ -32,6 +32,7 @@ import com.ibm.nosql.json.JSONUtil;
 import com.ibm.nosql.json.api.BasicDBList;\r
 import com.ibm.nosql.json.api.BasicDBObject;\r
 \r
+import user.commons.nosql.NoSQLUtils;\r
 import user.jobengine.server.IJobEngine;\r
 \r
 /**\r
@@ -68,15 +69,17 @@ public class SchedulerService {
                sj.setJobId(String.format("%s.%s", template, name));\r
                sj.setJobName(name);\r
                sj.setTemplateName(template);\r
-               sj.setCronExpressions(jobJSON.getString("cronexpression"));\r
-               sj.setExecuteOnStartup(jobJSON.getBoolean("executeimmediate"));\r
-               sj.setActive(jobJSON.getBoolean("active"));\r
+               sj.setCronExpressions(NoSQLUtils.asString(jobJSON, "cronexpression"));\r
+               sj.setExecuteOnStartup(NoSQLUtils.asBool(jobJSON, "executeimmediate"));\r
+               sj.setActive(NoSQLUtils.asBool(jobJSON, "active"));\r
 \r
                BasicDBList jobParams = (BasicDBList) jobJSON.get("parameters");\r
                if (jobParams != null) {\r
                        for (int p = 0; p < jobParams.size(); p++) {\r
                                BasicDBObject jsParam = (BasicDBObject) jobParams.get(p);\r
                                String stringValue = jsParam.getString("value");\r
+                               if (stringValue == null)\r
+                                       continue;\r
                                try {\r
                                        Class<?> clazz = Class.forName(jsParam.getString("type"));\r
                                        Object value = parseObjectFromString(stringValue, clazz);\r
@@ -171,7 +174,7 @@ public class SchedulerService {
                                try {\r
                                        sj = createScheduledJob(sjob);\r
                                } catch (Exception e) {\r
-                                       logger.error("Error creating job: {}", sj);\r
+                                       logger.error("Error creating job: {}", sjob);\r
                                }\r
                                //skip inactive jobs\r
                                if (!sj.isActive())\r
index a247c0368bf01917a19a17da5c2b0bb75fb5397b..d82eb2bd4cce09122b5760936da1c3a7d8091c74 100644 (file)
@@ -12,11 +12,11 @@ import org.zkoss.bind.annotation.AfterCompose;
 import org.zkoss.bind.annotation.Command;\r
 import org.zkoss.bind.annotation.ContextParam;\r
 import org.zkoss.bind.annotation.ContextType;\r
-import org.zkoss.bind.annotation.NotifyChange;\r
 import org.zkoss.zk.ui.Component;\r
 import org.zkoss.zk.ui.Executions;\r
 import org.zkoss.zk.ui.select.Selectors;\r
 import org.zkoss.zk.ui.select.annotation.Wire;\r
+import org.zkoss.zk.ui.util.Clients;\r
 import org.zkoss.zul.Include;\r
 import org.zkoss.zul.Menuitem;\r
 import org.zkoss.zul.Window;\r
@@ -44,7 +44,12 @@ public class MenuModel extends BaseModel {
        public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
                Selectors.wireComponents(view, this, false);\r
                Selectors.wireEventListeners(view, this);\r
-               //Clients.showNotification("Új funkció, kötegelt visszaigényléshez.", "info", basketIMenuItem, "end_center", 3000);\r
+       }\r
+\r
+       public void clearBasket() {\r
+               basketItems.clear();\r
+               basketMenuLabel = String.format("(%d)", basketItems.size());\r
+               BindUtils.postNotifyChange(null, null, this, "basketMenuLabel");\r
        }\r
 \r
        @Command\r
@@ -53,15 +58,19 @@ public class MenuModel extends BaseModel {
                Executions.sendRedirect("/");\r
        }\r
 \r
+       public List<ArchivedMedia> getBasketItems() {\r
+               return basketItems;\r
+       }\r
+\r
        public String getBasketMenuLabel() {\r
                return basketMenuLabel;\r
        }\r
 \r
-       public List<ArchivedMedia> getBasketItems() {\r
-               return basketItems;\r
+       public void removeBasketItems(List<ArchivedMedia> items) {\r
+               basketItems.removeAll(items);\r
+               updateBasketLabel();\r
        }\r
 \r
-       @NotifyChange("basketMenuLabel")\r
        public void selectArchivedMedia(ArchivedMedia item, boolean select) {\r
                if (item == null) {\r
                        logger.warn("Item to select is null");\r
@@ -70,15 +79,16 @@ public class MenuModel extends BaseModel {
                if (basketItems == null)\r
                        basketItems = new ArrayList<>();\r
                if (select) {\r
-                       if (!basketItems.contains(item))\r
+                       if (!basketItems.contains(item)) {\r
                                basketItems.add(item);\r
+                               Clients.showNotification(String.format("Hozzáadva: %s", item.getMedia().getMediaFilesName()), "info", basketIMenuItem, "start_center", 2000);\r
+                       }\r
                } else {\r
                        if (basketItems.contains(item))\r
                                basketItems.remove(item);\r
                }\r
                logger.info("SelectedItems: {}", basketItems.size());\r
-               basketMenuLabel = String.format("(%d)", basketItems.size());\r
-               BindUtils.postNotifyChange(null, null, this, "basketMenuLabel");\r
+               updateBasketLabel();\r
        }\r
 \r
        @Command\r
@@ -89,4 +99,9 @@ public class MenuModel extends BaseModel {
                window.doModal();\r
        }\r
 \r
+       private void updateBasketLabel() {\r
+               basketMenuLabel = String.format("(%d)", basketItems.size());\r
+               BindUtils.postNotifyChange(null, null, this, "basketMenuLabel");\r
+       }\r
+\r
 }
\ No newline at end of file
index 36fbc9c7c90a4dc2fda8601091beb35abd51676a..83902809893d4ca72e8980588deae754e56d31ea 100644 (file)
@@ -29,7 +29,6 @@ import user.jobengine.server.IJobRuntime;
 import user.jobengine.server.JobChangedEvent;\r
 import user.jobengine.server.JobEngine;\r
 import user.jobengine.server.scheduler.ScheduledJob;\r
-import user.jobengine.server.scheduler.SchedulerService;\r
 import user.jobengine.zk.util.SessionUtil;\r
 \r
 public class MissingMaterialsModel extends AsyncBaseModel implements IJobChangedListener {\r
@@ -38,7 +37,6 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
        private static final String IMPORT_DISABLED = "importDisabled";\r
        private static final String IMPORT_TEMPLATE = "import-morpheus-missing-materials.xml";\r
        private static final String RETRIEVE_TEMPLATE = "retrieve-missing-material.xml";\r
-       private static final String TEMPLATE = "template";\r
        private ListModelList<BasicDBObject> jobList = new ListModelList<BasicDBObject>();\r
        private Set<BasicDBObject> selectedJobs;\r
        private IJobEngine jobEngine = null;\r
@@ -101,22 +99,6 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
                }\r
        }\r
 \r
-       private ScheduledJob getImportScheduledJob() {\r
-               SchedulerService scheduler = jobEngine.getScheduler();\r
-               List<BasicDBObject> jobs = NoSQLUtils.asList(scheduler.getScheduleJobs());\r
-               BasicDBObject importJob = null;\r
-               for (BasicDBObject job : jobs) {\r
-                       if (isImportJob(job.getString(TEMPLATE))) {\r
-                               importJob = job;\r
-                               //logger.info(job.toString());\r
-                               break;\r
-                       }\r
-               }\r
-               if (importJob == null)\r
-                       throw new NullPointerException("Nem található az import sablon.");\r
-               return scheduler.createScheduledJob(importJob);\r
-       }\r
-\r
        public ListModelList<BasicDBObject> getJobList() {\r
                return jobList;\r
        }\r
@@ -143,7 +125,7 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged
                        if (jobEngine == null)\r
                                throw new Exception("Belső hiba! A JobEngine szolgáltatás elérhetetlen.");\r
 \r
-                       importJob = getImportScheduledJob();\r
+                       importJob = jobEngine.getScheduledJob(IMPORT_TEMPLATE);\r
 \r
                        List<IJobRuntime> jobRuntimes = new ArrayList<>(jobEngine.getJobs().values());\r
                        Optional<IJobRuntime> findFirst = jobRuntimes.stream().filter(jobRuntime -> isImportJob(jobRuntime.getTemplate())).findFirst();\r
index 461ac69e97c7b081475417a1a548345f04c06cfd..13b30a59f1fa5bf0b388fe15ec6a18f3e1f408c8 100644 (file)
@@ -2,6 +2,7 @@ package user.jobengine.zk.model;
 \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
@@ -11,42 +12,39 @@ 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.Init;\r
-import org.zkoss.util.resource.Labels;\r
+import org.zkoss.bind.annotation.NotifyChange;\r
 import org.zkoss.zk.ui.Component;\r
-import org.zkoss.zk.ui.Executions;\r
 import org.zkoss.zk.ui.select.Selectors;\r
 import org.zkoss.zk.ui.select.annotation.Wire;\r
 import org.zkoss.zul.Messagebox;\r
 import org.zkoss.zul.Window;\r
 \r
-import user.commons.ListUtils;\r
 import user.jobengine.db.ArchivedMedia;\r
 import user.jobengine.db.Media;\r
 import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.IJobRuntime;\r
 import user.jobengine.server.JobEngine;\r
+import user.jobengine.server.scheduler.ScheduledJob;\r
 import user.jobengine.zk.util.SessionUtil;\r
 \r
 public class RetrieveBatchSelectorModel extends BaseModel {\r
        private static final Logger logger = LogManager.getLogger();\r
-       private static final String KILLDATEDAYS = "killDateDays";\r
-       private static final String MEDIACUBEMEDIA = "mediaCubeMedia";\r
-       private static final String SUCCESSRECIPIENT = "successRecipient";\r
-       private static final String GENERICOUTPUTPATH = "genericOutputPath";\r
-       private static final String OCTOPUSOUTPUTPATH = "octopusOutputPath";\r
-       private static final String TRAFFICOUTPUTPATH = "trafficOutputPath";\r
+       private static final String BASKET = "basket";\r
+       private static final String RECIPIENT = "recipient";\r
        private static final String HOUSEID = "houseId";\r
        private static final String RESTORE = "Visszatöltés";\r
-       private static final String JOBTEMPLATE = "retrieve-ondemand.xml";\r
+       private static final String JOBTEMPLATE = "batch-retrieve-ondemand.xml";\r
+       private List<ArchivedMedia> selectedItems;\r
+       private boolean disabled;\r
 \r
        @Wire()\r
        private Window wndRetrieveBatch;\r
-       private Media selectedMedia;\r
        private String houseId;\r
        private String email;\r
+       private MenuModel menuModel;\r
 \r
        @AfterCompose\r
        public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
+               menuModel = (MenuModel) SessionUtil.getAttribute(SessionUtil.MENUMODEL);\r
                Selectors.wireComponents(view, this, false);\r
        }\r
 \r
@@ -56,30 +54,35 @@ public class RetrieveBatchSelectorModel extends BaseModel {
        }\r
 \r
        @Command\r
+       @NotifyChange("basketItems")\r
        public void execute() {\r
                try {\r
                        if (StringUtils.isBlank(houseId))\r
                                throw new Exception("Az azonosító megadása kötelező!");\r
                        if (StringUtils.isBlank(email))\r
                                throw new Exception("Az értesítési cím megadása kötelező!");\r
-                       String trafficOutputPath = "/mnt/ISILON/PLAYOUT_NLE";\r
-                       String octopusOutputPath = "/mnt/ISILON/OCTOPUS";\r
-                       String genericOutputPath = "/mnt/ISILON/ARCHIVE_RESTORE";\r
-                       Map<String, Object> parameters = ListUtils.asMap(TRAFFICOUTPUTPATH, trafficOutputPath, OCTOPUSOUTPUTPATH, octopusOutputPath, GENERICOUTPUTPATH,\r
-                                       genericOutputPath, MEDIACUBEMEDIA, this.selectedMedia, HOUSEID, houseId, SUCCESSRECIPIENT, email, KILLDATEDAYS, 7);\r
+\r
                        IJobEngine jobEngine = JobEngine.getInstance();\r
-                       IJobRuntime runtime1 = jobEngine.submit(JOBTEMPLATE, RESTORE, parameters);\r
-                       close();\r
+                       ScheduledJob scheduledJob = jobEngine.getScheduledJob(JOBTEMPLATE);\r
+                       Map<String, Object> parameters = scheduledJob.getJobParameters();\r
+                       parameters.put(HOUSEID, houseId);\r
+                       parameters.put(RECIPIENT, email);\r
+                       parameters.put(BASKET, getMedias());\r
+                       jobEngine.submit(JOBTEMPLATE, RESTORE, parameters);\r
+\r
+                       menuModel.clearBasket();\r
+                       SessionUtil.getUserPrincipal().setEmail(email);\r
+                       wndRetrieveBatch.detach();\r
                } catch (Exception e) {\r
-                       Messagebox.show(e.getMessage(), Labels.getLabel("dialogger.warning"), Messagebox.OK, Messagebox.ERROR, defaultOKEventListener);\r
+                       Messagebox.show(e.getMessage());\r
                        logger.catching(e);\r
                }\r
 \r
        }\r
 \r
        public List<ArchivedMedia> getBasketItems() {\r
-               MenuModel model = (MenuModel) SessionUtil.getAttribute(SessionUtil.MENUMODEL);\r
-               return model.getBasketItems();\r
+               setDisabled(menuModel.getBasketItems() == null || menuModel.getBasketItems().size() == 0);\r
+               return menuModel.getBasketItems();\r
        }\r
 \r
        public String getEmail() {\r
@@ -90,13 +93,37 @@ public class RetrieveBatchSelectorModel extends BaseModel {
                return houseId;\r
        }\r
 \r
+       private List<Media> 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
+       }\r
+\r
+       public List<ArchivedMedia> getSelectedItems() {\r
+               return selectedItems;\r
+       }\r
+\r
        @Init\r
        public void init() {\r
-               Map<?, ?> args = Executions.getCurrent().getArg();\r
-               this.selectedMedia = (Media) args.get(MEDIACUBEMEDIA);\r
                setEmail(SessionUtil.getUserPrincipal().getEmail());\r
        }\r
 \r
+       public boolean isDisabled() {\r
+               return disabled;\r
+       }\r
+\r
+       @Command\r
+       @NotifyChange({ "basketItems", "selectedItems" })\r
+       public void remove() {\r
+               menuModel.removeBasketItems(selectedItems);\r
+       }\r
+\r
+       public void setDisabled(boolean disabled) {\r
+               this.disabled = disabled;\r
+       }\r
+\r
        public void setEmail(String email) {\r
                this.email = email;\r
        }\r
@@ -104,4 +131,9 @@ public class RetrieveBatchSelectorModel extends BaseModel {
        public void setHouseId(String houseId) {\r
                this.houseId = houseId;\r
        }\r
+\r
+       public void setSelectedItems(List<ArchivedMedia> selectedItems) {\r
+               this.selectedItems = selectedItems;\r
+       }\r
+\r
 }
\ No newline at end of file
index f2c7821e12324574e0b6bc54c2df0d898f2b6aef..5d633e2b3c8135c9c9bf753b4dd3c8a06dfd8778 100644 (file)
@@ -21,8 +21,8 @@ import org.zkoss.zul.Window;
 import user.commons.ListUtils;\r
 import user.jobengine.db.Media;\r
 import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.IJobRuntime;\r
 import user.jobengine.server.JobEngine;\r
+import user.jobengine.server.scheduler.ScheduledJob;\r
 import user.jobengine.zk.util.SessionUtil;\r
 \r
 public class RetrieveSelectorModel extends BaseModel {\r
@@ -60,13 +60,19 @@ public class RetrieveSelectorModel extends BaseModel {
                                throw new Exception("Az azonosító megadása kötelező!");\r
                        if (StringUtils.isBlank(email))\r
                                throw new Exception("Az értesítési cím megadása kötelező!");\r
-                       String trafficOutputPath = "/mnt/ISILON/PLAYOUT_NLE";\r
-                       String octopusOutputPath = "/mnt/ISILON/OCTOPUS";\r
-                       String genericOutputPath = "/mnt/ISILON/ARCHIVE_RESTORE";\r
-                       Map<String, Object> parameters = ListUtils.asMap(TRAFFICOUTPUTPATH, trafficOutputPath, OCTOPUSOUTPUTPATH, octopusOutputPath, GENERICOUTPUTPATH,\r
-                                       genericOutputPath, MEDIACUBEMEDIA, this.selectedMedia, HOUSEID, houseId, SUCCESSRECIPIENT, email, KILLDATEDAYS, 7);\r
+\r
                        IJobEngine jobEngine = JobEngine.getInstance();\r
-                       IJobRuntime runtime1 = jobEngine.submit(JOBTEMPLATE, RESTORE, parameters);\r
+                       ScheduledJob scheduledJob = jobEngine.getScheduledJob(JOBTEMPLATE);\r
+\r
+                       Map<String, Object> jobParameters = scheduledJob.getJobParameters();\r
+                       String trafficOutputPath = (String) jobParameters.get(TRAFFICOUTPUTPATH);\r
+                       String octopusOutputPath = (String) jobParameters.get(OCTOPUSOUTPUTPATH);\r
+                       String genericOutputPath = (String) jobParameters.get(GENERICOUTPUTPATH);\r
+                       int killDateDays = (int) jobParameters.get(KILLDATEDAYS);\r
+\r
+                       Map<String, Object> parameters = ListUtils.asMap(TRAFFICOUTPUTPATH, trafficOutputPath, OCTOPUSOUTPUTPATH, octopusOutputPath, GENERICOUTPUTPATH,\r
+                                       genericOutputPath, MEDIACUBEMEDIA, this.selectedMedia, HOUSEID, houseId, SUCCESSRECIPIENT, email, KILLDATEDAYS, killDateDays);\r
+                       jobEngine.submit(JOBTEMPLATE, RESTORE, parameters);\r
                        close();\r
                } catch (Exception e) {\r
                        Messagebox.show(e.getMessage(), Labels.getLabel("dialogger.warning"), Messagebox.OK, Messagebox.ERROR, defaultOKEventListener);\r
index 726cd1db3a00f981de9c0805679af6a658197ac2..9782e025c778101ab6d3236c509a02ae69eb70f6 100644 (file)
@@ -3,7 +3,6 @@ package user.jobengine.zk.model;
 import java.net.URL;\r
 import java.nio.file.Paths;\r
 import java.util.ArrayList;\r
-import java.util.HashMap;\r
 import java.util.LinkedHashMap;\r
 import java.util.List;\r
 import java.util.Map;\r
@@ -20,15 +19,16 @@ import org.zkoss.bind.annotation.ContextParam;
 import org.zkoss.bind.annotation.ContextType;\r
 import org.zkoss.bind.annotation.NotifyChange;\r
 import org.zkoss.zk.ui.Component;\r
-import org.zkoss.zk.ui.Executions;\r
+import org.zkoss.zk.ui.event.MouseEvent;\r
 import org.zkoss.zk.ui.select.Selectors;\r
 import org.zkoss.zk.ui.select.annotation.Wire;\r
 import org.zkoss.zul.Checkbox;\r
+import org.zkoss.zul.Detail;\r
 import org.zkoss.zul.Grid;\r
+import org.zkoss.zul.Hlayout;\r
 import org.zkoss.zul.Messagebox;\r
 import org.zkoss.zul.Row;\r
 import org.zkoss.zul.Rows;\r
-import org.zkoss.zul.Window;\r
 \r
 import user.commons.StoreUri;\r
 import user.commons.remotestore.RemoteStoreProtocol;\r
@@ -104,7 +104,6 @@ public class SearchModel extends AsyncBaseModel {
                                } catch (Exception e) {\r
 \r
                                }\r
-                               updateAllChecked();\r
                        }\r
                };\r
        }\r
@@ -136,10 +135,13 @@ public class SearchModel extends AsyncBaseModel {
        public void downloadMedia() {\r
                if (!getHasTSMMediaFile())\r
                        return;\r
-               Map<String, Object> arguments = new HashMap<String, Object>();\r
-               arguments.put(MEDIACUBEMEDIA, this.selectedObject.getMedia());\r
-               Window window = (Window) Executions.createComponents(PAGES_RETRIEVESELECTOR_ZUL, null, arguments);\r
-               window.doModal();\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.doModal();\r
+\r
+               MenuModel model = (MenuModel) SessionUtil.getAttribute(SessionUtil.MENUMODEL);\r
+               model.selectArchivedMedia(this.selectedObject, true);\r
        }\r
 \r
        public int getActivePage() {\r
@@ -255,6 +257,29 @@ public class SearchModel extends AsyncBaseModel {
                return typeFilters;\r
        }\r
 \r
+       private void highlight(ArchivedMedia am, boolean highlight) {\r
+               if (am == null)\r
+                       return;\r
+               List<Component> components = itemsGrid.getRows().getChildren();\r
+               for (int i = 0; i < components.size(); i++) {\r
+                       Row row = (Row) components.get(i);\r
+                       if (am == row.getValue()) {\r
+                               Detail detail = (Detail) row.getChildren().get(0);\r
+                               Hlayout hlayout = (Hlayout) detail.getChildren().get(0);\r
+                               if (highlight) {\r
+                                       row.setStyle("background: #F1F8E9;");\r
+                                       hlayout.setStyle("border-bottom: 1px solid #C5E1A5; background: #F1F8E9;");\r
+                               } else {\r
+                                       row.setStyle("background: none;");\r
+                                       hlayout.setStyle("border-bottom: 1px solid #ebebeb; background: none;");\r
+                               }\r
+                               break;\r
+\r
+                       }\r
+               }\r
+\r
+       }\r
+\r
        public boolean isAllChecked() {\r
                return allChecked;\r
        }\r
@@ -277,21 +302,23 @@ public class SearchModel extends AsyncBaseModel {
                //                      Clients.scrollIntoView(rows);\r
        }\r
 \r
-       //      public void rowSelected(@BindingParam("item") Object media, @BindingParam("isChecked") boolean isChecked) {\r
        @Command\r
-       public void rowSelected(@BindingParam("isChecked") boolean isChecked) {\r
-               logger.info(isChecked);\r
+       public void rowMouseOut(@BindingParam("evt") MouseEvent event) {\r
+               logger.info(event);\r
        }\r
 \r
-       @NotifyChange({ "selectedObject", "hasLowresMediaFile", "hasTSMMediaFile", "lowresMediaFilePath" })\r
-       public void selectedMediaArchive(ArchivedMedia selectedObject) {\r
-               this.selectedObject = selectedObject;\r
+       //      public void rowSelected(@BindingParam("item") Object media, @BindingParam("isChecked") boolean isChecked) {\r
+       @Command\r
+       public void rowMouseOver(@BindingParam("evt") MouseEvent event) {\r
+               logger.info(event);\r
        }\r
 \r
        @Command\r
        @NotifyChange({ "selectedObject", "hasLowresMediaFile", "hasTSMMediaFile", "lowresMediaFilePath" })\r
        public void selectMediaArchive(@BindingParam("selectedObject") ArchivedMedia selectedObject) {\r
+               highlight(this.selectedObject, false);\r
                this.selectedObject = selectedObject;\r
+               highlight(this.selectedObject, true);\r
        }\r
 \r
        public void setActivePage(int activePage) {\r