package rocks.inspectit.server.instrumentation.config.job;
import java.util.Collection;
import java.util.HashSet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import rocks.inspectit.server.ci.event.EnvironmentUpdateEvent;
import rocks.inspectit.shared.all.instrumentation.classcache.ImmutableType;
import rocks.inspectit.shared.cs.ci.factory.SpecialMethodSensorAssignmentFactory;
/**
* Job for an environment update.
*
* @author Ivan Senic
* @author Marius Oehler
*
*/
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Lazy
public class EnvironmentUpdateJob extends AbstractConfigurationChangeJob {
/**
* SpecialMethodSensorAssignmentFactory for resolving functional assignment updates.
*/
@Autowired
private SpecialMethodSensorAssignmentFactory functionalAssignmentFactory;
/**
* {@link EnvironmentUpdateEvent}.
*/
private EnvironmentUpdateEvent environmentUpdateEvent;
/**
* {@inheritDoc}
*/
@Override
protected Collection<ImmutableType> execute() {
// always update with new Environment
getConfigurationHolder().update(environmentUpdateEvent.getAfter(), getAgentId());
Collection<ImmutableType> changedClassTypes = new HashSet<>();
// then process removed and added assignments
changedClassTypes.addAll(super.processRemovedAssignments(environmentUpdateEvent.getRemovedSensorAssignments(functionalAssignmentFactory)));
changedClassTypes.addAll(super.processAddedAssignments(environmentUpdateEvent.getAddedSensorAssignments(functionalAssignmentFactory)));
return changedClassTypes;
}
/**
* Sets {@link #environmentUpdateEvent}.
*
* @param environmentUpdateEvent
* New value for {@link #environmentUpdateEvent}
*/
public void setEnvironmentUpdateEvent(EnvironmentUpdateEvent environmentUpdateEvent) {
this.environmentUpdateEvent = environmentUpdateEvent;
}
}