git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 20 Nov 2017 13:51:32 +0000 (13:51 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Mon, 20 Nov 2017 13:51:32 +0000 (13:51 +0000)
27 files changed:
client/Maestro/Configuration/configuration-editor.json
client/Maestro/Configuration/configuration-nexio-ingest.json
client/Maestro/Configuration/configuration-nle.json
client/Maestro/Configuration/configuration-playout-ingest.json
client/Maestro/Configuration/configuration-playout.json
client/Maestro/Configuration/configuration-studio.json
client/Maestro/Configuration/configuration-sxs.json
client/Maestro/Installer/installforge-installer-project.ifp [moved from client/Maestro/Resources/installforge-installer-project.ifp with 96% similarity]
client/Maestro/Maestro.csproj
client/Maestro/MaestroForm.Designer.cs
client/Maestro/MaestroForm.Source.cs
client/Maestro/MaestroForm.Target.cs
client/Maestro/MaestroForm.cs
client/Maestro/MaestroForm.resx
client/Maestro/Program.cs
client/Maestro/Properties/AssemblyInfo.cs
client/Maestro/Sources/FileSystemSource.cs
client/Maestro/Splash.cs
client/MaestroShared/Configuration/ConfigurationInfo.cs
client/MaestroShared/Targets/ITargetProcessor.cs
client/MaestroShared/Targets/TargetProcessor.cs
server/-product/pom.xml
server/user.jobengine.executors/config/scheduledjobs.json
server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusAPI.java
server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner.java
server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java
server/user.jobengine.osgi.server/pages/joblist.zul

index 98f3a22b22b505d3cfe04e7ff781e97aa761b677..1ea79085d1c144227dfc9ce60fb677cf5a0f4558 100644 (file)
@@ -1,6 +1,6 @@
 {\r
   "title": "Szerkesztő",\r
-  "active": true,\r
+  "active": false,\r
   "startInTray": false,\r
   "enableCustomMetadataId": true,\r
   "player": {\r
   ],\r
   "targets": [\r
     {\r
-      "label": "Hír nyersanyag betöltés",\r
+      "label": "Stúdióba küldés",\r
       "processor": "FTPTargetProcessor",\r
-      "outputFormat": "%ID%-%SOURCENAME%",\r
+      "outputFormat": "%ID%",\r
       "tag": "Betöltés",\r
-      "subFolderFormat": "%IDROOT%",\r
+      "nexioServer": true,\r
+      "nexioFileExistsMessage": "A feltöltéshez új 'placeholder' generálása szükséges az Octopus rendszerben, az anyagon belül az ALT+1 billenytűkombináció segítségével.",\r
       "killDateDays": 7,\r
-      "saveArchiveMetadata": false,\r
+      "disableFileVersioning": true,\r
+      "agency": "MAESTRO-EDITOR",\r
+      "reference": [ "Octopus mappába küldés" ],\r
       "remote": {\r
-        "address": "ftp://10.10.1.100/OCTOPUS",\r
-        "userName": "mediacube",\r
-        "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+        "address": "ftp://10.10.1.55:2098",\r
+        "userName": "administrator",\r
+        "password": "+QtkeQdCTiOvZOgK/kUND4pO4/D+//r7ZIyluwMMdiqMEgO8iJErAG10ooWhPfiljQeXrdeyMzo7gWEZtcWpNSomGeDIbdMyQwtpqmMo1VEM3A27ZfzigY09YD46ECRh",\r
         "timeout": 1000\r
       }\r
     },\r
     {\r
-      "label": "Magazin nyersanyag betöltés",\r
+      "label": "Octopus mappába küldés",\r
       "processor": "FTPTargetProcessor",\r
       "outputFormat": "%ID%-%SOURCENAME%",\r
       "tag": "Betöltés",\r
       "killDateDays": 7,\r
       "saveArchiveMetadata": false,\r
       "remote": {\r
-        "address": "ftp://10.10.1.100/PLAYOUT_NLE",\r
+        "address": "ftp://10.10.1.100/OCTOPUS",\r
         "userName": "mediacube",\r
         "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
         "timeout": 1000\r
       }\r
     },\r
     {\r
-      "label": "Stúdióba küldés",\r
+      "label": "Traffic mappába küldés",\r
       "processor": "FTPTargetProcessor",\r
-      "outputFormat": "%ID%",\r
+      "outputFormat": "%ID%-%SOURCENAME%",\r
       "tag": "Betöltés",\r
-      "nexioServer": true,\r
-      "nexioFileExistsMessage": "A feltöltéshez új 'placeholder' generálása szükséges az Octopus rendszerben, az anyagon belül az ALT+1 billenytűkombináció segítségével.",\r
+      "subFolderFormat": "%IDROOT%",\r
       "killDateDays": 7,\r
-      "disableFileVersioning": true,\r
-      "agency": "MAESTRO-EDITOR",\r
-      "reference": "Hír nyersanyag betöltés",\r
+      "saveArchiveMetadata": false,\r
       "remote": {\r
-        "address": "ftp://10.10.1.55:2098",\r
-        "userName": "administrator",\r
-        "password": "+QtkeQdCTiOvZOgK/kUND4pO4/D+//r7ZIyluwMMdiqMEgO8iJErAG10ooWhPfiljQeXrdeyMzo7gWEZtcWpNSomGeDIbdMyQwtpqmMo1VEM3A27ZfzigY09YD46ECRh",\r
+        "address": "ftp://10.10.1.100/PLAYOUT_NLE",\r
+        "userName": "mediacube",\r
+        "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
         "timeout": 1000\r
       }\r
     },\r
index 17c6143e57829f9f4fea4ced95a300c95d593197..829e0542082fbb7e0b14e3c8d9c47ca12b74d1fe 100644 (file)
     "$type": "UNCSource",\r
     "filter": "avi,wav,mxf",\r
     "local": {\r
-      "address": "file://c:/x"\r
+      "address": "file://10.10.1.100/BRAAVOS/READY",\r
+      "userName": "mediacube",\r
+      "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+      "timeout": 1000\r
+    },\r
+    "remote": {\r
+      "address": "ftp://10.10.1.100/READY",\r
+      "userName": "mediacube",\r
+      "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+      "timeout": 1000\r
     }\r
   },\r
   "metadatas": [\r
     }\r
   ],\r
   "targets": [\r
+    {\r
+      "label": "Octopus mappába küldés",\r
+      "processor": "FTPTargetProcessor",\r
+      "outputFormat": "%ID%-%SOURCENAME%",\r
+      "tag": "Betöltés",\r
+      "subFolderFormat": "%IDROOT%",\r
+      "killDateDays": 7,\r
+      "saveArchiveMetadata": false,\r
+      "remote": {\r
+        "address": "ftp://10.10.1.100/OCTOPUS",\r
+        "userName": "mediacube",\r
+        "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+        "timeout": 1000\r
+      }\r
+    },\r
+    {\r
+      "label": "Traffic mappába küldés",\r
+      "processor": "FTPTargetProcessor",\r
+      "outputFormat": "%ID%-%SOURCENAME%",\r
+      "tag": "Betöltés",\r
+      "subFolderFormat": "%IDROOT%",\r
+      "killDateDays": 7,\r
+      "saveArchiveMetadata": false,\r
+      "remote": {\r
+        "address": "ftp://10.10.1.100/PLAYOUT_NLE",\r
+        "userName": "mediacube",\r
+        "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+        "timeout": 1000\r
+      }\r
+    },\r
     {\r
       "label": "Stúdióba küldés",\r
       "processor": "FTPTargetProcessor",\r
       "outputFormat": "%ID%",\r
       "tag": "Betöltés",\r
       "nexioServer": true,\r
+      "nexioFileExistsMessage": "A feltöltéshez új 'placeholder' generálása szükséges az Octopus rendszerben, az anyagon belül az ALT+1 billenytűkombináció segítségével.",\r
       "killDateDays": 7,\r
       "disableFileVersioning": true,\r
-      "agency": "HÍRADÓ TEST",\r
+      "agency": "MAESTRO-EDITOR",\r
+      "reference": [ "Octopus mappába küldés" ],\r
       "remote": {\r
         "address": "ftp://10.10.1.55:2098",\r
         "userName": "administrator",\r
         "password": "+QtkeQdCTiOvZOgK/kUND4pO4/D+//r7ZIyluwMMdiqMEgO8iJErAG10ooWhPfiljQeXrdeyMzo7gWEZtcWpNSomGeDIbdMyQwtpqmMo1VEM3A27ZfzigY09YD46ECRh",\r
         "timeout": 1000\r
       }\r
+    },\r
+    {\r
+      "label": "Lebonyba küldés",\r
+      "processor": "FTPTargetProcessor",\r
+      "outputFormat": "%ID%",\r
+      "tag": "Betöltés",\r
+      "killDateDays": 7,\r
+      "remote": {\r
+        "address": "ftp://10.10.1.100/PLAYOUT_CHECK",\r
+        "userName": "mediacube",\r
+        "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+        "timeout": 1000\r
+      }\r
+    },\r
+    {\r
+      "label": "Archiválás",\r
+      "processor": "FTPTargetProcessor",\r
+      "outputFormat": "%ID%",\r
+      "tag": "Archiválás",\r
+      "saveArchiveMetadata": true,\r
+      "remote": {\r
+        "address": "ftp://10.10.1.100/ARCHIVE",\r
+        "userName": "mediacube",\r
+        "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+        "timeout": 1000\r
+      }\r
     }\r
   ]\r
 }\r
