package NFP.Algorithms; import java.util.List; import seg.jUCMNav.nfp.generated.*; public class AggregateResources { private List resourcesPlus; private CompositionType composition; private Resource aggregatedResource; private ConvertResUnits convertResUnit; public Resource getAggregateResources(List resourcePlus, CompositionType composition){ this.resourcesPlus=resourcePlus; this.composition=composition; convertResUnit = new ConvertResUnits(); initialize(); for(Resource res : resourcesPlus){ for(ResourceReq req : res.getResourceReqs()){ if(req.getCategory()== ResourceKind.STORAGE_RESOURCE || req.getCategory()== ResourceKind.TIMING_RESOURCE){ ResourceReq aggregateReq = null; for(ResourceReq aReq : aggregatedResource.getResourceReqs()){ if(aReq.getCategory()==req.getCategory()){ aggregateReq = aReq; break; } } if(aggregateReq==null){ aggregatedResource.getResourceReqs().add(req); } else{ if(this.composition == CompositionType.Sequence || this.composition == CompositionType.Loop){ aggregateReq.setQuantity(aggregateReq.getQuantity()+ convertResUnit.getConvertedValue(req.getQuantity(), req.getUnit(), aggregateReq.getUnit())); } else if(this.composition == CompositionType.ConditionalBranching){ aggregateReq.setQuantity(Math.max(aggregateReq.getQuantity(), convertResUnit.getConvertedValue(req.getQuantity(), req.getUnit(), aggregateReq.getUnit()))); } else{ if(aggregateReq.getCategory()==ResourceKind.TIMING_RESOURCE){ aggregateReq.setQuantity(Math.max(aggregateReq.getQuantity(), convertResUnit.getConvertedValue(req.getQuantity(), req.getUnit(), aggregateReq.getUnit()))); } else{ aggregateReq.setQuantity(aggregateReq.getQuantity()+ convertResUnit.getConvertedValue(req.getQuantity(), req.getUnit(), aggregateReq.getUnit())); } } } } else{ aggregatedResource.getResourceReqs().add(req); } } } return aggregatedResource; } private void initialize() { aggregatedResource = new Resource(); } }