[Bug 303523] LTTng/TMF udpates:
authorFrancois Chouinard <fchouinard@gmail.com>
Wed, 24 Feb 2010 20:30:17 +0000 (20:30 +0000)
committerFrancois Chouinard <fchouinard@gmail.com>
Wed, 24 Feb 2010 20:30:17 +0000 (20:30 +0000)
1. Improved on TmfComponent
- Augmented the interface and the base class
- Introduced ITmfContext
- Renamed TmfTransform to TmfProvider (interface and base class)
- Generalized TmfProvider

2. Improvement on Tmftimestamp
- Added ZERO constant

3. Improved on TmfExperiment
- Added an experiment specific context
- Fixed a number of issues with the generalized indexing

4. Improved TmfDataRequest
- Made the base class more generic (i.e. event independant)
- Added a TmfEventRequest as an extendion of TmfDataRequest

5. Improved on TmfTrace
- Re-designed the trace specific context (removed timestamp)
- Fixed a number of issues with the generalized indexing

6. Adapted the widgets and views to the updated interfaces

7. Adapted and augmented the unit tests

8. Adjusted LTTng classes and unit tests

75 files changed:
org.eclipse.linuxtools.lttng.jni/src/org/eclipse/linuxtools/lttng/jni/JniEvent.java
org.eclipse.linuxtools.lttng.jni/src/org/eclipse/linuxtools/lttng/jni/JniMarker.java
org.eclipse.linuxtools.lttng.jni/src/org/eclipse/linuxtools/lttng/jni/JniMarkerField.java
org.eclipse.linuxtools.lttng.jni/src/org/eclipse/linuxtools/lttng/jni/JniTracefile.java
org.eclipse.linuxtools.lttng.tests/build.properties
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/tests/event/LttngEventContentTest.java
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/tests/event/LttngEventFieldTest.java
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/tests/event/LttngEventReferenceTest.java
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/tests/event/LttngEventTest.java
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/tests/event/LttngEventTypeTest.java
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/tests/event/LttngTimestampTest.java
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/tests/state/TestStateManager.java
org.eclipse.linuxtools.lttng.tests/src/org/eclipse/linuxtools/lttng/tests/trace/LTTngTextTraceTest.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/model/trange/TimeRangeResourceFactory.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/events/EventsView.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/project/ProjectView.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/project/dialogs/ImportTraceWizard.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/project/dialogs/NewExperimentDialog.java
org.eclipse.linuxtools.lttng.ui/src/org/eclipse/linuxtools/lttng/ui/views/timeframe/TimeFrameView.java
org.eclipse.linuxtools.lttng.ui/stubs/org/eclipse/linuxtools/lttng/stubs/LTTngEventParserStub.java
org.eclipse.linuxtools.lttng.ui/stubs/org/eclipse/linuxtools/lttng/stubs/LTTngTraceStub.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/event/LttngEvent.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/event/LttngEventContent.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/StateDataRequest.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/StateManager.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/StateStacksHandler.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/evProcessor/state/StateUpdateHandlers.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/experiment/StateExperimentManager.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/experiment/StateManagerFactory.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/state/model/LttngTrapState.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/trace/LTTngTextTrace.java
org.eclipse.linuxtools.lttng/src/org/eclipse/linuxtools/lttng/trace/LTTngTrace.java
org.eclipse.linuxtools.tmf.tests/META-INF/MANIFEST.MF
org.eclipse.linuxtools.tmf.tests/src/org/eclipse/linuxtools/tmf/tests/component/TmfProviderManagerTest.java
org.eclipse.linuxtools.tmf.tests/src/org/eclipse/linuxtools/tmf/tests/request/AllTests.java
org.eclipse.linuxtools.tmf.tests/src/org/eclipse/linuxtools/tmf/tests/request/TmfDataRequestTest.java
org.eclipse.linuxtools.tmf.tests/src/org/eclipse/linuxtools/tmf/tests/request/TmfEventRequestTest.java
org.eclipse.linuxtools.tmf.tests/src/org/eclipse/linuxtools/tmf/tests/trace/AllTests.java
org.eclipse.linuxtools.tmf.tests/src/org/eclipse/linuxtools/tmf/tests/trace/TmfExperimentTest.java
org.eclipse.linuxtools.tmf.tests/src/org/eclipse/linuxtools/tmf/tests/trace/TmfTraceTest.java
org.eclipse.linuxtools.tmf.tests/stubs/org/eclipse/linuxtools/tmf/component/TmfProviderStub.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf.tests/stubs/org/eclipse/linuxtools/tmf/request/TmfRequestHandlerStub.java [deleted file]
org.eclipse.linuxtools.tmf.tests/stubs/org/eclipse/linuxtools/tmf/trace/TmfEventParserStub.java
org.eclipse.linuxtools.tmf.tests/stubs/org/eclipse/linuxtools/tmf/trace/TmfTraceStub.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/timeAnalysis/widgets/TmfTimeStatesCtrl.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/TmfEventsView.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/TmfView.java
org.eclipse.linuxtools.tmf/META-INF/MANIFEST.MF
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/TmfCorePlugin.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/ITmfComponent.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/ITmfContext.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/ITmfTransform.java [deleted file]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/TmfComponent.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/TmfProvider.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/TmfProviderManager.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/TmfTransform.java [deleted file]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/event/TmfTimestamp.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperiment.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperimentCheckpoint.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperimentContext.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperimentSelectedSignal.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperimentUpdatedSignal.java [new file with mode: 0644]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/parser/ITmfEventParser.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/request/ITmfRequestHandler.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/request/TmfDataRequest.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/request/TmfEventRequest.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/signal/TmfSignalManager.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/ITmfEventParser.java [deleted file]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/ITmfTrace.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfExperiment.java [deleted file]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfExperimentSelectedSignal.java [deleted file]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfExperimentUpdatedSignal.java [deleted file]
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfTrace.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfTraceCheckpoint.java
org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfTraceContext.java

index d5699cffedbf0ba92ed159530646dc456836fab8..70020ada35afd9110b61ae1b308a0416faaa440a 100644 (file)
@@ -63,24 +63,16 @@ public abstract class JniEvent extends Jni_C_Common implements Comparable<JniEve
         
     // Native access functions
     protected native long     ltt_getTracefilePtr(long eventPtr);
-    @SuppressWarnings("unused")
     protected native long     ltt_getBlock(long eventPtr);
-    @SuppressWarnings("unused")
     protected native long     ltt_getOffset(long eventPtr);
-    @SuppressWarnings("unused")
     protected native long     ltt_getCurrentTimestampCounter(long eventPtr);
-    @SuppressWarnings("unused")
     protected native long     ltt_getTimestamp(long eventPtr);
     protected native int      ltt_getEventMarkerId(long eventPtr);
     protected native long     ltt_getNanosencondsTime(long eventPtr);
-    @SuppressWarnings("unused")
     protected native void     ltt_feedEventTime(long eventPtr, JniTime eventTime);
     protected native long     ltt_getEventDataSize(long eventPtr);
-    @SuppressWarnings("unused")
     protected native long     ltt_getEventSize(long eventPtr);
-    @SuppressWarnings("unused")
     protected native int      ltt_getCount(long eventPtr);
-    @SuppressWarnings("unused")
     protected native long     ltt_getOverflowNanoSeconds(long eventPtr);
         
     // This method an event pointer
@@ -99,9 +91,8 @@ public abstract class JniEvent extends Jni_C_Common implements Comparable<JniEve
     /**
      * Default constructor is forbidden
      */
-    @SuppressWarnings("unused")
     protected JniEvent() {
-    };
+    }
 
     /**
      * Copy constructor.<p>
index 8c9f3b2f42f9888a93fe7c1ffe821dda08774452..d9785e20b4a14c4155cc2d1a7225f489345a6864 100644 (file)
@@ -51,22 +51,14 @@ public abstract class JniMarker extends Jni_C_Common
     // Native access method
     protected native String ltt_getName(long markerPtr);   
     protected native String ltt_getFormatOverview(long markerPtr);
-    @SuppressWarnings("unused")
     protected native long ltt_getSize(long markerPtr);
-    @SuppressWarnings("unused")
     protected native short ltt_getLargestAlign(long markerPtr);
-    @SuppressWarnings("unused")
     protected native short ltt_getIntSize(long markerPtr);
-    @SuppressWarnings("unused")
     protected native short ltt_getLongSize(long markerPtr);
-    @SuppressWarnings("unused")
     protected native short ltt_getPointerSize(long markerPtr);
-    @SuppressWarnings("unused")
     protected native short ltt_getSize_tSize(long markerPtr);
     protected native void ltt_getAllMarkerFields(long tracePtr);
-    @SuppressWarnings("unused")
     protected native short ltt_getAlignement(long markerPtr);
-    @SuppressWarnings("unused")
     protected native long ltt_getNextMarkerPtr(long markerPtr);
 
     // Debug native function, ask LTT to print marker structure
@@ -81,7 +73,6 @@ public abstract class JniMarker extends Jni_C_Common
     /*
      * Default constructor is forbidden
      */
-    @SuppressWarnings("unused")
     protected JniMarker() {
     }
     
index ff31305a32d52ebe5ba3c28c2d1ed21b32258632..45608e2b2ecf56335f98b46cbf06acbffee94d8d 100644 (file)
@@ -27,17 +27,11 @@ public abstract class JniMarkerField extends Jni_C_Common
     
     // Native access method
     protected native String ltt_getField(long markerFieldPtr);
-    @SuppressWarnings("unused")
     protected native int ltt_getType(long markerFieldPtr);
-    @SuppressWarnings("unused")
     protected native long ltt_getOffset(long markerFieldPtr);
-    @SuppressWarnings("unused")
     protected native long ltt_getSize(long markerFieldPtr);
-    @SuppressWarnings("unused")
     protected native long ltt_getAlignment(long markerFieldPtr);
-    @SuppressWarnings("unused")
     protected native long ltt_getAttributes(long markerFieldPtr);
-    @SuppressWarnings("unused")
     protected native int ltt_getStatic_offset(long markerFieldPtr);
     protected native String ltt_getFormat(long markerFieldPtr);
 
@@ -53,7 +47,6 @@ public abstract class JniMarkerField extends Jni_C_Common
     /*
      * Default constructor is forbidden
      */
-    @SuppressWarnings("unused")
     protected JniMarkerField() {
     }
 
