"$type": "UNCSource",\r
"filter": "png,tga,mov,mxf,wav",\r
"local": {\r
- "address": "file://C:/x/",\r
+ "address": "file://10.10.1.100/braavos/ingest",\r
"userName": "mediacube",\r
"password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
"timeout": 1000\r
+++ /dev/null
-using NLog;\r
-using System;\r
-using System.Collections.Concurrent;\r
-using System.IO;\r
-\r
-namespace Maestro {\r
-\r
- public class FolderScanner<T> {\r
- private static readonly Logger logger = LogManager.GetCurrentClassLogger();\r
- public delegate void FoundFileSystemEntry(T parent, string entry, string label, bool isDirectory);\r
- public event FoundFileSystemEntry OnFoundFileSystemEntry;\r
- private ConcurrentDictionary<string, T> cache;\r
-\r
- public void EnumerateDirectories(string path) {\r
- if (!Directory.Exists(path))\r
- return;\r
- try {\r
- foreach (string entry in Directory.GetDirectories(path)) {\r
- logger.Info(entry);\r
- T parent = Get(Path.GetDirectoryName(entry));\r
- string label = Uri.UnescapeDataString(Path.GetFileName(entry));\r
- OnFoundFileSystemEntry?.Invoke(parent, entry, label, true);\r
- EnumerateDirectories(entry);\r
- }\r
- }\r
- catch (Exception e) {\r
- logger.Error(e);\r
- }\r
-\r
- //var directories = Directory.EnumerateDirectories(path, "*", SearchOption.AllDirectories);\r
- //try {\r
- // foreach (var entry in directories) {\r
- // logger.Info(entry);\r
- // T parent = Get(Path.GetDirectoryName(entry));\r
- // string label = Uri.UnescapeDataString(Path.GetFileName(entry));\r
- // OnFoundFileSystemEntry?.Invoke(parent, entry, label, true);\r
- // }\r
- //}\r
- //catch (Exception e) {\r
- // logger.Error(e);\r
- //}\r
- }\r
-\r
- public void Put(string key, T value) {\r
- if (cache == null)\r
- cache = new ConcurrentDictionary<string, T>();\r
- cache.TryAdd(key, value);\r
- }\r
-\r
- private string GetLastSegment(string path) {\r
-\r
- return Uri.UnescapeDataString(Path.GetFileName(path));\r
- }\r
-\r
- private T Get(string key) {\r
- T result = default(T);\r
- if (cache == null)\r
- return result;\r
- cache.TryGetValue(key, out result);\r
- return result;\r
- }\r
- }\r
-}\r
<Compile Include="Commons\DataGridViewProgressColumn.cs" />\r
<Compile Include="Commons\SambaClient.cs" />\r
<Compile Include="Commons\WindowsIdentityMembers.cs" />\r
- <Compile Include="FolderScanner.cs" />\r
<Compile Include="LoginForm.cs">\r
<SubType>Form</SubType>\r
</Compile>\r
<Compile Include="MaestroForm.Metadata.cs">\r
<SubType>Form</SubType>\r
</Compile>\r
+ <Compile Include="MaestroForm.SourceFolders.cs">\r
+ <SubType>Form</SubType>\r
+ </Compile>\r
<Compile Include="MaestroForm.Target.cs">\r
<SubType>Form</SubType>\r
</Compile>\r
<None Include="Configuration\-configuration-sxs.json">\r
<CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
</None>\r
- <None Include="Configuration\configuration-studio.json">\r
+ <None Include="Configuration\-configuration-studio.json">\r
<CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
</None>\r
</ItemGroup>\r
this.treeFolders.TabIndex = 18;\r
this.treeFolders.Visible = false;\r
this.treeFolders.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.OnBeforeExpandFolder);\r
+ this.treeFolders.AfterCollapse += new System.Windows.Forms.TreeViewEventHandler(this.OnAfterCollapseFolder);\r
this.treeFolders.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.OnAfterFolderSelect);\r
this.treeFolders.MouseDown += new System.Windows.Forms.MouseEventHandler(this.OnFolderMouseDown);\r
+ this.treeFolders.KeyUp += new System.Windows.Forms.KeyEventHandler(this.OnKeyUpFolder);\r
// \r
// ilFolders\r
// \r
treeFolders.NodeDoubleClick += OnDoubleClickFolder;\r
}\r
\r
- private string GetLastSegment(string path) {\r
- Uri uri = new Uri(path);\r
- return Uri.UnescapeDataString(uri.Segments[uri.Segments.Length - 1]);\r
- }\r
-\r
- private void ShowFolders() {\r
- dgSource.Visible = false;\r
- treeFolders.Visible = true;\r
- treeFolders.Dock = DockStyle.Fill;\r
- FileSystemSource source = bindingSource.DataSource as FileSystemSource;\r
- if (source == null) {\r
- HideFolders();\r
- btnShowFolders.CheckState = CheckState.Unchecked;\r
- }\r
- Uri address = Configuration.Source.Local.Address;\r
-\r
-\r
- if (!Directory.Exists(address.LocalPath))\r
- return;\r
- string label = Path.GetFileName(address.LocalPath);\r
- label = String.IsNullOrEmpty(label) ? address.LocalPath : label;\r
- TreeNode rootNode = treeFolders.Nodes.Add(label);\r
- //FolderScanner<TreeNode> scanner = new FolderScanner<TreeNode>();\r
- //scanner.Put(address.LocalPath, rootNode);\r
- //scanner.OnFoundFileSystemEntry += (parent, entry, label, isDirectory) => {\r
- // //logger.Trace($"{parent} *** {entry}");\r
- // TreeNode node = parent.Nodes.Add(label);\r
- // scanner.Put(entry, node);\r
- //};\r
-\r
- //treeFolders.BeginUpdate();\r
- //scanner.EnumerateDirectories(address.LocalPath);\r
- //if ((Configuration.Source as UNCSource).FoldersAutoExpand)\r
- // treeFolders.ExpandAll();\r
- //rootNode.EnsureVisible();\r
- //treeFolders.Sort();\r
- //treeFolders.EndUpdate();\r
- AddFolders(address, rootNode);\r
- }\r
-\r
- private void AddFolders(Uri address, TreeNode parent) {\r
- string[] folders = null;\r
- try {\r
- folders = Directory.GetDirectories(address.LocalPath);\r
- }\r
- catch (Exception ex) {\r
- MsgBox.Error(ex.Message);\r
- }\r
- if (folders == null)\r
- return;\r
-\r
- Array.Sort(folders, StringComparer.InvariantCultureIgnoreCase);\r
- treeFolders.BeginUpdate();\r
- foreach (var folder in folders) {\r
- TreeNode folderNode = parent.Nodes.Add(GetLastSegment(folder));\r
- folderNode.Nodes.Add("..");\r
- }\r
- //treeFolders.Sort();\r
- parent.EnsureVisible();\r
- treeFolders.EndUpdate();\r
- }\r
-\r
- private void OnBeforeExpandFolder(object sender, TreeViewCancelEventArgs e) {\r
- logger.Info("<OnBeforeExpandFolder {0}", e.Node.Text);\r
- if (e.Node.Nodes.Count != 1 || !"..".Equals(e.Node.Nodes[0].Text)) {\r
- logger.Info("OnBeforeExpandFolder> Nothing to do");\r
- return;\r
- }\r
- e.Node.Nodes.Clear();\r
- Uri address = new Uri(Path.Combine(Configuration.Source.Local.Address.LocalPath, GetPath(e.Node)));\r
- AddFolders(address, e.Node);\r
- logger.Info("OnBeforeExpandFolder>");\r
- }\r
-\r
- private void OnDoubleClickFolder(object sender, TreeNodeMouseClickEventArgs args) {\r
- //if (e.Action != TreeViewAction.ByMouse)\r
- // return;\r
- txtSourceFilter.Text = null;\r
- FileSystemSource source = bindingSource.DataSource as FileSystemSource;\r
- Uri address = null;\r
- if (args.Node.Level == 0)\r
- address = Configuration.Source.Local.Address;\r
- else\r
- address = new Uri(Uri.UnescapeDataString(Path.Combine(Configuration.Source.Local.Address.LocalPath, GetPath(args.Node))));\r
- if (!String.IsNullOrEmpty(address.LocalPath))\r
- formTooltip.SetToolTip(groupSource, address.LocalPath);\r
-\r
- if (source.Reset(address.LocalPath))\r
- SelectedSource = null;\r
- \r
- btnShowFolders.Checked = false;\r
- HideFolders();\r
- }\r
-\r
- private void HideFolders() {\r
- dgSource.Visible = true;\r
- treeFolders.Visible = false;\r
- treeFolders.Nodes.Clear();\r
- }\r
-\r
- private string GetPath(TreeNode node) {\r
- TreeNode treeNode = node;\r
- StringBuilder sb = new StringBuilder();\r
- sb.Append(treeNode.Text);\r
- while (treeNode.Level != 1) {\r
- treeNode = treeNode.Parent;\r
- sb.Insert(0, "/");\r
- sb.Insert(0, treeNode.Text);\r
- }\r
- return sb.ToString();\r
- }\r
-\r
- private void OnShowFolders(object sender, EventArgs e) {\r
- if (btnShowFolders.CheckState == CheckState.Checked) {\r
- HideFolders();\r
- btnShowFolders.CheckState = CheckState.Unchecked;\r
- } else {\r
- ResetSourceSearch();\r
- ShowFolders();\r
- btnShowFolders.CheckState = CheckState.Checked;\r
- }\r
- }\r
-\r
private void dataGridSource_CellMouseEnter(object sender, DataGridViewCellEventArgs e) {\r
if (e.RowIndex > -1 && IsPlayColumn(e.ColumnIndex))\r
dgSource.Cursor = Cursors.Hand;\r
}\r
}\r
\r
- private void SearchFolders() {\r
- throw new NotImplementedException();\r
- }\r
-\r
private void textSelectedSource_KeyDown(object sender, KeyEventArgs e) {\r
if (e.KeyCode != Keys.Return || !btnLookupBySource.Enabled)\r
return;\r
--- /dev/null
+using Maestro.Sources;\r
+using MaestroShared.Commons;\r
+using System;\r
+using System.Collections.Generic;\r
+using System.IO;\r
+using System.Text;\r
+using System.Windows.Forms;\r
+\r
+namespace Maestro {\r
+\r
+ public partial class MaestroForm {\r
+ private string GetLastSegment(string path) {\r
+ Uri uri = new Uri(path);\r
+ return Uri.UnescapeDataString(uri.Segments[uri.Segments.Length - 1]);\r
+ }\r
+\r
+ private void ShowFolders() {\r
+ FileSystemSource source = bindingSource.DataSource as FileSystemSource;\r
+ if (source == null) {\r
+ btnShowFolders.CheckState = CheckState.Unchecked;\r
+ return;\r
+ }\r
+ Uri address = Configuration.Source.Local.Address;\r
+ if (!Directory.Exists(address.LocalPath))\r
+ return;\r
+\r
+ treeFolders.Dock = DockStyle.Fill;\r
+\r
+ if (treeFolders.Nodes.Count == 0) {\r
+ string label = Path.GetFileName(address.LocalPath);\r
+ label = String.IsNullOrEmpty(label) ? address.LocalPath : label;\r
+ TreeNode rootNode = treeFolders.Nodes.Add(label);\r
+ rootNode.Nodes.Add("..");\r
+ }\r
+\r
+ dgSource.Visible = false;\r
+ treeFolders.Visible = true;\r
+ treeFolders.Focus();\r
+ if (treeFolders.Nodes.Count > 0)\r
+ treeFolders.Nodes[0].Expand();\r
+ }\r
+\r
+ private void AddFolders(Uri address, TreeNode parent) {\r
+ string[] folders = null;\r
+ try {\r
+ folders = Directory.GetDirectories(address.LocalPath);\r
+ }\r
+ catch (Exception ex) {\r
+ MsgBox.Error(ex.Message);\r
+ }\r
+ treeFolders.BeginUpdate();\r
+ parent.Nodes.Clear();\r
+ if (folders != null) {\r
+ Array.Sort(folders, StringComparer.InvariantCultureIgnoreCase);\r
+ foreach (var folder in folders) {\r
+ TreeNode folderNode = parent.Nodes.Add(GetLastSegment(folder));\r
+ folderNode.Nodes.Add("..");\r
+ }\r
+ }\r
+ parent.EnsureVisible();\r
+ treeFolders.EndUpdate();\r
+ }\r
+\r
+ private void OnBeforeExpandFolder(object sender, TreeViewCancelEventArgs e) {\r
+ if (e.Node.Nodes.Count != 1 || !"..".Equals(e.Node.Nodes[0].Text))\r
+ return;\r
+ treeFolders.SelectedNode = e.Node;\r
+ Uri address = GetSelectedNodeUri();\r
+ if (address == null)\r
+ return;\r
+ Cursor = Cursors.Hand;\r
+ AddFolders(address, e.Node);\r
+ Cursor = Cursors.Default;\r
+ }\r
+\r
+ private void OnAfterCollapseFolder(object sender, TreeViewEventArgs e) {\r
+ treeFolders.BeginUpdate();\r
+ e.Node.Nodes.Clear();\r
+ e.Node.Nodes.Add("..");\r
+ treeFolders.EndUpdate();\r
+ }\r
+\r
+ private Uri GetSelectedNodeUri() {\r
+ if (treeFolders.SelectedNode == null)\r
+ return null;\r
+ Uri result = null;\r
+ if (treeFolders.SelectedNode.Level == 0)\r
+ result = Configuration.Source.Local.Address;\r
+ else\r
+ result = new Uri(Uri.UnescapeDataString(Path.Combine(Configuration.Source.Local.Address.LocalPath, GetPath(treeFolders.SelectedNode))));\r
+ return result;\r
+ }\r
+\r
+ private void OnDoubleClickFolder(object sender, TreeNodeMouseClickEventArgs args) {\r
+ SelectFolder();\r
+ }\r
+\r
+ private void SelectFolder() {\r
+ Uri address = GetSelectedNodeUri();\r
+ if (address == null)\r
+ return;\r
+\r
+ txtSourceFilter.Text = null;\r
+ if (!String.IsNullOrEmpty(address.LocalPath))\r
+ formTooltip.SetToolTip(groupSource, address.LocalPath);\r
+\r
+ FileSystemSource source = bindingSource.DataSource as FileSystemSource;\r
+ if (source.Reset(address.LocalPath))\r
+ SelectedSource = null;\r
+\r
+ btnShowFolders.Checked = false;\r
+ HideFolders();\r
+ }\r
+\r
+ private void OnKeyUpFolder(object sender, KeyEventArgs e) {\r
+ if (e.KeyCode == Keys.Return)\r
+ SelectFolder();\r
+ }\r
+\r
+ private void HideFolders() {\r
+ dgSource.Visible = true;\r
+ treeFolders.Visible = false;\r
+ //treeFolders.Nodes.Clear();\r
+ }\r
+\r
+ private string GetPath(TreeNode node) {\r
+ TreeNode treeNode = node;\r
+ StringBuilder sb = new StringBuilder();\r
+ sb.Append(treeNode.Text);\r
+ while (treeNode.Level != 1) {\r
+ treeNode = treeNode.Parent;\r
+ sb.Insert(0, "/");\r
+ sb.Insert(0, treeNode.Text);\r
+ }\r
+ return sb.ToString();\r
+ }\r
+\r
+ private void OnShowFolders(object sender, EventArgs e) {\r
+ if (btnShowFolders.CheckState == CheckState.Checked) {\r
+ HideFolders();\r
+ btnShowFolders.CheckState = CheckState.Unchecked;\r
+ } else {\r
+ ResetSourceSearch();\r
+ ShowFolders();\r
+ btnShowFolders.CheckState = CheckState.Checked;\r
+ }\r
+ }\r
+\r
+ private void SearchFolders() {\r
+ if (treeFolders.Nodes.Count == 0)\r
+ return;\r
+ string address = formTooltip.GetToolTip(groupSource);\r
+ List<string> searchResult = SearchDirectories(address, txtSourceFilter.Text);\r
+ //logger.Info(searchResult.Count);\r
+ treeFolders.BeginUpdate();\r
+ TreeNode rootNode = treeFolders.Nodes[0];\r
+ rootNode.Nodes.Clear();\r
+ treeFolders.SelectedNode = rootNode;\r
+\r
+ Uri rootPath = GetSelectedNodeUri();\r
+ foreach (String path in searchResult) {\r
+ logger.Info(path.Substring(rootPath.LocalPath.Length));\r
+ string entry = path.Replace("\\", "/");\r
+\r
+ TreeNode node = rootNode;\r
+ string[] entries = entry.Split('/');\r
+ foreach (string segment in entries) {\r
+\r
+ if (node.Nodes.ContainsKey(segment))\r
+ node = node.Nodes.Find(segment, false)[0];\r
+ else\r
+ node = node.Nodes.Add(segment);\r
+ // treeFolders.Get\r
+ }\r
+ }\r
+ if (rootNode.Nodes.Count == 0)\r
+ treeFolders.Nodes.Clear();\r
+ treeFolders.EndUpdate();\r
+\r
+ }\r
+\r
+ private List<string> SearchDirectories(string path, string pattern) {\r
+ if (!Directory.Exists(path))\r
+ return null;\r
+ List<string> result = new List<string>();\r
+ try {\r
+ foreach (string entry in Directory.GetDirectories(path)) {\r
+ string label = Uri.UnescapeDataString(Path.GetFileName(entry));\r
+ if (label.ToLower().Contains(pattern.ToLower()))\r
+ result.Add(entry);\r
+ List<string> childResult = SearchDirectories(entry, pattern);\r
+ if (childResult != null && childResult.Count > 0)\r
+ result.AddRange(childResult);\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ logger.Error(e);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ }\r
+}\r
if (m.Msg == 0x203) {\r
var point = PointToClient(Cursor.Position);\r
TreeNode node = GetNodeAt(point);\r
+ if (node == null || PointToClient(Cursor.Position).X < node.Bounds.X - 20)\r
+ return;\r
+ \r
+ logger.Info("{0} {1}", PointToClient(Cursor.Position), node.Bounds);\r
TreeNodeMouseClickEventArgs args = new TreeNodeMouseClickEventArgs(node, MouseButtons.Left, 2, point.X, point.Y);\r
NodeDoubleClick?.Invoke(this, args);\r
m.Result = IntPtr.Zero;\r
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>\r
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty -Djava.io.tmpdir=c:\temp\jetty -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Dnexio.host=10.10.1.55 -Dnexio.disable=false -Djobengine.octopus.rundowns.name=test_rundowns -Djobengine.octopus.storyfolders.name=test_storyfolders -Djobengine.octopus.stories.name=test_stories -Dmediacube.auth.location="${workspace_loc}/-configuration/mediacube-auth.properties""/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty -Djava.io.tmpdir=c:\temp\jetty -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Dnexio.host=10.10.1.55 -Dnexio.disable=true -Djobengine.octopus.rundowns.name=test_rundowns -Djobengine.octopus.storyfolders.name=test_storyfolders -Djobengine.octopus.stories.name=test_stories -Dmediacube.auth.location="${workspace_loc}/-configuration/mediacube-auth.properties""/>\r
<stringAttribute key="pde.version" value="3.3"/>\r
<booleanAttribute key="show_selected_only" value="false"/>\r
<stringAttribute key="target_bundles" value="cglib@default:default,com.auth0.java-jwt@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default,com.google.guava@default:default,com.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,com.sun.el.javax.el@default:default,commons-logging@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.inject@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.servlet.jsp-api@default:default,javax.validation.api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang3@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.jasper.glassfish@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jetty.client@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.jsp@default:default,org.eclipse.jetty.osgi.boot.jsp@default:false,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
import org.apache.logging.log4j.Logger;\r
import org.apache.logging.log4j.Marker;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+import com.ibm.nosql.json.api.DB;\r
+import com.ibm.nosql.json.api.DBCollection;\r
+import com.ibm.nosql.json.api.DBObject;\r
+\r
+import user.commons.nosql.NoSQLUtils;\r
import user.jobengine.db.ItemDAOEx;\r
import user.jobengine.db.ItemManager;\r
import user.jobengine.db.Media;\r
marker = jobRuntime.getMarker();\r
ItemDAOEx dao = new ItemDAOEx((ItemManager) jobEngine.getItemManager());\r
List<Media> medias = dao.getUntranscodedMedias();\r
+\r
+ DB db = NoSQLUtils.getNoSQLDB();\r
+ DBCollection collection = db.getCollection("missing_lowres");\r
try {\r
if (medias == null || medias.size() == 0) {\r
throw new Exception("Nincs feldolgozandó hiány.");\r
}\r
\r
- result[0] = medias.get(0);\r
- ArchiveItem archiveItem = new ArchiveItem();\r
- archiveItem.setMediaFile(Paths.get(localHiresPath, medias.get(0).getMediaFilesName()).toString());\r
- result[1] = archiveItem;\r
+ for (Media media : medias) {\r
+ String name = media.getMediaFilesName();\r
+ DBObject existing = collection.findOne(new BasicDBObject("name", name));\r
+ if (existing != null)\r
+ continue;\r
+\r
+ result[0] = media;\r
+ ArchiveItem archiveItem = new ArchiveItem();\r
+ archiveItem.setMediaFile(Paths.get(localHiresPath, name).toString());\r
+ result[1] = archiveItem;\r
+ collection.save(new BasicDBObject("name", name));\r
+ break;\r
+ }\r
+\r
} catch (Exception e) {\r
logger.catching(e);\r
logger.error(marker, e.getMessage());\r
return null;\r
}\r
\r
- private void postprocess(Path transcodedFilePath, String webPath) {\r
+ private void postprocess(Path transcodedFilePath, String webPath) throws IOException {\r
Path lowresPath = null;\r
try {\r
String transcodedFileName = transcodedFilePath.getFileName().toString();\r
Files.move(transcodedFilePath, lowresPath);\r
}\r
} catch (IOException e) {\r
- lowresPath = transcodedFilePath;\r
logger.catching(e);\r
- logger.error(marker, "A '{}' állomány mozgatása a '{}' helyre nem sikerült.", transcodedFilePath, transcodedFilePath);\r
+ logger.error(marker, "A '{}' állomány mozgatása a '{}' helyre nem sikerült.", transcodedFilePath, lowresPath);\r
+ throw e;\r
}\r
}\r
\r
import javax.ws.rs.core.Response;\r
\r
import org.apache.commons.lang.StringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;\r
import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;\r
\r
// }\r
// }\r
\r
+ private static final Logger logger = LogManager.getLogger();\r
private ResteasyWebTarget webTarget;\r
-\r
private IProgressChangedListener listener;\r
-\r
- private String inputFile;\r
-\r
private String jobId;\r
\r
public FFAStransAPI(String apiAddress, IProgressChangedListener listener) {\r
BasicDBObject result = null;\r
try {\r
Response apiResponse = target.request().get();\r
+ logger.info("Transoder response code: {}", apiResponse.getStatus());\r
+\r
if (apiResponse.getStatus() != 200)\r
return null;\r
String json = apiResponse.readEntity(String.class);\r
+ logger.info("Transoder response: {}", json);\r
BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
List<BasicDBObject> jobs = NoSQLUtils.asList(resultObject, "jobs");\r
if (jobs == null)\r
}\r
\r
} catch (Exception e) {\r
- System.out.println(e.getClass() + " " + e.getMessage());\r
+ logger.error(e.getClass() + " " + e.getMessage());\r
}\r
\r
return result;\r
\r
@Override\r
public void submit(String workflowName, String inputFile) throws Exception {\r
- this.inputFile = inputFile;\r
List<BasicDBObject> workflows = getWorkflows();\r
if (workflows == null)\r
throw new Exception("No workflows");\r
if (apiResponse.getStatus() != 202)\r
throw new Exception("Can not submit, response status is: " + apiResponse.getStatus());\r
String json = apiResponse.readEntity(String.class);\r
-\r
+ logger.info("Transoder response: {}", json);\r
if (StringUtils.isBlank(json))\r
throw new Exception("Can not submit, response JSON is empty");\r
BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
import java.io.IOException;\r
import java.nio.file.Path;\r
\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
import io.humble.video.Decoder;\r
import io.humble.video.Demuxer;\r
import io.humble.video.DemuxerStream;\r
-import io.humble.video.Global;\r
import io.humble.video.MediaDescriptor;\r
\r
public class MediaInfo {\r
-\r
+ private static final Logger logger = LogManager.getLogger();\r
private long frames;\r
-\r
private Path filePath;\r
\r
public MediaInfo(Path filePath) {\r
\r
public void process() throws InterruptedException, IOException {\r
final Demuxer demuxer = Demuxer.make();\r
- demuxer.open(filePath.toString(), null, false, true, null, null);\r
- int bitRate = demuxer.getBitRate() / 1000;\r
- double start = demuxer.getStartTime() == Global.NO_PTS ? 0 : demuxer.getStartTime() / 1000000.0;\r
-\r
- int numStreams = demuxer.getNumStreams();\r
-\r
- frames = 0;\r
- int videoStreamId = -1;\r
- long streamStartTime = Global.NO_PTS;\r
- Decoder videoDecoder = null;\r
- for (int i = 0; i < numStreams; i++) {\r
- final DemuxerStream stream = demuxer.getStream(i);\r
- streamStartTime = stream.getStartTime();\r
- final Decoder decoder = stream.getDecoder();\r
-\r
- if (decoder != null && decoder.getCodecType() == MediaDescriptor.Type.MEDIA_VIDEO) {\r
- videoStreamId = i;\r
- videoDecoder = decoder;\r
- frames = stream.getDuration();\r
- break;\r
+ try {\r
+ demuxer.open(filePath.toString(), null, false, true, null, null);\r
+ int numStreams = demuxer.getNumStreams();\r
+ frames = 0;\r
+ int videoStreamId = -1;\r
+ for (int i = 0; i < numStreams; i++) {\r
+ final DemuxerStream stream = demuxer.getStream(i);\r
+ final Decoder decoder = stream.getDecoder();\r
+\r
+ if (decoder != null && decoder.getCodecType() == MediaDescriptor.Type.MEDIA_VIDEO) {\r
+ videoStreamId = i;\r
+ frames = stream.getDuration();\r
+ break;\r
+ }\r
+ }\r
+ if (videoStreamId == -1)\r
+ throw new RuntimeException("could not find video stream in container: " + filePath);\r
+\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ throw e;\r
+ } finally {\r
+ try {\r
+ demuxer.close();\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ throw e;\r
}\r
}\r
- if (videoStreamId == -1)\r
- throw new RuntimeException("could not find video stream in container: " + filePath);\r
-\r
- demuxer.close();\r
}\r
\r
}\r
logger.info("NEXIO metadata import completed.");\r
}\r
\r
- //END OF R\r
- /*\r
- private void extendJSONClip(BasicDBObject jsClip, Clip clip) throws Exception {\r
- jsClip.put(ID, clip.getId().get()); //Unique internal ID\r
- jsClip.put(LONGNAMEID, clip.getXid().get()); //Extended ID (Filename)\r
- jsClip.put(DURATION, clip.getDuration());\r
- jsClip.put(MODIFIEDTIMESTAMP, clip.getModifiedTimestamp().getTime());\r
- jsClip.put(VIDEO_FORMAT, clip.getVideoFormat());\r
- jsClip.put(VIDEO_BITRATE, clip.getVideoBitrate());\r
- jsClip.put(FILESIZE, clip.getFileSize());\r
- jsClip.put(EXTAGENCY, clip.getExtendedField(GetExtendedFieldCommand.FN_AGENCY));\r
- //jsClip.put(RECORDDATE, new DateTime(rs.getString(i++)).toDate());\r
- //jsClip.put(EXTAGENCY, rs.getString(i++));\r
- //jsClip.put(START, rs.getString(i++));\r
- //System.out.println(String.format("ID = '%s'\tXID = '%s'\tDuration = '%s'\tModified = '%s'\tVideoFormat = '%s'\tVideoBitrate = '%s'", id, xid, duration, modifiedTimestamp.getTime(), videoFormat, videoBitrate));\r
- }\r
- */\r
-\r
public void dropAllClipsFromMongo() {\r
db.getCollection(CLIP_COLLECTION_NAME).drop();\r
}\r
collection.ensureIndex(LONGNAMEID);\r
}\r
\r
+ private void innerStartup() {\r
+ boolean[] useMOSGateway = { Boolean.parseBoolean(System.getProperty(NEXIO_USE_MOS_GATEWAY)) };\r
+\r
+ worker = new Thread(() -> {\r
+ try {\r
+ logger.info("Initial clip import started");\r
+ if (useMOSGateway[0]) {\r
+ NexioDataMiner dm = new NexioDataMiner();\r
+ dm.transferClips();\r
+ } else {\r
+ copyClipsIntoMongo();\r
+ }\r
+ logger.info("Initial clip import completed");\r
+ Mediabase mediabase = NexioDispatcher.this.controller.getMediabase();\r
+ mediaListener = mediabase.createMediaListener(disabled, NexioDispatcher.this);\r
+ mediaListener.startListener();\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ }\r
+ });\r
+ worker.start();\r
+ }\r
+\r
/*\r
Nem foglalkozunk a clippel ha:\r
C8 84 Get Special ID Attributes\r
}\r
\r
public void shutdown() {\r
- if (mediaListener != null) {\r
- mediaListener.disconnect();\r
- mediaListener = null;\r
- }\r
- if (controller != null) {\r
- controller.disconnect();\r
- controller = null;\r
- }\r
- try {\r
- worker.join();\r
- } catch (InterruptedException e) {\r
- logger.catching(e);\r
+ if (!disabled) {\r
+ if (mediaListener != null) {\r
+ mediaListener.disconnect();\r
+ mediaListener = null;\r
+ }\r
+ if (controller != null) {\r
+ controller.disconnect();\r
+ controller = null;\r
+ }\r
+ try {\r
+ worker.join();\r
+ } catch (InterruptedException e) {\r
+ logger.catching(e);\r
+ }\r
}\r
}\r
\r
public void startup() {\r
- this.controller = new Controller(NEXIO_HOST);\r
- try {\r
- this.controller.connect();\r
- } catch (Exception e) {\r
- logger.catching(e);\r
- return;\r
- }\r
-\r
if (!disabled) {\r
- this.dropAllClipsFromMongo();\r
- this.ensureIndexes();\r
- }\r
-\r
- boolean[] useMOSGateway = { Boolean.parseBoolean(System.getProperty(NEXIO_USE_MOS_GATEWAY)) };\r
-\r
- worker = new Thread(() -> {\r
+ this.controller = new Controller(NEXIO_HOST);\r
try {\r
- logger.info("Initial clip import started");\r
- if (!disabled) {\r
- if (useMOSGateway[0]) {\r
- NexioDataMiner dm = new NexioDataMiner();\r
- dm.transferClips();\r
- } else {\r
- copyClipsIntoMongo();\r
- }\r
- }\r
- logger.info("Initial clip import completed");\r
- Mediabase mediabase = NexioDispatcher.this.controller.getMediabase();\r
- mediaListener = mediabase.createMediaListener(disabled, NexioDispatcher.this);\r
- mediaListener.startListener();\r
+ this.controller.connect();\r
} catch (Exception e) {\r
logger.catching(e);\r
+ return;\r
}\r
- });\r
- worker.start();\r
+ dropAllClipsFromMongo();\r
+ ensureIndexes();\r
+ innerStartup();\r
+ } else\r
+ logger.info("Nexio service is disabled");\r
}\r
\r
}\r
<servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class>\r
</servlet>\r
\r
- <!-- servlet> <description>Test servlet for jetty</description> <servlet-name>testservlet</servlet-name> <servlet-class>user.jobengine.servlet.TestServlet</servlet-class> \r
- <load-on-startup>2</load-on-startup> </servlet -->\r
+ <servlet>\r
+ <description>Test servlet for jetty</description>\r
+ <servlet-name>testservlet</servlet-name>\r
+ <servlet-class>user.jobengine.servlet.TestServlet</servlet-class>\r
+ <load-on-startup>2</load-on-startup>\r
+ </servlet>\r
\r
<!-- ZK -->\r
<servlet-mapping>\r
<url-pattern>/zkau/*</url-pattern>\r
</servlet-mapping>\r
\r
- <!-- servlet-mapping> <servlet-name>testservlet</servlet-name> <url-pattern>/noway/*</url-pattern> </servlet-mapping -->\r
+ <servlet-mapping>\r
+ <servlet-name>testservlet</servlet-name>\r
+ <url-pattern>/actions/*</url-pattern>\r
+ </servlet-mapping>\r
\r
<servlet-mapping>\r
- <servlet-name>zkLoader</servlet-name>\r
- <url-pattern>/test</url-pattern>\r
+ <servlet-name>zkLoader</servlet-name>\r
+ <url-pattern>/test</url-pattern>\r
</servlet-mapping>\r
\r
<session-config>\r
--- /dev/null
+<%@ page import="java.util.*, java.io.*, java.net.*, user.jobengine.zk.util.SessionUtil"%>\r
+<link rel="shortcut icon" href="/img/mediacube_logo_small.ico">\r
+<%\r
+ out.println("HELLO");\r
+%>
\ No newline at end of file
<%@ page import="java.util.*, java.io.*, java.net.*, user.jobengine.zk.util.SessionUtil"%>\r
<link rel="shortcut icon" href="/img/mediacube_logo_small.ico">\r
<%\r
- pageContext.forward("/pages/index.zul");\r
+ String action = request.getParameter("action");\r
+ pageContext.forward("/pages/index.zul?action=" + action);\r
%>
\ No newline at end of file
});//zk.afterLoad\r
</script>\r
\r
- <window id="zkwindow" border="none" width="100%" height="100%" contentStyle="padding:0;" onClientInfo="onClientInfo(event)">\r
+ <window id="zkwindow" border="none" width="100%" height="100%" contentStyle="padding:0;" onClientInfo="onClientInfo(event)" \r
+ apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('user.jobengine.zk.model.IndexModel')">\r
<custom-attributes org.zkoss.zul.image.preload="true" />\r
<borderlayout width="${myWidth}" height="${myHeight}">\r
<north border="0">\r
- <div id="divMenu" apply="org.zkoss.bind.BindComposer">\r
+ <div id="divMenu">\r
<borderlayout height="50px">\r
<west border="0">\r
<hbox height="100%" width="100%" align="center" pack="center" style="background: #008AC8;">\r
</div>\r
</north>\r
<center border="0">\r
- <include style="background: #e3e3e3;" id="includeContent" src="/pages/searchitems.zul" />\r
+ <include style="background: #e3e3e3;" id="includeContent" src="@load(vm.page)" />\r
</center>\r
</borderlayout>\r
</window>\r
<?init class="user.jobengine.zk.util.AdminAuthInitiator"?>\r
<zk xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:ca="client/attribute">\r
<script>\r
- window.history.pushState(null, "Folyamatok", "/jobs"); \r
+ window.history.pushState(null, "Folyamatok", "/actions/jobs"); \r
</script>\r
<style>\r
.z-progressmeter { height: 16px; border: 1px solid #cfcfcf; background: #fff 0 0 repeat-x; text-align: left; overflow: hidden; // background-image:\r
+++ /dev/null
-package user.jobengine.server;
-
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-public class JobScheduler {
-
- private class ScheduleDispatcher extends Thread {
- private volatile boolean shutdown = false;
-
- @Override
- public void run() {
- while (!shutdown) {
- try {
- JobSchedule schedule = scheduleQueue.poll();
- if (schedule.IsSchedulable())
- schedulerQueue.add(schedule);
- else
- scheduleQueue.add(schedule);
- } catch (Exception e) {
- shutdown = true;
- }
- }
- }
-
- void shutDown() {
- shutdown = true;
- try {
- join();
- } catch (InterruptedException e) {
- }
- }
- }
-
- private class SchedulerDispatcher extends Thread {
- private volatile boolean shutdown = false;
-
- @Override
- public void run() {
- while (!shutdown) {
- try {
- JobSchedule schedule = schedulerQueue.poll();
- //jobEngine.submit(schedule.getTemplate(), schedule.getName(), null);
- logger.info("Scheduleing " + schedule.getName() + " - " + schedule.getTemplate());
- scheduleQueue.add(schedule);
- } catch (Exception e) {
- shutdown = true;
- }
- }
- }
-
- void shutDown() {
- shutdown = true;
- try {
- join();
- } catch (InterruptedException e) {
- }
- }
- }
-
- private final BlockingQueue<JobSchedule> scheduleQueue;
- private final BlockingQueue<JobSchedule> schedulerQueue;
- private final ScheduleDispatcher scheduleDispatcher;
- private final SchedulerDispatcher schedulerDispatcher;
- private static final Logger logger = LogManager.getLogger();
- private final IJobEngine jobEngine;
-
- public JobScheduler(IJobEngine jobEngine) {
- this.jobEngine = jobEngine;
- scheduleQueue = new LinkedBlockingQueue<JobSchedule>();
- schedulerQueue = new LinkedBlockingQueue<JobSchedule>();
-
- scheduleDispatcher = new ScheduleDispatcher();
- schedulerDispatcher = new SchedulerDispatcher();
- }
-
- public void add(JobSchedule jobSchedule) {
- scheduleQueue.add(jobSchedule);
- }
-
- public void shutdown() {
- scheduleDispatcher.shutDown();
- schedulerDispatcher.shutDown();
- }
-
-}
try {\r
realJob.doJob();\r
} catch (Exception e) {\r
- logger.catching(e);\r
+ logger.warn(e.getMessage());\r
}\r
}\r
}\r
this.getJobParameters().put(name, value);\r
}\r
\r
+ public void setJobParameters(Map<String, Object> jobParameters) {\r
+ this.jobParameters = jobParameters;\r
+ }\r
+\r
public void setTemplateName(String templateName) {\r
this.templateName = templateName;\r
}\r
return String.format("!%s! %s", jobName, templateName);\r
}\r
\r
- public void setJobParameters(Map<String, Object> jobParameters) {\r
- this.jobParameters = jobParameters;\r
- }\r
-\r
}\r
private static final Logger logger = LogManager.getLogger();\r
\r
public TestServlet() {\r
- logger.info("TestServlet konstruktor.");\r
}\r
\r
@Override\r
- public void init(ServletConfig config) throws ServletException {\r
- super.init(config);\r
- logger.info("TestServlet inited.");\r
+ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\r
+ String targetPath = "/?action=" + request.getPathInfo().replace("/", "");\r
+ response.sendRedirect(targetPath);\r
+\r
+ // response.getOutputStream().write("doget".getBytes());\r
}\r
\r
@Override\r
- public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {\r
- resp.getOutputStream().write("doget".getBytes());\r
+ public void init(ServletConfig config) throws ServletException {\r
+ super.init(config);\r
}\r
\r
}\r
--- /dev/null
+package user.jobengine.zk.model;\r
+\r
+import java.util.Map;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.annotation.AfterCompose;\r
+import org.zkoss.bind.annotation.ContextParam;\r
+import org.zkoss.bind.annotation.ContextType;\r
+import org.zkoss.zk.ui.Component;\r
+import org.zkoss.zk.ui.Executions;\r
+import org.zkoss.zk.ui.select.Selectors;\r
+\r
+import user.commons.ListUtils;\r
+\r
+public class IndexModel extends BaseModel {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private String page;\r
+\r
+ @AfterCompose\r
+ public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
+ Selectors.wireComponents(view, this, false);\r
+ Selectors.wireEventListeners(view, this);\r
+\r
+ Map<String, Object> pathMap = ListUtils.asMap("jobs", "joblist");\r
+ String parameter = Executions.getCurrent().getParameter("action");\r
+ String action = (String) pathMap.get(parameter);\r
+ if ("null".equals(parameter) || action == null) {\r
+ setPage("/pages/searchitems.zul");\r
+ } else {\r
+ setPage(String.format("/pages/%s.zul", action));\r
+ }\r
+ }\r
+\r
+ public String getPage() {\r
+ return page;\r
+ }\r
+\r
+ public void setPage(String page) {\r
+ this.page = page;\r
+ }\r
+\r
+}
\ No newline at end of file
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
\r
private static final Logger logger = LogManager.getLogger();\r
private static final String PAGES_RETRIEVEBATCHSELECTOR_ZUL = "/pages/retrievebatchselector.zul";\r
private String basketMenuLabel = "(0)";\r
-\r
- @Wire\r
- Include includeContent;\r
private List<ArchivedMedia> basketItems;\r
\r
@Wire\r