package rtt.ui.content.logging;
import java.io.InputStream;
import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.CompareEditorInput;
import org.eclipse.compare.CompareUI;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.compare.EMFCompare;
import org.eclipse.emf.compare.domain.ICompareEditingDomain;
import org.eclipse.emf.compare.domain.impl.EMFCompareEditingDomain;
import org.eclipse.emf.compare.ide.ui.internal.editor.ComparisonScopeEditorInput;
import org.eclipse.emf.compare.scope.IComparisonScope;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.ui.IWorkbenchPage;
import rtt.core.archive.Archive;
import rtt.core.archive.configuration.Configuration;
import rtt.core.archive.logging.Failure;
import rtt.core.archive.logging.Result;
import rtt.core.exceptions.RTTException;
import rtt.core.manager.Manager;
import rtt.core.manager.data.history.OutputDataManager;
import rtt.core.manager.data.history.OutputDataManager.OutputDataType;
import rtt.ui.content.main.ContentIcon;
import rtt.ui.model.RttProject;
import rtt.ui.utils.Messages;
import rtt.ui.utils.RttLog;
import rtt.ui.utils.RttPluginUtil;
@SuppressWarnings("restriction")
public class FailureContent extends AbstractLogContent {
private static final String ERROR_MESSAGE =
"content.failure.error.message";
private String suiteName;
private String caseName;
private Integer testVersion;
private Integer refVersion;
private Failure failure;
public FailureContent(TestResultContent parent, Failure failure) {
super(parent);
this.failure = failure;
Result result = parent.getTestresult();
suiteName = result.getTestsuite();
caseName = result.getTestcase();
refVersion = result.getRefVersion();
testVersion = result.getTestVersion();
}
@Override
public String getText() {
return "Failure";
}
@Override
public ContentIcon getIcon() {
return ContentIcon.FAILED;
}
private InputStream getInputStream(OutputDataManager manager, Integer version) {
return manager.getOutputDataInputStream(version);
}
@Override
public void doDoubleClick(IWorkbenchPage currentPage) {
RttProject project = this.getProject();
Configuration activeConfig = project.getActiveConfiguration();
try {
Manager manager = project.getManager();
if (manager != null) {
Archive archive = manager.getArchive();
final ResourceSet left = new ResourceSetImpl();
final ResourceSet right = new ResourceSetImpl();
OutputDataManager refManager = new OutputDataManager(archive.getLoader(), suiteName, caseName, activeConfig, OutputDataType.REFERENCE);
OutputDataManager testManager = new OutputDataManager(archive.getLoader(), suiteName, caseName, activeConfig, OutputDataType.TEST);
RttPluginUtil.loadResource(right, URI.createURI("reference_data.rtt"), getInputStream(refManager, refVersion));
RttPluginUtil.loadResource(left, URI.createURI("test_data.rtt"), getInputStream(testManager, testVersion));
EMFCompare comparator = EMFCompare.builder().build();
IComparisonScope scope = EMFCompare.createDefaultScope(left, right);
ICompareEditingDomain domain = EMFCompareEditingDomain.create(left, right, null);
AdapterFactory adapterFactory = RttPluginUtil.createFactory();
CompareEditorInput input = new ComparisonScopeEditorInput(
new CompareConfiguration(), domain, adapterFactory, comparator, scope);
manager.close();
CompareUI.openCompareEditorOnPage(input, currentPage);
}
} catch (RTTException e) {
Messages.openError(currentPage.getActivePart().getSite().getShell(), ERROR_MESSAGE);
RttLog.log(e);
}
}
@Override
public int compareTo(AbstractLogContent o) {
if (o instanceof CommentContent) {
return -1;
}
return 0;
}
@Override
public String getMessage() {
return failure.getMsg() + " - " + failure.getPath();
}
@Override
public String getTitle() {
return failure.getMsg();
}
}