{\r
"$type": "TrafficMetadata",\r
"server": {\r
- "address": "Data Source=10.10.1.45\\sql16;Initial Catalog=PA_Echo;Persist Security Info=True;",\r
+ "address": "Data Source=10.10.1.45;Initial Catalog=PA_Echo;Persist Security Info=True;",\r
"userName": "MAM",\r
"password": "7RKZYBzumKjL40SJwuwiFCvX57xuCN8zay6OttUm2wbrgImyYZBHyZTUUYrXX31Ge2Uwew07HYsqh2uzdJeDBDwcVntxaHg3nIpv9Dyq/odVoiC4tUF/K+lgvKWANcrZ",\r
"timeout": 1000\r
],\r
"targets": [\r
{\r
- "label": "Adásellenőrzés",\r
+ "label": "Octopus",\r
"processor": "FXPTargetProcessor",\r
"outputFormat": "%ID%",\r
"tag": "Adáskész",\r
+ "subFolderFormat": "%IDROOT%-%TEXT%",\r
+ "killDateDays": 15,\r
+ "saveArchiveMetadata": false,\r
"remote": {\r
- "address": "ftp://10.10.1.100:21/PLAYOUT_CHECK",\r
+ "address": "ftp://10.10.1.100:21/OCTOPUS",\r
"userName": "mediacube",\r
"password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
"timeout": 1000\r
"server": {\r
"address": "http://10.10.1.27/services/rest/octopus/",\r
"timeout": 1000\r
+ },\r
+ "projectSettings": {\r
+ "templateRoot": {\r
+ "address": "file://10.10.1.100/BRAAVOS/.MAESTRO",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ },\r
+ "templateName": "ALAPTIMELINE.ezp",\r
+ "target": {\r
+ "label": "Projekt létrehozása",\r
+ "processor": "UNCTargetProcessor",\r
+ "outputFormat": "%ID%",\r
+ "subFolderFormat": "%IDROOT%-%TEXT%/PROJECT",\r
+ "disableFileVersioning": true,\r
+ "remote": {\r
+ "address": "file://10.10.1.100/BRAAVOS/OCTOPUS",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ "disableOpenProject": false,\r
+ "disableOpenSourceFolder": false\r
}\r
},\r
{\r
"$type": "TrafficMetadata",\r
"server": {\r
- "address": "Data Source=10.10.1.45\\sql16;Initial Catalog=PA_Echo;Persist Security Info=True;",\r
+ "address": "Data Source=10.10.1.45;Initial Catalog=PA_Echo;Persist Security Info=True;",\r
"userName": "MAM",\r
"password": "7RKZYBzumKjL40SJwuwiFCvX57xuCN8zay6OttUm2wbrgImyYZBHyZTUUYrXX31Ge2Uwew07HYsqh2uzdJeDBDwcVntxaHg3nIpv9Dyq/odVoiC4tUF/K+lgvKWANcrZ",\r
"timeout": 1000\r
-using Maestro.Properties;\r
-using System.Windows.Forms;\r
+using System.Windows.Forms;\r
\r
namespace Maestro {\r
partial class MaestroForm {\r
this.groupSource = new System.Windows.Forms.GroupBox();\r
this.dgSource = new System.Windows.Forms.DataGridView();\r
this.bindingSource = new System.Windows.Forms.BindingSource(this.components);\r
- this.treeFolders = new System.Windows.Forms.TreeView();\r
+ this.treeFolders = new MaestroShared.Controls.DoubleClickTreeView();\r
this.ilFolders = new System.Windows.Forms.ImageList(this.components);\r
this.pSourceFilter = new System.Windows.Forms.TableLayoutPanel();\r
this.txtSourceFilter = new System.Windows.Forms.TextBox();\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
+ this.treeFolders.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.OnAfterFolderSelect);\r
this.treeFolders.MouseDown += new System.Windows.Forms.MouseEventHandler(this.OnFolderMouseDown);\r
// \r
// ilFolders\r
private System.Windows.Forms.ToolStripButton btnDefineSegments;\r
private System.Windows.Forms.ToolStrip tsSource;\r
private System.Windows.Forms.ToolStripButton btnShowFolders;\r
- private System.Windows.Forms.TreeView treeFolders;\r
+ private MaestroShared.Controls.DoubleClickTreeView treeFolders;\r
private System.Windows.Forms.ImageList ilFolders;\r
private System.Windows.Forms.CheckBox chkAutoScroll;\r
private DataGridViewTextBoxColumn columnLabel;\r
source.Startup(localAddress);\r
bindingSource.DataSource = source;\r
dgSource.Columns.AddRange(source.Columns);\r
+\r
+ treeFolders.NodeDoubleClick += OnDoubleClickFolder;\r
}\r
\r
private string GetLastSegment(string path) {\r
AddFolders(address, e.Node);\r
}\r
\r
- private void OnAfterSelectFolder(object sender, TreeViewEventArgs e) {\r
- if (e.Action != TreeViewAction.ByMouse)\r
- return;\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 (e.Node.Level == 0)\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(e.Node))));\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
treeFolders.SelectedNode = treeFolders.GetNodeAt(e.X, e.Y);\r
}\r
\r
+ private void OnAfterFolderSelect(object sender, TreeViewEventArgs e) {\r
+ if (e.Node != null)\r
+ e.Node.Expand();\r
+ }\r
}\r
}\r
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w\r
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\r
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAS\r
- CAAAAk1TRnQBSQFMAgEBAgEAASgBAQEoAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
+ CAAAAk1TRnQBSQFMAgEBAgEAATgBAQE4AQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA\r
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5\r
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA\r
// 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.7.7")]\r
-[assembly: AssemblyFileVersion("2.0.7.7")]\r
+[assembly: AssemblyVersion("2.0.7.8")]\r
+[assembly: AssemblyFileVersion("2.0.7.8")]\r
using System.Windows.Forms;\r
\r
namespace MaestroShared.Controls {\r
- class CheckableTreeView : TreeView {\r
- public delegate void OnNodeDoubleClick(object sender, TreeNodeMouseClickEventArgs args);\r
-\r
- public OnNodeDoubleClick NodeDoubleClick;\r
+ class CheckableTreeView : DoubleClickTreeView {\r
private readonly bool[] disableCheckBoxLevels;\r
\r
public CheckableTreeView(bool[] disableCheckBoxLevels) {\r
TextRenderer.DrawText(e.Graphics, e.Node.Text, Font, e.Bounds, ForeColor, TextFormatFlags.Left | TextFormatFlags.Top);\r
}\r
\r
- protected override void WndProc(ref Message m) {\r
- // Suppress WM_LBUTTONDBLCLK\r
- if (m.Msg == 0x203) {\r
- var point = PointToClient(Cursor.Position);\r
- TreeNode node = GetNodeAt(point);\r
- TreeNodeMouseClickEventArgs args = new TreeNodeMouseClickEventArgs(node, MouseButtons.Left, 2, point.X, point.Y);\r
- NodeDoubleClick?.Invoke(this, args);\r
- m.Result = IntPtr.Zero;\r
- } else\r
- base.WndProc(ref m);\r
- }\r
-\r
}\r
\r
}\r
--- /dev/null
+using System;\r
+using System.Windows.Forms;\r
+\r
+namespace MaestroShared.Controls {\r
+ public class DoubleClickTreeView : TreeView {\r
+ public delegate void OnNodeDoubleClick(object sender, TreeNodeMouseClickEventArgs args);\r
+\r
+ public OnNodeDoubleClick NodeDoubleClick;\r
+\r
+ protected override void WndProc(ref Message m) {\r
+ // Suppress WM_LBUTTONDBLCLK\r
+ if (m.Msg == 0x203) {\r
+ var point = PointToClient(Cursor.Position);\r
+ TreeNode node = GetNodeAt(point);\r
+ TreeNodeMouseClickEventArgs args = new TreeNodeMouseClickEventArgs(node, MouseButtons.Left, 2, point.X, point.Y);\r
+ NodeDoubleClick?.Invoke(this, args);\r
+ m.Result = IntPtr.Zero;\r
+ } else\r
+ base.WndProc(ref m);\r
+ }\r
+\r
+ }\r
+\r
+}\r
<Compile Include="Configuration\KeysColorConverter.cs" />\r
<Compile Include="Configuration\KeysPasswordConverter.cs" />\r
<Compile Include="Configuration\KnownTypesBinder.cs" />\r
+ <Compile Include="Controls\DoubleClickTreeView.cs">\r
+ <SubType>Component</SubType>\r
+ </Compile>\r
<Compile Include="Controls\CheckableTreeView.cs">\r
<SubType>Component</SubType>\r
</Compile>\r
// 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("1.0.0.0")]\r
-[assembly: AssemblyFileVersion("1.0.0.0")]\r
+[assembly: AssemblyVersion("2.0.7.8")]\r
+[assembly: AssemblyFileVersion("2.0.7.8")]\r
public const string READY = "Kész";\r
public const string REVOKED = "Visszavonva";\r
public const string SKIPPED = "Kihagyva";\r
+ protected const string FORMAT_IDROOT = "%IDROOT%";\r
private string status;\r
private string message;\r
private string id;\r
private string killDatePath;\r
protected Control parent;\r
private List<ITargetProcessor> references;\r
-\r
+ \r
public event PropertyChangedEventHandler PropertyChanged;\r
\r
public static ITargetProcessor Create(string processorName) {\r
protected virtual string SearchDirectory(string path, string pattern) {\r
logger.Trace(Strings.ENTRY);\r
string result = null;\r
- string[] dirs = Directory.GetDirectories(path, pattern);\r
+ string[] dirs = Directory.GetDirectories(path, pattern + STAR);\r
if (dirs.Length > 0)\r
result = dirs[0];\r
return result;\r
string[] formats = Parameters.TargetConfig.SubFolderFormat.Replace(BACKSLASH, SLASH).Split(SLASH[0]);\r
for (int i = 0; i < segments.Length; i++) {\r
string segment = segments[i];\r
- int p = segment.IndexOf(HYPHEN);\r
- int o = segment.IndexOf(UNDERSCORE);\r
- if (formats[i].Contains("%") && (p > -1 || o > -1)) {\r
- string pattern = null;\r
- if (p <= o && p > -1)\r
- pattern = segment.Substring(0, p);\r
- if (pattern == null && o < p && o > -1)\r
- pattern = segment.Substring(0, o);\r
- if (pattern == null && o < p && p > -1)\r
- pattern = segment.Substring(0, p);\r
- pattern += STAR;\r
- string searchResult = SearchDirectory(result, pattern);\r
- if (searchResult == null)\r
- result = Slash(Path.Combine(result, segment));\r
- else\r
- result = Slash(Path.Combine(result, searchResult));\r
- } else\r
+ if (!formats[i].StartsWith(FORMAT_IDROOT)) {\r
result = Slash(Path.Combine(result, segment));\r
+ continue;\r
+ }\r
+ string pattern = GetDynamicText(FORMAT_IDROOT);\r
+ string searchResult = SearchDirectory(result, pattern);\r
+ if (searchResult == null)\r
+ result = Slash(Path.Combine(result, segment));\r
+ else\r
+ result = Slash(Path.Combine(result, searchResult));\r
}\r
\r
logger.Trace(Strings.EXIT);\r
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty -Djava.io.tmpdir=c:\temp\jetty -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Dnexio.host=10.10.1.55 -Dnexio.disable=true -Djobengine.octopus.rundowns.name=test_rundowns -Djobengine.octopus.storyfolders.name=test_storyfolders -Djobengine.octopus.stories.name=test_stories -Dmediacube.auth.location="${workspace_loc}/-configuration/mediacube-auth.properties""/>\r
<stringAttribute key="pde.version" value="3.3"/>\r
-<booleanAttribute key="show_selected_only" value="true"/>\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,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
+<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
<booleanAttribute key="tracing" value="false"/>\r
<booleanAttribute key="useCustomFeatures" value="false"/>\r
<booleanAttribute key="useDefaultConfigArea" value="true"/>\r
{"joblist":[\r
{\r
- "name" : "SYS: batch-retrieve-ondemand",\r
- "template": "batch-retrieve-ondemand.xml",\r
+ "active": false,\r
+ "executeimmediate": false,\r
+ "name" : "SYS: recreate-lowres",\r
+ "template": "recreate-lowres.xml",\r
"parameters": [ \r
- {"name": "trafficOutputPath", "value": "/mnt/ISILON/PLAYOUT_NLE", "type": "java.lang.String"},\r
- {"name": "octopusOutputPath", "value": "/mnt/ISILON/OCTOPUS", "type": "java.lang.String"},\r
- {"name": "genericOutputPath", "value": "/mnt/ISILON/ARCHIVE_RESTORE", "type": "java.lang.String"},\r
- {"name": "killDateDays", "value": 7, "type": "java.lang.Integer"}\r
+ {"name": "filePath", "value": "c:/_downloads/Silicon.Valley.S04E08.HDTV.x264.HUN-SFY/Silicon.Valley.S04E08.HDTV.x264.HUN-SFY.mkv", "type": "java.lang.String" }\r
]\r
+ },\r
+ {\r
+ "name" : "SYS: batch-retrieve-ondemand",\r
+ "template": "batch-retrieve-ondemand.xml"\r
},\r
{\r
"name" : "SYS: retrieve-ondemand",\r
<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
-<?pde version="3.8"?><target name="JobEngine" sequenceNumber="285">\r
+<?pde version="3.8"?><target name="JobEngine" sequenceNumber="289">\r
<locations>\r
<location path="${eclipse_home}" type="Profile"/>\r
<location path="${workspace_loc}/-dependencies/target/repository/plugins" type="Directory"/>\r
<plugin id="com.fasterxml.jackson.jaxrs.jackson-jaxrs-base" version="2.4.5"/>\r
<plugin id="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" version="2.4.5"/>\r
<plugin id="com.fasterxml.jackson.module.jackson-module-jaxb-annotations" version="2.4.5"/>\r
-<plugin id="com.google.guava"/>\r
+<plugin id="com.google.guava" version="18.0.0"/>\r
<plugin id="com.ibm.db2jcc4"/>\r
<plugin id="com.ibm.nosql"/>\r
<plugin id="com.microsoft.sqlserver.sqljdbc"/>\r
<plugin id="com.sun.el.javax.el"/>\r
<plugin id="com.sun.org.apache.jaxp-ri"/>\r
<plugin id="commons-logging"/>\r
+<plugin id="humble.video.linux"/>\r
+<plugin id="humble.video.noarch"/>\r
+<plugin id="humble.video.windows"/>\r
<plugin id="javax.activation" version="1.1.0.v201211130549"/>\r
<plugin id="javax.annotation"/>\r
<plugin id="javax.annotation-api"/>\r
<goals>\r
<goal>install-file</goal>\r
</goals>\r
+ <configuration>\r
+ <file>libs/humble-video-arch-x86_64-pc-linux-gnu6-0.2.1.jar</file>\r
+ <groupId>humble.video</groupId>\r
+ <artifactId>linux</artifactId>\r
+ <version>0.2.1</version>\r
+ <packaging>jar</packaging>\r
+ </configuration>\r
+ </execution>\r
+ <execution>\r
+ <id>install3</id>\r
+ <phase>package</phase>\r
+ <goals>\r
+ <goal>install-file</goal>\r
+ </goals>\r
+ <configuration>\r
+ <file>libs/humble-video-arch-x86_64-w64-mingw32-0.2.1.jar</file>\r
+ <groupId>humble.video</groupId>\r
+ <artifactId>windows</artifactId>\r
+ <version>0.2.1</version>\r
+ <packaging>jar</packaging>\r
+ </configuration>\r
+ </execution>\r
+ <execution>\r
+ <id>install4</id>\r
+ <phase>package</phase>\r
+ <goals>\r
+ <goal>install-file</goal>\r
+ </goals>\r
+ <configuration>\r
+ <file>libs/humble-video-noarch-0.2.1.jar</file>\r
+ <groupId>humble.video</groupId>\r
+ <artifactId>noarch</artifactId>\r
+ <version>0.2.1</version>\r
+ <packaging>jar</packaging>\r
+ </configuration>\r
+ </execution>\r
+ <execution>\r
+ <id>install5</id>\r
+ <phase>package</phase>\r
+ <goals>\r
+ <goal>install-file</goal>\r
+ </goals>\r
<configuration>\r
<file>libs/sqljdbc42.jar</file>\r
<groupId>com.microsoft.sqlserver</groupId>\r
<id>default-cli</id>\r
<configuration>\r
<artifacts>\r
+ <artifact>\r
+ <id>humble.video:linux:0.2.1</id>\r
+ </artifact>\r
+ <artifact>\r
+ <id>humble.video:windows:0.2.1</id>\r
+ </artifact>\r
+ <artifact>\r
+ <id>humble.video:noarch:0.2.1</id>\r
+ </artifact>\r
+\r
<artifact>\r
<id>com.google.guava:guava:18.0</id>\r
</artifact>\r
<plugin id="com.microsoft.sqlserver.sqljdbc"/>\r
<plugin id="com.sun.el.javax.el"/>\r
<plugin id="commons-logging"/>\r
+ <plugin id="humble.video.linux"/>\r
+ <plugin id="humble.video.noarch"/>\r
+ <plugin id="humble.video.windows"/>\r
<plugin id="javax.annotation-api"/>\r
<plugin id="javax.inject"/>\r
<plugin id="javax.mail"/>\r
<executor className="user.jobengine.server.steps.TSMBackupStep" maxConcurrent="2"/>\r
<executor className="user.jobengine.server.steps.TSMRetrieveMissingMaterialStep" maxConcurrent="1"/>\r
<executor className="user.jobengine.server.steps.UploadRecordingToNexioStep" maxConcurrent="1"/>\r
+ <executor className="user.jobengine.server.steps.MediaToolStep" maxConcurrent="1"/>\r
+ \r
</executors>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Visszarögzített anyagok archiválása mappából">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="filePath" type="java.lang.String" />\r
+ </parameters>\r
+ </declarations>\r
+ <commands>\r
+ <calljobstep type="user.jobengine.server.steps.MediaToolStep" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="filePath" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
private MediaCubeMarker marker;\r
\r
@StepEntry\r
- public Object[] execute(String trafficOutputPath, String octopusOutputPath, String genericOutputPath, List<Media> basket, String houseId, String recipient,\r
- int killDateDays, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ public Object[] execute(List<Media> basket, String houseId, String recipient, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
marker = (MediaCubeMarker) jobRuntime.getMarker();\r
marker.setTo(recipient);\r
\r
setProgress(10);\r
if (jobRuntime.forkPrepare()) {\r
for (Media mediaCubeMedia : basket) {\r
- submit(trafficOutputPath, octopusOutputPath, genericOutputPath, mediaCubeMedia, recipient, houseId, killDateDays, jobEngine, jobRuntime);\r
+ submit(mediaCubeMedia, recipient, houseId, jobEngine, jobRuntime);\r
}\r
}\r
setProgress(50);\r
return null;\r
}\r
\r
- public void submit(String trafficOutputPath, String octopusOutputPath, String genericOutputPath, Media mediaCubeMedia, String recipient, String houseId,\r
- int killDateDays, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ public void submit(Media mediaCubeMedia, String recipient, String houseId, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
try {\r
ScheduledJob scheduledJob = jobEngine.getScheduledJob(CHILD_TEMPLATE);\r
Map<String, Object> parameters = scheduledJob.getJobParameters();\r
String fileName = String.format("%s-%s", origFileName, rundownArchive.getItemHouseId());\r
String videoFileName = fileName + MXFEXT;\r
\r
- transferFile(origFileName + MXFEXT, videoFileName);\r
- BasicDBObject metadata = createMetadata(rundownArchive, storyArchive, fileArchive);\r
+ //A mar letezo mozikat nem archivaljuk le ujra, csak a metaadatot\r
+ long existingMediaId = manager.getExistingRundownMedia(origFileName);\r
+ if (existingMediaId == 0)\r
+ transferFile(origFileName + MXFEXT, videoFileName);\r
+ else\r
+ transferChunk(origFileName);\r
+\r
+ BasicDBObject metadata = createMetadata(rundownArchive, storyArchive, fileArchive, existingMediaId);\r
transferMetadata(videoFileName, metadata);\r
createSourceKillDateFile(rundownArchive, origFileName);\r
}\r
\r
- private BasicDBObject createMetadata(RundownArchive rundownArchive, StoryArchive storyArchive, FileArchive fileArchive) {\r
+ private BasicDBObject createMetadata(RundownArchive rundownArchive, StoryArchive storyArchive, FileArchive fileArchive, long existingMediaId) {\r
BasicDBObject result = new BasicDBObject();\r
result.put("itemHouseId", rundownArchive.getItemHouseId());\r
result.put("itemTitle", rundownArchive.getItemTitle());\r
result.put("itemDescription", rundownArchive.getItemDesc());\r
result.put("userName", "mediacube");\r
-\r
result.put("mediaHouseId", storyArchive.getMediaHouseId());\r
result.put("mediaTitle", storyArchive.getMediaTitle());\r
result.put("mediaDescription", storyArchive.getMediaDesc());\r
result.put("mediaType", MEDIATYPE);\r
-\r
result.put("duration", fileArchive.getDuration());\r
+ result.put("existingMediaId", existingMediaId);\r
return result;\r
}\r
\r
\r
}\r
\r
+ private void transferChunk(String fileName) throws Exception {\r
+ logger.info("Transfer chunk {}", fileName);\r
+ OutputStream outStream = null;\r
+ try {\r
+ outStream = targetFtp.storeFileStream(fileName + MXFEXT);\r
+ if (outStream == null) {\r
+ throw new NullPointerException("Can not open: " + fileName + MXFEXT + " Reply:" + targetFtp.getReplyString());\r
+ }\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ throw e;\r
+ } finally {\r
+ if (outStream != null)\r
+ outStream.close();\r
+ targetUri.cleanUp();\r
+ }\r
+ }\r
+\r
private void transferFile(String sourceFileName, String targetFileName) throws Exception {\r
int reply = 0;\r
logger.info("Transfer clip {}", sourceFileName);\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.nio.file.Paths;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
+\r
+import user.commons.mediatool.MediaInfo;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class MediaToolStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private Marker marker;\r
+\r
+ @StepEntry\r
+ public Object[] execute(String filePath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ marker = jobRuntime.getMarker();\r
+ MediaInfo mi = new MediaInfo(Paths.get(filePath));\r
+ try {\r
+ mi.process();\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ logger.error(marker, "A '{}' média analizálása sikertelen. A rendszer üzenete: {}", filePath, e.getMessage());\r
+ throw e;\r
+ }\r
+ return null;\r
+ }\r
+\r
+}\r
package user.jobengine.server.steps;\r
\r
import java.io.IOException;\r
+import java.nio.file.FileVisitResult;\r
+import java.nio.file.FileVisitor;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
import java.nio.file.Paths;\r
+import java.nio.file.SimpleFileVisitor;\r
+import java.nio.file.attribute.BasicFileAttributes;\r
\r
import org.apache.commons.lang.StringUtils;\r
import org.apache.logging.log4j.LogManager;\r
break;\r
case OCTOPUSPLACEHOLDER:\r
case OCTOPUSSTORY:\r
- targetPath = Paths.get(octopusOutputPath, id).toString();\r
+ targetPath = getPossiblePath(id, Paths.get(octopusOutputPath, id)).toString();\r
break;\r
case TRAFFIC:\r
- targetPath = Paths.get(trafficOutputPath, id).toString();\r
+ targetPath = getPossiblePath(id, Paths.get(trafficOutputPath, id)).toString();\r
break;\r
}\r
String targetNamePattern = houseId + TARGETNAMEPATTERN;\r
return new Object[] { targetPath, targetNamePattern };\r
}\r
\r
+ private String getPossiblePath(String id, Path targetPath) throws IOException {\r
+ String[] result = { targetPath.toString() };\r
+ FileVisitor<Path> matcherVisitor = new SimpleFileVisitor<Path>() {\r
+ @Override\r
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {\r
+ String dirName = dir.getFileName().toString();\r
+ if (dirName.startsWith(id + "-") || dirName.equals(id)) {\r
+ result[0] = dir.toString();\r
+ return FileVisitResult.TERMINATE;\r
+ }\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+ };\r
+ Files.walkFileTree(targetPath.getParent(), matcherVisitor);\r
+ return result[0];\r
+ }\r
+\r
}\r
import java.io.IOException;\r
import java.sql.Timestamp;\r
import java.util.Date;\r
+import java.util.List;\r
\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
@StepEntry\r
public Object[] execute(ArchiveItem archiveItem, Media mediaCubeMedia, int killDateDays, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
marker = jobRuntime.getMarker();\r
+\r
File sourceMediaFile = new File(archiveItem.getMediaFile());\r
String sourceFileName = sourceMediaFile.getName();\r
String details = String.format("%s (%d bytes)", sourceFileName, sourceMediaFile.length());\r
\r
jobRuntime.setDescription(String.format("%s: %s", jobRuntime.getDescription(), details));\r
\r
- StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, sourceMediaFile.getParent().toString());\r
-\r
- final IJobRuntime runtime = jobRuntime;\r
- sourceUri.addProgressListener(new IProgressEventListener() {\r
- @Override\r
- public void progressChanged(ProgressEvent evt) {\r
- runtime.incrementProgress(evt.getProgress());\r
- }\r
- });\r
- sourceUri.addStatusListener(new IStatusEventListener() {\r
- @Override\r
- public void statusChanged(StatusEvent evt) {\r
- evt.setCancel(!canContinue());\r
- }\r
- });\r
- RemoteFile remoteFile = sourceUri.transferFrom(targetUri, sourceFileName, sourceFileName);\r
+ if (archiveItem.getExistingMediaId() == 0) {\r
+ StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, sourceMediaFile.getParent().toString());\r
\r
- saveMetadata(mediaCubeMedia, sourceFileName);\r
- logger.info(marker, "Az '{}' állomány archiválása sikeres.", sourceFileName);\r
+ final IJobRuntime runtime = jobRuntime;\r
+ sourceUri.addProgressListener(new IProgressEventListener() {\r
+ @Override\r
+ public void progressChanged(ProgressEvent evt) {\r
+ runtime.incrementProgress(evt.getProgress());\r
+ }\r
+ });\r
+ sourceUri.addStatusListener(new IStatusEventListener() {\r
+ @Override\r
+ public void statusChanged(StatusEvent evt) {\r
+ evt.setCancel(!canContinue());\r
+ }\r
+ });\r
+ RemoteFile remoteFile = sourceUri.transferFrom(targetUri, sourceFileName, sourceFileName);\r
+ } else {\r
+ logger.info(marker, "Az '{}' TSM mentése nem szükséges, mert már megtalálható az archívumban.", sourceFileName);\r
+ }\r
+ saveMetadata(mediaCubeMedia, sourceFileName, archiveItem);\r
+ logger.info(marker, "Az '{}' archiválása sikeres.", sourceFileName);\r
\r
if (killDateDays > 0)\r
EscortFiles.createUNCKillDate(sourceMediaFile.getParent(), sourceFileName, killDateDays, marker);\r
return null;\r
}\r
\r
- private void saveMetadata(Media mediaCubeMedia, String sourceFileName) {\r
- MediaFile mediaFile = manager.createMediaFile(sourceFileName, fileType, tsmStore, mediaCubeMedia);\r
- mediaFile.setHouseId(sourceFileName);\r
- mediaFile.add();\r
+ private void saveMetadata(Media mediaCubeMedia, String sourceFileName, ArchiveItem archiveItem) {\r
+ if (archiveItem.getExistingMediaId() == 0) {\r
+ MediaFile mediaFile = manager.createMediaFile(sourceFileName, fileType, tsmStore, mediaCubeMedia);\r
+ mediaFile.setHouseId(sourceFileName);\r
+ mediaFile.add();\r
+ } else {\r
+ Media existingMedia = manager.getMedia(archiveItem.getExistingMediaId());\r
+ List<MediaFile> mediaFiles = existingMedia.getMediaFiles();\r
+ if (mediaFiles != null) {\r
+ for (MediaFile mf : mediaFiles) {\r
+ mf.setId(0);\r
+ mf.setMedia(mediaCubeMedia);\r
+ mf.add();\r
+ mediaCubeMedia.appendMediaFile(mf);\r
+ }\r
+ }\r
+ }\r
mediaCubeMedia.setPersister(manager);\r
mediaCubeMedia.setArchived(new Timestamp(new Date().getTime()));\r
mediaCubeMedia.modify();\r
marker = jobRuntime.getMarker();\r
String sourceFileName = null;\r
\r
+ //Nincs mit transzkódolni\r
+ if (archiveItem.getExistingMediaId() != 0)\r
+ return null;\r
+\r
try {\r
setAndCheck(globalSourcePath, transcoderTargetPath, webPath, jobEngine);\r
\r
com.fasterxml.jackson.databind.util;version="2.4.5",
com.fasterxml.jackson.datatype.joda;version="2.4.5",
com.fasterxml.jackson.jaxrs.json;version="2.4.5",
+ io.humble.video,
org.apache.logging.log4j;version="2.8.2",
org.apache.logging.log4j.message;version="2.8.2",
org.jboss.resteasy.client.jaxrs,
Export-Package: user.commons,
user.commons.ftp,
user.commons.logging,
+ user.commons.mediatool,
user.commons.morpheus,
user.commons.nexio,
user.commons.nexio.api,
--- /dev/null
+package user.commons.mediatool;\r
+\r
+import java.io.IOException;\r
+import java.nio.file.Path;\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 long frames;\r
+\r
+ private Path filePath;\r
+\r
+ public MediaInfo(Path filePath) {\r
+ this.filePath = filePath;\r
+ }\r
+\r
+ public long getFrames() {\r
+ return frames;\r
+ }\r
+\r
+ public void process() throws InterruptedException, IOException {\r
+ final Demuxer demuxer = Demuxer.make();\r
+ demuxer.open(filePath.toString(), null, false, true, null, null);\r
+ int bitRate = demuxer.getBitRate() / 1000;\r
+ double start = demuxer.getStartTime() == Global.NO_PTS ? 0 : demuxer.getStartTime() / 1000000.0;\r
+\r
+ int numStreams = demuxer.getNumStreams();\r
+\r
+ frames = 0;\r
+ int videoStreamId = -1;\r
+ long streamStartTime = Global.NO_PTS;\r
+ Decoder videoDecoder = null;\r
+ for (int i = 0; i < numStreams; i++) {\r
+ final DemuxerStream stream = demuxer.getStream(i);\r
+ streamStartTime = stream.getStartTime();\r
+ final Decoder decoder = stream.getDecoder();\r
+\r
+ if (decoder != null && decoder.getCodecType() == MediaDescriptor.Type.MEDIA_VIDEO) {\r
+ videoStreamId = i;\r
+ videoDecoder = decoder;\r
+ frames = stream.getDuration();\r
+ break;\r
+ }\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
--- /dev/null
+select i.id itemid,i.created itemcreated,i.houseid itemhouseid,i.title itemtitle,\r
+m.id mediaid,m.created mediacreated,m.archived,m.length,it.name mediatype,m.houseid mediahouseid,m.title mediatitle,\r
+mf.id mediafileid,mf.houseid mediafilehouseid \r
+from mediafile mf \r
+left outer join media m on (m.id = mf.mediaid) \r
+left outer join item i on (i.id = m.itemid) \r
+left outer join itemtype it on (it.id = m.itemtypeid) \r
+where mf.storeid = 1 and \r
+(contains(i.title, 'trend*') >= 1 or contains(m.title, 'trend*') >= 1)\r
+order by itemtitle desc, mediatype\r
+\r
+SELECT * FROM (\r
+(\r
+ SELECT DISTINCT m.id,m.title,i.title FROM ITEM i, MEDIA m\r
+ WHERE CONTAINS(i.title, 'trend*') >= 1 AND m.itemid = i.id\r
+) UNION (\r
+ SELECT DISTINCT m.id,m.title,i.title FROM ITEM i, MEDIA m\r
+ WHERE CONTAINS(m.title, 'trend*') >= 1 AND m.itemid = i.id\r
+))\r
+\r
+\r
+SELECT * FROM (\r
+(\r
+ SELECT DISTINCT i.houseid itemhouseid,i.title itemtitle,m.id mediaid,m.archived,m.length,m.itemtypeid mediaitemtypeid,m.houseid mediahouseid,m.title mediatitle,mf.houseid mediafilehouseid \r
+ FROM ITEM i, MEDIA m, MEDIAFILE mf \r
+ WHERE m.itemid = i.id AND mf.mediaid = m.id AND mf.storeid = 1 AND ((CONTAINS(i.title, 'trend*') >= 1) OR (CONTAINS(i.description, 'trend*') >= 1))\r
+) UNION (\r
+ SELECT DISTINCT i.houseid itemhouseid,i.title itemtitle,m.id mediaid,m.archived,m.length,m.itemtypeid mediaitemtypeid,m.houseid mediahouseid,m.title mediatitle,mf.houseid mediafilehouseid \r
+ FROM ITEM i, MEDIA m, MEDIAFILE mf \r
+ WHERE m.itemid = i.id AND mf.mediaid = m.id AND mf.storeid = 1 AND ((CONTAINS(m.title, 'trend*') >= 1) OR (CONTAINS(m.description, 'trend*') >= 1))\r
+) UNION (\r
+ SELECT DISTINCT i.houseid itemhouseid,i.title itemtitle,m.id mediaid,m.archived,m.length,m.itemtypeid mediaitemtypeid,m.houseid mediahouseid,m.title mediatitle,mf.houseid mediafilehouseid \r
+ FROM ITEM i, MEDIA m, MEDIAFILE mf WHERE m.itemid = i.id AND mf.mediaid = m.id AND mf.storeid = 1 \r
+ AND (CONTAINS(mf.houseId, 'trend*') >= 1)\r
+)) ORDER BY itemtitle desc, mediaitemtypeid
\ No newline at end of file
\r
void disconnect();\r
\r
+ void executeQuery(String query, IResultSetConsumer consumer, IStatementDecorator decorator);\r
+\r
/**\r
* A type paraméterből lekéri az entitás DAO objektumát, amin keresztül visszakapjuk az összes entitást.\r
*\r
*/\r
List<ItemType> getDynamicItemTypes();\r
\r
+ long getExistingRundownMedia(String houseid);\r
+\r
/**\r
* Elkéri a FileTypeDAO-tól a bemeneti paraméterként kapott névvel rendelekző FileType-ot.\r
*\r
*/\r
IEntityBase retrieveCached(Class<? extends IEntityBase> baseClass, Object key);\r
\r
- SearchResult<ArchivedMedia> search(String criteria, List<String> searchFilters, int fromResult, int toResult);\r
+ SearchResult<ArchivedMedia> search(String criteria, List<String> searchFilters, String orderBy, boolean orderAscending, int fromResult, int toResult);\r
\r
/**\r
* A bemeneti paraméterként kapott keresési feltételeknek megfelelő Anyagokat lekéri az adatbázisból és SearchResult objektumba csomagolva visszatér.\r
-package user.jobengine.server.IT;\r
+package user.jobengine.db;\r
\r
import java.sql.ResultSet;\r
import java.sql.SQLException;\r
\r
public interface IResultSetConsumer {\r
\r
- void process(ResultSet resultSet) throws SQLException;\r
+ boolean process(ResultSet resultSet) throws SQLException;\r
\r
}\r
-package user.jobengine.server.IT;\r
+package user.jobengine.db;\r
\r
import java.sql.PreparedStatement;\r
import java.sql.SQLException;\r
return resultQuery.toString();\r
}\r
\r
- private PreparedStatement createArchiveMediaSearchStatement(Connection connection, String criteria, List<String> typeIDs) throws SQLException {\r
+ // sql.append("select");\r
+ // sql.append(" ");\r
+ // sql.append("i.id itemid,");\r
+ // sql.append("i.created itemcreated,");\r
+ // sql.append("i.houseid itemhouseid,");\r
+ // sql.append("i.title itemtitle,");\r
+ // sql.append("m.id mediaid,");\r
+ // sql.append("m.created mediacreated,");\r
+ // sql.append("m.archived,");\r
+ // sql.append("m.length,");\r
+ // sql.append("it.name mediatype,");\r
+ // sql.append("m.houseid mediahouseid,");\r
+ // sql.append("m.title mediatitle,");\r
+ // sql.append("mf.id mediafileid,");\r
+ // sql.append("mf.houseid mediafilehouseid");\r
+ // sql.append(" ");\r
+ // sql.append("from mediafile mf");\r
+ // sql.append(" ");\r
+ // sql.append("left outer join media m on (m.id = mf.mediaid)");\r
+ // sql.append(" ");\r
+ // sql.append("left outer join item i on (i.id = m.itemid)");\r
+ // sql.append(" ");\r
+ // sql.append("left outer join itemtype it on (it.id = m.itemtypeid)");\r
+ // sql.append(" ");\r
+ // sql.append("where mf.storeid = 1 and (");\r
+ // sql.append("contains(i.title, ?) >= 1");\r
+ // sql.append(" ");\r
+ // sql.append("or contains(i.description, ?) >= 1");\r
+ // sql.append(" ");\r
+ // sql.append("or contains(m.title, ?) >= 1");\r
+ // sql.append(" ");\r
+ // sql.append("or contains(m.description, ?) >= 1");\r
+ // sql.append(" ");\r
+ // sql.append("or contains(mf.houseid, ?) >= 1");\r
+ // sql.append(")");\r
+ // if (typeIDs != null)\r
+ // sql.append(" and m.itemtypeid in ").append(typeCriteria.toString());\r
+ private PreparedStatement createArchiveMediaSearchStatement(Connection connection, String criteria, String orderBy, boolean orderAscending,\r
+ List<String> typeIDs) throws SQLException {\r
StringBuilder typeCriteria = new StringBuilder();\r
if (typeIDs != null) {\r
typeCriteria.append("(");\r
typeCriteria.append(")");\r
}\r
\r
+ String columNames = getColumnNames();\r
+ StringBuilder innerSql = new StringBuilder();\r
+ innerSql.append("SELECT DISTINCT ");\r
+ innerSql.append(columNames);\r
+ innerSql.append(" FROM ITEM i, MEDIA m, MEDIAFILE mf WHERE m.itemid = i.id AND mf.mediaid = m.id AND mf.storeid = 1");\r
+ if (typeIDs != null) {\r
+ innerSql.append(" AND m.itemtypeid IN ");\r
+ innerSql.append(typeCriteria.toString());\r
+ }\r
+\r
StringBuilder sql = new StringBuilder();\r
sql.append("SELECT * FROM ((");\r
- sql.append("SELECT DISTINCT m.id, m.title,m.itemtypeid,m.archived FROM ITEM i, MEDIA m, MEDIAFILE mf");\r
- sql.append(" WHERE ((CONTAINS(i.title, ?) >= 1) OR (CONTAINS(i.description, ?) >= 1)) AND m.itemid = i.id AND mf.mediaid = m.id");\r
- if (typeIDs != null)\r
- sql.append(" AND m.itemtypeid IN ").append(typeCriteria.toString());\r
- sql.append(")UNION(");\r
- sql.append("SELECT DISTINCT m2.id,m2.title,m2.itemtypeid,m2.archived FROM ITEM i2, MEDIA m2, MEDIAFILE mf2");\r
- sql.append(" WHERE ((CONTAINS(m2.title, ?) >= 1) OR (CONTAINS(m2.description, ?) >= 1)) AND m2.itemid = i2.id AND mf2.mediaid = m2.id");\r
- if (typeIDs != null)\r
- sql.append(" AND m2.itemtypeid IN ").append(typeCriteria.toString());\r
- sql.append(")UNION(");\r
- sql.append("SELECT DISTINCT m3.id,m3.title,m3.itemtypeid,m3.archived FROM ITEM i3, MEDIA m3, MEDIAFILE mf3");\r
- sql.append(" WHERE (CONTAINS(mf3.houseId, ?) >= 1) AND m3.itemid = i3.id AND mf3.mediaid = m3.id");\r
- if (typeIDs != null)\r
- sql.append(" AND m3.itemtypeid IN ").append(typeCriteria.toString());\r
- sql.append(")) ORDER BY itemtypeid,archived desc");\r
+ sql.append(innerSql);\r
+ sql.append(" AND ((CONTAINS(i.title, ?) >= 1) OR (CONTAINS(i.description, ?) >= 1))");\r
+ sql.append(") UNION (");\r
+ sql.append(innerSql);\r
+ sql.append(" AND ((CONTAINS(m.title, ?) >= 1) OR (CONTAINS(m.description, ?) >= 1))");\r
+ sql.append(") UNION (");\r
+ sql.append(innerSql);\r
+ sql.append(" AND (CONTAINS(mf.houseId, ?) >= 1)");\r
+ sql.append(")) ORDER BY ");\r
+\r
+ if (orderBy == null) {\r
+ sql.append("itemtitle desc, mediaitemtypeid");\r
+ } else {\r
+ sql.append(orderBy);\r
+ sql.append(orderAscending ? " ASC" : " DESC");\r
+ }\r
\r
String query = sql.toString();\r
+ logger.info(query);\r
PreparedStatement st = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);\r
\r
for (int s = 1; s <= 5; s++) {\r
return st;\r
}\r
\r
+ private String getColumnNames() {\r
+ StringBuilder columns = new StringBuilder();\r
+ columns.append("i.houseid itemhouseid,");\r
+ columns.append("i.title itemtitle,");\r
+ columns.append("m.id mediaid,");\r
+ columns.append("m.archived,");\r
+ columns.append("m.length,");\r
+ columns.append("m.itemtypeid mediaitemtypeid,");\r
+ columns.append("m.houseid mediahouseid,");\r
+ columns.append("m.title mediatitle,");\r
+ columns.append("mf.houseid mediafilehouseid");\r
+ return columns.toString();\r
+ }\r
+\r
private List<SearchResult> getResultHeaders(Connection connection, QueryObject queryObject, String innerQuery) {\r
List<SearchResult> results = new ArrayList<SearchResult>();\r
String typeQuery;\r
return result;\r
}\r
\r
- public SearchResult<ArchivedMedia> searchArchivedMedia(String criteria, List<String> searchFilters, int fromResult, int toResult) {\r
+ public SearchResult<ArchivedMedia> searchArchivedMedia(String criteria, List<String> searchFilters, String orderBy, boolean orderAscending, int fromResult,\r
+ int toResult) {\r
SearchResult<ArchivedMedia> result = new SearchResult<>();\r
\r
List<String> typeIDs = getTypeIDs(searchFilters);\r
Connection connection = context.getConnection();\r
try {\r
\r
- st = createArchiveMediaSearchStatement(connection, criteria, typeIDs);\r
+ st = createArchiveMediaSearchStatement(connection, criteria, orderBy, orderAscending, typeIDs);\r
rs = st.executeQuery();\r
rs.last();\r
result.setItemCount(rs.getRow());\r
logger.info("Processing query result, maxRecords {}", maxRecords);\r
while (rs.next() && maxRecords > 0) {\r
ArchivedMedia am = new ArchivedMedia();\r
- Media media = manager.getMedia(rs.getLong("id"));\r
+ Media media = manager.getMedia(rs.getLong("mediaid"));\r
am.setMedia(media);\r
Item item = manager.getItem(media.getItemId());\r
am.setItem(item);\r
traceOut();\r
}\r
\r
+ @Override\r
+ public void executeQuery(String query, IResultSetConsumer consumer, IStatementDecorator decorator) {\r
+ ResultSet rs = null;\r
+ PreparedStatement st = null;\r
+ DefaultContext context = getDbContext();\r
+ Connection connection = context.getConnection();\r
+ try {\r
+ st = connection.prepareStatement(query);\r
+ if (decorator != null)\r
+ decorator.decorate(st);\r
+ rs = st.executeQuery();\r
+ while (rs.next()) {\r
+ if (!consumer.process(rs))\r
+ break;\r
+ }\r
+\r
+ connection.commit();\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ try {\r
+ connection.rollback();\r
+ } catch (Exception e1) {\r
+ }\r
+ } finally {\r
+ try {\r
+ if (rs != null)\r
+ rs.close();\r
+ } catch (Exception e1) {\r
+ }\r
+ try {\r
+ if (st != null)\r
+ st.close();\r
+ } catch (Exception e1) {\r
+ }\r
+ putDbContext(context);\r
+ }\r
+ }\r
+\r
@Override\r
public IEntityBase get(Class<? extends IEntityBase> classInfo, long id) {\r
traceIn();\r
return result;\r
}\r
\r
+ @Override\r
+ public long getExistingRundownMedia(String houseid) {\r
+ final long[] result = { 0 };\r
+ StringBuilder query = new StringBuilder();\r
+ query.append("select itemid, mediaid, replace(mediafilehouseid, concat('-', concat(itemhouseid,'.MXF')), '') filename");\r
+ query.append(" ");\r
+ query.append("from vw_items where replace(mediafilehouseid, concat('-', itemhouseid), '') != mediafilehouseid");\r
+ query.append(" ");\r
+ query.append("and replace(mediafilehouseid, concat('-', concat(itemhouseid,'.MXF')), '') = ?");\r
+ IStatementDecorator decorator = st -> {\r
+ st.setString(1, houseid);\r
+ };\r
+ IResultSetConsumer consumer = rs -> {\r
+ result[0] = rs.getLong("mediaid");\r
+ return false;\r
+ };\r
+ executeQuery(query.toString(), consumer, decorator);\r
+ return result[0];\r
+ }\r
+\r
@Override\r
public FileType getFileType(String name) {\r
FileTypeDAO dao = (FileTypeDAO) getBaseDAO(FileType.class);\r
}\r
\r
@Override\r
- public SearchResult<ArchivedMedia> search(String criteria, List<String> searchFilters, int fromResult, int toResult) {\r
+ public SearchResult<ArchivedMedia> search(String criteria, List<String> searchFilters, String orderBy, boolean orderAscending, int fromResult,\r
+ int toResult) {\r
traceIn();\r
SearchResult<ArchivedMedia> result = null;\r
ItemDAOEx itemDb = new ItemDAOEx(this);\r
- result = itemDb.searchArchivedMedia(criteria, searchFilters, fromResult, toResult);\r
+ result = itemDb.searchArchivedMedia(criteria, searchFilters, orderBy, orderAscending, fromResult, toResult);\r
traceOut();\r
return result;\r
}\r
<?xml version="1.0" encoding="UTF-8"?>\r
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="user.jobengine.osgi.server" activate="activate" deactivate="deactivate">\r
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="user.jobengine.osgi.server" activate="startup" deactivate="shutdown">\r
<implementation class="user.jobengine.server.JobEngine"/>\r
<!-- \r
<reference bind="bindService" cardinality="1..1" interface="user.jobengine.server.IJobEngine" name="IJobEngine" policy="static" unbind="unbindService"/>\r
.z-row:hover>.z-row-inner>.z-row-content{\r
text-color: black;\r
}\r
+\r
+.RED100 .z-toolbarbutton-content {\r
+ background: #FFCDD2;\r
+}\r
+\r
+.RED200 .z-toolbarbutton-content {\r
+ background: #EF9A9A;\r
+}\r
+\r
+.BROWN100 .z-toolbarbutton-content {\r
+ background: #D7CCC8;\r
+}\r
+\r
+.YELLOW200 .z-toolbarbutton-content {\r
+ background: #FFF59D;\r
+}\r
+\r
+.INDIGO100 .z-toolbarbutton-content {\r
+ background: #C5CAE9;\r
+}\r
+\r
+.INDIGO200 .z-toolbarbutton-content {\r
+ background: #9FA8DA;\r
+}\r
+\r
+.BLUE100 .z-toolbarbutton-content {\r
+ background: #BBDEFB;\r
+}\r
+\r
+.BLUE200 .z-toolbarbutton-content {\r
+ background: #90CAF9; \r
+}\r
+\r
+.TEAL100 .z-toolbarbutton-content {\r
+ background: #B2DFDB;\r
+}\r
+\r
+.TEAL200 .z-toolbarbutton-content {\r
+ background: #80CBC4;\r
+}\r
+\r
+.z-toolbarbutton-content {\r
+ text-shadow: none;\r
+ background: transparent;\r
+ border: 1px solid transparent;\r
+ border-radius: 3px;\r
+ margin: 1px;\r
+}\r
+\r
+.toolbar {\r
+ padding:1px;\r
+ background:none;\r
+ border:0px;\r
+}\r
+\r
+.typefilter{\r
+ font-size:9px;\r
+ padding:0px;\r
+ margin:0px;\r
+ background: none;\r
+}\r
+\r
+.z-toolbarbutton:hover {\r
+ background:transparent;\r
+}\r
+\r
+.ie8 .z-toolbarbutton:active {\r
+ background:transparent;\r
+}\r
+\r
+.ie8 .z-toolbarbutton-checked {\r
+ background:transparent;\r
+}\r
+\r
</style>\r
<div id="scdiv" width="100%" height="100%" apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('user.jobengine.zk.model.SearchModel')">\r
<timer id="timer" delay="100" repeats="true" onTimer="@command('uiTick')" />\r
<groupbox vflex="min" closable="false">\r
<vlayout>\r
<hbox pack="left" align="top">\r
- <checkbox checked="@bind(vm.allChecked)" style="font-size:10px" />\r
+ <toolbar class="toolbar">\r
+ <toolbarbutton label="Mind" style="font-size:9px;padding:0px;margin:0px 10px 0px 0px;background:none;" mode="toggle"\r
+ checked="@bind(vm.allChecked)" />\r
+ </toolbar>\r
<vlayout>\r
- <toolbar style="padding:1px;background:none;border:0px;">\r
+ <toolbar class="toolbar">\r
<forEach items="@load(vm.topTypeFilterNames)">\r
- <toolbarbutton image="@load(c:cat('/img/types/', vm.typeIcons[each]))" style="font-size:9px;padding:0px;margin:0px;background:none;" label="@load(each)" mode="toggle"\r
- checked="@bind(vm.typeFilters[each]) @validator(vm.allFilterCheckedValidator)" />\r
+ <toolbarbutton label="@load(each)" mode="toggle"\r
+ image="@load(c:cat('/img/types/', vm.typeFilters[each].icon))" \r
+ checked="@bind(vm.typeFilters[each].checked) @validator(vm.allFilterCheckedValidator)"\r
+ class="@load(c:cat(vm.typeFilters[each].color, ' typefilter'))" />\r
</forEach>\r
</toolbar>\r
- <toolbar style="padding:1px;background:none;border:0px;">\r
+ <toolbar class="toolbar">\r
<forEach items="@load(vm.bottomTypeFilterNames)">\r
- <toolbarbutton image="@load(c:cat('/img/types/', vm.typeIcons[each]))" style="font-size:9px;padding:0px;margin:0px;background:none;" label="@load(each)" mode="toggle"\r
- checked="@bind(vm.typeFilters[each]) @validator(vm.allFilterCheckedValidator)" />\r
+ <toolbarbutton label="@load(each)" mode="toggle"\r
+ image="@load(c:cat('/img/types/', vm.typeFilters[each].icon))" \r
+ checked="@bind(vm.typeFilters[each].checked) @validator(vm.allFilterCheckedValidator)"\r
+ class="@load(c:cat(vm.typeFilters[each].color, ' typefilter'))" />\r
</forEach>\r
</toolbar>\r
</vlayout>\r
<button hflex="min" image="/img/ic_search_black_18dp.png" onClick="@command('doSearch')" style="width:40px" />\r
</hbox>\r
</groupbox>\r
+ <popup id="sortOther">\r
+ <vlayout vflex="min">\r
+ <radiogroup>\r
+ <radio label="Gyűjtő cím" />\r
+ </radiogroup>\r
+ </vlayout> \r
+ </popup> \r
<groupbox vflex="true" closable="false">\r
<grid id="itemsGrid" sizedByContent="false" span="true" vflex="true" hflex="true" mold="paging" autopaging="false"\r
model="@load(vm.searchResult)" activePage="@bind(vm.activePage)" emptyMessage="Nincs találat!"\r
</column>\r
<column label="ID" sort="auto" hflex="min" align="left" />\r
<column label="Cím" sort="auto" align="left" />\r
- <column label="Fájlnév" hflex="min" align="left" />\r
- <column label="Hossz" hflex="min" align="right" />\r
+ <column label="Fájlnév" sort="auto" hflex="min" align="left" />\r
+ <column label="Hossz" sort="auto" hflex="min" align="right" />\r
+<!-- <column width="20px" align="right" style="cursor: pointer" popup="sortOther" /> -->\r
</columns>\r
<rows id="rows" style="cursor: pointer;" >\r
<template name="model">\r
@Override
public synchronized void bindItemManagerService(IItemManager service) {
- try {
- setItemManager(service);
- startup();
- } catch (Exception e) {
- logger.error("Couldn't bind itemManagerService", e);
- }
+ setItemManager(service);
}
private void bootstrap() throws JobEngineException {
private String catchedFile;\r
private String mediaType;\r
private long duration;\r
+ private long existingMediaId;\r
\r
public String getCatchedFile() {\r
return catchedFile;\r
return duration;\r
}\r
\r
+ public long getExistingMediaId() {\r
+ return existingMediaId;\r
+ }\r
+\r
public String getItemDescription() {\r
return itemDescription;\r
}\r
this.duration = duration;\r
}\r
\r
+ public void setExistingMediaId(long existingMediaId) {\r
+ this.existingMediaId = existingMediaId;\r
+ }\r
+\r
public void setItemDescription(String itemDescription) {\r
this.itemDescription = itemDescription;\r
}\r
private ArrayList<EventListener> eventListenerList = new ArrayList<EventListener>();\r
private IItemManager itemManager = null;\r
private List<String> searchFilters;\r
+ private String orderBy;\r
+ private boolean orderAscending;\r
\r
- public CachedListModel(String searchValue, List<String> searchFilters) {\r
+ public CachedListModel(String searchValue, List<String> searchFilters, String orderBy, boolean orderAscending) {\r
this.searchValue = searchValue;\r
this.searchFilters = searchFilters;\r
+ this.orderBy = orderBy;\r
+ this.orderAscending = orderAscending;\r
this.itemManager = ItemManager.getInstance();\r
- //this.setMultiple(true);\r
reinit();\r
}\r
\r
int endPos = (startPos + rowLimit);\r
endPos = ((this.resultSetSize < 0) || (endPos <= this.resultSetSize)) ? endPos : this.resultSetSize;\r
\r
- SearchResult<ArchivedMedia> sr = this.itemManager.search(formatSearchValue(searchValue), searchFilters, startPos, endPos);\r
+ SearchResult<ArchivedMedia> sr = this.itemManager.search(formatSearchValue(searchValue), searchFilters, orderBy, orderAscending, startPos, endPos);\r
\r
if (sr != null) {\r
if (this.resultSetSize < 0) {\r
import org.zkoss.bind.annotation.ContextType;\r
import org.zkoss.bind.annotation.NotifyChange;\r
import org.zkoss.zk.ui.Component;\r
-import org.zkoss.zk.ui.event.EventListener;\r
+import org.zkoss.zk.ui.event.Event;\r
import org.zkoss.zk.ui.event.MouseEvent;\r
import org.zkoss.zk.ui.event.SortEvent;\r
import org.zkoss.zk.ui.select.Selectors;\r
import org.zkoss.zk.ui.select.annotation.Wire;\r
import org.zkoss.zul.Checkbox;\r
import org.zkoss.zul.Column;\r
-import org.zkoss.zul.Columns;\r
import org.zkoss.zul.Detail;\r
import org.zkoss.zul.Grid;\r
import org.zkoss.zul.Hlayout;\r
private static final String PAGES_MEDIAPLAYER = "/pages/mediaplayer.jsp?mediaurl=";\r
private String[] topTypeFilterNames;\r
private String[] bottomTypeFilterNames;\r
+ private Map<String, TypeFilter> typeFilters;\r
+ private Map<String, String> columnHeaders;\r
private String searchValue = null;\r
private CachedListModel searchResult = null;\r
private ArchivedMedia selectedObject = null;\r
private Validator allFilterCheckedValidator;\r
private Validator itemSelectedValidator;\r
- private Map<String, Boolean> typeFilters;\r
- private Map<String, String> typeIcons;\r
private boolean allChecked = true;\r
private int activePage;\r
private boolean rowsExpanded = true;\r
private boolean allSelected;\r
- private boolean itemSelected;\r
\r
+ private boolean itemSelected;\r
@Wire\r
Rows rows;\r
@Wire\r
Grid itemsGrid;\r
+ private String orderBy;\r
+ private boolean orderAscending;\r
+\r
+ private Map<String, String> topColorClasses;\r
\r
public SearchModel() {\r
typeFilters = new LinkedHashMap<>();\r
- typeFilters.put(NEWS_MATERIAL, true);\r
- typeFilters.put(RAW_NEWS_MATERIAL, true);\r
- typeFilters.put(MATERIAL, true);\r
- typeFilters.put(RAW_MATERIAL, true);\r
- typeFilters.put(PROMO, true);\r
- typeFilters.put(RAW_PROMO, true);\r
- typeFilters.put(AD, true);\r
- typeFilters.put(RAW_AD, true);\r
- typeFilters.put(RECORDING, true);\r
- typeFilters.put(GENERIC, true);\r
+ addTypeFilter(TypeFilter.as(NEWS_MATERIAL, "RED200", "ic_language_black_18dp.png"));\r
+ addTypeFilter(TypeFilter.as(RAW_NEWS_MATERIAL, "RED100", "ic_perm_camera_mic_black_18dp.png"));\r
+ addTypeFilter(TypeFilter.as(MATERIAL, "TEAL200", "ic_theaters_black_18dp.png"));\r
+ addTypeFilter(TypeFilter.as(RAW_MATERIAL, "TEAL100", "ic_invert_colors_black_18dp.png"));\r
+ addTypeFilter(TypeFilter.as(PROMO, "INDIGO200", "ic_picture_in_picture_black_18dp.png"));\r
+ addTypeFilter(TypeFilter.as(RAW_PROMO, "INDIGO100", "ic_bug_report_black_18dp.png"));\r
+ addTypeFilter(TypeFilter.as(AD, "BLUE200", "ic_picture_in_picture_alt_black_18dp.png"));\r
+ addTypeFilter(TypeFilter.as(RAW_AD, "BLUE100", "ic_settings_brightness_black_18dp.png"));\r
+ addTypeFilter(TypeFilter.as(RECORDING, "BROWN100", "ic_group_work_black_18dp.png"));\r
+ addTypeFilter(TypeFilter.as(GENERIC, "YELLOW200", "ic_view_quilt_black_18dp.png"));\r
topTypeFilterNames = new String[] { NEWS_MATERIAL, RAW_NEWS_MATERIAL, RECORDING, GENERIC };\r
bottomTypeFilterNames = new String[] { MATERIAL, RAW_MATERIAL, PROMO, RAW_PROMO, AD, RAW_AD };\r
\r
- typeIcons = new LinkedHashMap<>();\r
- typeIcons.put(NEWS_MATERIAL, "ic_language_black_18dp.png");\r
- typeIcons.put(RAW_NEWS_MATERIAL, "ic_perm_camera_mic_black_18dp.png");\r
- typeIcons.put(MATERIAL, "ic_theaters_black_18dp.png");\r
- typeIcons.put(RAW_MATERIAL, "ic_invert_colors_black_18dp.png");\r
- typeIcons.put(PROMO, "ic_picture_in_picture_black_18dp.png");\r
- typeIcons.put(RAW_PROMO, "ic_bug_report_black_18dp.png");\r
- typeIcons.put(AD, "ic_picture_in_picture_alt_black_18dp.png");\r
- typeIcons.put(RAW_AD, "ic_settings_brightness_black_18dp.png");\r
- typeIcons.put(RECORDING, "ic_group_work_black_18dp.png");\r
- typeIcons.put(GENERIC, "ic_view_quilt_black_18dp.png");\r
+ columnHeaders = new LinkedHashMap<>();\r
+ columnHeaders.put("ID", "mediahouseid");\r
+ columnHeaders.put("Cím", "mediatitle");\r
+ columnHeaders.put("Hossz", "length");\r
+ columnHeaders.put("Fájlnév", "mediafilehouseid");\r
\r
allFilterCheckedValidator = new Validator() {\r
@Override\r
public void validate(ValidationContext ctx) {\r
try {\r
\r
- String label = ctx.getProperty().getProperty();\r
+ TypeFilter typeFilter = (TypeFilter) ctx.getProperty().getBase();\r
boolean isChecked = (boolean) ctx.getProperty().getValue();\r
- typeFilters.put(label, isChecked);\r
+ typeFilter.setChecked(isChecked);\r
//logger.info("{} {}", label, isChecked);\r
} catch (Exception e) {\r
\r
};\r
}\r
\r
+ private void addTypeFilter(TypeFilter typeFilter) {\r
+ typeFilters.put(typeFilter.getName(), typeFilter);\r
+ }\r
+\r
@AfterCompose\r
public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
Selectors.wireComponents(view, this, false);\r
Selectors.wireEventListeners(view, this);\r
itemsGrid.getPagingChild().setAutohide(false);\r
- Columns columns = itemsGrid.getColumns();\r
- for (Component child : columns.getChildren()) {\r
+ for (Component child : itemsGrid.getColumns().getChildren()) {\r
Column column = (Column) child;\r
- column.addEventListener("onSort", new EventListener<SortEvent>() {\r
- @Override\r
- public void onEvent(SortEvent evt) throws Exception {\r
- for (Component child : columns.getChildren()) {\r
- Column column = (Column) child;\r
- column.setSortDirection("natural");\r
- }\r
- Column column = (Column) evt.getTarget();\r
- if (evt.isAscending())\r
- column.setSortDirection("ascending");\r
- else\r
- column.setSortDirection("descending");\r
- logger.info("{} {}", column.getLabel(), evt.isAscending());\r
- evt.stopPropagation();\r
- }\r
- });\r
+ column.addEventListener("onSort", evt -> doSort(evt));\r
}\r
}\r
\r
@Command\r
- @NotifyChange({ "activePage", "searchResult", "selectedObject", "hasLowresMediaFile" })\r
+ @NotifyChange({ "activePage", "searchResult", "selectedObject", "hasLowresMediaFile", "lowresMediaFilePath" })\r
public void doSearch() {\r
try {\r
this.selectedObject = null;\r
\r
List<String> searchFilters = getSelectedFilters();\r
\r
- searchResult = new CachedListModel(searchValue, searchFilters);\r
+ searchResult = new CachedListModel(searchValue, searchFilters, orderBy, orderAscending);\r
} catch (Exception e) {\r
Messagebox.show(e.getMessage());\r
logger.catching(e);\r
}\r
}\r
\r
+ public void doSort(Event event) throws Exception {\r
+ itemsGrid.getColumns().getChildren().forEach(c -> ((Column) c).setSortDirection("natural"));\r
+ SortEvent evt = (SortEvent) event;\r
+ Column column = (Column) evt.getTarget();\r
+ column.setSortDirection(evt.isAscending() ? "ascending" : "descending");\r
+ logger.info("{} {}", column.getLabel(), evt.isAscending());\r
+\r
+ orderBy = columnHeaders.get(column.getLabel());\r
+ orderAscending = evt.isAscending();\r
+ doSearch();\r
+ NotifyChange("activePage", "searchResult", "selectedObject", "hasLowresMediaFile", "lowresMediaFilePath");\r
+\r
+ evt.stopPropagation();\r
+ }\r
+\r
@Command\r
public void downloadMedia() {\r
if (!getHasTSMMediaFile())\r
List<String> result = null;\r
if (!allChecked) {\r
for (String label : typeFilters.keySet()) {\r
- boolean isChecked = typeFilters.get(label);\r
+ boolean isChecked = typeFilters.get(label).isChecked();\r
if (!isChecked)\r
continue;\r
if (result == null)\r
return selectedObject;\r
}\r
\r
+ public Map<String, String> getTopColorClasses() {\r
+ return topColorClasses;\r
+ }\r
+\r
public String[] getTopTypeFilterNames() {\r
return topTypeFilterNames;\r
}\r
return ret;\r
}\r
\r
- public Map<String, Boolean> getTypeFilters() {\r
+ public Map<String, TypeFilter> getTypeFilters() {\r
return typeFilters;\r
}\r
\r
- public Map<String, String> getTypeIcons() {\r
- return typeIcons;\r
- }\r
-\r
private void highlight(ArchivedMedia am, boolean highlight) {\r
if (am == null)\r
return;\r
public void setAllChecked(boolean allChecked) {\r
this.allChecked = allChecked;\r
for (String key : typeFilters.keySet())\r
- typeFilters.put(key, allChecked);\r
+ typeFilters.get(key).setChecked(allChecked);\r
}\r
\r
public void setAllFilterCheckedValidator(Validator allFilterCheckedValidator) {\r
public void updateAllChecked() {\r
final boolean[] check = { true };\r
for (String key : typeFilters.keySet()) {\r
- if (!(boolean) typeFilters.get(key)) {\r
+ if (!typeFilters.get(key).isChecked()) {\r
check[0] = false;\r
break;\r
}\r
--- /dev/null
+package user.jobengine.zk.model;\r
+\r
+public class TypeFilter {\r
+ static public TypeFilter as(String name, String color, String icon) {\r
+ return new TypeFilter(name, color, icon);\r
+ }\r
+\r
+ private String name;\r
+ private String color;\r
+ private String icon;\r
+\r
+ private boolean checked;\r
+\r
+ TypeFilter(String name, String color, String icon) {\r
+ this.name = name;\r
+ this.color = color;\r
+ this.icon = icon;\r
+ this.checked = true;\r
+ }\r
+\r
+ public String getColor() {\r
+ return color;\r
+ }\r
+\r
+ public String getIcon() {\r
+ return icon;\r
+ }\r
+\r
+ public String getName() {\r
+ return name;\r
+ }\r
+\r
+ public boolean isChecked() {\r
+ return checked;\r
+ }\r
+\r
+ public void setChecked(boolean checked) {\r
+ this.checked = checked;\r
+ }\r
+}
\ No newline at end of file
import user.commons.nosql.NoSQLUtils;\r
import user.commons.octopus.OctopusAPI;\r
import user.jobengine.db.IItemManager;\r
+import user.jobengine.db.IResultSetConsumer;\r
+import user.jobengine.db.IStatementDecorator;\r
import user.jobengine.db.Item;\r
import user.jobengine.db.ItemManager;\r
import user.jobengine.db.Media;\r
\r
}\r
\r
- private void executeQuery(String query, IResultSetConsumer consumer, IStatementDecorator decorator) {\r
- ResultSet rs = null;\r
- PreparedStatement st = null;\r
- DefaultContext context = ((ItemManager) manager).getDbContext();\r
- Connection connection = context.getConnection();\r
- try {\r
- st = connection.prepareStatement(query);\r
- if (decorator != null)\r
- decorator.decorate(st);\r
- rs = st.executeQuery();\r
- while (rs.next()) {\r
- consumer.process(rs);\r
- }\r
-\r
- connection.commit();\r
- } catch (Exception e) {\r
- try {\r
- connection.rollback();\r
- } catch (Exception e1) {\r
- }\r
- } finally {\r
- try {\r
- if (rs != null)\r
- rs.close();\r
- } catch (Exception e1) {\r
- }\r
- try {\r
- if (st != null)\r
- st.close();\r
- } catch (Exception e1) {\r
- }\r
- ((ItemManager) manager).putDbContext(context);\r
- }\r
- }\r
-\r
@Test\r
public void generateMissingRecordingsList() throws Exception {\r
// select itemtitle, mediafilehouseid from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%' order by itemtitle, mediafilehouseid\r
if (masterMediaFile[0] == null) {\r
masterMediaFile[0] = mediaFile;\r
System.out.println("Skipping: " + mediaFileHouseId);\r
- return;\r
+ return true;\r
}\r
\r
String path = rs.getString("relativepath");\r
File file = Paths.get(LOWRES_ROOT, path).toFile();\r
duplicateLength[0] += file.length();\r
System.out.println("Inspecting: " + mediaFileHouseId + " now available " + duplicateLength[0]);\r
-\r
+ return true;\r
};\r
- executeQuery(query, consumer, decorator);\r
+ manager.executeQuery(query, consumer, decorator);\r
}\r
\r
@Test\r
IResultSetConsumer consumer = rs -> {\r
String fileName = rs.getString("filename");\r
processLowresDuplicateGroup(fileName);\r
+ return true;\r
};\r
- executeQuery(query, consumer, null);\r
+ manager.executeQuery(query, consumer, null);\r
System.out.println("Available will " + duplicateLength[0]);\r
}\r
\r
} catch (Exception e) {\r
System.out.println("Error processing: " + rundownID);\r
}\r
+ return true;\r
};\r
- executeQuery(query, consumer, null);\r
+\r
+ manager.executeQuery(query, consumer, null);\r
//System.out.println("Available will " + duplicateLength[0]);\r
}\r
\r
dispatcher.setNexioChangeListener(this);
dispatcher.startup();
logger.info("Initialized");
- BundleContext bundleContext = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
- if (bundleContext != null)
- bundleContext.registerService(ClipEventListener.class, dispatcher, null);
+ registerNexioService();
}
public void addSession(Session session) {
sessions.removeAll(deadSessions);
}
+ private void registerNexioService() {
+ BundleContext bundleContext = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
+ if (bundleContext != null) {
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(ClipEventListener.class.getClassLoader());
+ bundleContext.registerService(ClipEventListener.class, dispatcher, null);
+ } catch (Exception e) {
+ logger.catching(e);
+ } finally {
+ Thread.currentThread().setContextClassLoader(tccl);
+ }
+ }
+ }
+
public void removeSession(Session session) {
if (sessions.contains(session))
sessions.remove(session);