use of org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageSupplFilesElement in project tracecompass by tracecompass.
the class ExportTracePackageWizardPage method createElementViewerInput.
@Override
protected Object createElementViewerInput() {
List<TracePackageTraceElement> traceElements = new ArrayList<>();
for (TmfCommonProjectElement projectElement : fSelectedTraces) {
TracePackageTraceElement traceElement;
if (projectElement instanceof TmfExperimentElement) {
TmfExperimentElement experimentElement = (TmfExperimentElement) projectElement;
traceElement = new TracePackageExperimentElement(null, experimentElement);
for (TmfTraceElement expTrace : experimentElement.getTraces()) {
((TracePackageExperimentElement) traceElement).addExpTrace(expTrace.getElementPath());
}
} else {
traceElement = new TracePackageTraceElement(null, projectElement);
}
// Trace files
TracePackageFilesElement filesElement = new TracePackageFilesElement(traceElement, projectElement.getResource());
filesElement.setChecked(true);
// Supplementary files
try {
String supplementaryFolder = projectElement.getResource().getPersistentProperty(TmfCommonConstants.TRACE_SUPPLEMENTARY_FOLDER);
TracePackageSupplFilesElement suppFilesElement = new TracePackageSupplFilesElement(null);
IResource[] supplementaryResources = projectElement.getSupplementaryResources();
for (IResource res : supplementaryResources) {
String name = supplementaryFolder == null ? res.getName() : res.getLocation().makeRelativeTo(new Path(supplementaryFolder)).toString();
new TracePackageSupplFileElement(res, name, suppFilesElement);
}
if (supplementaryFolder != null) {
// If the supplementary folder path is in a shadow project,
// the resources must be taken from the parent project.
IFolder projectSupplementaryFolder = projectElement.getProject().getSupplementaryFolder();
IPath path = new Path(supplementaryFolder).append(TmfCommonConstants.TRACE_PROPERTIES_FOLDER);
IFolder propertiesFolder = projectSupplementaryFolder.getFolder(path.makeRelativeTo(projectSupplementaryFolder.getLocation()));
if (propertiesFolder.exists()) {
for (IResource res : propertiesFolder.members()) {
String name = res.getLocation().makeRelativeTo(new Path(supplementaryFolder)).toString();
new TracePackageSupplFileElement(res, name, suppFilesElement);
}
}
}
if (suppFilesElement.getChildren().length > 0) {
traceElement.addChild(suppFilesElement);
}
} catch (CoreException e) {
// Should not happen
// $NON-NLS-1$
Activator.getDefault().logError("Error finding supplementary files", e);
}
// Bookmarks
IFile bookmarksFile = projectElement.getBookmarksFile();
if (bookmarksFile != null && bookmarksFile.exists()) {
IMarker[] findMarkers;
try {
findMarkers = bookmarksFile.findMarkers(IMarker.BOOKMARK, false, IResource.DEPTH_ZERO);
if (findMarkers.length > 0) {
new TracePackageBookmarkElement(traceElement, null);
}
} catch (CoreException e) {
// Should not happen since we just checked bookmarksFile.exists() but log it just in case
// $NON-NLS-1$
Activator.getDefault().logError("Error finding bookmarks", e);
}
}
traceElements.add(traceElement);
}
return traceElements.toArray(new TracePackageTraceElement[] {});
}
use of org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageSupplFilesElement in project tracecompass by tracecompass.
the class ManifestReader method loadTracesFomNodeList.
private static void loadTracesFomNodeList(List<TracePackageElement> packageElements, NodeList traceElements) {
for (int i = 0; i < traceElements.getLength(); i++) {
Node traceNode = traceElements.item(i);
if (traceNode.getNodeType() == Node.ELEMENT_NODE) {
Element traceElement = (Element) traceNode;
String traceName = traceElement.getAttribute(ITracePackageConstants.TRACE_NAME_ATTRIB);
String traceType = traceElement.getAttribute(ITracePackageConstants.TRACE_TYPE_ATTRIB);
TracePackageElement element;
if (traceNode.getNodeName().equals(ITracePackageConstants.EXPERIMENT_ELEMENT)) {
element = new TracePackageExperimentElement(null, traceName, traceType);
// $NON-NLS-1$
new TracePackageFilesElement(element, "");
NodeList expTraces = traceElement.getElementsByTagName(ITracePackageConstants.EXP_TRACE_ELEMENT);
for (int j = 0; j < expTraces.getLength(); j++) {
Node expTraceNode = expTraces.item(j);
if (expTraceNode.getNodeType() == Node.ELEMENT_NODE) {
Element expTraceElement = (Element) expTraceNode;
String expTrace = expTraceElement.getAttribute(ITracePackageConstants.TRACE_NAME_ATTRIB);
((TracePackageExperimentElement) element).addExpTrace(expTrace);
}
}
} else {
element = new TracePackageTraceElement(null, traceName, traceType);
NodeList fileElements = traceElement.getElementsByTagName(ITracePackageConstants.TRACE_FILE_ELEMENT);
for (int j = 0; j < fileElements.getLength(); j++) {
Node fileNode = fileElements.item(j);
if (fileNode.getNodeType() == Node.ELEMENT_NODE) {
Element fileElement = (Element) fileNode;
String fileName = fileElement.getAttribute(ITracePackageConstants.TRACE_FILE_NAME_ATTRIB);
new TracePackageFilesElement(element, fileName);
}
}
}
// Supplementary files
NodeList suppFilesElements = traceElement.getElementsByTagName(ITracePackageConstants.SUPPLEMENTARY_FILE_ELEMENT);
if (suppFilesElements.getLength() > 0) {
TracePackageSupplFilesElement supplFilesElement = new TracePackageSupplFilesElement(element);
for (int j = 0; j < suppFilesElements.getLength(); j++) {
Node suppFileNode = suppFilesElements.item(j);
if (suppFileNode.getNodeType() == Node.ELEMENT_NODE) {
Element suppFileElement = (Element) suppFileNode;
String fileName = suppFileElement.getAttribute(ITracePackageConstants.SUPPLEMENTARY_FILE_NAME_ATTRIB);
new TracePackageSupplFileElement(fileName, supplFilesElement);
}
}
}
// bookmarks
List<Map<String, String>> bookmarkAttribs = new ArrayList<>();
NodeList bookmarksElements = traceElement.getElementsByTagName(ITracePackageConstants.BOOKMARKS_ELEMENT);
for (int j = 0; j < bookmarksElements.getLength(); j++) {
Node bookmarksNode = bookmarksElements.item(j);
if (bookmarksNode.getNodeType() == Node.ELEMENT_NODE) {
NodeList bookmarkElements = traceElement.getElementsByTagName(ITracePackageConstants.BOOKMARK_ELEMENT);
for (int k = 0; k < bookmarkElements.getLength(); k++) {
Node bookmarkNode = bookmarkElements.item(k);
if (bookmarkNode.getNodeType() == Node.ELEMENT_NODE) {
Element bookmarkElement = (Element) bookmarkNode;
NamedNodeMap attributesMap = bookmarkElement.getAttributes();
Map<String, String> attribs = new HashMap<>();
for (int l = 0; l < attributesMap.getLength(); l++) {
Node item = attributesMap.item(l);
attribs.put(item.getNodeName(), item.getNodeValue());
}
bookmarkAttribs.add(attribs);
}
}
}
}
if (!bookmarkAttribs.isEmpty()) {
new TracePackageBookmarkElement(element, bookmarkAttribs);
}
packageElements.add(element);
}
}
}
use of org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageSupplFilesElement in project tracecompass by tracecompass.
the class TracePackageExportOperation method exportSupplementaryFiles.
private void exportSupplementaryFiles(IProgressMonitor monitor, Node commonNode, TmfCommonProjectElement commonElement, TracePackageSupplFilesElement element) throws InterruptedException, CoreException {
Document doc = commonNode.getOwnerDocument();
if (element.getChildren().length > 0) {
IPath projectPath = commonElement.getProject().getPath();
for (TracePackageElement child : element.getChildren()) {
TracePackageSupplFileElement supplFile = (TracePackageSupplFileElement) child;
ModalContext.checkCanceled(monitor);
IResource res = supplFile.getResource();
// project/.tracing/A/B/statistics.ht -> .tracing/A/B/statistics.ht
IPath relativeToExportFolder = res.getFullPath().makeRelativeTo(projectPath);
// project/.traceExport/.tracing/A/B
IFolder folder = fExportFolder.getFolder(relativeToExportFolder.removeLastSegments(1));
TraceUtils.createFolder(folder, SubMonitor.convert(monitor));
res.refreshLocal(0, SubMonitor.convert(monitor));
createExportResource(folder, res);
Element suppFileElement = doc.createElement(ITracePackageConstants.SUPPLEMENTARY_FILE_ELEMENT);
suppFileElement.setAttribute(ITracePackageConstants.SUPPLEMENTARY_FILE_NAME_ATTRIB, relativeToExportFolder.toString());
commonNode.appendChild(suppFileElement);
}
IFolder suppFilesFolder = fExportFolder.getFolder(TmfCommonConstants.TRACE_SUPPLEMENTARY_FOLDER_NAME);
fResources.add(suppFilesFolder);
}
}
use of org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageSupplFilesElement 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.TracePackageSupplFilesElement 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;
}
Aggregations