{"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
<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
--- /dev/null
+<?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
--- /dev/null
+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
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
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
import user.commons.TimestampAdapter;
/**
- * Verzi� Pojo oszt�ly.
+ * Medi Pojo osztaly.
*
* @author User
*
user.jobengine.server.ast,
user.jobengine.server.messagequeue,
user.jobengine.server.messages,
+ user.jobengine.server.scheduler,
user.jobengine.server.steps
DynamicImport-Package: *
Bundle-ClassPath: .,
\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
<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
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
<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
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
<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
<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
\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
-version=2.3.3\r
+version=2.3.4\r
footer=2016 © Copyright User Rendszerház Kft.\r
\r
login_info=Információ\r
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 {
Map<String, IProgram> getPrograms();
+ ScheduledJob getScheduledJob(String template);
+
SchedulerService getScheduler();
IUserMessageQueues getUserMessageQueues();
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;
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;
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;
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
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
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
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
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
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
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
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
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
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
}\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
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
\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
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
}\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
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
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
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
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
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
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
} catch (Exception e) {\r
\r
}\r
- updateAllChecked();\r
}\r
};\r
}\r
public void downloadMedia() {\r
if (!getHasTSMMediaFile())\r
return;\r
- Map<String, Object> arguments = new HashMap<String, Object>();\r
- arguments.put(MEDIACUBEMEDIA, this.selectedObject.getMedia());\r
- Window window = (Window) 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
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
// 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