tmf: Support subfield array in TmfEventFieldAspect
authorPatrick Tasse <patrick.tasse@gmail.com>
Wed, 17 Dec 2014 22:45:09 +0000 (17:45 -0500)
committerPatrick Tasse <patrick.tasse@gmail.com>
Tue, 3 Feb 2015 23:03:44 +0000 (18:03 -0500)
Change-Id: I3ada68c24d73b55a55851100a8269cd506fd56e5
Signed-off-by: Patrick Tasse <patrick.tasse@gmail.com>
Reviewed-on: https://git.eclipse.org/r/38512
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/event/aspect/TmfEventFieldAspect.java

index def478f33becdc25eb7f61b02f7aa80747c3b8d7..9b02a9773f35881c6a423105a7117cb512db37fa 100644 (file)
@@ -8,10 +8,14 @@
  *
  * 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;
@@ -23,8 +27,12 @@ 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
@@ -38,6 +46,12 @@ public class TmfEventFieldAspect implements ITmfEventAspect {
     public TmfEventFieldAspect(String aspectName, String fieldName) {
         fAspectName = aspectName;
         fFieldName = fieldName;
+        if (!fieldName.isEmpty() && fieldName.charAt(0) == SLASH) {
+            fFieldArray = getFieldArray(fieldName);
+        } else {
+            fFieldArray = null;
+        }
+
     }
 
     @Override
@@ -52,7 +66,12 @@ public class TmfEventFieldAspect implements ITmfEventAspect {
 
     @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;
         }
@@ -78,7 +97,10 @@ public class TmfEventFieldAspect implements ITmfEventAspect {
         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;
@@ -90,4 +112,37 @@ public class TmfEventFieldAspect implements ITmfEventAspect {
         }
         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;
+    }
 }
This page took 0.025922 seconds and 5 git commands to generate.