*
* Contributors:
* Alexandre Montplaisir - Initial API and implementation
+ * Patrick Tasse - Support subfield array
*******************************************************************************/
package org.eclipse.tracecompass.tmf.core.event.aspect;
+import java.util.ArrayList;
+import java.util.List;
+
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.event.ITmfEventField;
*/
public class TmfEventFieldAspect implements ITmfEventAspect {
+ private static final char SLASH = '/';
+ private static final char BACKSLASH = '\\';
+
private final String fAspectName;
private final String fFieldName;
+ private final @Nullable String[] fFieldArray;
/**
* Constructor
public TmfEventFieldAspect(String aspectName, String fieldName) {
fAspectName = aspectName;
fFieldName = fieldName;
+ if (!fieldName.isEmpty() && fieldName.charAt(0) == SLASH) {
+ fFieldArray = getFieldArray(fieldName);
+ } else {
+ fFieldArray = null;
+ }
+
}
@Override
@Override
public @Nullable String resolve(ITmfEvent event) {
- ITmfEventField field = event.getContent().getField(fFieldName);
+ ITmfEventField field;
+ if (fFieldArray == null) {
+ field = event.getContent().getField(fFieldName);
+ } else {
+ field = event.getContent().getSubField(fFieldArray);
+ }
if (field == null) {
return null;
}
if (this == obj) {
return true;
}
- if (!(obj instanceof TmfEventFieldAspect)) {
+ if (obj == null) {
+ return false;
+ }
+ if (!this.getClass().equals(obj.getClass())) {
return false;
}
TmfEventFieldAspect other = (TmfEventFieldAspect) obj;
}
return true;
}
+
+ private static String[] getFieldArray(String field) {
+
+ StringBuilder sb = new StringBuilder();
+ List<String> list = new ArrayList<>();
+
+ // We start at 1 since the first character is a slash that we want to
+ // ignore.
+ for (int i = 1; i < field.length(); i++) {
+ char charAt = field.charAt(i);
+ if (charAt == SLASH) {
+ // char is slash. Cut here.
+ list.add(sb.toString());
+ sb = new StringBuilder();
+ } else if ((charAt == BACKSLASH) && (i < field.length() - 1) && (field.charAt(i + 1) == SLASH)) {
+ // Uninterpreted slash. Add it.
+ sb.append(SLASH);
+ i++;
+ } else {
+ // Any other character. Add.
+ sb.append(charAt);
+ }
+ }
+
+ // Last block. Add it to list.
+ list.add(sb.toString());
+
+ // Transform to array
+ String[] array = new String[list.size()];
+ list.toArray(array);
+
+ return array;
+ }
}