From 84cf5b4b10fa2143c78c8c3c16c5ae57a20a068c Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1s=C3=A1ry=20D=C3=A1niel?= Date: Wed, 20 May 2020 19:26:16 +0000 Subject: [PATCH] git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31850 --- .../run-mediacube-server-user.launch | 4 +- server/-configuration/scheduledjobs.json | 20 +++- server/-dependencies/jobengine.target | 3 +- server/-dependencies/pom.xml | 43 +------- .../mediacube/executors/tests/Support.java | 12 ++- .../META-INF/MANIFEST.MF | 3 +- .../config/config.xml | 2 + .../jobtemplates/copy-from-nexio.xml | 42 ++++++++ .../jobtemplates/fake.xml | 22 ++++- .../server/steps/CreateMissingLowresStep.java | 3 +- .../user/jobengine/server/steps/FakeStep.java | 40 +++----- .../jobengine/server/steps/MergeStep.java | 15 +++ .../server/steps/NEXIOCheckerStep.java | 98 +++++++++++++++++++ .../server/steps/SubmitDownloadStep.java | 44 +++++++++ .../META-INF/MANIFEST.MF | 3 + .../src/user/commons/JobStatus.java | 6 +- .../remotestore/RemoteStoreProtocol.java | 2 +- .../user/commons}/rest/RFC3339DateFormat.java | 2 +- .../commons/rest/ServiceObjectMapper.java | 18 ++++ .../build-remote-sqlj.bat | 4 +- .../user/jobengine/db/EntityBaseDAO.java | 80 ++++++++++----- .../user/jobengine/db/IDAOIterProvider.java | 10 ++ .../src/user/commons/pool/ContextPool.java | 15 ++- .../jobengine/db/DynamicAttributesDAO.java | 1 + .../src/user/jobengine/db/EntityBaseDAO.sqlj | 32 +++++- .../src/user/jobengine/db/IEntityBaseDAO.java | 6 +- .../src/user/jobengine/db/IItemManager.java | 2 + .../src/user/jobengine/db/ItemManager.java | 27 +++-- .../src/user/jobengine/db/Media.java | 9 ++ .../src/user/jobengine/db/MediaDAO.sqlj | 23 +++-- .../META-INF/MANIFEST.MF | 6 +- .../pages/joblist.zul | 2 + .../src/user/jobengine/server/IProgram.java | 43 ++++---- .../src/user/jobengine/server/Program.java | 25 ++++- .../server/actions/StatusMachine.java | 4 +- .../server/ast/CallJobStepCommand.java | 9 ++ .../user/jobengine/server/ast/Encoder.java | 7 +- .../AssignVariableInstruction.java | 2 +- .../instructions/CallJobStepInstruction.java | 12 ++- .../DeclareVariableInstruction.java | 4 +- .../WaitForSpawnJobsInstruction.java | 15 +++ .../messages/JobStepCompletedMessage.java | 23 ++--- .../server/scheduler/SchedulerService.java | 34 +++++-- .../user/jobengine/server/steps/JobStep.java | 5 + .../META-INF/MANIFEST.MF | 1 + .../osgi/rest/JacksonJsonProvider.java | 4 +- .../osgi/rest/ServiceObjectMapper.java | 18 ---- .../ws/mediacube/MediaCubeAPIWSSocket.java | 4 +- .../osgi/ws/nexio/NexioWSSocket.java | 4 +- 49 files changed, 601 insertions(+), 212 deletions(-) create mode 100644 server/user.jobengine.executors/jobtemplates/copy-from-nexio.xml create mode 100644 server/user.jobengine.executors/src/user/jobengine/server/steps/MergeStep.java create mode 100644 server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOCheckerStep.java create mode 100644 server/user.jobengine.executors/src/user/jobengine/server/steps/SubmitDownloadStep.java rename server/{user.jobengine.osgi.services/src/user/jobengine/osgi => user.jobengine.osgi.commons/src/user/commons}/rest/RFC3339DateFormat.java (94%) create mode 100644 server/user.jobengine.osgi.commons/src/user/commons/rest/ServiceObjectMapper.java create mode 100644 server/user.jobengine.osgi.db/generated/user/jobengine/db/IDAOIterProvider.java create mode 100644 server/user.jobengine.osgi.server/src/user/jobengine/server/instructions/WaitForSpawnJobsInstruction.java delete mode 100644 server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/ServiceObjectMapper.java diff --git a/server/-configuration/run-mediacube-server-user.launch b/server/-configuration/run-mediacube-server-user.launch index c15aaebf..6168aa19 100644 --- a/server/-configuration/run-mediacube-server-user.launch +++ b/server/-configuration/run-mediacube-server-user.launch @@ -19,10 +19,10 @@ - + - + diff --git a/server/-configuration/scheduledjobs.json b/server/-configuration/scheduledjobs.json index 4693367e..5e048a7b 100644 --- a/server/-configuration/scheduledjobs.json +++ b/server/-configuration/scheduledjobs.json @@ -1,5 +1,20 @@ {"joblist":[ { + "template": "copy-from-nexio.xml", + "parameters": [ + {"name": "servers", "value": ["NEXIO1", "NEXIO2"], "type": "java.lang.Iterable"}, + + {"name": "globalRetrievePath", "value": "file://isilon.intra.echotv.hu", "type": "java.lang.String"}, + {"name": "localRetrievePath", "value": "/mnt/ISILON", "type": "java.lang.String"}, + {"name": "localHiresPath", "value": "/mediacube/data/lowres/", "type": "java.lang.String" }, + {"name": "globalHiresPath", "value": "L:\\", "type": "java.lang.String" }, + {"name": "localLowresPath", "value": "/mnt/FIXTRANSCODER/OUTPUT", "type": "java.lang.String" }, + {"name": "transcoderAddress", "value": "http://10.10.1.74:65445/api/json/v1/", "type": "java.lang.String"}, + {"name": "transcoderTemplateName", "value": "MAM_proxy", "type": "java.lang.String"}, + {"name": "webPath", "value": "/mediacube/data/lowres/www/video/", "type": "java.lang.String" } + ] + }, + { "active": false, "executeimmediate": false, "cronexpression": "0/10 * * * * ? *", @@ -275,7 +290,10 @@ "name" : "Teszt folyamat", "template": "fake.xml", "cronexpression": "0/20 * * * * ?", - "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ] + "parameters": [ + {"name": "itemID", "value": 1, "type": "java.lang.Long"}, + {"name": "iter", "value": ["a", "b", "c"], "type": "java.lang.Iterable"} + ] }, { "active": false, diff --git a/server/-dependencies/jobengine.target b/server/-dependencies/jobengine.target index fdc857ea..a8e09167 100644 --- a/server/-dependencies/jobengine.target +++ b/server/-dependencies/jobengine.target @@ -1,5 +1,5 @@ - + @@ -17,6 +17,7 @@ + diff --git a/server/-dependencies/pom.xml b/server/-dependencies/pom.xml index efac0432..0cc4847f 100644 --- a/server/-dependencies/pom.xml +++ b/server/-dependencies/pom.xml @@ -121,50 +121,9 @@ default-cli - org.omnifaces:omnifaces:3.4.1 diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java index dd444539..76df49e9 100644 --- a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java @@ -65,9 +65,9 @@ public class Support { // System.setProperty("jobengine.nosql.db.user", "db2admin"); // System.setProperty("jobengine.nosql.db.password", "password"); System.setProperty("nexio.host", "10.10.1.55"); - 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(ItemManager.DBURL, "jdbc:db2://10.228.212.42:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + System.setProperty(ItemManager.DBUSERNAME, "blobtest"); + System.setProperty(ItemManager.DBPASSWORD, "blobtest"); System.setProperty(LogUtils.LOGLEVEL, "INFO"); // System.setProperty(ItemManager.DBURL, @@ -138,6 +138,12 @@ public class Support { return null; } + @Test + public void mediaByName() throws Exception { + Media media = manager.getMedia("DK_10103300_01"); + assertNotNull(media); + } + // private void check_rd_process(List allFiles, List allStatus) { // File mediaFile = mediaFilePath.toFile(); // if (mediaFile.isDirectory() || !mediaFile.getName().toUpperCase().endsWith(".MXF")) diff --git a/server/user.jobengine.executors/META-INF/MANIFEST.MF b/server/user.jobengine.executors/META-INF/MANIFEST.MF index 8257a45e..f2c88b3d 100644 --- a/server/user.jobengine.executors/META-INF/MANIFEST.MF +++ b/server/user.jobengine.executors/META-INF/MANIFEST.MF @@ -25,7 +25,8 @@ Require-Bundle: user.jobengine.osgi.commons;bundle-version="1.0.0", org.jboss.resteasy.validator-provider-11;bundle-version="3.0.11" Bundle-ClassPath: . Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Import-Package: javax.ws.rs.client, +Import-Package: groovy.lang;version="3.0.3", + javax.ws.rs.client, 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", diff --git a/server/user.jobengine.executors/config/config.xml b/server/user.jobengine.executors/config/config.xml index 5062fc97..4eec324f 100644 --- a/server/user.jobengine.executors/config/config.xml +++ b/server/user.jobengine.executors/config/config.xml @@ -1,5 +1,7 @@ + + diff --git a/server/user.jobengine.executors/jobtemplates/copy-from-nexio.xml b/server/user.jobengine.executors/jobtemplates/copy-from-nexio.xml new file mode 100644 index 00000000..b7d6194d --- /dev/null +++ b/server/user.jobengine.executors/jobtemplates/copy-from-nexio.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/user.jobengine.executors/jobtemplates/fake.xml b/server/user.jobengine.executors/jobtemplates/fake.xml index 6e3b7ea6..bec5abeb 100644 --- a/server/user.jobengine.executors/jobtemplates/fake.xml +++ b/server/user.jobengine.executors/jobtemplates/fake.xml @@ -4,22 +4,42 @@ + + + + - + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/CreateMissingLowresStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/CreateMissingLowresStep.java index d8c18209..9194123d 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/CreateMissingLowresStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/CreateMissingLowresStep.java @@ -17,7 +17,6 @@ import user.jobengine.db.Media; import user.jobengine.db.Store; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; -import user.jobengine.server.messages.CancelRequest; public class CreateMissingLowresStep extends JobStep { private static final Logger logger = LogManager.getLogger(); @@ -38,7 +37,7 @@ public class CreateMissingLowresStep extends JobStep { if (media == null) { logger.info(new MediaCubeUndoMarker(marker.getSessionID()), "Nincs feldolgozandó hiány."); // throw new Exception("Nincs feldolgozandó hiány."); - jobEngine.sendMessage(new CancelRequest(jobRuntime.getId())); + cancel(); 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 13ab5eae..799e5abf 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 @@ -1,54 +1,40 @@ package user.jobengine.server.steps; +import java.util.Arrays; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import user.jobengine.server.IJobEngine; -import user.jobengine.server.IJobRuntime; -import user.mediacube.metadata.interfaces.IMetadataProvider; - public class FakeStep extends JobStep { private static final Logger logger = LogManager.getLogger(); private int count = 10; - private StringBuilder sb = new StringBuilder(); - private IMetadataProvider metadataProvider; @StepEntry - public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { - Object[] result = { itemID + 1 }; - - // if (result != null) - // throw new Exception( - // "Ez most egy nagyon hosszú hibaüzenet szeretne lenni, amit remélem hogy több sorban fogok látni. Mert ha nem! Akko lesz nemulass..."); - // Files.copy(Paths.get("/etc/security/limits.conf"), Paths.get("/etc/security/limits.conf.bak")); - // Files.write(Paths.get("/etc/security/limits.conf"), new byte[0], StandardOpenOption.TRUNCATE_EXISTING); + public Object[] execute(long itemID, Iterable iter) throws Exception { - //test(); - - //((MediaCubeMarker) jobRuntime.getMarker()).setTo("vasary@elgekko.net"); + if (getJobRuntime().getSpawnOrder() == 0) { + count = 5; + } + logger.info(getMarker(), "Starting params: {}, {}, spawnOrder {}", itemID, iter, getJobRuntime().getSpawnOrder()); - //logger.info(jobRuntime.getMarker(), "usefullink"); - logger.info(jobRuntime.getMarker(), "Starting with {} #{}", itemID, jobRuntime.getId()); - // Message message = logger.getMessageFactory().newMessage("Starting with {} #{}", itemID, jobRuntime.getId()); - //logger.error(jobRuntime.getMarker(), message, new Exception("TESZT")); try { + int step = 100 / count; for (int i = 0; i < count; i++) { - //sb.append("Sikeres iteráció : ") if (!canContinue()) break; - jobRuntime.incrementProgress((i + 1) * count); + setProgress((i + 1) * step); for (int j = 0; j < 100; j++) { Thread.sleep(10); } - - //jobEngine.sendMessage(new CancelRequest(jobRuntime.getId())); - logger.info("Progress {}", jobRuntime.getProgress()); + logger.info("Progress {}", getJobRuntime().getProgress()); } } catch (Exception e) { - logger.error(jobRuntime.getMarker(), e.getMessage()); + logger.error(getMarker(), e.getMessage()); throw e; } + Object[] result = Arrays.asList(10, 20).toArray(); + logger.info("Returning {}, {}", result[0], result[1]); return result; } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/MergeStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/MergeStep.java new file mode 100644 index 00000000..abbc0b03 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/MergeStep.java @@ -0,0 +1,15 @@ +package user.jobengine.server.steps; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class MergeStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + + @StepEntry + public Object[] execute(long id1, long id2) throws Exception { + logger.info("MERGE {} {}", id1, id2); + return null; + } + +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOCheckerStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOCheckerStep.java new file mode 100644 index 00000000..ae15789f --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOCheckerStep.java @@ -0,0 +1,98 @@ +package user.jobengine.server.steps; + +import java.sql.Timestamp; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.StoreUri; +import user.commons.nexio.api.Clip; +import user.commons.nexio.api.Controller; +import user.commons.nexio.api.Mediabase; +import user.commons.remotestore.RemoteStoreProtocol; +import user.jobengine.db.IItemManager; +import user.jobengine.db.Media; +import user.jobengine.db.Store; + +public class NEXIOCheckerStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + + @StepEntry + public Object[] execute(String storeName, int limit) throws Exception { + List newItems = new ArrayList<>(); + List updatedItems = new ArrayList<>(); + Object[] result = Arrays.asList(newItems, updatedItems).toArray(); + IItemManager manager = getManager(); + + Store store = manager.getStore(storeName); + if (store == null) + throw new NullPointerException("Store not available: " + storeName); + + StoreUri storeUri = store.getSourceStoreUri(RemoteStoreProtocol.NEXIO); + if (storeUri == null) + throw new NullPointerException("NEXIO StoreUri not available on: " + storeName); + + Controller controller = null; + + try { + controller = new Controller(storeUri.getRootPath(), storeUri.getPortNumber()); + controller.connect(); + Mediabase mediabase = controller.getMediabase(); + //SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + Iterator clips = mediabase.getClips(); + int count = limit; + while (clips.hasNext()) { + Clip clip = clips.next(); + //String id = clip.getId().get(); + String title = clip.getXid().get(); + Timestamp modified = Timestamp.from(clip.getModifiedTimestamp().toInstant()); + Timestamp created = Timestamp.from(clip.getRecordDateTimestamp().toInstant()); + int duration = clip.getDuration(); + + Media media = manager.getMedia(title); + if (media == null) { + media = new Media(); + media.setModified(modified); + media.setCreated(created); + media.setArchived(Timestamp.from(Instant.now())); + media.setTitle(title); + media.setDescription(title); + media.setLength(duration); + newItems.add(media); + count--; + } else { + if (media.getLength() != duration || !media.getModified().equals(modified)) { + media.setArchived(Timestamp.from(Instant.now())); + media.setModified(modified); + media.setLength(duration); + updatedItems.add(media); + count--; + } + } + + //ha volt limit, akkor egyszer csak 0 lesz, ha nem volt akkor alapbol -1 + if (count == 0) { + logger.info("Limit reached: {}", limit); + break; + } + + } + } catch (Exception e) { + logger.error(e); + } finally { + if (controller != null) + controller.disconnect(); + } + + if (newItems.size() == 0 && updatedItems.size() == 0) + cancel(); + + return result; + } + +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/SubmitDownloadStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/SubmitDownloadStep.java new file mode 100644 index 00000000..01186eec --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/SubmitDownloadStep.java @@ -0,0 +1,44 @@ +package user.jobengine.server.steps; + +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.ListUtils; +import user.jobengine.db.IItemManager; +import user.jobengine.db.Media; +import user.jobengine.db.Store; +import user.jobengine.server.IJobRuntime; + +public class SubmitDownloadStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + private static final String JOBTEMPLATE = "download-material.xml"; + private static final String DOWNLOAD = "Letöltés"; + + @StepEntry + public Object[] execute(String storeName, List newFiles, List updatedFiles) throws Exception { + if (!getJobRuntime().forkPrepare()) + throw new Exception("Unable to fork"); + + IItemManager manager = getManager(); + Store store = manager.getStore(storeName); + if (store == null) + throw new NullPointerException("Store not available: " + storeName); + + for (Media media : newFiles) { + try { + IJobRuntime runtime = getEngine().submit(getJobRuntime(), null, JOBTEMPLATE, DOWNLOAD, ListUtils.asMap("store", store, "media", media)); + if (runtime == null) + throw new Exception("Unable to submit job"); + } catch (Exception e) { + logger.error(e.getMessage()); + throw e; + } + } + + getJobRuntime().forkWaitComplete(); + return null; + } + +} diff --git a/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF b/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF index aaf830e0..b04cd544 100644 --- a/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF +++ b/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF @@ -28,10 +28,13 @@ Export-Package: user.commons, user.commons.mediatool, user.commons.morpheus, user.commons.nexio, + user.commons.nexio.api, + user.commons.nexio.server.protocol, user.commons.nosql, user.commons.octopus, user.commons.rcc, user.commons.remotestore, + user.commons.rest, user.commons.selenio, user.commons.selenio.wsclient, user.commons.server.protocol, diff --git a/server/user.jobengine.osgi.commons/src/user/commons/JobStatus.java b/server/user.jobengine.osgi.commons/src/user/commons/JobStatus.java index ff40329c..d8c2cfa4 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/JobStatus.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/JobStatus.java @@ -39,7 +39,11 @@ public enum JobStatus { /** * Végrehajtás alatt - a folyamat végrehajtó futtatja a lépést. */ - EXECUTING(0x1000); + EXECUTING(0x1000), + /** + * Végrehajtás alatt - a folyamat végrehajtó futtatja a lépést. + */ + WAIT_FINISH(0x010C); private final int value; diff --git a/server/user.jobengine.osgi.commons/src/user/commons/remotestore/RemoteStoreProtocol.java b/server/user.jobengine.osgi.commons/src/user/commons/remotestore/RemoteStoreProtocol.java index 2ace5d19..c053aacb 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/remotestore/RemoteStoreProtocol.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/remotestore/RemoteStoreProtocol.java @@ -1,7 +1,7 @@ package user.commons.remotestore; public enum RemoteStoreProtocol { - HTTPS("https://"), HTTP("http://"), FTP("ftp://"), SMB("smb://"), LOCAL("file://"), TSM("tsm://"); + HTTPS("https://"), HTTP("http://"), FTP("ftp://"), SMB("smb://"), LOCAL("file://"), TSM("tsm://"), NEXIO("nexio://"); static public RemoteStoreProtocol fromString(String data) { RemoteStoreProtocol result = null; if (data != null) { diff --git a/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/RFC3339DateFormat.java b/server/user.jobengine.osgi.commons/src/user/commons/rest/RFC3339DateFormat.java similarity index 94% rename from server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/RFC3339DateFormat.java rename to server/user.jobengine.osgi.commons/src/user/commons/rest/RFC3339DateFormat.java index ca8a062c..a3a51a39 100644 --- a/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/RFC3339DateFormat.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/rest/RFC3339DateFormat.java @@ -1,4 +1,4 @@ -package user.jobengine.osgi.rest; +package user.commons.rest; import java.text.FieldPosition; import java.util.Date; diff --git a/server/user.jobengine.osgi.commons/src/user/commons/rest/ServiceObjectMapper.java b/server/user.jobengine.osgi.commons/src/user/commons/rest/ServiceObjectMapper.java new file mode 100644 index 00000000..1cc64ceb --- /dev/null +++ b/server/user.jobengine.osgi.commons/src/user/commons/rest/ServiceObjectMapper.java @@ -0,0 +1,18 @@ +package user.commons.rest; + +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.joda.JodaModule; + +public class ServiceObjectMapper { + private static final ObjectMapper mapper = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).registerModule(new JodaModule()).setDateFormat(new RFC3339DateFormat()) + .setSerializationInclusion(Include.NON_NULL); + // .enable(SerializationFeature.INDENT_OUTPUT); + + public static ObjectMapper getMapper() { + return mapper; + } +} diff --git a/server/user.jobengine.osgi.db/build-remote-sqlj.bat b/server/user.jobengine.osgi.db/build-remote-sqlj.bat index b8bb4798..43ab407b 100644 --- a/server/user.jobengine.osgi.db/build-remote-sqlj.bat +++ b/server/user.jobengine.osgi.db/build-remote-sqlj.bat @@ -3,8 +3,8 @@ ::Remote:: SET REMOTE_LOCATION=/tmp/mediaarch - SET REMOTE_SERVER_HOSTKEY=ssh-ed25519 256 ea:ab:67:70:79:63:2f:6a:34:81:48:e2:b9:dd:ca:d4 - SET REMOTE_SERVER_ADDRESS=scp://db2admin:password@10.10.1.27 + SET REMOTE_SERVER_HOSTKEY=ssh-ed25519 256 86:5b:9b:bc:df:7b:df:90:c6:bf:60:69:d2:c9:61:62 + SET REMOTE_SERVER_ADDRESS=scp://db2admin:password@10.228.198.1 CALL :deploy_source if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/EntityBaseDAO.java b/server/user.jobengine.osgi.db/generated/user/jobengine/db/EntityBaseDAO.java index 86ec7f16..9cdfc377 100644 --- a/server/user.jobengine.osgi.db/generated/user/jobengine/db/EntityBaseDAO.java +++ b/server/user.jobengine.osgi.db/generated/user/jobengine/db/EntityBaseDAO.java @@ -33,6 +33,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { try { add(context, entity); } catch (Exception e) { + //TODO reszletezes throw new ItemManagerException(e); } finally { manager.putDbContext(context); @@ -48,7 +49,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { insert(context, entity); if (id == 0) { - /*@lineinfo:generated-code*//*@lineinfo:51^4*/ + /*@lineinfo:generated-code*//*@lineinfo:52^4*/ // ************************************************************ // #sql [context] { SELECT IDENTITY_VAL_LOCAL() INTO :id, FROM SYSIBM.SYSDUMMY1 }; @@ -93,11 +94,11 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:51^80*/ +/*@lineinfo:user-code*//*@lineinfo:52^80*/ entity.setId(id); } afterAdd(context, entity); - /*@lineinfo:generated-code*//*@lineinfo:55^3*/ + /*@lineinfo:generated-code*//*@lineinfo:56^3*/ // ************************************************************ // #sql [context] { COMMIT }; @@ -124,13 +125,13 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:55^27*/ +/*@lineinfo:user-code*//*@lineinfo:56^27*/ if (useMemoryCache()) manager.storeCached(entity.getId(), entity); } catch (Exception e) { try { - /*@lineinfo:generated-code*//*@lineinfo:61^4*/ + /*@lineinfo:generated-code*//*@lineinfo:62^4*/ // ************************************************************ // #sql [context] { ROLLBACK }; @@ -157,7 +158,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:61^30*/ +/*@lineinfo:user-code*//*@lineinfo:62^30*/ } catch(Exception e1) { } manager.throwError(e); @@ -215,7 +216,36 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { } return result; } - + + @Override + public IEntityBase get(IDAOIterProvider provider) { + IEntityBase entity = null; + DefaultContext context = manager.getDbContext(); + try { + entity = get(context, provider); + } catch (Exception e) { + throw new ItemManagerException(e); + } finally { + manager.putDbContext(context); + } + return entity; + } + + private IEntityBase get(DefaultContext context, IDAOIterProvider provider) { + manager.traceIn(); + IEntityBase entity = null; + try { + ResultSetIterImpl iter = provider.get(context, this); + checkNull(iter, ResultSetIterImpl.class); + entity = getEntity(context, iter); + afterGet(context, entity); + } catch (Exception e) { + throw new ItemManagerException(e); + } + manager.traceOut(); + return entity; + } + public List getAll(DefaultContext context) { manager.traceIn(); List result = null; @@ -318,7 +348,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { manager.setAllCached(getCacheType(), result); } - /*@lineinfo:generated-code*//*@lineinfo:222^3*/ + /*@lineinfo:generated-code*//*@lineinfo:252^3*/ // ************************************************************ // #sql [context] { COMMIT }; @@ -345,10 +375,10 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:222^27*/ +/*@lineinfo:user-code*//*@lineinfo:252^27*/ } catch (Exception e) { try { - /*@lineinfo:generated-code*//*@lineinfo:225^4*/ + /*@lineinfo:generated-code*//*@lineinfo:255^4*/ // ************************************************************ // #sql [context] { ROLLBACK }; @@ -375,7 +405,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:225^30*/ +/*@lineinfo:user-code*//*@lineinfo:255^30*/ } catch(Exception e1) { } manager.throwError(e); @@ -419,7 +449,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { entity.checkParameter("ID", id, false); update(context, entity); afterModify(context, entity); - /*@lineinfo:generated-code*//*@lineinfo:269^3*/ + /*@lineinfo:generated-code*//*@lineinfo:299^3*/ // ************************************************************ // #sql [context] { COMMIT }; @@ -446,12 +476,12 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:269^27*/ +/*@lineinfo:user-code*//*@lineinfo:299^27*/ if (useMemoryCache()) manager.storeCached(entity.getId(), entity); } catch (Exception e) { try { - /*@lineinfo:generated-code*//*@lineinfo:274^4*/ + /*@lineinfo:generated-code*//*@lineinfo:304^4*/ // ************************************************************ // #sql [context] { ROLLBACK }; @@ -478,7 +508,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:274^30*/ +/*@lineinfo:user-code*//*@lineinfo:304^30*/ } catch(Exception e1) { } manager.throwError(e); @@ -507,7 +537,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { beforeDelete(context, entity); delete(context, id); afterDelete(context, entity); - /*@lineinfo:generated-code*//*@lineinfo:303^3*/ + /*@lineinfo:generated-code*//*@lineinfo:333^3*/ // ************************************************************ // #sql [context] { COMMIT }; @@ -534,12 +564,12 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:303^27*/ +/*@lineinfo:user-code*//*@lineinfo:333^27*/ if (useMemoryCache()) manager.removeCached(getCacheType(), entity.getId()); } catch (Exception e) { try { - /*@lineinfo:generated-code*//*@lineinfo:308^4*/ + /*@lineinfo:generated-code*//*@lineinfo:338^4*/ // ************************************************************ // #sql [context] { ROLLBACK }; @@ -566,7 +596,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:308^30*/ +/*@lineinfo:user-code*//*@lineinfo:338^30*/ } catch(Exception e1) { } manager.throwError(e); @@ -590,7 +620,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { try { for (long id : ids) delete(context, id); - /*@lineinfo:generated-code*//*@lineinfo:332^3*/ + /*@lineinfo:generated-code*//*@lineinfo:362^3*/ // ************************************************************ // #sql [context] { COMMIT }; @@ -617,14 +647,14 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:332^27*/ +/*@lineinfo:user-code*//*@lineinfo:362^27*/ if (useMemoryCache()) { for (long id : ids) manager.removeCached(getCacheType(), id); } } catch (Exception e) { try { - /*@lineinfo:generated-code*//*@lineinfo:339^4*/ + /*@lineinfo:generated-code*//*@lineinfo:369^4*/ // ************************************************************ // #sql [context] { ROLLBACK }; @@ -651,7 +681,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:339^30*/ +/*@lineinfo:user-code*//*@lineinfo:369^30*/ } catch(Exception e1) { } manager.throwError(e); @@ -665,7 +695,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { DefaultContext context = manager.getDbContext(); try { truncateTable(context); - /*@lineinfo:generated-code*//*@lineinfo:353^3*/ + /*@lineinfo:generated-code*//*@lineinfo:383^3*/ // ************************************************************ // #sql [context] { COMMIT }; @@ -692,7 +722,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:353^27*/ +/*@lineinfo:user-code*//*@lineinfo:383^27*/ } catch (Exception e) { throw new ItemManagerException(e); } finally { diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/IDAOIterProvider.java b/server/user.jobengine.osgi.db/generated/user/jobengine/db/IDAOIterProvider.java new file mode 100644 index 00000000..67b505ef --- /dev/null +++ b/server/user.jobengine.osgi.db/generated/user/jobengine/db/IDAOIterProvider.java @@ -0,0 +1,10 @@ +package user.jobengine.db; + +import sqlj.runtime.ref.DefaultContext; +import sqlj.runtime.ref.ResultSetIterImpl; + +public interface IDAOIterProvider { + + ResultSetIterImpl get(DefaultContext context, IEntityBaseDAO dao); + +} diff --git a/server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java b/server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java index 62c64de1..ab9e44fe 100644 --- a/server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java +++ b/server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java @@ -3,6 +3,8 @@ package user.commons.pool; import java.lang.reflect.InvocationTargetException; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; import java.util.Properties; import org.apache.logging.log4j.LogManager; @@ -32,10 +34,15 @@ public class ContextPool extends ResourcePool { protected boolean checkObject(Object resourceObject) { DefaultContext context = (DefaultContext) resourceObject; boolean result = false; - try { - result = context.getConnection().isClosed(); - } catch (Exception e) { - logger.catching(e); + String sql = "SELECT 1 FROM SYSIBM.SYSDUMMY1"; + try (Statement stmt = context.getConnection().createStatement()) { + try (ResultSet resultSet = stmt.executeQuery(sql)) { + result = true; + } catch (Exception e2) { + throw e2; + } + } catch (Exception e1) { + logger.catching(e1); } return result; } diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/DynamicAttributesDAO.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/DynamicAttributesDAO.java index cb5e2b92..bf3c73cf 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/DynamicAttributesDAO.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/DynamicAttributesDAO.java @@ -291,4 +291,5 @@ public class DynamicAttributesDAO extends EntityBaseDAO { DomainIndexDAO indexdao = (DomainIndexDAO) manager.getBaseDAO(DomainIndex.class); indexdao.removeAll(context, entity, metadata); } + } diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/EntityBaseDAO.sqlj b/server/user.jobengine.osgi.db/src/user/jobengine/db/EntityBaseDAO.sqlj index b9822450..4cf5a483 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/EntityBaseDAO.sqlj +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/EntityBaseDAO.sqlj @@ -33,6 +33,7 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { try { add(context, entity); } catch (Exception e) { + //TODO reszletezes throw new ItemManagerException(e); } finally { manager.putDbContext(context); @@ -116,7 +117,36 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { } return result; } - + + @Override + public IEntityBase get(IDAOIterProvider provider) { + IEntityBase entity = null; + DefaultContext context = manager.getDbContext(); + try { + entity = get(context, provider); + } catch (Exception e) { + throw new ItemManagerException(e); + } finally { + manager.putDbContext(context); + } + return entity; + } + + private IEntityBase get(DefaultContext context, IDAOIterProvider provider) { + manager.traceIn(); + IEntityBase entity = null; + try { + ResultSetIterImpl iter = provider.get(context, this); + checkNull(iter, ResultSetIterImpl.class); + entity = getEntity(context, iter); + afterGet(context, entity); + } catch (Exception e) { + throw new ItemManagerException(e); + } + manager.traceOut(); + return entity; + } + public List getAll(DefaultContext context) { manager.traceIn(); List result = null; diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/IEntityBaseDAO.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/IEntityBaseDAO.java index 85e8a613..fb1f94d8 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/IEntityBaseDAO.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/IEntityBaseDAO.java @@ -7,16 +7,18 @@ import user.commons.IEntityBase; public interface IEntityBaseDAO { void add(IEntityBase entity); + IEntityBase get(IDAOIterProvider provider); + IEntityBase get(long id); List getAll(); List getAll(long id); - void modify(IEntityBase entity); - void merge(IEntityBase entity); + void modify(IEntityBase entity); + void remove(IEntityBase entity); void remove(List ids); diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java index 99a60ef2..b818d885 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java @@ -222,6 +222,8 @@ public interface IItemManager extends IEntityPersister { */ Media getMedia(long id); + Media getMedia(String title); + /** * Azonosító alapján elkér egy Metaadat elem objektumot. * diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java index 419efda7..b4043ca3 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java @@ -24,6 +24,7 @@ import org.apache.logging.log4j.Logger; import com.ibm.nosql.json.api.BasicDBObject; import sqlj.runtime.ref.DefaultContext; +import sqlj.runtime.ref.ResultSetIterImpl; import user.commons.BaseType; import user.commons.CalendarUtils; import user.commons.IEntityBase; @@ -84,8 +85,6 @@ public class ItemManager extends MemoryCache implements IItemManager { public ItemManager() { initializeItemManager(signalServer); - connect(); - // TODO mediafinder lokalis valtozo helyett private field. // System.getProperty("jobengine.mediafinder.external") == true // System.getProperty("jobengine.mediafinder.external.url") @@ -100,13 +99,9 @@ public class ItemManager extends MemoryCache implements IItemManager { } public void activate() { - // logger.info("ItemManager activated."); + connect(); } - // public ItemManager(SignalServer signalServer) { - // initializeItemManager(signalServer); - // } - @Override public void add(IEntityBase entity) { traceIn(); @@ -424,6 +419,7 @@ public class ItemManager extends MemoryCache implements IItemManager { public void deactivate() { // logger.info("ItemManager deactivated."); + disconnect(); } /** @@ -609,7 +605,8 @@ public class ItemManager extends MemoryCache implements IItemManager { @Override public DefaultContext getDbContext() { DefaultContext context = null; - context = contextPool.borrowObject(); + if (contextPool != null) + context = contextPool.borrowObject(); return context; } @@ -820,6 +817,20 @@ public class ItemManager extends MemoryCache implements IItemManager { return (Media) get(Media.class, id); } + @Override + public Media getMedia(String title) { + IEntityBaseDAO daoBase = getBaseDAO(Media.class); + return (Media) daoBase.get((context, dao) -> { + ResultSetIterImpl result = null; + try { + result = ((MediaDAO) dao).selectByTitle(context, title); + } catch (SQLException e) { + logger.error(e.getMessage()); + } + return result; + }); + } + @Override public MetadataElement getMetadataElement(long id) { return (MetadataElement) get(MetadataElement.class, id); diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/Media.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/Media.java index 69f473f3..a88400cb 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/Media.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/Media.java @@ -20,6 +20,7 @@ public class Media extends DynamicAttributes { private static final long serialVersionUID = 1L; private Timestamp archived = null; private Timestamp created = null; + private Timestamp modified = null; private String description = null; private String houseId = null; private long itemId = 0; @@ -116,6 +117,10 @@ public class Media extends DynamicAttributes { return mediaFilesName; } + public Timestamp getModified() { + return modified; + } + public byte[] getPoster() { return poster; } @@ -166,6 +171,10 @@ public class Media extends DynamicAttributes { this.mediaFilesName = mediaFilesName; } + public void setModified(Timestamp modified) { + this.modified = modified; + } + public void setPoster(byte[] poster) { this.poster = poster; } diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaDAO.sqlj b/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaDAO.sqlj index eadadce9..fbcd0cce 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaDAO.sqlj +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaDAO.sqlj @@ -7,7 +7,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.List; -#sql iterator MediaIter(long id, String title, String description, long itemId, long itemTypeId, String houseId, long length, Timestamp created, Timestamp archived, byte[] poster); +#sql iterator MediaIter(long id, String title, String description, long itemId, long itemTypeId, String houseId, long length, Timestamp created, Timestamp archived, Timestamp modified, byte[] poster); @SuppressWarnings("unused") class MediaDAO extends EntityBaseDAO { @@ -62,6 +62,7 @@ class MediaDAO extends EntityBaseDAO { entity.setLength(iterator.length()); entity.setCreated(iterator.created()); entity.setArchived(iterator.archived()); + entity.setModified(iterator.modified()); entity.setPoster(iterator.poster()); if (result == null) @@ -75,21 +76,27 @@ class MediaDAO extends EntityBaseDAO { @Override protected ResultSetIterImpl selectByKey(DefaultContext context, long id) throws SQLException{ MediaIter iter = null; - #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, POSTER FROM MEDIA WHERE ID = :id }; + #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, MODIFIED, POSTER FROM MEDIA WHERE ID = :id }; return iter; } @Override protected ResultSetIterImpl selectByForeignKey(DefaultContext context, long id) throws SQLException{ MediaIter iter = null; - #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, POSTER FROM MEDIA WHERE ITEMID = :id }; + #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, MODIFIED, POSTER FROM MEDIA WHERE ITEMID = :id }; + return iter; + } + + public ResultSetIterImpl selectByTitle(DefaultContext context, String title) throws SQLException{ + MediaIter iter = null; + #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, MODIFIED, POSTER FROM MEDIA WHERE TITLE = :title }; return iter; } @Override protected ResultSetIterImpl selectAll(DefaultContext context) throws SQLException{ MediaIter iter = null; - #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, POSTER FROM MEDIA }; + #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, MODIFIED, POSTER FROM MEDIA }; return iter; } @@ -115,8 +122,9 @@ class MediaDAO extends EntityBaseDAO { long length = obj.getLength(); byte[] poster = obj.getPoster(); Timestamp archived = obj.getArchived(); + Timestamp modified = obj.getModified(); - #sql [context] { UPDATE MEDIA SET TITLE = :title, DESCRIPTION = :description, ITEMID = :itemId, ITEMTYPEID = :itemTypeId, HOUSEID = :houseId, LENGTH = :length, POSTER = :poster, ARCHIVED = :archived WHERE ID = :id }; + #sql [context] { UPDATE MEDIA SET TITLE = :title, DESCRIPTION = :description, ITEMID = :itemId, ITEMTYPEID = :itemTypeId, HOUSEID = :houseId, LENGTH = :length, POSTER = :poster, ARCHIVED = :archived, MODIFIED = :modified WHERE ID = :id }; } @Override @@ -131,12 +139,13 @@ class MediaDAO extends EntityBaseDAO { long length = obj.getLength(); byte[] poster = obj.getPoster(); Timestamp archived = obj.getArchived(); + Timestamp modified = obj.getModified(); - #sql [context] { INSERT INTO MEDIA (ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, POSTER, ARCHIVED) VALUES (:id, :title, :description, :itemId, :itemTypeId, :houseId, :length, :poster, :archived) }; + #sql [context] { INSERT INTO MEDIA (ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, POSTER, ARCHIVED, MODIFIED) VALUES (:id, :title, :description, :itemId, :itemTypeId, :houseId, :length, :poster, :archived, :modified) }; } /** - * Beszúrja az Item objektumhoz kapcsolódó statikus/dinamikus Media adatokat. + * Besz�rja az Item objektumhoz kapcsol�d� statikus/dinamikus Media adatokat. */ void addAll(DefaultContext context, IEntityBase entity) throws SQLException { manager.traceIn(); diff --git a/server/user.jobengine.osgi.server/META-INF/MANIFEST.MF b/server/user.jobengine.osgi.server/META-INF/MANIFEST.MF index ecf43fa1..fae09eba 100644 --- a/server/user.jobengine.osgi.server/META-INF/MANIFEST.MF +++ b/server/user.jobengine.osgi.server/META-INF/MANIFEST.MF @@ -4,7 +4,11 @@ Bundle-Name: Server Bundle-SymbolicName: user.jobengine.osgi.server;singleton:=true Bundle-Version: 1.0.0 Service-Component: OSGI-INF/component.xml, OSGI-INF/componentBinder.xml -Import-Package: javax.servlet;version="3.1.0", +Import-Package: com.fasterxml.jackson.jaxrs.cfg;version="2.4.5", + com.fasterxml.jackson.jaxrs.json;version="2.4.5", + com.fasterxml.jackson.module.jaxb;version="2.4.5", + groovy.lang;version="3.0.3", + javax.servlet;version="3.1.0", javax.servlet.http;version="3.1.0", javax.ws.rs.client, javax.ws.rs.core, diff --git a/server/user.jobengine.osgi.server/pages/joblist.zul b/server/user.jobengine.osgi.server/pages/joblist.zul index a078b635..0367b70a 100644 --- a/server/user.jobengine.osgi.server/pages/joblist.zul +++ b/server/user.jobengine.osgi.server/pages/joblist.zul @@ -42,6 +42,7 @@ emptyMessage="Nincs futó folyamat" > + @@ -55,6 +56,7 @@