<executor className="user.jobengine.server.steps.UploadRecordingToNexioStep" maxConcurrent="1"/>\r
<executor className="user.jobengine.server.steps.MediaToolStep" maxConcurrent="1"/>\r
<executor className="user.jobengine.server.steps.UpdateGhostMediaData" maxConcurrent="1"/>\r
- <executor className="user.jobengine.server.steps.FileCopyStep" maxConcurrent="1"/>\r
+ <executor className="user.jobengine.server.steps.FileCopyStep" maxConcurrent="10"/>\r
</executors>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate name="Általános file másolás">\r
+<jobtemplate name="Általános file másolás" multiInstance="true">\r
<declarations>\r
<parameters>\r
<parameter name="sourceProtocol" type="java.lang.String"/>\r
<parameter name="sourcePath" type="java.lang.String"/>\r
<parameter name="sourceFileName" type="java.lang.String"/>\r
- <parameter name="targetPath" type="java.lang.String"/>\r
<parameter name="targetProtocol" type="java.lang.String"/>\r
+ <parameter name="targetPath" type="java.lang.String"/>\r
<parameter name="targetFileName" type="java.lang.String"/>\r
</parameters>\r
</declarations>\r
<parameter name="sourceFileName" />\r
</input>\r
<input>\r
- <parameter name="targetPath" />\r
+ <parameter name="targetProtocol" />\r
</input>\r
<input>\r
- <parameter name="targetProtocol" />\r
+ <parameter name="targetPath" />\r
</input>\r
<input>\r
<parameter name="targetFileName" />\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\r
-public class FileCopyStep {\r
+public class FileCopyStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
private IItemManager manager;\r
private Marker marker;\r
}\r
if (sourceProtocol == null) {\r
logger.error(marker, "A forrás protokol bemeneti paramétere üres.");\r
- throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+ throw new NullPointerException("System is not configured properly, 'sourceProtocol' input parameter missing.");\r
}\r
if (sourcePath == null) {\r
logger.error(marker, "A forrás fájl elérés bemeneti paramétere üres.");\r
- throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+ throw new NullPointerException("System is not configured properly, 'sourcePath' input parameter missing.");\r
}\r
if (sourceFileName == null) {\r
logger.error(marker, "A forrás fájlnév bemeneti paramétere üres.");\r
- throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+ throw new NullPointerException("System is not configured properly, 'sourceFileName' input parameter missing.");\r
}\r
if (targetProtocol == null) {\r
logger.error(marker, "A cél protokol bemeneti paramétere üres.");\r
- throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+ throw new NullPointerException("System is not configured properly, 'targetProtocol' input parameter missing.");\r
}\r
if (targetPath == null) {\r
logger.error(marker, "A cél fájl elérés bemeneti paramétere üres.");\r
- throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+ throw new NullPointerException("System is not configured properly, 'targetPath' input parameter missing.");\r
}\r
if (targetFileName == null) {\r
logger.error(marker, "A cél fájlnév bemeneti paramétere üres.");\r
- throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+ throw new NullPointerException("System is not configured properly, 'targetFileName' input parameter missing.");\r
}\r
}\r
\r
logger.catching(e);\r
throw e;\r
} finally {\r
- source.cleanUp();\r
- target.cleanUp();\r
+ if (source != null) {\r
+ source.cleanUp();\r
+ }\r
+ if (target != null) {\r
+ target.cleanUp();\r
+ }\r
}\r
\r
return null;\r
}\r
-\r
}\r
<!-- Keresés menü -->\r
<hbox width="100%">\r
<button onClick="@command('onBack')" image="/img/baseline_arrow_back_black_18dp.png" />\r
- <textbox id="sourceSearch" value="@bind(vm.searchText)" onOK="@command('doSearch')" />\r
- <button hflex="min" image="/img/ic_search_black_18dp.png" onClick="@command('doSearch')" />\r
+ <textbox id="sourceSearch" value="@bind(vm.searchText)" onOK="@command('refresh')" />\r
+ <!-- button hflex="min" image="/img/ic_search_black_18dp.png" onClick="@command('doSearch')" / -->\r
<button image="/img/baseline_close_black_18dp.png" onClick="@command('clearFilter')" />\r
<button image="/img/baseline_refresh_black_18dp.png" onClick="@command('refresh')"/>\r
</hbox>\r
package user.jobengine.zk.model;\r
\r
-import java.util.ArrayList;\r
import java.util.HashMap;\r
import java.util.List;\r
import java.util.Map;\r
import user.commons.RemoteFile;\r
import user.commons.StoreUri;\r
import user.commons.config.JSONConfig;\r
-import user.jobengine.db.Store;\r
\r
public class DirectoryListModel {\r
private static final Logger logger = LogManager.getLogger();\r
- private Store store = new Store();\r
private ListModelList<RemoteFile> files;\r
- private List<RemoteFile> filesCopy;\r
+ // private List<RemoteFile> filesCopy;\r
private StoreUri uri;\r
private MaestroConfig config = null;\r
private FileSizeConverter fileSizeConverter = new FileSizeConverter();\r
private String searchText;\r
private String defaultFileFilter;\r
+ private String defaultDirectoryFilter;\r
\r
@NotifyChange("searchText")\r
public void changeDirectory(RemoteFile selectedFolder) throws Exception {\r
@Command\r
@NotifyChange({ "files", "searchText" })\r
public void clearFilter() throws Exception {\r
- // files = new ListModelList<>(filesCopy);\r
setSearchText(null);\r
files.clear();\r
- files.addAll(filesCopy);\r
- selectedItemChanged();\r
- }\r
+ uri.setFileFilter(defaultFileFilter);\r
+ uri.setDirectoryFilter(defaultDirectoryFilter);\r
+ setSourceList();\r
\r
- @Command\r
- @NotifyChange({ "files", "searchText" })\r
- public void doSearch() throws Exception {\r
- if (searchText == null || searchText == "") {\r
- files.clear();\r
- files.addAll(filesCopy);\r
- } else {\r
- files.clear();\r
- for (int i = 0; i < filesCopy.size(); i++) {\r
- if (filesCopy.get(i).getName().contains(searchText)) {\r
- files.add(filesCopy.get(i));\r
- }\r
- }\r
- }\r
selectedItemChanged();\r
}\r
\r
return files;\r
}\r
\r
- public List<RemoteFile> getFilesCopy() {\r
- return filesCopy;\r
- }\r
-\r
public FileSizeConverter getFileSizeConverter() {\r
return fileSizeConverter;\r
}\r
return searchText;\r
}\r
\r
- public Store getStore() {\r
- return store;\r
- }\r
-\r
public StoreUri getUri() {\r
return uri;\r
}\r
config = JSONConfig.read(key, MaestroConfig.class);\r
uri = config.getSourceStoreUri();\r
defaultFileFilter = uri.getFileFilter();\r
+ defaultDirectoryFilter = uri.getDirectoryFilter();\r
\r
files = new ListModelList<>();\r
setSourceList();\r
@Command\r
@NotifyChange("files")\r
public void refresh() throws Exception {\r
- if (searchText == null || searchText == "") {\r
- files.clear();\r
- files.addAll(uri.getRemoteFiles());\r
+ if (searchText == null || searchText.equals("")) {\r
+ uri.setFileFilter(defaultFileFilter);\r
+ uri.setDirectoryFilter(defaultDirectoryFilter);\r
+ setSourceList();\r
} else {\r
files.clear();\r
- // List<RemoteFile> currList = new ArrayList<>;\r
- List<RemoteFile> currList = uri.getRemoteFiles();\r
- for (int i = 0; i < currList.size(); i++) {\r
- if (currList.get(i).getName().contains(searchText)) {\r
- files.add(currList.get(i));\r
- }\r
- }\r
+ uri.setFileFilter(searchText);\r
+ uri.setDirectoryFilter(searchText);\r
+ files.addAll(uri.getRemoteFiles());\r
}\r
\r
selectedItemChanged();\r
BindUtils.postGlobalCommand(null, null, "updateExecuteState", args);\r
}\r
\r
- public void setFilesCopy(List<RemoteFile> filesCopy) {\r
- this.filesCopy = filesCopy;\r
- }\r
-\r
public void setFileSizeConverter(FileSizeConverter fileSizeConverter) {\r
this.fileSizeConverter = fileSizeConverter;\r
}\r
// files = new ListModelList<>(uri.getRemoteFiles());\r
files.clear();\r
files.addAll(uri.getRemoteFiles());\r
- filesCopy = new ArrayList<>(files);\r
- }\r
-\r
- public void setStore(Store store) {\r
- this.store = store;\r
+ // filesCopy = new ArrayList<>(files);\r
}\r
\r
public void setUri(StoreUri uri) {\r
import com.ibm.nosql.json.api.BasicDBObject;\r
\r
import user.commons.ListUtils;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
import user.jobengine.db.ItemManagerData.SignalType;\r
import user.jobengine.server.IJobChangedListener;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.JobChangedEvent;\r
import user.jobengine.server.JobEngine;\r
import user.jobengine.server.JobEngineException;\r
+import user.jobengine.server.scheduler.ScheduledJob;\r
import user.jobengine.zk.util.SessionUtil;\r
\r
public class MaestroJobListModel extends AsyncBaseModel implements IJobChangedListener {\r
private static final Logger logger = LogManager.getLogger();\r
+ private static final String TEMPLATE = "common-copy.xml";\r
private ListModelList<IJobRuntime> jobList = new ListModelList<IJobRuntime>();\r
private IJobEngine jobEngine = null;\r
private int newPriority = 1;\r
public void jobChanged(JobChangedEvent event) {\r
JobChangedEvent jobEvent = event;\r
final IJobRuntime job = jobEvent.getJob();\r
- if (jobEvent.getSignalType().equals(SignalType.CREATE)) {\r
- registerTask(() -> onJobCreated(job));\r
- return;\r
- }\r
- if (jobEvent.getSignalType().equals(SignalType.DELETE)) {\r
- registerTask(() -> onJobDeleted(job));\r
- return;\r
- }\r
- if (jobEvent.getSignalType().equals(SignalType.UPDATE)) {\r
- registerTask(() -> onJobUpdated(job));\r
- return;\r
+ if (job.getOwner() == currentUser) {\r
+ if (jobEvent.getSignalType().equals(SignalType.CREATE)) {\r
+ registerTask(() -> onJobCreated(job));\r
+ return;\r
+ }\r
+ if (jobEvent.getSignalType().equals(SignalType.DELETE)) {\r
+ registerTask(() -> onJobDeleted(job));\r
+ return;\r
+ }\r
+ if (jobEvent.getSignalType().equals(SignalType.UPDATE)) {\r
+ registerTask(() -> onJobUpdated(job));\r
+ return;\r
+ }\r
}\r
}\r
\r
private void onJobCreated(IJobRuntime job) {\r
- jobList.add(job);\r
+ // jobList.add(job);\r
notifyChange("jobList");\r
}\r
\r
\r
@GlobalCommand\r
@NotifyChange({ "jobList" })\r
- public void submitJob() {\r
- // public void submitJob(@BindingParam("targets") MaestroTarget targets)\r
- // {\r
- IJobRuntime job;\r
- String template = "fake.xml";\r
- // Map<String, Object> args = new HashMap<>();\r
- // args.put("targets", targets);\r
+ public void submitJob(@BindingParam("params") Object params) {\r
+ // public void submitJob() {\r
+ ScheduledJob scheduledJob = jobEngine.getScheduledJob(TEMPLATE);\r
+ Map<String, Object> parameters = scheduledJob.getJobParameters();\r
+ // Map<String, Object> parameters = new HashMap<>();\r
+ // parameters.putAll(params);\r
+ parameters.put("sourceProtocol", RemoteStoreProtocol.LOCAL.toString());\r
+ parameters.put("sourcePath", "c:/temp");\r
+ parameters.put("sourceFileName", "index.bat");\r
+\r
+ parameters.put("targetProtocol", RemoteStoreProtocol.LOCAL.toString());\r
+ parameters.put("targetPath", "c:/temp1");\r
+ parameters.put("targetFileName", "index.bat");\r
+\r
try {\r
- // jobEngine.submit(template, "fakeJob", null, currentUser);\r
- job = jobEngine.submit(template, "fakeJob", ListUtils.asMap("itemID", 0), currentUser);\r
- // jobList.add(job);\r
+ IJobRuntime job;\r
+ // jobEngine.submit(template, "CopyJob", null, currentUser);\r
+ job = jobEngine.submit(TEMPLATE, "CopyJob", parameters, currentUser);\r
+ jobList.add(job);\r
} catch (JobEngineException e) {\r
logger.info("Hiba a job indításakor", e);\r
}\r
package user.jobengine.zk.model;\r
\r
+import java.util.HashMap;\r
+import java.util.Map;\r
import java.util.Set;\r
\r
import org.apache.logging.log4j.LogManager;\r
\r
import user.commons.RemoteFile;\r
import user.commons.config.JSONConfig;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.server.IJobEngine;\r
import user.mediacube.metadata.interfaces.IMetadata;\r
\r
public class TargetsListModel {\r
private MaestroConfig config = null;\r
private ListModelList<MaestroTarget> targets;\r
private boolean executeEnabled;\r
+ private IJobEngine jobEngine = null;\r
Set<RemoteFile> sourceData;\r
Set<IMetadata> metaData;\r
\r
\r
@Command\r
public void createJob() {\r
- Set<MaestroTarget> selection = targets.getSelection();\r
-\r
- // Map<String, Object> args = new HashMap<>();\r
- // args.put("targets", selection);\r
- BindUtils.postGlobalCommand(null, null, "submitJob", null);\r
+ /*\r
+ * Set<MaestroTarget> selection = targets.getSelection();\r
+ *\r
+ * Map<String, Object> args = new HashMap<>(); args.put("targets",\r
+ * selection);\r
+ */\r
+ // ScheduledJob scheduledJob =\r
+ // jobEngine.getScheduledJob("common-copy.xml");\r
+ // Map<String, Object> parameters = scheduledJob.getJobParameters();\r
+ String fileName = sourceData.iterator().next().getName();\r
+ for (int i = 0; i < targets.size(); i++) {\r
+ Map<String, Object> params = new HashMap<>();\r
+ params.put("sourceProtocol", RemoteStoreProtocol.LOCAL.toString());\r
+ params.put("sourcePath", sourceData.iterator().next());\r
+ params.put("sourceFileName", fileName);\r
+\r
+ params.put("targetProtocol", RemoteStoreProtocol.LOCAL.toString());\r
+ params.put("targetPath", targets.get(i).getStoreUri().getUri());\r
+ params.put("targetFileName", fileName);\r
+ BindUtils.postGlobalCommand(null, null, "submitJob", params);\r
+ }\r
}\r
\r
public ListModelList<MaestroTarget> getTargets() {\r