git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Tue, 22 May 2018 10:27:56 +0000 (10:27 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Tue, 22 May 2018 10:27:56 +0000 (10:27 +0000)
24 files changed:
client/Maestro/Configuration/-configuration-studio.json [moved from client/Maestro/Configuration/configuration-studio.json with 100% similarity]
client/Maestro/Configuration/configuration-grafika.json
client/Maestro/FolderScanner.cs [deleted file]
client/Maestro/Maestro.csproj
client/Maestro/MaestroForm.Designer.cs
client/Maestro/MaestroForm.Source.cs
client/Maestro/MaestroForm.SourceFolders.cs [new file with mode: 0644]
client/MaestroShared/Controls/DoubleClickTreeView.cs
server/-configuration/run-mediacube-server-bsh.launch
server/user.jobengine.executors/src/user/jobengine/server/steps/CreateMissingLowresStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeFFAStranStep.java
server/user.jobengine.osgi.commons/src/user/commons/FFAStransAPI.java
server/user.jobengine.osgi.commons/src/user/commons/mediatool/MediaInfo.java
server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDispatcher.java
server/user.jobengine.osgi.server/WEB-INF/web.xml
server/user.jobengine.osgi.server/foo.jsp [new file with mode: 0644]
server/user.jobengine.osgi.server/index.jsp
server/user.jobengine.osgi.server/pages/index.zul
server/user.jobengine.osgi.server/pages/joblist.zul
server/user.jobengine.osgi.server/src/user/jobengine/server/JobScheduler.java [deleted file]
server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/ScheduledJob.java
server/user.jobengine.osgi.server/src/user/jobengine/servlet/TestServlet.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/IndexModel.java [new file with mode: 0644]
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MenuModel.java

index 59127046fdd3912d92247a49eb23e60e48d4d175..8cdf4a35270d9b77fc741204dbbf502db84ee8f5 100644 (file)
@@ -12,7 +12,7 @@
     "$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
diff --git a/client/Maestro/FolderScanner.cs b/client/Maestro/FolderScanner.cs
deleted file mode 100644 (file)
index 3d26060..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-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
index 619c9e4269fc93c8b6fe614d3ec390858c464504..3a46a4248335d8c891a137975c8e697175f1fe71 100644 (file)
     <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
index f3a3bec34acbd73f8f4f9ed52f54daa23b3a9b1a..48103fbc6c248691e99bab356344808d06d8246e 100644 (file)
@@ -218,8 +218,10 @@ namespace Maestro {
             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
index 885fcdf3a63026697d9d12c20ac4217ac99b5516..de12fd08ff500750c7c11d66df6e09c970c15a0c 100644 (file)
@@ -80,129 +80,6 @@ namespace Maestro {
             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
@@ -461,10 +338,6 @@ namespace Maestro {
             }\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
diff --git a/client/Maestro/MaestroForm.SourceFolders.cs b/client/Maestro/MaestroForm.SourceFolders.cs
new file mode 100644 (file)
index 0000000..d159a26
--- /dev/null
@@ -0,0 +1,203 @@
+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
index f736de401b87dd7acaac1bf05870ef0b62c065fe..c0cb5070c4cbf39f32cf29a8ef544e07f45f2491 100644 (file)
@@ -13,6 +13,10 @@ namespace MaestroShared.Controls {
             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
index c987230ed4645327884f32b63de4eec17e450403..ec4eca746e8f571724fd2e57cc23461f89fa9704 100644 (file)
@@ -19,7 +19,7 @@
 <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&#13;&#10;-Dorg.eclipse.epp.logging.aeri.skipReports=true &#13;&#10;-Declipse.ignoreApp=true &#13;&#10;-Dosgi.noShutdown=true&#13;&#10;-Djobengine.jobsteps.root=&quot;${workspace_loc}/user.jobengine.executors/config&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#13;&#10;-Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.db.user=db2admin&#13;&#10;-Djobengine.db.password=password&#13;&#10;-Djobengine.loglevel=INFO&#13;&#10;-Dlog4j.configurationFile=&quot;${workspace_loc}/-configuration/log4j2.xml&quot;&#13;&#10;-Djobengine.jobsteps.alternate.root=&quot;${workspace_loc}/user.jobengine.executors/bin/&quot;&#13;&#10;-Djetty.home=&quot;${workspace_loc:}/-configuration/jetty&quot;&#13;&#10;-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&#13;&#10;-Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty&#13;&#10;-Djava.io.tmpdir=c:\temp\jetty&#13;&#10;-Djobengine.octopus.api.address=http://10.10.1.11/api/v1&#13;&#10;-Djobengine.octopus.api.user=mam&#13;&#10;-Djobengine.octopus.api.password=napocska&#13;&#10;-Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.nosql.db.user=db2admin&#13;&#10;-Djobengine.nosql.db.password=password&#13;&#10;-Djobengine.nosql.db.schema=test&#13;&#10;-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl&#13;&#10;-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;-Dnexio.host=10.10.1.55&#13;&#10;-Dnexio.disable=false&#13;&#10;-Djobengine.octopus.rundowns.name=test_rundowns&#13;&#10;-Djobengine.octopus.storyfolders.name=test_storyfolders&#13;&#10;-Djobengine.octopus.stories.name=test_stories&#13;&#10;-Dmediacube.auth.location=&quot;${workspace_loc}/-configuration/mediacube-auth.properties&quot;"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory&#13;&#10;-Dorg.eclipse.epp.logging.aeri.skipReports=true &#13;&#10;-Declipse.ignoreApp=true &#13;&#10;-Dosgi.noShutdown=true&#13;&#10;-Djobengine.jobsteps.root=&quot;${workspace_loc}/user.jobengine.executors/config&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#13;&#10;-Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.db.user=db2admin&#13;&#10;-Djobengine.db.password=password&#13;&#10;-Djobengine.loglevel=INFO&#13;&#10;-Dlog4j.configurationFile=&quot;${workspace_loc}/-configuration/log4j2.xml&quot;&#13;&#10;-Djobengine.jobsteps.alternate.root=&quot;${workspace_loc}/user.jobengine.executors/bin/&quot;&#13;&#10;-Djetty.home=&quot;${workspace_loc:}/-configuration/jetty&quot;&#13;&#10;-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&#13;&#10;-Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty&#13;&#10;-Djava.io.tmpdir=c:\temp\jetty&#13;&#10;-Djobengine.octopus.api.address=http://10.10.1.11/api/v1&#13;&#10;-Djobengine.octopus.api.user=mam&#13;&#10;-Djobengine.octopus.api.password=napocska&#13;&#10;-Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.nosql.db.user=db2admin&#13;&#10;-Djobengine.nosql.db.password=password&#13;&#10;-Djobengine.nosql.db.schema=test&#13;&#10;-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl&#13;&#10;-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;-Dnexio.host=10.10.1.55&#13;&#10;-Dnexio.disable=true&#13;&#10;-Djobengine.octopus.rundowns.name=test_rundowns&#13;&#10;-Djobengine.octopus.storyfolders.name=test_storyfolders&#13;&#10;-Djobengine.octopus.stories.name=test_stories&#13;&#10;-Dmediacube.auth.location=&quot;${workspace_loc}/-configuration/mediacube-auth.properties&quot;"/>\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
index d1092debb9761f4a1433aa686e4cc0c51ed1d029..76abc690f901da05afe59c864c088d94cc4fe153 100644 (file)
@@ -7,6 +7,12 @@ import org.apache.logging.log4j.LogManager;
 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
@@ -23,15 +29,28 @@ public class CreateMissingLowresStep extends JobStep {
                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
index 3be025a2d1805e9330f02947b9aa6328b9427bff..4a95df9d879ee133fdc7075811b14d32c2e6b50d 100644 (file)
@@ -85,7 +85,7 @@ public class TranscodeFFAStranStep extends JobStep {
                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
@@ -101,9 +101,9 @@ public class TranscodeFFAStranStep extends JobStep {
                                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
index 37ec202b91a955e6c6076a565a78b4e2ed6e594c..55c4df673ed91972718fd18dfc82edcb6093a029 100644 (file)
@@ -7,6 +7,8 @@ import javax.ws.rs.core.MediaType;
 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
@@ -46,12 +48,9 @@ public class FFAStransAPI implements IFFAStransAPI {
        //              }\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
@@ -94,9 +93,12 @@ public class FFAStransAPI implements IFFAStransAPI {
                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
@@ -109,7 +111,7 @@ public class FFAStransAPI implements IFFAStransAPI {
                        }\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
@@ -183,7 +185,6 @@ public class FFAStransAPI implements IFFAStransAPI {
 \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
@@ -199,7 +200,7 @@ public class FFAStransAPI implements IFFAStransAPI {
                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
index ed7b3ab0591f971a5951cb5760f955512091ef94..033300b8ec5949059863be891777863747291e61 100644 (file)
@@ -3,16 +3,17 @@ package user.commons.mediatool;
 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
@@ -25,32 +26,35 @@ public class MediaInfo {
 \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
index 4fffa70e580f323fe9e052687d2bfd9d5f44b260..774bdee71a1db52cdcf94565aa501185ab0cd28b 100644 (file)
@@ -216,24 +216,6 @@ public class NexioDispatcher implements ClipEventListener {
                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
@@ -245,6 +227,29 @@ public class NexioDispatcher implements ClipEventListener {
                        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
@@ -358,57 +363,37 @@ public class NexioDispatcher implements ClipEventListener {
        }\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
index e34f10d5cf83ba185d91eec19dbae4b848f3e5de..992b6297df1616f84801f5bab5c278ab9499055e 100644 (file)
                <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
diff --git a/server/user.jobengine.osgi.server/foo.jsp b/server/user.jobengine.osgi.server/foo.jsp
new file mode 100644 (file)
index 0000000..71d31ad
--- /dev/null
@@ -0,0 +1,5 @@
+<%@ 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
index de97bff59f5136c438fdf9e7f72bb66966ce0a1a..3fd615c76146bc850b65d16e48fa271c9bd9ca5c 100644 (file)
@@ -1,5 +1,6 @@
 <%@ 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
index 089654fbabc1aa5c751e8f0029233527c6579fa4..697ac54cab6d9164856a153c68993cbd96180a91 100644 (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
@@ -85,7 +86,7 @@
                                </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
index 107351b7b35b4add874eac77430846e51c81411f..22d7e5307e4ea8dd7d13789f072ab4357d68c5aa 100644 (file)
@@ -3,7 +3,7 @@
 <?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
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobScheduler.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobScheduler.java
deleted file mode 100644 (file)
index 1dae4fb..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-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();
-       }
-
-}
index fcbb31ccce9ebc8eb60656e3bd87d4841f4c146d..aa73c258cc45e9dc760f1bdc5f680b51dfeec87f 100644 (file)
@@ -49,7 +49,7 @@ public class ScheduledJob extends NativeJob { //implements InterruptableJob{
                        try {\r
                                realJob.doJob();\r
                        } catch (Exception e) {\r
-                               logger.catching(e);\r
+                               logger.warn(e.getMessage());\r
                        }\r
                }\r
        }\r
@@ -121,6 +121,10 @@ public class ScheduledJob extends NativeJob { //implements InterruptableJob{
                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
@@ -130,8 +134,4 @@ public class ScheduledJob extends NativeJob { //implements InterruptableJob{
                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
index a055fb8ee773d22e1a71334f0daaac3c96846183..74ca823f5f41fac92ddd568d489e2a39426a93bd 100644 (file)
@@ -15,18 +15,19 @@ public class TestServlet extends HttpServlet {
        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
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/IndexModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/IndexModel.java
new file mode 100644 (file)
index 0000000..f33f6bd
--- /dev/null
@@ -0,0 +1,43 @@
+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
index d82eb2bd4cce09122b5760936da1c3a7d8091c74..c3c02606592330138733b9ab3709ecc65355f1d6 100644 (file)
@@ -17,7 +17,6 @@ import org.zkoss.zk.ui.Executions;
 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
@@ -28,9 +27,6 @@ public class MenuModel extends BaseModel {
        private static final Logger logger = LogManager.getLogger();\r
        private static final String PAGES_RETRIEVEBATCHSELECTOR_ZUL = "/pages/retrievebatchselector.zul";\r
        private String basketMenuLabel = "(0)";\r
-\r
-       @Wire\r
-       Include includeContent;\r
        private List<ArchivedMedia> basketItems;\r
 \r
        @Wire\r