use of org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageExperimentElement in project tracecompass by tracecompass.
the class TracePackageImportOperation method doRun.
private void doRun(IProgressMonitor progressMonitor) {
try {
setStatus(deleteExistingTraces(progressMonitor));
if (!getStatus().isOK()) {
return;
}
List<TracePackageExperimentElement> experimentPackageElements = new ArrayList<>();
for (TracePackageElement packageElement : fImportTraceElements) {
TracePackageTraceElement traceElement = (TracePackageTraceElement) packageElement;
if (!isFilesChecked(packageElement)) {
continue;
}
if (packageElement instanceof TracePackageExperimentElement) {
experimentPackageElements.add((TracePackageExperimentElement) packageElement);
continue;
}
TracePackageElement[] children = traceElement.getChildren();
for (TracePackageElement element : children) {
ModalContext.checkCanceled(progressMonitor);
if (element instanceof TracePackageFilesElement) {
TracePackageFilesElement traceFilesElement = (TracePackageFilesElement) element;
setStatus(importTraceFiles(traceFilesElement, traceElement, progressMonitor));
}
if (!getStatus().isOK()) {
return;
}
}
setStatus(importSupplFiles(traceElement, progressMonitor));
if (!getStatus().isOK()) {
return;
}
}
for (TracePackageExperimentElement experimentPackageElement : experimentPackageElements) {
ModalContext.checkCanceled(progressMonitor);
importExperiment(experimentPackageElement, progressMonitor);
if (!getStatus().isOK()) {
return;
}
}
} catch (InterruptedException e) {
setStatus(Status.CANCEL_STATUS);
Thread.currentThread().interrupt();
}
}
use of org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageExperimentElement in project tracecompass by tracecompass.
the class TracePackageImportOperation method importSupplFiles.
private IStatus importSupplFiles(TracePackageTraceElement packageElement, IProgressMonitor monitor) {
List<Pair<String, String>> fileNameAndLabelPairs = new ArrayList<>();
Map<String, String> suppFilesRename = new HashMap<>();
for (TracePackageElement element : packageElement.getChildren()) {
if (element instanceof TracePackageSupplFilesElement) {
for (TracePackageElement child : element.getChildren()) {
if (child.isChecked()) {
TracePackageSupplFileElement supplFile = (TracePackageSupplFileElement) child;
if (packageElement instanceof TracePackageExperimentElement) {
String oldExpName = getOldExpName(supplFile);
if (!packageElement.getImportName().equals(oldExpName)) {
suppFilesRename.put(supplFile.getText(), supplFile.getText().replace(oldExpName, packageElement.getImportName()));
}
}
fileNameAndLabelPairs.add(new Pair<>(checkNotNull(supplFile.getText()), checkNotNull(new Path(supplFile.getText()).lastSegment())));
}
}
}
}
if (!fileNameAndLabelPairs.isEmpty()) {
TmfCommonProjectElement projectElement = getMatchingProjectElement(packageElement);
if (projectElement != null) {
ArchiveFile archiveFile = getSpecifiedArchiveFile();
projectElement.refreshSupplementaryFolder();
IPath destinationContainerPath;
if (packageElement instanceof TracePackageExperimentElement) {
destinationContainerPath = projectElement.getProject().getSupplementaryFolder().getFullPath();
} else {
// Project/Traces/A/B -> A/B
final TmfTraceFolder tracesFolder = fTmfTraceFolder.getProject().getTracesFolder();
if (tracesFolder == null) {
return new Status(IStatus.ERROR, Activator.PLUGIN_ID, org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.Messages.TracePackage_ErrorOperation);
}
IPath traceFolderRelativePath = fTmfTraceFolder.getPath().makeRelativeTo(tracesFolder.getPath());
// Project/.tracing/A/B/
IFolder traceSupplementaryFolder = fTmfTraceFolder.getTraceSupplementaryFolder(traceFolderRelativePath.toString());
destinationContainerPath = traceSupplementaryFolder.getFullPath();
}
// Remove the .tracing segment at the beginning so that a file
// in folder .tracing/A/B/ imports to destinationContainerPath/A/B/
Path baseSourcePath = new Path(TmfCommonConstants.TRACE_SUPPLEMENTARY_FOLDER_NAME);
return importFiles(archiveFile, fileNameAndLabelPairs, destinationContainerPath, baseSourcePath, suppFilesRename, monitor);
}
}
return Status.OK_STATUS;
}
use of org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageExperimentElement in project tracecompass by tracecompass.
the class TracePackageExportOperation method exportExperiment.
private void exportExperiment(IProgressMonitor monitor, Node tmfNode, TracePackageExperimentElement experimentPackageElement) throws InterruptedException, CoreException {
Node expNode = exportCommon(monitor, tmfNode, experimentPackageElement, ITracePackageConstants.EXPERIMENT_ELEMENT);
TmfExperimentElement experimentElement = (TmfExperimentElement) experimentPackageElement.getTraceElement();
for (TmfTraceElement traceElement : experimentElement.getTraces()) {
Element expTraceXmlElement = expNode.getOwnerDocument().createElement(ITracePackageConstants.EXP_TRACE_ELEMENT);
expTraceXmlElement.setAttribute(ITracePackageConstants.TRACE_NAME_ATTRIB, traceElement.getElementPath());
expNode.appendChild(expTraceXmlElement);
}
}
use of org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageExperimentElement in project tracecompass by tracecompass.
the class TracePackageExportOperation method run.
/**
* Run the operation. The status (result) of the operation can be obtained
* with {@link #getStatus}
*
* @param progressMonitor
* the progress monitor to use to display progress and receive
* requests for cancellation
*/
@Override
public void run(IProgressMonitor progressMonitor) {
try {
int totalWork = getNbCheckedElements(fTraceExportElements) * 2;
progressMonitor.beginTask(Messages.TracePackageExportOperation_GeneratingPackage, totalWork);
fExportFolder = createExportFolder(progressMonitor);
Document doc = XmlUtils.newSafeDocumentBuilderFactory().newDocumentBuilder().newDocument();
Element createElement = doc.createElement(ITracePackageConstants.TMF_EXPORT_ELEMENT);
Node tmfNode = doc.appendChild(createElement);
List<TracePackageExperimentElement> experimentPackageElements = new ArrayList<>();
for (TracePackageTraceElement tracePackageElement : fTraceExportElements) {
if (!isFilesChecked(tracePackageElement)) {
continue;
}
if (tracePackageElement instanceof TracePackageExperimentElement) {
experimentPackageElements.add((TracePackageExperimentElement) tracePackageElement);
} else {
exportTrace(progressMonitor, tmfNode, tracePackageElement);
}
}
for (TracePackageExperimentElement experimentPackageElement : experimentPackageElements) {
exportExperiment(progressMonitor, tmfNode, experimentPackageElement);
}
Transformer transformer = XmlUtils.newSecureTransformer();
// $NON-NLS-1$
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
// $NON-NLS-1$ //$NON-NLS-2$
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
DOMSource source = new DOMSource(doc);
StringWriter buffer = new StringWriter();
StreamResult result = new StreamResult(buffer);
transformer.transform(source, result);
String content = buffer.getBuffer().toString();
ModalContext.checkCanceled(progressMonitor);
exportManifest(content);
setStatus(exportToArchive(progressMonitor, totalWork));
fExportFolder.delete(true, SubMonitor.convert(progressMonitor));
progressMonitor.done();
} catch (InterruptedException e) {
setStatus(Status.CANCEL_STATUS);
Thread.currentThread().interrupt();
} catch (Exception e) {
setStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID, org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.Messages.TracePackage_ErrorOperation, e));
}
}
use of org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageExperimentElement in project tracecompass by tracecompass.
the class ImportTracePackageWizardPage method processTrace.
private void processTrace(List<TracePackageExperimentElement> experimentElements, TracePackageTraceElement traceElement, Map<TracePackageExperimentElement, List<TracePackageTraceElement>> experimentTracesMap, List<TracePackageTraceElement> unhandledTraces) {
boolean isAlone = traceExists(traceElement);
for (TracePackageExperimentElement experimentElement : experimentElements) {
List<String> tracesPath = experimentElement.getExpTraces();
if (traceExists(traceElement) && tracesPath.contains(traceElement.getDestinationElementPath())) {
isAlone = false;
List<TracePackageTraceElement> traces = experimentTracesMap.get(experimentElement);
if (traces == null) {
traces = new ArrayList<>();
}
traces.add(traceElement);
experimentTracesMap.put(experimentElement, traces);
}
}
if (isAlone) {
unhandledTraces.add(traceElement);
}
}
Aggregations