/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE file at the root of the source * tree and available online at * * https://github.com/keeps/roda */ package org.roda.core.plugins.orchestrate; import java.util.Map; import org.roda.core.data.v2.IsRODAObject; import org.roda.core.plugins.Plugin; public class SimpleJobPluginInfo extends JobPluginInfo { private static final long serialVersionUID = 2210879753936753174L; public SimpleJobPluginInfo() { super(); } public void update(SimpleJobPluginInfo jobPluginInfo) { this.setCompletionPercentage(jobPluginInfo.getCompletionPercentage()); this.setSourceObjectsCount(jobPluginInfo.getSourceObjectsCount()); this.setSourceObjectsBeingProcessed(jobPluginInfo.getSourceObjectsBeingProcessed()); this.setSourceObjectsWaitingToBeProcessed(jobPluginInfo.getSourceObjectsWaitingToBeProcessed()); this.setSourceObjectsProcessedWithSuccess(jobPluginInfo.getSourceObjectsProcessedWithSuccess()); this.setSourceObjectsProcessedWithFailure(jobPluginInfo.getSourceObjectsProcessedWithFailure()); } @Override public <T extends IsRODAObject> JobPluginInfo processJobPluginInformation(Plugin<T> plugin, JobInfo jobInfo) { Map<Integer, JobPluginInfo> jobInfos = jobInfo.getJobInfo(); // update information in the map<plugin, pluginInfo> // FIXME/INFO 20160601 hsilva: the following code would be necessary in a // distributed architecture // SimpleJobPluginInfo jobPluginInfo = (SimpleJobPluginInfo) // jobInfos.get(plugin); // jobPluginInfo.update(this); int sourceObjectsCount = 0; int sourceObjectsBeingProcessed = 0; int sourceObjectsProcessedWithSuccess = 0; int sourceObjectsProcessedWithFailure = 0; for (JobPluginInfo jpi : jobInfos.values()) { SimpleJobPluginInfo pluginInfo = (SimpleJobPluginInfo) jpi; sourceObjectsProcessedWithSuccess += pluginInfo.getSourceObjectsProcessedWithSuccess(); sourceObjectsProcessedWithFailure += pluginInfo.getSourceObjectsProcessedWithFailure(); sourceObjectsBeingProcessed += pluginInfo.getSourceObjectsBeingProcessed(); sourceObjectsCount += pluginInfo.getSourceObjectsCount(); } SimpleJobPluginInfo infoUpdated = new SimpleJobPluginInfo(); // FIXME 20160819 hsilva: divide by zero problem when # of sourceObjects is // unknown int newPercentage = 100; if (sourceObjectsCount > 0) { newPercentage = Math .round((((sourceObjectsProcessedWithSuccess + sourceObjectsProcessedWithFailure) * 100) / sourceObjectsCount)); } infoUpdated.setCompletionPercentage(newPercentage); infoUpdated.setSourceObjectsCount(sourceObjectsCount); infoUpdated.setSourceObjectsBeingProcessed(sourceObjectsBeingProcessed); infoUpdated.setSourceObjectsProcessedWithSuccess(sourceObjectsProcessedWithSuccess); infoUpdated.setSourceObjectsProcessedWithFailure(sourceObjectsProcessedWithFailure); return infoUpdated; } }