/*******************************************************************************
* Copyright (c) 2013, 2014 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marc-Andre Laperle - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg;
import org.eclipse.core.runtime.IPath;
import org.eclipse.swt.graphics.Image;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfCommonProjectElement;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfNavigatorLabelProvider;
import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
/**
* An ExportTraceElement associated to a TmfTraceElement. This will be the
* parent of other elements (events, supplementary files, bookmarks, etc).
*
* @author Marc-Andre Laperle
*/
public class TracePackageTraceElement extends TracePackageElement {
private final TmfTraceElement fTraceElement;
private String fImportName;
private String fTraceType;
/**
* Construct an instance associated to a TmfTraceElement. For exporting.
*
* @param parent
* the parent of this element, can be set to null
* @param traceElement
* the associated TmfTraceElement
*/
public TracePackageTraceElement(TracePackageElement parent, TmfTraceElement traceElement) {
super(parent);
fTraceElement = traceElement;
fImportName = null;
fTraceType = null;
}
/**
* Construct an instance associated to a TmfTraceElement. For importing.
*
* @param parent
* the parent of this element, can be set to null
* @param importName
* the name to use to identify this trace
* @param traceType
* the trace type to set for this trace
*/
public TracePackageTraceElement(TracePackageElement parent, String importName, String traceType) {
super(parent);
fImportName = importName;
fTraceElement = null;
fTraceType = traceType;
}
@Override
public String getText() {
return fTraceElement != null ? fTraceElement.getElementPath() : getDestinationElementPath();
}
/**
* Return the target TmfCommonProjectElement element path for a given trace
* package element. {@link TmfCommonProjectElement#getElementPath()}
*
* @return the element path
*/
public String getDestinationElementPath() {
String traceName = getImportName();
for (TracePackageElement element : getChildren()) {
if (element instanceof TracePackageFilesElement) {
TracePackageFilesElement tracePackageFilesElement = (TracePackageFilesElement) element;
String fileName = tracePackageFilesElement.getFileName();
String parentDir = removeLastSegment(fileName);
return append(parentDir, traceName);
}
}
return traceName;
}
/**
* We do this outside of the Path class because we don't want it to convert
* \ to / on Windows in the presence of regular expressions
*/
private static String removeLastSegment(String str) {
String ret = removeAllTrailing(str, IPath.SEPARATOR);
int lastIndexOf = ret.lastIndexOf(IPath.SEPARATOR);
if (lastIndexOf != -1) {
ret = ret.substring(0, lastIndexOf);
ret = removeAllTrailing(ret, IPath.SEPARATOR);
} else {
ret = ""; //$NON-NLS-1$
}
return ret;
}
private static String removeAllTrailing(String str, char toRemove) {
String ret = str;
while (ret.endsWith(Character.toString(toRemove))) {
ret = ret.substring(0, ret.length() - 1);
}
return ret;
}
private static String append(String path, String str) {
if (!path.isEmpty()) {
return path + IPath.SEPARATOR + str;
}
return str;
}
/**
* @return the associated TmfTraceElement
*/
public TmfTraceElement getTraceElement() {
return fTraceElement;
}
/**
* Set the import name.
*
* @param importName the import name.
*/
public void setImportName(String importName) {
fImportName = importName;
}
/**
* @return the import name
*/
public String getImportName() {
return fImportName;
}
/**
* @return the trace type of this trace
*/
public String getTraceType() {
return fTraceType;
}
/**
* Set the trace type of this trace.
*
* @param traceType the trace type of this trace
*/
public void setTraceType(String traceType) {
fTraceType = traceType;
}
@Override
public Image getImage() {
TmfNavigatorLabelProvider tmfNavigatorLabelProvider = new TmfNavigatorLabelProvider();
return tmfNavigatorLabelProvider.getImage(fTraceElement);
}
}