package com.plectix.simulator.simulator; import java.util.ArrayList; import java.util.List; import com.plectix.simulator.simulationclasses.injections.Injection; import com.plectix.simulator.simulationclasses.injections.LiftElement; import com.plectix.simulator.staticanalysis.Agent; import com.plectix.simulator.staticanalysis.Rule; import com.plectix.simulator.staticanalysis.Site; public class UpdatesPerformer { public static final List<Agent> doNegativeUpdateForDeletedAgents( Rule rule, List<Injection> injections) { List<Agent> freeAgents = new ArrayList<Agent>(); for (Injection injection : injections) { for (Site checkedSite : rule.getSitesConnectedWithDeleted()) { if (!injection.checkSiteExistanceAmongChangedSites(checkedSite)) { Agent checkedAgent = checkedSite.getParentAgent(); addToAgentList(freeAgents, checkedAgent); for (LiftElement lift : checkedAgent.getDefaultSite() .getLift()) { lift.getConnectedComponent().removeInjection( lift.getInjection()); } checkedAgent.getDefaultSite().clearLifts(); for (LiftElement lift : checkedSite.getLift()) { for (Site site : lift.getInjection().getSiteList()) { if (site != checkedSite) site.removeInjectionFromLift(lift .getInjection()); } lift.getConnectedComponent().removeInjection( lift.getInjection()); } checkedSite.clearLifts(); } } } for (Site checkedSite : rule.getSitesConnectedWithBroken()) { Agent checkedAgent = checkedSite.getParentAgent(); addToAgentList(freeAgents, checkedAgent); } return freeAgents; } private static final void addToAgentList(List<Agent> list, Agent agent) { if (agent.includedInCollection(list)) { return; } list.add(agent); } public static final void doNegativeUpdate(List<Injection> injections) { for (Injection injection : injections) { if (injection != ThreadLocalData.getEmptyInjection()) { for (Site site : injection.getChangedSites()) { site.getParentAgent().getDefaultSite() .clearIncomingInjections(injection); site.getParentAgent().getDefaultSite().clearLifts(); site.clearIncomingInjections(injection); site.clearLifts(); } if (injection.getChangedSites().size() != 0) { for (Site site : injection.getSiteList()) { if (!injection .checkSiteExistanceAmongChangedSites(site)) { site.removeInjectionFromLift(injection); } } injection.getConnectedComponent().removeInjection(injection); } } } } }