From 7f27c46f8d94f092a7b9f85159d62f127717984b Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1s=C3=A1ry=20D=C3=A1niel?= Date: Mon, 12 Feb 2018 10:31:56 +0000 Subject: [PATCH] git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C30895 --- .../run-mediacube-server-bsh.launch | 2 +- server/-configuration/scheduledjobs.json | 2 +- server/-product/mediacube.product | 37 ++++----- .../retrieve-missing-material.xml | 6 +- .../ImportMORPHEUSMissingMaterialsStep.java | 75 +++++++++---------- .../steps/TSMRetrieveMissingMaterialStep.java | 22 +++++- .../META-INF/MANIFEST.MF | 1 + .../commons/morpheus/MorpheusStrings.java | 27 +++++++ .../octopus/test/OctopusDataMinerTest.java | 9 +++ .../zk/model/MissingMaterialsModel.java | 73 +++++++++++------- 10 files changed, 159 insertions(+), 95 deletions(-) create mode 100644 server/user.jobengine.osgi.commons/src/user/commons/morpheus/MorpheusStrings.java diff --git a/server/-configuration/run-mediacube-server-bsh.launch b/server/-configuration/run-mediacube-server-bsh.launch index 994675ae..e6edad96 100644 --- a/server/-configuration/run-mediacube-server-bsh.launch +++ b/server/-configuration/run-mediacube-server-bsh.launch @@ -19,7 +19,7 @@ - + diff --git a/server/-configuration/scheduledjobs.json b/server/-configuration/scheduledjobs.json index 953a3db7..378dd271 100644 --- a/server/-configuration/scheduledjobs.json +++ b/server/-configuration/scheduledjobs.json @@ -77,7 +77,7 @@ ] }, { - "active": true, + "active": false, "executeimmediate": false, "name" : "Lejárt NEXIO anyagok törlése", "template": "delete-nexio-materials.xml", diff --git a/server/-product/mediacube.product b/server/-product/mediacube.product index 63ec8450..74e9543b 100644 --- a/server/-product/mediacube.product +++ b/server/-product/mediacube.product @@ -9,25 +9,26 @@ -consoleLog -console 5555 - -Xms512m --Xmx1024m --Dfile.encoding=UTF-8 --agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888 --Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory - -#System --Djetty.home=/opt/mediacube/configuration/jetty --Dlog4j.configurationFile=/opt/mediacube/configuration/log4j2.xml --Djobengine.jobsteps.root=/opt/mediacube/configuration/executors --Djobengine.jobtemplates.root=/opt/mediacube/configuration/jobtemplates --Djobengine.jobscheduling.config=/opt/mediacube/configuration/scheduledjobs.json --Dmediacube.auth.location=/opt/mediacube/configuration/mediacube-auth.properties - --Dorg.eclipse.epp.logging.aeri.skipReports=true --Declipse.ignoreApp=true --Dosgi.noShutdown=true --Djobengine.loglevel=INFO + -Xms512m +-Xmx1024m +-Dfile.encoding=UTF-8 +-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888 +-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory + +#System +-Djetty.home=/opt/mediacube/configuration/jetty +-Dlog4j.configurationFile=/opt/mediacube/configuration/log4j2.xml +-Djobengine.jobsteps.root=/opt/mediacube/configuration/executors +-Djobengine.jobtemplates.root=/opt/mediacube/configuration/jobtemplates +-Djobengine.jobscheduling.config=/opt/mediacube/configuration/scheduledjobs.json +-Dmediacube.auth.location=/opt/mediacube/configuration/mediacube-auth.properties + +-Dorg.eclipse.epp.logging.aeri.skipReports=true +-Declipse.ignoreApp=true +-Dosgi.noShutdown=true +-Djobengine.loglevel=INFO -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,etc/user-jetty-http.xml,etc/user-jetty-https.xml +-Djava.io.tmpdir=/opt/mediacube/tmp #Database -Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; diff --git a/server/user.jobengine.executors/jobtemplates/retrieve-missing-material.xml b/server/user.jobengine.executors/jobtemplates/retrieve-missing-material.xml index 8a900df3..49bcb3aa 100644 --- a/server/user.jobengine.executors/jobtemplates/retrieve-missing-material.xml +++ b/server/user.jobengine.executors/jobtemplates/retrieve-missing-material.xml @@ -1,15 +1,15 @@ - + - + - + diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportMORPHEUSMissingMaterialsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportMORPHEUSMissingMaterialsStep.java index 65df9e6f..c5796eb4 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportMORPHEUSMissingMaterialsStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/ImportMORPHEUSMissingMaterialsStep.java @@ -27,6 +27,7 @@ import com.ibm.nosql.json.api.DBObject; import com.ibm.nosql.json.api.QueryBuilder; import user.commons.IEntityBase; +import user.commons.morpheus.MorpheusStrings; import user.commons.nosql.NoSQLUtils; import user.jobengine.db.IItemManager; import user.jobengine.db.MediaFile; @@ -35,17 +36,7 @@ import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; public class ImportMORPHEUSMissingMaterialsStep extends JobStep { - private static final String STATUS = "Status"; - private static final String IMPORTED = "Imported"; private static final Logger logger = LogManager.getLogger(); - private static final String MATERIAL_ID = "Material ID"; - private static final String CHANNEL = "Channel"; - private static final String TIME_TO_AIR = "Time to Air"; - private static final String DURATION = "Duration"; - private static final String TITLE = "Title"; - private static final String DEVICE_ID = "Device ID"; - private static final String REASON = "Reason"; - private static final String COLLECTION_NAME = "missing_materials"; private static final String CSV_EXT = ".csv"; private static final String MXF_EXT = ".MXF"; @@ -61,13 +52,13 @@ public class ImportMORPHEUSMissingMaterialsStep extends JobStep { private Map buildMetadataMap(Path csvFilePath, String[] data) throws Exception { Map result = new HashMap<>(); List dataList = Arrays.asList(data); - storeMetadataPosition(csvFilePath, dataList, MATERIAL_ID, result); - storeMetadataPosition(csvFilePath, dataList, CHANNEL, result); - storeMetadataPosition(csvFilePath, dataList, TIME_TO_AIR, result); - storeMetadataPosition(csvFilePath, dataList, DURATION, result); - storeMetadataPosition(csvFilePath, dataList, TITLE, result); - storeMetadataPosition(csvFilePath, dataList, DEVICE_ID, result); - storeMetadataPosition(csvFilePath, dataList, REASON, result); + storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.MATERIAL_ID, result); + storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.CHANNEL, result); + storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.TIME_TO_AIR, result); + storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.DURATION, result); + storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.TITLE, result); + storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.DEVICE_ID, result); + storeMetadataPosition(csvFilePath, dataList, MorpheusStrings.REASON, result); return result; } @@ -98,47 +89,49 @@ public class ImportMORPHEUSMissingMaterialsStep extends JobStep { } private void processLine(String[] data, Map metadatas) throws Exception { - String channel = data[metadatas.get(CHANNEL)]; - String timeToAir = data[metadatas.get(TIME_TO_AIR)]; - String duration = data[metadatas.get(DURATION)]; - String materialID = data[metadatas.get(MATERIAL_ID)]; - String title = data[metadatas.get(TITLE)]; - String deviceID = data[metadatas.get(DEVICE_ID)]; - String reason = data[metadatas.get(REASON)]; - - DBObject query = QueryBuilder.start().and(QueryBuilder.start(MATERIAL_ID).is(materialID).get(), QueryBuilder.start(TIME_TO_AIR).is(timeToAir).get()) + String channel = data[metadatas.get(MorpheusStrings.CHANNEL)]; + String timeToAir = data[metadatas.get(MorpheusStrings.TIME_TO_AIR)]; + String duration = data[metadatas.get(MorpheusStrings.DURATION)]; + String materialID = data[metadatas.get(MorpheusStrings.MATERIAL_ID)]; + String title = data[metadatas.get(MorpheusStrings.TITLE)]; + String deviceID = data[metadatas.get(MorpheusStrings.DEVICE_ID)]; + String reason = data[metadatas.get(MorpheusStrings.REASON)]; + + DBObject query = QueryBuilder.start() + .and(QueryBuilder.start(MorpheusStrings.MATERIALID).is(materialID).get(), QueryBuilder.start(MorpheusStrings.TIMETOAIR).is(timeToAir).get()) .get(); - DBCollection collection = db.getCollection(COLLECTION_NAME); + DBCollection collection = db.getCollection(MorpheusStrings.COLLECTION_NAME); BasicDBObject existingObject = (BasicDBObject) collection.findOne(query); if (existingObject != null) { - logger.warn(jobRuntime.getMarker(), "Az '{}' anyag már feldolgozásra került az {} időpontban.", materialID, existingObject.getDate(IMPORTED)); + logger.warn(jobRuntime.getMarker(), "Az '{}' anyag már feldolgozásra került az {} időpontban.", materialID, + existingObject.getDate(MorpheusStrings.IMPORTED)); return; } - BasicDBObject dbObject = new BasicDBObject(IMPORTED, new Date()); - dbObject.put(CHANNEL, channel); - dbObject.put(TIME_TO_AIR.replace(" ", ""), enDateFormat.parse(timeToAir)); - dbObject.put(DURATION, duration); - dbObject.put(MATERIAL_ID.replace(" ", ""), materialID); - dbObject.put(TITLE, title); - dbObject.put(DEVICE_ID.replace(" ", ""), deviceID); - dbObject.put(REASON, reason); + BasicDBObject dbObject = new BasicDBObject(MorpheusStrings.IMPORTED, new Date()); + dbObject.put(MorpheusStrings.CHANNEL, channel); + dbObject.put(MorpheusStrings.TIMETOAIR, enDateFormat.parse(timeToAir)); + dbObject.put(MorpheusStrings.DURATION, duration); + dbObject.put(MorpheusStrings.MATERIALID, materialID); + dbObject.put(MorpheusStrings.TITLE, title); + dbObject.put(MorpheusStrings.DEVICEID, deviceID); + dbObject.put(MorpheusStrings.REASON, reason); String fileName = materialID + MXF_EXT; if (Files.exists(Paths.get(targetPath, fileName))) { logger.warn(jobRuntime.getMarker(), "Az '{}' anyag már be van töltve.", materialID); - dbObject.put(STATUS, "SKIPPED"); + dbObject.put(MorpheusStrings.STATUS, MorpheusStrings.STATUS_SKIPPED); } else { List medias = dao.getByHouseId(fileName); if (medias == null || medias.size() == 0) { logger.warn(jobRuntime.getMarker(), "Az '{}' anyag nem található az archívumban.", materialID); - dbObject.put(STATUS, "UNAVAILABLE"); + dbObject.put(MorpheusStrings.STATUS, MorpheusStrings.STATUS_UNAVAILABLE); } else if (medias.size() > 1) { logger.warn(jobRuntime.getMarker(), "Az '{}' anyagból egynél több található az archívumban.", materialID); - dbObject.put(STATUS, "MULTIPLE"); + dbObject.put(MorpheusStrings.STATUS, MorpheusStrings.STATUS_MULTIPLE); } else { logger.info(jobRuntime.getMarker(), "Az '{}' anyag megtalálható az archívumban.", materialID); - dbObject.put(STATUS, "RESTORABLE"); + dbObject.put(MorpheusStrings.STATUS, MorpheusStrings.STATUS_RESTORABLE); } } @@ -244,7 +237,7 @@ public class ImportMORPHEUSMissingMaterialsStep extends JobStep { private void storeMetadataPosition(Path csvFilePath, List dataList, String name, Map metadatas) throws Exception { int pos = dataList.indexOf(name); if (pos < 0) - throw new Exception(String.format("A '%s' MORPHEUS állományban nem található a '%s' mező.", csvFilePath.getFileName(), MATERIAL_ID)); + throw new Exception(String.format("A '%s' MORPHEUS állományban nem található a '%s' mező.", csvFilePath.getFileName(), name)); metadatas.put(name, pos); } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRetrieveMissingMaterialStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRetrieveMissingMaterialStep.java index d0688081..7cb0e8f6 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRetrieveMissingMaterialStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRetrieveMissingMaterialStep.java @@ -3,6 +3,12 @@ package user.jobengine.server.steps; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import com.ibm.nosql.json.api.BasicDBObject; +import com.ibm.nosql.json.api.DB; +import com.ibm.nosql.json.api.DBCollection; + +import user.commons.morpheus.MorpheusStrings; +import user.commons.nosql.NoSQLUtils; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; @@ -10,17 +16,29 @@ public class TSMRetrieveMissingMaterialStep extends JobStep { private static final Logger logger = LogManager.getLogger(); @StepEntry - public Object[] execute(String fileName, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + public Object[] execute(BasicDBObject material, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { logger.info(jobRuntime.getMarker(), "Starting"); try { for (int i = 0; i < 10; i++) { jobRuntime.incrementProgress((i + 1) * 10); - Thread.sleep(1000); + Thread.sleep(100); } } catch (Exception e) { logger.error(e.getMessage()); } logger.info(jobRuntime.getMarker(), "Finished"); + + DB db = NoSQLUtils.getNoSQLDB(); + DBCollection collection = db.getCollection(MorpheusStrings.COLLECTION_NAME); + try { + material.put(MorpheusStrings.STATUS, MorpheusStrings.STATUS_DONE); + } catch (Exception e) { + logger.catching(e); + material.put(MorpheusStrings.STATUS, MorpheusStrings.STATUS_ERROR); + throw e; + } finally { + collection.save(material); + } 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 1b5c1084..51f1af6f 100644 --- a/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF +++ b/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF @@ -21,6 +21,7 @@ Service-Component: OSGI-INF/nexioAPI.xml, OSGI-INF/octopusAPI.xml Export-Package: user.commons, user.commons.ftp, user.commons.logging, + user.commons.morpheus, user.commons.nexio, user.commons.nosql, user.commons.octopus, diff --git a/server/user.jobengine.osgi.commons/src/user/commons/morpheus/MorpheusStrings.java b/server/user.jobengine.osgi.commons/src/user/commons/morpheus/MorpheusStrings.java new file mode 100644 index 00000000..56e25655 --- /dev/null +++ b/server/user.jobengine.osgi.commons/src/user/commons/morpheus/MorpheusStrings.java @@ -0,0 +1,27 @@ +package user.commons.morpheus; + +public class MorpheusStrings { + public static final String COLLECTION_NAME = "missing_materials"; + public static final String MATERIAL = "material"; + public static final String MATERIALID = "MaterialID"; + public static final String MATERIAL_ID = "Material ID"; + public static final String IMPORTED = "Imported"; + public static final String CHANNEL = "Channel"; + public static final String DURATION = "Duration"; + public static final String TITLE = "Title"; + public static final String DEVICEID = "DeviceID"; + public static final String DEVICE_ID = "Device ID"; + public static final String REASON = "Reason"; + public static final String TIMETOAIR = "TimetoAir"; + public static final String TIME_TO_AIR = "Time to Air"; + public static final String STATUS = "Status"; + + public static final String STATUS_RETRIEVING = "RETRIEVING"; + public static final String STATUS_RESTORABLE = "RESTORABLE"; + public static final String STATUS_DONE = "DONE"; + public static final String STATUS_ERROR = "ERROR"; + public static final String STATUS_SKIPPED = "SKIPPED"; + public static final String STATUS_UNAVAILABLE = "UNAVAILABLE"; + public static final String STATUS_MULTIPLE = "MULTIPLE"; + +} diff --git a/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java b/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java index cf6962ad..e94eeada 100644 --- a/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java +++ b/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java @@ -109,6 +109,14 @@ public class OctopusDataMinerTest { // // } + // @Test + // public void test1() { + // BasicDBObject x = new BasicDBObject("x", "x"); + // BasicDBObject y = new BasicDBObject("x", "y"); + // + // assertEquals(x, y); + // } + @Test public void testClient() { ResteasyWebTarget webTarget = new ResteasyClientBuilder().build().target("http://10.10.1.28/services/rest/octopus/"); @@ -163,4 +171,5 @@ public class OctopusDataMinerTest { list2.add(new BasicDBObject("z", 3)); assertTrue(list1.equals(list2)); } + } diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MissingMaterialsModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MissingMaterialsModel.java index 241dd640..3fb885fd 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MissingMaterialsModel.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MissingMaterialsModel.java @@ -20,6 +20,7 @@ import com.ibm.nosql.json.api.DBCollection; import com.ibm.nosql.json.api.DBCursor; import user.commons.ListUtils; +import user.commons.morpheus.MorpheusStrings; import user.commons.nosql.NoSQLUtils; import user.jobengine.db.ItemManagerData.SignalType; import user.jobengine.server.IJobChangedListener; @@ -33,15 +34,16 @@ import user.jobengine.zk.util.SessionUtil; public class MissingMaterialsModel extends AsyncBaseModel implements IJobChangedListener { private static final Logger logger = LogManager.getLogger(); + private static final String IMPORT_DISABLED = "importDisabled"; private static final String TEMPLATE = "template"; private static final String IMPORT_TEMPLATE = "import-morpheus-missing-materials.xml"; private static final String RETRIEVE_TEMPLATE = "retrieve-missing-material.xml"; - private static final String COLLECTION_NAME = "missing_materials"; private ListModelList jobList = new ListModelList(); private BasicDBObject selectedJob = null; private Set selectedJobs; private IJobEngine jobEngine = null; private boolean importDisabled; + private DBCollection collection; @Command public void executeImportJob() { @@ -71,23 +73,29 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged @Command public void executeRestoreJobs() { //logger.info("Selected: " + selectedJobs.size()); - for (BasicDBObject job : selectedJobs) { - String name = job.getString("MaterialID"); + for (BasicDBObject material : selectedJobs) { + String status = material.getString(MorpheusStrings.STATUS); + if (!MorpheusStrings.STATUS_RESTORABLE.equals(status)) + continue; List jobRuntimes = new ArrayList<>(jobEngine.getJobs().values()); - Optional findFirst = jobRuntimes.stream().filter(j -> isRetrieveJobFor(j, "fileName", name)).findFirst(); + Optional findFirst = jobRuntimes.stream().filter(jobRuntime -> isRetrieveJobFor(jobRuntime, material)).findFirst(); + + String name = material.getString(MorpheusStrings.MATERIALID); if (findFirst.isPresent()) { logger.warn("'{}' already retrieving", name); } else { try { - jobEngine.submit(RETRIEVE_TEMPLATE, String.format("%s hiányzó anyag visszatöltése", name), ListUtils.asMap("fileName", name)); + jobEngine.submit(RETRIEVE_TEMPLATE, String.format("%s hiányzó anyag visszatöltése", name), + ListUtils.asMap(MorpheusStrings.MATERIAL, material)); } catch (Exception e) { logger.catching(e); } } - job.put("Status", "RETRIEVING"); + material.put(MorpheusStrings.STATUS, MorpheusStrings.STATUS_RETRIEVING); + collection.save(material); registerTask(() -> { - BindUtils.postNotifyChange(null, null, job, "*"); + BindUtils.postNotifyChange(null, null, material, "*"); }); } } @@ -96,6 +104,15 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged return jobList; } + private BasicDBObject getJobMaterial(IJobRuntime jobRuntime) { + BasicDBObject result = null; + Map parameters = jobRuntime.getParameters(); + Object parameter = parameters.get(MorpheusStrings.MATERIAL); + if (parameter != null && parameter instanceof BasicDBObject) + result = (BasicDBObject) parameter; + return result; + } + public BasicDBObject getSelectedJob() { return this.selectedJob; } @@ -113,7 +130,7 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged if (jobEngine == null) throw new Exception("Belső hiba! A JobEngine szolgáltatás elérhetetlen."); List jobRuntimes = new ArrayList<>(jobEngine.getJobs().values()); - Optional findFirst = jobRuntimes.stream().filter(j -> isImportJob(j.getTemplate())).findFirst(); + Optional findFirst = jobRuntimes.stream().filter(jobRuntime -> isImportJob(jobRuntime.getTemplate())).findFirst(); if (findFirst.isPresent()) setImportDisabled(true); initializeList(); @@ -124,8 +141,8 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged private void initializeList() { DB db = NoSQLUtils.getNoSQLDB(); - DBCollection collection = db.getCollection(COLLECTION_NAME); - DBCursor cursor = collection.find().sort(new BasicDBObject("TimetoAir", -1)).limit(1000); + collection = db.getCollection(MorpheusStrings.COLLECTION_NAME); + DBCursor cursor = collection.find().sort(new BasicDBObject(MorpheusStrings.TIMETOAIR, -1)).limit(1000); if (selectedJobs != null) selectedJobs.clear(); jobList.clear(); @@ -146,13 +163,16 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged return RETRIEVE_TEMPLATE.equals(template); } - private boolean isRetrieveJobFor(IJobRuntime job, String parameterName, String name) { + private boolean isRetrieveJobFor(IJobRuntime jobRuntime, BasicDBObject material) { boolean result = false; - if (RETRIEVE_TEMPLATE.equals(job.getTemplate())) { - Map parameters = job.getParameters(); - Object parameter = parameters.get(parameterName); - if (parameter != null && parameter instanceof String) - result = name.equals(parameter); + if (RETRIEVE_TEMPLATE.equals(jobRuntime.getTemplate())) { + BasicDBObject jobMaterial = getJobMaterial(jobRuntime); + if (jobMaterial != null) { + String jobMaterialName = jobMaterial.getString(MorpheusStrings.MATERIALID); + String materialName = material.getString(MorpheusStrings.MATERIALID); + if (jobMaterialName != null && materialName != null) + result = materialName.equals(jobMaterialName); + } } return result; } @@ -165,10 +185,7 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged registerTask(() -> onImportCompleted()); } if (isRetrieveJob(job.getTemplate())) { - if (SignalType.DELETE.equals(event.getSignalType())) - registerTask(() -> onRetrieveCompleted(job)); - if (SignalType.UPDATE.equals(event.getSignalType())) - registerTask(() -> onRetrieveJobChanged(job)); + registerTask(() -> onRetrieveJobChanged(job)); } } @@ -177,14 +194,12 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged setImportDisabled(false); } - private Object onRetrieveCompleted(IJobRuntime job) { - // TODO Auto-generated method stub - return null; - } - - private Object onRetrieveJobChanged(IJobRuntime job) { - // TODO Auto-generated method stub - return null; + private void onRetrieveJobChanged(IJobRuntime jobRuntime) { + Optional findFirst = jobList.stream().filter(material -> isRetrieveJobFor(jobRuntime, material)).findFirst(); + if (findFirst.isPresent()) { + BasicDBObject material = findFirst.get(); + BindUtils.postNotifyChange(null, null, material, "*"); + } } @Command @@ -194,7 +209,7 @@ public class MissingMaterialsModel extends AsyncBaseModel implements IJobChanged public void setImportDisabled(boolean importDisabled) { this.importDisabled = importDisabled; - NotifyChange("importDisabled"); + NotifyChange(IMPORT_DISABLED); } public void setJobList(ListModelList jobList) { -- 2.54.0