use of org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageElement 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.TracePackageElement in project tracecompass by tracecompass.
the class TracePackageExportOperation method exportCommon.
private Node exportCommon(IProgressMonitor monitor, Node tmfNode, TracePackageTraceElement tracePackageElement, String elementString) throws InterruptedException, CoreException {
TmfCommonProjectElement commonElement = tracePackageElement.getTraceElement();
Element commonXmlElement = tmfNode.getOwnerDocument().createElement(elementString);
commonXmlElement.setAttribute(ITracePackageConstants.TRACE_NAME_ATTRIB, commonElement.getResource().getName());
commonXmlElement.setAttribute(ITracePackageConstants.TRACE_TYPE_ATTRIB, commonElement.getTraceType());
Node commonNode = tmfNode.appendChild(commonXmlElement);
for (TracePackageElement element : tracePackageElement.getChildren()) {
ModalContext.checkCanceled(monitor);
if (!element.isChecked()) {
continue;
}
if (element instanceof TracePackageSupplFilesElement) {
exportSupplementaryFiles(monitor, commonNode, commonElement, (TracePackageSupplFilesElement) element);
} else if (element instanceof TracePackageBookmarkElement) {
exportBookmarks(monitor, commonNode, (TracePackageBookmarkElement) element);
} else if (element instanceof TracePackageFilesElement && commonElement instanceof TmfTraceElement) {
exportTraceFiles(monitor, commonNode, (TracePackageFilesElement) element);
}
monitor.worked(1);
}
return commonNode;
}
use of org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageElement in project tracecompass by tracecompass.
the class TracePackageImportOperation method deleteExistingTraces.
private IStatus deleteExistingTraces(IProgressMonitor progressMonitor) {
for (TracePackageElement packageElement : fImportTraceElements) {
TracePackageTraceElement traceElement = (TracePackageTraceElement) packageElement;
if (!isFilesChecked(traceElement)) {
continue;
}
TmfCommonProjectElement projectElement = getMatchingProjectElement(traceElement);
try {
if (projectElement instanceof TmfExperimentElement) {
Display.getDefault().syncExec(() -> projectElement.closeEditors());
projectElement.deleteSupplementaryFolder();
projectElement.getResource().delete(true, SubMonitor.convert(progressMonitor));
} else if (projectElement instanceof TmfTraceElement) {
((TmfTraceElement) projectElement).delete(SubMonitor.convert(progressMonitor), true);
}
} catch (CoreException e) {
return new Status(IStatus.ERROR, Activator.PLUGIN_ID, org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.Messages.TracePackage_ErrorOperation, e);
}
}
return Status.OK_STATUS;
}
use of org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageElement in project tracecompass by tracecompass.
the class ExportTracePackageWizardPage method createElementViewer.
@Override
protected void createElementViewer(Composite parent) {
super.createElementViewer(parent);
CheckboxTreeViewer elementViewer = getElementViewer();
elementViewer.getTree().setHeaderVisible(true);
// Content column
TreeViewerColumn column = new TreeViewerColumn(elementViewer, SWT.NONE);
column.getColumn().setWidth(CONTENT_COL_WIDTH);
column.getColumn().setText(Messages.ExportTracePackageWizardPage_ContentColumnName);
column.setLabelProvider(new TracePackageLabelProvider());
// Size column
column = new TreeViewerColumn(elementViewer, SWT.NONE);
column.getColumn().setWidth(SIZE_COL_WIDTH);
column.getColumn().setText(Messages.ExportTracePackageWizardPage_SizeColumnName);
column.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
TracePackageElement tracePackageElement = (TracePackageElement) element;
long size = tracePackageElement.getSize(false);
if (size == 0) {
return null;
}
int level = 0;
TracePackageElement curElement = tracePackageElement.getParent();
while (curElement != null) {
curElement = curElement.getParent();
++level;
}
return indent(getHumanReadable(size), level);
}
private String indent(String humanReadable, int level) {
StringBuilder s = new StringBuilder(humanReadable);
for (int i = 0; i < level; ++i) {
// $NON-NLS-1$
final String indentStr = " ";
s.insert(0, indentStr);
}
return s.toString();
}
});
elementViewer.setInput(createElementViewerInput());
elementViewer.expandToLevel(2);
setAllChecked(elementViewer, false, true);
}
use of org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageElement in project tracecompass by tracecompass.
the class ExportTracePackageWizardPage method updateApproximateSelectedSize.
@Override
protected void updateApproximateSelectedSize() {
long checkedSize = 0;
TracePackageElement[] tracePackageElements = (TracePackageElement[]) getElementViewer().getInput();
for (TracePackageElement element : tracePackageElements) {
checkedSize += element.getSize(true);
}
checkedSize = Math.max(0, checkedSize);
fApproximateSizeLabel.setText(MessageFormat.format(Messages.ExportTracePackageWizardPage_ApproximateSizeLbl, getHumanReadable(checkedSize)));
}
Aggregations