git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 16 Feb 2018 14:56:25 +0000 (14:56 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 16 Feb 2018 14:56:25 +0000 (14:56 +0000)
13 files changed:
server/user.jobengine.executors/src/user/jobengine/server/steps/FakeNoParamsStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/ForkStep.java [deleted file]
server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManagerData.java
server/user.jobengine.osgi.db/test/user/jobengine/db/Support.java [new file with mode: 0644]
server/user.jobengine.osgi.db/test/user/jobengine/db/Support_new.java [new file with mode: 0644]
server/user.jobengine.osgi.server/WEB-INF/web.xml
server/user.jobengine.osgi.server/pages/database.zul [new file with mode: 0644]
server/user.jobengine.osgi.server/pages/menu.zul
server/user.jobengine.osgi.server/src/user/jobengine/server/IJobRuntime.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobRuntime.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/DatabaseModel.java [new file with mode: 0644]

index 03cadcfb2f476a4019483d3e6aeaa3f589c9b861..cdf70a2f56cd42594876f8948fe29a0d3306987c 100644 (file)
@@ -1,16 +1,9 @@
 package user.jobengine.server.steps;\r
 \r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.List;\r
-import java.util.concurrent.Semaphore;\r
-\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
 \r
 import user.commons.ListUtils;\r
-import user.jobengine.db.ItemManagerData.SignalType;\r
-import user.jobengine.server.IJobChangedListener;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
 \r
@@ -18,37 +11,18 @@ public class FakeNoParamsStep extends JobStep {
        private static final String CHILD_TITLE = "Párhuzamosított alfolyamat";\r
        private static final String CHILD_TEMPLATE = "fake-concurrent.xml";\r
        private static final Logger logger = LogManager.getLogger();\r
-       int count = 10;\r
+       int count = 2;\r
 \r
        @StepEntry\r
        public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
-               final Semaphore semaphore = new Semaphore(1);\r
-               List<Long> childrenIDs = Collections.synchronizedList(new ArrayList<>());\r
-\r
-               IJobChangedListener listener = event -> {\r
-                       IJobRuntime child = event.getJob();\r
-                       if (event.getSignalType().equals(SignalType.CREATE)) {\r
-                               if (child.getParentJobId() == jobRuntime.getId()) {\r
-                                       childrenIDs.add(child.getId());\r
-                               }\r
-\r
-                               if (child.getParentJobId() != jobRuntime.getId() && childrenIDs.contains(child.getParentJobId())) {\r
-                                       childrenIDs.add(child.getId());\r
-                               }\r
+               if (jobRuntime.forkPrepare()) {\r
+                       for (int i = 0; i < count; i++) {\r
+                               jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i));\r
                        }\r
-                       if (event.getSignalType().equals(SignalType.DELETE) && childrenIDs.contains(child.getId())) {\r
-                               childrenIDs.remove(child.getId());\r
-                               if (childrenIDs.size() == 0)\r
-                                       semaphore.release();\r
-                       }\r
-               };\r
-               jobEngine.addJobChangedEventListener(listener);\r
-               semaphore.acquire();\r
-               for (int i = 0; i < count; i++) {\r
-                       jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i));\r
                }\r
-               semaphore.acquire();\r
-               jobEngine.removeJobChangedEventListener(listener);\r
+\r
+               jobRuntime.forkWaitComplete();\r
+               logger.info("Done");\r
                return null;\r
        }\r
 }\r
index c3b694d4ace6a0fc202cfee3ebd5fc24711a5bc2..b5ca3150c044038f05ce07b71369d1ce970e4baf 100644 (file)
@@ -2,6 +2,7 @@ package user.jobengine.server.steps;
 \r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.message.Message;\r
 \r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
