package rocks.inspectit.ui.rcp.details;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import rocks.inspectit.shared.all.communication.DefaultData;
import rocks.inspectit.shared.all.communication.data.InvocationSequenceData;
import rocks.inspectit.ui.rcp.details.generator.IDetailsGenerator;
import rocks.inspectit.ui.rcp.repository.RepositoryDefinition;
/**
* Factory for generation of the details composites. This class is initialized by Spring.
*
* @author Ivan Senic
*
*/
public final class DetailsGenerationFactory {
/**
* All the generators. Initialized by Spring.
*/
private List<IDetailsGenerator> generators;
/**
* Creates list of detail composites displaying different types of the information for the given
* default data.
*
* @param defaultData
* Data to generate details for.
* @param repositoryDefinition
* {@link RepositoryDefinition}
* @param parent
* Parent composite
* @param toolkit
* {@link FormToolkit}
* @return List of generated composites.
*/
public List<DetailsTable> createDetailComposites(DefaultData defaultData, RepositoryDefinition repositoryDefinition, Composite parent, FormToolkit toolkit) {
// this is a work-around to include more info about the contained invocation sequence data
DefaultData secondary = null;
if (defaultData instanceof InvocationSequenceData) {
InvocationSequenceData invocationSequenceData = (InvocationSequenceData) defaultData;
if (null != invocationSequenceData.getTimerData()) {
secondary = invocationSequenceData.getTimerData();
}
if (null != invocationSequenceData.getSqlStatementData()) {
secondary = invocationSequenceData.getSqlStatementData();
}
if (CollectionUtils.isNotEmpty(invocationSequenceData.getExceptionSensorDataObjects())) {
secondary = invocationSequenceData.getExceptionSensorDataObjects().get(0);
}
if (null != invocationSequenceData.getLoggingData()) {
secondary = invocationSequenceData.getLoggingData();
}
}
List<DetailsTable> result = new ArrayList<>();
for (IDetailsGenerator generator : generators) {
if (generator.canGenerateFor(defaultData)) {
result.add(generator.generate(defaultData, repositoryDefinition, parent, toolkit));
} else if ((null != secondary) && generator.canGenerateFor(secondary)) {
result.add(generator.generate(secondary, repositoryDefinition, parent, toolkit));
}
}
return result;
}
/**
* Sets {@link #generators}.
*
* @param generators
* New value for {@link #generators}
*/
public void setGenerators(List<IDetailsGenerator> generators) {
this.generators = generators;
}
}