index 3ec60cf9d3ae22c69a791f6602be159e3d929616..78e56c0cb1e30dac4bc58d3e7def86bae34e4042 100644 (file)
@@ -1,6 +1,6 @@
 {\r
   "title": "NLE",\r
-  "active": false,\r
+  "active": true,\r
   "startInTray": false,\r
   "enableCustomMetadataId": true,\r
   "player": {\r
@@ -11,6 +11,7 @@
   "source": {\r
     "$type": "UNCSource",\r
     "filter": "avi,wav,mxf",\r
+    "foldersAutoExpand": true,\r
     "local": {\r
       "address": "file://c:/x"\r
     }\r
   ],\r
   "targets": [\r
     {\r
-      "label": "Hír nyersanyag betöltés",\r
+      "label": "Stúdióba küldés",\r
+      "processor": "FTPTargetProcessor",\r
+      "outputFormat": "%ID%",\r
+      "tag": "Betöltés",\r
+      "nexioServer": true,\r
+      "nexioFileExistsMessage": "A feltöltéshez új 'placeholder' generálása szükséges az Octopus rendszerben, az anyagon belül az ALT+1 billenytűkombináció segítségével.",\r
+      "killDateDays": 7,\r
+      "disableFileVersioning": true,\r
+      "agency": "MAESTRO-NLE",\r
+      "reference": [ "Octopus mappába küldés", "Megtekintőbe küldés" ],\r
+      "remote": {\r
+        "address": "ftp://10.10.1.55:2098",\r
+        "userName": "administrator",\r
+        "password": "+QtkeQdCTiOvZOgK/kUND4pO4/D+//r7ZIyluwMMdiqMEgO8iJErAG10ooWhPfiljQeXrdeyMzo7gWEZtcWpNSomGeDIbdMyQwtpqmMo1VEM3A27ZfzigY09YD46ECRh",\r
+        "timeout": 1000\r
+      }\r
+    },\r
+    {\r
+      "label": "Octopus mappába küldés",\r
       "processor": "FTPTargetProcessor",\r
       "outputFormat": "%ID%-%SOURCENAME%",\r
       "tag": "Betöltés",\r
@@ -57,7 +76,7 @@
       }\r
     },\r
     {\r
-      "label": "Magazin nyersanyag betöltés",\r
+      "label": "Megtekintőbe küldés",\r
       "processor": "FTPTargetProcessor",\r
       "outputFormat": "%ID%-%SOURCENAME%",\r
       "tag": "Betöltés",\r
       "killDateDays": 7,\r
       "saveArchiveMetadata": false,\r
       "remote": {\r
-        "address": "ftp://10.10.1.100/PLAYOUT_NLE",\r
+        "address": "ftp://10.10.1.100/OCTOPUS",\r
         "userName": "mediacube",\r
         "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
         "timeout": 1000\r
       }\r
     },\r
     {\r
-      "label": "Stúdióba küldés",\r
+      "label": "Traffic mappába küldés",\r
       "processor": "FTPTargetProcessor",\r
-      "outputFormat": "%ID%",\r
+      "outputFormat": "%ID%-%SOURCENAME%",\r
       "tag": "Betöltés",\r
-      "nexioServer": true,\r
+      "subFolderFormat": "%IDROOT%",\r
       "killDateDays": 7,\r
-      "agency": "MAESTRO-NLE",\r
-      "reference": "Hír nyersanyag betöltés",\r
+      "saveArchiveMetadata": false,\r
       "remote": {\r
-        "address": "ftp://10.10.1.56:2098",\r
-        "userName": "administrator",\r
-        "password": "+QtkeQdCTiOvZOgK/kUND4pO4/D+//r7ZIyluwMMdiqMEgO8iJErAG10ooWhPfiljQeXrdeyMzo7gWEZtcWpNSomGeDIbdMyQwtpqmMo1VEM3A27ZfzigY09YD46ECRh",\r
+        "address": "ftp://10.10.1.100/PLAYOUT_NLE",\r
+        "userName": "mediacube",\r
+        "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
         "timeout": 1000\r
       }\r
     },\r
index ddd13040318565787876b4f4db0d6b43d9a535d9..aa818ef78d9a56e12fce43f666f94ee12d06375c 100644 (file)
@@ -1,6 +1,6 @@
 {\r
   "title": "Lebony betöltő",\r
-  "active": false,\r
+  "active": true,\r
   "startInTray": false,\r
   "enableCustomMetadataId": true,\r
   "player": {\r
index 6834ae474c291bd0fe88c1559d934a4c63b387c3..cf4d62eddec1274150279ee9373ad80b90c8e09e 100644 (file)
@@ -55,7 +55,7 @@
       "outputFormat": "%ID%",\r
       "saveSegments": true,\r
       "tag": "Adáskész",\r
-      "reference": "Archiválás",\r
+      "reference": [ "Archiválás" ],\r
       "remote": {\r
         "address": "ftp://10.10.1.100/PLAYOUT/IceGateway",\r
         "userName": "mediacube",\r
index a3db7e9421fe30875103e5e7f5970f2fc9fc264f..a159bf7bc3039347744666edace2df2e2f702cfb 100644 (file)
@@ -1,6 +1,6 @@
 {\r
   "title": "Stúdió",\r
-  "active": false,\r
+  "active": true,\r
   "startInTray": false,\r
   "enableCustomMetadataId": true,\r
   "filter": "avi",\r
index 67622e77455744042aedc985c3b8f249b0cb65bb..c8fcc10ad784f0e52ff142341ac381f60f48d704 100644 (file)
@@ -42,7 +42,7 @@
   ],\r
   "targets": [\r
     {\r
-      "label": "Hír nyersanyag betöltés",\r
+      "label": "Octopus mappába küldés",\r
       "processor": "FTPTargetProcessor",\r
       "outputFormat": "%ID%-%SOURCENAME%",\r
       "tag": "Betöltés",\r
@@ -57,7 +57,7 @@
       }\r
     },\r
     {\r
-      "label": "Magazin nyersanyag betöltés",\r
+      "label": "Traffic mappába küldés",\r
       "processor": "FTPTargetProcessor",\r
       "outputFormat": "%ID%-%SOURCENAME%",\r
       "tag": "Betöltés",\r
similarity index 96%
rename from client/Maestro/Resources/installforge-installer-project.ifp
rename to client/Maestro/Installer/installforge-installer-project.ifp
index 22a3b598e5d6f69a31cf34bdc85ce5bcc761ff7a..d44b6c2a0793b2d466015e6ce3fbf168349828eb 100644 (file)
Binary files a/client/Maestro/Resources/installforge-installer-project.ifp and b/client/Maestro/Installer/installforge-installer-project.ifp differ
index 2d6834b4dcabfa7c31883b477d7b850bd2f0e280..d1554c333b7db380e3c6b178a0590a08d11e9a3f 100644 (file)
     </ProjectReference>\r
   </ItemGroup>\r
   <ItemGroup>\r
-    <None Include="Resources\installforge-installer-project.ifp" />\r
+    <None Include="Installer\installforge-installer-project.ifp" />\r
     <None Include="Resources\mediacube_logo_small.ico" />\r
     <None Include="maestro.ico" />\r
     <None Include="Resources\ic_clear_black_24dp_1x.png" />\r
index 69730c92219c019a23b7dbf36b5b7c51cc7240b8..69214110151f97b6942edb5cd29351f9d82be249 100644 (file)
@@ -202,6 +202,7 @@ namespace Maestro {
             this.treeFolders.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
             this.treeFolders.Dock = System.Windows.Forms.DockStyle.Bottom;\r
             this.treeFolders.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.treeFolders.HotTracking = true;\r
             this.treeFolders.ImageIndex = 0;\r
             this.treeFolders.ImageList = this.ilFolders;\r
             this.treeFolders.Location = new System.Drawing.Point(10, 206);\r
@@ -210,6 +211,8 @@ namespace Maestro {
             this.treeFolders.Size = new System.Drawing.Size(330, 161);\r
             this.treeFolders.TabIndex = 18;\r
             this.treeFolders.Visible = false;\r
+            this.treeFolders.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.OnBeforeExpandFolder);\r
+            this.treeFolders.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.OnAfterSelectFolder);\r
             // \r
             // ilFolders\r
             // \r
@@ -300,6 +303,7 @@ namespace Maestro {
             // btnShowFolders\r
             // \r
             this.btnShowFolders.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\r
+            this.btnShowFolders.Enabled = false;\r
             this.btnShowFolders.Image = global::Maestro.Properties.Resources.ic_folder_open_black_24dp_1x;\r
             this.btnShowFolders.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
             this.btnShowFolders.ImageTransparentColor = System.Drawing.Color.GreenYellow;\r
index a13d6365a4bc6746fed1dc114df334845820b4f5..a11fbbb14e5b813ec17568e67e96ba7ad3d258da 100644 (file)
@@ -1,7 +1,6 @@
 using DxPlay;\r
 using Maestro.Metadata;\r
 using Maestro.Sources;\r
-using MaestroShared.Commons;\r
 using MaestroShared.Configuration;\r
 using MaestroShared.Metadata;\r
 using MaestroShared.Resources;\r
@@ -11,6 +10,7 @@ using System.Diagnostics;
 using System.Drawing;\r
 using System.IO;\r
 using System.Linq;\r
+using System.Text;\r
 using System.Windows.Forms;\r
 \r
 namespace Maestro {\r
@@ -20,7 +20,7 @@ namespace Maestro {
     public partial class MaestroForm {\r
         private ISource source;\r
         private SourceInfo selectedSource;\r
-        private List<DataGridViewRow> selectedSourceRows = new List<DataGridViewRow>();\r
+        private List<ISourceItem> selectedSourceItems = new List<ISourceItem>();\r
 \r
         public SourceInfo SelectedSource {\r
             get {\r
@@ -29,7 +29,7 @@ namespace Maestro {
             set {\r
                 selectedSource = value;\r
                 if (selectedSource == null)\r
-                    selectedSourceRows.Clear();\r
+                    selectedSourceItems.Clear();\r
                 textSelectedSource.Text = selectedSource?.Name;\r
                 archiveMetadata = null;\r
                 segments = null;\r
@@ -45,8 +45,8 @@ namespace Maestro {
             Uri localAddress = Configuration?.Source?.Local?.Address;\r
             Uri remoteAddress = Configuration?.Source?.Remote?.Address;\r
             if (String.IsNullOrEmpty(remoteAddress?.ToString())) {\r
-                if (!String.IsNullOrEmpty(localAddress?.ToString()))\r
-                    formTooltip.SetToolTip(groupSource, localAddress?.ToString());\r
+                if (!String.IsNullOrEmpty(localAddress?.LocalPath))\r
+                    formTooltip.SetToolTip(groupSource, localAddress.LocalPath);\r
             } else\r
                 formTooltip.SetToolTip(groupSource, remoteAddress?.ToString());\r
 \r
@@ -88,9 +88,9 @@ namespace Maestro {
             foreach (var folder in folders) {\r
                 TreeNode folderNode = rootNode.Nodes.Add(GetLastSegment(folder));\r
                 folderNode.Nodes.Add("..");\r
-                folderNode.ImageIndex = 0;\r
-                \r
             }\r
+            if ((Configuration.Source as UNCSource).FoldersAutoExpand)\r
+                treeFolders.ExpandAll();\r
         }\r
 \r
         private void HideFolders() {\r
@@ -99,6 +99,47 @@ namespace Maestro {
             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 OnBeforeExpandFolder(object sender, TreeViewCancelEventArgs e) {\r
+            if (e.Node.Nodes.Count != 1 || !"..".Equals(e.Node.Nodes[0].Text))\r
+                return;\r
+            e.Node.Nodes.Clear();\r
+            Uri address = new Uri(Path.Combine(Configuration.Source.Local.Address.LocalPath, GetPath(e.Node)));\r
+            string[] folders = Directory.GetDirectories(address.LocalPath);\r
+            foreach (var folder in folders) {\r
+                TreeNode folderNode = e.Node.Nodes.Add(GetLastSegment(folder));\r
+                folderNode.Nodes.Add("..");\r
+            }\r
+        }\r
+\r
+        private void OnAfterSelectFolder(object sender, TreeViewEventArgs e) {\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 (e.Node.Level == 0)\r
+                address = Configuration.Source.Local.Address;\r
+            else\r
+                address = new Uri(Path.Combine(Configuration.Source.Local.Address.LocalPath, GetPath(e.Node)));\r
+            if (!String.IsNullOrEmpty(address.LocalPath))\r
+                formTooltip.SetToolTip(groupSource, address.LocalPath);\r
+            source.Reset(address.LocalPath);\r
+            btnShowFolders.Checked = false;\r
+            HideFolders();\r
+        }\r
+\r
         private void OnShowFolders(object sender, EventArgs e) {\r
             if (btnShowFolders.CheckState == CheckState.Checked) {\r
                 HideFolders();\r
@@ -135,7 +176,6 @@ namespace Maestro {
             if (selectedrows == null)\r
                 return;\r
             if (e.ColumnIndex == 0) {\r
-\r
                 UpdateCheckStates(selectedrows);\r
                 return;\r
             }\r
@@ -166,37 +206,63 @@ namespace Maestro {
         }\r
 \r
         private void UpdateCheckStates(DataGridViewSelectedRowCollection selectedRows) {\r
-            IEnumerable<DataGridViewRow> currentSelectedRows = selectedRows.Cast<DataGridViewRow>();\r
-            if (currentSelectedRows == null)\r
+            IEnumerable<ISourceItem> currentSelectedItems = selectedRows.Cast<DataGridViewRow>().Select(r => r.DataBoundItem as ISourceItem);\r
+            if (currentSelectedItems == null)\r
                 return;\r
-            int checkedCount = currentSelectedRows.Count(r => AsISourceItem(r).IsChecked);\r
-            foreach (DataGridViewRow row in selectedRows) {\r
-                ISourceItem item = AsISourceItem(row);\r
+            int checkedCount = currentSelectedItems.Count(r => r.IsChecked);\r
+            foreach (ISourceItem item in currentSelectedItems) {\r
                 if (selectedRows.Count == 1)\r
                     item.IsChecked = !item.IsChecked;\r
                 else\r
                     item.IsChecked = checkedCount == selectedRows.Count ? false : true;\r
 \r
                 if (item.IsChecked) {\r
-                    if (!selectedSourceRows.Contains(row)) {\r
-                        selectedSourceRows.Add(row);\r
-                        Debug.WriteLine("Added " + AsISourceItem(row).Name);\r
+                    if (!selectedSourceItems.Contains(item)) {\r
+                        selectedSourceItems.Add(item);\r
+                        Debug.WriteLine("Added " + item.Name);\r
                     }\r
                 } else {\r
-                    if (selectedSourceRows.Contains(row)) {\r
-                        selectedSourceRows.Remove(row);\r
-                        Debug.WriteLine("Removed " + AsISourceItem(row).Name);\r
+                    if (selectedSourceItems.Contains(item)) {\r
+                        selectedSourceItems.Remove(item);\r
+                        Debug.WriteLine("Removed " + item.Name);\r
                     }\r
                 }\r
             }\r
             SetSelectedSource();\r
         }\r
 \r
+        //private void UpdateCheckStates_(DataGridViewSelectedRowCollection selectedRows) {\r
+        //    IEnumerable<DataGridViewRow> currentSelectedRows = selectedRows.Cast<DataGridViewRow>();\r
+        //    if (currentSelectedRows == null)\r
+        //        return;\r
+        //    int checkedCount = currentSelectedRows.Count(r => AsISourceItem(r).IsChecked);\r
+        //    foreach (DataGridViewRow row in selectedRows) {\r
+        //        ISourceItem item = AsISourceItem(row);\r
+        //        if (selectedRows.Count == 1)\r
+        //            item.IsChecked = !item.IsChecked;\r
+        //        else\r
+        //            item.IsChecked = checkedCount == selectedRows.Count ? false : true;\r
+\r
+        //        if (item.IsChecked) {\r
+        //            if (!selectedSourceRows.Contains(row)) {\r
+        //                selectedSourceRows.Add(row);\r
+        //                Debug.WriteLine("Added " + AsISourceItem(row).Name);\r
+        //            }\r
+        //        } else {\r
+        //            if (selectedSourceRows.Contains(row)) {\r
+        //                selectedSourceRows.Remove(row);\r
+        //                Debug.WriteLine("Removed " + AsISourceItem(row).Name);\r
+        //            }\r
+        //        }\r
+        //    }\r
+        //    SetSelectedSource();\r
+        //}\r
+\r
         private void SetSelectedSource() {\r
             string selectionPrefix = null;\r
             string selectedNames = String.Empty;\r
-            foreach (DataGridViewRow actual in selectedSourceRows) {\r
-                string name = (actual.DataBoundItem as ISourceItem)?.Name;\r
+            foreach (ISourceItem actual in selectedSourceItems) {\r
+                string name = actual.Name;\r
                 if (String.IsNullOrEmpty(name))\r
                     continue;\r
                 selectedNames += name + " ";\r
@@ -226,9 +292,9 @@ namespace Maestro {
         private FileInfo GetSelectedSourceFileInfo() {\r
             if (Configuration.Source.GetType() == typeof(NEXIOSource))\r
                 return null;\r
-            if (selectedSourceRows.Count != 1)\r
+            if (selectedSourceItems.Count != 1)\r
                 return null;\r
-            string name = (selectedSourceRows[0].DataBoundItem as ISourceItem).Name;\r
+            string name = selectedSourceItems[0].Name;\r
             Uri inputUri = new Uri(String.Format("{0}/{1}", Configuration.Source.Local.Address.LocalPath, name));\r
             return new FileInfo(inputUri.LocalPath);\r
         }\r
index cad5a5e3e99ee41c9c1c354f30261257d168ba04..8d1a646ffa9a5bfac79150a0ad4786545c9b6b0d 100644 (file)
@@ -2,14 +2,13 @@
 using System;\r
 using System.Linq;\r
 using System.Windows.Forms;\r
-using Maestro.Metadata;\r
 using System.Collections.Generic;\r
 using TrafficClient;\r
 using MaestroShared.Configuration;\r
 using MaestroShared.Metadata;\r
 using MaestroShared.Targets;\r
 using MaestroShared.Target;\r
-using System.Reflection;\r
+using System.Diagnostics;\r
 \r
 namespace Maestro {\r
 \r
@@ -51,6 +50,17 @@ namespace Maestro {
         private void OnChecked(CheckBox checkBox, Target target) {\r
             if (checkBox.Checked) {\r
                 List<ITargetProcessor> processors = CreateProcessors(target, checkBox);\r
+                foreach (ITargetProcessor processor in processors) {\r
+                    if (processor.Parameters.TargetConfig.Reference != null) {\r
+                        foreach (String reference in processor.Parameters.TargetConfig.Reference) {\r
+                            var key = currentProcessors.Keys.Where(c => c.Text.Equals(reference)).SingleOrDefault();\r
+                            var referencedProcessor = currentProcessors[key]?.Where(p => p.Input.Equals(processor.Input)).SingleOrDefault();\r
+                            if (referencedProcessor != null)\r
+                                processor.AddReference(referencedProcessor);\r
+                        }\r
+                    }\r
+                }\r
+\r
                 if (processors != null && processors.Count > 0) {\r
                     if (currentProcessors.ContainsKey(checkBox))\r
                         currentProcessors[checkBox].AddRange(processors);\r
@@ -66,8 +76,8 @@ namespace Maestro {
 \r
         private List<ITargetProcessor> CreateProcessors(Target target, CheckBox checkBox) {\r
             List<ITargetProcessor> result = null;\r
-            foreach (DataGridViewRow actualRow in selectedSourceRows) {\r
-                ISourceItem sourceItem = actualRow.DataBoundItem as ISourceItem;\r
+            foreach (ISourceItem sourceItem in selectedSourceItems) {\r
+                //ISourceItem sourceItem = actualRow.DataBoundItem as ISourceItem;\r
                 if (sourceItem == null)\r
                     continue;\r
                 if (!EnsureSegments(target)) {\r
@@ -85,7 +95,10 @@ namespace Maestro {
                 if (result == null)\r
                     result = new List<ITargetProcessor>();\r
                 result.Add(processor);\r
+\r
+                //var beforeProcessors = new Dictionary<CheckBox, List<ITargetProcessor>>(currentProcessors);\r
                 HandleCheckBoxReferences(target.Reference, true);\r
+                //var diff = beforeProcessors.Except(currentProcessors).Concat(currentProcessors.Except(beforeProcessors));\r
             }\r
             return result;\r
         }\r
@@ -158,17 +171,23 @@ namespace Maestro {
             };\r
         }\r
 \r
-        private void HandleCheckBoxReferences(string reference, bool check) {\r
-            if (String.IsNullOrEmpty(reference))\r
-                return;\r
+        private List<CheckBox> HandleCheckBoxReferences(string[] reference, bool check) {\r
+            if (reference == null || reference.Length == 0)\r
+                return null;\r
             var controlls = panelActions.Controls;\r
+            List<CheckBox> result = null;\r
             foreach (Control actual in controlls) {\r
-                if (actual is CheckBox actualCheckbox && actualCheckbox.Text.Equals(reference)) {\r
-                    if (check)\r
+                if (actual is CheckBox actualCheckbox && reference.Contains(actualCheckbox.Text)) {\r
+                    if (check) {\r
                         actualCheckbox.Checked = check;\r
+                        if (result == null)\r
+                            result = new List<CheckBox>();\r
+                        result.Add(actualCheckbox);\r
+                    }\r
                     actualCheckbox.Enabled = !check;\r
                 }\r
             }\r
+            return result;\r
         }\r
 \r
         private ISourceItem GetSourceItemFromBindingSource(string actual) {\r
@@ -204,11 +223,18 @@ namespace Maestro {
         }\r
 \r
         private void OnExecuteClick(object sender, EventArgs e) {\r
-            foreach (var element in currentProcessors) {\r
-                foreach (ITargetProcessor processor in element.Value) {\r
-                    jobs.Add(processor);\r
-                    jobsQueue.Enqueue(processor);\r
-                }\r
+            IEnumerable<CheckBox> keys = currentProcessors.Keys.OrderByDescending(k => (k.Tag as Target).NexioServer);\r
+            if (keys == null)\r
+                return;\r
+\r
+            foreach (var key in keys) {\r
+                List<ITargetProcessor> targetProcessors = currentProcessors[key];\r
+                if (targetProcessors == null)\r
+                    continue;\r
+                targetProcessors.ForEach(p => {\r
+                    jobs.Add(p);\r
+                    jobsQueue.Enqueue(p);\r
+                });\r
             }\r
 \r
             ClearSelectedProcessors();\r
index ff6c5b8b270dc1b27505e627dc6e06e7787bcf8f..860ec07c2c7d439a037f22ac84ebd8033dfd6ebb 100644 (file)
@@ -245,5 +245,6 @@ namespace Maestro {
                     break;\r
             }\r
         }\r
+\r
     }\r
 }\r
index c8aa6e9da814555ba80333d7561cd827dc6c47d3..cd7a57169e7d1ffc7213b68b12c686cdba847396 100644 (file)
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w\r
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\r
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACc\r
-        BwAAAk1TRnQBSQFMAwEBAAEYAQABGAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA\r
+        BwAAAk1TRnQBSQFMAwEBAAFAAQABQAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA\r
         AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA\r
         AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA\r
         AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm\r
index c82e22816b5e7bbaab644e6e8ac37f840244cf99..37e2f74f5e028f3a1182032e5173fa4848930da9 100644 (file)
@@ -14,7 +14,6 @@ using System.Reflection;
 using System.Runtime.InteropServices;\r
 using System.Security.AccessControl;\r
 using System.Security.Principal;\r
-using System.Text.RegularExpressions;\r
 using System.Threading;\r
 using System.Threading.Tasks;\r
 using System.Windows.Forms;\r
@@ -29,7 +28,8 @@ namespace Maestro {
         [STAThread]\r
         static void Main() {\r
             string appGuid = ((GuidAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), false).GetValue(0)).Value.ToString();\r
-            string mutexId = string.Format("Global\\{{{0}}}", appGuid);\r
+            string userName = WindowsIdentity.GetCurrent().Name;\r
+            string mutexId = string.Format("Global\\{0}-{1}", appGuid, userName.Replace('\\', '-'));\r
             bool createdNew;\r
             var allowEveryoneRule = new MutexAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), MutexRights.FullControl, AccessControlType.Allow);\r
             var securitySettings = new MutexSecurity();\r
@@ -257,17 +257,21 @@ namespace Maestro {
                 ContextMenu = new ContextMenu(menuItems.ToArray()),\r
                 Visible = true\r
             };\r
-            //trayIcon.Click += TrayIcon_Click;\r
+            trayIcon.Click += OnTrayIconClick;\r
         }\r
 \r
-        private void TrayIcon_Click(object sender, EventArgs e) {\r
-            MethodInfo mi = typeof(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance | BindingFlags.NonPublic);\r
-            try {\r
-                mi.Invoke(sender as NotifyIcon, null);\r
-            }\r
-            catch (Exception ex) { }\r
+        private void OnTrayIconClick(object sender, EventArgs e) {\r
+            ShowAllForms();\r
         }\r
 \r
+        //private void TrayIcon_Click(object sender, EventArgs e) {\r
+        //    MethodInfo mi = typeof(NotifyIcon).GetMethod("ShowContextMenu", BindingFlags.Instance | BindingFlags.NonPublic);\r
+        //    try {\r
+        //        mi.Invoke(sender as NotifyIcon, null);\r
+        //    }\r
+        //    catch (Exception ex) { }\r
+        //}\r
+\r
         private void ShowAllForms() {\r
             foreach (MeastroFormNotifyIcon form in forms) {\r
                 form.ShowForm();\r
index 99c27c598043b86bf250b0c1db97b0ab8fcefebb..8d42e911be060a6ea27a7ef55d3e8b83acde0024 100644 (file)
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // You can specify all the values or you can default the Build and Revision Numbers\r
 // by using the '*' as shown below:\r
 // [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("2.0.2.1")]\r
-[assembly: AssemblyFileVersion("2.0.2.1")]\r
+[assembly: AssemblyVersion("2.0.3.1")]\r
+[assembly: AssemblyFileVersion("2.0.3.1")]\r
index f635e17ba2669debe23a1bd8e100d7173237d40d..ec49526b80b1e676baafafa72b4b9227ef264e96 100644 (file)
@@ -131,6 +131,12 @@ namespace Maestro.Sources {
         }\r
 \r
         public void RemoveFilter() {\r
+            Reset(null);\r
+        }\r
+\r
+        public void Reset(string path) {\r
+            if (path != null)\r
+                this.path = path;\r
             Clear();\r
             cache = null;\r
             Shutdown();\r
index df785bd1cb06b0e547cd5ef1ec05a87555e8575b..f855cdf408d38a8ef70905c35a5d3c4e33e72cbf 100644 (file)
@@ -9,7 +9,7 @@ namespace Maestro {
             InitializeComponent();\r
             Version version = Assembly.GetEntryAssembly().GetName().Version;\r
             labelVersion.ForeColor = Color.White;\r
-            labelVersion.Text = String.Format("v{0}.{1}.{2}", version.Major, version.Minor, version.Build);\r
+            labelVersion.Text = String.Format("v{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Build, version.Revision);\r
         }\r
 \r
         private void splashTimer_Tick(object sender, EventArgs e) {\r
index f6d6135bfaffb57dc019c4ad808f6d7063db72b4..5f3cf2b056b545842afcd47679682b204298e3a8 100644 (file)
@@ -74,7 +74,7 @@ namespace MaestroShared.Configuration {
         public bool SendEmailOnSuccess { get; set; }\r
         public string SuccessEmailRecipient { get; set; }\r
         public string SuccessEmailPattern { get; set; }\r
-        public string Reference { get; set; }\r
+        public string[] Reference { get; set; }\r
         public bool NexioServer { get; set; }\r
         public string NexioFileExistsMessage { get; set; }\r
         public string Agency { get; set; }\r
@@ -96,6 +96,7 @@ namespace MaestroShared.Configuration {
     }\r
 \r
     public class UNCSource : Source {\r
+        public bool FoldersAutoExpand { get; set; }\r
     }\r
 \r
     public class NEXIOSource : Source {\r
index 977f726dce470e0d295d58e27b3feab0f207ab99..da99cf593561d3ef74a80537f1bac458b172bd43 100644 (file)
@@ -5,6 +5,7 @@ using System.Windows.Forms;
 \r
 namespace MaestroShared.Targets {\r
     public interface ITargetProcessor : INotifyPropertyChanged {\r
+        void AddReference(ITargetProcessor reference);\r
         TargetProcessorParameter Parameters { get; }\r
         DateTime Started { get; set; }\r
         DateTime Finished { get; set; }\r
index 19dc09e64e051d102333e459e83405ecd0e6f7bc..dbff9690cdd93403148f5c2d387007f00c5c7e67 100644 (file)
@@ -1,7 +1,9 @@
 using MaestroShared.Commons;\r
 using MaestroShared.Target;\r
 using System;\r
+using System.Collections.Generic;\r
 using System.ComponentModel;\r
+using System.Diagnostics;\r
 using System.Runtime.CompilerServices;\r
 using System.Windows.Forms;\r
 \r
@@ -25,6 +27,8 @@ namespace MaestroShared.Targets {
         private string label;\r
         private string killDatePath;\r
         protected Control parent;\r
+        private List<ITargetProcessor> references;\r
+\r
         public event PropertyChangedEventHandler PropertyChanged;\r
 \r
         public virtual void Initialize(Control parent, TargetProcessorParameter parameters) {\r
@@ -43,6 +47,19 @@ namespace MaestroShared.Targets {
         protected virtual void ExecuteCompleted() {\r
         }\r
 \r
+        public void AddReference(ITargetProcessor reference) {\r
+            if (references == null)\r
+                references = new List<ITargetProcessor>();\r
+            if (!references.Contains(reference)) {\r
+                Debug.WriteLine(String.Format("Adding {0} [{1}] to {2} [{3}]", reference.Parameters.TargetConfig.Label, reference.Input, Parameters.TargetConfig.Label, Input));\r
+                references.Add(reference);\r
+            }\r
+        }\r
+\r
+        private void RevokeReferences() {\r
+            references?.ForEach(i => i.Status = REVOKED);\r
+        }\r
+\r
         public TargetProcessorParameter Parameters { get; internal set; }\r
 \r
         public string Status {\r
@@ -53,6 +70,8 @@ namespace MaestroShared.Targets {
                 if (status != value) {\r
                     status = value;\r
                     NotifyPropertyChanged();\r
+                    if (Status == REVOKED || Status == ERROR)\r
+                        RevokeReferences();\r
                 }\r
             }\r
         }\r
index f02b54d071f57afbfa3e6d9abe783be1e25ca7a7..8904badb1debed016a62a52fc6a293e00debbaa7 100644 (file)
                                                                <argument>"synchronize remote"</argument>\r
                                                                <argument>"mkdir log"</argument>\r
                                                                <argument>"call chmod +x mediacube"</argument>\r
-                                                               <argument>"call pcs resource enable mediacube_script"</argument>\r
+<!--                                                           <argument>"call pcs resource enable mediacube_script"</argument> -->\r
 <!--                                                           <argument>"call chmod +x stop-mediacube.sh"</argument> -->\r
 <!--                                                           <argument>"call chmod +x start-mediacube.sh"</argument> -->\r
 <!--                                                           <argument>"call ./start-mediacube.sh"</argument> -->\r
index a460ac632720ebccc80f62857a8de6489ac27e22..f84835ab4a7db14e03dd253034d2f27d13cde786 100644 (file)
@@ -70,7 +70,7 @@
          "name" : "OCTOPUS adatok szinkronizálása",\r
       "template": "sync-octopus.xml",\r
       "executeimmediate": true,\r
-      "cronexpression": "0 0/1 * * * ?",\r
+      "cronexpression": "0/20 * * * * ?",\r
       "parameters": [\r
        {"name": "forceFull", "value": false, "type": "java.lang.Boolean"}\r
       ]\r
@@ -80,7 +80,7 @@
          "name" : "OCTOPUS adatok teljes szinkronizálása",\r
       "template": "sync-octopus.xml",\r
       "executeimmediate": false,\r
-      "cronexpression": "#0 0/1 * * * ?",\r
+      "cronexpression": "#0/20 * * * * ?",\r
       "parameters": [\r
        {"name": "forceFull", "value": true, "type": "java.lang.Boolean"}\r
       ]\r
index daa69089b35bd9afd9b71e634608ae5998c9888d..a6824a92744baec74900add450b04dceda35c6d0 100644 (file)
@@ -21,11 +21,11 @@ import user.commons.CalendarUtils;
 import user.commons.nosql.NoSQLUtils;\r
 \r
 public class OctopusAPI implements IOctopusAPI {\r
-       private static final String RUNDOWN = "rundown";\r
        private static final Logger logger = LogManager.getLogger();\r
        private static final String ID = "id";\r
        private static final String STORY_FOLDER = "story_folder";\r
        private static final String MOS_OBJECTS = "mosObjects";\r
+       private static final String RUNDOWN = "rundown";\r
        public static final String RUNDOWN_COLLECTION_NAME = "rundowns";\r
        public static final String STORY_COLLECTION_NAME = "stories";\r
        public static final String STORY_FOLDER_COLLECTION_NAME = "story_folders";\r
index 3ae3c16a3a6071ad6ff19c10632e9c29f49286ed..09ab483c13fc74e712a7ebb286389ad6d21140e1 100644 (file)
@@ -83,11 +83,11 @@ public class OctopusDataMiner implements Runnable {
        private static final String STARTING = "Starting";\r
        private static final String STORYID = "storyId";\r
 \r
-       public static final String RUNDOWN_COLLECTION_NAME = "rundowns";\r
-       public static final String STORY_COLLECTION_NAME = "stories";\r
-       public static final String STORY_FOLDER_COLLECTION_NAME = "story_folders";\r
-       public static final String TIME_COLLECTION_NAME = "time";\r
-       public static final String LASTUPDATE_TIME = "lastUpdateTime";\r
+       public static String RUNDOWN_COLLECTION_NAME = "rundowns";\r
+       public static String STORY_COLLECTION_NAME = "stories";\r
+       public static String STORY_FOLDER_COLLECTION_NAME = "story_folders";\r
+       public static String TIME_COLLECTION_NAME = "time";\r
+       public static String LASTUPDATE_TIME = "lastUpdateTime";\r
 \r
        private DB db;\r
        private ResteasyWebTarget webTarget;\r
@@ -100,6 +100,7 @@ public class OctopusDataMiner implements Runnable {
        private Map<Long, BasicDBList> storyStoryFolders;\r
        private Map<Long, BasicDBList> storedStoryRundowns;\r
        private Map<Long, BasicDBList> storedStoryStoryFolders;\r
+       private Map<Long, BasicDBList> storedStoryMosObjects;\r
 \r
        public OctopusDataMiner() {\r
                String jdbcUrl = System.getProperty("jobengine.nosql.db.url");\r
@@ -160,7 +161,7 @@ public class OctopusDataMiner implements Runnable {
 \r
        private void buildStoriesReferences() {\r
                DBCollection collection = db.getCollection(STORY_COLLECTION_NAME);\r
-               DBCursor cursor = collection.find(null, new BasicDBObject(ID, 1).append(REF_RUNDOWN, 1).append(REF_STORYFOLDER, 1));\r
+               DBCursor cursor = collection.find(null, new BasicDBObject(ID, 1).append(REF_RUNDOWN, 1).append(REF_STORYFOLDER, 1).append(MOS_OBJECTS, 1));\r
                //DBCursor find = collection.find(QueryBuilder.start(ID).greaterThan(0).get());\r
                try {\r
 \r
@@ -179,6 +180,13 @@ public class OctopusDataMiner implements Runnable {
                                                storedStoryStoryFolders = new HashMap<>();\r
                                        storedStoryStoryFolders.put(storyId, storyFolderRef);\r
                                }\r
+\r
+                               BasicDBList storyMosObjects = asDBList(story, MOS_OBJECTS);\r
+                               if (storyMosObjects != null) {\r
+                                       if (storedStoryMosObjects == null)\r
+                                               storedStoryMosObjects = new HashMap<>();\r
+                                       storedStoryMosObjects.put(storyId, storyMosObjects);\r
+                               }\r
                        }\r
                } catch (Exception e) {\r
                        logger.catching(e);\r
@@ -496,9 +504,27 @@ public class OctopusDataMiner implements Runnable {
        }\r
 \r
        public void run(boolean forceFull) {\r
-               if (forceFull)\r
+               if (forceFull) {\r
+                       //                      RUNDOWN_COLLECTION_NAME = "rundowns_tmp";\r
+                       //                      STORY_COLLECTION_NAME = "stories_tmp";\r
+                       //                      STORY_FOLDER_COLLECTION_NAME = "storyfolders_tmp";\r
+                       //                      TIME_COLLECTION_NAME = "octopusSyncTime_tmp";\r
                        clear();\r
+               }\r
                run();\r
+               //              if (forceFull) {\r
+               //                      RUNDOWN_COLLECTION_NAME = "rundowns";\r
+               //                      STORY_COLLECTION_NAME = "stories";\r
+               //                      STORY_FOLDER_COLLECTION_NAME = "storyfolders";\r
+               //                      TIME_COLLECTION_NAME = "octopusSyncTime";\r
+               //                      db.getCollection("rundowns_tmp").rename(RUNDOWN_COLLECTION_NAME, true);\r
+               //                      db.getCollection("stories_tmp").rename(STORY_COLLECTION_NAME, true);\r
+               //                      db.getCollection("storyfolders_tmp").rename(STORY_FOLDER_COLLECTION_NAME, true);\r
+               //                      db.getCollection("octopusSyncTime_tmp").rename(TIME_COLLECTION_NAME, true);\r
+               //                      //clear();\r
+               //              }\r
+\r
+               //TODO reset collection names\r
        }\r
 \r
        public void setLastUpdateTime(Date lastUpdateTime) {\r
@@ -570,6 +596,8 @@ public class OctopusDataMiner implements Runnable {
                rundownRef = (rundownRef == null) ? new BasicDBList() : rundownRef;\r
                BasicDBList storyFolderRef = storyStoryFolders.get(storyID);\r
                storyFolderRef = (storyFolderRef == null) ? new BasicDBList() : storyFolderRef;\r
+               BasicDBList modifiedMOS = GetRelevantMOSObjects(story);\r
+               modifiedMOS = (modifiedMOS == null) ? new BasicDBList() : modifiedMOS;\r
 \r
                boolean uptodate = true;\r
                if (!isModified(lastUpdateTime, story)) {\r
@@ -582,6 +610,13 @@ public class OctopusDataMiner implements Runnable {
                                storedStoryFolderRef = (storedStoryFolderRef == null) ? new BasicDBList() : storedStoryFolderRef;\r
                                uptodate = storedStoryFolderRef.equals(storyFolderRef);\r
                        }\r
+\r
+                       if (uptodate) {\r
+                               BasicDBList storedMOS = storedStoryMosObjects.get(storyID);\r
+                               storedMOS = (storedMOS == null) ? new BasicDBList() : storedMOS;\r
+                               uptodate = storedMOS.equals(modifiedMOS);\r
+                       }\r
+\r
                        if (uptodate)\r
                                return;\r
                }\r
@@ -598,7 +633,6 @@ public class OctopusDataMiner implements Runnable {
                        story.put(REF_STORYFOLDER, storyFolderRef);\r
                String scriptContent = GetScriptContent(story);\r
                story.put(SCRIPT_CONTENT, scriptContent);\r
-               BasicDBList modifiedMOS = GetRelevantMOSObjects(story);\r
                if (modifiedMOS == null || modifiedMOS.isEmpty()) {\r
                        if (story.containsKey(MOS_OBJECTS))\r
                                story.remove(MOS_OBJECTS);\r
index 96eac917c804a67099538288bb997a61a06666f7..65657911401bbcf44a84b6c36d87e31c63ddf371 100644 (file)
@@ -1,5 +1,8 @@
 package user.common.octopus.test;\r
 \r
+import static org.junit.Assert.assertFalse;\r
+import static org.junit.Assert.assertTrue;\r
+\r
 import java.io.FileInputStream;\r
 import java.lang.invoke.MethodHandles;\r
 import java.net.URL;\r
@@ -132,4 +135,30 @@ public class OctopusDataMinerTest {
                }\r
        }\r
 \r
+       @Test\r
+       public void testListEquals() {\r
+               BasicDBList list1 = new BasicDBList(new BasicDBObject("x", 1));\r
+               BasicDBList list2 = new BasicDBList(new BasicDBObject("x", 1));\r
+\r
+               assertTrue(list1.equals(list2));\r
+       }\r
+\r
+       @Test\r
+       public void testListEquals_fail1() {\r
+               BasicDBList list1 = new BasicDBList(new BasicDBObject("x", 1));\r
+               BasicDBList list2 = new BasicDBList(new BasicDBObject("x", "1"));\r
+\r
+               assertFalse(list1.equals(list2));\r
+       }\r
+\r
+       @Test\r
+       public void testListEquals2() {\r
+               BasicDBList list1 = new BasicDBList(new BasicDBObject("x", 1));\r
+               list1.add(new BasicDBObject("y", 2));\r
+               list1.add(new BasicDBObject("z", 3));\r
+               BasicDBList list2 = new BasicDBList(new BasicDBObject("x", 1));\r
+               list2.add(new BasicDBObject("y", 2));\r
+               list2.add(new BasicDBObject("z", 3));\r
+               assertTrue(list1.equals(list2));\r
+       }\r
 }\r
index e8b5abb9593526b2101620ef29ae067423bfae73..03191576463a351b517e6d7657cc092d08cdafa0 100644 (file)
@@ -37,9 +37,9 @@
                                        onSelect="@command('selectJob')" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" >\r
                                       <listhead sizable="true">\r
                                        <listheader label="Id" hflex="min" align="left"/>\r
-                                       <listheader label="Name" hflex="300px" align="left"/>\r
+                                       <listheader label="Name" hflex="150px" align="left"/>\r
                                        <listheader label="Priority" hflex="min" align="left"/>\r
-                                       <listheader label="Status" hflex="100px" align="left"/>\r
+                                       <listheader label="Status" hflex="50px" align="left"/>\r
                                        <listheader label="Progress" width="200px" align="left"/>\r
                                        <listheader label="Message" align="left"/>\r
                                       </listhead>\r