package rocks.inspectit.ui.rcp.details.generator.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.MapUtils;
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.tracing.data.Span;
import rocks.inspectit.shared.all.util.ObjectUtils;
import rocks.inspectit.ui.rcp.InspectIT;
import rocks.inspectit.ui.rcp.InspectITImages;
import rocks.inspectit.ui.rcp.details.DetailsCellContent;
import rocks.inspectit.ui.rcp.details.DetailsTable;
import rocks.inspectit.ui.rcp.details.generator.IDetailsGenerator;
import rocks.inspectit.ui.rcp.formatter.ImageFormatter;
import rocks.inspectit.ui.rcp.formatter.NumberFormatter;
import rocks.inspectit.ui.rcp.formatter.TextFormatter;
import rocks.inspectit.ui.rcp.repository.RepositoryDefinition;
/**
* {@link IDetailsGenerator} that generates details for the {@link Span} interface.
*
* @author Ivan Senic
*
*/
public class SpanDetailsGenerator implements IDetailsGenerator {
/**
* Comparator for the row displaying the tags etc.
*/
private static final Comparator<String[]> ROW_COMPARATOR = new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return ObjectUtils.compare(o1[0], o2[0]);
}
};
/**
* {@inheritDoc}
*/
@Override
public boolean canGenerateFor(DefaultData defaultData) {
return defaultData instanceof Span;
}
/**
* {@inheritDoc}
*/
@Override
public DetailsTable generate(DefaultData defaultData, RepositoryDefinition repositoryDefinition, Composite parent, FormToolkit toolkit) {
Span span = (Span) defaultData;
DetailsTable table = new DetailsTable(parent, toolkit, "Span Info", 1);
// description
table.addContentRow("Description:", null, new DetailsCellContent[] { new DetailsCellContent(TextFormatter.getSpanDetailsFull(span, repositoryDefinition.getCachedDataService()).toString()) });
// mark client
if (span.isCaller()) {
table.addContentRow("Client:", null, new DetailsCellContent[] { new DetailsCellContent(InspectIT.getDefault().getImage(InspectITImages.IMG_CHECKMARK), "Yes") });
}
// propagation
table.addContentRow("Propagation:", null, new DetailsCellContent[] {
new DetailsCellContent(ImageFormatter.getPropagationImage(span.getPropagationType()), TextFormatter.getPropagationStyled(span.getPropagationType()).toString()) });
// reference
if (null != span.getReferenceType()) {
table.addContentRow("Reference:", null,
new DetailsCellContent[] { new DetailsCellContent(ImageFormatter.getReferenceImage(span.getReferenceType()), TextFormatter.getDescriptiveReference(span)) });
}
// duration
table.addContentRow("Duration (ms):", null, new DetailsCellContent[] { new DetailsCellContent(NumberFormatter.formatDouble(span.getDuration(), 3)) });
// tags
if (MapUtils.isNotEmpty(span.getTags())) {
List<String[]> rows = new ArrayList<>();
for (Map.Entry<String, String> entry : span.getTags().entrySet()) {
rows.add(new String[] { entry.getKey(), entry.getValue() });
}
Collections.sort(rows, ROW_COMPARATOR);
table.addContentTable("All tags:", null, 2, new String[] { "Key", "Value" }, rows);
}
return table;
}
}