@@ -15,8 +16,9 @@ public class FakeStep extends JobStep {
        public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
                Object[] result = { itemID + 1 };\r
 \r
-               logger.info(jobRuntime.getMarker(), "Starting with {}", itemID);\r
-               logger.error(jobRuntime.getMarker(), "Error with {}", itemID);\r
+               //logger.info(jobRuntime.getMarker(), "Starting with {} #{}", itemID, jobRuntime.getId());\r
+               Message message = logger.getMessageFactory().newMessage("Starting with {} #{}", itemID, jobRuntime.getId());\r
+               logger.error(jobRuntime.getMarker(), message, new Exception("TESZT"));\r
                try {\r
                        for (int i = 0; i < count; i++) {\r
                                //sb.append("Sikeres iteráció : ")\r
@@ -29,7 +31,6 @@ public class FakeStep extends JobStep {
                } catch (Exception e) {\r
                        logger.error(e.getMessage());\r
                }\r
-               logger.info(jobRuntime.getMarker(), "Resulting {}", result[0]);\r
                return result;\r
        }\r
 \r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkStep.java
deleted file mode 100644 (file)
index fe17d20..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-package user.jobengine.server.steps;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.List;\r
-import java.util.concurrent.Semaphore;\r
-\r
-import user.jobengine.db.ItemManagerData.SignalType;\r
-import user.jobengine.server.IJobChangedListener;\r
-import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.IJobRuntime;\r
-\r
-public abstract class ForkStep extends JobStep {\r
-\r
-       @StepEntry\r
-       public void execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
-               final Semaphore semaphore = new Semaphore(1);\r
-               List<Long> childrenIDs = Collections.synchronizedList(new ArrayList<>());\r
-\r
-               IJobChangedListener listener = event -> {\r
-                       IJobRuntime child = event.getJob();\r
-                       if (event.getSignalType().equals(SignalType.CREATE)) {\r
-                               if (child.getParentJobId() == jobRuntime.getId()) {\r
-                                       childrenIDs.add(child.getId());\r
-                               }\r
-\r
-                               if (child.getParentJobId() != jobRuntime.getId() && childrenIDs.contains(child.getParentJobId())) {\r
-                                       childrenIDs.add(child.getId());\r
-                               }\r
-                       }\r
-                       if (event.getSignalType().equals(SignalType.DELETE) && childrenIDs.contains(child.getId())) {\r
-                               childrenIDs.remove(child.getId());\r
-                               if (childrenIDs.size() == 0)\r
-                                       semaphore.release();\r
-                       }\r
-               };\r
-               jobEngine.addJobChangedEventListener(listener);\r
-               semaphore.acquire();\r
-               try {\r
-                       fork(jobEngine, jobRuntime);\r
-               } catch (Exception e) {\r
-                       semaphore.release();\r
-                       throw e;\r
-               }\r
-               semaphore.acquire();\r
-               jobEngine.removeJobChangedEventListener(listener);\r
-       }\r
-\r
-       protected abstract void fork(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception;\r
-}\r
index bd83a7b318a8dd388dafec492bd088b8f424bfaf..9c5d0b98abdc01fce6d3a472bf04f9721b7e0e6a 100644 (file)
@@ -21,126 +21,125 @@ import user.commons.remotestore.RemoteStoreProtocol;
  * Adattípusok, enumerátorok.\r
  */\r
 public class ItemManagerData {\r
-       private static final Logger logger = LogManager.getLogger();\r
+       public enum BreakType {\r
+               IN, OUT, SEGMENT\r
+       }\r
 \r
-       public enum SignalType {\r
-               CREATE(0), UPDATE(1), DELETE(2);\r
+       public enum FilterLogic {\r
+               AND, OR\r
+       }\r
 \r
-               private final long value;\r
+       public enum FilterValueLogic {\r
+               CONTAINS, STARTSWITH, ENDSWITH, EQUALS, LESS, MORE, BEETWEN, ONEWEEK, TWOWEEKS, THREEWEEKS, ONEMONTH, TWOMONTHS, THREEMONTHS, SIXMONTHS, ONEYEAR\r
+       }\r
 \r
-               SignalType(long value) {\r
-                       this.value = value;\r
-               }\r
+       // public enum LogLevel {\r
+       // TRACE, DEBUG, INFO, WARNING, ERROR, FATAL\r
+       // }\r
 \r
-               public long getValue() {\r
-                       return value;\r
-               }\r
+       public enum GuiType {\r
+               LABEL, TEXTBOX, DATAGRID, DATEPICKER, DATETIMEPICKER, DOMAINCOMBO, DOMAINLOOKUP, MULTIDOMAINLOOKUP, CHECKBOX, COMBOBOX, MULTILINETEXTBOX, TIMECODE, NUMBER, WHOLENUMBER, METADATAELEMENT, METADATTYPE, FILETYPE, STORE, IMAGE\r
        }\r
 \r
-       public enum UserRight {\r
-               READONLY(1), READWRITE(3), ADMINISTRATOR(63);\r
+       public enum ListType {\r
+               LABEL, CHECKBOX, DOMAINLABEL, FOLDERICON, ICON, FILESIZE, WRAPPEDLABEL, TIMECODE, PROGRESS, THUMBNAIL, EDITABLETEXTBOX\r
+       }\r
+\r
+       public enum MdType {\r
+               INDEX(0x0001), UNIQUE(0x0002), NULL(0x0004), EDIT(0x0008), LIST(0x0010), GENERATE(0x0020), SEARCH(0x0040);\r
+\r
+               static public int getValues(MdType... flags) {\r
+                       int result = 0;\r
+                       if (flags != null) {\r
+                               for (MdType mdtype : flags)\r
+                                       result += mdtype.getValue();\r
+                       }\r
+                       return result;\r
+               }\r
+\r
+               static public boolean is(int flags, MdType type) {\r
+                       return ((flags & type.getValue()) == type.getValue());\r
+               }\r
 \r
                private final int value;\r
 \r
-               UserRight(int value) {\r
+               MdType(int value) {\r
                        this.value = value;\r
                }\r
 \r
                public int getValue() {\r
                        return value;\r
                }\r
-\r
-               static public boolean is(int flags, UserRight type) {\r
-                       return ((flags & type.getValue()) == type.getValue());\r
-               }\r
        }\r
 \r
-       // public enum LogLevel {\r
-       // TRACE, DEBUG, INFO, WARNING, ERROR, FATAL\r
-       // }\r
-\r
        public enum OrderDirection {\r
                ASC, DESC\r
        }\r
 \r
-       public enum FilterLogic {\r
-               AND, OR\r
-       }\r
-\r
-       public enum FilterValueLogic {\r
-               CONTAINS, STARTSWITH, ENDSWITH, EQUALS, LESS, MORE, BEETWEN, ONEWEEK, TWOWEEKS, THREEWEEKS, ONEMONTH, TWOMONTHS, THREEMONTHS, SIXMONTHS, ONEYEAR\r
-       }\r
+       public enum SignalType {\r
+               CREATE(0), UPDATE(1), DELETE(2);\r
 \r
-       public enum StaticTables {\r
-               ITEM(0), ITEMTYPE(1), MEDIA(2), MEDIAFILE(3), METADATA(4), METADATELEMENT(5), METADATATYPE(6), FOLDER(7), SHOT(\r
-                               8), BREAK(9), STORE(10), STOREURI(11), MEDIAINFO(12), REMOTESTORE(13), REMOTEFILE(14), SEARCHDEFINITION(\r
-                                               15), DOMAIN(16), DOMAINCATEGORY(17), JOB(18), USERINFO(19), FILETYPE(20), SCENE(\r
-                                                               21), SCENECONTENT(22), TEMPLATE(23), TEMPLATESTEP(24), TEMPLATEDECLARATION(\r
-                                                                               25), INPUTPARAM(26), OUTPUTPARAM(27), LOGEVENT(28), JOBSTART(29);\r
                private final long value;\r
 \r
-               StaticTables(long value) {\r
+               SignalType(long value) {\r
                        this.value = value;\r
                }\r
 \r
                public long getValue() {\r
                        return value;\r
                }\r
-\r
        }\r
 \r
        public enum SqlIndexType {\r
                NONE, INDEX, UNIQUE\r
        }\r
 \r
-       public enum MdType {\r
-               INDEX(0x0001), UNIQUE(0x0002), NULL(0x0004), EDIT(0x0008), LIST(0x0010), GENERATE(0x0020), SEARCH(0x0040);\r
+       // public enum StaticField {\r
+       // NONE,\r
+       // ITEM_NAME,\r
+       // ITEM_DESCRIPTION,\r
+       // ITEM_HOUSEID,\r
+       // MEDIA_NAME,\r
+       // MEDIA_DESCRIPTION,\r
+       // MEDIA_HOUSEID\r
+       // }\r
 \r
-               private final int value;\r
+       public enum StaticTables {\r
+               ITEM(0), ITEMTYPE(1), MEDIA(2), MEDIAFILE(3), METADATA(4), METADATELEMENT(5), METADATATYPE(6), FOLDER(7), SHOT(8), BREAK(9), STORE(10), STOREURI(\r
+                               11), MEDIAINFO(12), REMOTESTORE(13), REMOTEFILE(14), SEARCHDEFINITION(15), DOMAIN(16), DOMAINCATEGORY(17), JOB(18), USERINFO(19), FILETYPE(\r
+                                               20), SCENE(21), SCENECONTENT(\r
+                                                               22), TEMPLATE(23), TEMPLATESTEP(24), TEMPLATEDECLARATION(25), INPUTPARAM(26), OUTPUTPARAM(27), LOGEVENT(28), JOBSTART(29);\r
+               private final long value;\r
 \r
-               MdType(int value) {\r
+               StaticTables(long value) {\r
                        this.value = value;\r
                }\r
 \r
-               public int getValue() {\r
+               public long getValue() {\r
                        return value;\r
                }\r
 \r
-               static public boolean is(int flags, MdType type) {\r
-                       return ((flags & type.getValue()) == type.getValue());\r
-               }\r
+       }\r
 \r
-               static public int getValues(MdType... flags) {\r
-                       int result = 0;\r
-                       if (flags != null) {\r
-                               for (MdType mdtype : flags)\r
-                                       result += mdtype.getValue();\r
-                       }\r
-                       return result;\r
+       public enum UserRight {\r
+               READONLY(1), READWRITE(3), ADMINISTRATOR(63);\r
+\r
+               static public boolean is(int flags, UserRight type) {\r
+                       return ((flags & type.getValue()) == type.getValue());\r
                }\r
-       }\r
 \r
-       // public enum StaticField {\r
-       // NONE,\r
-       // ITEM_NAME,\r
-       // ITEM_DESCRIPTION,\r
-       // ITEM_HOUSEID,\r
-       // MEDIA_NAME,\r
-       // MEDIA_DESCRIPTION,\r
-       // MEDIA_HOUSEID\r
-       // }\r
+               private final int value;\r
 \r
-       public enum GuiType {\r
-               LABEL, TEXTBOX, DATAGRID, DATEPICKER, DATETIMEPICKER, DOMAINCOMBO, DOMAINLOOKUP, MULTIDOMAINLOOKUP, CHECKBOX, COMBOBOX, MULTILINETEXTBOX, TIMECODE, NUMBER, WHOLENUMBER, METADATAELEMENT, METADATTYPE, FILETYPE, STORE, IMAGE\r
-       }\r
+               UserRight(int value) {\r
+                       this.value = value;\r
+               }\r
 \r
-       public enum ListType {\r
-               LABEL, CHECKBOX, DOMAINLABEL, FOLDERICON, ICON, FILESIZE, WRAPPEDLABEL, TIMECODE, PROGRESS, THUMBNAIL, EDITABLETEXTBOX\r
+               public int getValue() {\r
+                       return value;\r
+               }\r
        }\r
 \r
-       public enum BreakType {\r
-               IN, OUT, SEGMENT\r
-       }\r
+       private static final Logger logger = LogManager.getLogger();\r
 \r
        private static Map<BaseType, TypeDefinition> typeDefinitions = null;\r
 \r
@@ -148,16 +147,12 @@ public class ItemManagerData {
                typeDefinitions = new Hashtable<BaseType, TypeDefinition>();\r
                typeDefinitions.put(BaseType.BIGINT, new TypeDefinition("java.lang.Long", "java.lang.Long", "BIGINT"));\r
                typeDefinitions.put(BaseType.BINARY, new TypeDefinition("byte[]", "byte[]", "BLOB"));\r
-               typeDefinitions.put(BaseType.BOOL,\r
-                               new TypeDefinition("java.lang.Boolean", "java.lang.Boolean", "CHARACTER(1)"));\r
+               typeDefinitions.put(BaseType.BOOL, new TypeDefinition("java.lang.Boolean", "java.lang.Boolean", "CHARACTER(1)"));\r
                typeDefinitions.put(BaseType.CHAR, new TypeDefinition("java.sql.String", "java.sql.String", "CHARACTER"));\r
-               typeDefinitions.put(BaseType.DATETIME,\r
-                               new TypeDefinition("java.sql.Timestamp", "com.ibm.db2.jcc.DBTimestamp", "TIMESTAMP"));\r
-               typeDefinitions.put(BaseType.DOMAIN,\r
-                               new TypeDefinition("user.jobengine.db.Domains", "user.jobengine.db.Domains", ""));\r
+               typeDefinitions.put(BaseType.DATETIME, new TypeDefinition("java.sql.Timestamp", "com.ibm.db2.jcc.DBTimestamp", "TIMESTAMP"));\r
+               typeDefinitions.put(BaseType.DOMAIN, new TypeDefinition("user.jobengine.db.Domains", "user.jobengine.db.Domains", ""));\r
                typeDefinitions.put(BaseType.DOUBLE, new TypeDefinition("java.lang.Double", "java.lang.Double", "DOUBLE"));\r
-               typeDefinitions.put(BaseType.DECIMAL,\r
-                               new TypeDefinition("java.math.BigDecimal", "java.math.BigDecimal", "DECIMAL"));\r
+               typeDefinitions.put(BaseType.DECIMAL, new TypeDefinition("java.math.BigDecimal", "java.math.BigDecimal", "DECIMAL"));\r
                typeDefinitions.put(BaseType.INT, new TypeDefinition("java.lang.Integer", "java.lang.Integer", "INT"));\r
                typeDefinitions.put(BaseType.REAL, new TypeDefinition("java.lang.Float", "java.lang.Float", "REAL"));\r
                typeDefinitions.put(BaseType.TEXT, new TypeDefinition("java.lang.String", "java.lang.String", "CLOB"));\r
@@ -165,34 +160,6 @@ public class ItemManagerData {
                typeDefinitions.put(BaseType.VARCHAR, new TypeDefinition("java.lang.String", "java.lang.String", "VARCHAR"));\r
        }\r
 \r
-       public static BaseType toBaseType(String typeName) {\r
-               return BaseType.valueOf(typeName);\r
-       }\r
-\r
-       public static GuiType toGuiType(String typeName) {\r
-               return GuiType.valueOf(typeName);\r
-       }\r
-\r
-       public static BreakType toBreakType(String typeName) {\r
-               return BreakType.valueOf(typeName);\r
-       }\r
-\r
-       public static ListType toListType(String typeName) {\r
-               return ListType.valueOf(typeName);\r
-       }\r
-\r
-       public static StaticTables toStaticTable(String name) {\r
-               return name == null ? null : StaticTables.valueOf(name);\r
-       }\r
-\r
-       public static RemoteStoreProtocol toRemoteStoreProtocol(String name) {\r
-               return name == null ? null : RemoteStoreProtocol.valueOf(name);\r
-       }\r
-\r
-       public static DeliveryMethod toDeliveryMethod(String name) {\r
-               return name == null ? null : DeliveryMethod.valueOf(name);\r
-       }\r
-\r
        public static boolean checkObjectType(String name, Object value, BaseType baseType, boolean fromDb) {\r
                boolean result = true;\r
                if (value != null) {\r
@@ -204,9 +171,8 @@ public class ItemManagerData {
                                if (!result) {\r
                                        if (expectedType == null)\r
                                                expectedType = "UNDEFINED";\r
-                                       String msg = String.format(\r
-                                                       "Value type is not acceptable for column: %1$s. Expected: %2$s, found: %3$s", name,\r
-                                                       expectedType, value.getClass().getName());\r
+                                       String msg = String.format("Value type is not acceptable for column: %1$s. Expected: %2$s, found: %3$s", name, expectedType,\r
+                                                       value.getClass().getName());\r
                                        logger.error(msg);\r
                                }\r
                        }\r
@@ -214,6 +180,26 @@ public class ItemManagerData {
                return result;\r
        }\r
 \r
+       @SuppressWarnings("unchecked")\r
+       public static Class<? extends EntityBase> getEntityClass(String type) {\r
+               Class<? extends EntityBase> result = null;\r
+               try {\r
+                       result = (Class<? extends EntityBase>) Class.forName("user.jobengine.db." + type);\r
+               } catch (ClassNotFoundException e) {\r
+                       logger.error(e.getMessage());\r
+               }\r
+               return result;\r
+\r
+       }\r
+\r
+       public static BaseType toBaseType(String typeName) {\r
+               return BaseType.valueOf(typeName);\r
+       }\r
+\r
+       public static BreakType toBreakType(String typeName) {\r
+               return BreakType.valueOf(typeName);\r
+       }\r
+\r
        public static String toDateString(String fullDate, int addday, int field) {\r
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);\r
                Date date = null;\r
@@ -236,15 +222,23 @@ public class ItemManagerData {
                return formatter.format(cal.getTime());\r
        }\r
 \r
-       @SuppressWarnings("unchecked")\r
-       public static Class<? extends EntityBase> getEntityClass(String type) {\r
-               Class<? extends EntityBase> result = null;\r
-               try {\r
-                       result = (Class<? extends EntityBase>) Class.forName("user.jobengine.db." + type);\r
-               } catch (ClassNotFoundException e) {\r
-                       logger.error(e.getMessage());\r
-               }\r
-               return result;\r
+       public static DeliveryMethod toDeliveryMethod(String name) {\r
+               return name == null ? null : DeliveryMethod.valueOf(name);\r
+       }\r
 \r
+       public static GuiType toGuiType(String typeName) {\r
+               return GuiType.valueOf(typeName);\r
+       }\r
+\r
+       public static ListType toListType(String typeName) {\r
+               return ListType.valueOf(typeName);\r
+       }\r
+\r
+       public static RemoteStoreProtocol toRemoteStoreProtocol(String name) {\r
+               return name == null ? null : RemoteStoreProtocol.valueOf(name);\r
+       }\r
+\r
+       public static StaticTables toStaticTable(String name) {\r
+               return name == null ? null : StaticTables.valueOf(name);\r
        }\r
 }\r
diff --git a/server/user.jobengine.osgi.db/test/user/jobengine/db/Support.java b/server/user.jobengine.osgi.db/test/user/jobengine/db/Support.java
new file mode 100644 (file)
index 0000000..01641e0
--- /dev/null
@@ -0,0 +1,180 @@
+package user.jobengine.db;\r
+\r
+import java.nio.charset.Charset;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.StandardOpenOption;\r
+import java.sql.Connection;\r
+import java.sql.DriverManager;\r
+import java.sql.PreparedStatement;\r
+import java.sql.ResultSet;\r
+import java.sql.Types;\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.Date;\r
+import java.util.List;\r
+import java.util.function.Consumer;\r
+import java.util.stream.Stream;\r
+\r
+import org.junit.AfterClass;\r
+import org.junit.BeforeClass;\r
+import org.junit.Test;\r
+\r
+import user.commons.IEntityBase;\r
+import user.commons.logging.LogUtils;\r
+\r
+public class Support {\r
+       public class BD {\r
+               Date fBD;\r
+               Date nBD;\r
+       }\r
+\r
+       private static final String HEADER = "név;archivált;méret;első_adás;következő_adás;törölhető";\r
+\r
+       protected static IItemManager manager = null;\r
+\r
+       @BeforeClass\r
+       static public void setUpConnection() {\r
+               System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+               System.setProperty(ItemManager.DBUSERNAME, "db2admin");\r
+               System.setProperty(ItemManager.DBPASSWORD, "password");\r
+               System.setProperty(LogUtils.LOGLEVEL, "INFO");\r
+               // System.setProperty(ItemManager.DBURL,\r
+\r
+               manager = new ItemManager();\r
+               manager.connect();\r
+       }\r
+\r
+       @AfterClass\r
+       static public void tearDownConnection() {\r
+               manager.disconnect();\r
+       }\r
+\r
+       @Test\r
+       public void generateMorpheusArchivedList() throws Exception {\r
+               Path sourcePath = Paths.get("\\\\10.10.1.100\\BRAAVOS\\PLAYOUT\\Video");\r
+               MediaFileDAO dao = (MediaFileDAO) manager.getBaseDAO(MediaFile.class);\r
+               final SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm");\r
+               final List<String> lines = new ArrayList<>();\r
+               lines.add(HEADER);\r
+               final List<String> dlines = new ArrayList<>();\r
+               dlines.add(HEADER);\r
+               final Date now = new Date();\r
+               try (Stream<Path> pathStream = Files.walk(sourcePath);\r
+                               Connection con = getConnection("jdbc:sqlserver://10.10.1.45\\sql16;databaseName=PA_Echo;", "MAM", "Echotv.hu")) {\r
+                       pathStream.forEach(new Consumer<Path>() {\r
+                               @Override\r
+                               public void accept(Path p) {\r
+                                       String name = p.getFileName().toString();\r
+                                       if (!name.toLowerCase().endsWith(".mxf"))\r
+                                               return;\r
+                                       if (name.startsWith("P") || name.startsWith("R"))\r
+                                               return;\r
+\r
+                                       List<IEntityBase> mediaFiles = dao.getByHouseId(name);\r
+                                       boolean archived = mediaFiles != null && !mediaFiles.isEmpty();\r
+\r
+                                       String fbd = "-";\r
+                                       String nbd = "-";\r
+                                       boolean inUse = false;\r
+                                       try {\r
+                                               BD bd = query(con, name.replace(".MXF", ""));\r
+                                               if (bd != null) {\r
+                                                       if (bd.fBD != null) {\r
+                                                               fbd = df.format(bd.fBD).substring(0, 10);\r
+                                                               inUse = bd.fBD.after(now);\r
+                                                       }\r
+                                                       if (bd.nBD != null) {\r
+                                                               nbd = df.format(bd.nBD).substring(0, 10);\r
+                                                               inUse = inUse || bd.nBD.after(now);\r
+                                                       }\r
+                                               }\r
+                                       } catch (Exception e) {\r
+                                               e.printStackTrace();\r
+                                       }\r
+\r
+                                       boolean canDelete = archived && !inUse;\r
+                                       String line = String.format("%s;%s;%d;%s;%s;%s", name, archived ? "igen" : "nem", p.toFile().length(), fbd, nbd,\r
+                                                       canDelete ? "igen" : "nem");\r
+                                       System.out.println(line);\r
+                                       lines.add(line);\r
+                                       if (canDelete)\r
+                                               dlines.add(line);\r
+                               }\r
+                       });\r
+               }\r
+\r
+               Files.write(Paths.get("c:\\temp\\morpheus_all.csv"), lines, Charset.forName("ISO-8859-2"), StandardOpenOption.CREATE);\r
+               Files.write(Paths.get("c:\\temp\\morpheus_cleanup.csv"), dlines, Charset.forName("ISO-8859-2"), StandardOpenOption.CREATE);\r
+       }\r
+\r
+       private Connection getConnection(String dbUrl, String userName, String password) throws Exception {\r
+               Connection result = null;\r
+               try {\r
+                       Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");\r
+                       result = DriverManager.getConnection(dbUrl, userName, password);\r
+               } catch (Exception e) {\r
+                       throw e;\r
+               }\r
+               return result;\r
+       }\r
+\r
+       private BD query(Connection con, String id) throws Exception {\r
+               BD result = null;\r
+               if (id.startsWith("P") || id.startsWith("R"))\r
+                       return null;\r
+\r
+               //              1002: Musorok\r
+               //              2002: Promo\r
+               //              3002: AD\r
+\r
+               //              @Operation int, @@@Options int, @@ItemID int, @@IntParam1 int=Null, @@IntParam2 int=Null, @@IntParam3 int=Null,\r
+               //                              @@StrParam1 varchar(200)=Null\r
+\r
+               //              v_ProgrammeID\r
+               //              v_Live\r
+               //              v_EpisodeID\r
+               //              v_VariantID\r
+               //              v_MediaID\r
+               //              v_VariantTypeID\r
+               //              v_ProgTitle\r
+               //              v_EpTitle\r
+               //              v_Episode\r
+               //              v_VariantType\r
+               //              v_VariantKeywords\r
+               //              v_VariantLengthTC\r
+               //              v_VariantLengthFrame\r
+               //              v_VariantNrSegments\r
+               //              v_FirstBroadcastDate\r
+               //              v_NextBroadcastDate\r
+               //              v_OkForAir\r
+               //              v_ForTransm\r
+\r
+               try (PreparedStatement stmt = con.prepareStatement("{call dbo.clIFsp_EC_MAM(1002, 0, ?, ?, ?, ?, ?)}")) {\r
+                       stmt.setNull(1, Types.INTEGER);\r
+                       stmt.setNull(2, Types.INTEGER);\r
+                       stmt.setNull(3, Types.INTEGER);\r
+                       stmt.setNull(4, Types.INTEGER);\r
+                       stmt.setString(5, id);\r
+                       try (ResultSet rs = stmt.executeQuery()) {\r
+                               //                              ResultSetMetaData rsmd = rs.getMetaData();\r
+                               //                              for (int i = 1; i < rsmd.getColumnCount() + 1; i++) {\r
+                               //                                      System.out.println(rsmd.getColumnLabel(i));\r
+                               //                              }\r
+                               while (rs.next()) {\r
+\r
+                                       result = new BD();\r
+                                       result.fBD = rs.getDate("v_FirstBroadcastDate");\r
+                                       result.nBD = rs.getDate("v_NextBroadcastDate");\r
+                                       break;\r
+                               }\r
+                       }\r
+               } catch (Exception e) {\r
+                       throw e;\r
+               } finally {\r
+               }\r
+               return result;\r
+       }\r
+\r
+}\r
diff --git a/server/user.jobengine.osgi.db/test/user/jobengine/db/Support_new.java b/server/user.jobengine.osgi.db/test/user/jobengine/db/Support_new.java
new file mode 100644 (file)
index 0000000..ae4d6d9
--- /dev/null
@@ -0,0 +1,139 @@
+package user.jobengine.db;\r
+\r
+import java.nio.charset.Charset;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.StandardOpenOption;\r
+import java.sql.Connection;\r
+import java.sql.DriverManager;\r
+import java.sql.PreparedStatement;\r
+import java.sql.ResultSet;\r
+import java.sql.ResultSetMetaData;\r
+import java.sql.Types;\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.Date;\r
+import java.util.List;\r
+import java.util.function.Consumer;\r
+import java.util.stream.Stream;\r
+\r
+import org.junit.AfterClass;\r
+import org.junit.BeforeClass;\r
+import org.junit.Test;\r
+\r
+import user.commons.IEntityBase;\r
+import user.commons.logging.LogUtils;\r
+\r
+public class Support_new {\r
+       public class BD {\r
+               Date fBD;\r
+               Date nBD;\r
+       }\r
+\r
+       protected static IItemManager manager = null;\r
+\r
+       @BeforeClass\r
+       static public void setUpConnection() {\r
+               System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+               System.setProperty(ItemManager.DBUSERNAME, "db2admin");\r
+               System.setProperty(ItemManager.DBPASSWORD, "password");\r
+               System.setProperty(LogUtils.LOGLEVEL, "INFO");\r
+               // System.setProperty(ItemManager.DBURL,\r
+\r
+               manager = new ItemManager();\r
+               manager.connect();\r
+       }\r
+\r
+       @AfterClass\r
+       static public void tearDownConnection() {\r
+               manager.disconnect();\r
+       }\r
+\r
+       @Test\r
+       public void generateMorpheusArchivedList() throws Exception {\r
+               Path sourcePath = Paths.get("\\\\10.10.1.100\\BRAAVOS\\PLAYOUT\\Video");\r
+               MediaFileDAO dao = (MediaFileDAO) manager.getBaseDAO(MediaFile.class);\r
+               final SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm");\r
+               final List<String> lines = new ArrayList<>();\r
+               lines.add("név,archivált,méret,első_adás,következő_adás,törölhető");\r
+               final List<String> dlines = new ArrayList<>();\r
+               dlines.add("név,archivált,méret,első_adás,következő_adás,törölhető");\r
+\r
+               List<String> files = null;\r
+               try (Connection con = getConnection("jdbc:sqlserver://10.10.1.45\\sql16;databaseName=PA_Echo;", "MAM", "Echotv.hu")) {\r
+                       files = query(con);\r
+               } catch (Exception e) {\r
+                       e.printStackTrace();\r
+               }\r
+\r
+               final List<String> filesInUse = files;\r
+\r
+               try (Stream<Path> pathStream = Files.walk(sourcePath)) {\r
+                       pathStream.forEach(new Consumer<Path>() {\r
+                               @Override\r
+                               public void accept(Path p) {\r
+                                       String name = p.getFileName().toString();\r
+                                       if (!name.toLowerCase().endsWith(".mxf"))\r
+                                               return;\r
+\r
+                                       List<IEntityBase> mediaFiles = dao.getByHouseId(name);\r
+                                       boolean archived = mediaFiles != null && !mediaFiles.isEmpty();\r
+                                       boolean inUse = filesInUse.contains(name);\r
+                                       boolean canDelete = archived && !inUse;\r
+                                       String line = String.format("%s,%s,%d,%s", name, archived ? "igen" : "nem", p.toFile().length(), canDelete ? "igen" : "nem");\r
+                                       System.out.println(line);\r
+                                       lines.add(line);\r
+                                       if (canDelete)\r
+                                               dlines.add(line);\r
+                               }\r
+                       });\r
+               }\r
+\r
+               Files.write(Paths.get("c:\\temp\\morpheus_all.csv"), lines, Charset.forName("UTF-8"), StandardOpenOption.CREATE_NEW);\r
+               Files.write(Paths.get("c:\\temp\\morpheus_cleanup.csv"), dlines, Charset.forName("UTF-8"), StandardOpenOption.CREATE_NEW);\r
+       }\r
+\r
+       private Connection getConnection(String dbUrl, String userName, String password) throws Exception {\r
+               Connection result = null;\r
+               try {\r
+                       Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");\r
+                       result = DriverManager.getConnection(dbUrl, userName, password);\r
+               } catch (Exception e) {\r
+                       throw e;\r
+               }\r
+               return result;\r
+       }\r
+\r
+       private List<String> query(Connection con) throws Exception {\r
+               List<String> result = new ArrayList<>();\r
+\r
+               //              [clIFsp_EC_MAM] @Operation int, @@@Options int, @@ItemID int, @@IntParam1 int=Null, @@IntParam2 int=Null, @@IntParam3 int=Null,\r
+               //              @@StrParam1 varchar(200)=Null, @@StrParam2 varchar(max)=Null, @@DateParam1 datetime=Null, @@DateParam2 datetime=Null\r
+\r
+               try (PreparedStatement stmt = con.prepareStatement("{call dbo.clIFsp_EC_MAM(5001, 7, ?, ?, ?, ?, ?, ?, ?)}")) {\r
+                       stmt.setNull(1, Types.INTEGER);\r
+                       stmt.setNull(2, Types.INTEGER);\r
+                       stmt.setNull(3, Types.INTEGER);\r
+                       stmt.setNull(4, Types.INTEGER);\r
+                       stmt.setNull(5, Types.VARCHAR);\r
+                       stmt.setNull(6, Types.VARCHAR);\r
+                       stmt.setDate(7, new java.sql.Date(new Date().getTime()));\r
+                       try (ResultSet rs = stmt.executeQuery()) {\r
+                               while (rs.next()) {\r
+\r
+                                       ResultSetMetaData rsmd = rs.getMetaData();\r
+                                       for (int i = 1; i < rsmd.getColumnCount() + 1; i++) {\r
+                                               System.out.println(rsmd.getColumnLabel(i));\r
+                                       }\r
+                                       break;\r
+                               }\r
+                       }\r
+               } catch (Exception e) {\r
+                       throw e;\r
+               } finally {\r
+               }\r
+               return result;\r
+       }\r
+\r
+}\r
index fd917dc6243a1c7fc17ee59de03cf0c889daa290..5fbfe23e62ca66c9dcafb9131ba280e38f367c36 100644 (file)
@@ -24,7 +24,6 @@
        <!-- servlet> <description>Test servlet for jetty</description> <servlet-name>testservlet</servlet-name> <servlet-class>user.jobengine.servlet.TestServlet</servlet-class> \r
                <load-on-startup>2</load-on-startup> </servlet -->\r
 \r
-\r
        <!-- ZK -->\r
        <servlet-mapping>\r
                <servlet-name>zkLoader</servlet-name>\r
 \r
        <!-- servlet-mapping> <servlet-name>testservlet</servlet-name> <url-pattern>/noway/*</url-pattern> </servlet-mapping -->\r
 \r
+       <servlet-mapping>\r
+           <servlet-name>zkLoader</servlet-name>\r
+           <url-pattern>/test</url-pattern>\r
+       </servlet-mapping>\r
 \r
        <session-config>\r
                <session-timeout>120</session-timeout>\r
diff --git a/server/user.jobengine.osgi.server/pages/database.zul b/server/user.jobengine.osgi.server/pages/database.zul
new file mode 100644 (file)
index 0000000..cb5fceb
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<zk xmlns="http://www.zkoss.org/2005/zul">\r
+       <div width="100%" height="100%" apply="org.zkoss.bind.BindComposer"\r
+               viewModel="@id('vm') @init('user.jobengine.zk.model.DatabaseModel')">\r
+               <grid model="@load(vm.dataList)" mold="paging" sizedByContent="false" vflex="true" pagingPosition="top">\r
+                       <columns sizable="true">\r
+                               <column forEach="${vm.columnList}" label="${each}"></column>\r
+                       </columns>\r
+                       <template name="model" var="r">\r
+                               <row>\r
+                                       <label forEach="${vm.columnList}" value="${r.get(each)}"></label>\r
+                               </row>\r
+                       </template>\r
+               </grid>\r
+       </div>\r
+</zk>
\ No newline at end of file
index 89ed1a887821ffa4164900308f45ef90cf14b812..125cdf8216bd4a46c26ea39b4dfbed30d526bf8f 100644 (file)
@@ -58,6 +58,7 @@
                                <menuitem sclass="rozsda" label="Statisztikák" onClick='includeContent.src="/pages/statistics.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
                                <menuitem sclass="rozsda" label="Folyamatok" onClick='includeContent.src="/pages/joblist.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
                                <menuitem sclass="rozsda" label="Hiányzó anyagok" onClick='includeContent.src="/pages/missingmaterials.zul"' disabled="${not sessionScope.userPrincipal.jobSubmitter or sessionScope.userPrincipal.anonymous}" />\r
+                               <menuitem sclass="rozsda" label="Test" onClick='includeContent.src="/pages/database.zul"' disabled="${not sessionScope.userPrincipal.jobSubmitter or sessionScope.userPrincipal.anonymous}" />\r
                        </menupopup>\r
                </menu>\r
 \r
index 2021009d3401ebb60d4768a7845760f030451290..40f5b6c76cc63ad75d97dc07d15d9bf73a522e01 100644 (file)
@@ -26,6 +26,10 @@ public interface IJobRuntime extends IJob {
 \r
        public void done();\r
 \r
+       boolean forkPrepare() throws InterruptedException;\r
+\r
+       void forkWaitComplete() throws InterruptedException;\r
+\r
        IInstruction getCurrentInstruction();\r
 \r
        Marker getFinishMarker();\r
index c95634f363eb37bf995634051acd6e9cedd05958..b99c1743185294b0cda4723ae47a27a11750eaf2 100644 (file)
@@ -758,6 +758,7 @@ public class JobEngine implements IJobEngine {
 
        @Override
        public void shutdown() {
+               isRunning = false;
                if (schedulerService != null)
                        schedulerService.shutdown();
 
@@ -770,7 +771,6 @@ public class JobEngine implements IJobEngine {
                } catch (TSMException e) {
                        logger.catching(e);
                }
-               isRunning = false;
                logger.info("JobEngine stopped");
        }
 
index 1d55710bb93aecfdfcef18b509f12a6bcaa29366..b0247fcd72481ff3bfc941f1d2a1cac313b89fe7 100644 (file)
@@ -6,11 +6,13 @@ import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.sql.Timestamp;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Stack;
+import java.util.concurrent.Semaphore;
 
 import javax.swing.event.EventListenerList;
 
@@ -50,6 +52,9 @@ public class JobRuntime extends Job implements IJobRuntime {
        private List<JobRuntime> children;
        private MediaCubeMarker sessionMarker;
        private boolean isService;
+       private Semaphore forkSempahore;
+       private IJobChangedListener jobChangedListener;
+       private List<Long> childrenIDs;
 
        public JobRuntime() {
                this.listeners = new EventListenerList();
@@ -191,6 +196,61 @@ public class JobRuntime extends Job implements IJobRuntime {
                                ((IJobStatusChangedListener) targets[i + 1]).statusChanged(event);
        }
 
+       @Override
+       public boolean forkPrepare() throws InterruptedException {
+               boolean result = false;
+               forkSempahore = new Semaphore(1);
+               if (jobChangedListener == null) {
+                       logger.info("Preparing fork");
+                       childrenIDs = Collections.synchronizedList(new ArrayList<>());
+
+                       jobChangedListener = event -> {
+                               IJobRuntime child = event.getJob();
+                               if (event.getSignalType().equals(SignalType.CREATE)) {
+                                       if (child.getParentJobId() == getId()) {
+                                               childrenIDs.add(child.getId());
+                                       }
+
+                                       if (child.getParentJobId() != getId() && childrenIDs.contains(child.getParentJobId())) {
+                                               childrenIDs.add(child.getId());
+                                       }
+                               }
+                               if (event.getSignalType().equals(SignalType.DELETE) && childrenIDs.contains(child.getId())) {
+                                       childrenIDs.remove(child.getId());
+                                       if (childrenIDs.size() == 0)
+                                               forkSempahore.release();
+                               }
+                               if (!jobEngine.isRunning())
+                                       forkSempahore.release();
+                       };
+                       logger.info("Adding job changed listener");
+                       jobEngine.addJobChangedEventListener(jobChangedListener);
+                       result = true;
+                       forkSempahore.acquire();
+               } else {
+                       if (childrenIDs != null && childrenIDs.size() > 0)
+                               forkSempahore.acquire();
+               }
+               return result;
+       }
+
+       @Override
+       public void forkWaitComplete() throws InterruptedException {
+               logger.info("Waiting for semaphore" + forkSempahore);
+               forkSempahore.acquire();
+               logger.info("Removing job changed listener");
+               if (jobEngine.isRunning()) {
+                       logger.info("Removing job changed listener");
+                       jobEngine.removeJobChangedEventListener(jobChangedListener);
+                       jobChangedListener = null;
+                       childrenIDs = null;
+               } else {
+                       logger.info("Instruction pointer repositioned");
+                       decrementInstructionPointer();
+                       restoreStack();
+               }
+       }
+
        private void fromJob(IJob job) {
                id = job.getId();
                description = job.getDescription();
@@ -552,5 +612,4 @@ public class JobRuntime extends Job implements IJobRuntime {
                job.setParentJobId(getParentJobId());
                return job;
        }
-
 }
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/DatabaseModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/DatabaseModel.java
new file mode 100644 (file)
index 0000000..3c39584
--- /dev/null
@@ -0,0 +1,54 @@
+package user.jobengine.zk.model;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.annotation.Init;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+import com.ibm.nosql.json.api.DB;\r
+import com.ibm.nosql.json.api.DBCollection;\r
+\r
+import user.commons.ListUtils;\r
+import user.commons.nosql.NoSQLUtils;\r
+\r
+//http://zkfiddle.org/sample/3op451q/12-Dynamic-Columns#source-1\r
+public class DatabaseModel {\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
+       private List<BasicDBObject> dataList;\r
+       private List<String> columnList;\r
+       private DB db = null;\r
+\r
+       private DBCollection collection;\r
+\r
+       public List<String> getColumnList() {\r
+               return columnList;\r
+       }\r
+\r
+       public List<BasicDBObject> getDataList() {\r
+               return dataList;\r
+       }\r
+\r
+       @Init\r
+       public void init() {\r
+               db = NoSQLUtils.getNoSQLDB();\r
+               collection = db.getCollection("sessionlogs");\r
+\r
+               BasicDBObject first = (BasicDBObject) collection.findOne();\r
+               columnList = new ArrayList<>(first.keySet());\r
+\r
+               dataList = ListUtils.cast(collection.find().sort(new BasicDBObject("dateTime", -1)).toArray());\r
+       }\r
+\r
+       public void setColumnList(List<String> columnList) {\r
+               this.columnList = columnList;\r
+       }\r
+\r
+       public void setDataList(List<BasicDBObject> dataList) {\r
+               this.dataList = dataList;\r
+       }\r
+\r
+}\r