index d6f86daaa6f285da0cf7ddf0e031664258d7ed1c..4f064921ccad634ba01753ff5cb711fecc3fe57c 100644 (file)
@@ -123,7 +123,6 @@ public abstract class JniTracefile extends Jni_C_Common {
     /*
      * Default constructor is forbidden
      */
-    @SuppressWarnings("unused")
     protected JniTracefile() {
     }
 
index 341bdbfa2e693a5a307d83cf0e6ca0252c4923a4..d9271d71bbeb1e2900782e6e0312936cb3b97db8 100644 (file)
@@ -3,6 +3,5 @@ output.. = bin/
 bin.includes = META-INF/,\
                .,\
                plugin.properties,\
-               test2.xml,\
                traceset/,\
                test.xml
index 1c4da0355378eab67157d9e077843ddd5cf16b1f..62185c3965fcb6fe88418cbf7364851e83fcabeb 100644 (file)
@@ -5,9 +5,14 @@ import java.net.URL;
 import java.util.HashMap;
 
 import junit.framework.TestCase;
+
 import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.linuxtools.lttng.event.*;
+import org.eclipse.linuxtools.lttng.event.LttngEvent;
+import org.eclipse.linuxtools.lttng.event.LttngEventContent;
+import org.eclipse.linuxtools.lttng.event.LttngEventField;
+import org.eclipse.linuxtools.lttng.event.LttngEventType;
+import org.eclipse.linuxtools.lttng.event.LttngTimestamp;
 import org.eclipse.linuxtools.lttng.tests.LTTngCoreTestPlugin;
 import org.eclipse.linuxtools.lttng.trace.LTTngTextTrace;
 import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
@@ -38,7 +43,7 @@ import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
 
 public class LttngEventContentTest extends TestCase {
     private final static String tracepath1="traceset/trace-15316events_nolost_newformat.txt";
-    private final static boolean skipIndexing=true;
+//    private final static boolean skipIndexing=true;
     
     private final static String firstEventContentFirstField    = "alignment:0";
     private final static String firstEventContentFirstFieldName = "alignment";
@@ -80,7 +85,7 @@ public class LttngEventContentTest extends TestCase {
                try {
                        testStream = null;
                    LTTngTextTrace tmpStream = initializeEventStream();
-                       tmpEventContent = (LttngEventContent)tmpStream.getNextEvent( new TmfTraceContext(0L, new LttngTimestamp(0L), 0) ).getContent();
+                       tmpEventContent = (LttngEventContent)tmpStream.getNextEvent( new TmfTraceContext(0L, 0) ).getContent();
                }
                catch (Exception e) {
                        fail("ERROR : Failed to get content!");
@@ -142,7 +147,7 @@ public class LttngEventContentTest extends TestCase {
        
        // Require an event
        tmpStream = initializeEventStream();
-       tmpContext = new TmfTraceContext(0L, new LttngTimestamp(0L), 0);
+       tmpContext = new TmfTraceContext(0L, 0);
        tmpEvent = (LttngEvent)tmpStream.getNextEvent(tmpContext);
                testContent = prepareToTest();
        // getFieldS()
@@ -168,7 +173,7 @@ public class LttngEventContentTest extends TestCase {
        
        //*** To test getFields with a fields number >0, we need to move to an event that have some more
        tmpStream = initializeEventStream();
-       tmpContext = new TmfTraceContext(0L, new LttngTimestamp(0L), 0);
+       tmpContext = new TmfTraceContext(0L, 0);
        // Skip first events and seek to event pass metadata
        tmpContext= tmpStream.seekEvent(new LttngTimestamp(timestampAfterMetadata) );
        // Skip first one 
@@ -205,7 +210,7 @@ public class LttngEventContentTest extends TestCase {
        
        // Require an event
        tmpStream = initializeEventStream();
-       tmpContext = new TmfTraceContext(0L, new LttngTimestamp(0L), 0);
+       tmpContext = new TmfTraceContext(0L, 0);
        tmpEvent = (LttngEvent)tmpStream.getNextEvent(tmpContext);
                
        LttngEventContent tmpContent = prepareToTest();
@@ -234,7 +239,7 @@ public class LttngEventContentTest extends TestCase {
        
        // Require an event
        tmpStream = initializeEventStream();
-       tmpContext = new TmfTraceContext(0L, new LttngTimestamp(0L), 0);
+       tmpContext = new TmfTraceContext(0L, 0);
        tmpEvent = (LttngEvent)tmpStream.getNextEvent(tmpContext);
        // Get the content
        testContent = tmpEvent.getContent();
index 5094955a79ed9f8b2d9ab2ca07ff99dca27c1d39..324f212c0c9f86393a13bcfc7b11daf097740fe1 100644 (file)
@@ -11,7 +11,6 @@ import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.linuxtools.lttng.event.LttngEventContent;
 import org.eclipse.linuxtools.lttng.event.LttngEventField;
-import org.eclipse.linuxtools.lttng.event.LttngTimestamp;
 import org.eclipse.linuxtools.lttng.tests.LTTngCoreTestPlugin;
 import org.eclipse.linuxtools.lttng.trace.LTTngTextTrace;
 import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
@@ -29,7 +28,7 @@ public class LttngEventFieldTest extends TestCase {
     private final static String tracepath1="traceset/trace-15316events_nolost_newformat.txt";
     private final static boolean skipIndexing=true;
     
-    private final static String firstEventName                 = "alignment";
+//    private final static String firstEventName               = "alignment";
     private final static String firstEventValue        = "0";
     
     private static LTTngTextTrace testStream = null;
@@ -59,7 +58,7 @@ public class LttngEventFieldTest extends TestCase {
                // This trace should be valid
                try {
                        LTTngTextTrace tmpStream = initializeEventStream();
-                       tmpField = (LttngEventField)tmpStream.getNextEvent( new TmfTraceContext(0, new LttngTimestamp(0L), 0) ).getContent().getField(0);
+                       tmpField = (LttngEventField)tmpStream.getNextEvent( new TmfTraceContext(0L, 0) ).getContent().getField(0);
                } 
                catch (Exception e) {
                        fail("ERROR : Failed to get field!");
@@ -98,7 +97,7 @@ public class LttngEventFieldTest extends TestCase {
        // *** To "really" test the field, we will get a real field from LTTngTrace
        LTTngTextTrace tmpStream = initializeEventStream();
        
-       LttngEventField testField       = (LttngEventField)tmpStream.getNextEvent( new TmfTraceContext(0, new LttngTimestamp(0L), 0) ).getContent().getField(0);
+       LttngEventField testField       = (LttngEventField)tmpStream.getNextEvent( new TmfTraceContext(0L, 0) ).getContent().getField(0);
        assertNotSame("getField is null!",null,testField);
        
        // *** FIXME ***
index 303f9701385ffea6e7eb0b6fc3c486a2e5456be6..4e774697a504aabe4b5a9c6728f83172fa95b159 100644 (file)
@@ -59,7 +59,7 @@ public class LttngEventReferenceTest extends TestCase {
         // This trace should be valid
         try {
             LTTngTextTrace tmpStream = initializeEventStream();
-            tmpEventRef = (LttngEventReference)tmpStream.getNextEvent(new TmfTraceContext(null, null, 0) ).getReference();
+            tmpEventRef = (LttngEventReference)tmpStream.getNextEvent(new TmfTraceContext(null, 0) ).getReference();
         } 
         catch (Exception e) {
             fail("ERROR : Failed to get reference!");
index 71c668b31772fcc87e2fa6bcdb7928831bf201ed..ad40ec6b5f106dcb8e04788a2f54334568ae031b 100644 (file)
@@ -48,7 +48,7 @@ public class LttngEventTest extends TestCase {
     private final static String eventChannel   = "metadata";
     private final static long  eventCpu                = 0;
     private final static String eventMarker    = "core_marker_id";
-    private final static String eventContent   = "alignment:0 size_t:4 int:4 name:vm_map pointer:4 event_id:0 long:4 channel:vm_state ";
+//    private final static String eventContent         = "alignment:0 size_t:4 int:4 name:vm_map pointer:4 event_id:0 long:4 channel:vm_state ";
     private final static String eventReference         = eventChannel + "_" + eventCpu;
     
     
@@ -78,7 +78,7 @@ public class LttngEventTest extends TestCase {
                
                try {
                        LTTngTextTrace tmpStream = initializeEventStream();
-                       tmpEvent = (LttngEvent)tmpStream.getNextEvent(new TmfTraceContext(0, new LttngTimestamp(0L), 0) );
+                       tmpEvent = (LttngEvent)tmpStream.getNextEvent(new TmfTraceContext(0L, 0) );
                }
                catch (Exception e) {
                        System.out.println("ERROR : Could not open " + tracepath1);
index b1ed838d91bc4b91df9e491c3e78384b39080f86..cfe70f702e92f6ce1e35d19c4a38010924e15966 100644 (file)
@@ -59,7 +59,7 @@ public class LttngEventTypeTest extends TestCase {
         // This trace should be valid
         try {
             LTTngTextTrace tmpStream = initializeEventStream();
-            tmpEventType = (LttngEventType)tmpStream.getNextEvent( new TmfTraceContext(null, null, 0) ).getType();
+            tmpEventType = (LttngEventType)tmpStream.getNextEvent( new TmfTraceContext(null, 0) ).getType();
         } 
         catch (Exception e) {
             fail("ERROR : Failed to get reference!");
index b3849d3226495e428b79e1983537ba26e9eeccf0..601c46e17b226056ceca67e314d7c520857d0a67 100644 (file)
@@ -57,7 +57,7 @@ public class LttngTimestampTest extends TestCase {
         // This trace should be valid
         try {
             LTTngTextTrace tmpStream = initializeEventStream();
-            tmpTime = (LttngTimestamp)tmpStream.getNextEvent( new TmfTraceContext(null, null, 0) ).getTimestamp();
+            tmpTime = (LttngTimestamp)tmpStream.getNextEvent( new TmfTraceContext(null, 0) ).getTimestamp();
         } 
         catch (Exception e) {
             fail("ERROR : Failed to get reference!");
index a1cfc7c9fddb46344600127a0be6ce64093b6175..fe1fac453c134d76202c1db2f7006d8b4e20be98 100644 (file)
@@ -17,9 +17,10 @@ import java.util.Set;
 import junit.framework.TestCase;
 
 import org.eclipse.linuxtools.lttng.TraceDebug;
+import org.eclipse.linuxtools.lttng.event.LttngEvent;
 import org.eclipse.linuxtools.lttng.state.StateManager;
 import org.eclipse.linuxtools.lttng.trace.LTTngTrace;
-import org.eclipse.linuxtools.tmf.trace.TmfExperiment;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
 
 /**
  * @author alvaro
@@ -40,7 +41,7 @@ public class TestStateManager extends TestCase {
                if (testStream != null) {
                    LTTngTrace[] streamList = new LTTngTrace[1];
                        streamList[0] = testStream;
-                       TmfExperiment newExp = new TmfExperiment(logName, streamList);
+                       TmfExperiment<LttngEvent> newExp = new TmfExperiment<LttngEvent>(LttngEvent.class, logName, streamList);
                        
                        //Get the Test StateManager
                        StateManager manager = StateManagerFactoryTestSupport.getManager(newExp.getExperimentId());
index bf7fba9302923da21465657691b2895eed96c26f..7cbd686c056fa8f7330c2b6df872b008744ddf8a 100644 (file)
@@ -113,7 +113,7 @@ public class LTTngTextTraceTest extends TestCase {
                TmfEvent tmpEvent = null;
                LTTngTextTrace testStream1 = prepareStreamToTest();
                
-               TmfTraceContext tmpContext = new TmfTraceContext(null, null, 0);
+               TmfTraceContext tmpContext = new TmfTraceContext(null, 0);
                // We should be at the beginning of the trace, so we will just read the first event now
                tmpEvent = testStream1.getNextEvent(tmpContext );
                assertNotSame("tmpEvent is null after first getNextEvent()",null,tmpEvent );
@@ -129,7 +129,7 @@ public class LTTngTextTraceTest extends TestCase {
                TmfEvent tmpEvent = null;
                LTTngTextTrace testStream1 = prepareStreamToTest();
                
-               TmfTraceContext tmpContext = new TmfTraceContext(null, null, 0);
+               TmfTraceContext tmpContext = new TmfTraceContext(null, 0);
                // We should be at the beginning of the trace, so we will just parse the first event now
                tmpEvent = testStream1.parseEvent(tmpContext );
                assertNotSame("tmpEvent is null after first parseEvent()",null,tmpEvent );
@@ -143,44 +143,44 @@ public class LTTngTextTraceTest extends TestCase {
        
        public void testSeekEventTimestamp() {
                TmfEvent tmpEvent = null;
-               TmfTraceContext tmpContext = new TmfTraceContext(null, null, 0);
+               TmfTraceContext tmpContext = new TmfTraceContext(null, 0);
                LTTngTextTrace testStream1 = prepareStreamToTest();
                
                // We should be at the beginning of the trace, we will seek at a certain timestamp
-               tmpContext = testStream1.seekEvent(new TmfTimestamp(timestampToSeekTest1));
+               tmpContext = testStream1.seekEvent(new TmfTimestamp(timestampToSeekTest1, (byte) -9, 0));
                tmpEvent = testStream1.getNextEvent(tmpContext);
                assertNotSame("tmpContext is null after first seekEvent()",null,tmpContext );
-               assertEquals("tmpContext has wrong timestamp after first seekEvent()",contextValueAfterSeekTest1,(long)((TmfTimestamp)tmpContext.getTimestamp()).getValue() );
+               assertEquals("tmpContext has wrong timestamp after first seekEvent()",contextValueAfterSeekTest1,(long)((TmfTimestamp)tmpEvent.getTimestamp()).getValue() );
                assertNotSame("tmpEvent is null after first seekEvent()",null,tmpEvent );
                assertTrue("tmpEvent has wrong reference after first seekEvent()", ((String)tmpEvent.getReference().getReference()).contains(seek1EventReference) );
                
                // Seek to the last timestamp
-               tmpContext = testStream1.seekEvent(new TmfTimestamp(timestampToSeekLast));
+               tmpContext = testStream1.seekEvent(new TmfTimestamp(timestampToSeekLast, (byte) -9, 0));
                tmpEvent = testStream1.getNextEvent(tmpContext);
                assertNotSame("tmpContext is null after seekEvent() to last",null,tmpContext );
-               assertEquals("tmpContext has wrong timestamp after seekEvent() to last",contextValueAfterSeekLast,(long)((TmfTimestamp)tmpContext.getTimestamp()).getValue() );
+               assertEquals("tmpContext has wrong timestamp after seekEvent() to last",contextValueAfterSeekLast,(long)((TmfTimestamp)tmpEvent.getTimestamp()).getValue() );
                assertNotSame("tmpEvent is null after seekEvent() to last ",null,tmpEvent );
                assertTrue("tmpEvent has wrong reference after seekEvent() to last",((String)tmpEvent.getReference().getReference()).contains(seekLastEventReference) );
                
                // Seek to the first timestamp (startTime)
-               tmpContext = testStream1.seekEvent(new TmfTimestamp(firstEventTimestamp));
+               tmpContext = testStream1.seekEvent(new TmfTimestamp(firstEventTimestamp, (byte) -9, 0));
                tmpEvent = testStream1.getNextEvent(tmpContext);
                assertNotSame("tmpEvent is null after seekEvent() to start ",null,tmpEvent );
                assertTrue("tmpEvent has wrong reference after seekEvent() to start",((String)tmpEvent.getReference().getReference()).contains(firstEventReference) );
                assertNotSame("tmpContext is null after seekEvent() to first",null,tmpContext );
-               assertEquals("tmpContext has wrong timestamp after seekEvent() to first",contextValueAfterFirstEvent,(long)((TmfTimestamp)tmpContext.getTimestamp()).getValue() );
+               assertEquals("tmpContext has wrong timestamp after seekEvent() to first",contextValueAfterFirstEvent,(long)((TmfTimestamp)tmpEvent.getTimestamp()).getValue() );
        }
        
        public void testSeekEventIndex() {
                TmfEvent tmpEvent = null;
-               TmfTraceContext tmpContext = new TmfTraceContext(null, null, 0);
+               TmfTraceContext tmpContext = new TmfTraceContext(null, 0);
                LTTngTextTrace testStream1 = prepareStreamToTest();
                
                // We should be at the beginning of the trace, we will seek at a certain timestamp
                tmpContext = testStream1.seekEvent(indexToSeekTest1);
                tmpEvent = testStream1.getNextEvent(tmpContext);
                assertNotSame("tmpContext is null after first seekEvent()",null,tmpContext );
-               assertEquals("tmpContext has wrong timestamp after first seekEvent()",contextValueAfterSeekTest1,(long)((TmfTimestamp)tmpContext.getTimestamp()).getValue() );
+               assertEquals("tmpContext has wrong timestamp after first seekEvent()",contextValueAfterSeekTest1,(long)((TmfTimestamp)tmpEvent.getTimestamp()).getValue() );
                assertNotSame("tmpEvent is null after first seekEvent()",null,tmpEvent );
                assertTrue("tmpEvent has wrong reference after first seekEvent()", ((String)tmpEvent.getReference().getReference()).contains(seek1EventReference) );
                
@@ -188,7 +188,7 @@ public class LTTngTextTraceTest extends TestCase {
                tmpContext = testStream1.seekEvent(indexToSeekLast);
                tmpEvent = testStream1.getNextEvent(tmpContext);
                assertNotSame("tmpContext is null after first seekEvent()",null,tmpContext );
-               assertEquals("tmpContext has wrong timestamp after first seekEvent()",contextValueAfterSeekLast,(long)((TmfTimestamp)tmpContext.getTimestamp()).getValue() );
+               assertEquals("tmpContext has wrong timestamp after first seekEvent()",contextValueAfterSeekLast,(long)((TmfTimestamp)tmpEvent.getTimestamp()).getValue() );
                assertNotSame("tmpEvent is null after seekEvent() to last ",null,tmpEvent );
                assertTrue("tmpEvent has wrong reference after seekEvent() to last",((String)tmpEvent.getReference().getReference()).contains(seekLastEventReference) );
                
@@ -196,21 +196,21 @@ public class LTTngTextTraceTest extends TestCase {
                tmpContext = testStream1.seekEvent(indexToSeekFirst);
                tmpEvent = testStream1.getNextEvent(tmpContext);
                assertNotSame("tmpContext is null after first seekEvent()",null,tmpContext );
-               assertEquals("tmpContext has wrong timestamp after first seekEvent()",contextValueAfterFirstEvent,(long)((TmfTimestamp)tmpContext.getTimestamp()).getValue() );
+               assertEquals("tmpContext has wrong timestamp after first seekEvent()",contextValueAfterFirstEvent,(long)((TmfTimestamp)tmpEvent.getTimestamp()).getValue() );
                assertNotSame("tmpEvent is null after seekEvent() to start ",null,tmpEvent );
                assertTrue("tmpEvent has wrong reference after seekEvent() to start",((String)tmpEvent.getReference().getReference()).contains(firstEventReference) );
        }
        
        public void testSeekLocation() {
                TmfEvent tmpEvent = null;
-               TmfTraceContext tmpContext = new TmfTraceContext(null, null, 0);
+               TmfTraceContext tmpContext = new TmfTraceContext(null, 0);
                LTTngTextTrace testStream1 = prepareStreamToTest();
                
                // We should be at the beginning of the trace, we will seek at a certain timestamp
                tmpContext = testStream1.seekLocation(locationToSeekTest1);
                tmpEvent = testStream1.getNextEvent(tmpContext);
                assertNotSame("tmpContext is null after first seekLocation()",null,tmpContext );
-               assertEquals("tmpContext has wrong timestamp after first seekLocation()",contextValueAfterSeekTest1,(long)((TmfTimestamp)tmpContext.getTimestamp()).getValue() );
+               assertEquals("tmpContext has wrong timestamp after first seekLocation()",contextValueAfterSeekTest1,(long)((TmfTimestamp)tmpEvent.getTimestamp()).getValue() );
                assertNotSame("tmpEvent is null after first seekLocation()",null,tmpEvent );
                assertTrue("tmpEvent has wrong reference after first seekLocation()", ((String)tmpEvent.getReference().getReference()).contains(seek1EventReference) );
                
@@ -218,7 +218,7 @@ public class LTTngTextTraceTest extends TestCase {
                tmpContext = testStream1.seekLocation(locationToSeekLast);
                tmpEvent = testStream1.getNextEvent(tmpContext);
                assertNotSame("tmpContext is null after first seekLocation()",null,tmpContext );
-               assertEquals("tmpContext has wrong timestamp after first seekLocation()",contextValueAfterSeekLast,(long)((TmfTimestamp)tmpContext.getTimestamp()).getValue() );
+               assertEquals("tmpContext has wrong timestamp after first seekLocation()",contextValueAfterSeekLast,(long)((TmfTimestamp)tmpEvent.getTimestamp()).getValue() );
                assertNotSame("tmpEvent is null after seekLocation() to last ",null,tmpEvent );
                assertTrue("tmpEvent has wrong reference after seekLocation() to last",((String)tmpEvent.getReference().getReference()).contains(seekLastEventReference) );
                
@@ -226,7 +226,7 @@ public class LTTngTextTraceTest extends TestCase {
                tmpContext = testStream1.seekLocation(locationToSeekFirst);
                tmpEvent = testStream1.getNextEvent(tmpContext);
                assertNotSame("tmpContext is null after first seekLocation()",null,tmpContext );
-               assertEquals("tmpContext has wrong timestamp after first seekLocation()",contextValueAfterFirstEvent,(long)((TmfTimestamp)tmpContext.getTimestamp()).getValue() );
+               assertEquals("tmpContext has wrong timestamp after first seekLocation()",contextValueAfterFirstEvent,(long)((TmfTimestamp)tmpEvent.getTimestamp()).getValue() );
                assertNotSame("tmpEvent is null after seekLocation() to start ",null,tmpEvent );
                assertTrue("tmpEvent has wrong reference after seekLocation() to start",((String)tmpEvent.getReference().getReference()).contains(firstEventReference) );
        }
@@ -236,7 +236,7 @@ public class LTTngTextTraceTest extends TestCase {
        LTTngTextTrace testStream1 = prepareStreamToTest();
                
                // Move to the first event to have something to play with
-               tmpEvent = testStream1.parseEvent( new TmfTraceContext(null, null, 0));
+               tmpEvent = testStream1.parseEvent( new TmfTraceContext(null, 0));
                
                // Test current event
                assertNotSame("tmpEvent is null after first event",null,tmpEvent );
@@ -252,7 +252,7 @@ public class LTTngTextTraceTest extends TestCase {
                LTTngTextTrace testStream1 = prepareStreamToTest();
                
                // Move to the first event to have something to play with
-               testStream1.parseEvent( new TmfTraceContext(null, null, 0) );
+               testStream1.parseEvent( new TmfTraceContext(null, 0) );
                
                // Just make sure toString() does not return null or the java reference
                assertNotSame("toString returned null",null, testStream1.toString() );
index 6c95c518c4d8f8518a6c578a22cf710cb720e7be..94f2340f4450f960affe5339f6967e6ce36cad29 100644 (file)
  *******************************************************************************/
 package org.eclipse.linuxtools.lttng.ui.model.trange;
 
+
 import org.eclipse.linuxtools.lttng.state.StateStrings;
 import org.eclipse.linuxtools.lttng.state.model.LttngIRQState;
 import org.eclipse.linuxtools.lttng.state.model.LttngTraceState;
+import org.eclipse.linuxtools.lttng.state.model.LttngTrapState;
 import org.eclipse.linuxtools.lttng.ui.model.trange.TimeRangeEventResource.ResourceTypes;
 
 /**
@@ -130,17 +132,27 @@ public class TimeRangeResourceFactory {
                        @Override
                        public String getStateMode(LttngTraceState traceSt) {
                                // Determine the trap state.
-                               long trapState = traceSt.getTrap_states().get(getResourceId())
-                                               .getRunning().longValue();
                                String trapStateMode = "";
-                               if (trapState == 0) {
-                                       trapStateMode = StateStrings.TrapMode.LTTV_TRAP_IDLE
-                                                       .getInName();
-                               } else {
-                                       trapStateMode = StateStrings.TrapMode.LTTV_TRAP_BUSY
-                                                       .getInName();
+                               LttngTrapState ts = traceSt.getTrap_states().get(getResourceId());
+                               
+                               // *** Note : 
+                               //      Ts might not have been created yet.
+                               //      This is because the state system will be updated next to this before hook
+                               //      It should be correct to create it here as Busy 
+                               //              (traps are created with running++ so it wont be idle)
+                               if ( ts != null ) {
+                                       Long trapState = ts.getRunning();
+                                       
+                                       if (trapState == 0) {
+                                               trapStateMode = StateStrings.TrapMode.LTTV_TRAP_IDLE.getInName();
+                                       } else {
+                                               trapStateMode = StateStrings.TrapMode.LTTV_TRAP_BUSY.getInName();
+                                       }
                                }
-
+                               else {
+                                       trapStateMode = StateStrings.TrapMode.LTTV_TRAP_BUSY.getInName();
+                               }
+                               
                                return trapStateMode;
                        }
                };
index cfea3f645eb6ea8000b11d10286591c1a0312172..306adfe0595c9a69a3be873026df48939ff1ef97 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -30,9 +30,9 @@ public class EventsView extends TmfEventsView {
 
     public static final String ID = "org.eclipse.linuxtools.lttng.ui.views.events";
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Table data
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     // Table column names
     private final String TIMESTAMP_COLUMN = "Timestamp";
@@ -62,18 +62,19 @@ public class EventsView extends TmfEventsView {
     };
 
     private ColumnData[] columnData = new ColumnData[] {
-        new ColumnData(columnProperties[0], 100, SWT.LEFT),
+        new ColumnData(columnProperties[0], 125, SWT.LEFT),
         new ColumnData(columnProperties[1], 100, SWT.LEFT),
-        new ColumnData(columnProperties[2], 100, SWT.LEFT),
-        new ColumnData(columnProperties[3], 100, SWT.LEFT),
+        new ColumnData(columnProperties[2], 200, SWT.LEFT),
+        new ColumnData(columnProperties[3], 200, SWT.LEFT),
         new ColumnData(columnProperties[4], 100, SWT.LEFT)
     };
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Constructor
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     public EventsView() {
+       super(1);
     }
 
        /**
@@ -82,7 +83,7 @@ public class EventsView extends TmfEventsView {
         * FIXME: Add support for column selection
         */
        @Override
-       protected void setColumnHeaders(Table table) {
+       protected void createColumnHeaders(Table table) {
         for (int i = 0; i < columnData.length; i++) {
             final TableColumn column = new TableColumn(table, columnData[i].alignment, i);
             column.setText(columnData[i].header);
index e7ff2f8153aa8d62f0c387026f9e27eb418d162a..979ba0502c3fc3da917fb3cc984495734cdfef73 100644 (file)
@@ -24,12 +24,13 @@ import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.TreeSelection;
 import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.linuxtools.lttng.event.LttngEvent;
 import org.eclipse.linuxtools.lttng.trace.LTTngTrace;
 import org.eclipse.linuxtools.lttng.ui.views.project.model.LTTngExperimentEntry;
 import org.eclipse.linuxtools.lttng.ui.views.project.model.LTTngTraceEntry;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperimentSelectedSignal;
 import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
-import org.eclipse.linuxtools.tmf.trace.TmfExperiment;
-import org.eclipse.linuxtools.tmf.trace.TmfExperimentSelectedSignal;
 import org.eclipse.linuxtools.tmf.ui.views.TmfView;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.MouseAdapter;
@@ -55,7 +56,7 @@ public class ProjectView extends TmfView {
     private final IWorkspace fWorkspace;
     private final IResourceChangeListener fResourceChangeListener;
     private TreeViewer fViewer;
-    private TmfExperiment fExperiment = null;
+    private TmfExperiment<LttngEvent> fExperiment = null;
 //    private Object fSelection = null;
 
     // To perform updates on the UI thread
@@ -148,7 +149,7 @@ public class ProjectView extends TmfView {
        private void selectExperiment(LTTngExperimentEntry experiment) {
        String expId = experiment.getName();
         if (fExperiment != null)
-               fExperiment.dispose();
+               fExperiment.deregister();
         try {
                LTTngTraceEntry[] traceEntries = experiment.getTraces();
                int nbTraces = traceEntries.length;
@@ -159,8 +160,9 @@ public class ProjectView extends TmfView {
                        ITmfTrace trace = new LTTngTrace(location, waitForCompletion);
                 traces[i] = trace;
                }
-            fExperiment = new TmfExperiment(expId, traces, waitForCompletion);
-            broadcastSignal(new TmfExperimentSelectedSignal(this, fExperiment));
+            fExperiment = new TmfExperiment<LttngEvent>(LttngEvent.class, expId, traces);
+            fExperiment.indexExperiment(waitForCompletion);
+            broadcast(new TmfExperimentSelectedSignal(this, fExperiment));
         } catch (FileNotFoundException e) {
                // TODO: Why not tell the user? He would appreciate...
 //            e.printStackTrace();
@@ -209,4 +211,4 @@ public class ProjectView extends TmfView {
                return "[ProjectView]";
        }
 
-}
+}
\ No newline at end of file
index 21262125873e1b3a44e24967eb66432e2407c39a..a5d89f0de8508e532e6bf0d8d9c793052323814a 100644 (file)
@@ -63,7 +63,6 @@ public class ImportTraceWizard extends Wizard implements IImportWizard {
     /* (non-Javadoc)
      * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
      */
-       @SuppressWarnings("unchecked")
        public void init(IWorkbench workbench, IStructuredSelection selection) {
         fWorkbench = workbench;
         fSelection = selection;
@@ -86,4 +85,4 @@ public class ImportTraceWizard extends Wizard implements IImportWizard {
         return fMainPage.finish();
     }
 
-}
+}
\ No newline at end of file
index 8bfee691f20b1c0bdd98f51e17d209a2837e28df..16f33a54d28d52f2de6a3cd044cdaaffdd08cc9b 100644 (file)
@@ -112,6 +112,11 @@ public class NewExperimentDialog extends SelectionStatusDialog {
                                        public String getValue() {
                                                return folderNameField.getText();
                                        }
+
+                                       public IResource getResource() {
+                                               // TODO Auto-generated method stub
+                                               return null;
+                                       }
                                });
        }
 
@@ -326,4 +331,4 @@ public class NewExperimentDialog extends SelectionStatusDialog {
 
                super.okPressed();
        }
-}
+}
\ No newline at end of file
index fb0a72ef23f084bd6c0a78b4688127610fea7974..8fb867900092f86a20f3d9c85f2fae7c61455370 100644 (file)
 
 package org.eclipse.linuxtools.lttng.ui.views.timeframe;
 
+import org.eclipse.linuxtools.lttng.event.LttngEvent;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperimentSelectedSignal;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperimentUpdatedSignal;
 import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
 import org.eclipse.linuxtools.tmf.signal.TmfTimeSynchSignal;
-import org.eclipse.linuxtools.tmf.trace.TmfExperiment;
-import org.eclipse.linuxtools.tmf.trace.TmfExperimentSelectedSignal;
-import org.eclipse.linuxtools.tmf.trace.TmfExperimentUpdatedSignal;
 import org.eclipse.linuxtools.tmf.ui.views.TmfView;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
@@ -87,7 +88,7 @@ public class TimeFrameView extends TmfView {
     private Slider fSlider;
 
     // The current experiment
-    TmfExperiment fExperiment = null;
+    TmfExperiment<LttngEvent> fExperiment = null;
 
     /**
      * Constructor
@@ -178,7 +179,7 @@ public class TimeFrameView extends TmfView {
         // Notify other views
         if (!fCurrentTime.equals(currentTime)) {
             fCurrentTime = currentTime;
-            broadcastSignal(new TmfTimeSynchSignal(this, currentTime));
+            broadcast(new TmfTimeSynchSignal(this, currentTime));
         }
     }
 
@@ -251,14 +252,15 @@ public class TimeFrameView extends TmfView {
     // TMF Signal Handling
     // ========================================================================
 
-    /**
+    @SuppressWarnings("unchecked")
+       /**
      * @param signal
      */
     @TmfSignalHandler
     public void experimentSelected(TmfExperimentSelectedSignal signal) {
 
         // Update the trace reference
-        fExperiment = signal.getExperiment();
+        fExperiment = (TmfExperiment<LttngEvent>) signal.getExperiment();
 
         // Update the time frame
         fTraceTimeRange = fExperiment.getTimeRange();
index 6902bbdc128915aba2e99b846c6a1b4a41840723..480fd4b23bcf5463a372cc93f59b200014fadaa6 100644 (file)
@@ -7,7 +7,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  * 
  * Contributors:
- *   Francois Chouinard (fchouinard@gmail.com) - Initial API and implementation
+ *   Francois Chouinard - Initial API and implementation
  *******************************************************************************/
 
 package org.eclipse.linuxtools.lttng.stubs;
@@ -15,7 +15,7 @@ package org.eclipse.linuxtools.lttng.stubs;
 import java.io.IOException;
 
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
-import org.eclipse.linuxtools.tmf.trace.ITmfEventParser;
+import org.eclipse.linuxtools.tmf.parser.ITmfEventParser;
 import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
 import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
 
@@ -136,4 +136,4 @@ public class LTTngEventParserStub implements ITmfEventParser {
 //        return null;
 //    }
 
-}
+}
\ No newline at end of file
index e9cf908507e4cf1dab3b2fd03689a64c1cd6898e..ebe6b20184007b47432a9a2630a1955601bc6798 100644 (file)
@@ -16,8 +16,9 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.RandomAccessFile;
 
+import org.eclipse.linuxtools.lttng.event.LttngEvent;
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
-import org.eclipse.linuxtools.tmf.trace.ITmfEventParser;
+import org.eclipse.linuxtools.tmf.parser.ITmfEventParser;
 import org.eclipse.linuxtools.tmf.trace.TmfTrace;
 import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
 
@@ -26,7 +27,7 @@ import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
  * <p>
  * Dummy test trace. Use in conjunction with LTTngEventParserStub.
  */
-public class LTTngTraceStub extends TmfTrace {
+public class LTTngTraceStub extends TmfTrace<LttngEvent> {
 
     // ========================================================================
     // Attributes
@@ -58,10 +59,10 @@ public class LTTngTraceStub extends TmfTrace {
      * @throws FileNotFoundException
      */
     public LTTngTraceStub(String filename, int cacheSize) throws FileNotFoundException {
-        super(filename, cacheSize, false);
+        super(LttngEvent.class, filename, cacheSize);
         fTrace = new RandomAccessFile(filename, "r");
        fParser = new LTTngEventParserStub();
-       indexStream();
+       indexTrace(true);
     }
 
     // ========================================================================
@@ -84,10 +85,10 @@ public class LTTngTraceStub extends TmfTrace {
                try {
                        synchronized(fTrace) {
                        fTrace.seek((location != null) ? (Long) location : 0);
-                       context = new TmfTraceContext(getCurrentLocation(), null, 0);
-                       TmfTraceContext context2 = new TmfTraceContext(getCurrentLocation(), null, 0);
-                       TmfEvent event = parseEvent(context2);
-                       context.setTimestamp(event.getTimestamp());
+                       context = new TmfTraceContext(getCurrentLocation(), 0);
+//                     TmfTraceContext context2 = new TmfTraceContext(getCurrentLocation(), 0);
+//                     TmfEvent event = parseEvent(context2);
+//                     context.setTimestamp(event.getTimestamp());
                        }
         } catch (IOException e) {
                // TODO Auto-generated catch block
@@ -149,4 +150,4 @@ public class LTTngTraceStub extends TmfTrace {
 //        return null;
 //    }
 
-}
+}
\ No newline at end of file
index 81a6f2f32ba4939a75306a97f6a09e8b728e7302..0bba58db783760b02b96673929af177e4c537a34 100644 (file)
@@ -134,12 +134,13 @@ public class LttngEvent extends TmfEvent {
         
         // We don't want to send away events that are outdated as their informations could be invalid
         //  If the timestamp between the event and the trace are not coherent we will not perform the conversion
-        if ( jniEventReference.getParentTracefile().getParentTrace().getCurrentEventTimestamp().getTime() == getTimestamp().getValue() ) {
-            tmpEvent = jniEventReference;
-        }
-        else {
-            System.out.println("convertEventTmfToJni() failed: Unsynced Timestamp > TMF:" + getTimestamp().getValue() + " <--> JNI:" + jniEventReference.getParentTracefile().getParentTrace().getCurrentEventTimestamp().getTime());
-        }
+//        if ( jniEventReference.getParentTracefile().getParentTrace().getCurrentEventTimestamp().getTime() == getTimestamp().getValue() ) {
+//            tmpEvent = jniEventReference;
+//        }
+//        else {
+//            System.out.println("convertEventTmfToJni() failed: Unsynced Timestamp > TMF:" + getTimestamp().getValue() + " <--> JNI:" + jniEventReference.getParentTracefile().getParentTrace().getCurrentEventTimestamp().getTime());
+//        }
+        tmpEvent = jniEventReference;
         return tmpEvent;
     }
     
index 92ee00dc3cdb8469ea9305b421382c1cd6861657..96a1e1e5ce73e3953731056ff1b50435397e4d6d 100644 (file)
@@ -14,6 +14,7 @@ package org.eclipse.linuxtools.lttng.event;
 
 import java.util.HashMap;
 
+import org.eclipse.linuxtools.lttng.jni.JniEvent;
 import org.eclipse.linuxtools.tmf.event.TmfEventContent;
 
 /**
@@ -161,7 +162,12 @@ public class LttngEventContent extends TmfEventContent {
         
         for ( int pos=0; pos<tmpType.getNbFields(); pos++ ) {
             String name = tmpType.getLabel(pos);
-            Object newValue = ((LttngEvent)getEvent()).convertEventTmfToJni().parseFieldByName(name);
+//            Object newValue = ((LttngEvent)getEvent()).convertEventTmfToJni().parseFieldByName(name);
+            JniEvent jniEvent = ((LttngEvent)getEvent()).convertEventTmfToJni();
+            if (jniEvent == null) {
+               System.out.println("Bad event.");
+            }
+            Object newValue = (jniEvent != null) ? jniEvent.parseFieldByName(name) : null;
             
             tmpField = new LttngEventField(this, name, newValue );
             fFieldsMap.put(name, tmpField);
@@ -197,7 +203,7 @@ public class LttngEventContent extends TmfEventContent {
      */
     @Override
     public LttngEventField getField(String name) {
-        // *** VERIFY ***
+       // *** VERIFY ***
         // Should we check if the field exists in LttngType before parsing? 
         // It could avoid calling parse for non-existent fields but would waste some cpu cycle on check?
         LttngEventField returnedField = fFieldsMap.get(name);
@@ -205,7 +211,10 @@ public class LttngEventContent extends TmfEventContent {
         if ( returnedField == null ) {
             // *** VERIFY ***
             // Should we really make sure we didn't get null before creating/inserting a field?
-               Object newValue = ((LttngEvent)getEvent()).convertEventTmfToJni().parseFieldByName(name);
+//             Object newValue = ((LttngEvent)getEvent()).convertEventTmfToJni().parseFieldByName(name);
+               LttngEvent lttngEvent = (LttngEvent) getEvent();
+               JniEvent jniEvent = lttngEvent.convertEventTmfToJni();
+               Object newValue = (jniEvent != null) ? jniEvent.parseFieldByName(name) : null;
             
             if ( newValue!= null ) {
                 returnedField = new LttngEventField(this, name, newValue);
index 62eb5be5bfa558fe77ec23440d203219de9095c7..558433db235e803fdec2e542e8003be7e7d8b07e 100644 (file)
@@ -13,11 +13,11 @@ package org.eclipse.linuxtools.lttng.state;
 
 import java.util.Vector;
 
-import org.eclipse.linuxtools.tmf.event.TmfEvent;
+import org.eclipse.linuxtools.lttng.event.LttngEvent;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
-import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
+import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
 import org.eclipse.linuxtools.tmf.signal.TmfSignalManager;
-import org.eclipse.linuxtools.tmf.trace.TmfExperiment;
 
 /**
  * This class is an extension of Data Request which includes specific references
@@ -26,7 +26,8 @@ import org.eclipse.linuxtools.tmf.trace.TmfExperiment;
  * @author alvaro
  * 
  */
-public class StateDataRequest extends TmfDataRequest<TmfEvent> {
+public class StateDataRequest extends TmfEventRequest<LttngEvent> {
+
        // ========================================================================
        // Data
        // =======================================================================
@@ -36,6 +37,7 @@ public class StateDataRequest extends TmfDataRequest<TmfEvent> {
        private long numOfEvents = 0;
        private boolean broadcast = false;
        private boolean clearDataInd = false;
+
        // ========================================================================
        // Constructors
        // =======================================================================
@@ -50,7 +52,7 @@ public class StateDataRequest extends TmfDataRequest<TmfEvent> {
                        int maxBlockSize, IStateDataRequestListener listener,
                        StateManager manager) {
                
-               super(range, nbEvents, maxBlockSize);
+               super(LttngEvent.class, range, nbEvents, maxBlockSize);
                //super(0, nbEvents, maxBlockSize);
                this.manager = manager;
                if (listener != null && !listeners.contains(listener)) {
@@ -87,7 +89,7 @@ public class StateDataRequest extends TmfDataRequest<TmfEvent> {
         * @param broadcast
         *            true: All views, false: only to registered listeners
         */
-       public void startRequestInd(TmfExperiment experiment, boolean broadcast,
+       public void startRequestInd(TmfExperiment<LttngEvent> experiment, boolean broadcast,
                        boolean waitForCompletion) {
                if (broadcast) {
                        // Notify all state views.
@@ -185,4 +187,4 @@ public class StateDataRequest extends TmfDataRequest<TmfEvent> {
        public boolean isclearDataInd() {
                return clearDataInd;
        }
-}
+}
\ No newline at end of file
index bfa4bf25e8adce6dfbb07241e4e79d937c15c245..c8334c3de2b5c79778e5cc6d57add6f455727acd 100644 (file)
@@ -20,6 +20,7 @@ import java.util.Set;
 import java.util.Vector;
 
 import org.eclipse.linuxtools.lttng.TraceDebug;
+import org.eclipse.linuxtools.lttng.event.LttngEvent;
 import org.eclipse.linuxtools.lttng.event.LttngTimestamp;
 import org.eclipse.linuxtools.lttng.state.evProcessor.AbsEventProcessorFactory;
 import org.eclipse.linuxtools.lttng.state.evProcessor.EventProcessorProxy;
@@ -30,8 +31,8 @@ import org.eclipse.linuxtools.lttng.state.model.StateModelFactory;
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
 import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
-import org.eclipse.linuxtools.tmf.trace.TmfExperiment;
 import org.eclipse.linuxtools.tmf.trace.TmfTrace;
 import org.eclipse.linuxtools.tmf.trace.TmfTraceCheckpoint;
 
@@ -51,8 +52,8 @@ public class StateManager extends Observable {
        // ========================================================================
        // Data
        // =======================================================================
-       private TmfExperiment fExperiment = null;
-       private TmfTrace fEventLog = null;
+       private TmfExperiment<LttngEvent> fExperiment = null;
+       private TmfTrace<LttngEvent> fEventLog = null;
        private StateStacksHandler stateIn = null;
        private Long eventCount = 0L;
 
@@ -111,12 +112,13 @@ public class StateManager extends Observable {
         * @param experiment
         * @param clearPreviousData
         */
-       public void setTraceSelection(TmfExperiment experiment,
+       @SuppressWarnings("unchecked")
+       public void setTraceSelection(TmfExperiment<LttngEvent> experiment,
                        boolean clearPreviousData) {
                // New log in use, read all events and build state transition stack
                if (experiment != null) {
                        if (fExperiment != null && fExperiment != experiment) {
-                               this.fExperiment.dispose();
+                               this.fExperiment.deregister();
                        }
 
                        this.fExperiment = experiment;
@@ -125,7 +127,7 @@ public class StateManager extends Observable {
                        // this.fEventLog.dispose();
                        // }
                        
-                       this.fEventLog = (TmfTrace)experiment.getTraces()[0];
+                       this.fEventLog = (TmfTrace<LttngEvent>) experiment.getTraces()[0];
                        try {
                                stateIn.init(fEventLog);
                        } catch (LttngStateException e) {
@@ -216,7 +218,7 @@ public class StateManager extends Observable {
         * 
         * @return
         */
-       public TmfTrace getEventLog() {
+       public TmfTrace<LttngEvent> getEventLog() {
                return fEventLog;
        }
 
@@ -427,7 +429,7 @@ public class StateManager extends Observable {
 
                // Create the new request and override the handlePartialResult function
                StateDataRequest request = new StateDataRequest(timeWindow,
-                               DEFAULT_OFFSET, TmfDataRequest.ALL_EVENTS, DEFAULT_CHUNK,
+                               DEFAULT_OFFSET, TmfDataRequest.ALL_DATA, DEFAULT_CHUNK,
                                listener, this) {
                        @Override
                        public void handleData() {
@@ -471,7 +473,7 @@ public class StateManager extends Observable {
 
                // Create the new request and override the handlePartialResult function
                StateDataRequest request = new StateDataRequest(timeWindow,
-                               DEFAULT_OFFSET, TmfDataRequest.ALL_EVENTS, DEFAULT_CHUNK,
+                               DEFAULT_OFFSET, TmfDataRequest.ALL_DATA, DEFAULT_CHUNK,
                                requestListener, this) {
 
                        @Override
@@ -584,4 +586,4 @@ public class StateManager extends Observable {
                        }
                }
        }
-}
+}
\ No newline at end of file
index 81ad12f298cda448089421cf8e6e642347fa36c2..ce64ab2b5d42b6a6125a90e3c516a6c322d816d2 100644 (file)
@@ -66,6 +66,7 @@ public class StateStacksHandler {
        }
 
 
+//     static int nbEvents = 0;
        protected void processEvent(TmfEvent tmfEvent) /* throws LttngStateException */{
                if (tmfEvent == null) {
                        return;
@@ -74,8 +75,11 @@ public class StateStacksHandler {
                if (!(tmfEvent instanceof LttngEvent)) {
                        TraceDebug
                                        .debug("The event received is not an instance of LttngEvent and can not be processed");
+                       return;
                }
 
+//             System.out.println("Event: " + nbEvents++ + ", timestamp: " + tmfEvent.getTimestamp());
+               
                LttngEvent trcEvent = (LttngEvent) tmfEvent;
 //             LttngEventField[] fields = ((LttngEventContent)trcEvent.getContent()).getFields();
 
@@ -98,7 +102,6 @@ public class StateStacksHandler {
                        // Notify the before Handlers
                        Set<AbsEventProcessorFactory> handlerRegister = EventProcessorProxy
                                        .getInstance().getProcessingFactories();
-
                        // Notify the state BEFORE update handlers
                        for (Iterator<AbsEventProcessorFactory> iterator = handlerRegister
                                        .iterator(); iterator.hasNext();) {
@@ -112,7 +115,7 @@ public class StateStacksHandler {
                                }
 
                        }
-
+                       
                        // Notify the STATE UPDATE handlers
                        // Only one state update expected
                        for (Iterator<AbsEventProcessorFactory> iterator = handlerRegister
index 48292b86b6fa3af03d81382c577e152f4475f774..897005732e583a4dcfa5aceedbf2d6cc808ce1a6 100644 (file)
@@ -165,11 +165,22 @@ class StateUpdateHandlers {
                                LTTngCPUState cpust = traceSt.getCpu_states().get(cpu);
                                cpu_push_mode(cpust, StateStrings.CpuMode.LTTV_CPU_TRAP);
                                cpust.pushToTrapStack(trap); /* update trap status */
-
+                               
                                // update Trap State
-                               LttngTrapState trap_state = traceSt.getTrap_states().get(trap);
-                               trap_state.incrementRunning();
-
+                               LttngTrapState trap_state = null;
+                               trap_state = traceSt.getTrap_states().get(trap);
+                               
+                               // If the trape_state exists, just increment it's counter, 
+                               //      otherwise, create it
+                               if ( trap_state == null ) {
+                                       trap_state = new LttngTrapState();
+                                       trap_state.incrementRunning();
+                                       traceSt.getTrap_states().put(trap, trap_state);
+                               }
+                               else {
+                                       trap_state.incrementRunning();
+                               }
+                               
                                return false;
 
                        }
index 716e22449d672d641d9915d3ae5a04f1f3b32a6f..6c1866bc1b92b8ac29172f5dafecd26f9d41d4ef 100644 (file)
@@ -14,13 +14,14 @@ package org.eclipse.linuxtools.lttng.state.experiment;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.eclipse.linuxtools.lttng.event.LttngEvent;
 import org.eclipse.linuxtools.lttng.state.IStateDataRequestListener;
 import org.eclipse.linuxtools.lttng.state.StateManager;
 import org.eclipse.linuxtools.tmf.component.TmfComponent;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperimentSelectedSignal;
 import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
-import org.eclipse.linuxtools.tmf.trace.TmfExperiment;
-import org.eclipse.linuxtools.tmf.trace.TmfExperimentSelectedSignal;
 
 /**
  * @author alvaro
@@ -33,7 +34,7 @@ public class StateExperimentManager extends TmfComponent {
        // =======================================================================
        
        private final Map<String, StateManager> managersByID = new HashMap<String, StateManager>();
-       private TmfExperiment fExperiment = null; // one experiment supported
+       private TmfExperiment<LttngEvent> fExperiment = null; // one experiment supported
 
        // ========================================================================
        // Constructors
@@ -110,6 +111,7 @@ public class StateExperimentManager extends TmfComponent {
         * org.eclipse.linuxtools.tmf.eventlog.ITmfEventLogEventListener#handleEvent
         * (org.eclipse.linuxtools.tmf.eventlog.ITmfEventLogEvent)
         */
+       @SuppressWarnings("unchecked")
        @TmfSignalHandler
        public void experimentSelected(TmfExperimentSelectedSignal signal) {
                // TmfExperiment experiment = signal.getExperiment();
@@ -118,7 +120,7 @@ public class StateExperimentManager extends TmfComponent {
                //                      
                // }
                if (signal != null) {
-                       fExperiment = signal.getExperiment();
+                       fExperiment = (TmfExperiment<LttngEvent>) signal.getExperiment();
                        traceSelected(fExperiment);
                }
        }
@@ -129,7 +131,7 @@ public class StateExperimentManager extends TmfComponent {
         * 
         * @param experiment
         */
-       private void traceSelected(TmfExperiment experiment) {
+       private void traceSelected(TmfExperiment<LttngEvent> experiment) {
                // TODO: Re-factor when multiple traces are supported
                // traceId, as well as when the request can be specified at the trace
                // level
@@ -154,4 +156,4 @@ public class StateExperimentManager extends TmfComponent {
                return timeRangeResult;
        }
 
-}
+}
\ No newline at end of file
index b196ae4a7bc8e5a524f74cca2e46d83e83cee1ad..0d6a52d8df7fc584fb270a6373525a4b8f5f41cb 100644 (file)
@@ -98,9 +98,9 @@ public class StateManagerFactory {
         */
        public static void dispose() {
                if (experimentManager != null) {
-                       experimentManager.dispose();
+                       experimentManager.deregister();
                        experimentManager = null;
                        instanceBook = null;
                }
        }
-}
+}
\ No newline at end of file
index d1c3394a364ed9a23e2aa8286da2e13885337fa2..c61ec5b8e82e91957d1603f114c79a72f902f59a 100644 (file)
@@ -23,11 +23,16 @@ public class LttngTrapState implements Cloneable {
        // Data
     // =======================================================================
        private Long running;
-
+       
        
     // ========================================================================
     // Constructor
     // =======================================================================
+       
+       public LttngTrapState() {
+               this.running = 0L;
+       }
+       
        public LttngTrapState(Long running) {
                this.running = running;
        }
@@ -72,4 +77,9 @@ public class LttngTrapState implements Cloneable {
                        running--;                      
                }
        }
+       
+       public String toString() {
+               return "running : " + running;
+       }
+       
 }
\ No newline at end of file
index 61612f81c6eb0c0807c77ac5164ab54ee8d15be9..e011f04e576cde565a77078a70e1485d4bd9b4e4 100644 (file)
@@ -15,7 +15,6 @@ package org.eclipse.linuxtools.lttng.trace;
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
-import java.util.Collections;
 import java.util.HashMap;
 
 import org.eclipse.linuxtools.lttng.event.LttngEvent;
@@ -26,16 +25,15 @@ import org.eclipse.linuxtools.lttng.event.LttngEventSource;
 import org.eclipse.linuxtools.lttng.event.LttngEventType;
 import org.eclipse.linuxtools.lttng.event.LttngTimestamp;
 import org.eclipse.linuxtools.lttng.jni.JniEvent;
-import org.eclipse.linuxtools.tmf.event.TmfEvent;
+import org.eclipse.linuxtools.tmf.component.ITmfContext;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
-import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
-import org.eclipse.linuxtools.tmf.request.ITmfRequestHandler;
+import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
 import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
 import org.eclipse.linuxtools.tmf.trace.TmfTrace;
 import org.eclipse.linuxtools.tmf.trace.TmfTraceCheckpoint;
 import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
 
-public class LTTngTextTrace extends TmfTrace implements ITmfTrace, ITmfRequestHandler<TmfEvent> {
+public class LTTngTextTrace extends TmfTrace<LttngEvent> implements ITmfTrace {
        private LttngTimestamp                  eventTimestamp   = null;
     private LttngEventSource                eventSource      = null;
     private LttngEventType                  eventType        = null;
@@ -53,14 +51,14 @@ public class LTTngTextTrace extends TmfTrace implements ITmfTrace, ITmfRequestHa
     
     private int cpuNumber = -1;
     
-    private  boolean showDebug = false;
+    private  boolean showDebug = true;
     
     public LTTngTextTrace(String path) throws Exception {
        this(path, false);
     }
     
     public LTTngTextTrace(String path, boolean skipIndexing) throws Exception {
-        super(path, 1, true);
+        super(LttngEvent.class, path, 1);
         
         tracepath = path;
         traceTypes      = new HashMap<String, LttngEventType>();
@@ -85,13 +83,13 @@ public class LTTngTextTrace extends TmfTrace implements ITmfTrace, ITmfRequestHa
                        fCheckpoints.add(new TmfTraceCheckpoint(new LttngTimestamp(0L), 0L));
                }
                else {
-                       indexStream();
+                       indexTrace(true);
                }
                
                Long endTime = currentLttngEvent.getTimestamp().getValue();
                positionToFirstEvent();
                
-               getNextEvent(new TmfTraceContext(null, null, 0));
+               getNextEvent(new TmfTraceContext(null, 0));
                Long starTime = currentLttngEvent.getTimestamp().getValue();
                positionToFirstEvent();
                
@@ -103,59 +101,10 @@ public class LTTngTextTrace extends TmfTrace implements ITmfTrace, ITmfRequestHa
     
     
     private LTTngTextTrace(LTTngTrace oldStream) throws Exception { 
-       super(null);
+       super(LttngEvent.class, null);
        throw new Exception("Copy constructor should never be use with a LTTngTrace!");
     }
     
-    @Override
-    public void indexStream() {
-       // Position the trace at the beginning
-        TmfTraceContext context = seekLocation(null);
-        
-               long nbEvents=1L;
-               fCheckpoints.add(new TmfTraceCheckpoint(new LttngTimestamp(0L), 0L));
-               
-               LttngTimestamp startTime = null;
-               LttngTimestamp lastTime  = new LttngTimestamp();
-               LttngTimestamp timestamp = null;
-        Long previousCharRead = 0L;
-        
-        TextLttngEvent tmpEvent = (TextLttngEvent)getNextEvent(context);
-        
-        while ( tmpEvent != null) {
-               timestamp = (LttngTimestamp)context.getTimestamp();
-               previousCharRead = nbCharRead;
-               
-               if ( startTime == null ) {
-                       startTime = new LttngTimestamp(timestamp.getValue());
-               }
-               
-               if ((++nbEvents % fCacheSize) == 0) {
-                       fCheckpoints.add(new TmfTraceCheckpoint(new LttngTimestamp(timestamp.getValue()), previousCharRead));
-               }
-               
-               tmpEvent = (TextLttngEvent)getNextEvent(context);
-        }
-        
-        if (timestamp != null) {
-                       lastTime.setValue(timestamp.getValue());
-                               
-                       setTimeRange( new TmfTimeRange(startTime, lastTime) );
-                       notifyListeners(getTimeRange());
-               }
-        
-        fNbEvents = nbEvents;
-        
-        if ( showDebug == true ) {
-               for ( int pos=0; pos < fCheckpoints.size(); pos++) {
-                       System.out.print(pos + ": " + "\t");
-                       System.out.print( fCheckpoints.get(pos).getTimestamp() + "\t" );
-                       System.out.println( fCheckpoints.get(pos).getLocation() );
-               }
-        }
-        
-    }
-    
     private boolean positionToFirstEvent() {
        
        boolean isSuccessful = true;
@@ -185,6 +134,10 @@ public class LTTngTextTrace extends TmfTrace implements ITmfTrace, ITmfRequestHa
     
     private void skipToPosition(Long skipPosition) {
        try {
+                       if ( skipPosition < 0 ) {
+                               skipPosition = 0L;
+                       }
+               
                                if ( showDebug == true ) {
                                        System.out.println("skipToPosition(Long skipPosition)");
                                        System.out.println("\tSkipping to : " + skipPosition);
@@ -201,133 +154,21 @@ public class LTTngTextTrace extends TmfTrace implements ITmfTrace, ITmfRequestHa
     }
     
     public TmfTraceContext seekLocation(Object location) {
+
        if (location == null) {
                location = 0L;
        }
-       
-       TmfTraceContext tmpTraceContext =  new TmfTraceContext(nbCharRead, (LttngTimestamp)currentLttngEvent.getTimestamp(), 0L);
-               Long previousCharRead = nbCharRead;
-        Long previousTimestamp = currentLttngEvent.getTimestamp().getValue();
-       Long tmploc = (Long)location;
-               
-               if ( showDebug == true ) {
-                       System.out.println("seekLocation(Object location)");
-               System.out.println("\ttimestamp: " + (LttngTimestamp)currentLttngEvent.getTimestamp());
-               System.out.println("\tnbCharRead:" + nbCharRead);
-               System.out.println("\tlocation:  " + location);
-               System.out.println();
-       }
-               
-               if ( tmploc < nbCharRead ) {
-                       skipToPosition(tmploc);
-               }
-               
-               if ( tmploc > nbCharRead ) {
-                       while ( tmploc > nbCharRead ) {
-                               previousCharRead = nbCharRead;
-                       previousTimestamp = currentLttngEvent.getTimestamp().getValue();
-                               getNextEvent(tmpTraceContext);
-                       }
-               }
-               
-               tmpTraceContext.setTimestamp(new LttngTimestamp(previousTimestamp));
-               tmpTraceContext.setLocation(previousCharRead);
-       
-       return tmpTraceContext;
-    }
-    
-    
-    @Override
-    public TmfTraceContext seekEvent(TmfTimestamp timestamp) {
 
-       if (timestamp == null) {
-               timestamp = getStartTime();
+       if (!((Long) location).equals(nbCharRead)) {
+               skipToPosition((Long) location);
        }
-        
-       int index = Collections.binarySearch(fCheckpoints, new TmfTraceCheckpoint(timestamp, 0));
-       
-        if (index < 0) {
-            index = 0;
-        }
-        
-        Object location = (index < fCheckpoints.size()) ? fCheckpoints.elementAt(index).getLocation() : null;
-        
-       if ( showDebug == true ) {
-               System.out.println("seekEvent(TmfTimestamp timestamp)");
-               System.out.println("\ttimestamp: " + timestamp.getValue());
-               System.out.println("\tindex:     " + index);
-               System.out.println("\tlocation:  " + location);
-               System.out.println();
-       }
-       
-       // *** HACK ***
-       // We only know the timestamp AFTER we read the actual event
-       // For this reason, we save the current "position" in byte (nbCharRead) and we seek back 1 event after we find our event
-        TmfTraceContext currentEventContext = seekLocation(location);
-        
-        Long previousCharRead = nbCharRead;
-        Long previousTimestamp = currentLttngEvent.getTimestamp().getValue();
-        TmfEvent event = getNextEvent(currentEventContext);
-        
-        while ( (event != null) && (event.getTimestamp().getValue() < timestamp.getValue()) ) {
-               previousCharRead = nbCharRead;
-               previousTimestamp = currentLttngEvent.getTimestamp().getValue();
-               event = getNextEvent(currentEventContext);
-        }
-        
-        if ( event != null ) {
-               skipToPosition(previousCharRead);
-               currentEventContext.setLocation(previousCharRead);
-               currentEventContext.setTimestamp(new LttngTimestamp(previousTimestamp));
-        }
-        
-        return currentEventContext;
-    }
-    
-    @Override
-    public TmfTraceContext seekEvent(long position) {
+
+       TmfTraceContext tmpTraceContext =  new TmfTraceContext(location, 0L);
        
-        int checkPointPos = ((int)position / fCacheSize);
-        
-        Object location;
-        location = ( checkPointPos < fCheckpoints.size()) ? fCheckpoints.elementAt(checkPointPos).getLocation() : null;
-        
-        long index = ((position / fCacheSize)*fCacheSize)-1;
-        
-        if ( index < 0) { 
-               index = 0; 
-        }
-        
-       if ( showDebug == true ) {
-               System.out.println("seekEvent(long position)");
-               System.out.println("\tposition:  " + position);
-               System.out.println("\tindex:     " + index);
-               System.out.println("\tlocation:  " + location);
-               System.out.println();
-       }
-        TmfTraceContext currentEventContext = seekLocation(location);
-        Long previousCharRead = (Long)currentEventContext.getLocation();
-        Long previousTimestamp = currentEventContext.getTimestamp().getValue();
-        
-        TmfEvent event = null;
-        while (index < position) {
-               event = getNextEvent(currentEventContext);
-               previousCharRead = nbCharRead;
-               previousTimestamp = currentLttngEvent.getTimestamp().getValue();
-               index++;
-        }
-        
-        if ( event != null ) {
-               skipToPosition(previousCharRead);
-               currentEventContext.setLocation(previousCharRead);
-               currentEventContext.setTimestamp(new LttngTimestamp(previousTimestamp));
-        }
-        
-        return currentEventContext;
+       return tmpTraceContext;
     }
     
-    @Override
-    public TmfEvent getNextEvent(TmfTraceContext context) {
+     private LttngEvent parseMyNextEvent(TmfTraceContext context) {
        
        // All parsing variables declared here so to be able to print them into the catch if needed
        String tmpContent = null;
@@ -372,14 +213,14 @@ public class LTTngTextTrace extends TmfTrace implements ITmfTrace, ITmfRequestHa
                        
                        // *** HACK ***
                        // Evil exit case here : the two last line of the text dump does not contain "."
-                       // We should check in a better way (string comparaison and such) but it make the whole process to weight a lot more
+                       // We should check in a better way (string comparison and such) but it make the whole process to weight a lot more
                        // Conclusion : this is ugly but fast.
                        if ( tmpCurIndex < 0 ) {
                                if ( showDebug == true ) {
                                        System.out.println("END OF FILE.");
                                        System.out.println();
                                }
-                               return returnedEvent;
+                               return null;
                        }
                        
                        tracefile = tmpContent.substring(tmpPrevIndex, tmpCurIndex ).trim();
@@ -530,9 +371,6 @@ public class LTTngTextTrace extends TmfTrace implements ITmfTrace, ITmfRequestHa
                        currentLttngEvent.setContent(eventContent);
                        currentLttngEvent.setType(traceTypes.get(tmpTypeKey));
                        
-                       context.setTimestamp(eventTimestamp);
-                       context.setLocation(nbCharRead);
-                       
                        returnedEvent = currentLttngEvent;
                }
                else if ( showDebug == true ) {
@@ -560,32 +398,23 @@ public class LTTngTextTrace extends TmfTrace implements ITmfTrace, ITmfRequestHa
        return nbCharRead;
     }
     
-    @Override
+       @Override
        public LttngEvent parseEvent(TmfTraceContext context) {
-               Long location = null;
-               LttngEvent returnedEvent = null;
+               seekLocation(context.getLocation());
+               return parseMyNextEvent(context);
                
-               if ( (currentLttngEvent!= null) && (! currentLttngEvent.getTimestamp().equals(context.getTimestamp()) ) ) {
-                       seekEvent(context.getTimestamp());
-                       getNextEvent(context);
-               }
-               
-               if ( currentLttngEvent != null ) {
-                   returnedEvent = currentLttngEvent;
-               }
-               
-               location = (Long)getCurrentLocation();
-       
-               context.setLocation(location);
-               context.setTimestamp(currentLttngEvent.getTimestamp());
-               context.incrIndex();
-               
-               return returnedEvent;
     }
     
-    public int getCpuNumber() {
+       public int getCpuNumber() {
        return cpuNumber;
     }
+
+       @Override
+       public ITmfContext setContext(TmfDataRequest<LttngEvent> request) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
 }
 
 
@@ -665,4 +494,4 @@ class TextLttngEventContent extends LttngEventContent {
         
         return returnedField;
     }
-}
+}
\ No newline at end of file
index e92be4f86568c66f7060818ed2ff8a08cd860769..61b4e1d7073c2ed222b4a7acd05dcc5f8d4793ae 100644 (file)
@@ -49,7 +49,7 @@ class LTTngTraceException extends LttngException {
  * LTTng trace implementation. It accesses the C trace handling library
  * (seeking, reading and parsing) through the JNI component.
  */
-public class LTTngTrace extends TmfTrace {
+public class LTTngTrace extends TmfTrace<LttngEvent> {
     private final static boolean SHOW_LTT_DEBUG_DEFAULT = false;
        private final static boolean IS_PARSING_NEEDED_DEFAULT = false;
        private final static int     CHECKPOINT_PAGE_SIZE      = 1;
@@ -109,7 +109,7 @@ public class LTTngTrace extends TmfTrace {
      * 
      */
     public LTTngTrace(String path, boolean waitForCompletion, boolean bypassIndexing) throws Exception {
-        super(path, CHECKPOINT_PAGE_SIZE, true);
+        super(LttngEvent.class, path, CHECKPOINT_PAGE_SIZE);
         try {
                currentJniTrace = JniTraceFactory.getJniTrace(path, SHOW_LTT_DEBUG_DEFAULT);
         }
@@ -123,6 +123,9 @@ public class LTTngTrace extends TmfTrace {
                                       )
                     );
         
+        //System.out.println("START :" + currentJniTrace.getStartTime().getTime());
+        //System.out.println("END :" + currentJniTrace.getEndTime().getTime());
+        
         // Export all the event types from the JNI side 
         traceTypes      = new HashMap<String, LttngEventType>();
         traceTypeNames  = new Vector<String>();
@@ -144,7 +147,7 @@ public class LTTngTrace extends TmfTrace {
         
         // Bypass indexing if asked
         if ( bypassIndexing == false ) {
-            indexStream();
+            indexTrace(true);
         }
     }
     
@@ -156,7 +159,7 @@ public class LTTngTrace extends TmfTrace {
      * For this reason, copy constructor should NEVER be used.
      */
     private LTTngTrace(LTTngTrace oldStream) throws Exception { 
-       super(null);
+       super(LttngEvent.class, null);
        throw new Exception("Copy constructor should never be use with a LTTngTrace!");
     }
     
@@ -226,6 +229,7 @@ public class LTTngTrace extends TmfTrace {
                LttngEvent returnedEvent = null;
                
        synchronized (currentJniTrace) {
+               
            // Seek to the context's location
                seekLocation(context.getLocation());
                
@@ -242,8 +246,8 @@ public class LTTngTrace extends TmfTrace {
                timestamp = (LttngTimestamp) getCurrentLocation();
        }
                context.setLocation(timestamp);
-               context.setTimestamp(timestamp);
-               context.incrIndex();
+//             context.setTimestamp(timestamp);
+//             context.incrRank();
                
                return returnedEvent;
     }
@@ -327,14 +331,25 @@ public class LTTngTrace extends TmfTrace {
        // If location is null, interpret this as a request to get back to the beginning of the trace
         //      in that case, just change the location, the seek will happen below
        if (location == null) {
-               location = getStartTime();
+               // *** FIXME ***
+               // Corrupted StartTime in TMF!!! 
+               //location = getStartTime();
+               location = new LttngTimestamp(currentJniTrace.getStartTime().getTime());
        }
 
        if (location instanceof TmfTimestamp) {
                long value = ((TmfTimestamp) location).getValue();
+               
                if (value != currentJniTrace.getCurrentEventTimestamp().getTime()) {
+                       /*
+                       System.out.println("\nLOCATION IS : " + ((TmfTimestamp) location).getValue());
+                       System.out.println("JNI IS : " + currentJniTrace.getCurrentEventTimestamp().getTime());
+                       System.out.println("SEEKING");
+                       */
+                       
                        synchronized (currentJniTrace) {
-                               currentJniTrace.seekToTime(new JniTime(value));
+                               //currentJniTrace.seekToTime(new JniTime(value));
+                               currentJniTrace.seekAndRead(new JniTime(value));
                                timestamp = (LttngTimestamp) getCurrentLocation();
                        }
                }
@@ -343,10 +358,7 @@ public class LTTngTrace extends TmfTrace {
            System.out.println("ERROR : Location not instance of TmfTimestamp");
        }
 
-       // FIXME: LTTng hack - start
-       // return new TmfTraceContext(timestamp, timestamp, 0); // Original
-        return new TmfTraceContext(timestamp, timestamp, -1);  // Hacked
-       // FIXME: LTTng hack - end
+        return new TmfTraceContext(timestamp, 0);      // Original
     }
     
     /**
@@ -456,6 +468,7 @@ public class LTTngTrace extends TmfTrace {
        
        return returnedData;
     }
+
 }
 
 /*
@@ -481,4 +494,4 @@ class EventTypeKey {
         return key;
     }
     
-}
+}
\ No newline at end of file
index 3cd0a7753ec0aaa06c88ac199091d45e3ad388c8..71deded1123004e871eda80352ed9ae8400a1987 100644 (file)
@@ -5,7 +5,7 @@ Bundle-SymbolicName: org.eclipse.linuxtools.tmf.tests
 Bundle-Version: 0.2.0.qualifier
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-Vendor: %Bundle-Vendor
-Require-Bundle: org.junit,
+Require-Bundle: org.junit;bundle-version="3.8.2",
  org.eclipse.linuxtools.tmf;bundle-version="0.2.0",
  org.eclipse.core.runtime;bundle-version="3.5.0"
 Bundle-Localization: plugin
index 1b9e7e2c0c4a56ae4d6ce11cdf69cefff85f0624..cf8ab886fcda36def00e51438ef7a5f0b2473bd6 100644 (file)
@@ -14,23 +14,19 @@ package org.eclipse.linuxtools.tmf.tests.component;
 
 import junit.framework.TestCase;
 
-import org.eclipse.linuxtools.tmf.component.TmfDataProvider;
+import org.eclipse.linuxtools.tmf.component.ITmfContext;
+import org.eclipse.linuxtools.tmf.component.TmfProvider;
 import org.eclipse.linuxtools.tmf.component.TmfProviderManager;
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
-import org.eclipse.linuxtools.tmf.request.ITmfDataRequest;
-import org.eclipse.linuxtools.tmf.trace.ITmfContext;
+import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
 
 /**
  * <b><u>TmfProviderManagerTest</u></b>
  * <p>
- * Test suite for the TmfProviderManager class.
+ * TODO: Implement me. Please.
  */
 public class TmfProviderManagerTest extends TestCase {
 
-       public TmfProviderManagerTest(String name) {
-               super(name);
-       }
-
        @Override
        protected void setUp() throws Exception {
                super.setUp();
@@ -45,12 +41,12 @@ public class TmfProviderManagerTest extends TestCase {
        // Dummy Providers
        // ------------------------------------------------------------------------
        
-       public class TestProvider1 extends TmfDataProvider<TmfEvent> {
+       public class TestProvider1 extends TmfProvider<TmfEvent> {
                public TestProvider1(Class<TmfEvent> type) {
-                       super("TestProvider1", type);
+                       super(type);
                }
                @Override
-               public ITmfContext armRequest(ITmfDataRequest<TmfEvent> request) {
+               public ITmfContext setContext(TmfDataRequest<TmfEvent> request) {
                        return null;
                }
                @Override
@@ -58,17 +54,17 @@ public class TmfProviderManagerTest extends TestCase {
                        return null;
                }
                @Override
-               public boolean isCompleted(ITmfDataRequest<TmfEvent> request, TmfEvent data, int nbRead) {
+               public boolean isCompleted(TmfDataRequest<TmfEvent> request, TmfEvent data) {
                        return false;
                }
        }
 
-       public class TestProvider2 extends TmfDataProvider<TmfEvent> {
+       public class TestProvider2 extends TmfProvider<TmfEvent> {
                public TestProvider2(Class<TmfEvent> type) {
-                       super("TestProvider2", type);
+                       super(type);
                }
                @Override
-               public ITmfContext armRequest(ITmfDataRequest<TmfEvent> request) {
+               public ITmfContext setContext(TmfDataRequest<TmfEvent> request) {
                        return null;
                }
                @Override
@@ -76,7 +72,7 @@ public class TmfProviderManagerTest extends TestCase {
                        return null;
                }
                @Override
-               public boolean isCompleted(ITmfDataRequest<TmfEvent> request, TmfEvent data, int nbRead) {
+               public boolean isCompleted(TmfDataRequest<TmfEvent> request, TmfEvent data) {
                        return false;
                }
        }
@@ -87,12 +83,12 @@ public class TmfProviderManagerTest extends TestCase {
                }
        }
 
-       public class TestProvider3 extends TmfDataProvider<TmfEvent3> {
+       public class TestProvider3 extends TmfProvider<TmfEvent3> {
                public TestProvider3(Class<TmfEvent3> type) {
-                       super("TestProvider3", type);
+                       super(type);
                }
                @Override
-               public ITmfContext armRequest(ITmfDataRequest<TmfEvent3> request) {
+               public ITmfContext setContext(TmfDataRequest<TmfEvent3> request) {
                        return null;
                }
                @Override
@@ -100,22 +96,42 @@ public class TmfProviderManagerTest extends TestCase {
                        return null;
                }
                @Override
-               public boolean isCompleted(ITmfDataRequest<TmfEvent3> request, TmfEvent3 data, int nbRead) {
+               public boolean isCompleted(TmfDataRequest<TmfEvent3> request, TmfEvent3 data) {
                        return false;
                }
        }
 
+//     For multiple data types 
+//     public class TestProvider4 extends TmfProvider<TmfEvent> {
+//             public TestProvider4(Class<TmfEvent> type) {
+//                     super(type);
+//                     TmfProviderManager.register(TmfEvent3.class, this);
+//             }
+//             @Override
+//             public ITmfContext setContext(TmfDataRequest<TmfEvent> request) {
+//                     return null;
+//             }
+//             @Override
+//             public TmfEvent getNext(ITmfContext context) {
+//                     return null;
+//             }
+//             @Override
+//             public boolean isCompleted(TmfDataRequest<TmfEvent> request, TmfEvent data) {
+//                     return false;
+//             }
+//     }
+
        // ------------------------------------------------------------------------
-       // register/dispose
+       // register()
        // ------------------------------------------------------------------------
 
        @SuppressWarnings("unchecked")
        public void testRegister_0() {
-               TmfDataProvider<TmfEvent>[] providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
-               assertEquals("getProviders", 0, providers.length);
+               TmfProvider<TmfEvent>[] providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
+               assertTrue(providers.length == 0);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
-               assertEquals("getProviders", 0, providers.length);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
+               assertTrue(providers.length == 0);
        }
 
        @SuppressWarnings("unchecked")
@@ -124,22 +140,22 @@ public class TmfProviderManagerTest extends TestCase {
                // Register a single provider
                TestProvider1 testProvider1 = new TestProvider1(TmfEvent.class);
 
-               TmfDataProvider<TmfEvent>[] providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
-               assertEquals("getProviders", 1, providers.length);
-               assertEquals("getProviders", testProvider1, providers[0]);
+               TmfProvider<TmfEvent>[] providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
+               assertTrue(providers.length == 1);
+               assertTrue(providers[0] == testProvider1);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
-               assertEquals("getProviders", 1, providers.length);
-               assertEquals("getProviders", testProvider1, providers[0]);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
+               assertTrue(providers.length == 1);
+               assertTrue(providers[0] == testProvider1);
 
                // Unregister it
-               testProvider1.dispose();
+               testProvider1.deregister();
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
-               assertEquals("getProviders", 0, providers.length);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
+               assertTrue(providers.length == 0);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
-               assertEquals("getProviders", 0, providers.length);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
+               assertTrue(providers.length == 0);
        }
 
        @SuppressWarnings("unchecked")
@@ -149,50 +165,49 @@ public class TmfProviderManagerTest extends TestCase {
                TestProvider1 testProvider1 = new TestProvider1(TmfEvent.class);
                TestProvider2 testProvider2 = new TestProvider2(TmfEvent.class);
 
-               TmfDataProvider<TmfEvent>[] providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
-               assertEquals("getProviders", 2, providers.length);
+               TmfProvider<TmfEvent>[] providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
                assertTrue(providers.length == 2);
                if (providers[0] == testProvider1) {
-                       assertEquals("getProviders", testProvider2, providers[1]);
+                       assertTrue(providers[1] == testProvider2);
                }
                else {
-                       assertEquals("getProviders", testProvider2, providers[0]);
-                       assertEquals("getProviders", testProvider1, providers[1]);
+                       assertTrue(providers[1] == testProvider1);
+                       assertTrue(providers[0] == testProvider2);
                }
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
-               assertEquals("getProviders", 1, providers.length);
-               assertEquals("getProviders", testProvider1, providers[0]);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
+               assertTrue(providers.length == 1);
+               assertTrue(providers[0] == testProvider1);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
-               assertEquals("getProviders", 1, providers.length);
-               assertEquals("getProviders", testProvider2, providers[0]);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
+               assertTrue(providers.length == 1);
+               assertTrue(providers[0] == testProvider2);
 
                // Remove one
-               testProvider1.dispose();
+               testProvider1.deregister();
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
-               assertEquals("getProviders", 1, providers.length);
-               assertEquals("getProviders", testProvider2, providers[0]);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
+               assertTrue(providers.length == 1);
+               assertTrue(providers[0] == testProvider2);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
-               assertEquals("getProviders", 0, providers.length);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
+               assertTrue(providers.length == 0);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
-               assertEquals("getProviders", 1, providers.length);
-               assertEquals("getProviders", testProvider2, providers[0]);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
+               assertTrue(providers.length == 1);
+               assertTrue(providers[0] == testProvider2);
 
                // Remove the other
-               testProvider2.dispose();
+               testProvider2.deregister();
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
-               assertEquals("getProviders", 0, providers.length);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
+               assertTrue(providers.length == 0);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
-               assertEquals("getProviders", 0, providers.length);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
+               assertTrue(providers.length == 0);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
-               assertEquals("getProviders", 0, providers.length);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
+               assertTrue(providers.length == 0);
        }
 
        @SuppressWarnings("unchecked")
@@ -203,119 +218,91 @@ public class TmfProviderManagerTest extends TestCase {
                TestProvider2 testProvider2 = new TestProvider2(TmfEvent.class);
                TestProvider3 testProvider3 = new TestProvider3(TmfEvent3.class);
 
-               TmfDataProvider<TmfEvent>[] providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
-               assertEquals("getProviders", 2, providers.length);
+               TmfProvider<TmfEvent>[] providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
+               assertTrue(providers.length == 2);
                if (providers[0] == testProvider1) {
-                       assertEquals("getProviders", testProvider2, providers[1]);
+                       assertTrue(providers[1] == testProvider2);
                }
                else {
-                       assertEquals("getProviders", testProvider2, providers[0]);
-                       assertEquals("getProviders", testProvider1, providers[1]);
+                       assertTrue(providers[1] == testProvider1);
+                       assertTrue(providers[0] == testProvider2);
                }
 
-               TmfDataProvider<TmfEvent3>[] providers3 = (TmfDataProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class);
-               assertEquals("getProviders", 1, providers3.length);
-               assertEquals("getProviders", testProvider3, providers3[0]);
+               TmfProvider<TmfEvent3>[] providers3 = (TmfProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class);
+               assertTrue(providers3.length == 1);
+               assertTrue(providers3[0] == testProvider3);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
-               assertEquals("getProviders", 1, providers.length);
-               assertEquals("getProviders", testProvider1, providers[0]);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
+               assertTrue(providers.length == 1);
+               assertTrue(providers[0] == testProvider1);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
-               assertEquals("getProviders", 1, providers.length);
-               assertEquals("getProviders", testProvider2, providers[0]);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
+               assertTrue(providers.length == 1);
+               assertTrue(providers[0] == testProvider2);
 
-               providers3 = (TmfDataProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class, TestProvider3.class);
-               assertEquals("getProviders", 1, providers3.length);
-               assertEquals("getProviders", testProvider3, providers3[0]);
+               providers3 = (TmfProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class, TestProvider3.class);
+               assertTrue(providers3.length == 1);
+               assertTrue(providers3[0] == testProvider3);
 
                // Remove one
-               testProvider1.dispose();
+               testProvider1.deregister();
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
-               assertEquals("getProviders", 1, providers.length);
-               assertEquals("getProviders", testProvider2, providers[0]);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
+               assertTrue(providers.length == 1);
+               assertTrue(providers[0] == testProvider2);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
-               assertEquals("getProviders", 0, providers.length);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
+               assertTrue(providers.length == 0);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
-               assertEquals("getProviders", 1, providers.length);
-               assertEquals("getProviders", testProvider2, providers[0]);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
+               assertTrue(providers.length == 1);
+               assertTrue(providers[0] == testProvider2);
 
-               providers3 = (TmfDataProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class);
-               assertEquals("getProviders", 1, providers3.length);
-               assertEquals("getProviders", testProvider3, providers3[0]);
+               providers3 = (TmfProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class);
+               assertTrue(providers3.length == 1);
+               assertTrue(providers3[0] == testProvider3);
 
-               providers3 = (TmfDataProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class, TestProvider3.class);
-               assertEquals("getProviders", 1, providers3.length);
-               assertEquals("getProviders", testProvider3, providers3[0]);
+               providers3 = (TmfProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class, TestProvider3.class);
+               assertTrue(providers3.length == 1);
+               assertTrue(providers3[0] == testProvider3);
 
                // Remove another one
-               testProvider2.dispose();
+               testProvider2.deregister();
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
-               assertEquals("getProviders", 0, providers.length);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
+               assertTrue(providers.length == 0);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
-               assertEquals("getProviders", 0, providers.length);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
+               assertTrue(providers.length == 0);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
-               assertEquals("getProviders", 0, providers.length);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
+               assertTrue(providers.length == 0);
 
-               providers3 = (TmfDataProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class);
+               providers3 = (TmfProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class);
                assertTrue(providers3.length == 1);
                assertTrue(providers3[0] == testProvider3);
 
-               providers3 = (TmfDataProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class, TestProvider3.class);
-               assertEquals("getProviders", 1, providers3.length);
-               assertEquals("getProviders", testProvider3, providers3[0]);
+               providers3 = (TmfProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class, TestProvider3.class);
+               assertTrue(providers3.length == 1);
+               assertTrue(providers3[0] == testProvider3);
 
                // Remove the last one
-               testProvider3.dispose();
-
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
-               assertEquals("getProviders", 0, providers.length);
+               testProvider3.deregister();
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
-               assertEquals("getProviders", 0, providers.length);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class);
+               assertTrue(providers.length == 0);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
-               assertEquals("getProviders", 0, providers.length);
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider1.class);
+               assertTrue(providers.length == 0);
 
-               providers3 = (TmfDataProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class);
-               assertEquals("getProviders", 0, providers.length);
-
-               providers3 = (TmfDataProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class, TestProvider3.class);
-               assertEquals("getProviders", 0, providers.length);
-       }
-
-       @SuppressWarnings("unchecked")
-       public void testGetProvider() {
-
-               // Register 3 providers, mixed data types
-               TestProvider1 testProvider1 = new TestProvider1(TmfEvent.class);
-               TestProvider2 testProvider2 = new TestProvider2(TmfEvent.class);
-               TestProvider3 testProvider3 = new TestProvider3(TmfEvent3.class);
-
-               TmfDataProvider<TmfEvent>[] providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, null);
-               assertEquals("getProviders", 2, providers.length);
-               if (providers[0] == testProvider1) {
-                       assertEquals("getProviders", testProvider2, providers[1]);
-               }
-               else {
-                       assertEquals("getProviders", testProvider2, providers[0]);
-                       assertEquals("getProviders", testProvider1, providers[1]);
-               }
+               providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TestProvider2.class);
+               assertTrue(providers.length == 0);
 
-               providers = (TmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent3.class, null);
-               assertEquals("getProviders", 1, providers.length);
-               assertEquals("getProviders", testProvider3, providers[0]);
+               providers3 = (TmfProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class);
+               assertTrue(providers3.length == 0);
 
-               // Remove the providers
-               testProvider1.dispose();
-               testProvider2.dispose();
-               testProvider3.dispose();
+               providers3 = (TmfProvider<TmfEvent3>[]) TmfProviderManager.getProviders(TmfEvent3.class, TestProvider3.class);
+               assertTrue(providers3.length == 0);
        }
 
 }
\ No newline at end of file
index 65f4b1400f77faf26290046ae5eb02201f196838..c00b5d51bfef5bfef7df5b3d00cd6e46a0af5de2 100644 (file)
@@ -11,6 +11,7 @@ public class AllTests {
                TestSuite suite = new TestSuite("Test suite for " + TmfCorePlugin.PLUGIN_ID + ".request"); //$NON-NLS-1$);
                //$JUnit-BEGIN$
                suite.addTestSuite(TmfDataRequestTest.class);
+               suite.addTestSuite(TmfEventRequestTest.class);
                //$JUnit-END$
                return suite;
        }
index a3de1d54ae80363a6b9492591827e8392d95d76f..491a9bda5f4406880165033e21fe4bb2f584b2b2 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -15,8 +15,6 @@ package org.eclipse.linuxtools.tmf.tests.request;
 import junit.framework.TestCase;
 
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
-import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
-import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
 import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
 
 /**
@@ -26,9 +24,9 @@ import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
  */
 public class TmfDataRequestTest extends TestCase {
 
-       // ========================================================================
+       // ------------------------------------------------------------------------
        // Housekeeping
-       // ========================================================================
+       // ------------------------------------------------------------------------
 
        public TmfDataRequestTest(String name) {
                super(name);
@@ -44,59 +42,40 @@ public class TmfDataRequestTest extends TestCase {
                super.tearDown();
        }
 
-       // ========================================================================
+       // ------------------------------------------------------------------------
        // Constructors
-       // ========================================================================
+       // ------------------------------------------------------------------------
 
-       public void testTmfDataRequestIndexNbEvents() {
-        TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(10, 100);
+       public void testTmfDataRequest() {
+        TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(TmfEvent.class);
 
-        assertEquals("getRange",            null, request.getRange());
-        assertEquals("getIndex",              10, request.getIndex());
-        assertEquals("getNbRequestedEvents", 100, request.getNbRequestedEvents());
+        assertEquals("getIndex",             0, request.getIndex());
+        assertEquals("getNbRequestedEvents", TmfDataRequest.ALL_DATA, request.getNbRequested());
         assertEquals("getBlockize", TmfDataRequest.DEFAULT_BLOCK_SIZE, request.getBlockize());
        }
 
-       public void testTmfDataRequestIndexNbEventsBlocksize() {
-        TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(10, 100, 200);
-
-        assertEquals("getRange",            null, request.getRange());
-        assertEquals("getIndex",              10, request.getIndex());
-        assertEquals("getNbRequestedEvents", 100, request.getNbRequestedEvents());
-        assertEquals("getBlockize",          200, request.getBlockize());
-       }
+       public void testTmfDataRequestIndex() {
+        TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(TmfEvent.class, 10);
 
-       public void testTmfDataRequestTimeRange() {
-        TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
-        TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(range);
-
-        assertEquals("StartTime", TmfTimestamp.BigBang,   request.getRange().getStartTime());
-        assertEquals("EndTime",   TmfTimestamp.BigCrunch, request.getRange().getEndTime());
-        assertEquals("getIndex",              0, request.getIndex());
-        assertEquals("getNbRequestedEvents", -1, request.getNbRequestedEvents());
+        assertEquals("getIndex",             10, request.getIndex());
+        assertEquals("getNbRequestedEvents", TmfDataRequest.ALL_DATA, request.getNbRequested());
         assertEquals("getBlockize", TmfDataRequest.DEFAULT_BLOCK_SIZE, request.getBlockize());
        }
 
-       public void testTmfDataRequestTimeRangeNbEvents() {
-        TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
-        TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(range, 10);
+       public void testTmfDataRequestIndexNbRequested() {
+        TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(TmfEvent.class, 10, 100);
 
-        assertEquals("StartTime", TmfTimestamp.BigBang,   request.getRange().getStartTime());
-        assertEquals("EndTime",   TmfTimestamp.BigCrunch, request.getRange().getEndTime());
-        assertEquals("getIndex",              0, request.getIndex());
-        assertEquals("getNbRequestedEvents", 10, request.getNbRequestedEvents());
+        assertEquals("getIndex",              10, request.getIndex());
+        assertEquals("getNbRequestedEvents", 100, request.getNbRequested());
         assertEquals("getBlockize", TmfDataRequest.DEFAULT_BLOCK_SIZE, request.getBlockize());
        }
 
-       public void testTmfDataRequestTimeRangeNbEventsBlockSize() {
-        TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
-        TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(range, 10, 100);
+       public void testTmfDataRequestIndexNbEventsBlocksize() {
+        TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(TmfEvent.class, 10, 100, 200);
 
-        assertEquals("StartTime", TmfTimestamp.BigBang,   request.getRange().getStartTime());
-        assertEquals("EndTime",   TmfTimestamp.BigCrunch, request.getRange().getEndTime());
-        assertEquals("getIndex",              0, request.getIndex());
-        assertEquals("getNbRequestedEvents", 10, request.getNbRequestedEvents());
-        assertEquals("getBlockize",         100, request.getBlockize());
+        assertEquals("getIndex",              10, request.getIndex());
+        assertEquals("getNbRequestedEvents", 100, request.getNbRequested());
+        assertEquals("getBlockize",          200, request.getBlockize());
        }
 
-}
+}
\ No newline at end of file
index 189bd32ad5189337272276e74d0f56db3bf082f9..6116c95c28e93efc68c0351211b70b8b0739ee4a 100644 (file)
@@ -15,38 +15,18 @@ package org.eclipse.linuxtools.tmf.tests.request;
 import junit.framework.TestCase;
 
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
-import org.eclipse.linuxtools.tmf.event.TmfEventReference;
-import org.eclipse.linuxtools.tmf.event.TmfEventSource;
-import org.eclipse.linuxtools.tmf.event.TmfEventType;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
 import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
 import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
-import org.eclipse.linuxtools.tmf.request.TmfEventRequestStub;
 
 /**
  * <b><u>TmfEventRequestTest</u></b>
  * <p>
- * Test suite for the TmfEventRequest class.
+ * TODO: Implement me. Please.
  */
 public class TmfEventRequestTest extends TestCase {
 
-       // ------------------------------------------------------------------------
-       // Variables
-       // ------------------------------------------------------------------------
-
-       private static TmfTimeRange range1 = new TmfTimeRange(TmfTimeRange.Eternity);
-       private static TmfTimeRange range2 = new TmfTimeRange(new TmfTimestamp(), TmfTimestamp.BigCrunch);
-       
-       private static TmfEventRequest<TmfEvent> fRequest1;
-       private static TmfEventRequest<TmfEvent> fRequest1b;
-       private static TmfEventRequest<TmfEvent> fRequest1c;
-       private static TmfEventRequest<TmfEvent> fRequest2;
-       private static TmfEventRequest<TmfEvent> fRequest3;
-       private static TmfEventRequest<TmfEvent> fRequest4;
-
-       private static int fRequestCount;
-       
        // ------------------------------------------------------------------------
        // Housekeeping
        // ------------------------------------------------------------------------
@@ -58,14 +38,6 @@ public class TmfEventRequestTest extends TestCase {
        @Override
        protected void setUp() throws Exception {
                super.setUp();
-               TmfDataRequest.reset();
-               fRequest1  = new TmfEventRequestStub<TmfEvent>(TmfEvent.class, range1, 100, 200);
-               fRequest2  = new TmfEventRequestStub<TmfEvent>(TmfEvent.class, range2, 100, 200);
-               fRequest3  = new TmfEventRequestStub<TmfEvent>(TmfEvent.class, range2, 200, 200);
-               fRequest4  = new TmfEventRequestStub<TmfEvent>(TmfEvent.class, range2, 200, 300);
-               fRequest1b = new TmfEventRequestStub<TmfEvent>(TmfEvent.class, range1, 100, 200);
-               fRequest1c = new TmfEventRequestStub<TmfEvent>(TmfEvent.class, range1, 100, 200);
-               fRequestCount = fRequest1c.getRequestId() + 1;
        }
 
        @Override
@@ -73,265 +45,55 @@ public class TmfEventRequestTest extends TestCase {
                super.tearDown();
        }
 
-       private TmfEventRequest<TmfEvent> setupTestRequest(final boolean[] flags) {
-               
-               TmfEventRequest<TmfEvent> request = new TmfEventRequestStub<TmfEvent>(TmfEvent.class, new TmfTimeRange(TmfTimeRange.Eternity), 100, 200) {
-                   @Override
-                       public void handleCompleted() {
-                       super.handleCompleted();
-                       flags[0] = true;
-                   }
-                   @Override
-                   public void handleSuccess() {
-                       super.handleSuccess();
-                       flags[1] = true;
-                   }
-                   @Override
-                   public void handleFailure() {
-                       super.handleFailure();
-                       flags[2] = true;
-                   }
-                   @Override
-                   public void handleCancel() {
-                       super.handleCancel();
-                       flags[3] = true;
-                   }
-               };
-               return request;
-       }
-       
        // ------------------------------------------------------------------------
        // Constructors
        // ------------------------------------------------------------------------
 
-       public void testTmfEventRequest() {
-        TmfEventRequest<TmfEvent> request = new TmfEventRequestStub<TmfEvent>(TmfEvent.class);
-
-        assertEquals("getRequestId", fRequestCount++, request.getRequestId());
-        assertEquals("getDataType",  TmfEvent.class, request.getDataType());
+       public void testTmfDataRequest() {
+        TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class);
 
         assertEquals("StartTime", TmfTimestamp.BigBang,   request.getRange().getStartTime());
         assertEquals("EndTime",   TmfTimestamp.BigCrunch, request.getRange().getEndTime());
 
-        assertEquals("getIndex", 0, request.getIndex());
+        assertEquals("getIndex",             0, request.getIndex());
         assertEquals("getNbRequestedEvents", TmfDataRequest.ALL_DATA, request.getNbRequested());
         assertEquals("getBlockize", TmfDataRequest.DEFAULT_BLOCK_SIZE, request.getBlockize());
-
-        assertFalse("isCompleted", request.isCompleted());
-        assertFalse("isFailed", request.isFailed());
-        assertFalse("isCancelled", request.isCancelled());
-
-        assertEquals("getNbRead", 0, request.getNbRead());
        }
 
-       public void testTmfEventRequestTimeRange() {
+       public void testTmfDataRequestTimeRange() {
         TmfTimeRange range = new TmfTimeRange(new TmfTimestamp(), TmfTimestamp.BigCrunch);
-        TmfEventRequest<TmfEvent> request = new TmfEventRequestStub<TmfEvent>(TmfEvent.class, range);
+        TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range);
 
-        assertEquals("getRequestId", fRequestCount++, request.getRequestId());
-        assertEquals("getDataType",  TmfEvent.class, request.getDataType());
-
-        assertEquals("StartTime", new TmfTimestamp(), request.getRange().getStartTime());
-        assertEquals("EndTime",   TmfTimestamp.BigCrunch, request.getRange().getEndTime());
+        assertEquals("StartTime", range.getStartTime(), request.getRange().getStartTime());
+        assertEquals("EndTime",   range.getEndTime(),   request.getRange().getEndTime());
 
-        assertEquals("getIndex", 0, request.getIndex());
+        assertEquals("getIndex",             0, request.getIndex());
         assertEquals("getNbRequestedEvents", TmfDataRequest.ALL_DATA, request.getNbRequested());
         assertEquals("getBlockize", TmfDataRequest.DEFAULT_BLOCK_SIZE, request.getBlockize());
-
-        assertFalse("isCompleted", request.isCompleted());
-        assertFalse("isFailed", request.isFailed());
-        assertFalse("isCancelled", request.isCancelled());
-
-        assertEquals("getNbRead", 0, request.getNbRead());
        }
 
-       public void testTmfEventRequestTimeRangeNbRequested() {
+       public void testTmfDataRequestTimeRangeNbRequested() {
         TmfTimeRange range = new TmfTimeRange(new TmfTimestamp(), TmfTimestamp.BigCrunch);
-        TmfEventRequest<TmfEvent> request = new TmfEventRequestStub<TmfEvent>(TmfEvent.class, range, 100);
+        TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, 100);
 
-        assertEquals("getRequestId", fRequestCount++, request.getRequestId());
-        assertEquals("getDataType",  TmfEvent.class, request.getDataType());
+        assertEquals("StartTime", range.getStartTime(), request.getRange().getStartTime());
+        assertEquals("EndTime",   range.getEndTime(),   request.getRange().getEndTime());
 
-        assertEquals("StartTime", new TmfTimestamp(), request.getRange().getStartTime());
-        assertEquals("EndTime",   TmfTimestamp.BigCrunch, request.getRange().getEndTime());
-
-        assertEquals("getIndex", 0, request.getIndex());
+        assertEquals("getIndex",               0, request.getIndex());
         assertEquals("getNbRequestedEvents", 100, request.getNbRequested());
         assertEquals("getBlockize", TmfDataRequest.DEFAULT_BLOCK_SIZE, request.getBlockize());
-
-        assertFalse("isCompleted", request.isCompleted());
-        assertFalse("isFailed", request.isFailed());
-        assertFalse("isCancelled", request.isCancelled());
-
-        assertEquals("getNbRead", 0, request.getNbRead());
        }
 
-       public void testTmfEventRequestTimeRangeNbRequestedBlocksize() {
+       public void testTmfDataRequestTimeRangeNbRequestedBlocksize() {
         TmfTimeRange range = new TmfTimeRange(new TmfTimestamp(), TmfTimestamp.BigCrunch);
-        TmfEventRequest<TmfEvent> request = new TmfEventRequestStub<TmfEvent>(TmfEvent.class, range, 100, 200);
-
-        assertEquals("getRequestId", fRequestCount++, request.getRequestId());
-        assertEquals("getDataType",  TmfEvent.class, request.getDataType());
+        TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, 100, 200);
 
-        assertEquals("StartTime", new TmfTimestamp(), request.getRange().getStartTime());
-        assertEquals("EndTime",   TmfTimestamp.BigCrunch, request.getRange().getEndTime());
+        assertEquals("StartTime", range.getStartTime(), request.getRange().getStartTime());
+        assertEquals("EndTime",   range.getEndTime(),   request.getRange().getEndTime());
 
-        assertEquals("getIndex", 0, request.getIndex());
+        assertEquals("getIndex",               0, request.getIndex());
         assertEquals("getNbRequestedEvents", 100, request.getNbRequested());
-        assertEquals("getBlockize", 200, request.getBlockize());
-
-        assertFalse("isCompleted", request.isCompleted());
-        assertFalse("isFailed", request.isFailed());
-        assertFalse("isCancelled", request.isCancelled());
-
-        assertEquals("getNbRead", 0, request.getNbRead());
-       }
-
-       // ------------------------------------------------------------------------
-       // equals
-       // ------------------------------------------------------------------------
-
-       public void testEqualsReflexivity() throws Exception {
-        assertTrue("equals", fRequest1.equals(fRequest1));
-        assertTrue("equals", fRequest2.equals(fRequest2));
-
-        assertFalse("equals", fRequest1.equals(fRequest2));
-        assertFalse("equals", fRequest2.equals(fRequest1));
-       }
-
-       public void testEqualsSymmetry() throws Exception {
-        assertTrue("equals", fRequest1.equals(fRequest1b));
-        assertTrue("equals", fRequest1b.equals(fRequest1));
-
-        assertFalse("equals", fRequest1.equals(fRequest3));
-        assertFalse("equals", fRequest2.equals(fRequest3));
-        assertFalse("equals", fRequest3.equals(fRequest1));
-        assertFalse("equals", fRequest3.equals(fRequest2));
-       }
-       
-       public void testEqualsTransivity() throws Exception {
-        assertTrue("equals", fRequest1.equals(fRequest1b));
-        assertTrue("equals", fRequest1b.equals(fRequest1c));
-        assertTrue("equals", fRequest1.equals(fRequest1c));
-       }
-       
-       public void testEqualsNull() throws Exception {
-        assertFalse("equals", fRequest1.equals(null));
-        assertFalse("equals", fRequest2.equals(null));
-       }
-
-       // ------------------------------------------------------------------------
-       // hashCode
-       // ------------------------------------------------------------------------
-
-       public void testHashCode() throws Exception {
-        assertTrue("hashCode", fRequest1.hashCode() == fRequest1.hashCode());
-        assertTrue("hashCode", fRequest2.hashCode() == fRequest2.hashCode());
-               assertTrue("hashCode", fRequest1.hashCode() != fRequest2.hashCode());
-       }
-       
-       // ------------------------------------------------------------------------
-       // toString
-       // ------------------------------------------------------------------------
-
-       public void testToString() {
-        String expected1 = "[TmfEventRequest(0,TmfEvent," + range1 + ",100,200)]";
-        String expected2 = "[TmfEventRequest(1,TmfEvent," + range2 + ",100,200)]";
-        String expected3 = "[TmfEventRequest(2,TmfEvent," + range2 + ",200,200)]";
-        String expected4 = "[TmfEventRequest(3,TmfEvent," + range2 + ",200,300)]";
-
-        assertEquals("toString", expected1, fRequest1.toString());
-        assertEquals("toString", expected2, fRequest2.toString());
-        assertEquals("toString", expected3, fRequest3.toString());
-        assertEquals("toString", expected4, fRequest4.toString());
-       }
-
-       // ------------------------------------------------------------------------
-       // setData/getData
-       // ------------------------------------------------------------------------
-
-       public void testSetData() {
-               // Initialize the data
-               int nbEvents = 10;
-               TmfEvent[] events = new TmfEvent[nbEvents];
-               for (int i = 0; i < nbEvents; i++) {
-                       events[i] = new TmfEvent(new TmfTimestamp(i), new TmfEventSource(),
-                                       new TmfEventType(), new TmfEventReference());
-               }
-
-               fRequest1.setData(events);
-               assertEquals("setData", nbEvents, fRequest1.getNbRead());
-
-               TmfEvent[] eventsRead = fRequest1.getData();
-               assertEquals("getData", nbEvents, eventsRead.length);
-
-               for (int i = 0; i < nbEvents; i++) {
-                       assertEquals("getData", i, eventsRead[i].getTimestamp().getValue());
-               }
-       }
-
-       // ------------------------------------------------------------------------
-       // done
-       // ------------------------------------------------------------------------
-
-       public void testDone() {
-               
-               final boolean[] flags = new boolean[4];
-               TmfEventRequest<TmfEvent> request = setupTestRequest(flags);
-               request.done();
-
-               assertTrue ("isCompleted", request.isCompleted());
-               assertFalse("isFailed",    request.isFailed());
-               assertFalse("isCancelled", request.isCancelled());
-
-               assertTrue ("handleCompleted", flags[0]);
-               assertTrue ("handleSuccess",   flags[1]);
-               assertFalse("handleFailure",   flags[2]);
-               assertFalse("handleCancel",    flags[3]);
+        assertEquals("getBlockize",          200, request.getBlockize());
        }
 
-       // ------------------------------------------------------------------------
-       // fail
-       // ------------------------------------------------------------------------
-
-       public void testFail() {
-               
-               final boolean[] flags = new boolean[4];
-               TmfEventRequest<TmfEvent> request = setupTestRequest(flags);
-               request.fail();
-
-               assertTrue ("isCompleted", request.isCompleted());
-               assertTrue ("isFailed",    request.isFailed());
-               assertFalse("isCancelled", request.isCancelled());
-
-               assertTrue ("handleCompleted", flags[0]);
-               assertFalse("handleSuccess",   flags[1]);
-               assertTrue ("handleFailure",   flags[2]);
-               assertFalse("handleCancel",    flags[3]);
-       }
-
-       // ------------------------------------------------------------------------
-       // cancel
-       // ------------------------------------------------------------------------
-
-       public void testCancel() {
-
-               final boolean[] flags = new boolean[4];
-               TmfEventRequest<TmfEvent> request = setupTestRequest(flags);
-               request.cancel();
-
-               assertTrue ("isCompleted", request.isCompleted());
-               assertFalse("isFailed",    request.isFailed());
-               assertTrue ("isCancelled", request.isCancelled());
-
-               assertTrue ("handleCompleted", flags[0]);
-               assertFalse("handleSuccess",   flags[1]);
-               assertFalse("handleFailure",   flags[2]);
-               assertTrue ("handleCancel",    flags[3]);
-       }
-
-       // ------------------------------------------------------------------------
-       // waitForCompletion
-       // ------------------------------------------------------------------------
-
 }
\ No newline at end of file
index 68d0387669db7a3810435ffcd99af519ba9a6c8f..f67f69f1b11f86ada3b324a438eda05751f20716 100644 (file)
@@ -11,9 +11,9 @@ public class AllTests {
                TestSuite suite = new TestSuite("Test suite for " + TmfCorePlugin.PLUGIN_ID + ".trace"); //$NON-NLS-1$);
                //$JUnit-BEGIN$
                suite.addTestSuite(TmfTraceTest.class);
-//             suite.addTestSuite(TmfExperimentTest.class);
+               suite.addTestSuite(TmfExperimentTest.class);
                //$JUnit-END$
                return suite;
        }
 
-}
+}
\ No newline at end of file
index 6b7508c1637876ab9218379330d3ee8f9165e6f4..cf2782486b6d69cae0e06e0b505281676abfb3ed 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
 package org.eclipse.linuxtools.tmf.tests.trace;
 
 import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
 import java.util.Vector;
 
+import junit.framework.TestCase;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
-import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
+import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
+import org.eclipse.linuxtools.tmf.tests.TmfCoreTestPlugin;
 import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
-import org.eclipse.linuxtools.tmf.trace.TmfExperiment;
 import org.eclipse.linuxtools.tmf.trace.TmfTraceStub;
 
-import junit.framework.TestCase;
-
 /**
  * <b><u>TmfExperimentTest</u></b>
  * <p>
@@ -35,29 +41,48 @@ public class TmfExperimentTest extends TestCase {
     private static final String DIRECTORY   = "testfiles";
     private static final String TEST_STREAM = "M-Test-10K";
     private static final String EXPERIMENT  = "MyExperiment";
-    private static String testfile;
-    private static int NB_EVENTS = 10000;
-    private static int fDefaultBlockSize = 1000;
+    private static int          NB_EVENTS   = 10000;
+    private static int    fDefaultBlockSize = 1000;
 
-    private static ITmfTrace fStream;
-    private static TmfExperiment fExperiment;
+    private static ITmfTrace fTrace;
+    private static TmfExperiment<TmfEvent> fExperiment;
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Housekeeping
-    // ========================================================================
+    // ------------------------------------------------------------------------
+
+    private ITmfTrace setupTrace(String path) {
+       if (fTrace == null) {
+               try {
+               URL location = FileLocator.find(TmfCoreTestPlugin.getPlugin().getBundle(), new Path(path), null);
+                       File test = new File(FileLocator.toFileURL(location).toURI());
+                       TmfTraceStub trace = new TmfTraceStub(test.getPath(), true);
+                       fTrace = trace;
+               } catch (URISyntaxException e) {
+                       e.printStackTrace();
+               } catch (IOException e) {
+                       e.printStackTrace();
+               }
+       }
+       return fTrace;
+    }
+
+    private void setupExperiment() {
+       if (fExperiment == null) {
+            fExperiment = new TmfExperiment<TmfEvent>(TmfEvent.class, EXPERIMENT, new ITmfTrace[] { fTrace });
+            fExperiment.indexExperiment(true);
+       }
+    }
 
        public TmfExperimentTest(String name) throws Exception {
                super(name);
-       String directory = new File(".").getCanonicalPath() + File.separator + DIRECTORY;
-       testfile = directory + File.separator + TEST_STREAM;
-
-               fStream = new TmfTraceStub(testfile);
-        fExperiment = new TmfExperiment(EXPERIMENT, new ITmfTrace[] { fStream }, true);
        }
 
        @Override
        protected void setUp() throws Exception {
                super.setUp();
+               setupTrace(DIRECTORY + File.separator + TEST_STREAM);
+               setupExperiment();
        }
 
        @Override
@@ -65,31 +90,31 @@ public class TmfExperimentTest extends TestCase {
                super.tearDown();
        }
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Constructor
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
        public void testBasicTmfTrace() {
                assertEquals("GetId", EXPERIMENT, fExperiment.getExperimentId());
-        assertEquals("GetEpoch", TmfTimestamp.BigBang, fExperiment.getEpoch());
+        assertEquals("GetEpoch", TmfTimestamp.Zero, fExperiment.getEpoch());
         assertEquals("GetNbEvents", NB_EVENTS, fExperiment.getNbEvents());
 
         TmfTimeRange timeRange = fExperiment.getTimeRange();
-        assertEquals("GetTimeRange-start", 1, timeRange.getStartTime().getValue());
-        assertEquals("GetTimeRange-end", NB_EVENTS, timeRange.getEndTime().getValue());
+        assertEquals("getStartTime", 1, timeRange.getStartTime().getValue());
+        assertEquals("getEndTime", NB_EVENTS, timeRange.getEndTime().getValue());
        }
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // processRequest
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     public void testProcessRequestForNbEvents() throws Exception {
         final int blockSize = 100;
-        final int nbEvents = 1000;
+        final int nbEvents  = 1000;
         final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>();
 
         TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
-        final TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(range, nbEvents, blockSize) {
+        final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, nbEvents, blockSize) {
             @Override
             public void handleData() {
                TmfEvent[] events = getData();
@@ -117,7 +142,7 @@ public class TmfExperimentTest extends TestCase {
         final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>();
 
         TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
-        final TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(range, nbEvents, blockSize) {
+        final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, nbEvents, blockSize) {
             @Override
             public void handleData() {
                TmfEvent[] events = getData();
@@ -140,13 +165,13 @@ public class TmfExperimentTest extends TestCase {
     }
     
     public void testProcessRequestForAllEvents() throws Exception {
-        final int nbEvents  = -1;
+        final int nbEvents  = TmfEventRequest.ALL_DATA;
         final int blockSize =  1;
         final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>();
         int nbExpectedEvents = fExperiment.getNbEvents();
 
         TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
-        final TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(range, nbEvents, blockSize) {
+        final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, nbEvents, blockSize) {
             @Override
             public void handleData() {
                TmfEvent[] events = getData();
@@ -168,9 +193,9 @@ public class TmfExperimentTest extends TestCase {
         }
     }
     
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // cancel
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     public void testCancel() throws Exception {
         final int nbEvents  = NB_EVENTS;
@@ -178,7 +203,7 @@ public class TmfExperimentTest extends TestCase {
         final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>();
 
         TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
-        final TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(range, nbEvents, blockSize) {
+        final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, nbEvents, blockSize) {
             @Override
             public void handleData() {
                TmfEvent[] events = getData();
@@ -195,4 +220,17 @@ public class TmfExperimentTest extends TestCase {
         assertTrue("isCompleted", request.isCompleted());
         assertTrue("isCancelled", request.isCancelled());
     }
-}
+    
+    // ------------------------------------------------------------------------
+    // getRank
+    // ------------------------------------------------------------------------
+
+    public void testGetRank() throws Exception {
+        assertEquals("getRank",    0, fExperiment.getRank(new TmfTimestamp()));
+        assertEquals("getRank",    0, fExperiment.getRank(new TmfTimestamp(   1, (byte) -3)));
+        assertEquals("getRank",   10, fExperiment.getRank(new TmfTimestamp(  11, (byte) -3)));
+        assertEquals("getRank",  100, fExperiment.getRank(new TmfTimestamp( 101, (byte) -3)));
+        assertEquals("getRank", 1000, fExperiment.getRank(new TmfTimestamp(1001, (byte) -3)));
+    }
+
+}
\ No newline at end of file
index 118be7ee3cb1506fd53753ca7392ea51dc9b2248..e18cad56a1b3228c0e3706a53d17ef713ced71ff 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -22,10 +22,12 @@ import junit.framework.TestCase;
 
 import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.linuxtools.tmf.component.TmfProvider;
+import org.eclipse.linuxtools.tmf.component.TmfProviderManager;
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
-import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
+import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
 import org.eclipse.linuxtools.tmf.tests.TmfCoreTestPlugin;
 import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
 import org.eclipse.linuxtools.tmf.trace.TmfTraceStub;
@@ -39,14 +41,14 @@ public class TmfTraceTest extends TestCase {
 
     private static final String DIRECTORY   = "testfiles";
     private static final String TEST_STREAM = "M-Test-10K";
-    private static final int NB_EVENTS = 10000;
-    private static TmfTraceStub fTrace  null;
+    private static final int    NB_EVENTS   = 10000;
+    private static TmfTraceStub fTrace      = null;
 
     private static byte SCALE = (byte) -3;
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Housekeeping
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     private TmfTraceStub setupTrace(String path) {
        if (fTrace == null) {
@@ -79,9 +81,9 @@ public class TmfTraceTest extends TestCase {
                super.tearDown();
        }
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Constructors
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     public void testTmfTraceDefault() throws Exception {
                TmfTraceStub trace = null;
@@ -94,55 +96,63 @@ public class TmfTraceTest extends TestCase {
                } catch (IOException e) {
                        e.printStackTrace();
                }
-               assertTrue("Oen Trace", trace != null);
-
+               assertTrue("Opened trace",   trace != null);
                assertEquals("getCacheSize", TmfTraceStub.DEFAULT_CACHE_SIZE, trace.getCacheSize());
-        assertEquals("getTraceSize",   0, trace.getNbEvents());
-        assertEquals("getRange-start", 0, trace.getTimeRange().getStartTime().getValue());
-        assertEquals("getRange-end",   0, trace.getTimeRange().getEndTime().getValue());
+        assertEquals("getTraceSize", NB_EVENTS, trace.getNbEvents());
     }
 
     public void testTmfTrace() throws Exception {
-        assertEquals("getCacheSize", 500, fTrace.getCacheSize());
-        assertEquals("getTraceSize",   0, fTrace.getNbEvents());
-        assertEquals("getRange-start", 0, fTrace.getTimeRange().getStartTime().getValue());
-        assertEquals("getRange-end",   0, fTrace.getTimeRange().getEndTime().getValue());
+        assertEquals("getCacheSize",   500, fTrace.getCacheSize());
+        assertEquals("getTraceSize",   NB_EVENTS, fTrace.getNbEvents());
+        assertEquals("getRange-start", 1, fTrace.getTimeRange().getStartTime().getValue());
+        assertEquals("getRange-end",   NB_EVENTS, fTrace.getTimeRange().getEndTime().getValue());
     }
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // seek
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     public void testSeekOnCacheBoundary() throws Exception {
        TmfTraceContext context = fTrace.seekLocation(null);
 
-       context = fTrace.seekEvent(new TmfTimestamp(0, SCALE, 0));
+       context = fTrace.seekEvent(new TmfTimestamp(1, SCALE, 0));
        TmfEvent event = fTrace.getNextEvent(context);
         assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
+        assertEquals("Event rank", 1, context.getRank());
 
-       context = fTrace.seekEvent(new TmfTimestamp(1000, SCALE, 0));
+       context = fTrace.seekEvent(new TmfTimestamp(1001, SCALE, 0));
         event = fTrace.getNextEvent(context);
-        assertEquals("Event timestamp", 1000, event.getTimestamp().getValue());
+        assertEquals("Event timestamp", 1001, event.getTimestamp().getValue());
+        assertEquals("Event rank", 1001, context.getRank());
 
-       context = fTrace.seekEvent(new TmfTimestamp(4000, SCALE, 0));
+       context = fTrace.seekEvent(new TmfTimestamp(4001, SCALE, 0));
         event = fTrace.getNextEvent(context);
-        assertEquals("Event timestamp", 4000, event.getTimestamp().getValue());
+        assertEquals("Event timestamp", 4001, event.getTimestamp().getValue());
+        assertEquals("Event rank", 4001, context.getRank());
     }
 
     public void testSeekNotOnCacheBoundary() throws Exception {
        TmfTraceContext context = fTrace.seekLocation(null);
 
-       context = fTrace.seekEvent(new TmfTimestamp(1, SCALE, 0));
+       context = fTrace.seekEvent(new TmfTimestamp(10, SCALE, 0));
        TmfEvent event = fTrace.getNextEvent(context);
-        assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
+        assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
+        assertEquals("Event rank", 10, context.getRank());
 
        context = fTrace.seekEvent(new TmfTimestamp(999, SCALE, 0));
         event = fTrace.getNextEvent(context);
         assertEquals("Event timestamp", 999, event.getTimestamp().getValue());
+        assertEquals("Event rank", 999, context.getRank());
+
+       context = fTrace.seekEvent(new TmfTimestamp(1001, SCALE, 0));
+        event = fTrace.getNextEvent(context);
+        assertEquals("Event timestamp", 1001, event.getTimestamp().getValue());
+        assertEquals("Event rank", 1001, context.getRank());
 
        context = fTrace.seekEvent(new TmfTimestamp(4499, SCALE, 0));
         event = fTrace.getNextEvent(context);
         assertEquals("Event timestamp", 4499, event.getTimestamp().getValue());
+        assertEquals("Event rank", 4499, context.getRank());
     }
 
     public void testSeekForEventOutOfBounds() throws Exception {
@@ -159,9 +169,28 @@ public class TmfTraceTest extends TestCase {
         assertEquals("Event timestamp", null, event);
     }
 
-    // ========================================================================
+    public void testSeekOnIndex() throws Exception {
+       TmfTraceContext context = fTrace.seekLocation(null);
+
+       // On lower bound, returns the first event (ts = 1)
+       context = fTrace.seekEvent(0);
+        TmfEvent event = fTrace.getNextEvent(context);
+        assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
+
+        // On higher bound
+       context = fTrace.seekEvent(NB_EVENTS - 1);
+        event = fTrace.getNextEvent(context);
+        assertEquals("Event timestamp", NB_EVENTS, event.getTimestamp().getValue());
+
+        // Above high bound
+       context = fTrace.seekEvent(NB_EVENTS);
+        event = fTrace.getNextEvent(context);
+        assertEquals("Event", null, event);
+    }
+
+    // ------------------------------------------------------------------------
     // getNextEvent
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     public void testGetNextEvent() throws Exception {
        TmfTraceContext context = fTrace.seekLocation(null);
@@ -177,17 +206,18 @@ public class TmfTraceTest extends TestCase {
         }
     }
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // processRequest
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
-    public void testProcessRequestForNbEvents() throws Exception {
+    @SuppressWarnings("unchecked")
+       public void testProcessRequestForNbEvents() throws Exception {
         final int BLOCK_SIZE = 100;
         final int NB_EVENTS  = 1000;
         final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>();
 
         TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
-        final TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(range, NB_EVENTS, BLOCK_SIZE) {
+        final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, NB_EVENTS, BLOCK_SIZE) {
             @Override
             public void handleData() {
                TmfEvent[] events = getData();
@@ -196,7 +226,8 @@ public class TmfTraceTest extends TestCase {
                 }
             }
         };
-        fTrace.processRequest(request, true);
+        TmfProvider<TmfEvent>[] providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TmfTraceStub.class);
+        providers[0].processRequest(request, true);
 
         assertEquals("nbEvents", NB_EVENTS, requestedEvents.size());
         assertTrue("isCompleted",  request.isCompleted());
@@ -209,13 +240,14 @@ public class TmfTraceTest extends TestCase {
         }
     }
     
-    public void testProcessRequestForAllEvents() throws Exception {
+    @SuppressWarnings("unchecked")
+       public void testProcessRequestForAllEvents() throws Exception {
         final int BLOCK_SIZE =  1;
         final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>();
 //        long nbExpectedEvents = NB_EVENTS;
 
         TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
-        final TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(range, NB_EVENTS, BLOCK_SIZE) {
+        final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, NB_EVENTS, BLOCK_SIZE) {
             @Override
             public void handleData() {
                TmfEvent[] events = getData();
@@ -224,7 +256,8 @@ public class TmfTraceTest extends TestCase {
                 }
             }
         };
-        fTrace.processRequest(request, true);
+        TmfProvider<TmfEvent>[] providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TmfTraceStub.class);
+        providers[0].processRequest(request, true);
 
         assertEquals("nbEvents", NB_EVENTS, requestedEvents.size());
         assertTrue("isCompleted",  request.isCompleted());
@@ -237,15 +270,16 @@ public class TmfTraceTest extends TestCase {
         }
     }
     
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // cancel
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
-    public void testCancel() throws Exception {
+    @SuppressWarnings("unchecked")
+       public void testCancel() throws Exception {
         final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>();
 
         TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
-        final TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(range, NB_EVENTS, NB_EVENTS) {
+        final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, NB_EVENTS, NB_EVENTS) {
             @Override
             public void handleData() {
                TmfEvent[] events = getData();
@@ -256,10 +290,12 @@ public class TmfTraceTest extends TestCase {
                 cancel();
             }
         };
-        fTrace.processRequest(request, true);
+        TmfProvider<TmfEvent>[] providers = (TmfProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TmfTraceStub.class);
+        providers[0].processRequest(request, true);
 
         assertEquals("nbEvents",  NB_EVENTS, requestedEvents.size());
         assertTrue("isCompleted", request.isCompleted());
         assertTrue("isCancelled", request.isCancelled());
     }
-}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.linuxtools.tmf.tests/stubs/org/eclipse/linuxtools/tmf/component/TmfProviderStub.java b/org.eclipse.linuxtools.tmf.tests/stubs/org/eclipse/linuxtools/tmf/component/TmfProviderStub.java
new file mode 100644 (file)
index 0000000..b0131cd
--- /dev/null
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.component;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.linuxtools.tmf.event.TmfEvent;
+import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
+import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
+import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
+import org.eclipse.linuxtools.tmf.tests.TmfCoreTestPlugin;
+import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
+import org.eclipse.linuxtools.tmf.trace.TmfTraceStub;
+
+/**
+ * <b><u>TmfProviderStub</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class TmfProviderStub extends TmfProvider<TmfEvent> {
+
+    private TmfTraceStub fTrace;
+
+    public TmfProviderStub(String path) throws IOException {
+       super(TmfEvent.class);
+        URL location = FileLocator.find(TmfCoreTestPlugin.getPlugin().getBundle(), new Path(path), null);
+               try {
+                       File test = new File(FileLocator.toFileURL(location).toURI());
+                       fTrace = new TmfTraceStub(test.getPath(), true);
+               } catch (URISyntaxException e) {
+                       e.printStackTrace();
+               }
+    }
+
+       @Override
+       public ITmfContext setContext(TmfDataRequest<TmfEvent> request) {
+               if (request instanceof TmfEventRequest<?>) {
+                       TmfTraceContext context = fTrace.seekEvent(((TmfEventRequest<?>) request).getRange().getStartTime());
+                       return context;
+               }
+               return null;
+       }
+
+       @Override
+       public TmfEvent getNext(ITmfContext context) {
+               return fTrace.getNext(context);
+       }
+
+       @Override
+       public boolean isCompleted(TmfDataRequest<TmfEvent> request, TmfEvent event) {
+               TmfTimestamp endTime = ((TmfEventRequest<?>) request).getRange().getEndTime();
+               return event.getTimestamp().compareTo(endTime, false) <= 0;
+       }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.linuxtools.tmf.tests/stubs/org/eclipse/linuxtools/tmf/request/TmfRequestHandlerStub.java b/org.eclipse.linuxtools.tmf.tests/stubs/org/eclipse/linuxtools/tmf/request/TmfRequestHandlerStub.java
deleted file mode 100644 (file)
index 2d56c1f..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 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:
- *   Francois Chouinard - Initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.linuxtools.tmf.request;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Vector;
-
-import org.eclipse.linuxtools.tmf.event.TmfEvent;
-import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
-import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
-import org.eclipse.linuxtools.tmf.trace.TmfTraceStub;
-
-/**
- * <b><u>TmfRequestHandlerStub</u></b>
- * <p>
- * TODO: Implement me. Please.
- */
-public class TmfRequestHandlerStub implements ITmfRequestHandler<TmfEvent> {
-
-    // The test file
-    private static final String TEST_STREAM = "M-Test-100K";
-
-    // A constant to limit the number of events for the tests
-    public static final int MAX_GENERATED_EVENTS = 1000;
-
-    private TmfTraceStub fTrace;
-
-    public TmfRequestHandlerStub() throws IOException {
-       String directory = new File(".").getCanonicalPath() + File.separator + "testfiles";
-       String filename  = directory + File.separator + TEST_STREAM;
-        fTrace = new TmfTraceStub(filename);
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.linuxtools.tmf.eventlog.ITmfRequestHandler#processRequest(org.eclipse.linuxtools.tmf.eventlog.TmfEventRequest, boolean)
-     */
-    public void processRequest(final TmfDataRequest<TmfEvent> request, boolean waitForCompletion) {
-
-        Thread thread = new Thread() {
-            @Override
-            public void run() {
-                TmfTimestamp startTime = request.getRange().getStartTime();
-                TmfTimestamp endTime   = request.getRange().getEndTime();
-                int blockSize = request.getBlockize();
-
-                int nbRequestedEvents = request.getNbRequestedEvents();
-                if (nbRequestedEvents <= 0) {
-                    nbRequestedEvents = MAX_GENERATED_EVENTS;
-                }
-
-                Vector<TmfEvent> events = new Vector<TmfEvent>();
-                int nbEvents = 0;
-               TmfTraceContext context = fTrace.seekEvent(startTime);
-                TmfEvent event = fTrace.getNextEvent(context);
-                while (!request.isCancelled() && nbEvents < nbRequestedEvents &&
-                       event != null && event.getTimestamp().compareTo(endTime, false) <= 0 )
-                {
-                    events.add(event);
-                    if (++nbEvents % blockSize == 0) {
-                       TmfEvent[] result = new TmfEvent[events.size()];
-                       events.toArray(result);
-                       request.setData(result);
-                        request.handleData();
-                        events.removeAllElements();
-                    }
-                    event = fTrace.getNextEvent(context);
-                }
-               TmfEvent[] result = new TmfEvent[events.size()];
-               events.toArray(result);
-
-               request.setData(result);
-                request.handleData();
-                request.done();
-            }
-        };
-        thread.start();
-
-        if (waitForCompletion) {
-            request.waitForCompletion();
-        }
-    }
-
-}
index 0196766d3fd761862302107f1691264b5de6364c..0370b5bcdb2b3e9ba90357513cf86baa0a204883 100644 (file)
@@ -23,6 +23,7 @@ import org.eclipse.linuxtools.tmf.event.TmfEventReference;
 import org.eclipse.linuxtools.tmf.event.TmfEventSource;
 import org.eclipse.linuxtools.tmf.event.TmfEventType;
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
+import org.eclipse.linuxtools.tmf.parser.ITmfEventParser;
 
 /**
  * <b><u>TmfEventParserStub</u></b>
@@ -31,16 +32,16 @@ import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
  */
 public class TmfEventParserStub implements ITmfEventParser {
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Attributes
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
        private final int NB_TYPES = 10;
     private final TmfEventType[] fTypes;
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Constructors
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     public TmfEventParserStub() {
        fTypes = new TmfEventType[NB_TYPES];
@@ -54,9 +55,9 @@ public class TmfEventParserStub implements ITmfEventParser {
        }
     }
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Operators
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     static final String typePrefix = "Type-";
     public TmfEvent parseNextEvent(ITmfTrace eventStream, TmfTraceContext context) throws IOException {
@@ -88,10 +89,6 @@ public class TmfEventParserStub implements ITmfEventParser {
                                fields[i] = stream.readUTF();
                        }
 
-                       // Update the context
-                       context.setLocation(stream.getFilePointer());
-                       context.incrIndex();
-
                        String content = "[";
                        if (typeIndex > 0) {
                                content += fields[0];
@@ -115,4 +112,4 @@ public class TmfEventParserStub implements ITmfEventParser {
         return null;
     }
 
-}
+}
\ No newline at end of file
index 3ec8f15af0d5f231932e7e9a9fec0981691902a1..f391fea8ddb3162c594fe65462763edde7225f2e 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -17,17 +17,18 @@ import java.io.IOException;
 import java.io.RandomAccessFile;
 
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
+import org.eclipse.linuxtools.tmf.parser.ITmfEventParser;
 
 /**
  * <b><u>TmfTraceStub</u></b>
  * <p>
  * Dummy test trace. Use in conjunction with TmfEventParserStub.
  */
-public class TmfTraceStub extends TmfTrace {
+public class TmfTraceStub extends TmfTrace<TmfEvent> {
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Attributes
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     // The actual stream
     private final RandomAccessFile fTrace;
@@ -35,9 +36,9 @@ public class TmfTraceStub extends TmfTrace {
     // The associated event parser
     private final ITmfEventParser fParser;
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Constructors
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     /**
      * @param filename
@@ -49,19 +50,19 @@ public class TmfTraceStub extends TmfTrace {
 
     /**
      * @param filename
+     * @param cacheSize
      * @throws FileNotFoundException
      */
-    public TmfTraceStub(String filename, boolean waitForCompletion) throws FileNotFoundException {
-        this(filename, DEFAULT_CACHE_SIZE, waitForCompletion);
+    public TmfTraceStub(String filename, int cacheSize) throws FileNotFoundException {
+        this(filename, cacheSize, false);
     }
 
     /**
      * @param filename
-     * @param cacheSize
      * @throws FileNotFoundException
      */
-    public TmfTraceStub(String filename, int cacheSize) throws FileNotFoundException {
-        this(filename, cacheSize, false);
+    public TmfTraceStub(String filename, boolean waitForCompletion) throws FileNotFoundException {
+        this(filename, DEFAULT_CACHE_SIZE, waitForCompletion);
     }
 
     /**
@@ -70,39 +71,40 @@ public class TmfTraceStub extends TmfTrace {
      * @throws FileNotFoundException
      */
     public TmfTraceStub(String filename, int cacheSize, boolean waitForCompletion) throws FileNotFoundException {
-        super(filename, cacheSize, waitForCompletion);
+        super(TmfEvent.class, filename, cacheSize);
         fTrace = new RandomAccessFile(filename, "r");
         fParser = new TmfEventParserStub();
-        indexStream();
+        indexTrace(waitForCompletion);
     }
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Accessors
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     public RandomAccessFile getStream() {
         return fTrace;
     }
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Operators
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     /* (non-Javadoc)
      * @see org.eclipse.linuxtools.tmf.eventlog.ITmfStreamLocator#seekLocation(java.lang.Object)
      */
        public TmfTraceContext seekLocation(Object location) {
-       TmfTraceContext context = null;
         try {
                synchronized(fTrace) {
+                       // Position the trace, read the event (to obtain its timestamp)
+                       // and then re-position the trace (not great...)
                        fTrace.seek((location != null) ? (Long) location : 0);
-                       context = new TmfTraceContext(getCurrentLocation(), null, 0);
+                       TmfTraceContext context = new TmfTraceContext(getCurrentLocation());
+                       return context;
                }
                } catch (IOException e) {
-                       // TODO Auto-generated catch block
                        e.printStackTrace();
                }
-               return context;
+               return null;
     }
 
     /* (non-Javadoc)
@@ -127,9 +129,6 @@ public class TmfTraceStub extends TmfTrace {
                try {
                        // paserNextEvent updates the context
                        TmfEvent event = fParser.parseNextEvent(this, context);
-                       if (event != null) {
-                               context.setTimestamp(event.getTimestamp());
-                       }
                        return event;
                }
                catch (IOException e) {
@@ -138,8 +137,4 @@ public class TmfTraceStub extends TmfTrace {
                return null;
        }
 
-       // ========================================================================
-    // Helper functions
-    // ========================================================================
-
-}
+}
\ No newline at end of file
index cf148e96bab2066d199834918b6d1cdef5daa33c..c15e49ff338badbd703344f5180e11ac5d757b19 100644 (file)
@@ -16,7 +16,6 @@
 package org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets;\r
 \r
 import java.util.ArrayList;\r
-import java.util.Arrays;\r
 import java.util.HashMap;\r
 import java.util.Iterator;\r
 import java.util.List;\r
index 3ef8ac325fe81ed1d6581babfd3c6acf599517c3..53d7e0ca84b7169e573c6e40952c19e606b08529 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -14,15 +14,15 @@ package org.eclipse.linuxtools.tmf.ui.views;
 
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperimentSelectedSignal;
+import org.eclipse.linuxtools.tmf.experiment.TmfExperimentUpdatedSignal;
 import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
 import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
 import org.eclipse.linuxtools.tmf.signal.TmfTimeSynchSignal;
-import org.eclipse.linuxtools.tmf.trace.TmfExperiment;
-import org.eclipse.linuxtools.tmf.trace.TmfExperimentSelectedSignal;
-import org.eclipse.linuxtools.tmf.trace.TmfExperimentUpdatedSignal;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Event;
@@ -41,14 +41,14 @@ import org.eclipse.swt.widgets.TableItem;
  */
 public class TmfEventsView extends TmfView {
 
-    public static final String ID = "org.eclipse.linuxtools.tmf.ui.viewer.events";
+    public static final String ID = "org.eclipse.linuxtools.tmf.ui.views.events";
 
-    private TmfExperiment fExperiment;
+    private TmfExperiment<TmfEvent> fExperiment;
     private String fTitlePrefix;
 
-    // ========================================================================
+       // ------------------------------------------------------------------------
     // Table data
-    // ========================================================================
+       // ------------------------------------------------------------------------
 
     private Table fTable;
 
@@ -59,7 +59,7 @@ public class TmfEventsView extends TmfView {
     private final String REFERENCE_COLUMN = "File";
     private final String CONTENT_COLUMN   = "Content";
     private final String[] columnProperties =  new String[] {
-        TIMESTAMP_COLUMN,
+       TIMESTAMP_COLUMN,
         SOURCE_COLUMN,
         TYPE_COLUMN,
         REFERENCE_COLUMN,
@@ -87,18 +87,35 @@ public class TmfEventsView extends TmfView {
         new ColumnData(columnProperties[4], 100, SWT.LEFT)
     };
 
-    // ========================================================================
+       // ------------------------------------------------------------------------
+    // Event cache
+       // ------------------------------------------------------------------------
+
+       private static final int DEFAULT_CACHE_SIZE = 1000;
+    private final int fCacheSize;
+    private TmfEvent[] cache = new TmfEvent[1];
+    private int cacheStartIndex = 0;
+    private int cacheEndIndex = 0;
+    
+       // ------------------------------------------------------------------------
     // Constructor
-    // ========================================================================
+       // ------------------------------------------------------------------------
 
-    public TmfEventsView() {
+    public TmfEventsView(int cacheSize) {
        super();
+       fCacheSize = cacheSize;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
-     */
-    @Override
+    public TmfEventsView() {
+       this(DEFAULT_CACHE_SIZE);
+    }
+
+       // ------------------------------------------------------------------------
+    // ViewPart
+       // ------------------------------------------------------------------------
+
+    @SuppressWarnings("unchecked")
+       @Override
        public void createPartControl(Composite parent) {
        
        // Create a virtual table
@@ -108,7 +125,6 @@ public class TmfEventsView extends TmfView {
 
         // Set the table layout
         GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
-        layoutData.horizontalSpan= columnData.length;
         fTable.setLayoutData(layoutData);
 
         // Some cosmetic enhancements
@@ -116,59 +132,49 @@ public class TmfEventsView extends TmfView {
         fTable.setLinesVisible(true);
 
         // Set the columns
-        setColumnHeaders(fTable);
+        createColumnHeaders(fTable);
 
         // Handle the table item requests 
-        fTable.addSelectionListener(new SelectionListener() {
+        fTable.addSelectionListener(new SelectionAdapter() {
 
-                       public void widgetDefaultSelected(SelectionEvent e) {
-                               // TODO Auto-generated method stub
-                       }
-
-                       public void widgetSelected(SelectionEvent e) {
-                               TmfTimestamp ts = extractTimestamp(fTable.getSelection()[0].getText());
-                               broadcastSignal(new TmfTimeSynchSignal(fTable, ts));
+               public void widgetSelected(SelectionEvent e) {
+                               TmfTimestamp ts = (TmfTimestamp) fTable.getSelection()[0].getData();
+                               broadcast(new TmfTimeSynchSignal(fTable, ts));
                        }
         });
 
         // Handle the table item requests 
         fTable.addListener(SWT.SetData, new Listener() {
+
                        public void handleEvent(Event event) {
-                               TableItem item = (TableItem) event.item;
+
+                       TableItem item = (TableItem) event.item;
                                final int index = fTable.indexOf(item);
+
                                // Note: this works because handleEvent() is called once for each row, in sequence  
                                if ((index >= cacheStartIndex ) && (index < cacheEndIndex)) {
-                                       item.setText(extractItemFields(cache[index - cacheStartIndex]));
+                                       int i = index - cacheStartIndex;
+                                       item.setText(extractItemFields(cache[i]));
+                                       item.setData(new TmfTimestamp(cache[i].getTimestamp()));
                                        return;
                                }
-                               
-                               // *** TODO ***
-                               // This is broken!
-                               // 
-                               // This one fails to return any result : 
-                               //              TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(fExperiment.getTimeRange(), index, 1) {
-                               // All these will return THE SAME RESULT!
-                               //              TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(index, 1) {
-                               //              TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(index+10, 1) {
-                               //              TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(null, 1) {
-                               //              
-                               // THIS IS ONLY A TEMPORARY FIX! 
-                               
-                               TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(index, 1) {
+
+                               TmfDataRequest<TmfEvent> request = new TmfDataRequest<TmfEvent>(TmfEvent.class, index, fCacheSize) {
                                        @Override
                                        public void handleData() {
                                                TmfEvent[] tmpEvent = getData();
                                                if ( (tmpEvent != null) && (tmpEvent.length > 0) ) {
                                                        cache = tmpEvent;
+                                                       cacheStartIndex = index;
+                                                       cacheEndIndex = index + cache.length;
                                                }
-//                                             cacheStartIndex = index;
-//                                             cacheEndIndex = index + cache.length; 
                                        }
                                };
                                fExperiment.processRequest(request, true);
                                
-                               if (cache[0] != null) {
+                               if (cache[0] != null && cacheStartIndex == index) {
                                        item.setText(extractItemFields(cache[0]));
+                                       item.setData(new TmfTimestamp(cache[0].getTimestamp()));
                                }
                                
                        }
@@ -178,41 +184,18 @@ public class TmfEventsView extends TmfView {
        fTitlePrefix = getTitle();
 
        // If an experiment is already selected, update the table
-       fExperiment = TmfExperiment.getCurrentExperiment();
+       fExperiment = (TmfExperiment<TmfEvent>) TmfExperiment.getCurrentExperiment();
        if (fExperiment != null) {
                experimentSelected(new TmfExperimentSelectedSignal(fTable, fExperiment));
        }
     }
 
-    // Events cache - temporary stuff
-//    private final int CACHE_SIZE = 1;
-    private TmfEvent[] cache;
-    private int cacheStartIndex = 0;
-    private int cacheEndIndex = 0;
-
-    
-    private TmfTimestamp extractTimestamp(String entry) {
-       TmfTimestamp ts = null;
-
-       int pos = entry.indexOf('.');
-       if (pos > 0) {
-               String integer = entry.substring(0, pos);
-               String fraction = entry.substring(pos + 1);
-
-               byte exponent = (byte) -fraction.length();
-               String value = integer + fraction;
-               ts = new TmfTimestamp(new Long(value), exponent);
-       }
-
-       return ts;
-    }
-
        /**
         * @param table
         * 
         * FIXME: Add support for column selection
         */
-       protected void setColumnHeaders(Table table) {
+       protected void createColumnHeaders(Table table) {
         for (int i = 0; i < columnData.length; i++) {
             TableColumn column = new TableColumn(table, columnData[i].alignment, i);
             column.setText(columnData[i].header);
@@ -255,14 +238,15 @@ public class TmfEventsView extends TmfView {
        return "[TmfEventsView]";
     }
 
-    // ========================================================================
+       // ------------------------------------------------------------------------
     // Signal handlers
-    // ========================================================================
+       // ------------------------------------------------------------------------
     
+       @SuppressWarnings("unchecked")
        @TmfSignalHandler
     public void experimentSelected(TmfExperimentSelectedSignal signal) {
                // Update the trace reference
-       fExperiment = signal.getExperiment();
+       fExperiment = (TmfExperiment<TmfEvent>) signal.getExperiment();
        setPartName(fTitlePrefix + " - " + fExperiment.getExperimentId());
 
         // Perform the updates on the UI thread
@@ -291,7 +275,7 @@ public class TmfEventsView extends TmfView {
     @TmfSignalHandler
     public void currentTimeUpdated(TmfTimeSynchSignal signal) {
        if (signal.getSource() != fTable && fExperiment != null) {
-               final int index = (int) fExperiment.getIndex(signal.getCurrentTime());
+               final int index = (int) fExperiment.getRank(signal.getCurrentTime());
             // Perform the updates on the UI thread
             fTable.getDisplay().asyncExec(new Runnable() {
                public void run() {
@@ -311,4 +295,4 @@ public class TmfEventsView extends TmfView {
        }
     }
 
-}
+}
\ No newline at end of file
index ed8101d5203c7e3632d59fec2924dfce186d367a..a11f9a799f0d8edd36dd3b4df093b2ffadec70c6 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -19,48 +19,49 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.part.ViewPart;
 
 /**
- * <b><u>TmfViewer</u></b>
+ * <b><u>TmfView</u></b>
  * <p>
  * TODO: Implement me. Please.
  */
 public abstract class TmfView extends ViewPart implements ITmfComponent {
 
-       /**
-        * Constructor
-        */
+       // ------------------------------------------------------------------------
+       // Constructor
+       // ------------------------------------------------------------------------
+
        public TmfView() {
-               TmfSignalManager.addListener(this);
+               super();
+               register();
        }
 
-       /**
-        * Destructor
-        */
-       @Override
-       public void dispose() {
-               TmfSignalManager.removeListener(this);
+       // ------------------------------------------------------------------------
+       // ITmfComponent
+       // ------------------------------------------------------------------------
+
+       public void register() {
+               TmfSignalManager.register(this);
+       }
+
+       public void deregister() {
+               TmfSignalManager.deregister(this);
        }
 
-       /**
-        * broadcastSignal
-        */
-       public void broadcastSignal(TmfSignal signal) {
+       public void broadcast(TmfSignal signal) {
                TmfSignalManager.dispatchSignal(signal);
        }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
-        */
+       // ------------------------------------------------------------------------
+       // ViewPart
+       // ------------------------------------------------------------------------
+       
        @Override
        public void createPartControl(Composite parent) {
                // TODO Auto-generated method stub
        }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
-        */
        @Override
        public void setFocus() {
                // TODO Auto-generated method stub
        }
 
-}
+}
\ No newline at end of file
index 5b3079a97a783f84ec1b036b45958127723cd394..2ea69c6057ec3a0237a02f52a0a36f3f9f54c6d7 100644 (file)
@@ -11,6 +11,8 @@ Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.linuxtools.tmf,
  org.eclipse.linuxtools.tmf.component,
  org.eclipse.linuxtools.tmf.event,
+ org.eclipse.linuxtools.tmf.experiment,
+ org.eclipse.linuxtools.tmf.parser,
  org.eclipse.linuxtools.tmf.request,
  org.eclipse.linuxtools.tmf.signal,
  org.eclipse.linuxtools.tmf.trace
index be83eb4a7f89b6b591b6c580a91063234e91ece9..dbed10b9b490a2245494bed4a37fddb92aad16d6 100644 (file)
@@ -21,9 +21,9 @@ import org.eclipse.core.runtime.Plugin;
  */
 public class TmfCorePlugin extends Plugin {
 
-    // ========================================================================
+       // ------------------------------------------------------------------------
     // Attributes
-    // ========================================================================
+       // ------------------------------------------------------------------------
 
        // The plug-in ID
        public static final String PLUGIN_ID = "org.eclipse.linuxtools.tmf";
@@ -31,9 +31,9 @@ public class TmfCorePlugin extends Plugin {
        // The shared instance
        private static TmfCorePlugin plugin;
        
-    // ========================================================================
+       // ------------------------------------------------------------------------
     // Constructors
-    // ========================================================================
+       // ------------------------------------------------------------------------
 
        /**
         * The constructor
@@ -42,9 +42,9 @@ public class TmfCorePlugin extends Plugin {
                plugin = this;
        }
 
-    // ========================================================================
+       // ------------------------------------------------------------------------
     // Accessors
-    // ========================================================================
+       // ------------------------------------------------------------------------
 
     /**
      * @return the shared instance
index 3a0555b2dfafd60530bd9669d8032df0e53630ad..ad20d0b47cc3f3cf90e0a8dcebc2e707803e0a7b 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -17,11 +17,27 @@ import org.eclipse.linuxtools.tmf.signal.TmfSignal;
 /**
  * <b><u>ITmfComponent</u></b>
  * <p>
- * TODO: Implement me. Please.
+ * This is the basic interface of all the TMF components.
+ * <p>
+ *  Currently, it only addresses the inter-component signaling.
  */
 public interface ITmfComponent {
 
-       public void dispose();
+       /**
+        * Register to the signal manager
+        */
+       public void register();
+
+       /**
+        * De-register from the signal manager
+        */
+       public void deregister();
+
+       /**
+        * Broadcast a signal to all the interested listeners.
+        * 
+        * @param signal
+        */
+       public void broadcast(TmfSignal signal);
 
-       public void broadcastSignal(TmfSignal signal);
 }
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/ITmfContext.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/ITmfContext.java
new file mode 100644 (file)
index 0000000..142b0d4
--- /dev/null
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.component;
+
+/**
+ * <b><u>ITmfContext</u></b>
+ * <p>
+ * This is a place-holder for the context objects.
+ */
+public interface ITmfContext {
+
+       public ITmfContext clone();
+}
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/ITmfTransform.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/ITmfTransform.java
deleted file mode 100644 (file)
index 07cc70a..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 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:
- *   Francois Chouinard - Initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.linuxtools.tmf.component;
-
-/**
- * <b><u>ITmfTransform</u></b>
- * <p>
- * TODO: Implement me. Please.
- */
-public interface ITmfTransform extends ITmfComponent {
-
-       /**
-        * 
-        */
-       public void transformData();
-}
index a9e9aab59397c963a2c714be1a8c5fe6abbeb78e..fbedd776f16e19aaeb124df7486109e50e00d156 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -18,18 +18,43 @@ import org.eclipse.linuxtools.tmf.signal.TmfSignalManager;
 /**
  * <b><u>TmfComponent</u></b>
  * <p>
+ * This is the base class of the TMF components.
+ * <p>
+ *  Currently, it only addresses the inter-component signaling.
  */
 public abstract class TmfComponent implements ITmfComponent {
 
+       // ------------------------------------------------------------------------
+       // Constructor
+       // ------------------------------------------------------------------------
+
        public TmfComponent() {
-               TmfSignalManager.addListener(this);
+               register();
+       }
+
+       // ------------------------------------------------------------------------
+       // ITmfComponent
+       // ------------------------------------------------------------------------
+
+       /* (non-Javadoc)
+        * @see org.eclipse.linuxtools.tmf.component.ITmfComponent#register()
+        */
+       public void register() {
+               TmfSignalManager.register(this);
        }
 
-       public void dispose() {
-               TmfSignalManager.removeListener(this);
+       /* (non-Javadoc)
+        * @see org.eclipse.linuxtools.tmf.component.ITmfComponent#deregister()
+        */
+       public void deregister() {
+               TmfSignalManager.deregister(this);
        }
 
-       public void broadcastSignal(TmfSignal signal) {
+       /* (non-Javadoc)
+        * @see org.eclipse.linuxtools.tmf.component.ITmfComponent#broadcast(org.eclipse.linuxtools.tmf.signal.TmfSignal)
+        */
+       public void broadcast(TmfSignal signal) {
                TmfSignalManager.dispatchSignal(signal);
        }
+
 }
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/TmfProvider.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/TmfProvider.java
new file mode 100644 (file)
index 0000000..9f868a8
--- /dev/null
@@ -0,0 +1,170 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.component;
+
+import java.lang.reflect.Array;
+import java.util.Vector;
+
+import org.eclipse.linuxtools.tmf.event.TmfData;
+import org.eclipse.linuxtools.tmf.request.ITmfRequestHandler;
+import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
+
+/**
+ * <b><u>TmfProvider</u></b>
+ * <p>
+ * The TmfProvider<T> is a provider for a data of type <T>.
+ * <p>
+ * This abstract class implements the housekeeking methods to register/
+ * deregister the event provider and to handle generically the event requests.
+ * <p>
+ * The concrete class can either re-implement processRequest() entirely or
+ * just implement the hooks (initializeContext() and getNext()).
+ * <p>
+ * TODO: Add support for providing multiple data types.
+ */
+public abstract class TmfProvider<T extends TmfData> extends TmfComponent implements ITmfRequestHandler<T> {
+
+       private Class<T> fType;
+
+       // ------------------------------------------------------------------------
+       // Constructors (enforce that a type be supplied) 
+       // ------------------------------------------------------------------------
+       
+       @SuppressWarnings("unused")
+       private TmfProvider() {
+       }
+
+       @SuppressWarnings("unused")
+       private TmfProvider(TmfProvider<T> other) {
+       }
+
+       protected TmfProvider(Class<T> type) {
+               fType = type;
+               register();
+       }
+
+       @Override
+       public void register() {
+               super.register();
+               TmfProviderManager.register(fType, this);
+       }
+
+       @Override
+       public void deregister() {
+               TmfProviderManager.deregister(fType, this);
+               super.deregister();
+       }
+
+       // ------------------------------------------------------------------------
+       // ITmfRequestHandler
+       // ------------------------------------------------------------------------
+
+       // TODO: Request coalescing, filtering, result dispatching
+
+       public void processRequest(final TmfDataRequest<T> request, boolean waitForCompletion) {
+
+               //Process the request 
+               processDataRequest(request);
+
+               // Wait for completion if needed
+       if (waitForCompletion) {
+                       request.waitForCompletion();
+               }
+       }
+
+       protected void processDataRequest(final TmfDataRequest<T> request) {
+
+               // Process the request
+               Thread thread = new Thread() {
+
+                       @Override
+                       public void run() {
+
+                               // Extract the generic information
+                               int blockSize   = request.getBlockize();
+                               int nbRequested = request.getNbRequested();
+                        
+                               // Create the result buffer
+                               Vector<T> result = new Vector<T>();
+                               int nbRead = 0;
+
+                               // Initialize the execution
+                               ITmfContext context = setContext(request);
+
+                               // Get the ordered events
+                               T data = getNext(context);
+                               while (data != null && !request.isCancelled() && nbRead < nbRequested && !isCompleted(request, data))
+                               {
+                                       result.add(data);
+                                       if (++nbRead % blockSize == 0) {
+                                               pushData(request, result);
+                                       }
+                                       // To avoid an unnecessary read passed the last data requested
+                                       if (nbRead < nbRequested)
+                                               data = getNext(context);
+                               }
+                               pushData(request, result);
+                               request.done();
+                       }
+               };
+               thread.start();
+       }
+
+       /**
+        * Format the result data and forwards it to the requester.
+        * Note: after handling, the data is *removed*.
+        * 
+        * @param request
+        * @param data
+        */
+       @SuppressWarnings("unchecked")
+       private void pushData(TmfDataRequest<T> request, Vector<T> data) {
+               synchronized(request) {
+                       if (!request.isCompleted()) {
+                               T[] result = (T[]) Array.newInstance(fType, data.size());
+                               data.toArray(result);
+                               request.setData(result);
+                               request.handleData();
+                               data.removeAllElements();
+                       }
+               }
+       }
+
+       /**
+        * Initialize the provider based on the request. The context is
+        * application specific and will be updated by getNext().
+        * 
+        * @param request
+        * @return
+        */
+       public abstract ITmfContext setContext(TmfDataRequest<T> request);
+       
+       /**
+        * Return the next piece of data based on the context supplied. The context
+        * would typically be updated for the subsequent read.
+        * 
+        * @param context
+        * @return
+        */
+       public abstract T getNext(ITmfContext context);
+
+       /**
+        * Checks if the data meets the request completion criteria.
+        * 
+        * @param request
+        * @param data
+        * @return
+        */
+       public abstract boolean isCompleted(TmfDataRequest<T> request, T data);
+
+}
index 0b71a53a365c21fdf765b44d0e359b5f36c82328..936545530d883bd75652f71b57ef22bc1c8d2e1f 100644 (file)
@@ -26,18 +26,12 @@ import org.eclipse.linuxtools.tmf.event.TmfData;
  */
 public class TmfProviderManager {
 
-       // ------------------------------------------------------------------------
-       // No constructor
-       // ------------------------------------------------------------------------
-
-       private TmfProviderManager() {}
-       
        // ------------------------------------------------------------------------
        // Keeps track of the providers for each event type
        // ------------------------------------------------------------------------
        
-       private static Map<Class<? extends TmfData>, List<TmfDataProvider<? extends TmfData>>> fProviders =
-                  new HashMap<Class<? extends TmfData>, List<TmfDataProvider<? extends TmfData>>>();
+       private static Map<Class<? extends TmfData>, List<TmfProvider<? extends TmfData>>> fProviders =
+                  new HashMap<Class<? extends TmfData>, List<TmfProvider<? extends TmfData>>>();
 
        /**
         * Registers [provider] as a provider of [eventType]
@@ -45,39 +39,40 @@ public class TmfProviderManager {
         * @param eventType
         * @param provider
         */
-       public static <T extends TmfData> void register(Class<T> eventType, TmfDataProvider<? extends TmfData> provider) {
+       public static <T extends TmfData> void register(Class<T> eventType, TmfProvider<? extends TmfData> provider) {
                if (fProviders.get(eventType) == null)
-                       fProviders.put(eventType, new ArrayList<TmfDataProvider<? extends TmfData>>());
+                       fProviders.put(eventType, new ArrayList<TmfProvider<? extends TmfData>>());
+               assert(fProviders.get(eventType) != null);
                fProviders.get(eventType).add(provider);
        }
 
        /**
         * Re-registers [provider] as a provider of [eventType]
         * 
-        * @param dataClass
+        * @param eventType
         * @param provider
         */
-       public static <T extends TmfData> void deregister(Class<T> dataClass, TmfDataProvider<? extends TmfData> provider) {
-               List<TmfDataProvider<? extends TmfData>> list = fProviders.get(dataClass);
+       public static <T extends TmfData> void deregister(Class<T> eventType, TmfProvider<? extends TmfData> provider) {
+               List<TmfProvider<? extends TmfData>> list = fProviders.get(eventType);
                if (list != null) {
                        list.remove(provider);
                        if (list.size() == 0)
-                               fProviders.remove(dataClass);
+                               fProviders.remove(eventType);
                }
        }
 
        /**
         * Returns the list of components that provide [eventType]
         * 
-        * @param dataClass
+        * @param eventType
         * @return
         */
        @SuppressWarnings("unchecked")
-       public static TmfDataProvider<? extends TmfData>[] getProviders(Class<? extends TmfData> dataClass) {
-               List<TmfDataProvider<? extends TmfData>> list = fProviders.get(dataClass);
+       public static TmfProvider<? extends TmfData>[] getProviders(Class<? extends TmfData> eventType) {
+               List<TmfProvider<? extends TmfData>> list = fProviders.get(eventType);
                if (list == null)
-                       list = new ArrayList<TmfDataProvider<? extends TmfData>>(); 
-               TmfDataProvider<? extends TmfData>[] result = new TmfDataProvider[list.size()];
+                       list = new ArrayList<TmfProvider<? extends TmfData>>(); 
+               TmfProvider<? extends TmfData>[] result = new TmfProvider[list.size()];
                return list.toArray(result);
        }
 
@@ -89,20 +84,17 @@ public class TmfProviderManager {
         * @return
         */
        @SuppressWarnings("unchecked")
-       public static TmfDataProvider<? extends TmfData>[] getProviders(Class<? extends TmfData> dataClass, Class<? extends TmfDataProvider<? extends TmfData>> providerClass) {
-               if (providerClass == null) {
-                       return getProviders(dataClass);
-               }
-               TmfDataProvider<? extends TmfData>[] list = getProviders(dataClass);
-               List<TmfDataProvider<? extends TmfData>> result = new ArrayList<TmfDataProvider<? extends TmfData>>();
+       public static TmfProvider<? extends TmfData>[] getProviders(Class<? extends TmfData> eventType, Class<? extends TmfProvider<? extends TmfData>> providerType) {
+               TmfProvider<? extends TmfData>[] list = getProviders(eventType);
+               List<TmfProvider<? extends TmfData>> result = new ArrayList<TmfProvider<? extends TmfData>>();
                if (list != null) {
-                       for (TmfDataProvider<? extends TmfData> provider : list) {
-                               if (provider.getClass() == providerClass) {
+                       for (TmfProvider<? extends TmfData> provider : list) {
+                               if (provider.getClass() == providerType) {
                                        result.add(provider);
                                }
                        }
                }
-               TmfDataProvider<? extends TmfData>[] array = new TmfDataProvider[result.size()];
+               TmfProvider<? extends TmfData>[] array = new TmfProvider[result.size()];
                return result.toArray(array);
        }
 
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/TmfTransform.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/component/TmfTransform.java
deleted file mode 100644 (file)
index a666aaf..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 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:
- *   Francois Chouinard - Initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.linuxtools.tmf.component;
-
-/**
- * <b><u>TmfTransform</u></b>
- * <p>
- * TODO: Implement me. Please.
- */
-public abstract class TmfTransform extends TmfComponent implements ITmfTransform  {
-
-}
index cefc7a5714ba60c6cb849ea72e9bc2febb688c3f..9172a5eeb959f2c689c86548751d654f28054475 100644 (file)
@@ -53,6 +53,7 @@ public class TmfTimestamp implements Cloneable {
     // The beginning and end of time
     public static final TmfTimestamp BigBang   = new TmfTimestamp(Long.MIN_VALUE, Byte.MAX_VALUE, 0);
     public static final TmfTimestamp BigCrunch = new TmfTimestamp(Long.MAX_VALUE, Byte.MAX_VALUE, 0);
+    public static final TmfTimestamp Zero      = new TmfTimestamp(0, (byte) 0, 0);
 
     // ========================================================================
     // Constructors
index cfeed550c6218d76fe18e9db70a6f83423438928..62f5e777e5809b356628fa5b5bc8d00c7619003d 100644 (file)
 
 package org.eclipse.linuxtools.tmf.experiment;
 
-import java.util.Collections;
 import java.util.Vector;
 
-import org.eclipse.linuxtools.tmf.component.TmfEventProvider;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.linuxtools.tmf.component.ITmfContext;
+import org.eclipse.linuxtools.tmf.component.TmfProvider;
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
-import org.eclipse.linuxtools.tmf.request.ITmfDataRequest;
-import org.eclipse.linuxtools.tmf.request.ITmfEventRequest;
 import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
 import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
-import org.eclipse.linuxtools.tmf.signal.TmfExperimentSelectedSignal;
-import org.eclipse.linuxtools.tmf.signal.TmfExperimentUpdatedSignal;
 import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
-import org.eclipse.linuxtools.tmf.signal.TmfSignalManager;
-import org.eclipse.linuxtools.tmf.signal.TmfTraceUpdatedSignal;
-import org.eclipse.linuxtools.tmf.trace.ITmfContext;
-import org.eclipse.linuxtools.tmf.trace.ITmfLocation;
 import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
-import org.eclipse.linuxtools.tmf.trace.TmfCheckpoint;
-import org.eclipse.linuxtools.tmf.trace.TmfContext;
+import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
+import org.eclipse.linuxtools.tmf.trace.TmfTraceUpdatedSignal;
 
 /**
  * <b><u>TmfExperiment</u></b>
@@ -41,20 +37,28 @@ import org.eclipse.linuxtools.tmf.trace.TmfContext;
  * that are part of a tracing experiment. 
  * <p>
  */
-public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> implements ITmfTrace {
+public class TmfExperiment<T extends TmfEvent> extends TmfProvider<T> {
+
+// TODO: Complete multi-trace experiment
+// TODO: Add support for dynamic addition/removal of traces
+// TODO: Add support for live streaming (notifications, incremental indexing, ...)
+// TODO: Implement indexing-on-demand
 
     // ------------------------------------------------------------------------
     // Attributes
     // ------------------------------------------------------------------------
 
        // The currently selected experiment
-    private static TmfExperiment<?> fCurrentExperiment = null;
+    private static TmfExperiment<?> fCurrentExperiment;
+
+       // The experiment ID
+    private String fExperimentId;
 
-       // The set of traces that constitute the experiment
-    private ITmfTrace[] fTraces;
+    // The set of trace sthat constitute the experiment
+    private Vector<ITmfTrace> fTraces;
 
     // The total number of events
-    private long fNbEvents;
+    private int fNbEvents;
 
     // The experiment time range
     private TmfTimeRange fTimeRange;
@@ -62,9 +66,6 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
     // The experiment reference timestamp (default: BigBang)
     private TmfTimestamp fEpoch;
 
-       // The experiment index
-       private Vector<TmfCheckpoint> fCheckpoints = new Vector<TmfCheckpoint>();
-
     // ------------------------------------------------------------------------
     // Constructors
     // ------------------------------------------------------------------------
@@ -77,16 +78,19 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
      * @param indexPageSize
      */
     public TmfExperiment(Class<T> type, String id, ITmfTrace[] traces, TmfTimestamp epoch, int indexPageSize) {
-       super(id, type);
+       super(type);
 
-       fTraces = traces;
+       fExperimentId = id;
+       fTraces = new Vector<ITmfTrace>();
+       for (ITmfTrace trace : traces) {
+               fTraces.add(trace);
+       }
        fEpoch = epoch;
        fIndexPageSize = indexPageSize;
-       fClone = createTraceCopy();
 
                updateNbEvents();
                updateTimeRange();
-       }
+    }
 
     /**
      * @param type
@@ -106,103 +110,57 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
     public TmfExperiment(Class<T> type, String id, ITmfTrace[] traces, int indexPageSize) {
         this(type, id, traces, TmfTimestamp.Zero, indexPageSize);
     }
-    
-    public TmfExperiment(TmfExperiment<T> other) {
-       super(other.getName() + "(clone)", other.fType);
-       
-       fEpoch         = other.fEpoch;
-       fIndexPageSize = other.fIndexPageSize;
-       
-       fTraces = new ITmfTrace[other.fTraces.length];
-       for (int trace = 0; trace < other.fTraces.length; trace++) {
-               fTraces[trace] = other.fTraces[trace].createTraceCopy();
-       }
-       
-       fNbEvents  = other.fNbEvents;
-       fTimeRange = other.fTimeRange;
-       fClone = null;
-    }
-    
-       public TmfExperiment<T> createTraceCopy() {
-               TmfExperiment<T> experiment = new TmfExperiment<T>(this);
-               TmfSignalManager.deregister(experiment);
-               return experiment;
-       }
-    
+
     /**
-     * Clears the experiment
+     * 
      */
     @Override
-       public void dispose() {
-               for (ITmfTrace trace : fTraces) {
-                       trace.dispose();
-               }
-               fTraces = null;
-       fCheckpoints.clear();
-        super.dispose();
-    }
-
-    private static void setCurrentExperiment(TmfExperiment<?> experiment) {
-       fCurrentExperiment = experiment;
+       public void deregister() {
+       fTraces.clear();
+       fCurrentExperiment= null;
+        super.deregister();
     }
 
     // ------------------------------------------------------------------------
-    // ITmfTrace
+    // Accessors
     // ------------------------------------------------------------------------
 
-       public String getPath() {
-               return null;
-       }
-
-       public long getNbEvents() {
-               return fNbEvents;
-       }
-
-    public int getCacheSize() {
-        return fIndexPageSize;
+    public static TmfExperiment<?> getCurrentExperiment() {
+       return fCurrentExperiment;
     }
 
-       public TmfTimeRange getTimeRange() {
-               return fTimeRange;
-       }
-
-       public TmfTimestamp getStartTime() {
-               return fTimeRange.getStartTime();
-       }
-
-       public TmfTimestamp getEndTime() {
-               return fTimeRange.getEndTime();
-       }
-
-    public Vector<TmfCheckpoint> getCheckpoints() {
-       return fCheckpoints;
+    public String getExperimentId() {
+       return fExperimentId;
     }
 
-    // ------------------------------------------------------------------------
-    // Accessors
-    // ------------------------------------------------------------------------
-
-    public static TmfExperiment<?> getCurrentExperiment() {
-       return fCurrentExperiment;
+    public ITmfTrace[] getTraces() {
+       ITmfTrace[] result = new ITmfTrace[fTraces.size()];
+       return fTraces.toArray(result);
     }
 
     public TmfTimestamp getEpoch() {
        return fEpoch;
     }
 
-    public ITmfTrace[] getTraces() {
-       return fTraces;
+    public TmfTimeRange getTimeRange() {
+       return fTimeRange;
+    }
+
+    public int getNbEvents() {
+       return fNbEvents;
     }
 
     /**
      * Returns the rank of the first event with the requested timestamp.
      * If none, returns the index of the next event (if any).
      *  
-     * @param timestamp
+     * @param ts
      * @return
      */
-    public long getRank(TmfTimestamp timestamp) {
-       TmfExperimentContext context = seekEvent(timestamp);
+    public long getRank(TmfTimestamp ts) {
+        // FIXME: Go over all the traces
+       ITmfTrace trace = fTraces.firstElement();
+       TmfTraceContext context = trace.seekEvent(ts);
        return context.getRank();
     }
 
@@ -214,15 +172,31 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
      * @return
      */
     public TmfTimestamp getTimestamp(int index) {
-       TmfExperimentContext context = seekEvent(index);
-       TmfEvent event = getNextEvent(context);
-       return (event != null) ? event.getTimestamp() : null;
+        // FIXME: Go over all the traces
+       ITmfTrace trace = fTraces.firstElement();
+       TmfTraceContext context = trace.seekEvent(index);
+       TmfEvent event = trace.getNextEvent(context);
+       TmfTimestamp ts = (event != null) ? event.getTimestamp() : null;
+       return ts;
     }
 
     // ------------------------------------------------------------------------
     // Operators
     // ------------------------------------------------------------------------
 
+    /**
+     * Add a trace to the experiment trace set
+     * 
+     * @param trace
+     */
+    public void addTrace(ITmfTrace trace) {
+               fTraces.add(trace);
+               synchronized(this) {
+                       updateNbEvents();
+                       updateTimeRange();
+               }
+    }
+
     /**
      * Update the total number of events
      */
@@ -242,15 +216,13 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
                TmfTimestamp endTime   = fTimeRange != null ? fTimeRange.getEndTime()   : TmfTimestamp.BigBang;
 
                for (ITmfTrace trace : fTraces) {
-                       if (trace.getNbEvents() > 0) {
-                       TmfTimestamp traceStartTime = trace.getStartTime();
-                       if (traceStartTime.compareTo(startTime, true) < 0)
-                               startTime = traceStartTime;
-
-                       TmfTimestamp traceEndTime = trace.getEndTime();
-                       if (traceEndTime.compareTo(endTime, true) > 0)
-                               endTime = traceEndTime;
-                       }
+               TmfTimestamp traceStartTime = trace.getStartTime();
+               if (traceStartTime.compareTo(startTime, true) < 0)
+                       startTime = traceStartTime;
+
+               TmfTimestamp traceEndTime = trace.getEndTime();
+               if (traceEndTime.compareTo(endTime, true) > 0)
+                       endTime = traceEndTime;
        }
                fTimeRange = new TmfTimeRange(startTime, endTime);
     }
@@ -260,11 +232,9 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
     // ------------------------------------------------------------------------
 
        @Override
-       public ITmfContext armRequest(ITmfDataRequest<T> request) {
-               TmfTimestamp timestamp = (request instanceof ITmfEventRequest<?>) ?
-                               ((ITmfEventRequest<T>) request).getRange().getStartTime() : null;
-               TmfExperimentContext context = (timestamp != null) ? 
-                       seekEvent(timestamp) : seekEvent(request.getIndex());
+       public ITmfContext setContext(TmfDataRequest<T> request) {
+               TmfExperimentContext context = new TmfExperimentContext(fTraces);
+               positionTraces(request.getIndex(), context);
                return context;
        }
 
@@ -277,132 +247,56 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
                return null;
        }
 
-       // ------------------------------------------------------------------------
-    // ITmfTrace trace positioning
-    // ------------------------------------------------------------------------
-
-       // Returns a brand new context based on the location provided
-       // and initializes the event queues
-       public TmfExperimentContext seekLocation(ITmfLocation<?> location) {
-
-               // Validate the location
-               if (location != null && !(location instanceof TmfExperimentLocation)) {
-                       return null;    // Throw an exception?
-               }
-
-               // Instantiate the location
-               TmfExperimentLocation expLocation = (location == null)
-                   ? new TmfExperimentLocation(new ITmfLocation<?>[fTraces.length], new long[fTraces.length])
-            : (TmfExperimentLocation) location.clone();
-
-               // Create and populate the context's traces contexts
-               TmfExperimentContext context = new TmfExperimentContext(fTraces, new TmfContext[fTraces.length]);
-               long rank = 0;
-               for (int i = 0; i < fTraces.length; i++) {
-                       // Get the relevant trace attributes
-                       ITmfLocation<?> traceLocation = expLocation.getLocation()[i];
-                       long traceRank = expLocation.getRanks()[i];
-
-                       // Set the corresponding sub-context
-                       context.getContexts()[i] = fTraces[i].seekLocation(traceLocation);
-                       context.getContexts()[i].setRank(traceRank);
-                       rank += traceRank;
-
-                       // Set the trace location and read the corresponding event
-                       expLocation.getLocation()[i] = context.getContexts()[i].getLocation();
-                       context.getEvents()[i] = fTraces[i].getNextEvent(context.getContexts()[i]);
+       @Override
+       public boolean isCompleted(TmfDataRequest<T> request, T data) {
+               if (request instanceof TmfEventRequest<?> && data != null) {
+                       return data.getTimestamp().compareTo(((TmfEventRequest<T>) request).getRange().getEndTime(), false) > 0;
                }
-
-               // Finalize context
-               context.setLocation(expLocation);
-               context.setRank(rank);
-               context.setLastTrace(TmfExperimentContext.NO_TRACE);
-               return context;
+               return false;
        }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.linuxtools.tmf.trace.ITmfTrace#seekEvent(org.eclipse.linuxtools.tmf.event.TmfTimestamp)
+       /**
+        * Given an experiment event index, position the set of traces so a call
+        * to getNextEvent() will retrieve the corresponding event.
+        * 
+        * @param index
+        * @param context
         */
-       public TmfExperimentContext seekEvent(TmfTimestamp timestamp) {
+       private synchronized void positionTraces(long index, TmfExperimentContext context) {
 
-               if (timestamp == null) {
-               timestamp = TmfTimestamp.BigBang;
-       }
+               // Extract the relevant information
+               ITmfTrace[] traces = context.getTraces();
+               TmfEvent[]  events = context.getEvents();
+               TmfTraceContext[] contexts = context.getContexts();
 
-       // First, find the right checkpoint
-       int index = Collections.binarySearch(fCheckpoints, new TmfCheckpoint(timestamp, null));
-
-        // In the very likely case that the checkpoint was not found, bsearch
-        // returns its negated would-be location (not an offset...). From that
-        // index, we can then position the stream and get the event.
-        if (index < 0) {
-            index = Math.max(0, -(index + 2));
-        }
-
-        // Position the experiment at the checkpoint
-        ITmfLocation<?> location;
-        synchronized (fCheckpoints) {
-               if (fCheckpoints.size() > 0) {
-                       if (index >= fCheckpoints.size()) {
-                               index = fCheckpoints.size() - 1;
-                       }
-                       location = fCheckpoints.elementAt(index).getLocation();
-               }
-               else {
-                       location = null;
-               }
-        }
-
-        TmfExperimentContext context = seekLocation(location);
-        context.setRank((long) index * fIndexPageSize);
-
-        // And locate the event
-        TmfExperimentContext nextEventContext = new TmfExperimentContext(context);
-        TmfEvent event = getNextEvent(nextEventContext);
-        while (event != null && event.getTimestamp().compareTo(timestamp, false) < 0) {
-            context = new TmfExperimentContext(nextEventContext);
-               event = getNextEvent(nextEventContext);
-        }
-       context.setLastTrace(TmfExperimentContext.NO_TRACE);
-
-        return context;
-       }
+               int page = 0;           // The checkpoint page
+               int current = 0;        // The current event index (rank)
 
-       /* (non-Javadoc)
-        * @see org.eclipse.linuxtools.tmf.trace.ITmfTrace#seekEvent(long)
-        */
-       public TmfExperimentContext seekEvent(long rank) {
-
-        // Position the stream at the previous checkpoint
-        int index = (int) rank / fIndexPageSize;
-        ITmfLocation<?> location;
-        synchronized (fCheckpoints) {
-               if (fCheckpoints.size() == 0) {
-                       location = null;
-               }
-               else {
-                       if (index >= fCheckpoints.size()) {
-                               index  = fCheckpoints.size() - 1;
-                       }
-                       location = fCheckpoints.elementAt(index).getLocation();
-               }
-        }
-
-        TmfExperimentContext context = seekLocation(location);
-        long pos = (long) index * fIndexPageSize;
-        context.setRank(pos);
-
-        // And locate the event
-        TmfExperimentContext nextEventContext = new TmfExperimentContext(context);
-        TmfEvent event = getNextEvent(nextEventContext);
-        while (event != null && pos++ < rank) {
-               event = getNextEvent(nextEventContext);
-               context = new TmfExperimentContext(nextEventContext);
-               if (event != null) context.updateRank(-1);
-        }
-       context.setLastTrace(TmfExperimentContext.NO_TRACE);
-
-        return context;
+               // If there is no checkpoint created yet, start from the beginning
+               if (fExperimentIndex.size() == 0) {
+                       for (int i = 0; i < contexts.length; i++) {
+                               contexts[i] = traces[i].seekLocation(null).clone();
+                               events[i] = traces[i].parseEvent(contexts[i]);
+                       }
+               }
+               else {
+                       page = (int) index / fIndexPageSize;
+                       if (page >= fExperimentIndex.size()) {
+                               page = fExperimentIndex.size() - 1;
+                       }
+
+                       TmfTraceContext[] checkpoint = fExperimentIndex.elementAt(page).getContexts();
+                       for (int i = 0; i < contexts.length; i++) {
+                               contexts[i] = checkpoint[i].clone();
+                               events[i] = traces[i].parseEvent(contexts[i]);
+                       }
+                       current = page * fIndexPageSize;
+               }
+
+               // Position the traces at the requested index
+               while (current++ < index) {
+                       getNextEvent(context);
+               }
        }
 
        /**
@@ -412,103 +306,51 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
         * @param context
         * @return
         */
-       public synchronized TmfEvent getNextEvent(TmfContext context) {
-
-               // Validate the context
-               if (!(context instanceof TmfExperimentContext)) {
-                       return null;    // Throw an exception?
-               }
-
-               TmfExperimentContext expContext = (TmfExperimentContext) context;
-
-               // If an event was consumed previously, get the next one from that trace
-               int lastTrace = expContext.getLastTrace();
-               if (lastTrace != TmfExperimentContext.NO_TRACE) {
-                   TmfContext traceContext = expContext.getContexts()[lastTrace];
-                       expContext.getEvents()[lastTrace] = expContext.getTraces()[lastTrace].getNextEvent(traceContext);
-               }
-
-               // Scan the candidate events and identify the "next" trace to read from 
-               int trace = TmfExperimentContext.NO_TRACE;
+       private TmfEvent getNextEvent(TmfExperimentContext context) {
+               // TODO: Consider the time adjustment
+               int trace = 0;
                TmfTimestamp timestamp = TmfTimestamp.BigCrunch;
-               for (int i = 0; i < expContext.getTraces().length; i++) {
-                       TmfEvent event = expContext.getEvents()[i];
-                       if (event != null && event.getTimestamp() != null) {
-                               TmfTimestamp otherTS = event.getTimestamp();
+               if (context.getEvents()[trace] != null) {
+                       timestamp = context.getEvents()[trace].getTimestamp();
+               }
+               for (int i = 1; i < context.getTraces().length; i++) {
+                       if (context.getEvents()[i].getTimestamp() != null) {
+                               TmfTimestamp otherTS = context.getEvents()[i].getTimestamp();
                                if (otherTS.compareTo(timestamp, true) < 0) {
                                        trace = i;
                                        timestamp = otherTS;
                                }
                        }
                }
-
-               // Update the experiment context and set the "next" event
-               TmfEvent event = null;
-               if (trace >= 0) {
-                       long savedRank = expContext.getRank();
-                       expContext.setLastTrace(trace);
-                       expContext.updateRank(1);
-                       TmfExperimentLocation expLocation = (TmfExperimentLocation) expContext.getLocation();
-            TmfContext traceContext = expContext.getContexts()[trace];
-                       expLocation.getLocation()[trace] = traceContext.getLocation().clone();
-                       expLocation.getRanks()[trace] = traceContext.getRank();
-                       event = expContext.getEvents()[trace];
-                       updateIndex(expContext, savedRank, timestamp);
-               }
-
+               TmfEvent event = context.getTraces()[trace].getNextEvent(context.getContexts()[trace]);
+               context.getEvents()[trace] = context.getTraces()[trace].parseEvent(context.getContexts()[trace]);
                return event;
        }
 
-       public synchronized void updateIndex(ITmfContext context, long rank, TmfTimestamp timestamp) {
-               // Build the index as we go along
-               if (context.isValidRank() && (rank % fIndexPageSize) == 0) {
-                       // Determine the table position
-                       long position = context.getRank() / fIndexPageSize;
-                       // Add new entry at proper location (if empty) 
-                       if (fCheckpoints.size() == position) {
-                               ITmfLocation<?> location = context.getLocation().clone();
-                               fCheckpoints.add(new TmfCheckpoint(timestamp, location));
-//                             System.out.println(this + "[" + (fCheckpoints.size() - 1) + "] " + timestamp + ", " + location.toString());
-                       }
-               }
-       }
-
-       /* (non-Javadoc)
-        * @see org.eclipse.linuxtools.tmf.trace.ITmfTrace#parseEvent(org.eclipse.linuxtools.tmf.trace.TmfContext)
+       /**
+        * Scan the next events from all traces and return the next one
+        * in chronological order.
+        * 
+        * @param context
+        * @return
         */
-       public TmfEvent parseEvent(TmfContext context) {
-               
-               if (context instanceof TmfExperimentContext) {
-                       TmfExperimentContext expContext = (TmfExperimentContext) context;
-                       int lastTrace = expContext.getLastTrace();
-                       if (lastTrace != -1) {
-                               TmfContext traceContext = expContext.getContexts()[lastTrace];
-                               expContext.getEvents()[lastTrace] = expContext.getTraces()[lastTrace].getNextEvent(traceContext);
-                               expContext.updateRank(1);
-                               TmfExperimentLocation expLocation = (TmfExperimentLocation) expContext.getLocation();
-                               expLocation.getLocation()[lastTrace] = traceContext.getLocation().clone();
-                       }
-
-                       int trace = -1;
-                       TmfTimestamp timestamp = TmfTimestamp.BigCrunch;
-                       for (int i = 0; i < expContext.getTraces().length; i++) {
-                               if (expContext.getEvents()[i] != null) {
-                                       if (expContext.getEvents()[i].getTimestamp() != null) {
-                                               TmfTimestamp otherTS = expContext.getEvents()[i].getTimestamp();
-                                               if (otherTS.compareTo(timestamp, true) < 0) {
-                                                       trace = i;
-                                                       timestamp = otherTS;
-                                               }
-                                       }
+       private TmfTimestamp getNextEventTimestamp(TmfExperimentContext context) {
+               // TODO: Consider the time adjustment
+               int trace = 0;
+               TmfTimestamp timestamp = TmfTimestamp.BigCrunch;
+               if (context.getEvents()[trace] != null) {
+                       timestamp = context.getEvents()[trace].getTimestamp();
+               }
+               for (int i = 1; i < context.getTraces().length; i++) {
+                       if (context.getEvents()[i].getTimestamp() != null) {
+                               TmfTimestamp otherTS = context.getEvents()[i].getTimestamp();
+                               if (otherTS.compareTo(timestamp, true) < 0) {
+                                       trace = i;
+                                       timestamp = otherTS;
                                }
                        }
-                       if (trace >= 0) {
-                               expContext.setLastTrace(TmfExperimentContext.NO_TRACE);
-                               return expContext.getEvents()[trace];
-                       }
                }
-
-               return null;
+               return timestamp;
        }
 
        /* (non-Javadoc)
@@ -516,7 +358,7 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
         */
        @Override
        public String toString() {
-               return "[TmfExperiment (" + getName() + ")]";
+               return "[TmfExperiment (" + fExperimentId + ")]";
        }
 
     // ------------------------------------------------------------------------
@@ -526,7 +368,7 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
        /*
         * The experiment holds the globally ordered events of its set of traces.
         * It is expected to provide access to each individual event by index i.e.
-        * it must be possible to request the Nth event of the experiment.
+        * it must be possible to request the nth event of the experiment.
         * 
         * The purpose of the index is to keep the information needed to rapidly
         * restore the traces contexts at regular intervals (every INDEX_PAGE_SIZE
@@ -535,95 +377,162 @@ public class TmfExperiment<T extends TmfEvent> extends TmfEventProvider<T> imple
 
        // The index page size
        private static final int DEFAULT_INDEX_PAGE_SIZE = 1000;
-       private        final int fIndexPageSize;
+       private final int fIndexPageSize;
 
-       @SuppressWarnings("unchecked")
-       public void indexExperiment() {
-
-               final TmfExperiment<?> experiment = getCurrentExperiment();
-               fCheckpoints.clear();
-
-               ITmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, TmfTimeRange.Eternity, TmfDataRequest.ALL_DATA, 1) {
-
-                       long indexingStart = System.nanoTime();
-                       
-                       TmfTimestamp startTime =  null;
-                       TmfTimestamp lastTime  =  null;
-                       int nbEvents = 0;
-
-                       @Override
-                       public void handleData() {
-                               TmfEvent[] events = getData();
-                               if (events.length > 0) {
-                                       nbEvents++;
-                                       TmfTimestamp ts = events[0].getTimestamp();
-                                       if (startTime == null)
-                                               startTime = new TmfTimestamp(ts);
-                                       lastTime = new TmfTimestamp(ts);
-
-                                       if ((nbEvents % DEFAULT_INDEX_PAGE_SIZE) == 0) {
-                                               updateExperiment();
-                                       }
-                               }
-                       }
+       // The experiment index
+       private Vector<TmfExperimentCheckpoint> fExperimentIndex = new Vector<TmfExperimentCheckpoint>();
 
-                       @Override
-                       public void handleSuccess() {
-                               long indexingEnd = System.nanoTime();
-
-                               updateExperiment();
-//                                     experiment.fCheckpoints = new Vector<TmfCheckpoint>();
-//                     for (int i = 0; i < fCheckpoints.size(); i++) {
-//                             TmfCheckpoint checkpoint = fCheckpoints.get(i).clone();
-//                             experiment.fCheckpoints.add(checkpoint);
-//                             System.out.println("fCheckpoints[" + i + "] " + checkpoint.getTimestamp() + ", " + checkpoint.getLocation().toString());
-//                     }
-
-//                     clone.dispose();
-//                     if (Tracer.INTERNALS) Tracer.trace(getName() + ": nbEvents=" + nbEvents + " (" + ((indexingEnd-indexingStart)/nbEvents)+ " ns/evt), start=" + startTime + ", end=" + lastTime);
-
-               System.out.println(getName() + ": start=" + startTime + ", end=" + lastTime + ", elapsed=" + (indexingEnd*1.0 - indexingStart) / 1000000000);
-               System.out.println(getName() + ": nbEvents=" + fNbEvents + " (" + ((indexingEnd-indexingStart)/nbEvents)+ " ns/evt)");
-//             for (int i = 0; i < experiment.fCheckpoints.size(); i++) {
-//                     TmfCheckpoint checkpoint = experiment.fCheckpoints.get(i);
-//                     System.out.println("fCheckpoints[" + i + "] " + checkpoint.getTimestamp() + ", " + checkpoint.getLocation().toString());
-//             }
-                       }
+       // Indicates that an indexing job is already running
+       private Boolean fIndexing = false;
+       private Boolean fIndexed  = false;
 
-                       private void updateExperiment() {
-                               if (experiment == fCurrentExperiment)
-                                       experiment.fTimeRange   = new TmfTimeRange(startTime, new TmfTimestamp(lastTime));
-                                       experiment.fNbEvents    = nbEvents;
-                                       experiment.fCheckpoints = ((TmfExperiment<T>) fClone).fCheckpoints;
-                                       notifyListeners();
+       // The indexing job
+       private IndexingJob job;
+
+       /**
+        * indexExperiment
+        * 
+        * Creates the experiment index.
+        */
+       public void indexExperiment(boolean waitForCompletion) {
+
+               synchronized(fIndexing) {
+                       if (fIndexed || fIndexing) {
+                               // An indexing job is already running but a new request came
+                               // in (probably due to a change in the trace set). The index
+                               // being currently built is therefore already invalid.
+                               // TODO: Cancel and restart the job
+                               // TODO: Add support for dynamically adding/removing traces
+                               return;
                        }
-               };
+                       fIndexing = true;
+               }
 
-               sendRequest((ITmfDataRequest<T>) request, ExecutionType.LONG);
-       }
-       
-       protected void notifyListeners() {
-       broadcast(new TmfExperimentUpdatedSignal(this, this, null));
+               job = new IndexingJob(fExperimentId);
+               job.schedule();
+
+       if (waitForCompletion) {
+               try {
+                       job.join();
+               } catch (InterruptedException e) {
+                       e.printStackTrace();
+               }
+       }
        }
-   
+
+       private class IndexingJob extends Job {
+
+               public IndexingJob(String name) {
+                       super(name);
+               }
+
+               /* (non-Javadoc)
+                * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+                */
+               @Override
+               protected IStatus run(IProgressMonitor monitor) {
+
+                       // Minimal check
+                       if (fTraces.size() == 0) {
+                   fIndexing = false;
+                               return Status.OK_STATUS;
+                       }
+
+                       monitor.beginTask("Indexing " + fExperimentId, IProgressMonitor.UNKNOWN);
+
+            int nbEvents = 0;
+            TmfTimestamp startTime = null;
+            TmfTimestamp lastTime  = null;
+
+            fExperimentIndex = new Vector<TmfExperimentCheckpoint>();
+            
+            try {
+               // Reset the traces
+                       TmfExperimentContext context = new TmfExperimentContext(fTraces);
+                       positionTraces(0, context);
+                       TmfTraceContext[] traces = context.cloneContexts();
+
+                       TmfTimestamp timestamp = getNextEventTimestamp(context);
+                startTime = new TmfTimestamp(timestamp);
+                lastTime  = new TmfTimestamp(timestamp);
+                TmfEvent event = getNextEvent(context);
+                while (event != null) {
+                               if ((nbEvents++ % fIndexPageSize) == 0) {
+                                       fExperimentIndex.add(new TmfExperimentCheckpoint(lastTime, traces));
+                               fNbEvents = nbEvents;
+                               fTimeRange = new TmfTimeRange(startTime, lastTime);
+
+                        monitor.worked(1);
+
+                        // Check monitor *after* fCheckpoints has been updated
+                        if (monitor.isCanceled()) {
+                            monitor.done();
+                               return Status.CANCEL_STATUS;
+                        }
+                    }
+
+                    // We will need the contexts at the next iteration
+                    if ((nbEvents % fIndexPageSize) == 0) {
+                                       traces = context.cloneContexts();
+                                       lastTime = new TmfTimestamp(event.getTimestamp());
+                               }
+
+                               event = getNextEvent(context);
+                }
+
+            }
+            finally {
+                synchronized(this) {
+                       fNbEvents = nbEvents;
+                       fTimeRange = new TmfTimeRange(startTime, lastTime);
+                       fIndexing = false;
+                       fIndexed = true;
+                }
+                monitor.done();
+            }
+
+//            dumpExperimentCheckpoints();
+
+            return Status.OK_STATUS;
+               }
+    }
+
+//     // ------------------------------------------------------------------------
+//     // Toubleshooting code
+//     // ------------------------------------------------------------------------
+//
+//     private void dumpExperimentCheckpoints() {
+//             System.out.println("-----");
+//             System.out.println("Checkpoints of " + fExperimentId);
+//             for (int i = 0; i < fExperimentIndex.size(); i++) {
+//             System.out.println("Entry:" + i);
+//             TmfExperimentCheckpoint checkpoint = fExperimentIndex.get(i);
+//             TmfTraceContext[] contexts = checkpoint.getContexts();
+//             for (int j = 0; j < contexts.length; j++) {
+//                     ITmfTrace trace = fTraces.get(j);
+//             TmfTraceContext context = trace.seekLocation(contexts[j].getLocation());
+//             TmfEvent event = fTraces.get(j).getNextEvent(new TmfTraceContext(context));
+//             System.out.println("  ["  + trace.getName() + "] rank: " + context.getRank() + ", timestamp: " + event.getTimestamp());
+//             assert (checkpoint.getTimestamp().compareTo(event.getTimestamp(), false) == 0);
+//             }
+//        }
+//     }
+
     // ------------------------------------------------------------------------
     // Signal handlers
     // ------------------------------------------------------------------------
 
     @TmfSignalHandler
-    public void experimentSelected(TmfExperimentSelectedSignal<T> signal) {
-       TmfExperiment<?> experiment = signal.getExperiment();
-       if (experiment == this) {
-               setCurrentExperiment(experiment);
-               indexExperiment();
-       }
-       else {
-               dispose();
-       }
+    public void experimentSelected(TmfExperimentSelectedSignal signal) {
+               fCurrentExperiment = signal.getExperiment();
+//     if (signal.getExperiment() == this) {
+//             indexExperiment(true);
+//     }
     }
 
     @TmfSignalHandler
     public void experimentUpdated(TmfExperimentUpdatedSignal signal) {
+//     indexExperiment(true);
     }
 
     @TmfSignalHandler
index f93ccb4f19e86d71a2eb586305b9fc38fb1bba69..5d52e65799810fb74f92218c28e5a4dca1d652cf 100644 (file)
@@ -13,7 +13,7 @@
 package org.eclipse.linuxtools.tmf.experiment;
 
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
-import org.eclipse.linuxtools.tmf.trace.TmfContext;
+import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
 
 /**
  * <b><u>TmfExperimentCheckpoint</u></b>
@@ -27,7 +27,7 @@ public class TmfExperimentCheckpoint implements Comparable<TmfExperimentCheckpoi
     // ------------------------------------------------------------------------
     
     private final TmfTimestamp fTimestamp;
-    private final TmfContext[] fContexts;
+    private final TmfTraceContext[] fContexts;
 
     // ------------------------------------------------------------------------
     // Constructors
@@ -37,7 +37,7 @@ public class TmfExperimentCheckpoint implements Comparable<TmfExperimentCheckpoi
      * @param ts
      * @param location
      */
-    public TmfExperimentCheckpoint(TmfTimestamp ts, TmfContext[] contexts) {
+    public TmfExperimentCheckpoint(TmfTimestamp ts, TmfTraceContext[] contexts) {
         fTimestamp = ts;
         fContexts = contexts;
     }
@@ -56,30 +56,10 @@ public class TmfExperimentCheckpoint implements Comparable<TmfExperimentCheckpoi
     /**
      * @return the checkpoint event stream location
      */
-    public TmfContext[] getContexts() {
+    public TmfTraceContext[] getContexts() {
         return fContexts;
     }
 
-    // ------------------------------------------------------------------------
-    // Object
-    // ------------------------------------------------------------------------
-
-    @Override
-    public int hashCode() {
-       int result = 37;
-       result = 17 * result + fTimestamp.hashCode();
-       return result;
-    }
-    @Override
-    public boolean equals(Object other) {
-       if (!(other instanceof TmfExperimentCheckpoint)) {
-               return false;
-       }
-       TmfExperimentCheckpoint o = (TmfExperimentCheckpoint) other;
-       return fTimestamp.equals(o.fTimestamp);
-    }
     // ------------------------------------------------------------------------
     // Comparable
     // ------------------------------------------------------------------------
index 6814225db83ad67e776585cd09924c38c3be9b7d..c868d0bc16ee383bde8f5413e149c191aa44fc87 100644 (file)
 
 package org.eclipse.linuxtools.tmf.experiment;
 
+import java.util.Vector;
+
+import org.eclipse.linuxtools.tmf.component.ITmfContext;
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
-import org.eclipse.linuxtools.tmf.trace.ITmfLocation;
 import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
-import org.eclipse.linuxtools.tmf.trace.TmfContext;
+import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
 
 /**
  * <b><u>TmfExperimentContext</u></b>
  * <p>
- * The experiment keeps track of the next event from each of its traces so
- * it can pick the next one in chronological order.
- * <p>
- * This implies that the "next" event from each trace has already been
- * read and that we at least know its timestamp. This doesn't imply that a
- * full parse of the event content was performed (read: LTTng works like 
- * this).
- * <p>
- * The last trace refers to the trace from which the last event was
- * "consumed" at the experiment level.
+ * Implement me. Please.
  */
-public class TmfExperimentContext extends TmfContext {
-
-       // ------------------------------------------------------------------------
-       // Constants
-       // ------------------------------------------------------------------------
-       
-        public static final int NO_TRACE = -1;
-
-       // ------------------------------------------------------------------------
-       // Attributes
-       // ------------------------------------------------------------------------
-
-       private ITmfTrace[]  fTraces = new ITmfTrace[0];
-       private TmfContext[] fContexts;
-       private TmfEvent[]   fEvents;
-       private int lastTrace;
+public class TmfExperimentContext implements ITmfContext, Cloneable {
 
-       // ------------------------------------------------------------------------
-       // Constructors
-       // ------------------------------------------------------------------------
+       private ITmfTrace[]       fTraces = new ITmfTrace[0];   // The set of traces
+       private TmfTraceContext[] fContexts;                                    // The set of trace contexts
+       private TmfEvent[]        fEvents;
 
-       public TmfExperimentContext(ITmfTrace[] traces, TmfContext[] contexts) {
-               super();
-               fTraces   = traces;
-               fContexts = contexts;
+       public TmfExperimentContext(Vector<ITmfTrace> traces) {
+               fTraces   = traces.toArray(fTraces);
+               fContexts = new TmfTraceContext[fTraces.length];
                fEvents   = new TmfEvent[fTraces.length];
+       }
 
-               ITmfLocation<?>[] locations = new ITmfLocation[fTraces.length];
-               long[] ranks = new long[fTraces.length];
-               long rank = 0;
-               for (int i = 0; i < fTraces.length; i++) {
-                       if (contexts[i] != null) {
-                               locations[i] = contexts[i].getLocation();
-                               ranks[i] = contexts[i].getRank();
-                               rank += contexts[i].getRank();
-                       }
+       public TmfExperimentContext clone() {
+               try {
+                       return (TmfExperimentContext) super.clone();
+               } catch (CloneNotSupportedException e) {
+                       e.printStackTrace();
                }
-               
-               setLocation(new TmfExperimentLocation(locations, ranks));
-               setRank(rank);
-               lastTrace = NO_TRACE;
+               return null;
        }
 
-       public TmfExperimentContext(ITmfTrace[] traces) {
-               this(traces, new TmfContext[traces.length]);
+       public ITmfTrace[] getTraces() {
+               return fTraces;
        }
 
-       public TmfExperimentContext(TmfExperimentContext other) {
-               this(other.fTraces, other.cloneContexts());
-               fEvents = other.fEvents;
-               setLocation(other.getLocation().clone());
-               setRank(other.getRank());
-               setLastTrace(other.lastTrace);
+       public TmfTraceContext[] getContexts() {
+               return fContexts;
        }
 
-       private TmfContext[] cloneContexts() {
-               TmfContext[] contexts = new TmfContext[fContexts.length];
+       public TmfTraceContext[] cloneContexts() {
+               TmfTraceContext[] contexts = new TmfTraceContext[fContexts.length];
                for (int i = 0; i < fContexts.length; i++)
                        contexts[i] = fContexts[i].clone();
                return contexts;
        }
 
-       // ------------------------------------------------------------------------
-       // Accessors
-       // ------------------------------------------------------------------------
-
-       public ITmfTrace[] getTraces() {
-               return fTraces;
-       }
-
-       public TmfContext[] getContexts() {
-               return fContexts;
-       }
-
        public TmfEvent[] getEvents() {
                return fEvents;
        }
 
-       public int getLastTrace() {
-               return lastTrace;
-       }
-
-       public void setLastTrace(int newIndex) {
-               lastTrace = newIndex;
-       }
-
 }
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperimentSelectedSignal.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperimentSelectedSignal.java
new file mode 100644 (file)
index 0000000..3917bae
--- /dev/null
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.experiment;
+
+import org.eclipse.linuxtools.tmf.event.TmfEvent;
+import org.eclipse.linuxtools.tmf.signal.TmfSignal;
+
+/**
+ * <b><u>TmfExperimentSelectedSignal</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class TmfExperimentSelectedSignal extends TmfSignal {
+
+       private final TmfExperiment<? extends TmfEvent> fExperiment;
+       
+       public TmfExperimentSelectedSignal(Object source, TmfExperiment<? extends TmfEvent> experiment) {
+               super(source);
+               fExperiment = experiment;
+       }
+
+       public TmfExperiment<? extends TmfEvent> getExperiment() {
+               return fExperiment;
+       }
+
+       @Override
+       public String toString() {
+               return "[TmfExperimentSelectedSignal (" + fExperiment.getExperimentId() + ")]";
+       }
+}
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperimentUpdatedSignal.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/experiment/TmfExperimentUpdatedSignal.java
new file mode 100644 (file)
index 0000000..d01bddd
--- /dev/null
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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:
+ *   Francois Chouinard - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.linuxtools.tmf.experiment;
+
+import org.eclipse.linuxtools.tmf.event.TmfEvent;
+import org.eclipse.linuxtools.tmf.signal.TmfSignal;
+import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
+
+/**
+ * <b><u>TmfExperimentUpdatedSignal</u></b>
+ * <p>
+ * TODO: Implement me. Please.
+ */
+public class TmfExperimentUpdatedSignal extends TmfSignal {
+
+       private final TmfExperiment<? extends TmfEvent> fExperiment;
+       private final ITmfTrace fTrace;
+       
+       public TmfExperimentUpdatedSignal(Object source, TmfExperiment<? extends TmfEvent> experiment, ITmfTrace trace) {
+               super(source);
+               fExperiment = experiment;
+               fTrace = trace;
+       }
+
+       public TmfExperiment<? extends TmfEvent> getExperiment() {
+               return fExperiment;
+       }
+
+       public ITmfTrace getTrace() {
+               return fTrace;
+       }
+
+       /* (non-Javadoc)
+        * @see java.lang.Object#toString()
+        */
+       @Override
+       public String toString() {
+               return "[TmfExperimentUpdatedSignal (" + fExperiment.toString() + ", " + fTrace.toString() + ")]";
+       }
+
+}
index fc6e699f9014abd9fb9ce83b2c0058bb3a7b7029..23d407780feeb8e883b088b15a24b6c2261f3d92 100644 (file)
@@ -16,7 +16,7 @@ import java.io.IOException;
 
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
 import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
-import org.eclipse.linuxtools.tmf.trace.TmfContext;
+import org.eclipse.linuxtools.tmf.trace.TmfTraceContext;
 
 /**
  * <b><u>ITmfEventParser</u></b>
@@ -29,5 +29,5 @@ public interface ITmfEventParser {
      * @return
      * @throws IOException 
      */
-    public TmfEvent parseNextEvent(ITmfTrace stream, TmfContext context) throws IOException;
+    public TmfEvent parseNextEvent(ITmfTrace stream, TmfTraceContext context) throws IOException;
 }
\ No newline at end of file
index 2121336f4f483a870018fe58db1153d85a7a1993..be1b4167ff59be0858695289ddfc50da4a4b60ab 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
 
 package org.eclipse.linuxtools.tmf.request;
 
+import org.eclipse.linuxtools.tmf.event.TmfData;
+
 /**
  * <b><u>ITmfRequestHandler</u></b>
  * <p>
  * TODO: Implement me. Please.
  * @param <V>
  */
-public interface ITmfRequestHandler<T> {
+public interface ITmfRequestHandler<T extends TmfData> {
 
     /**
      * Process the request. The client thread can be suspended until the 
@@ -27,6 +29,5 @@ public interface ITmfRequestHandler<T> {
      * 
      * @param waitForCompletion Suspend the client thread until the request completes 
      */
-    public void processRequest(TmfDataRequest<T> request, boolean waitForCompletion);
-
-}
\ No newline at end of file
+       public void processRequest(TmfDataRequest<T> request, boolean waitForCompletion);
+}
index 7ad4083dcdd7755259e9be922bd4e8a55fda9c91..86a64ab4e29261dd27e1d48caaa907694689b0ff 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
 
 package org.eclipse.linuxtools.tmf.request;
 
-import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
+import org.eclipse.linuxtools.tmf.event.TmfData;
 
 /**
  * <b><u>TmfDataRequest</u></b>
  * <p>
  * TmfDataRequests are used to obtain blocks of contiguous data from a data
- * provider, either all the data within a given time window or n elements
- * starting at a specific timestamp. Open ranges can be used, especially for
- * continuous streaming.
+ * provider. Open ranges can be used, especially for continuous streaming.
  * <p>
- * The request is processed asynchronously by an ITmfRequestProcessor and,
- * as blocks of data become available, the callback handleData() is
- * invoked, synchronously, for each block. When returning from the callback,
- * the data instances go out of scope and become eligible for gc. It is
- * is thus the responsibility of the requester to either copy or keep a
- * reference to the data it wishes to track specifically.
+ * The request is processed asynchronously by a TmfProvider and, as blocks
+ * of data become available, handleData() is invoked synchronously for each
+ * block. Upon return, the data instances go out of scope and become eligible
+ * for gc. It is is thus the responsibility of the requester to either clone
+ * or keep a reference to the data it wishes to track specifically.
  * <p>
- * This data block approach is necessary to avoid  busting the heap for very
- * large trace files. The block size is configurable.
+ * This data block approach is used to avoid  busting the heap for very
+ * large trace files. The block size is configurable. 
  * <p>
- * The ITmfRequestProcessor indicates that the request is completed by
- * calling done(). The request can be canceled at any time with cancel().
+ * The TmfProvider indicates that the request is completed by calling done().
+ * The request can be canceled at any time with cancel().
  * <p>
  * Typical usage:
  *<pre><code><i>TmfTimeWindow range = new TmfTimewindow(...);
- *TmfDataRequest&lt;DataType[]&gt; request = new TmfDataRequest&lt;DataType[]&gt;(range, 0, NB_EVENTS, BLOCK_SIZE) {
+ *TmfDataRequest&lt;DataType[]&gt; request = new TmfDataRequest&lt;DataType[]&gt;(DataType.class, 0, NB_EVENTS, BLOCK_SIZE) {
  *    public void handleData() {
  *         DataType[] data = request.getData();
  *         for (DataType e : data) {
@@ -60,98 +57,86 @@ import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
  *fProcessor.process(request, true);
  *</i></code></pre>
  *
- * TODO: Consider extending DataRequestMonitor from DSF concurrency plugin.
- * The main issue is the slicing of the result in blocks and continuous
- * streams. This would require using a thread executor and to carefully
- * look at setData() and getData().
+ * TODO: Consider decoupling from "time range", "rank", etc and for the more
+ * generic notion of "criteria". This would allow to extend for "time range", etc
+ * instead of providing specialized constructors. This also means removing the
+ * criteria info from the data structure (with the possible exception of fNbRequested).
+ * The nice thing about it is that it would prepare us well for the coming generation
+ * of analysis tools.  
  * 
  * TODO: Implement request failures (codes, etc...)
  */
-public class TmfDataRequest<V> {
+public class TmfDataRequest<T extends TmfData> {
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Constants
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     // The default maximum number of events per chunk
     public static final int DEFAULT_BLOCK_SIZE = 1000;
 
     // The request count for all the events
-    public static final int ALL_EVENTS = -1;
+    public static final int ALL_DATA = Integer.MAX_VALUE;
     
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Attributes
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
-    private final int  fIndex;              // The index (order) of the requested event
-    private final TmfTimeRange fRange;      // The requested events time range
-    private final int  fNbRequestedEvents;  // The number of events to read (-1 == all in the range)
-    private final int  fBlockSize;          // The maximum number of events per chunk
-    private       int  fNbEvents;           // The number of events read so far
+    private final Class<? extends TmfData> fDataType;
+    private final int fIndex;                          // The index (rank) of the requested event
+    private final int fNbRequested;            // The number of requested events (ALL_DATA for all)
+    private final int fBlockSize;              // The maximum number of events per chunk
+    private       int fNbRead;                 // The number of reads so far
 
-    private Object lock = new Object();
+    private Object  lock = new Object();
     private boolean fRequestCompleted = false;
     private boolean fRequestFailed    = false;
     private boolean fRequestCanceled  = false;
 
-    private V[] fData; // Data object
+    private T[] fData; // Data object
     
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Constructors
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     /**
-     * @param index
-     * @param nbEvents
+     * Default constructor
      */
-    public TmfDataRequest(int index, int nbEvents) {
-        this(null, index, nbEvents, DEFAULT_BLOCK_SIZE);
+    public TmfDataRequest(Class<? extends TmfData> dataType) {
+        this(dataType, 0, ALL_DATA, DEFAULT_BLOCK_SIZE);
     }
 
-    public TmfDataRequest(int index, int nbEvents, int blockSize) {
-        this(null, index, nbEvents, blockSize);
-    }
-    
     /**
-     * @param range
+     * @param nbRequested
      */
-    public TmfDataRequest(TmfTimeRange range) {
-        this(range, 0, ALL_EVENTS, DEFAULT_BLOCK_SIZE);
+    public TmfDataRequest(Class<? extends TmfData> dataType, int index) {
+        this(dataType, index, ALL_DATA, DEFAULT_BLOCK_SIZE);
     }
 
     /**
-     * @param range
-     * @param nbEvents
-     */
-    public TmfDataRequest(TmfTimeRange range, int nbEvents) {
-        this(range, 0, nbEvents, DEFAULT_BLOCK_SIZE);
-    }
-    /**
-     * @param range
-     * @param nbEvents
-     * @param blockSize Size of the largest blocks expected
+     * @param index
+     * @param nbRequested
      */
-    public TmfDataRequest(TmfTimeRange range, int nbEvents, int blockSize) {
-        this(range, 0, nbEvents, blockSize);
+    public TmfDataRequest(Class<? extends TmfData> dataType, int index, int nbRequested) {
+        this(dataType, index, nbRequested, DEFAULT_BLOCK_SIZE);
     }
 
     /**
-     * @param range
      * @param index
-     * @param nbEvents
-     * @param blockSize Size of the largest blocks expected
+     * @param nbRequested
+     * @param blockSize
      */
-    private TmfDataRequest(TmfTimeRange range, int index, int nbEvents, int blockSize) {
-       fIndex             = index;
-       fRange             = range;
-       fNbRequestedEvents = nbEvents;
-       fBlockSize         = blockSize;
-       fNbEvents          = 0;
+    public TmfDataRequest(Class<? extends TmfData> dataType, int index, int nbRequested, int blockSize) {
+       fDataType    = dataType;
+       fIndex       = index;
+       fNbRequested = nbRequested;
+       fBlockSize   = blockSize;
+       fNbRead      = 0;
     }
-
-    // ========================================================================
+    
+    // ------------------------------------------------------------------------
     // Accessors
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
        /**
         * @return the index
@@ -161,17 +146,10 @@ public class TmfDataRequest<V> {
        }
 
     /**
-     * @return the requested time range
+     * @return the number of requested events (ALL_DATA = all)
      */
-    public TmfTimeRange getRange() {
-        return fRange;
-    }
-
-    /**
-     * @return the number of requested events (-1 = all)
-     */
-    public int getNbRequestedEvents() {
-        return fNbRequestedEvents;
+    public int getNbRequested() {
+        return fNbRequested;
     }
 
     /**
@@ -184,8 +162,8 @@ public class TmfDataRequest<V> {
     /**
      * @return the number of events read so far
      */
-    public int getNbEvents() {
-        return fNbEvents;
+    public int getNbRead() {
+        return fNbRead;
     }
 
     /**
@@ -209,24 +187,31 @@ public class TmfDataRequest<V> {
         return fRequestCanceled;
     }
 
-    // ========================================================================
+    /**
+     * @return the requested data type
+     */
+    public Class<?> getDataType() {
+        return fDataType;
+    }
+
+    // ------------------------------------------------------------------------
     // Operators
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     /** 
      * Sets the data object to specified value. To be called by the 
      * asynchronous method implementor.
      * @param data Data value to set.
      */
-    public synchronized void setData(V[] data) {
-       fNbEvents += data.length;
+    public synchronized void setData(T[] data) {
+       fNbRead += data.length;
        fData = data;
     }
     
     /**
      * Returns the data value, null if not set.
      */
-    public synchronized V[] getData() {
+    public synchronized T[] getData() {
        return fData;
     }
     
index 9a83500908ba6f46f280f4f8a196431e7dbb43c3..678125cf36e6c17670d6515d4ccb587bd06647eb 100644 (file)
@@ -20,7 +20,7 @@ import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
  * <p>
  * Implement me. Please.
  */
-public abstract class TmfEventRequest<T extends TmfEvent> extends TmfDataRequest<T> implements ITmfEventRequest<T> {
+public class TmfEventRequest<T extends TmfEvent> extends TmfDataRequest<T> {
 
     // ------------------------------------------------------------------------
     // Attributes
@@ -35,14 +35,14 @@ public abstract class TmfEventRequest<T extends TmfEvent> extends TmfDataRequest
     /**
      * @param range
      */
-    public TmfEventRequest(Class<T> dataType) {
+    public TmfEventRequest(Class<? extends TmfEvent> dataType) {
         this(dataType, TmfTimeRange.Eternity, ALL_DATA, DEFAULT_BLOCK_SIZE);
     }
 
     /**
      * @param range
      */
-    public TmfEventRequest(Class<T> dataType, TmfTimeRange range) {
+    public TmfEventRequest(Class<? extends TmfEvent> dataType, TmfTimeRange range) {
         this(dataType, range, ALL_DATA, DEFAULT_BLOCK_SIZE);
     }
 
@@ -50,7 +50,7 @@ public abstract class TmfEventRequest<T extends TmfEvent> extends TmfDataRequest
      * @param range
      * @param nbRequested
      */
-    public TmfEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested) {
+    public TmfEventRequest(Class<? extends TmfEvent> dataType, TmfTimeRange range, int nbRequested) {
         this(dataType, range, nbRequested, DEFAULT_BLOCK_SIZE);
     }
     
@@ -59,7 +59,7 @@ public abstract class TmfEventRequest<T extends TmfEvent> extends TmfDataRequest
      * @param nbRequested
      * @param blockSize Size of the largest blocks expected
      */
-    public TmfEventRequest(Class<T> dataType, TmfTimeRange range, int nbRequested, int blockSize) {
+    public TmfEventRequest(Class<? extends TmfEvent> dataType, TmfTimeRange range, int nbRequested, int blockSize) {
        super(dataType, 0, nbRequested, blockSize);
        fRange = range;
     }
@@ -75,29 +75,4 @@ public abstract class TmfEventRequest<T extends TmfEvent> extends TmfDataRequest
         return fRange;
     }
 
-    // ------------------------------------------------------------------------
-    // Object
-    // ------------------------------------------------------------------------
-
-    @Override
-    // All requests have a unique id
-    public int hashCode() {
-       return getRequestId();
-    }
-
-    @Override
-    public boolean equals(Object other) {
-       if (other instanceof TmfEventRequest<?>) {
-               TmfEventRequest<?> request = (TmfEventRequest<?>) other;
-               return super.equals(other) && request.fRange.equals(fRange);
-       }
-       return false;
-    }
-
-    @Override
-    public String toString() {
-               return "[TmfEventRequest(" + getRequestId() + "," + getDataType().getSimpleName() 
-                       + "," + getRange() + "," + getNbRequested() + "," + getBlockize() + ")]";
-    }
-
 }
index eed39d9a469932e57157fedba3275678c73f880f..c77e22fac1df4eda5ac711bf7bf1f92d6c14b1fc 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -31,27 +31,28 @@ public class TmfSignalManager {
 
        // The set of event listeners and their corresponding handler methods.
        // Note: listeners could be restricted to ITmfComponents but there is no
-       // harm in letting anyone use this
+       // harm in letting anyone use this since it is not tied to anything but
+       // the signal data type.
        static private Map<Object, Method[]> fListeners = new HashMap<Object, Method[]>();
 
        // If requested, add universal signal tracer
-       // TODO: to be revisited... 
+       // TODO: Temporary solution: should be enabled/disabled dynamically 
        private static boolean fTraceIsActive = false;
        private static TmfSignalTracer fSignalTracer;
        static {
                if (fTraceIsActive) {
                        fSignalTracer = TmfSignalTracer.getInstance();
-                       addListener(fSignalTracer);
+                       register(fSignalTracer);
                }
        }
 
-       public static synchronized void addListener(Object listener) {
+       public static synchronized void register(Object listener) {
                Method[] methods = getSignalHandlerMethods(listener);
                if (methods.length > 0)
                        fListeners.put(listener, methods);
        }
 
-       public static synchronized void removeListener(Object listener) {
+       public static synchronized void deregister(Object listener) {
                fListeners.remove(listener);
        }
 
@@ -101,7 +102,7 @@ public class TmfSignalManager {
                        }
                }
 
-               // Call the signal handlers
+               // Call the signal handlers 
                for (Map.Entry<Object, List<Method>> entry : listeners.entrySet()) {
                        for (Method method : entry.getValue()) {
                                try {
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/ITmfEventParser.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/ITmfEventParser.java
deleted file mode 100644 (file)
index 3f3b094..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 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:
- *   Francois Chouinard - Initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.linuxtools.tmf.trace;
-
-import java.io.IOException;
-
-import org.eclipse.linuxtools.tmf.event.TmfEvent;
-
-/**
- * <b><u>ITmfEventParser</u></b>
- * <p>
- * TODO: Implement me. Please.
- */
-public interface ITmfEventParser {
-
-    /**
-     * @return
-     * @throws IOException 
-     */
-    public TmfEvent parseNextEvent(ITmfTrace stream, TmfTraceContext context) throws IOException;
-}
index 6a2a0174cfeb8bc3b21a4ec4be0a6f77fef50c6e..bf4d9fb7c07cfcd544a9f79ce4f7af716c8e8099 100644 (file)
@@ -66,4 +66,12 @@ public interface ITmfTrace {
      */
     public TmfEvent getNextEvent(TmfTraceContext context);
 
+    /**
+     * Return the event pointed by the supplied context (or null if
+     * no event left) and *does not* update the context.
+     * 
+     * @return the next event in the stream
+     */
+    public TmfEvent parseEvent(TmfTraceContext context);
+
 }
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfExperiment.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfExperiment.java
deleted file mode 100644 (file)
index a36caa0..0000000
+++ /dev/null
@@ -1,623 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 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:
- *   Francois Chouinard - Initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.linuxtools.tmf.trace;
-
-import java.util.Vector;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.linuxtools.tmf.component.TmfComponent;
-import org.eclipse.linuxtools.tmf.event.TmfEvent;
-import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
-import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
-import org.eclipse.linuxtools.tmf.request.ITmfRequestHandler;
-import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
-import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;
-
-/**
- * <b><u>TmfExperiment</u></b>
- * <p>
- * TmfExperiment presents a time-ordered, unified view of a set of TmfTraces
- * that are part of a tracing experiment. 
- * <p>
- */
-public class TmfExperiment extends TmfComponent implements ITmfRequestHandler<TmfEvent> {
-
-// TODO: Complete multi-trace experiment
-// TODO: Add support for dynamic addition/removal of traces
-// TODO: Add support for live streaming (notifications, incremental indexing, ...)
-
-       // ========================================================================
-    // Attributes
-    // ========================================================================
-
-       // The currently selected experiment
-    private static TmfExperiment fCurrentExperiment;
-
-       // The experiment ID
-    private String fExperimentId;
-
-    // The set of trace sthat constitute the experiment
-    private Vector<ITmfTrace> fTraces;
-
-    // The total number of events
-    private int fNbEvents;
-
-    // The experiment time range
-    private TmfTimeRange fTimeRange;
-
-    // The experiment reference timestamp (default: BigBang)
-    private TmfTimestamp fEpoch;
-
-//    // Indicates if the stream should be indexed synchronously (default: false)
-//    private final boolean fWaitForIndexCompletion;
-
-    // ========================================================================
-    // Constructors/Destructor
-    // ========================================================================
-
-    /**
-     * @param id
-     * @param traces
-     */
-    public TmfExperiment(String id, ITmfTrace[] traces) {
-        this(id, traces, TmfTimestamp.BigBang, DEFAULT_INDEX_PAGE_SIZE, false);
-    }
-
-    /**
-     * @param id
-     * @param traces
-     * @param waitForIndexCompletion
-     */
-    public TmfExperiment(String id, ITmfTrace[] traces, boolean waitForIndexCompletion) {
-        this(id, traces, TmfTimestamp.BigBang, DEFAULT_INDEX_PAGE_SIZE, waitForIndexCompletion);
-    }
-
-    /**
-     * @param id
-     * @param traces
-     * @param epoch
-     * @param waitForIndexCompletion
-     */
-    public TmfExperiment(String id, ITmfTrace[] traces, TmfTimestamp epoch, int indexPageSize, boolean waitForIndexCompletion) {
-       super();
-
-       fExperimentId = id;
-       fTraces = new Vector<ITmfTrace>();
-       for (ITmfTrace trace : traces) {
-               fTraces.add(trace);
-       }
-       fEpoch = epoch;
-       fIndexPageSize = indexPageSize;
-//        fWaitForIndexCompletion = waitForIndexCompletion;
-
-               updateNbEvents();
-               updateTimeRange();
-//             indexExperiment();
-    }
-
-    /**
-     * 
-     */
-    @Override
-       public void dispose() {
-        super.dispose();
-       fTraces.clear();
-       fCurrentExperiment= null;
-    }
-
-    // ========================================================================
-    // Accessors
-    // ========================================================================
-
-    public static TmfExperiment getCurrentExperiment() {
-       return fCurrentExperiment;
-    }
-
-    public String getExperimentId() {
-       return fExperimentId;
-    }
-
-    public ITmfTrace[] getTraces() {
-       ITmfTrace[] result = new ITmfTrace[fTraces.size()];
-       return fTraces.toArray(result);
-    }
-
-    public TmfTimestamp getEpoch() {
-       return fEpoch;
-    }
-
-    public TmfTimeRange getTimeRange() {
-       return fTimeRange;
-    }
-
-    public int getNbEvents() {
-       return fNbEvents;
-    }
-
-    /**
-     * Returns the index of the first event with the requested timestamp.
-     * If none, returns the index of the next event (if any).
-     *  
-     * @param ts
-     * @return
-     */
-    public long getIndex(TmfTimestamp ts) {
-        // TODO: Go over all the traces
-       ITmfTrace trace = fTraces.firstElement();
-       TmfTraceContext context = trace.seekEvent(ts);
-       return context.getIndex();
-    }
-
-    /**
-     * Returns the timestamp of the event at the requested index.
-     * If none, returns null.
-     *  
-     * @param index
-     * @return
-     */
-    public TmfTimestamp getTimestamp(int index) {
-        // TODO: Go over all the traces
-       ITmfTrace trace = fTraces.firstElement();
-       TmfTraceContext context = trace.seekEvent(index);
-       return context.getTimestamp();
-    }
-
-    // ========================================================================
-    // Operators
-    // ========================================================================
-
-    /**
-     * Add a trace to the experiment trace set
-     * 
-     * @param trace
-     */
-    public void addTrace(ITmfTrace trace) {
-               fTraces.add(trace);
-               synchronized(this) {
-                       updateNbEvents();
-                       updateTimeRange();
-               }
-    }
-
-    /**
-     * Update the total number of events
-     */
-    private void updateNbEvents() {
-       int nbEvents = 0;
-       for (ITmfTrace trace : fTraces) {
-               nbEvents += trace.getNbEvents();
-       }
-       fNbEvents = nbEvents;
-    }
-
-    /**
-     * Update the global time range
-     */
-    private void updateTimeRange() {
-               TmfTimestamp startTime = fTimeRange != null ? fTimeRange.getStartTime() : TmfTimestamp.BigCrunch;
-               TmfTimestamp endTime   = fTimeRange != null ? fTimeRange.getEndTime()   : TmfTimestamp.BigBang;
-
-               for (ITmfTrace trace : fTraces) {
-               TmfTimestamp traceStartTime = trace.getTimeRange().getStartTime();
-               if (traceStartTime.compareTo(startTime, true) < 0)
-                       startTime = traceStartTime;
-
-               TmfTimestamp traceEndTime = trace.getTimeRange().getEndTime();
-               if (traceEndTime.compareTo(endTime, true) > 0)
-                       endTime = traceEndTime;
-       }
-               fTimeRange = new TmfTimeRange(startTime, endTime);
-    }
-
-    // ========================================================================
-    // ITmfRequestHandler
-    // ========================================================================
-
-       /* (non-Javadoc)
-        * @see org.eclipse.linuxtools.tmf.request.ITmfRequestHandler#processRequest(org.eclipse.linuxtools.tmf.request.TmfDataRequest, boolean)
-        */
-       public void processRequest(TmfDataRequest<TmfEvent> request, boolean waitForCompletion) {
-
-               // Process the request
-               processDataRequest(request);
-               
-               // Wait for completion if needed
-       if (waitForCompletion) {
-                       request.waitForCompletion();
-               }
-       }
-
-       /**
-        * Process a data request
-        * 
-        * @param request
-        */
-       private void processDataRequest(final TmfDataRequest<TmfEvent> request) {
-
-               // General request parameters
-               final TmfTimestamp endTime;
-               final long index;
-
-               // Initialize request params depending on request type
-               if (request.getRange() != null) {
-                       index = getIndex(request.getRange().getStartTime());
-                       endTime = request.getRange().getEndTime();
-       } else {
-               index = request.getIndex();
-               endTime = TmfTimestamp.BigCrunch;
-       }
-
-               // Process the request
-               Thread thread = new Thread() {
-
-                       @Override
-                       public void run() {
-
-                               // Key variables
-                               ITmfTrace[] traces = new ITmfTrace[0];  // The set of traces
-                               TmfTraceContext[] contexts;                             // The set of trace contexts
-
-                               // Extract the general request information
-                               int blockSize = request.getBlockize();
-                               int nbRequestedEvents = request.getNbRequestedEvents();
-                               if (nbRequestedEvents == -1) {
-                                       nbRequestedEvents = Integer.MAX_VALUE;
-                               }
-
-                               // Create the result buffer
-                               Vector<TmfEvent> events = new Vector<TmfEvent>();
-                               int nbEvents = 0;
-
-                               // Initialize the traces array and position the traces
-                               // at the first requested event
-                               traces = fTraces.toArray(traces);
-                               contexts = new TmfTraceContext[traces.length];
-                               positionTraces(index, traces, contexts);
-
-                               // Get the ordered events
-                               TmfEvent event = getNextEvent(traces, contexts);
-                               while (!request.isCancelled() && nbEvents < nbRequestedEvents && event != null
-                                               && event.getTimestamp().compareTo(endTime, false) < 0)
-                               {
-                                       events.add(event);
-                                       if (++nbEvents % blockSize == 0) {
-                                               pushData(request, events);
-                                       }
-                                       // Avoid an unnecessary read passed the last event requested
-                                       if (nbEvents < nbRequestedEvents)
-                                               event = getNextEvent(traces, contexts);
-                               }
-
-                               if (!request.isCancelled() && !request.isFailed()) {
-                                       pushData(request, events);
-                                       request.done();
-                               }
-                       }
-               };
-               thread.start();
-       }
-
-       /**
-        * Given an experiment event index, position the set of traces so a call
-        * to getNextEvent() will retrieve the corresponding event.
-        * 
-        * @param index
-        * @param traces
-        * @param contexts
-        * @param nextEvents
-        */
-       private synchronized void positionTraces(long index, ITmfTrace[] traces, TmfTraceContext[] contexts) {
-
-               // Compute the index page and corresponding index
-               int page = (int) index / fIndexPageSize;
-               int current = page * fIndexPageSize;
-
-               // Retrieve the checkpoint and set the contexts (make copies)
-               TmfTraceContext[] saveContexts = new TmfTraceContext[contexts.length];
-               if (page < fExperimentIndex.size()) {
-                       saveContexts = fExperimentIndex.elementAt(page);
-                       for (int i = 0; i < contexts.length; i++) {
-                               contexts[i] = new TmfTraceContext(saveContexts[i]);
-                       }
-               } else {
-                       // If the page entry doesn't exist (e.g. indexing not completed),
-                       // set contexts at the the last entry (if it exists)
-                       page = fExperimentIndex.size() - 1;
-                       if (page >= 0) {
-                               saveContexts = fExperimentIndex.elementAt(page);
-                               for (int i = 0; i < contexts.length; i++) {
-                                       contexts[i] = new TmfTraceContext(saveContexts[i]);
-                               }
-                               current = page * fIndexPageSize;
-                       }
-                       // Index is empty... position traces at their beginning
-                       else {
-                               for (int i = 0; i < contexts.length; i++) {
-                                       contexts[i] = new TmfTraceContext(traces[i].seekLocation(null));
-                               }
-                               current = 0;
-                       }
-               }
-
-               // Position the traces at the requested index
-               while (current++ < index) {
-                       getNextEvent(traces, contexts);
-               }
-       }
-
-       /**
-        * Scan the next events from all traces and return the next one
-        * in chronological order.
-        * 
-        * @param traces
-        * @param contexts
-        * @param nextEvents
-        * @return
-        */
-       private TmfEvent getNextEvent(ITmfTrace[] traces, TmfTraceContext[] contexts) {
-               // TODO: Consider the time adjustment
-               int trace = 0;
-               TmfTimestamp timestamp = contexts[trace].getTimestamp();
-               if (timestamp == null) {
-                       timestamp = TmfTimestamp.BigCrunch;
-               }
-               for (int i = 1; i < traces.length; i++) {
-                       if (contexts[i].getTimestamp() != null) {
-                               TmfTimestamp otherTS = contexts[i].getTimestamp();
-                               if (otherTS.compareTo(timestamp, true) < 0) {
-                                       trace = i;
-                                       timestamp = otherTS;
-                               }
-                       }
-               }
-               TmfEvent event = traces[trace].getNextEvent(contexts[trace]);
-               return event;
-       }
-
-       /**
-        * Format the result data and notify the requester.
-        * Note: after handling, the data is *removed*.
-        * 
-        * @param request
-        * @param events
-        */
-       private void pushData(TmfDataRequest<TmfEvent> request, Vector<TmfEvent> events) {
-               TmfEvent[] result = new TmfEvent[events.size()];
-               events.toArray(result);
-               request.setData(result);
-               request.handleData();
-               events.removeAllElements();
-       }
-
-       /* (non-Javadoc)
-        * @see java.lang.Object#toString()
-        */
-       @Override
-       public String toString() {
-               return "[TmfExperiment (" + fExperimentId + ")]";
-       }
-
-    // ========================================================================
-    // Indexing
-    // ========================================================================
-
-       /*
-        * The experiment holds the globally ordered events of its set of traces.
-        * It is expected to provide access to each individual event by index i.e.
-        * it must be possible to request the Nth event of the experiment.
-        * 
-        * The purpose of the index is to keep the information needed to rapidly
-        * restore the traces contexts at regular intervals (every INDEX_PAGE_SIZE
-        * event).
-        */
-
-       // The index page size
-       private static final int DEFAULT_INDEX_PAGE_SIZE = 1000;
-       private final int fIndexPageSize;
-
-       // The experiment index
-       private Vector<TmfTraceContext[]> fExperimentIndex = new Vector<TmfTraceContext[]>();
-
-       // Indicates that an indexing job is already running
-       private Boolean fIndexing = false;
-
-       // The indexing job
-       private IndexingJob job;
-
-       /**
-        * indexExperiment
-        * 
-        * Creates the experiment index.
-        */
-       private void indexExperiment() {
-
-               synchronized(fIndexing) {
-                       if (fIndexing) {
-                               // An indexing job is already running but a new request came
-                               // in (probably due to a change in the trace set). The index
-                               // being currently built is therefore already invalid.
-                               // TODO: Cancel and restart the job
-                               // TODO: Add support for dynamically adding/removing traces
-                               return;
-                       }
-                       fIndexing = true;
-               }
-
-               job = new IndexingJob(fExperimentId);
-               job.schedule();
-               try {
-                       job.join();
-               } catch (InterruptedException e) {
-                       // TODO Auto-generated catch block
-                       e.printStackTrace();
-               }
-//             if (fWaitForIndexCompletion) {
-//             ProgressMonitorDialog dialog = new ProgressMonitorDialog(null);
-//             try {
-//                             // TODO: Handle cancel!
-//                 dialog.run(true, true, new IRunnableWithProgress() {
-//                     public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-//                         monitor.beginTask("Indexing " + fExperimentId, IProgressMonitor.UNKNOWN);
-//                                     job.join();
-//                         monitor.done();
-//                     }
-//                 });
-//             } catch (InvocationTargetException e) {
-//                 e.printStackTrace();
-//             } catch (InterruptedException e) {
-//                 e.printStackTrace();
-//             }
-//             }
-       }
-
-       private class IndexingJob extends Job {
-
-               public IndexingJob(String name) {
-                       super(name);
-               }
-
-               /* (non-Javadoc)
-                * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
-                */
-               @Override
-               protected IStatus run(IProgressMonitor monitor) {
-
-                       Vector<TmfTraceContext[]> indices = new Vector<TmfTraceContext[]>();
-                       
-                       // Minimal check
-                       if (fTraces.size() == 0) {
-                   fIndexing = false;
-                               return Status.OK_STATUS;
-                       }
-
-                       monitor.beginTask("Indexing " + fExperimentId, IProgressMonitor.UNKNOWN);
-
-               ITmfTrace[] traces = new ITmfTrace[0];
-               TmfTraceContext[] contexts;
-               int nbTraces = fTraces.size();
-
-               // Initialize the traces and contexts arrays
-               traces = fTraces.toArray(traces);
-               contexts = new TmfTraceContext[nbTraces];
-               TmfTraceContext[] savedContexts = new TmfTraceContext[nbTraces];
-                       int nullEvents = 0;
-               for (int i = 0; i < nbTraces; i++) {
-                       // Context of the first event of the trace
-                       contexts[i] = traces[i].seekLocation(null);
-                       savedContexts[i] = new TmfTraceContext(contexts[i].getLocation(), contexts[i].getTimestamp(), 0);
-                       if (contexts[i].getTimestamp() == null)
-                               nullEvents++;
-               }
-               // Check if there is anything to index
-               if (nullEvents >= nbTraces) {
-                   fIndexing = false;
-                               return Status.OK_STATUS;
-               }
-               // FIXME: LTTng hack - start
-//                     indices.add(savedContexts);     // TMF
-               // FIXME: LTTng hack - end
-               
-               // Get the ordered events and populate the indices
-               // FIXME: LTTng hack - start
-//             int nbEvents = 0; // TMF
-               int nbEvents = -1; // LTTng
-               // FIXME: LTTng hack - end
-               while ((getNextEvent(traces, contexts)) != null)
-               {
-                       if (++nbEvents % fIndexPageSize == 0) {
-                               // Special case: if the total number of events is a multiple of the
-                               // DEFAULT_PAGE_SIZE then all the pending events are null. In that
-                               // case, we don't store an additional entry in the index array.
-                               nullEvents = 0;
-                               savedContexts = new TmfTraceContext[nbTraces];
-                       for (int i = 0; i < nbTraces; i++) {
-                               savedContexts[i] = new TmfTraceContext(contexts[i]);
-                               if (contexts[i].getTimestamp() ==  null)
-                                       nullEvents++;
-                       }
-                       if (nullEvents < nbTraces) {
-                               indices.add(savedContexts);
-                       }
-                       }
-
-                       monitor.worked(1);
-                if (monitor.isCanceled()) {
-                    monitor.done();
-                       return Status.CANCEL_STATUS;
-                }
-               }
-
-            monitor.done();
-            fExperimentIndex = indices;
-
-//            dumpIndex();
-
-            fIndexing = false;
-            return Status.OK_STATUS;
-               }
-    }
-
-//     /**
-//      * Dump the experiment index
-//      */
-//     private void dumpIndex() {
-//             System.out.println("-----");
-//             System.out.println("Index of " + fExperimentId);
-//             for (int i = 0; i < fExperimentIndex.size(); i++) {
-//             System.out.println("Entry:" + i);
-//             TmfTraceContext[] contexts = fExperimentIndex.get(i);
-//             int nbEvents = 0;
-//             for (int j = 0; j < contexts.length; j++) {
-//                     ITmfTrace trace = fTraces.get(j);
-//             TmfTraceContext context = trace.seekLocation(contexts[j].getLocation());
-//             TmfEvent event = fTraces.get(j).getNextEvent(new TmfTraceContext(context));
-//             nbEvents += contexts[j].getIndex();
-//             System.out.println("  ["  + trace.getName() + "]" 
-//                             +  " index: "     + contexts[j].getIndex()
-//                             + ", timestamp: " + contexts[j].getTimestamp()
-//                             + ", event: "     + event.getTimestamp());
-//             assert (contexts[j].getTimestamp().compareTo(event.getTimestamp(), false) == 0);
-//             }
-//             assert ((i+1) * fIndexPageSize == nbEvents);
-//     
-//        }
-//     }
-
-    // ========================================================================
-    // Signal handlers
-    // ========================================================================
-
-    @TmfSignalHandler
-    public void experimentSelected(TmfExperimentSelectedSignal signal) {
-               fCurrentExperiment = this;
-       indexExperiment();
-    }
-
-    @TmfSignalHandler
-    public void experimentUpdated(TmfExperimentUpdatedSignal signal) {
-//     indexExperiment();
-    }
-
-    @TmfSignalHandler
-    public void traceUpdated(TmfTraceUpdatedSignal signal) {
-       // TODO: Incremental index update
-       synchronized(this) {
-               updateNbEvents();
-               updateTimeRange();
-       }
-               broadcastSignal(new TmfExperimentUpdatedSignal(this, this, signal.getTrace()));
-    }
-}
\ No newline at end of file
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfExperimentSelectedSignal.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfExperimentSelectedSignal.java
deleted file mode 100644 (file)
index bff74dd..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 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:
- *   Francois Chouinard - Initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.linuxtools.tmf.trace;
-
-import org.eclipse.linuxtools.tmf.signal.TmfSignal;
-
-/**
- * <b><u>TmfExperimentSelectedSignal</u></b>
- * <p>
- * TODO: Implement me. Please.
- */
-public class TmfExperimentSelectedSignal extends TmfSignal {
-
-       private final TmfExperiment fExperiment;
-       
-       public TmfExperimentSelectedSignal(Object source, TmfExperiment experiment) {
-               super(source);
-               fExperiment = experiment;
-       }
-
-       public TmfExperiment getExperiment() {
-               return fExperiment;
-       }
-
-       @Override
-       public String toString() {
-               return "[TmfExperimentSelectedSignal (" + fExperiment.getExperimentId() + ")]";
-       }
-}
diff --git a/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfExperimentUpdatedSignal.java b/org.eclipse.linuxtools.tmf/src/org/eclipse/linuxtools/tmf/trace/TmfExperimentUpdatedSignal.java
deleted file mode 100644 (file)
index 559ce94..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 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:
- *   Francois Chouinard - Initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.linuxtools.tmf.trace;
-
-import org.eclipse.linuxtools.tmf.signal.TmfSignal;
-
-/**
- * <b><u>TmfExperimentUpdatedSignal</u></b>
- * <p>
- * TODO: Implement me. Please.
- */
-public class TmfExperimentUpdatedSignal extends TmfSignal {
-
-       private final TmfExperiment fExperiment;
-       private final ITmfTrace fTrace;
-       
-       public TmfExperimentUpdatedSignal(Object source, TmfExperiment experiment, ITmfTrace trace) {
-               super(source);
-               fExperiment = experiment;
-               fTrace = trace;
-       }
-
-       public TmfExperiment getExperiment() {
-               return fExperiment;
-       }
-
-       public ITmfTrace getTrace() {
-               return fTrace;
-       }
-
-       /* (non-Javadoc)
-        * @see java.lang.Object#toString()
-        */
-       @Override
-       public String toString() {
-               return "[TmfExperimentUpdatedSignal (" + fExperiment.toString() + ", " + fTrace.toString() + ")]";
-       }
-
-}
index 39f52af9e48d4c50c89d45edb9a2b278f09201fd..d76a847a417edac9835726bb76d9f7c2f7d4328d 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -21,12 +21,13 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.linuxtools.tmf.component.TmfComponent;
+import org.eclipse.linuxtools.tmf.component.ITmfContext;
+import org.eclipse.linuxtools.tmf.component.TmfProvider;
 import org.eclipse.linuxtools.tmf.event.TmfEvent;
 import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
-import org.eclipse.linuxtools.tmf.request.ITmfRequestHandler;
 import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
+import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
 
 /**
  * <b><u>TmfTrace</u></b>
@@ -38,18 +39,19 @@ import org.eclipse.linuxtools.tmf.request.TmfDataRequest;
  * 
  * TODO: Add support for live streaming (notifications, incremental indexing, ...)
  */
-public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRequestHandler<TmfEvent> {
+public abstract class TmfTrace<T extends TmfEvent> extends TmfProvider<T> implements ITmfTrace {
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Constants
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     // The default number of events to cache
+       // TODO: Make the DEFAULT_CACHE_SIZE a preference
     public static final int DEFAULT_CACHE_SIZE = 1000;
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Attributes
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     // The trace path
     private final String fPath;
@@ -60,9 +62,6 @@ public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRe
     // The cache page size AND checkpoints interval
     protected int fCacheSize;
 
-    // Indicate if the stream should be pre-indexed
-    private final boolean fWaitForIndexCompletion;
-
     // The set of event stream checkpoints (for random access)
     protected Vector<TmfTraceCheckpoint> fCheckpoints = new Vector<TmfTraceCheckpoint>();
 
@@ -72,54 +71,34 @@ public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRe
     // The time span of the event stream
     private TmfTimeRange fTimeRange = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigBang);
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Constructors
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     /**
-     * @param name
-     * @param pageSize
-     * @param data.index
+     * @param path
+     * @param cacheSize
      * @throws FileNotFoundException
      */
-    protected TmfTrace(String path, int pageSize, boolean waitForIndexCompletion) throws FileNotFoundException {
-       super();
+    protected TmfTrace(Class<T> type, String path, int cacheSize) throws FileNotFoundException {
+       super(type);
        int sep = path.lastIndexOf(File.separator);
        fName = (sep >= 0) ? path.substring(sep + 1) : path;
        fPath = path;
-        fCacheSize = (pageSize > 0) ? pageSize : DEFAULT_CACHE_SIZE;
-        fWaitForIndexCompletion = waitForIndexCompletion;
-    }
-
-    /**
-     * @param name
-     * @param cacheSize
-     * @throws FileNotFoundException
-     */
-    protected TmfTrace(String name, boolean waitForIndexCompletion) throws FileNotFoundException {
-       this(name, DEFAULT_CACHE_SIZE, waitForIndexCompletion);
-    }
-
-    /**
-     * @param name
-     * @param cacheSize
-     * @throws FileNotFoundException
-     */
-    protected TmfTrace(String name, int pageSize) throws FileNotFoundException {
-       this(name, pageSize, false);
+        fCacheSize = (cacheSize > 0) ? cacheSize : DEFAULT_CACHE_SIZE;
     }
 
     /**
-     * @param name
+     * @param path
      * @throws FileNotFoundException
      */
-    protected TmfTrace(String name) throws FileNotFoundException {
-       this(name, DEFAULT_CACHE_SIZE, false);
+    protected TmfTrace(Class<T> type, String path) throws FileNotFoundException {
+       this(type, path, DEFAULT_CACHE_SIZE);
     }
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Accessors
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     /**
      * @return the trace path
@@ -156,27 +135,44 @@ public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRe
         return fTimeRange;
     }
 
+    /* (non-Javadoc)
+     * @see org.eclipse.linuxtools.tmf.trace.ITmfTrace#getStartTime()
+     */
     public TmfTimestamp getStartTime() {
        return fTimeRange.getStartTime();
     }
 
+    /* (non-Javadoc)
+     * @see org.eclipse.linuxtools.tmf.trace.ITmfTrace#getEndTime()
+     */
     public TmfTimestamp getEndTime() {
        return fTimeRange.getEndTime();
     }
 
-    protected long getIndex(TmfTimestamp timestamp) {
-       TmfTraceContext context = seekEvent(timestamp);
-       return context.getIndex();
-    }
-
-    protected TmfTimestamp getTimestamp(int index) {
-       TmfTraceContext context = seekEvent(index);
-       return context.getTimestamp();
-    }
-
-    // ========================================================================
+//    /**
+//     * Return the event rank based on its timestamp
+//     * 
+//     * @param timestamp
+//     * @return
+//     */
+//    protected long getIndex(TmfTimestamp timestamp) {
+//     TmfTraceContext context = seekEvent(timestamp);
+//     return context.getIndex();
+//    }
+
+//    /**
+//     * Return the event timestamp based on its rank
+//     * @param index
+//     * @return
+//     */
+//    protected TmfTimestamp getTimestamp(int index) {
+//     TmfTraceContext context = seekEvent(index);
+//     return context.getTimestamp();
+//    }
+
+    // ------------------------------------------------------------------------
     // Operators
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     protected void setTimeRange(TmfTimeRange range) {
        fTimeRange = range;
@@ -190,6 +186,47 @@ public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRe
        fTimeRange = new TmfTimeRange(fTimeRange.getStartTime(), endTime);
     }
 
+       // ------------------------------------------------------------------------
+       // TmfProvider
+       // ------------------------------------------------------------------------
+
+       @Override
+       public ITmfContext setContext(TmfDataRequest<T> request) {
+               if (request instanceof TmfEventRequest<?>) {
+                       return seekEvent(((TmfEventRequest<T>) request).getRange().getStartTime());
+               }
+               return null;
+       }
+
+       /**
+        * Return the next piece of data based on the context supplied. The context
+        * would typically be updated for the subsequent read.
+        * 
+        * @param context
+        * @return
+        */
+       @SuppressWarnings("unchecked")
+       @Override
+       public T getNext(ITmfContext context) {
+               if (context instanceof TmfTraceContext) {
+                       return (T) getNextEvent((TmfTraceContext) context);
+               }
+               return null;
+       }
+
+       @Override
+       public boolean isCompleted(TmfDataRequest<T> request, T data) {
+               if (request instanceof TmfEventRequest<?> && data != null) {
+                       return data.getTimestamp().compareTo(((TmfEventRequest<T>) request).getRange().getEndTime(), false) > 0;
+               }
+               return true;
+       }
+
+    
+       // ------------------------------------------------------------------------
+       // ITmfTrace
+       // ------------------------------------------------------------------------
+
     /* (non-Javadoc)
      * @see org.eclipse.linuxtools.tmf.trace.ITmfTrace#seekEvent(org.eclipse.linuxtools.tmf.event.TmfTimestamp)
      */
@@ -211,22 +248,29 @@ public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRe
 
         // Position the stream at the checkpoint
         Object location;
-        synchronized (fCheckpoints) { //Just in case we are re-indexing
-            location = (index < fCheckpoints.size()) ? fCheckpoints.elementAt(index).getLocation() : null;
+        synchronized (fCheckpoints) {
+               if (fCheckpoints.size() > 0) {
+                       if (index >= fCheckpoints.size()) {
+                               index = fCheckpoints.size() - 1;
+                       }
+                       location = fCheckpoints.elementAt(index).getLocation();
+               }
+               else {
+                       location = null;
+               }
         }
         TmfTraceContext nextEventContext = seekLocation(location);
-        nextEventContext.setIndex(index * fCacheSize);
+        nextEventContext.setRank(index * fCacheSize);
         TmfTraceContext currentEventContext = new TmfTraceContext(nextEventContext);
 
         // And get the event
         TmfEvent event = getNextEvent(nextEventContext);
         while (event != null && event.getTimestamp().compareTo(timestamp, false) < 0) {
                currentEventContext.setLocation(nextEventContext.getLocation());
-               currentEventContext.incrIndex();
+               currentEventContext.incrRank();
                event = getNextEvent(nextEventContext);
         }
 
-       currentEventContext.setTimestamp((event != null) ? event.getTimestamp() : null);
         return currentEventContext;
     }
 
@@ -238,135 +282,64 @@ public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRe
         // Position the stream at the previous checkpoint
         int index = (int) position / fCacheSize;
         Object location;
-        synchronized (fCheckpoints) { //Just in case we are re-indexing
-            location = (index < fCheckpoints.size()) ? fCheckpoints.elementAt(index).getLocation() : null;
+        synchronized (fCheckpoints) {
+               if (fCheckpoints.size() > 0) {
+                       if (index >= fCheckpoints.size()) {
+                               index = fCheckpoints.size() - 1;
+                       }
+                       location = fCheckpoints.elementAt(index).getLocation();
+               }
+               else {
+                       location = null;
+               }
         }
-        TmfTraceContext nextEventContext = seekLocation(location);
-        nextEventContext.setIndex(index * fCacheSize);
-        TmfTraceContext currentEventContext = new TmfTraceContext(nextEventContext);
-
-        // And locate the event (if it exists)
-        TmfEvent event = getNextEvent(nextEventContext);
-        while (event != null && currentEventContext.getIndex() < position) {
-               currentEventContext.setLocation(nextEventContext.getLocation());
-               currentEventContext.setTimestamp(event.getTimestamp());
-               currentEventContext.incrIndex();
-               event = getNextEvent(nextEventContext);
+        TmfTraceContext context = seekLocation(location);
+        long rank = index * fCacheSize;
+        context.setRank(rank);
+
+        if (rank < position) {
+            TmfEvent event = getNextEvent(context);
+            while (event != null && ++rank < position) {
+               event = getNextEvent(context);
+            }
         }
 
-        return currentEventContext;
+        return new TmfTraceContext(context.getLocation(), context.getRank());
     }
 
        /* (non-Javadoc)
         * @see org.eclipse.linuxtools.tmf.trace.ITmfTrace#getNextEvent(org.eclipse.linuxtools.tmf.trace.ITmfTrace.TraceContext)
         */
-       public TmfEvent getNextEvent(TmfTraceContext context) {
-               // parseEvent updates the context
+       public synchronized TmfEvent getNextEvent(TmfTraceContext context) {
+               // parseEvent() does not update the context
                TmfEvent event = parseEvent(context);
+               context.setLocation(getCurrentLocation());
                if (event != null) {
+                       context.incrRank();
                        processEvent(event);
                }
        return event;
        }
 
     /**
-     * To be implemented by the subclass.
-     */
-       public abstract Object getCurrentLocation();
-    public abstract TmfEvent parseEvent(TmfTraceContext context);
-
-       /**
-        * Hook for "special" processing by the extending class
+        * Hook for "special" processing by the concrete class
+        * (called by getNextEvent())
+        * 
         * @param event
         */
        public void processEvent(TmfEvent event) {
                // Do nothing by default
        }
-    
-    // ========================================================================
-    // ITmfRequestHandler
-    // ========================================================================
 
-    /* (non-Javadoc)
-     * @see org.eclipse.linuxtools.tmf.eventlog.ITmfRequestHandler#processRequest(org.eclipse.linuxtools.tmf.eventlog.TmfDataRequest, boolean)
+    /**
+     * To be implemented by the concrete class
      */
-       public void processRequest(TmfDataRequest<TmfEvent> request, boolean waitForCompletion) {
-
-               // Process the request
-               processDataRequest(request);
-               
-               // Wait for completion if needed
-       if (waitForCompletion) {
-                       request.waitForCompletion();
-               }
-       }
-
-       /**
-        * Process a data request
-        * 
-        * @param request
-        */
-       private void processDataRequest(final TmfDataRequest<TmfEvent> request) {
-
-               // Initialize the trace context
-               final TmfTraceContext context = (request.getRange() != null) ? 
-                               seekEvent(request.getRange().getStartTime()) : 
-                           seekEvent(request.getIndex());
-
-               final TmfTimestamp endTime = (request.getRange() != null) ? 
-                               request.getRange().getEndTime() :
-                               TmfTimestamp.BigCrunch;
-
-               // Process the request
-               Thread thread = new Thread() {
-
-                       @Override
-                       public void run() {
-                               // Extract the general request information
-                               int blockSize = request.getBlockize();
-                               int nbRequestedEvents = request.getNbRequestedEvents();
-                               if (nbRequestedEvents == -1) {
-                                       nbRequestedEvents = Integer.MAX_VALUE;
-                               }
-
-                               // Create the result buffer
-                               Vector<TmfEvent> events = new Vector<TmfEvent>();
-                               int nbEvents = 0;
-
-                               // Get the ordered events
-                               TmfEvent event = getNextEvent(context);
-                               while (!request.isCancelled() && nbEvents < nbRequestedEvents && event != null
-                                               && event.getTimestamp().compareTo(endTime, false) <= 0)
-                               {
-                                       events.add(event);
-                                       if (++nbEvents % blockSize == 0) {
-                                               pushData(request, events);
-                                       }
-                                       // To avoid an unnecessary read passed the last event requested
-                                       if (nbEvents < nbRequestedEvents)
-                                               event = getNextEvent(context);
-                               }
-                               pushData(request, events);
-                               request.done();
-                       }
-               };
-               thread.start();
-       }
+       public abstract Object getCurrentLocation();
+    public abstract TmfEvent parseEvent(TmfTraceContext context);
 
-       /**
-        * Format the result data and notify the requester.
-        * Note: after handling, the data is *removed*.
-        * 
-        * @param request
-        * @param events
-        */
-       private void pushData(TmfDataRequest<TmfEvent> request, Vector<TmfEvent> events) {
-               TmfEvent[] result = new TmfEvent[events.size()];
-               events.toArray(result);
-               request.setData(result);
-               request.handleData();
-               events.removeAllElements();
-       }
+       // ------------------------------------------------------------------------
+       // toString
+       // ------------------------------------------------------------------------
 
        /* (non-Javadoc)
         * @see java.lang.Object#toString()
@@ -376,14 +349,21 @@ public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRe
                return "[TmfTrace (" + fName + "]";
        }
 
-       // ========================================================================
-    // Trace indexing. Essentially, parse the stream asynchronously and build
-       // the checkpoints index. This index is used to quickly find an event based
-       // on a timestamp or an index.
-    // ========================================================================
+    // ------------------------------------------------------------------------
+    // Indexing
+    // ------------------------------------------------------------------------
 
+       /*
+        * The purpose of the index is to keep the information needed to rapidly
+        * access a trace event based on its timestamp or rank.
+        * 
+        * NOTE: As it is, doesn't work for streaming traces.
+        */
+
+       private IndexingJob job;
        private Boolean fIndexing = false;
-    public void indexStream() {
+
+       public void indexTrace(boolean waitForCompletion) {
        synchronized (fIndexing) {
                if (fIndexing) {
                        return;
@@ -391,14 +371,13 @@ public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRe
                fIndexing = true;
        }
 
-       final IndexingJob job = new IndexingJob("Indexing " + fName);
+       job = new IndexingJob("Indexing " + fName);
        job.schedule();
 
-       if (fWaitForIndexCompletion) {
+       if (waitForCompletion) {
                try {
                        job.join();
                } catch (InterruptedException e) {
-                       // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
@@ -416,37 +395,28 @@ public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRe
                @Override
                protected IStatus run(IProgressMonitor monitor) {
 
-            int nbEvents = 0;
-            TmfTimestamp startTime = new TmfTimestamp();
-            TmfTimestamp lastTime  = new TmfTimestamp();
-
             monitor.beginTask("Indexing " + fName, IProgressMonitor.UNKNOWN);
 
+            int nbEvents = 0;
+            TmfTimestamp startTime = null;
+            TmfTimestamp lastTime  = null;
+
+            fCheckpoints = new Vector<TmfTraceCheckpoint>();
+            
             try {
                // Position the trace at the beginning
                 TmfTraceContext context = seekLocation(null);
-                if (context.getTimestamp() == null) {
-                       return Status.OK_STATUS;
-                }
-                // FIXME: LTTng hack - start
-//                     fCheckpoints.add(new TmfTraceCheckpoint(context.getTimestamp(), context.getLocation()));        // TMF
-                // FIXME: LTTng hack - end
-
-                       TmfEvent event;
-                       startTime = context.getTimestamp();
-                       lastTime  = context.getTimestamp();
-                while ((event = getNextEvent(context)) != null) {
-                       TmfTimestamp timestamp = context.getTimestamp();
-                       if (timestamp != null) {
-                               lastTime = timestamp;
-                       }
-                    // FIXME: LTTng hack - start
-//                    if (((++nbEvents % fCacheSize) == 0) && (timestamp != null)) {   // TMF
-                    if (((nbEvents++ % fCacheSize) == 0) && (timestamp != null)) {     // LTTng
-                        // FIXME: LTTng hack - end
-                               fCheckpoints.add(new TmfTraceCheckpoint(timestamp, context.getLocation()));
-                               fNbEvents = nbEvents - 1;
-                               lastTime = context.getTimestamp();
+                Object location = context.getLocation();
+
+                       TmfEvent event = getNextEvent(context);
+                startTime = new TmfTimestamp(event.getTimestamp());
+                lastTime  = new TmfTimestamp(startTime);
+                while (event != null) {
+                       lastTime = event.getTimestamp();
+                               if ((nbEvents++ % fCacheSize) == 0) {
+                                       lastTime = new TmfTimestamp(event.getTimestamp());
+                               fCheckpoints.add(new TmfTraceCheckpoint(lastTime, location));
+                               fNbEvents = nbEvents;
                                fTimeRange = new TmfTimeRange(startTime, lastTime);
                                notifyListeners(new TmfTimeRange(startTime, lastTime));
 
@@ -459,8 +429,12 @@ public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRe
                         }
                     }
 
-                    // Do whatever
-                    processEvent(event);
+                    // We will need this location at the next iteration
+                    if ((nbEvents % fCacheSize) == 0) {
+                        location = context.getLocation();
+                               }
+
+                    event = getNextEvent(context);
                 }
             }
             finally {
@@ -471,30 +445,30 @@ public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRe
                 }
                 notifyListeners(new TmfTimeRange(startTime, lastTime));
                 monitor.done();
-
             }
 
 //            createOffsetsFile();
-//            dumpCheckpoints();
+//            dumpTraceCheckpoints();
             
             return Status.OK_STATUS;
                }
     }
 
     protected void notifyListeners(TmfTimeRange range) {
-       broadcastSignal(new TmfTraceUpdatedSignal( (TmfTrace)this, (TmfTrace)this, range));
+       broadcast(new TmfTraceUpdatedSignal(this, this, range));
        }
    
-//     /**
-//      * Dump the trace checkpoints
-//      */
-//     private void dumpCheckpoints() {
+//     // ------------------------------------------------------------------------
+//     // Toubleshooting code
+//     // ------------------------------------------------------------------------
+//
+//     private void dumpTraceCheckpoints() {
 //             System.out.println("-----");
 //             System.out.println("Checkpoints of " + fName);
 //             for (int i = 0; i < fCheckpoints.size(); i++) {
 //                     TmfTraceCheckpoint checkpoint = fCheckpoints.get(i);
 //                     TmfTraceContext context = new TmfTraceContext(checkpoint.getLocation());
-//                     TmfEvent event = getNextEvent(context);
+//                     TmfEvent event = getNext(context);
 //                     System.out.println("  Entry: " + i + " timestamp: " + checkpoint.getTimestamp() + ", event: " + event.getTimestamp());
 //                     assert((checkpoint.getTimestamp().compareTo(event.getTimestamp(), false) == 0));
 //             }
@@ -504,7 +478,8 @@ public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRe
 //     private void createOffsetsFile() {
 //
 //         try {
-//             ObjectOutputStream  out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("LTTngOffsets.dat")));
+//                     // The trace context validation file is read by TmfTraceContext
+//             ObjectOutputStream  out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("TmfTraceContext.dat")));
 //
 //             TmfTraceContext context = null;
 //             context = seekLocation(null);
@@ -525,7 +500,7 @@ public abstract class TmfTrace extends TmfComponent implements ITmfTrace, ITmfRe
 //                     e.printStackTrace();
 //             }
 //     }
-
+//
 //     private void createOffsetsFile() {
 //
 //             try {
index 60a8d44688e398bf51ae1081fb13322f4b031493..998b72e0a7d48ee1f20924d47d054246822c8520 100644 (file)
@@ -21,16 +21,16 @@ import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
  */
 public class TmfTraceCheckpoint implements Comparable<TmfTraceCheckpoint> {
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Attributes
-    // ========================================================================
+    // ------------------------------------------------------------------------
     
     private final TmfTimestamp fTimestamp;
     private final Object fLocation;
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Constructors
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     /**
      * @param ts
@@ -41,9 +41,9 @@ public class TmfTraceCheckpoint implements Comparable<TmfTraceCheckpoint> {
         fLocation = location;
     }
 
-    // ========================================================================
+    // ------------------------------------------------------------------------
     // Accessors
-    // ========================================================================
+    // ------------------------------------------------------------------------
 
     /**
      * @return the checkpoint event timestamp
@@ -59,9 +59,9 @@ public class TmfTraceCheckpoint implements Comparable<TmfTraceCheckpoint> {
         return fLocation;
     }
 
-    // ========================================================================
-    // Operators
-    // ========================================================================
+    // ------------------------------------------------------------------------
+    // Comparable
+    // ------------------------------------------------------------------------
 
     public int compareTo(TmfTraceCheckpoint other) {
         return fTimestamp.compareTo(other.fTimestamp, false);
index c389a3866b8a8913ed9a64099ff4a453f7ea40ab..78cced43b7e92c47b0344681b5a9f34350d9ea0c 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 Ericsson
+ * Copyright (c) 2009, 2010 Ericsson
  * 
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
 
 package org.eclipse.linuxtools.tmf.trace;
 
-import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
+import org.eclipse.linuxtools.tmf.component.ITmfContext;
 
 /**
  * <b><u>TmfTraceContext</u></b>
  * <p>
- * Trace context keeper. It ties a trace location to an event index and
- * timestamp. The context should be enough to restore the trace state
- * so the corresponding event can be read.
- * 
+ * Trace context structure. It ties a trace location to an event index and
+ * timestamp. The context should be enough to restore the trace state so the
+ * corresponding event can be read.
+ * <p>
  * Used to handle conflicting, concurrent accesses to the trace. 
  */
-public class TmfTraceContext {
+public class TmfTraceContext implements ITmfContext, Cloneable {
 
        private Object location;
-       private TmfTimestamp timestamp;
-       private long index;
+//     private TmfTimestamp timestamp;
+       private long rank;
        
-       public TmfTraceContext(Object loc, TmfTimestamp ts, long ind) {
+//     public TmfTraceContext(Object loc, TmfTimestamp ts, long ind) {
+//             location = loc;
+//             timestamp = ts;
+//             index = ind;
+//     }
+
+       public TmfTraceContext(Object loc, long ind) {
+//             this(loc, null, 0);
                location = loc;
-               timestamp = ts;
-               index = ind;
+               rank = ind;
        }
 
        public TmfTraceContext(Object loc) {
-               this(loc, null, 0);
+               this(loc, 0);
        }
 
        public TmfTraceContext(TmfTraceContext other) {
-               this(other.location, other.timestamp, other.index);
+//             this(other.location, other.timestamp, other.index);
+               this(other.location, other.rank);
+       }
+
+       public TmfTraceContext clone() {
+               try {
+                       return (TmfTraceContext) super.clone();
+               } catch (CloneNotSupportedException e) {
+                       e.printStackTrace();
+               }
+               return null;
        }
 
        public Object getLocation() {
-//             validateLocation(location);
                return location;
        }
 
-// The FW expects the trace events to be ordered in time.
-// If this is not the case, this invalidates the Trace index (at least)
-// TODO: Throw an exception
-//     private TmfTimestamp previous = TmfTimestamp.BigBang;
        public void setLocation(Object loc) {
-//             if (loc instanceof TmfTimestamp) {
-//                     TmfTimestamp ts = (TmfTimestamp) loc;
-//                     if (ts.compareTo(previous, false) < 0) {
-//                             System.out.println("Going back in time from " + previous + " to " + ts);
-//                     }
-//                     previous = ts;
-//             }
-//             validateLocation(loc);
                location = loc;
        }
 
-       public TmfTimestamp getTimestamp() {
-               return timestamp;
-       }
+//     public TmfTimestamp getTimestamp() {
+//             return timestamp;
+//     }
 
-       public void setTimestamp(TmfTimestamp ts) {
-               timestamp = ts;
-       }
+//     public void setTimestamp(TmfTimestamp ts) {
+//             timestamp = ts;
+//     }
 
-       public void setIndex(long value) {
-               index = value;
+       public void setRank(long value) {
+               rank = value;
        }
 
-       public long getIndex() {
-               return index;
+       public long getRank() {
+               return rank;
        }
 
-       public void incrIndex() {
-               index++;
+       public void incrRank() {
+               rank++;
        }
 
 //     // ========================================================================
 //     // Toubleshooting code
 //     // ========================================================================
 //
+//     public Object getLocation() {
+//             validateLocation(location);
+//             return location;
+//     }
+//
+//     // The FW expects the trace events to be ordered in time.
+//     // If this is not the case, this invalidates the Trace index (at least)
+//     private TmfTimestamp previous = TmfTimestamp.BigBang;
+//     public void setLocation(Object loc) {
+//             if (loc instanceof TmfTimestamp) {
+//                     TmfTimestamp ts = (TmfTimestamp) loc;
+//                     if (ts.compareTo(previous, false) < 0) {
+//                             System.out.println("Going back in time from " + previous + " to " + ts);
+//                     }
+//                     previous = ts;
+//             }
+//             validateLocation(loc);
+//     }
+//
 //     static private DataInputStream in;
 //     static private int size = 100000;
 //     static private String locations[] = new String[size];
 //     static public void init() {
 //             System.out.println("TmfTraceContext: Loading valid locations...");
 //             try {
-//                     in = new DataInputStream(new BufferedInputStream(new FileInputStream("LTTngOffsets.dat")));
+//                     // The trace context validation file is created by TmfTrace
+//                     in = new DataInputStream(new BufferedInputStream(new FileInputStream("TmfTraceContext.dat")));
 //                     int i = 0;
 //                     while (i < size) {
 //                             locations[i] = in.readUTF();
@@ -108,7 +131,7 @@ public class TmfTraceContext {
 //             }
 //             System.out.println("TmfTraceContext: Done.");
 //     }
-
+//
 //     private boolean bsearch(long key) {
 //             int first = 0;
 //             int last = size;
This page took 0.149438 seconds and 5 git commands to generate.