From: Vásáry Dániel Date: Mon, 22 Jan 2018 15:14:07 +0000 (+0000) Subject: git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube... X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=7869f7479c7f3f233831823be0d97da1b9ed165c;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C30841 --- diff --git a/server/-configuration/deploy-test-bkup-mediacube-modules.launch b/server/-configuration/deploy-test-bkup-mediacube-modules.launch new file mode 100644 index 00000000..ed06cb2f --- /dev/null +++ b/server/-configuration/deploy-test-bkup-mediacube-modules.launch @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/server/-configuration/log4j2.xml b/server/-configuration/log4j2.xml index f6606e91..b576e7da 100644 --- a/server/-configuration/log4j2.xml +++ b/server/-configuration/log4j2.xml @@ -19,7 +19,7 @@ - @@ -47,7 +47,7 @@ - + diff --git a/server/-configuration/mediacube-auth.properties b/server/-configuration/mediacube-auth.properties new file mode 100644 index 00000000..ec8d3640 --- /dev/null +++ b/server/-configuration/mediacube-auth.properties @@ -0,0 +1,9 @@ +#Archívum felület hitelesítés +auth_enabled=true +ad_host=10.10.254.11 +ad_nonsecureport=3268 +ad_base_dn=DC=intra,DC=echotv,DC=hu +ad_admin_map=G_ECH_U_INFORMATIKUSOK,G_ECH_U_MUSZAKVEZETOK,ECH-ISILON-ADMINS +local_users=user:password +local_admins=root:password +local_jobsubmitters=lebony:lebony \ No newline at end of file diff --git a/server/-configuration/run-mediacube-server-bsh.launch b/server/-configuration/run-mediacube-server-bsh.launch index 9a02b737..164f27ee 100644 --- a/server/-configuration/run-mediacube-server-bsh.launch +++ b/server/-configuration/run-mediacube-server-bsh.launch @@ -19,9 +19,9 @@ - + - + diff --git a/server/-configuration/scheduledjobs.json b/server/-configuration/scheduledjobs.json index 092f719c..403db8eb 100644 --- a/server/-configuration/scheduledjobs.json +++ b/server/-configuration/scheduledjobs.json @@ -46,6 +46,25 @@ ] }, { + "active": false, + "name" : "NEXIO rögzített anyagok másolása az ISILON/ARCHIVE mappába", + "template": "copyforarchive-nexio-recordings.xml", + "executeimmediate": true, + "cronexpression": "0 0 0/1 1/1 * ? *", + "parameters": [ + {"name": "nexioPort", "value": 2098, "type": "java.lang.Integer"}, + {"name": "nexioUserName", "value": "administrator", "type": "java.lang.String"}, + {"name": "nexioPassword", "value": "system", "type": "java.lang.String"}, + {"name": "archiveFtp", "value": "ftp://10.10.1.100/ARCHIVE/TEST", "type": "java.lang.String"}, + {"name": "archiveUserName", "value": "mediacube", "type": "java.lang.String"}, + {"name": "archivePassword", "value": "Broadca5T", "type": "java.lang.String"}, + {"name": "agencies", "value": "schedule-rec", "type": "java.lang.String"}, + {"name": "limit", "value": 10, "type": "java.lang.Integer"}, + {"name": "nexioKillDateDays", "value": 7, "type": "java.lang.Integer"}, + {"name": "nexioAgency", "value": "ARCHIVED", "type": "java.lang.String"} + ] + }, + { "active": false, "name" : "TRAFFIC anyagok visszatöltése", "template": "retrieve-traffic-missing-materials.xml", diff --git a/server/-modules/pom.xml b/server/-modules/pom.xml index 1c58fc6c..7a85d6cb 100644 --- a/server/-modules/pom.xml +++ b/server/-modules/pom.xml @@ -54,6 +54,27 @@ + + + org.apache.maven.plugins + maven-antrun-plugin + 1.1 + + + validate + + run + + + + *** SETTINGS *** + [remote.address] ${remote.address} + [remote.location] ${remote.location} + + + + + org.eclipse.tycho tycho-packaging-plugin diff --git a/server/-product/mediacube.product b/server/-product/mediacube.product index 8aff6869..2f916169 100644 --- a/server/-product/mediacube.product +++ b/server/-product/mediacube.product @@ -9,52 +9,53 @@ -consoleLog -console 5555 - -Xms512m --Xmx1024m --Dfile.encoding=UTF-8 --agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888 --Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory - -#System --Djetty.home=/opt/mediacube/configuration/jetty --Dlog4j.configurationFile=/opt/mediacube/configuration/log4j2.xml --Djobengine.jobsteps.root=/opt/mediacube/configuration/executors --Djobengine.jobtemplates.root=/opt/mediacube/configuration/jobtemplates --Djobengine.jobscheduling.config=/opt/mediacube/configuration/scheduledjobs.json - --Dorg.eclipse.epp.logging.aeri.skipReports=true --Declipse.ignoreApp=true --Dosgi.noShutdown=true --Djobengine.loglevel=INFO --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 - - #Database --Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; --Djobengine.db.user=db2admin --Djobengine.db.password=password --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 - -#Octopus --Djobengine.octopus.api.address=http://10.10.1.11/api/v1 --Djobengine.octopus.api.user=mam --Djobengine.octopus.api.password=napocska --Djobengine.octopus.rundowns.name=rundowns --Djobengine.octopus.storyfolders.name=storyfolders --Djobengine.octopus.stories.name=stories + -Xms512m +-Xmx1024m +-Dfile.encoding=UTF-8 +-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888 +-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -#Selenio --Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl --Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium +#System +-Djetty.home=/opt/mediacube/configuration/jetty +-Dlog4j.configurationFile=/opt/mediacube/configuration/log4j2.xml +-Djobengine.jobsteps.root=/opt/mediacube/configuration/executors +-Djobengine.jobtemplates.root=/opt/mediacube/configuration/jobtemplates +-Djobengine.jobscheduling.config=/opt/mediacube/configuration/scheduledjobs.json +-Dmediacube.auth.location=/opt/mediacube/configuration/mediacube-auth.properties -#Nexio --Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; --Djobengine.nexio.db.user=sa --Djobengine.nexio.db.password=resolve --Dnexio.useMOSGateway=true --Dnexio.host=10.10.1.55 +-Dorg.eclipse.epp.logging.aeri.skipReports=true +-Declipse.ignoreApp=true +-Dosgi.noShutdown=true +-Djobengine.loglevel=INFO +-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 + + #Database +-Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; +-Djobengine.db.user=db2admin +-Djobengine.db.password=password +-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 + +#Octopus +-Djobengine.octopus.api.address=http://10.10.1.11/api/v1 +-Djobengine.octopus.api.user=mam +-Djobengine.octopus.api.password=napocska +-Djobengine.octopus.rundowns.name=rundowns +-Djobengine.octopus.storyfolders.name=storyfolders +-Djobengine.octopus.stories.name=stories + +#Selenio +-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl +-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium + +#Nexio +-Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; +-Djobengine.nexio.db.user=sa +-Djobengine.nexio.db.password=resolve +-Dnexio.useMOSGateway=true +-Dnexio.host=10.10.1.55 -Dnexio.disable=false -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts diff --git a/server/-product/pom.xml b/server/-product/pom.xml index cc77af1a..66a07dde 100644 --- a/server/-product/pom.xml +++ b/server/-product/pom.xml @@ -46,36 +46,6 @@ maven-resources-plugin 2.7 - - copy-resources-1 - install - - copy-resources - - - ${project.build.directory}/products/MediaCube/win32/win32/x86_64/configuration - - - ${basedir}/../-configuration - - dsm.opt - - - - ${basedir}/../user.jobengine.executors/config - - scheduledjobs.json - - - - ${basedir} - - log4j2.xml - - - - - copy-resources-1-lnx install @@ -106,24 +76,6 @@ - - copy-resources-2 - install - - copy-resources - - - ${project.build.directory}/products/MediaCube/win32/win32/x86_64/configuration/executors - - - ${basedir}/../user.jobengine.executors/config - - config.xml - - - - - copy-resources-2-lnx install @@ -142,21 +94,6 @@ - - copy-resources-3 - install - - copy-resources - - - ${project.build.directory}/products/MediaCube/win32/win32/x86_64/configuration/executors - - - ${basedir}/../user.jobengine.executors/bin/user/jobengine/server/steps - - - - copy-resources-3-lnx install @@ -172,21 +109,6 @@ - - copy-resources-4 - install - - copy-resources - - - ${project.build.directory}/products/MediaCube/win32/win32/x86_64/configuration/jobtemplates - - - ${basedir}/../user.jobengine.executors/jobtemplates - - - - copy-resources-4-lnx install @@ -202,21 +124,6 @@ - - copy-resources-5 - install - - copy-resources - - - ${project.build.directory}/products/MediaCube/win32/win32/x86_64/configuration/jetty/etc - - - ${basedir}/../-configuration/jetty-deploy/etc - - - - copy-resources-5-lnx install @@ -232,25 +139,6 @@ - - copy-resources-6 - install - - copy-resources - - - ${project.build.directory}/products/MediaCube/win32/win32/x86_64 - - - ${basedir}/../-configuration - - start-mediacube.sh - stop-mediacube.sh - - - - - copy-resources-6-lnx install @@ -265,6 +153,7 @@ start-mediacube.sh stop-mediacube.sh + mediacube-auth.properties diff --git a/server/user.commons.log4j2/src/user/commons/log4j2/appender/HTMLMailAppender.java b/server/user.commons.log4j2/src/user/commons/log4j2/appender/HTMLMailAppender.java index 7a4dffbf..e957186f 100644 --- a/server/user.commons.log4j2/src/user/commons/log4j2/appender/HTMLMailAppender.java +++ b/server/user.commons.log4j2/src/user/commons/log4j2/appender/HTMLMailAppender.java @@ -40,7 +40,8 @@ public final class HTMLMailAppender extends AbstractAppender { private static final int DEFAULT_BUFFER_SIZE = 512; - private static final ExecutorService executor = Executors.newFixedThreadPool(5); + private static final int CONCURRENT_MAIL_QUEUES = 1; + private static final ExecutorService executor = Executors.newFixedThreadPool(CONCURRENT_MAIL_QUEUES); /** * Create a SmtpAppender. @@ -111,9 +112,8 @@ public final class HTMLMailAppender extends AbstractAppender { final SmtpManager manager = SmtpManager.getSmtpManager(configuration, to, cc, bcc, from, replyTo, subject, smtpProtocol, smtpHost, smtpPort, smtpUsername, smtpPassword, isSmtpDebug, filter.toString(), bufferSize); - if (manager == null) { + if (manager == null) return null; - } return new HTMLMailAppender(name, filter, layout, manager, ignoreExceptions); } diff --git a/server/user.commons.log4j2/src/user/commons/log4j2/appender/SmtpManager.java b/server/user.commons.log4j2/src/user/commons/log4j2/appender/SmtpManager.java index 134524ba..3e747773 100644 --- a/server/user.commons.log4j2/src/user/commons/log4j2/appender/SmtpManager.java +++ b/server/user.commons.log4j2/src/user/commons/log4j2/appender/SmtpManager.java @@ -29,7 +29,6 @@ import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; -import javax.mail.internet.InternetAddress; import javax.mail.internet.InternetHeaders; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; @@ -213,11 +212,14 @@ public class SmtpManager extends AbstractManager { private final FactoryData data; + private String defaultRecipient; + protected SmtpManager(final String name, final Session session, final MimeMessage message, final FactoryData data) { super(null, name); this.session = session; this.message = message; this.data = data; + this.defaultRecipient = data.to; //this.buffer = new CyclicBuffer<>(LogEvent.class, data.numElements); } @@ -294,8 +296,9 @@ public class SmtpManager extends AbstractManager { try { if (appendEvent.getMarker() instanceof MediaCubeMarker) { MediaCubeMarker mcm = (MediaCubeMarker) appendEvent.getMarker(); - message.setRecipient(RecipientType.TO, new InternetAddress(mcm.getTo())); - } + message.setRecipients(RecipientType.TO, mcm.getTo()); + } else + message.setRecipients(RecipientType.TO, defaultRecipient); //final LogEvent[] priorEvents = buffer.removeAll(); // LOG4J-310: log appendEvent even if priorEvents is empty diff --git a/server/user.jobengine.executors/LogCollector.java b/server/user.jobengine.executors/LogCollector.java new file mode 100644 index 00000000..a5835c3b --- /dev/null +++ b/server/user.jobengine.executors/LogCollector.java @@ -0,0 +1,121 @@ +package user.jobengine.server.steps; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; +import org.apache.logging.log4j.core.Appender; +import org.apache.logging.log4j.core.Logger; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.message.Message; +import org.apache.logging.log4j.message.MessageFactory; +import org.apache.logging.log4j.util.ReflectionUtil; + +public class LogCollector extends Logger { + + class CollectedMessage { + private String message; + private Level level; + + CollectedMessage(Level level, Message message) { + this.level = level; + this.message = message.getFormattedMessage(); + } + + @Override + public String toString() { + return String.format("%s %s\r\n", level, message); + } + } + + private static final String LOGCOLLECTOR_FINISH = "LOGCOLLECTOR_FINISH"; + public static Marker FINISH = MarkerManager.getMarker(LOGCOLLECTOR_FINISH); + + public static org.apache.logging.log4j.Logger getLogger() { + Logger logger = (Logger) LogManager.getLogger(ReflectionUtil.getCallerClass(2)); + LogCollector result = new LogCollector(logger.getContext(), logger.getName(), logger.getMessageFactory()); + return result; + } + + private Map> messages = new HashMap<>(); + + protected LogCollector(LoggerContext context, String name, MessageFactory messageFactory) { + super(context, name, messageFactory); + Map appenders = super.getAppenders(); + } + + private void collect(Marker marker, Level level, Message message) { + //LogEvent event = Log4jLogEvent.newBuilder().setMessage(message).setMarker(marker).setLevel(level).setLoggerName(super.getName()).build(); + List msgList = messages.get(marker); + if (msgList == null) { + msgList = new ArrayList<>(); + messages.put(marker, msgList); + } + msgList.add(new CollectedMessage(level, message)); + } + + @Override + public void error(Marker marker, String message) { + Message msg = getMessageFactory().newMessage(message); + collect(marker, Level.ERROR, msg); + super.error(marker, message); + } + + @Override + public void error(Marker marker, String message, Object... params) { + Message msg = getMessageFactory().newMessage(message, params); + collect(marker, Level.ERROR, msg); + super.error(marker, message, params); + } + + private void finish() { + Set markers = messages.keySet(); + for (Marker marker : markers) { + List msgList = messages.get(marker); + StringBuilder sb = new StringBuilder(); + for (CollectedMessage msg : msgList) { + sb.append(msg.toString()); + } + super.info(marker, sb.toString()); + } + messages.clear(); + } + + @Override + public void info(Marker marker, String message) { + Message msg = getMessageFactory().newMessage(message); + collect(marker, Level.INFO, msg); + } + + @Override + public void info(Marker marker, String message, Object... params) { + Message msg = getMessageFactory().newMessage(message, params); + collect(marker, Level.INFO, msg); + } + + @Override + public void info(Object message) { + if (message instanceof Marker && LOGCOLLECTOR_FINISH.equals(((Marker) message).getName())) { + finish(); + return; + } + } + + @Override + public void warn(Marker marker, String message) { + Message msg = getMessageFactory().newMessage(message); + collect(marker, Level.WARN, msg); + } + + @Override + public void warn(Marker marker, String message, Object... params) { + Message msg = getMessageFactory().newMessage(message, params); + collect(marker, Level.WARN, msg); + } +} diff --git a/server/user.jobengine.executors/META-INF/MANIFEST.MF b/server/user.jobengine.executors/META-INF/MANIFEST.MF index 2fc6fbcc..121efda8 100644 --- a/server/user.jobengine.executors/META-INF/MANIFEST.MF +++ b/server/user.jobengine.executors/META-INF/MANIFEST.MF @@ -9,8 +9,7 @@ Require-Bundle: user.jobengine.osgi.commons;bundle-version="1.0.0", org.apache.commons.lang;bundle-version="2.6.0", user.jobengine.osgi.server;bundle-version="1.0.0", user.jobengine.osgi.db, - com.ibm.nosql;bundle-version="4.19.26", - org.apache.logging.log4j.api;bundle-version="2.8.2" + com.ibm.nosql;bundle-version="4.19.26" Bundle-ClassPath: . Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: com.fasterxml.jackson.annotation;version="2.4.5", @@ -23,6 +22,8 @@ Import-Package: com.fasterxml.jackson.annotation;version="2.4.5", javax.ws.rs.core;version="2.0.1", org.apache.commons.io;version="2.2.0", org.apache.commons.net.ftp;version="3.6.0", + org.apache.logging.log4j;version="2.8.2", + org.apache.logging.log4j.message;version="2.8.2", org.jboss.resteasy.client.jaxrs, org.jboss.resteasy.plugins.providers, org.jboss.resteasy.spi, diff --git a/server/user.jobengine.executors/jobtemplates/copyforarchive-nexio-recordings.xml b/server/user.jobengine.executors/jobtemplates/copyforarchive-nexio-recordings.xml new file mode 100644 index 00000000..b9feae22 --- /dev/null +++ b/server/user.jobengine.executors/jobtemplates/copyforarchive-nexio-recordings.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveListBuilderStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveListBuilderStep.java index 01aba298..545e8cc0 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveListBuilderStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveListBuilderStep.java @@ -41,6 +41,7 @@ public class ArchiveListBuilderStep extends JobStep { public static final String MEDIA_HOUSEID = "mediaHouseId"; public static final String MEDIA_TITLE = "mediaTitle"; public static final String MEDIA_DESCRIPTION = "mediaDescription"; + public static final String MEDIA_TYPE = "mediaType"; private static final String DURATION = "duration"; private ArchiveItem createArchiveItem(Path jsonFilePath, Path mediaFilePath, Path catchedFilePath) { @@ -58,6 +59,7 @@ public class ArchiveListBuilderStep extends JobStep { result.setMediaHouseId(getMetadata(dbObject, MEDIA_HOUSEID)); result.setMediaTitle(getMetadata(dbObject, MEDIA_TITLE)); result.setMediaDescription(getMetadata(dbObject, MEDIA_DESCRIPTION)); + result.setMediaType(getMetadata(dbObject, MEDIA_TYPE)); result.setMediaFile(mediaFilePath.toString()); result.setCatchedFile(catchedFilePath.toString()); result.setDuration(NoSQLUtils.asLong(dbObject, DURATION)); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java new file mode 100644 index 00000000..ad37811f --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java @@ -0,0 +1,408 @@ +package user.jobengine.server.steps; + +import java.io.OutputStream; +import java.net.InetAddress; +import java.net.URI; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.net.ftp.FTP; +import org.apache.commons.net.ftp.FTPClient; +import org.apache.commons.net.ftp.FTPReply; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import com.ibm.nosql.json.api.BasicDBList; +import com.ibm.nosql.json.api.BasicDBObject; +import com.ibm.nosql.json.api.DB; +import com.ibm.nosql.json.api.DBCollection; +import com.ibm.nosql.json.api.DBCursor; +import com.ibm.nosql.json.api.DBObject; +import com.ibm.nosql.json.api.QueryBuilder; + +import user.commons.CalendarUtils; +import user.commons.ListUtils; +import user.commons.StoreUri; +import user.commons.nosql.NoSQLUtils; +import user.commons.octopus.IOctopusAPI; +import user.commons.octopus.OctopusAPI; +import user.commons.remotestore.FtpDirectoryLister; +import user.commons.remotestore.RemoteStoreProtocol; +import user.jobengine.db.IItemManager; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class CopyForArchiveNEXIORecordingsStep extends JobStep { + private static final String MEDIATYPE_RECORDING = "Visszarögzített"; + private static final String SCHEDULED_FORMAT = "yyyy.MM.dd HH:mm"; + private static final String STARTTIME_FORMAT = "HHmm"; + private static final Logger logger = LogManager.getLogger(); + private static final String UTF_8 = "utf-8"; + private static final String JSON_EXT = ".json"; + private static final String XML_EXT = ".xml"; + private static final String DURATION = "duration"; + private static final String MXFEXT = ".MXF"; + private static final String NEXIOCLIPS = "nexioclips"; + private static final String LONGNAMEID = "longnameid"; + private static final String ID = "id"; + private static final String EXTAGENCY = "extagency"; + private static final String RECORDDATE = "recorddate"; + private static final SimpleDateFormat startTimeformat = new SimpleDateFormat(STARTTIME_FORMAT); + + private OctopusAPI octopusAPI; + private IItemManager manager; + + private DB db; + private FTPClient sourceFtp; + private FTPClient targetFtp; + private StoreUri sourceUri; + private StoreUri targetUri; + private int nexioKillDateDays; + private String nexioAgency; + private Object[] filterAgencies; + + private int check(int value, String name) { + if (value == 0) { + logger.error(getMarker(), "A folyamat '{}' bemeneti paramétere 0.", name); + throw new NullPointerException(String.format("System is not configured properly, missing '%s' input parameter.", name)); + } + return value; + } + + private String check(String value, String name) { + if (StringUtils.isBlank(value)) { + logger.error(getMarker(), "A folyamat '{}' bemeneti paramétere üres.", name); + throw new NullPointerException(String.format("System is not configured properly, missing '%s' input parameter.", name)); + } + return value; + } + + private void copy(RundownArchive rundownArchive) { + for (StoryArchive storyArchive : rundownArchive.getStoryArchives()) { + for (FileArchive fileArchive : storyArchive.getFileArchives()) { + try { + copyFile(fileArchive, rundownArchive, storyArchive); + logger.info(getMarker(), "Sikeres anyag archiválás a '{}' tükörhöz: '{}'.", rundownArchive.getItemTitle(), fileArchive.getFileName()); + } catch (Exception e) { + logger.error(getMarker(), "Az '{}' anyag archiválása sikertelen. A rendszer üzenete: {}", fileArchive.getFileName(), e.getMessage()); + } + } + } + } + + private void copyFile(FileArchive fileArchive, RundownArchive rundownArchive, StoryArchive storyArchive) throws Exception { + String origFileName = fileArchive.getFileName(); + String videoFileName = origFileName + MXFEXT; + + transferFile(videoFileName, videoFileName); + BasicDBObject metadata = createMetadata(rundownArchive, storyArchive, fileArchive); + transferMetadata(videoFileName, metadata); + createSourceKillDateFile(rundownArchive, origFileName); + } + + private BasicDBObject createMetadata(RundownArchive rundownArchive, StoryArchive storyArchive, FileArchive fileArchive) { + BasicDBObject result = new BasicDBObject(); + result.put("itemHouseId", rundownArchive.getItemHouseId()); + result.put("itemTitle", rundownArchive.getItemTitle()); + result.put("itemDescription", rundownArchive.getItemDesc()); + result.put("userName", "mediacube"); + + result.put("mediaHouseId", storyArchive.getMediaHouseId()); + result.put("mediaTitle", storyArchive.getMediaTitle()); + result.put("mediaDescription", storyArchive.getMediaDesc()); + + result.put("duration", fileArchive.getDuration()); + result.put("mediaType", MEDIATYPE_RECORDING); + return result; + } + + private void createSourceKillDateFile(RundownArchive rundownArchive, String fileName) throws Exception { + logger.info("Create killdate/agency for {}", fileName); + OutputStream outStream = null; + try { + sourceFtp = ((FtpDirectoryLister) sourceUri.getLister()).connect(); + Calendar killDate = CalendarUtils.createCalendar(rundownArchive.getScheduleDate()); + killDate.add(Calendar.DAY_OF_YEAR, nexioKillDateDays); + byte[] killDateFile = EscortFiles.createNEXIOKillDateFile(fileName, killDate.getTime(), null, nexioAgency); + outStream = sourceFtp.storeFileStream(fileName + XML_EXT); + if (outStream == null) { + throw new NullPointerException("Can not open: " + fileName + XML_EXT + " Reply:" + sourceFtp.getReplyString()); + } + outStream.write(killDateFile); + outStream.flush(); + } catch (Exception e) { + logger.catching(e); + throw e; + } finally { + if (outStream != null) + outStream.close(); + sourceUri.cleanUp(); + } + } + + @StepEntry + public Object[] execute(int nexioPort, String nexioUserName, String nexioPassword, String archiveFtp, String archiveUserName, String archivePassword, + String agencies, int limit, int nexioKillDateDays, String nexioAgency, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + setAndCheck(nexioPort, nexioUserName, nexioPassword, archiveFtp, archiveUserName, archivePassword, agencies, limit, nexioKillDateDays, nexioAgency, + jobEngine); + octopusAPI = new OctopusAPI(); + List clips = queryClips(); + processClips(clips, limit); + return null; + } + + private Date getScheduledStart(String clipName, Date recordDate) { + if (StringUtils.isBlank(clipName)) + logger.warn(getMarker(), "A anyagnak nincs neve, ezért nem archiválható.", clipName); + if (recordDate == null) + logger.warn(getMarker(), "A {} anyag rögzítésének ideje nem meghatározható, ezért nem archiválható.", clipName); + + Date timePart = null; + try { + String clipNameTime = clipName.split("_")[0]; + timePart = startTimeformat.parse(clipNameTime); + } catch (ParseException e) { + logger.warn(getMarker(), "A {} anyag neve nem időbélyeggel kezdődik, ezért nem archiválható.", clipName); + return null; + } + return CalendarUtils.createCalendar(CalendarUtils.createCalendar(recordDate), timePart).getTime(); + } + + private RundownArchive processClip(BasicDBObject clip) { + RundownArchive result = null; + String clipName = NoSQLUtils.asString(clip, LONGNAMEID); + Date recordDate = clip.getDate(RECORDDATE); + long duration = NoSQLUtils.asLong(clip, DURATION); + logger.info("Processing {} {}", clipName, recordDate); + Date scheduledStart = getScheduledStart(clipName, recordDate); + if (scheduledStart == null) + return null; + DBObject rundown = octopusAPI.getRundown(scheduledStart); + if (rundown == null) { + logger.warn(getMarker(), "A '{}' anyaghoz nem talllható tükör '{}' kezdéssel, ezért nem archiválható.", clipName, scheduledStart); + return null; + } + + try { + result = processRundow(rundown, clipName, duration); + } catch (Exception e) { + logger.catching(e); + logger.error(getMarker(), "A '{}' anyag metaadatainak transzformálása sikertelen, ezért az nem archiválható. A rendszer hibaüzenete: {}", + e.getMessage()); + return null; + } + return result; + } + + private void processClips(List clips, int limit) { + logger.info(getMarker(), "A folyamat {} archiválható anyagot érzékelt.", clips.size()); + int current = 0; + for (BasicDBObject clip : clips) { + RundownArchive rundownArchive = processClip(clip); + if (rundownArchive == null) + continue; + + copy(rundownArchive); + + current++; + if (current == limit) + break; + setProgress(current * 100 / limit); + } + } + + private RundownArchive processRundow(DBObject r, String clipName, long duration) throws Exception { + BasicDBObject rundown = (BasicDBObject) r; + long rundownID = rundown.getLong(ID); + logger.info("Processing rundown {} {}", rundownID, rundown.getString(IOctopusAPI.NAME)); + + List stories = octopusAPI.getRundownFullStories(rundownID); + if (stories == null) + return null; + RundownArchive result = new RundownArchive(); + + long id = NoSQLUtils.asLong(rundown, IOctopusAPI.ID); + if (id == 0) + return null; + String name = NoSQLUtils.asString(NoSQLUtils.asDBObject(rundown, IOctopusAPI.RUNDOWN_TYPE), IOctopusAPI.NAME); + if (StringUtils.isBlank(name)) + return null; + String channel = NoSQLUtils.asString(NoSQLUtils.asDBObject(rundown, IOctopusAPI.CHANNEL), IOctopusAPI.NAME); + Date scheduledStart = rundown.getDate(IOctopusAPI.SCHEDULED_START); + if (scheduledStart == null) + return null; + String start = CalendarUtils.toString(CalendarUtils.createCalendar(scheduledStart), SCHEDULED_FORMAT); + result.setScheduleDate(scheduledStart); + result.setItemHouseId(String.valueOf(id)); + result.setItemTitle(String.format("%s %s %s", start, name, channel)); + + StringBuilder sb = new StringBuilder(); + for (DBObject s : stories) { + BasicDBObject story = (BasicDBObject) s; + sb.append(story.getString(IOctopusAPI.PARENT_STORY_ID)); + sb.append(" [" + story.getString(IOctopusAPI.FORMAT) + "] "); + sb.append(story.getString(IOctopusAPI.NAME)); + sb.append("\r\n"); + } + StoryArchive storyArchive = new StoryArchive(); + storyArchive.setMediaHouseId(result.getItemHouseId()); + storyArchive.setMediaTitle(clipName); + storyArchive.setMediaDesc(sb.toString()); + result.addStoryArchive(storyArchive); + storyArchive.addFileArchive(new FileArchive(clipName, duration)); + return result; + } + + private List queryClips() { + DBCollection collection = db.getCollection(NEXIOCLIPS); + BasicDBList agencies = new BasicDBList(filterAgencies); + + Calendar now = CalendarUtils.createZeroCalendar(); + QueryBuilder dateQueryBuilder = QueryBuilder.start(RECORDDATE).lessThan(now.getTime()); + QueryBuilder queryBuilder = QueryBuilder.start(EXTAGENCY).in(agencies).and(dateQueryBuilder.get()); + DBCursor cursor = collection.find(queryBuilder.get()).sort(RECORDDATE, -1); + if (!cursor.hasNext()) + return null; + return ListUtils.cast(cursor.toArray()); + } + + private void setAndCheck(int nexioPort, String nexioUserName, String nexioPassword, String archiveFtp, String archiveUserName, String archivePassword, + String agencies, int limit, int nexioKillDateDays, String nexioAgency, IJobEngine jobEngine) throws Exception { + db = NoSQLUtils.getNoSQLDB(); + if (db == null) { + logger.error(getMarker(), "Az NoSQL adatkezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing NoSQL DB reference."); + } + + if (jobEngine == null) { + logger.error(getMarker(), "Az folyamatkezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing JobEngine reference."); + } + manager = jobEngine.getItemManager(); + if (manager == null) { + logger.error(getMarker(), "Az adatbáziskezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing ItemManager reference."); + } + String nexioHost = System.getProperty("nexio.host"); + if (StringUtils.isBlank(nexioHost)) { + logger.error(getMarker(), "A 'nexio.host' rendszer paraméter nem található."); + throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing."); + } + check(nexioPort, "nexioPort"); + check(nexioUserName, "nexioUserName"); + check(nexioPassword, "nexioPassword"); + + check(agencies, "agencies"); + filterAgencies = agencies.split(","); + + check(limit, "limit"); + + check(nexioKillDateDays, "nexioKillDateDays"); + this.nexioKillDateDays = nexioKillDateDays; + check(nexioAgency, "nexioAgency"); + this.nexioAgency = nexioAgency; + + sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost); + sourceUri.setPortNumber(nexioPort); + sourceUri.setUserName(nexioUserName); + sourceUri.setPassword(nexioPassword); + if (sourceUri == null) { + logger.error(getMarker(), "A forrás nem elérhető."); + throw new NullPointerException("Internal error, missing 'sourceUri'."); + } + + check(archiveFtp, "archiveFtp"); + check(archiveUserName, "archiveUserName"); + check(archivePassword, "archivePassword"); + + targetUri = manager.createStoreUri(new URI(archiveFtp)); + targetUri.setUserName(archiveUserName); + targetUri.setPassword(archivePassword); + if (targetUri == null) { + logger.error(getMarker(), "A cél nem elérhető."); + throw new NullPointerException("Internal error, missing 'targetUri'."); + } + + } + + private void transferFile(String sourceFileName, String targetFileName) throws Exception { + int reply = 0; + logger.info("Transfer clip {}", sourceFileName); + try { + sourceFtp = ((FtpDirectoryLister) sourceUri.getLister()).connect(); + targetFtp = ((FtpDirectoryLister) targetUri.getLister()).connect(); + if (!targetFtp.enterRemotePassiveMode()) + throw new Exception("!PASV"); + + reply = sourceFtp.port(InetAddress.getByName(targetFtp.getPassiveHost()), targetFtp.getPassivePort()); + if (!FTPReply.isPositiveCompletion(reply)) + throw new Exception("PORT parancs válasza: " + sourceFtp.getReplyString()); + + if (!sourceFtp.setFileType(FTP.BINARY_FILE_TYPE)) + throw new Exception("!SOURCE TYPE"); + + reply = sourceFtp.retr(sourceFileName); + if (!FTPReply.isPositivePreliminary(reply)) + throw new Exception("RETR parancs válasza: " + sourceFtp.getReplyString()); + + if (!targetFtp.setFileType(FTP.BINARY_FILE_TYPE)) + throw new Exception("!TARGET TYPE"); + + reply = targetFtp.stor(targetFileName); + if (!FTPReply.isPositivePreliminary(reply)) + throw new Exception("STOR parancs válasza: " + sourceFtp.getReplyString()); + + while (true) { + reply = sourceFtp.stat(); + if (!FTPReply.isPositiveCompletion(reply)) + throw new Exception("STAT parancs válasza: " + sourceFtp.getReplyString()); + + logger.info("Status: {}", sourceFtp.getReplyString()); + if (reply == 226) { + break; + } + Thread.sleep(1000); + } + } catch (Exception e) { + logger.catching(e); + throw e; + } finally { + sourceUri.cleanUp(); + targetUri.cleanUp(); + } + + } + + private void transferMetadata(String fileName, BasicDBObject metadata) throws Exception { + logger.info("Transfer metadata {}", fileName); + OutputStream outStream = null; + try { + targetFtp = ((FtpDirectoryLister) targetUri.getLister()).connect(); + if (!targetFtp.changeWorkingDirectory(EscortFiles.STATUSFOLDER)) { + targetFtp.makeDirectory(EscortFiles.STATUSFOLDER); + if (!targetFtp.changeWorkingDirectory(EscortFiles.STATUSFOLDER)) + throw new Exception("!STATUSFOLDER"); + } + + outStream = targetFtp.storeFileStream(fileName + JSON_EXT); + if (outStream == null) { + throw new NullPointerException("Can not open: " + fileName + JSON_EXT + " Reply:" + targetFtp.getReplyString()); + } + outStream.write(metadata.toString().getBytes(UTF_8)); + outStream.flush(); + //targetFtp.changeToParentDirectory(); + } catch (Exception e) { + logger.catching(e); + throw e; + } finally { + if (outStream != null) + outStream.close(); + targetUri.cleanUp(); + } + } + +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeNoParamsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeNoParamsStep.java index ae1878d4..abd1b76f 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeNoParamsStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeNoParamsStep.java @@ -3,6 +3,7 @@ package user.jobengine.server.steps; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import user.commons.MediaCubeMarker; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; @@ -12,23 +13,22 @@ public class FakeNoParamsStep extends JobStep { @StepEntry public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws InterruptedException { - // try { - // logger.warn("| + | FakeNoParams step"); - // jobRuntime.incrementProgress(50); - // Thread.sleep(15000); - // jobRuntime.incrementProgress(100); - // logger.warn("| - | FakeNoParams step"); - // } catch (Exception e) { - // logger.error(e.getMessage()); - // } + MediaCubeMarker toMarker = new MediaCubeMarker("vasary@gmail.com"); + logger.info(toMarker, "A folyamat elindult"); + logger.warn(toMarker, "Egy WARN"); + logger.error(toMarker, "Egy ERROR"); + logger.warn(toMarker, "Egy WARN {}", "paraméterrel"); + logger.error(toMarker, "Egy ERROR {}", "paraméterrel"); for (int i = 0; i < count; i++) { if (!canContinue()) break; jobRuntime.incrementProgress((i + 1) * count); - Thread.sleep(5000); - //logger.info(getMarker(), "Log markered"); + Thread.sleep(100); + logger.info(getMarker(), "Log markered" + i); //logger.info("Progress {}", jobRuntime.getProgress()); } + logger.info(toMarker, "A folyamat véget ért"); + //logger.info(LogCollector.FINISH); return null; } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java index d9a4177c..b259f0d6 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java @@ -8,24 +8,25 @@ import user.jobengine.server.IJobRuntime; public class FakeStep extends JobStep { private static final Logger logger = LogManager.getLogger(); - int count = 10; + private int count = 10; + private StringBuilder sb = new StringBuilder(); @StepEntry public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { - // throw new Exception("42"); Object[] result = { 1 }; try { for (int i = 0; i < count; i++) { + //sb.append("Sikeres iteráció : ") if (!canContinue()) break; jobRuntime.incrementProgress((i + 1) * count); Thread.sleep(500); - //logger.info(getMarker(), "Log markered"); //logger.info("Progress {}", jobRuntime.getProgress()); } } catch (Exception e) { logger.error(e.getMessage()); } + //logger.info(getMarker(), "Log markered"); return result; } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java index 0a0c9ac0..6a7bf76f 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java @@ -2,11 +2,13 @@ package user.jobengine.server.steps; import java.io.File; +import org.apache.commons.lang.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import user.jobengine.db.IItemManager; import user.jobengine.db.Item; +import user.jobengine.db.ItemType; import user.jobengine.db.Media; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; @@ -30,11 +32,23 @@ public class MetadataTransformStep extends JobStep { throw new NullPointerException(ITEM_MANAGER_IS_NULL); Item mediaCubeItem = itemManager.getItemByHouseID(archiveItem.getItemHouseId()); jobRuntime.incrementProgress(50); + if (mediaCubeItem == null) mediaCubeItem = itemManager.createItem(ITEMTYPENAME, archiveItem.getItemTitle(), archiveItem.getItemDescription(), archiveItem.getItemHouseId()); - mediaCubeMedia = itemManager.createMedia(ITEMTYPENAME, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(), - archiveItem.getMediaHouseId()); + + String mediaTypeName = archiveItem.getMediaType(); + if (StringUtils.isBlank(mediaTypeName)) { + mediaCubeMedia = itemManager.createMedia(ITEMTYPENAME, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(), + archiveItem.getMediaHouseId()); + } else { + ItemType itemType = itemManager.getItemType(mediaTypeName); + if (itemType == null) + itemManager.createItemType(mediaTypeName, mediaTypeName).add(); + mediaCubeMedia = itemManager.createMedia(mediaTypeName, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(), + archiveItem.getMediaHouseId()); + } + mediaCubeMedia.setLength(archiveItem.getDuration()); mediaCubeItem.appendMedia(mediaCubeMedia); diff --git a/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF b/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF index b684a1c0..42c7d65a 100644 --- a/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF +++ b/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF @@ -10,7 +10,6 @@ Import-Package: com.fasterxml.jackson.annotation;version="2.4.5", com.fasterxml.jackson.datatype.joda;version="2.4.5", com.fasterxml.jackson.jaxrs.json;version="2.4.5", org.apache.logging.log4j;version="2.8.2", - org.apache.logging.log4j.core;version="2.8.2", org.jboss.resteasy.client.jaxrs, org.jboss.resteasy.plugins.providers, org.jboss.resteasy.spi, diff --git a/server/user.jobengine.osgi.commons/src/user/commons/CalendarUtils.java b/server/user.jobengine.osgi.commons/src/user/commons/CalendarUtils.java index 4b49cfea..1828970a 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/CalendarUtils.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/CalendarUtils.java @@ -36,7 +36,7 @@ public class CalendarUtils { if (timePart == null) { result = createCalendar(datePart); } else { - result = createCalendar(timePart.get(Calendar.HOUR), timePart.get(Calendar.MINUTE), timePart.get(Calendar.SECOND), datePart); + result = createCalendar(timePart.get(Calendar.HOUR_OF_DAY), timePart.get(Calendar.MINUTE), timePart.get(Calendar.SECOND), datePart); } return result; } diff --git a/server/user.jobengine.osgi.commons/src/user/commons/ListUtils.java b/server/user.jobengine.osgi.commons/src/user/commons/ListUtils.java index b8e117c8..fa263bec 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/ListUtils.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/ListUtils.java @@ -5,21 +5,25 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class ListUtils { - private final static Logger logger = LogManager.getLogger(); - private static final String METHOD_GETID = "getId"; - public interface IMapKeyMaker { K getKey(T item); } + private final static Logger logger = LogManager.getLogger(); + + private static final String METHOD_GETID = "getId"; + public static List addAll(List target, Collection source) { List result = target; if (!isEmpty(source)) { @@ -31,6 +35,16 @@ public class ListUtils { return result; } + public static Map asMap(Object... items) throws Exception { + Map result = new HashMap<>(); + if (items.length % 2 != 0) + throw new Exception("Even number of parameters is required."); + for (int i = 0; i < items.length; i = i + 2) { + result.put(String.valueOf(items[i]), items[i + 1]); + } + return result; + } + @SuppressWarnings("unchecked") public static List cast(Collection collection) { @@ -41,6 +55,12 @@ public class ListUtils { return indexOf(collection, item) > -1; } + public static List distinctUnion(List source, List target) { + Set temp = new LinkedHashSet<>(source); + temp.addAll(target); + return new ArrayList<>(temp); + } + public static T get(Collection collection, T item) { T result = null; try { @@ -57,8 +77,8 @@ public class ListUtils { return result; } - private static long getId(Object pojo) throws NoSuchMethodException, SecurityException, IllegalAccessException, - IllegalArgumentException, InvocationTargetException { + private static long getId(Object pojo) + throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Method method = pojo.getClass().getMethod(METHOD_GETID); long result = (long) method.invoke(pojo); return result; @@ -92,6 +112,13 @@ public class ListUtils { return result; } + public static List intersect(List source, List target) { + Set s1 = new HashSet(source); + Set s2 = new HashSet(target); + s1.retainAll(s2); + return new ArrayList<>(s1); + } + public static boolean isEmpty(Collection collection) { return collection == null || collection.isEmpty(); } @@ -115,14 +142,4 @@ public class ListUtils { collection.add(index, item); } - public static Map asMap(Object... items) throws Exception { - Map result = new HashMap<>(); - if (items.length % 2 != 0) - throw new Exception("Even number of parameters is required."); - for (int i = 0; i < items.length; i = i + 2) { - result.put(String.valueOf(items[i]), items[i + 1]); - } - return result; - } - } diff --git a/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java b/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java index 824d4c05..c4505874 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java @@ -43,6 +43,8 @@ public interface IOctopusAPI { static final String STORYID = "storyId"; static final String FORMAT = "format"; + DBObject getRundown(Date scheduledDate); + List getRundownFullStories(long id); List getRundowns(Date scheduledDate); diff --git a/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusAPI.java b/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusAPI.java index 3ed09ab8..b9679a43 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusAPI.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusAPI.java @@ -71,6 +71,16 @@ public class OctopusAPI implements IOctopusAPI { return result; } + @Override + public DBObject getRundown(Date scheduledDate) { + DBObject result = null; + DBCollection collection = db.getCollection(RUNDOWN_COLLECTION); + DBCursor find = collection.find(new BasicDBObject(SCHEDULED_START, scheduledDate)); + if (find.hasNext()) + result = find.next(); + return result; + } + @Override public List getRundownFullStories(long id) { List result = null; diff --git a/server/user.jobengine.osgi.commons/test/user/commons/TestMediaCubeMarker.java b/server/user.jobengine.osgi.commons/test/user/commons/TestMediaCubeMarker.java new file mode 100644 index 00000000..f8b863d5 --- /dev/null +++ b/server/user.jobengine.osgi.commons/test/user/commons/TestMediaCubeMarker.java @@ -0,0 +1,13 @@ +package user.commons; + +import org.apache.logging.log4j.Marker; +import org.junit.Test; + +public class TestMediaCubeMarker { + @Test + public void test() throws Exception { + MediaCubeMarker sut = new MediaCubeMarker("valami"); + Marker[] parents = sut.getParents(); + } + +} diff --git a/server/user.jobengine.osgi.db/META-INF/MANIFEST.MF b/server/user.jobengine.osgi.db/META-INF/MANIFEST.MF index 666e72a3..11d166a0 100644 --- a/server/user.jobengine.osgi.db/META-INF/MANIFEST.MF +++ b/server/user.jobengine.osgi.db/META-INF/MANIFEST.MF @@ -10,10 +10,10 @@ Require-Bundle: user.jobengine.osgi.commons;bundle-version="1.0.0", com.ibm.nosql;bundle-version="4.19.26";visibility:=reexport, org.jmock.junit4;bundle-version="2.6.0", org.junit;bundle-version="4.12.0", - org.jmock;bundle-version="2.6.0", - org.apache.logging.log4j.api;bundle-version="2.8.2" + org.jmock;bundle-version="2.6.0" Service-Component: OSGI-INF/component.xml Bundle-ActivationPolicy: lazy -Import-Package: com.fasterxml.jackson.annotation;version="2.4.5" +Import-Package: com.fasterxml.jackson.annotation;version="2.4.5", + org.apache.logging.log4j;version="2.8.2" Export-Package: user.jobengine.db diff --git a/server/user.jobengine.osgi.db/test/user/jobengine/db/TestBase.java b/server/user.jobengine.osgi.db/test/user/jobengine/db/TestBase.java index b9c67494..1cf8f58c 100644 --- a/server/user.jobengine.osgi.db/test/user/jobengine/db/TestBase.java +++ b/server/user.jobengine.osgi.db/test/user/jobengine/db/TestBase.java @@ -34,8 +34,7 @@ public class TestBase { // System.setProperty(ItemManager.DBPASSWORD, "password"); // System.setProperty(LogUtils.LOGLEVEL, "INFO"); - System.setProperty(ItemManager.DBURL, - "jdbc:db2://10.10.1.26:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); System.setProperty(ItemManager.DBUSERNAME, "db2admin"); System.setProperty(ItemManager.DBPASSWORD, "password"); System.setProperty(LogUtils.LOGLEVEL, "INFO"); diff --git a/server/user.jobengine.osgi.db/test/user/jobengine/db/TestItem.java b/server/user.jobengine.osgi.db/test/user/jobengine/db/TestItem.java index 39c60be1..ef3ccc69 100644 --- a/server/user.jobengine.osgi.db/test/user/jobengine/db/TestItem.java +++ b/server/user.jobengine.osgi.db/test/user/jobengine/db/TestItem.java @@ -24,6 +24,9 @@ public class TestItem extends TestBase { @BeforeClass public static void initialize() { + if (manager.getItemType("Visszarögzített") == null) + manager.createItemType("Visszarögzített", "Visszarögzített").add(); + // TestDB.createStructure(); // TestDB.createItemTypes(); if (manager.getStaticItemType() == null) diff --git a/server/user.jobengine.osgi.server/.settings/org.eclipse.core.resources.prefs b/server/user.jobengine.osgi.server/.settings/org.eclipse.core.resources.prefs index b482124a..0813a5b5 100644 --- a/server/user.jobengine.osgi.server/.settings/org.eclipse.core.resources.prefs +++ b/server/user.jobengine.osgi.server/.settings/org.eclipse.core.resources.prefs @@ -1,2 +1,3 @@ eclipse.preferences.version=1 +encoding//pages/login.zul=UTF-8 encoding//src/user/jobengine/server/JobRuntime.java=UTF-8 diff --git a/server/user.jobengine.osgi.server/META-INF/MANIFEST.MF b/server/user.jobengine.osgi.server/META-INF/MANIFEST.MF index 4c2176b3..51b3e221 100644 --- a/server/user.jobengine.osgi.server/META-INF/MANIFEST.MF +++ b/server/user.jobengine.osgi.server/META-INF/MANIFEST.MF @@ -6,15 +6,8 @@ Bundle-Version: 1.0.0 Service-Component: OSGI-INF/component.xml Import-Package: javax.servlet;version="3.1.0", javax.servlet.http;version="3.1.0", - org.apache.logging.log4j.core;version="2.8.2", - org.apache.logging.log4j.core.appender;version="2.8.2", - org.apache.logging.log4j.core.config;version="2.8.2", - org.apache.logging.log4j.core.config.plugins;version="2.8.2", - org.apache.logging.log4j.core.config.plugins.validation.constraints;version="2.8.2", - org.apache.logging.log4j.core.filter;version="2.8.2", - org.apache.logging.log4j.core.layout;version="2.8.2", - org.apache.logging.log4j.core.net;version="2.8.2", - org.apache.logging.log4j.core.util;version="2.8.2", + org.apache.logging.log4j;version="2.8.2", + org.apache.logging.log4j.message;version="2.8.2", org.eclipse.core.runtime.adaptor, org.eclipse.osgi.framework.console;version="1.1.0", org.osgi.framework;version="1.5.0", @@ -28,8 +21,7 @@ Require-Bundle: user.jobengine.osgi.db;bundle-version="1.0.0", org.junit;bundle-version="4.12.0", org.jmock;bundle-version="2.6.0", org.jmock.junit4;bundle-version="2.6.0", - org.apache.servicemix.bundles.quartz;bundle-version="2.2.2", - org.apache.logging.log4j.api;bundle-version="2.8.2" + org.apache.servicemix.bundles.quartz;bundle-version="2.2.2" Export-Package: user.jobengine.osgi.server, user.jobengine.server, user.jobengine.server.ast, diff --git a/server/user.jobengine.osgi.server/index.jsp b/server/user.jobengine.osgi.server/index.jsp index 256475de..de97bff5 100644 --- a/server/user.jobengine.osgi.server/index.jsp +++ b/server/user.jobengine.osgi.server/index.jsp @@ -1,5 +1,5 @@ - +<%@ page import="java.util.*, java.io.*, java.net.*, user.jobengine.zk.util.SessionUtil"%> + <% - pageContext.forward("/pages/login.jsp"); - //response.sendRedirect("/pages/login.jsp"); + pageContext.forward("/pages/index.zul"); %> \ No newline at end of file diff --git a/server/user.jobengine.osgi.server/pages/joblist.zul b/server/user.jobengine.osgi.server/pages/joblist.zul index 6d4c1725..765a5bf3 100644 --- a/server/user.jobengine.osgi.server/pages/joblist.zul +++ b/server/user.jobengine.osgi.server/pages/joblist.zul @@ -1,6 +1,6 @@ - +