RCPTT runtime reporting enhancements
diff --git a/core/org.eclipse.rcptt.core.ecl.core/META-INF/MANIFEST.MF b/core/org.eclipse.rcptt.core.ecl.core/META-INF/MANIFEST.MF
index d51533b..0ff319c 100644
--- a/core/org.eclipse.rcptt.core.ecl.core/META-INF/MANIFEST.MF
+++ b/core/org.eclipse.rcptt.core.ecl.core/META-INF/MANIFEST.MF
@@ -20,6 +20,7 @@
org.eclipse.rcptt.reporting;bundle-version="[2.2.0,3.0.0)";visibility:=reexport,
org.eclipse.rcptt.tesla.ecl;bundle-version="[2.2.0,3.0.0)",
org.eclipse.rcptt.verifications;bundle-version="[2.2.0,3.0.0)",
- org.eclipse.rcptt.util;bundle-version="[2.2.0,3.0.0)"
+ org.eclipse.rcptt.util;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.rcptt.ecl.operations
Bundle-ActivationPolicy: lazy
Bundle-Activator: org.eclipse.rcptt.core.internal.ecl.core.Activator
diff --git a/core/org.eclipse.rcptt.core.ecl.core/src/org/eclipse/rcptt/core/internal/ecl/core/commands/EclCommandEventProvider.java b/core/org.eclipse.rcptt.core.ecl.core/src/org/eclipse/rcptt/core/internal/ecl/core/commands/EclCommandEventProvider.java
index 19c2d1a..1f07e5b 100644
--- a/core/org.eclipse.rcptt.core.ecl.core/src/org/eclipse/rcptt/core/internal/ecl/core/commands/EclCommandEventProvider.java
+++ b/core/org.eclipse.rcptt.core.ecl.core/src/org/eclipse/rcptt/core/internal/ecl/core/commands/EclCommandEventProvider.java
@@ -27,6 +27,7 @@
import org.eclipse.rcptt.core.ecl.core.model.SetCommandsDelay;
import org.eclipse.rcptt.core.ecl.core.model.SetQ7Features;
import org.eclipse.rcptt.ecl.core.Command;
+import org.eclipse.rcptt.ecl.core.Foreach;
import org.eclipse.rcptt.ecl.core.ISessionListener;
import org.eclipse.rcptt.ecl.core.Pipeline;
import org.eclipse.rcptt.ecl.core.RestoreState;
@@ -38,6 +39,8 @@
import org.eclipse.rcptt.ecl.core.util.CommandToStringConverter;
import org.eclipse.rcptt.ecl.gen.ast.AstExec;
import org.eclipse.rcptt.ecl.internal.core.CorePlugin;
+import org.eclipse.rcptt.ecl.operations.Each;
+import org.eclipse.rcptt.ecl.operations.Repeat;
import org.eclipse.rcptt.reporting.ItemKind;
import org.eclipse.rcptt.reporting.Q7Info;
import org.eclipse.rcptt.reporting.ReportingFactory;
@@ -71,11 +74,22 @@
if (isIgnoredCommand(command)) {
return;
}
+
String cmdName = buildName(command);
- final INodeBuilder node = ReportManager.getCurrentReportNode().beginTask(cmdName);
+ INodeBuilder node;
+ INodeBuilder currentNode = ReportManager.getCurrentReportNode();
+ if (ReportHelper.isIterable(currentNode)) {
+ node = currentNode.appendTask(cmdName);
+ } else {
+ node = currentNode.beginTask(cmdName);
+ }
+
Q7Info info = ReportingFactory.eINSTANCE.createQ7Info();
info.setType(ItemKind.ECL_COMMAND);
ReportHelper.setInfo(node, info);
+ if (isIterableCommand(command)) {
+ ReportHelper.markIterable(node);
+ }
INodeBuilder previousValue = openNodes.putIfAbsent(command, node);
if (previousValue != null) {
throw new IllegalStateException("A node for command " + cmdName + " is already opened");
@@ -120,6 +134,12 @@
|| command instanceof ExecVerification;
}
+ private boolean isIterableCommand(Command command) {
+ return command instanceof Each
+ || command instanceof Foreach
+ || command instanceof Repeat;
+ }
+
public void endCommand(Command command, final IStatus status) {
if (isIgnoredCommand(command)) {
return;
diff --git a/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/IQ7ReportConstants.java b/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/IQ7ReportConstants.java
index fef7449..f36f043 100644
--- a/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/IQ7ReportConstants.java
+++ b/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/IQ7ReportConstants.java
@@ -18,4 +18,5 @@
public static final String ROOT_STATS = "q7.stats";
public static final String PROFILE_RAW = "q7.profile.raw";
public static final String AGENTID = "q7.execution.agentId";
+ public static final String ITERABLE = "q7.command.iterable";
}
diff --git a/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportHelper.java b/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportHelper.java
index 74ba202..c4cd59f 100644
--- a/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportHelper.java
+++ b/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportHelper.java
@@ -16,8 +16,10 @@
import org.eclipse.emf.common.util.EMap;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.rcptt.ecl.core.BoxedValue;
import org.eclipse.rcptt.ecl.core.ProcessStatus;
import org.eclipse.rcptt.ecl.internal.core.ProcessStatusConverter;
+import org.eclipse.rcptt.ecl.runtime.BoxedValues;
import org.eclipse.rcptt.reporting.Q7Info;
import org.eclipse.rcptt.reporting.ReportingFactory;
import org.eclipse.rcptt.sherlock.core.INodeBuilder;
@@ -66,7 +68,6 @@
if (value == null && create) {
value = InfoFactory.eINSTANCE.createQ7WaitInfoRoot();
value.setStartTime(System.currentTimeMillis());
- value.setTick(0); // Indicated current object index
node.getProperties().put(IQ7ReportConstants.ROOT_WAIT, value);
}
return (Q7WaitInfoRoot) value;
@@ -109,6 +110,14 @@
return ReportingFactory.eINSTANCE.createQ7Info();
}
+ public static void startWaitInfo(INodeBuilder node, final String kind, final String className) {
+ Q7WaitUtils.startInfo(kind, className, getWaitInfo(node));
+ }
+
+ public static void finishWaitInfo(INodeBuilder node, final String kind, final String className) {
+ Q7WaitUtils.finishInfo(kind, className, getWaitInfo(node));
+ }
+
public static void updateWaitInfo(INodeBuilder node, final String kind, final String className) {
Q7WaitUtils.updateInfo(kind, className, getWaitInfo(node));
}
@@ -158,4 +167,21 @@
public static void takeSnapshot(INodeBuilder node) {
EventProviderManager.getInstance().takeSnapshot(node);
}
+
+ public static boolean isIterable(INodeBuilder node) {
+ EObject eIsIterable = node.getProperty(IQ7ReportConstants.ITERABLE);
+ if (eIsIterable == null) {
+ return false;
+ }
+ assert eIsIterable instanceof BoxedValue;
+ Object oIsIterable = BoxedValues.unbox((BoxedValue) eIsIterable);
+
+ assert oIsIterable instanceof Boolean;
+ return ((Boolean) oIsIterable).booleanValue();
+ }
+
+ public static void markIterable(INodeBuilder node) {
+ node.setProperty(IQ7ReportConstants.ITERABLE, BoxedValues.box(true));
+ }
+
}
diff --git a/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportManager.java b/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportManager.java
index e2af6c4..3a35c01 100644
--- a/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportManager.java
+++ b/core/org.eclipse.rcptt.reporting/src/org/eclipse/rcptt/reporting/core/ReportManager.java
@@ -82,6 +82,11 @@
}
@Override
+ public INodeBuilder appendTask(String name) {
+ return null;
+ }
+
+ @Override
public void endTask() {
}
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoNode.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoNode.java
index 40b7321..33ccb4d 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoNode.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoNode.java
@@ -21,12 +21,12 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.InfoNode#getChildren <em>Children</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.InfoNode#getName <em>Name</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.InfoNode#getProperties <em>Properties</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getInfoNode()
* @model
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoPackage.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoPackage.java
index db9185b..3c5e7ae 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoPackage.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/InfoPackage.java
@@ -398,13 +398,31 @@
int Q7_WAIT_INFO__TICKS = 5;
/**
+ * The feature id for the '<em><b>Duration</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int Q7_WAIT_INFO__DURATION = 6;
+
+ /**
+ * The feature id for the '<em><b>Last Start Time</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int Q7_WAIT_INFO__LAST_START_TIME = 7;
+
+ /**
* The number of structural features of the '<em>Q7 Wait Info</em>' class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
- int Q7_WAIT_INFO_FEATURE_COUNT = 6;
+ int Q7_WAIT_INFO_FEATURE_COUNT = 8;
/**
* The meta object id for the '{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoRootImpl <em>Q7 Wait Info Root</em>}' class.
@@ -852,6 +870,28 @@
EAttribute getQ7WaitInfo_Ticks();
/**
+ * Returns the meta object for the attribute '{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getDuration <em>Duration</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Duration</em>'.
+ * @see org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getDuration()
+ * @see #getQ7WaitInfo()
+ * @generated
+ */
+ EAttribute getQ7WaitInfo_Duration();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getLastStartTime <em>Last Start Time</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Last Start Time</em>'.
+ * @see org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getLastStartTime()
+ * @see #getQ7WaitInfo()
+ * @generated
+ */
+ EAttribute getQ7WaitInfo_LastStartTime();
+
+ /**
* Returns the meta object for class '{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfoRoot <em>Q7 Wait Info Root</em>}'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -1213,6 +1253,20 @@
*/
EAttribute Q7_WAIT_INFO__TICKS = eINSTANCE.getQ7WaitInfo_Ticks();
/**
+ * The meta object literal for the '<em><b>Duration</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute Q7_WAIT_INFO__DURATION = eINSTANCE.getQ7WaitInfo_Duration();
+ /**
+ * The meta object literal for the '<em><b>Last Start Time</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute Q7_WAIT_INFO__LAST_START_TIME = eINSTANCE.getQ7WaitInfo_LastStartTime();
+ /**
* The meta object literal for the '{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoRootImpl <em>Q7 Wait Info Root</em>}' class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/JobEntry.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/JobEntry.java
index 8d174b6..036e034 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/JobEntry.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/JobEntry.java
@@ -19,6 +19,7 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.JobEntry#getId <em>Id</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.JobEntry#getName <em>Name</em>}</li>
@@ -27,7 +28,6 @@
* <li>{@link org.eclipse.rcptt.tesla.core.info.JobEntry#getRule <em>Rule</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.JobEntry#getRuleClass <em>Rule Class</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getJobEntry()
* @model
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/NodeProperty.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/NodeProperty.java
index 59e3d6b..4293eed 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/NodeProperty.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/NodeProperty.java
@@ -19,11 +19,11 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.NodeProperty#getName <em>Name</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.NodeProperty#getValue <em>Value</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getNodeProperty()
* @model
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfo.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfo.java
index 0fade95..cdf0178 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfo.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfo.java
@@ -19,6 +19,7 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getStartTime <em>Start Time</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getEndTime <em>End Time</em>}</li>
@@ -26,8 +27,9 @@
* <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getClassId <em>Class Id</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getTypeId <em>Type Id</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getTicks <em>Ticks</em>}</li>
+ * <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getDuration <em>Duration</em>}</li>
+ * <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getLastStartTime <em>Last Start Time</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getQ7WaitInfo()
* @model
@@ -190,4 +192,56 @@
*/
void setTicks(long value);
+ /**
+ * Returns the value of the '<em><b>Duration</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Duration</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Duration</em>' attribute.
+ * @see #setDuration(long)
+ * @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getQ7WaitInfo_Duration()
+ * @model
+ * @generated
+ */
+ long getDuration();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getDuration <em>Duration</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Duration</em>' attribute.
+ * @see #getDuration()
+ * @generated
+ */
+ void setDuration(long value);
+
+ /**
+ * Returns the value of the '<em><b>Last Start Time</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Last Start Time</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Last Start Time</em>' attribute.
+ * @see #setLastStartTime(long)
+ * @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getQ7WaitInfo_LastStartTime()
+ * @model
+ * @generated
+ */
+ long getLastStartTime();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfo#getLastStartTime <em>Last Start Time</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Last Start Time</em>' attribute.
+ * @see #getLastStartTime()
+ * @generated
+ */
+ void setLastStartTime(long value);
+
} // Q7WaitInfo
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfoRoot.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfoRoot.java
index ed83813..548ebcb 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfoRoot.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/Q7WaitInfoRoot.java
@@ -21,6 +21,7 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfoRoot#getInfos <em>Infos</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfoRoot#getStartTime <em>Start Time</em>}</li>
@@ -29,7 +30,6 @@
* <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfoRoot#getTypesNames <em>Types Names</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.Q7WaitInfoRoot#getInnerClassMap <em>Inner Class Map</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getQ7WaitInfoRoot()
* @model
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/StackTraceEntry.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/StackTraceEntry.java
index 9a49f13..a67614f 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/StackTraceEntry.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/StackTraceEntry.java
@@ -21,13 +21,13 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.StackTraceEntry#getId <em>Id</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.StackTraceEntry#getStackTrace <em>Stack Trace</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.StackTraceEntry#getThreadName <em>Thread Name</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.StackTraceEntry#getThreadClass <em>Thread Class</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.tesla.core.info.InfoPackage#getStackTraceEntry()
* @model
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/AdvancedInformationImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/AdvancedInformationImpl.java
index f974166..c1578ca 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/AdvancedInformationImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/AdvancedInformationImpl.java
@@ -34,13 +34,13 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.AdvancedInformationImpl#getThreads <em>Threads</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.AdvancedInformationImpl#getJobs <em>Jobs</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.AdvancedInformationImpl#getMessage <em>Message</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.AdvancedInformationImpl#getNodes <em>Nodes</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoNodeImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoNodeImpl.java
index b07221e..fc5461d 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoNodeImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoNodeImpl.java
@@ -31,12 +31,12 @@
* <em><b>Node</b></em>'. <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.InfoNodeImpl#getChildren <em>Children</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.InfoNodeImpl#getName <em>Name</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.InfoNodeImpl#getProperties <em>Properties</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoPackageImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoPackageImpl.java
index 0066916..6c2eaae 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoPackageImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/InfoPackageImpl.java
@@ -435,6 +435,24 @@
* <!-- end-user-doc -->
* @generated
*/
+ public EAttribute getQ7WaitInfo_Duration() {
+ return (EAttribute)q7WaitInfoEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getQ7WaitInfo_LastStartTime() {
+ return (EAttribute)q7WaitInfoEClass.getEStructuralFeatures().get(7);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
public EClass getQ7WaitInfoRoot() {
return q7WaitInfoRootEClass;
}
@@ -584,6 +602,8 @@
createEAttribute(q7WaitInfoEClass, Q7_WAIT_INFO__CLASS_ID);
createEAttribute(q7WaitInfoEClass, Q7_WAIT_INFO__TYPE_ID);
createEAttribute(q7WaitInfoEClass, Q7_WAIT_INFO__TICKS);
+ createEAttribute(q7WaitInfoEClass, Q7_WAIT_INFO__DURATION);
+ createEAttribute(q7WaitInfoEClass, Q7_WAIT_INFO__LAST_START_TIME);
q7WaitInfoRootEClass = createEClass(Q7_WAIT_INFO_ROOT);
createEReference(q7WaitInfoRootEClass, Q7_WAIT_INFO_ROOT__INFOS);
@@ -664,6 +684,8 @@
initEAttribute(getQ7WaitInfo_ClassId(), ecorePackage.getEInt(), "classId", null, 0, 1, Q7WaitInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEAttribute(getQ7WaitInfo_TypeId(), ecorePackage.getEInt(), "typeId", null, 0, 1, Q7WaitInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEAttribute(getQ7WaitInfo_Ticks(), ecorePackage.getELong(), "ticks", null, 0, 1, Q7WaitInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getQ7WaitInfo_Duration(), ecorePackage.getELong(), "duration", null, 0, 1, Q7WaitInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getQ7WaitInfo_LastStartTime(), ecorePackage.getELong(), "lastStartTime", null, 0, 1, Q7WaitInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEClass(q7WaitInfoRootEClass, Q7WaitInfoRoot.class, "Q7WaitInfoRoot", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEReference(getQ7WaitInfoRoot_Infos(), this.getQ7WaitInfo(), null, "infos", null, 0, -1, Q7WaitInfoRoot.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/JobEntryImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/JobEntryImpl.java
index 119c945..e712ba7 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/JobEntryImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/JobEntryImpl.java
@@ -26,6 +26,7 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.JobEntryImpl#getId <em>Id</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.JobEntryImpl#getName <em>Name</em>}</li>
@@ -34,7 +35,6 @@
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.JobEntryImpl#getRule <em>Rule</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.JobEntryImpl#getRuleClass <em>Rule Class</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/NodePropertyImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/NodePropertyImpl.java
index 412b9e9..2638287 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/NodePropertyImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/NodePropertyImpl.java
@@ -26,11 +26,11 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.NodePropertyImpl#getName <em>Name</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.NodePropertyImpl#getValue <em>Value</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoImpl.java
index 8a5c792..269c050 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoImpl.java
@@ -24,6 +24,7 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getStartTime <em>Start Time</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getEndTime <em>End Time</em>}</li>
@@ -31,8 +32,9 @@
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getClassId <em>Class Id</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getTypeId <em>Type Id</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getTicks <em>Ticks</em>}</li>
+ * <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getDuration <em>Duration</em>}</li>
+ * <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoImpl#getLastStartTime <em>Last Start Time</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
@@ -158,6 +160,46 @@
protected long ticks = TICKS_EDEFAULT;
/**
+ * The default value of the '{@link #getDuration() <em>Duration</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDuration()
+ * @generated
+ * @ordered
+ */
+ protected static final long DURATION_EDEFAULT = 0L;
+
+ /**
+ * The cached value of the '{@link #getDuration() <em>Duration</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDuration()
+ * @generated
+ * @ordered
+ */
+ protected long duration = DURATION_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getLastStartTime() <em>Last Start Time</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLastStartTime()
+ * @generated
+ * @ordered
+ */
+ protected static final long LAST_START_TIME_EDEFAULT = 0L;
+
+ /**
+ * The cached value of the '{@link #getLastStartTime() <em>Last Start Time</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getLastStartTime()
+ * @generated
+ * @ordered
+ */
+ protected long lastStartTime = LAST_START_TIME_EDEFAULT;
+
+ /**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
@@ -307,6 +349,48 @@
* <!-- end-user-doc -->
* @generated
*/
+ public long getDuration() {
+ return duration;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDuration(long newDuration) {
+ long oldDuration = duration;
+ duration = newDuration;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, InfoPackage.Q7_WAIT_INFO__DURATION, oldDuration, duration));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public long getLastStartTime() {
+ return lastStartTime;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setLastStartTime(long newLastStartTime) {
+ long oldLastStartTime = lastStartTime;
+ lastStartTime = newLastStartTime;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, InfoPackage.Q7_WAIT_INFO__LAST_START_TIME, oldLastStartTime, lastStartTime));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
@@ -322,6 +406,10 @@
return getTypeId();
case InfoPackage.Q7_WAIT_INFO__TICKS:
return getTicks();
+ case InfoPackage.Q7_WAIT_INFO__DURATION:
+ return getDuration();
+ case InfoPackage.Q7_WAIT_INFO__LAST_START_TIME:
+ return getLastStartTime();
}
return super.eGet(featureID, resolve, coreType);
}
@@ -352,6 +440,12 @@
case InfoPackage.Q7_WAIT_INFO__TICKS:
setTicks((Long)newValue);
return;
+ case InfoPackage.Q7_WAIT_INFO__DURATION:
+ setDuration((Long)newValue);
+ return;
+ case InfoPackage.Q7_WAIT_INFO__LAST_START_TIME:
+ setLastStartTime((Long)newValue);
+ return;
}
super.eSet(featureID, newValue);
}
@@ -382,6 +476,12 @@
case InfoPackage.Q7_WAIT_INFO__TICKS:
setTicks(TICKS_EDEFAULT);
return;
+ case InfoPackage.Q7_WAIT_INFO__DURATION:
+ setDuration(DURATION_EDEFAULT);
+ return;
+ case InfoPackage.Q7_WAIT_INFO__LAST_START_TIME:
+ setLastStartTime(LAST_START_TIME_EDEFAULT);
+ return;
}
super.eUnset(featureID);
}
@@ -406,6 +506,10 @@
return typeId != TYPE_ID_EDEFAULT;
case InfoPackage.Q7_WAIT_INFO__TICKS:
return ticks != TICKS_EDEFAULT;
+ case InfoPackage.Q7_WAIT_INFO__DURATION:
+ return duration != DURATION_EDEFAULT;
+ case InfoPackage.Q7_WAIT_INFO__LAST_START_TIME:
+ return lastStartTime != LAST_START_TIME_EDEFAULT;
}
return super.eIsSet(featureID);
}
@@ -432,6 +536,10 @@
result.append(typeId);
result.append(", ticks: ");
result.append(ticks);
+ result.append(", duration: ");
+ result.append(duration);
+ result.append(", lastStartTime: ");
+ result.append(lastStartTime);
result.append(')');
return result.toString();
}
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoInnerClassMapImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoInnerClassMapImpl.java
index 3b165d0..7ea82c9 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoInnerClassMapImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoInnerClassMapImpl.java
@@ -29,11 +29,11 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoInnerClassMapImpl#getTypedKey <em>Key</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoInnerClassMapImpl#getTypedValue <em>Value</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoRootImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoRootImpl.java
index b3366f4..e1f2fa9 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoRootImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/Q7WaitInfoRootImpl.java
@@ -37,6 +37,7 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoRootImpl#getInfos <em>Infos</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoRootImpl#getStartTime <em>Start Time</em>}</li>
@@ -45,7 +46,6 @@
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoRootImpl#getTypesNames <em>Types Names</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.Q7WaitInfoRootImpl#getInnerClassMap <em>Inner Class Map</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/StackTraceEntryImpl.java b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/StackTraceEntryImpl.java
index e1612d3..74d7cef 100644
--- a/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/StackTraceEntryImpl.java
+++ b/core/org.eclipse.rcptt.tesla.core/gen-src/org/eclipse/rcptt/tesla/core/info/impl/StackTraceEntryImpl.java
@@ -27,13 +27,13 @@
* <em><b>Stack Trace Entry</b></em>'. <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.StackTraceEntryImpl#getId <em>Id</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.StackTraceEntryImpl#getStackTrace <em>Stack Trace</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.StackTraceEntryImpl#getThreadName <em>Thread Name</em>}</li>
* <li>{@link org.eclipse.rcptt.tesla.core.info.impl.StackTraceEntryImpl#getThreadClass <em>Thread Class</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/core/org.eclipse.rcptt.tesla.core/models/info.ecore b/core/org.eclipse.rcptt.tesla.core/models/info.ecore
index a2abe72..1cf6ef2 100644
--- a/core/org.eclipse.rcptt.tesla.core/models/info.ecore
+++ b/core/org.eclipse.rcptt.tesla.core/models/info.ecore
@@ -43,6 +43,8 @@
<eStructuralFeatures xsi:type="ecore:EAttribute" name="classId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="typeId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="ticks" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="duration" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="lastStartTime" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Q7WaitInfoRoot">
<eStructuralFeatures xsi:type="ecore:EReference" name="infos" upperBound="-1"
diff --git a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/Q7WaitUtils.java b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/Q7WaitUtils.java
index 10dc66f..6d69951 100644
--- a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/Q7WaitUtils.java
+++ b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/Q7WaitUtils.java
@@ -12,89 +12,133 @@
import java.util.List;
-import org.eclipse.emf.common.util.EList;
-
import org.eclipse.rcptt.tesla.core.info.InfoFactory;
import org.eclipse.rcptt.tesla.core.info.Q7WaitInfo;
import org.eclipse.rcptt.tesla.core.info.Q7WaitInfoRoot;
public class Q7WaitUtils {
- public static void updateInfo(String kind, String className, Q7WaitInfoRoot info) {
- if (info == null || className == null) {
+ public static void startInfo(String kind, String className, Q7WaitInfoRoot root) {
+ if (root == null || className == null) {
return;
}
- synchronized (info) {
- // Update class name if contains $ to contain method name instead
- int pos = className.indexOf("$");
- if (pos != -1) {
- String methodValue = info.getInnerClassMap().get(className);
- if (methodValue == null) {
- StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
- String clName = className.substring(0, pos);
- for (int i1 = 0; i1 < stackTrace.length; i1++) {
-
- if (stackTrace[i1].getClassName().startsWith(clName)) {
- methodValue = stackTrace[i1].getMethodName() + ":"
- + stackTrace[i1].getLineNumber();
- break;
- }
- if (stackTrace[i1].getClassName().equals("org.eclipse.rcptt.tesla.internal.ui.player.SWTUIPlayer")
- && stackTrace[i1].getMethodName().equals("exec")) {
- methodValue = stackTrace[i1 + 1].getMethodName() + ":"
- + stackTrace[i1 + 1].getLineNumber();
- break;
- }
- }
- if (methodValue != null) {
- info.getInnerClassMap().put(className, /*className.substring(0, pos) + "." + */methodValue);
- }
- }
- }
-
- int classId = getID(className, info.getClassNames());
- int typeId = getID(kind, info.getTypesNames());
-
+ synchronized (root) {
+ updateClassName(className, root);
long currentTime = System.currentTimeMillis();
- long currentTick = info.getTick();
- if (classId != -1 && typeId != -1) {
- EList<Q7WaitInfo> infos = info.getInfos();
- for (Q7WaitInfo i : infos) {
- if (i.getTypeId() == typeId && i.getClassId() == classId) {
- long lastTick = i.getLastTick();
- if (lastTick == currentTick || lastTick == currentTick - 1
- || i.getEndTime() == currentTime) {
- // This is previous execution counter here
- i.setEndTime(currentTime);
- i.setLastTick(currentTick);
- if (lastTick != currentTick) {
- i.setTicks(i.getTicks() + 1);
- }
- return;
- }
- }
+
+ Q7WaitInfo info = findInfo(kind, className, root);
+ if (info != null) {
+ if (infoNodeIsOpen(info)) {
+ return;
}
+ root.setTick(root.getTick() + 1);
+ info.setLastTick(root.getTick());
+ info.setLastStartTime(currentTime);
+ info.setTicks(info.getTicks() + 1);
+ return;
}
- if (classId == -1) {
- classId = info.getClassNames().size();
- info.getClassNames().add(className);
+ info = createInfo(kind, className, root);
+ info.setStartTime(currentTime);
+ info.setLastStartTime(currentTime);
+ }
+ }
+
+ public static void finishInfo(String kind, String className, Q7WaitInfoRoot root) {
+ if (root == null || className == null) {
+ return;
+ }
+ synchronized (root) {
+ updateClassName(className, root);
+ long currentTime = System.currentTimeMillis();
+
+ Q7WaitInfo info = findInfo(kind, className, root);
+ if (info != null) {
+ info.setEndTime(currentTime);
+ long duration = info.getEndTime() - info.getLastStartTime();
+ info.setDuration(info.getDuration() + duration);
+ return;
}
- if (typeId == -1) {
- typeId = info.getTypesNames().size();
- info.getTypesNames().add(kind);
+ info = createInfo(kind, className, root);
+ info.setStartTime(root.getStartTime());
+ info.setLastStartTime(currentTime);
+ info.setEndTime(currentTime);
+ }
+ }
+
+ public static void updateInfo(String kind, String className, Q7WaitInfoRoot root) {
+ if (root == null || className == null) {
+ return;
+ }
+ synchronized (root) {
+ updateClassName(className, root);
+ long currentTick = root.getTick();
+ long currentTime = System.currentTimeMillis();
+
+ Q7WaitInfo info = findInfo(kind, className, root);
+ if (info != null) {
+ long lastTick = info.getLastTick();
+ if (lastTick == currentTick) {
+ // This is previous execution counter here
+ info.setEndTime(currentTime);
+ long duration = info.getEndTime() - info.getLastStartTime();
+ info.setDuration(info.getDuration() + duration);
+ }
+ root.setTick(root.getTick() + 1);
+ info.setLastTick(root.getTick());
+ info.setLastStartTime(currentTime);
+ return;
}
- Q7WaitInfo i = InfoFactory.eINSTANCE.createQ7WaitInfo();
- info.getInfos().add(i);
- i.setTypeId(typeId);
- i.setClassId(classId);
- i.setStartTime(currentTime);
- i.setTicks(1);
- i.setLastTick(currentTick);// Set current counter
- i.setEndTime(i.getStartTime());
+ info = createInfo(kind, className, root);
+ info.setStartTime(currentTime);
+ info.setLastStartTime(currentTime);
+ info.setEndTime(currentTime);
}
}
+ private static Q7WaitInfo findInfo(String kind, String className, Q7WaitInfoRoot root) {
+ int typeId = getID(kind, root.getTypesNames());
+ int classId = getID(className, root.getClassNames());
+ if (classId == -1 || typeId == -1) {
+ return null;
+ }
+
+ for (Q7WaitInfo info : root.getInfos()) {
+ if (info.getTypeId() == typeId && info.getClassId() == classId) {
+ return info;
+ }
+ }
+ return null;
+ }
+
+ private static Q7WaitInfo createInfo(String kind, String className, Q7WaitInfoRoot root) {
+ int typeId = getID(kind, root.getTypesNames());
+ int classId = getID(className, root.getClassNames());
+
+ if (typeId == -1) {
+ typeId = root.getTypesNames().size();
+ root.getTypesNames().add(kind);
+ }
+ if (classId == -1) {
+ classId = root.getClassNames().size();
+ root.getClassNames().add(className);
+ }
+
+ Q7WaitInfo info = InfoFactory.eINSTANCE.createQ7WaitInfo();
+ root.getInfos().add(info);
+ root.setTick(root.getTick() + 1);
+
+ info.setTypeId(typeId);
+ info.setClassId(classId);
+ info.setTicks(1);
+ info.setLastTick(root.getTick());
+ return info;
+ }
+
+ private static boolean infoNodeIsOpen(Q7WaitInfo info) {
+ return info.getLastStartTime() > info.getEndTime();
+ }
+
private static int getID(String kind, List<String> values) {
for (int i = 0; i < values.size(); i++) {
String typeName = values.get(i);
@@ -105,4 +149,32 @@
return -1;
}
+ private static void updateClassName(String className, Q7WaitInfoRoot info) {
+ // Update class name if contains $ to contain method name instead
+ int pos = className.indexOf("$");
+ if (pos != -1) {
+ String methodValue = info.getInnerClassMap().get(className);
+ if (methodValue == null) {
+ StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
+ String clName = className.substring(0, pos);
+ for (int i1 = 0; i1 < stackTrace.length; i1++) {
+ if (stackTrace[i1].getClassName().startsWith(clName)) {
+ methodValue = stackTrace[i1].getMethodName() + ":"
+ + stackTrace[i1].getLineNumber();
+ break;
+ }
+ if (stackTrace[i1].getClassName().equals("org.eclipse.rcptt.tesla.internal.ui.player.SWTUIPlayer")
+ && stackTrace[i1].getMethodName().equals("exec")) {
+ methodValue = stackTrace[i1 + 1].getMethodName() + ":"
+ + stackTrace[i1 + 1].getLineNumber();
+ break;
+ }
+ }
+ if (methodValue != null) {
+ info.getInnerClassMap().put(className, /* className.substring(0, pos) + "." + */methodValue);
+ }
+ }
+ }
+ }
+
}
diff --git a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaFeatures.java b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaFeatures.java
index 1349c89..c9c9d29 100644
--- a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaFeatures.java
+++ b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/core/TeslaFeatures.java
@@ -59,6 +59,7 @@
public final static String REPORT_LOGGING_SIZE_OF_ROTATION_PART = "com.xored.reporting.logging.rotation.size";
public final static String REPORT_INCLUDE_IGNORED_WAIT_DETAILS = "com.xored.reporting.include.ignored.wait.details";
public final static String REPORT_PASSED_WAIT_DETAILS = "com.xored.reporting.include.passed.wait.details";
+ public final static String REPORT_INCLUDE_ECLIPSE_METHODS_WAIT_DETAILS = "com.xored.reporting.include.eclipse.wait.details";
// Code:
private static TeslaFeatures features;
@@ -151,6 +152,15 @@
"RCPTT widget wait details will be also added to passed reports as separate section")
.editable(true).showIn(ADV_OPTIONS);
+ option(REPORT_INCLUDE_ECLIPSE_METHODS_WAIT_DETAILS).category(CAT_REPORTING)
+ .name("Include eclipse methods into 'wait details' info")
+ .value("false")
+ .defaultValue("false")
+ .values(AbstractFeatureManager.BOOLEAN_VALUES)
+ .description(
+ "Eclipse methods will be added into 'wait details' info")
+ .editable(true).showIn(ADV_OPTIONS);
+
option(RECORD_ALL_SELECTIONS)
.name("Record all selections for tables and trees")
.value("false")
@@ -229,6 +239,10 @@
return getInstance().isTrue(TeslaFeatures.REPORT_PASSED_WAIT_DETAILS);
}
+ public static boolean isIncludeEclipseMethodsWaitDetails() {
+ return getInstance().isTrue(TeslaFeatures.REPORT_INCLUDE_ECLIPSE_METHODS_WAIT_DETAILS);
+ }
+
public static boolean isProtectedEnabled() {
return getInstance().isTrue(ENABLE_PROTECTED_MEMBERS);
}
diff --git a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/internal/core/AbstractTeslaClient.java b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/internal/core/AbstractTeslaClient.java
index 628e0b3..6be162e 100644
--- a/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/internal/core/AbstractTeslaClient.java
+++ b/core/org.eclipse.rcptt.tesla.core/src/org/eclipse/rcptt/tesla/internal/core/AbstractTeslaClient.java
@@ -133,7 +133,7 @@
public void hasEvent(String kind, String name, Q7WaitInfoRoot info) {
hasEvents.incrementAndGet();
- Q7WaitUtils.updateInfo(kind, name, info);
+ Q7WaitUtils.startInfo(kind, name, info);
}
protected boolean canProceed(Context context, Q7WaitInfoRoot info) {
diff --git a/core/org.eclipse.rcptt.util/src/org/eclipse/rcptt/util/TableTreeItemPathUtil.java b/core/org.eclipse.rcptt.util/src/org/eclipse/rcptt/util/TableTreeItemPathUtil.java
index 5246c16..c081465 100644
--- a/core/org.eclipse.rcptt.util/src/org/eclipse/rcptt/util/TableTreeItemPathUtil.java
+++ b/core/org.eclipse.rcptt.util/src/org/eclipse/rcptt/util/TableTreeItemPathUtil.java
@@ -16,19 +16,23 @@
import java.util.regex.Pattern;
public class TableTreeItemPathUtil {
+
+ public static final String COLUMN_DELIMITER = "#@&#@";
+ private static final String COLUMN_ITEM_REGEX = String
+ .format("(.*?)%s(.*)%s", COLUMN_DELIMITER, COLUMN_DELIMITER);
private static final Pattern columnItemPattern = Pattern
- .compile("(.*?)\\#(.*)\\#");
+ .compile(COLUMN_ITEM_REGEX);
public static String appendSegmentColumnName(String segment, String columnName) {
if (findColumnName(segment) == null && columnName != null) {
- return segment + "#" + columnName + "#";
+ return segment + COLUMN_DELIMITER + columnName + COLUMN_DELIMITER;
}
return segment;
}
public static String getAppendingColumnName(String columnName) {
if (columnName != null) {
- return "#" + columnName + "#";
+ return COLUMN_DELIMITER + columnName + COLUMN_DELIMITER;
} else {
return "";
}
@@ -108,4 +112,5 @@
}
return m.group(1);
}
+
}
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/model/ecl.ecore b/ecl/plugins/org.eclipse.rcptt.ecl.core/model/ecl.ecore
index 98cbaf0..c72b242 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/model/ecl.ecore
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/model/ecl.ecore
@@ -59,6 +59,7 @@
<details key="example" value="// Implicit item: sent to an input pipe of inner script
list-launch-configurations | foreach { get name | log }

// Explicit item:
list-launch-configuration | foreach [val item] {
 $item | get-name | log
}"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="item" eType="#//Val" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="index" eType="#//Val"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="do" eType="#//Command"
containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="input" unique="false" upperBound="-1"
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/CorePackage.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/CorePackage.java
index 5ad23b5..3275ccd 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/CorePackage.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/CorePackage.java
@@ -590,13 +590,22 @@
int FOREACH__ITEM = COMMAND_FEATURE_COUNT + 0;
/**
+ * The feature id for the '<em><b>Index</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FOREACH__INDEX = COMMAND_FEATURE_COUNT + 1;
+
+ /**
* The feature id for the '<em><b>Do</b></em>' containment reference.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
- int FOREACH__DO = COMMAND_FEATURE_COUNT + 1;
+ int FOREACH__DO = COMMAND_FEATURE_COUNT + 2;
/**
* The feature id for the '<em><b>Input</b></em>' reference list.
@@ -605,7 +614,7 @@
* @generated
* @ordered
*/
- int FOREACH__INPUT = COMMAND_FEATURE_COUNT + 2;
+ int FOREACH__INPUT = COMMAND_FEATURE_COUNT + 3;
/**
* The number of structural features of the '<em>Foreach</em>' class.
@@ -614,7 +623,7 @@
* @generated
* @ordered
*/
- int FOREACH_FEATURE_COUNT = COMMAND_FEATURE_COUNT + 3;
+ int FOREACH_FEATURE_COUNT = COMMAND_FEATURE_COUNT + 4;
/**
* The meta object id for the '{@link org.eclipse.rcptt.ecl.core.impl.ProcessStatusImpl <em>Process Status</em>}' class.
@@ -2414,6 +2423,17 @@
EReference getForeach_Item();
/**
+ * Returns the meta object for the reference '{@link org.eclipse.rcptt.ecl.core.Foreach#getIndex <em>Index</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Index</em>'.
+ * @see org.eclipse.rcptt.ecl.core.Foreach#getIndex()
+ * @see #getForeach()
+ * @generated
+ */
+ EReference getForeach_Index();
+
+ /**
* Returns the meta object for the containment reference '{@link org.eclipse.rcptt.ecl.core.Foreach#getDo <em>Do</em>}'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -3752,6 +3772,14 @@
EReference FOREACH__ITEM = eINSTANCE.getForeach_Item();
/**
+ * The meta object literal for the '<em><b>Index</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference FOREACH__INDEX = eINSTANCE.getForeach_Index();
+
+ /**
* The meta object literal for the '<em><b>Do</b></em>' containment reference feature.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Foreach.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Foreach.java
index 3436312..ccbdb62 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Foreach.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/Foreach.java
@@ -24,6 +24,7 @@
* </p>
* <ul>
* <li>{@link org.eclipse.rcptt.ecl.core.Foreach#getItem <em>Item</em>}</li>
+ * <li>{@link org.eclipse.rcptt.ecl.core.Foreach#getIndex <em>Index</em>}</li>
* <li>{@link org.eclipse.rcptt.ecl.core.Foreach#getDo <em>Do</em>}</li>
* <li>{@link org.eclipse.rcptt.ecl.core.Foreach#getInput <em>Input</em>}</li>
* </ul>
@@ -60,6 +61,32 @@
void setItem(Val value);
/**
+ * Returns the value of the '<em><b>Index</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Index</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Index</em>' reference.
+ * @see #setIndex(Val)
+ * @see org.eclipse.rcptt.ecl.core.CorePackage#getForeach_Index()
+ * @model
+ * @generated
+ */
+ Val getIndex();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.rcptt.ecl.core.Foreach#getIndex <em>Index</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Index</em>' reference.
+ * @see #getIndex()
+ * @generated
+ */
+ void setIndex(Val value);
+
+ /**
* Returns the value of the '<em><b>Do</b></em>' containment reference.
* <!-- begin-user-doc -->
* <p>
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CorePackageImpl.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CorePackageImpl.java
index 25b5101..402fe44 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CorePackageImpl.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/CorePackageImpl.java
@@ -662,10 +662,11 @@
}
/**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
* @generated
*/
- public EReference getForeach_Do() {
+ public EReference getForeach_Index() {
return (EReference)foreachEClass.getEStructuralFeatures().get(1);
}
@@ -673,7 +674,7 @@
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
- public EReference getForeach_Input() {
+ public EReference getForeach_Do() {
return (EReference)foreachEClass.getEStructuralFeatures().get(2);
}
@@ -681,6 +682,14 @@
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
+ public EReference getForeach_Input() {
+ return (EReference)foreachEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * @generated
+ */
public EClass getProcessStatus() {
return processStatusEClass;
}
@@ -1577,6 +1586,7 @@
foreachEClass = createEClass(FOREACH);
createEReference(foreachEClass, FOREACH__ITEM);
+ createEReference(foreachEClass, FOREACH__INDEX);
createEReference(foreachEClass, FOREACH__DO);
createEReference(foreachEClass, FOREACH__INPUT);
@@ -1820,6 +1830,7 @@
initEClass(foreachEClass, Foreach.class, "Foreach", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEReference(getForeach_Item(), this.getVal(), null, "item", null, 0, 1, Foreach.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getForeach_Index(), this.getVal(), null, "index", null, 0, 1, Foreach.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEReference(getForeach_Do(), this.getCommand(), null, "do", null, 0, 1, Foreach.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEReference(getForeach_Input(), ecorePackage.getEObject(), null, "input", null, 0, -1, Foreach.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/ForeachImpl.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/ForeachImpl.java
index d76eb92..3be3a1d 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/ForeachImpl.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/core/impl/ForeachImpl.java
@@ -33,6 +33,7 @@
* </p>
* <ul>
* <li>{@link org.eclipse.rcptt.ecl.core.impl.ForeachImpl#getItem <em>Item</em>}</li>
+ * <li>{@link org.eclipse.rcptt.ecl.core.impl.ForeachImpl#getIndex <em>Index</em>}</li>
* <li>{@link org.eclipse.rcptt.ecl.core.impl.ForeachImpl#getDo <em>Do</em>}</li>
* <li>{@link org.eclipse.rcptt.ecl.core.impl.ForeachImpl#getInput <em>Input</em>}</li>
* </ul>
@@ -51,6 +52,16 @@
protected Val item;
/**
+ * The cached value of the '{@link #getIndex() <em>Index</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getIndex()
+ * @generated
+ * @ordered
+ */
+ protected Val index;
+
+ /**
* The cached value of the '{@link #getDo() <em>Do</em>}' containment reference.
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @see #getDo()
@@ -129,6 +140,44 @@
}
/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Val getIndex() {
+ if (index != null && index.eIsProxy()) {
+ InternalEObject oldIndex = (InternalEObject)index;
+ index = (Val)eResolveProxy(oldIndex);
+ if (index != oldIndex) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, CorePackage.FOREACH__INDEX, oldIndex, index));
+ }
+ }
+ return index;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Val basicGetIndex() {
+ return index;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setIndex(Val newIndex) {
+ Val oldIndex = index;
+ index = newIndex;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, CorePackage.FOREACH__INDEX, oldIndex, index));
+ }
+
+ /**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@@ -203,6 +252,9 @@
switch (featureID) {
case CorePackage.FOREACH__ITEM:
return getItem();
+ case CorePackage.FOREACH__INDEX:
+ if (resolve) return getIndex();
+ return basicGetIndex();
case CorePackage.FOREACH__DO:
return getDo();
case CorePackage.FOREACH__INPUT:
@@ -222,6 +274,9 @@
case CorePackage.FOREACH__ITEM:
setItem((Val)newValue);
return;
+ case CorePackage.FOREACH__INDEX:
+ setIndex((Val)newValue);
+ return;
case CorePackage.FOREACH__DO:
setDo((Command)newValue);
return;
@@ -243,6 +298,9 @@
case CorePackage.FOREACH__ITEM:
setItem((Val)null);
return;
+ case CorePackage.FOREACH__INDEX:
+ setIndex((Val)null);
+ return;
case CorePackage.FOREACH__DO:
setDo((Command)null);
return;
@@ -262,6 +320,8 @@
switch (featureID) {
case CorePackage.FOREACH__ITEM:
return item != null;
+ case CorePackage.FOREACH__INDEX:
+ return index != null;
case CorePackage.FOREACH__DO:
return do_ != null;
case CorePackage.FOREACH__INPUT:
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/commands/IfService.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/commands/IfService.java
index 4d1da92..2d429a6 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/commands/IfService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/commands/IfService.java
@@ -15,13 +15,16 @@
import org.eclipse.core.runtime.Status;
import org.eclipse.rcptt.ecl.core.BoxedValue;
import org.eclipse.rcptt.ecl.core.Command;
+import org.eclipse.rcptt.ecl.core.CoreFactory;
import org.eclipse.rcptt.ecl.core.If;
+import org.eclipse.rcptt.ecl.core.Let;
import org.eclipse.rcptt.ecl.runtime.BoxedValues;
import org.eclipse.rcptt.ecl.runtime.ICommandService;
import org.eclipse.rcptt.ecl.runtime.IProcess;
import org.eclipse.rcptt.ecl.runtime.ISession;
public class IfService implements ICommandService {
+
public IStatus service(Command command, IProcess context)
throws InterruptedException, CoreException {
if (!(command instanceof If)) {
@@ -38,8 +41,14 @@
if (branch == null) {
return Status.OK_STATUS; // nothing to do
}
- return session.execute(branch, context.getInput(), context.getOutput())
+ return session.execute(wrapBody(branch), context.getInput(), context.getOutput())
.waitFor();
}
+ private static Command wrapBody(Command body) {
+ Let let = CoreFactory.eINSTANCE.createLet();
+ let.setBody(body);
+ return let;
+ }
+
}
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/core/ForeachService.java b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/core/ForeachService.java
index b042793..acf38c6 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/core/ForeachService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.core/src/org/eclipse/rcptt/ecl/internal/core/ForeachService.java
@@ -13,10 +13,15 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.rcptt.ecl.core.Command;
+import org.eclipse.rcptt.ecl.core.CoreFactory;
import org.eclipse.rcptt.ecl.core.Foreach;
+import org.eclipse.rcptt.ecl.core.Let;
import org.eclipse.rcptt.ecl.core.Val;
+import org.eclipse.rcptt.ecl.runtime.BoxedValues;
import org.eclipse.rcptt.ecl.runtime.CoreUtils;
import org.eclipse.rcptt.ecl.runtime.ICommandService;
import org.eclipse.rcptt.ecl.runtime.IPipe;
@@ -30,8 +35,12 @@
Foreach foreach = (Foreach) command;
IStatus status = Status.OK_STATUS;
Val val = foreach.getItem();
+ Val indexVal = foreach.getIndex();
boolean valSet = val != null;
- for (EObject o : foreach.getInput()) {
+
+ EList<EObject> objects = foreach.getInput();
+ for (int i = 0, size = objects.size(); i < size; i++) {
+ EObject o = objects.get(i);
ISession session = context.getSession();
IPipe in = null;
if (valSet) {
@@ -45,7 +54,7 @@
IPipe out = session.createPipe();
Command doCommand = foreach.getDo();
- status = session.execute(doCommand, in, out).waitFor();
+ status = session.execute(wrapBody(i, indexVal, doCommand), in, out).waitFor();
if (status.getSeverity() != IStatus.OK) {
break;
}
@@ -55,4 +64,16 @@
}
return status;
}
+
+ private static Command wrapBody(int i, Val indexVal, Command body) {
+ Let let = CoreFactory.eINSTANCE.createLet();
+ let.setBody(EcoreUtil.copy(body));
+
+ if (indexVal != null) {
+ indexVal.setValue(BoxedValues.box(i));
+ let.getVals().add(indexVal);
+ }
+ return let;
+ }
+
}
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.operations/src/org/eclipse/rcptt/ecl/operations/internal/commands/RepeatService.java b/ecl/plugins/org.eclipse.rcptt.ecl.operations/src/org/eclipse/rcptt/ecl/operations/internal/commands/RepeatService.java
index 54ebe94..d2e3a05 100644
--- a/ecl/plugins/org.eclipse.rcptt.ecl.operations/src/org/eclipse/rcptt/ecl/operations/internal/commands/RepeatService.java
+++ b/ecl/plugins/org.eclipse.rcptt.ecl.operations/src/org/eclipse/rcptt/ecl/operations/internal/commands/RepeatService.java
@@ -75,14 +75,14 @@
}
private static Command wrapBody(int i, Val indexVal, Command body) {
- if (indexVal == null) {
- return body;
- }
-
Let let = CoreFactory.eINSTANCE.createLet();
- indexVal.setValue(BoxedValues.box(i));
- let.getVals().add(indexVal);
let.setBody(body);
+
+ if (indexVal != null) {
+ indexVal.setValue(BoxedValues.box(i));
+ let.getVals().add(indexVal);
+ }
return let;
}
+
}
diff --git a/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/PrepareExecutionWrapper.java b/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/PrepareExecutionWrapper.java
index fc98f04..13a758c 100644
--- a/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/PrepareExecutionWrapper.java
+++ b/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/PrepareExecutionWrapper.java
@@ -243,6 +243,7 @@
private static void closeAllNodes(long endTime, Node node) {
if (node.getEndTime() == 0) {
node.setEndTime(endTime);
+ node.setDuration(node.getEndTime() - node.getStartTime());
}
Q7Info info = ReportHelper.getInfo(node);
for (Node child : node.getChildren()) {
@@ -316,6 +317,7 @@
Report report = TestSuiteUtils.generateReport(getActualElement(), status);
Node root = report.getRoot();
root.setEndTime(root.getStartTime() + getTime());
+ root.setDuration(root.getEndTime() - root.getStartTime());
ReportHelper.appendLog(root, LoggingCategory.NORMAL, getLog());
return report;
}
diff --git a/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/reporting/ReportMaker.java b/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/reporting/ReportMaker.java
index 018d60a..b03aa69 100644
--- a/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/reporting/ReportMaker.java
+++ b/launching/org.eclipse.rcptt.launching/src/org/eclipse/rcptt/internal/launching/reporting/ReportMaker.java
@@ -136,6 +136,7 @@
nde.setName(iExecutable.getName());
nde.setStartTime(0);
nde.setEndTime(iExecutable.getTime());
+ nde.setDuration(nde.getEndTime() - nde.getStartTime());
Q7Info info = ReportHelper.getInfo(nde);
setProperties(iExecutable, info);
assert info.getType() != null;
diff --git a/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/FullSingleTestHtmlRenderer.java b/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/FullSingleTestHtmlRenderer.java
index 37a39a5..64cc235 100644
--- a/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/FullSingleTestHtmlRenderer.java
+++ b/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/FullSingleTestHtmlRenderer.java
@@ -44,6 +44,7 @@
import org.eclipse.rcptt.sherlock.core.model.sherlock.report.Snaphot;
import org.eclipse.rcptt.sherlock.core.reporting.ReportBuilder;
import org.eclipse.rcptt.sherlock.core.reporting.SimpleReportGenerator;
+import org.eclipse.rcptt.tesla.core.TeslaFeatures;
import org.eclipse.rcptt.tesla.core.info.AdvancedInformation;
import org.eclipse.rcptt.tesla.core.info.InfoNode;
import org.eclipse.rcptt.tesla.core.info.JobEntry;
@@ -173,11 +174,15 @@
writer.println("<th>Class</th>");
writer.println("<th>Time taken (ms)</th></tr>");
for (Q7WaitInfo info : nonIgnored) {
- long duration = info.getEndTime() - info.getStartTime();
+ long duration = info.getDuration();
String type = SimpleReportGenerator.getType(root, info);
assert type != null : "Should be prefiltered";
- row(type, SimpleReportGenerator.getClassName(root, info), ""
- + duration);
+ String className = SimpleReportGenerator.getClassName(root, info);
+ if (!TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+ && className.startsWith("org.eclipse")) { //$NON-NLS-1$
+ continue;
+ }
+ row(type, className, "" + duration);
}
writer.println("</table>");
}
@@ -187,7 +192,15 @@
return;
renderHeader(2, "Events", "");
for (Event e : events) {
- renderHeader(3, dateFormat.format(e.getTime()), "");
+ if (e.getCount() == 1) {
+ renderHeader(3, "Event at " + dateFormat.format(e.getTime()), "");
+ } else {
+ String header = "Event: "
+ + e.getCount()
+ + " times, first at "
+ + dateFormat.format(e.getTime());
+ renderHeader(3, header, "");
+ }
renderEvent(e.getData());
}
}
@@ -427,7 +440,7 @@
};
private static float durationSeconds(Node node) {
- long millseconds = node.getEndTime() - node.getStartTime();
+ long millseconds = node.getDuration();
return (millseconds) / 1000f;
}
diff --git a/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReportRenderer.java b/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReportRenderer.java
index 5814ac5..ec26993 100644
--- a/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReportRenderer.java
+++ b/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReportRenderer.java
@@ -142,7 +142,7 @@
protected void renderNameAndDuration(PrintWriter writer, Report report, IContentFactory content)
throws CoreException {
Node root = report.getRoot();
- long millseconds = root.getEndTime() - root.getStartTime();
+ long millseconds = root.getDuration();
String duration = durationFormat.format((float) (millseconds) / 1000f);
writer.println("<tr><td>" + root.getName() + "</td><td>" + duration + " s</td></tr>");
}
diff --git a/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReporter.java b/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReporter.java
index a706e76..f5b88d3 100644
--- a/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReporter.java
+++ b/launching/org.eclipse.rcptt.reporting.html/src/org/eclipse/rcptt/reporting/html/HtmlReporter.java
@@ -69,7 +69,7 @@
writer.println("<tr><td>Empty report</td><td></td></tr>");
return;
}
- long millseconds = root.getEndTime() - root.getStartTime();
+ long millseconds = root.getDuration();
String duration = durationFormat.format((float) (millseconds) / 1000f);
writer.println("<tr><td>");
String fileName = getNewFileName(root, content);
diff --git a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/JUnitXMLReportGenerator.java b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/JUnitXMLReportGenerator.java
index 55d3566..0fb9bc0 100644
--- a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/JUnitXMLReportGenerator.java
+++ b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/JUnitXMLReportGenerator.java
@@ -31,7 +31,7 @@
public class JUnitXMLReportGenerator {
private static final String formatTime(Node nde) {
- return ReportUtils.formatTime(nde.getEndTime() - nde.getStartTime());
+ return ReportUtils.formatTime(nde.getDuration());
}
public void writeContent(Reports reports, OutputStream stream)
diff --git a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/RcpttReportGenerator.java b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/RcpttReportGenerator.java
index 06c65e2..ffb6e90 100644
--- a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/RcpttReportGenerator.java
+++ b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/RcpttReportGenerator.java
@@ -122,7 +122,17 @@
}
private void writeEvent(Event event, int tabs) throws IOException {
- writeTabs(tabs + 1).println("Event " + TimeFormatHelper.format(event.getTime() - startTime));
+ if (event.getCount() == 1) {
+ writeTabs(tabs + 1)
+ .append("Event at ")
+ .println(TimeFormatHelper.format(event.getTime() - startTime));
+ } else {
+ writeTabs(tabs + 1).append("Event: ")
+ .append(String.valueOf(event.getCount()))
+ .append(" times, first at ")
+ .append(TimeFormatHelper.format(event.getTime() - startTime))
+ .println();
+ }
printObject(event.getData(), tabs + 2);
}
@@ -222,52 +232,82 @@
public void writeQ7WaitInfo(int tabs, Q7WaitInfoRoot info) {
List<Q7WaitInfo> infos = new ArrayList<Q7WaitInfo>(info.getInfos());
- Collections.sort(infos, new Comparator<Q7WaitInfo>() {
- @Override
- public int compare(Q7WaitInfo o1, Q7WaitInfo o2) {
- return Long.valueOf(o1.getLastTick()).compareTo(Long.valueOf(o2.getLastTick()));
- }
- });
if (infos.size() == 0) {
return;
}
- long endTime = info.getStartTime();
- int total = 0;
+ Comparator<Q7WaitInfo> comparator = new Comparator<Q7WaitInfo>() {
+ @Override
+ public int compare(Q7WaitInfo info1, Q7WaitInfo info2) {
+ return Long.compare(info1.getDuration(), info2.getDuration());
+ }
+ };
+ Collections.sort(infos, Collections.reverseOrder(comparator));
+
+ String classNameColumn = "Method name"; //$NON-NLS-1$
+ String totalTimeColumn = "Time"; //$NON-NLS-1$
+ int classNameLength = classNameColumn.length();
+ int totalTimeLength = totalTimeColumn.length();
+ boolean isEmpty = true;
+
for (Q7WaitInfo q7WaitInfo : infos) {
- if (getType(info, q7WaitInfo) == null) {
- continue;
- }
- if (endTime < q7WaitInfo.getEndTime()) {
- endTime = q7WaitInfo.getEndTime();
- }
- total++;
- }
- if (total == 0) {
- return;
- }
- writeTabs(tabs + 4).append("--> q7 wait details <-- total wait time: ")
- .append(Long.toString(endTime - info.getStartTime()))
- .println();
- for (Q7WaitInfo i : infos) {
- long totalTime = i.getEndTime() - i.getStartTime();
- String className = SimpleReportGenerator.getClassName(info, i);
- String type = getType(info, i);
+ long totalTime = q7WaitInfo.getDuration();
+ String type = getType(info, q7WaitInfo);
+ String className = SimpleReportGenerator.getClassName(info, q7WaitInfo);
if (type == null) {
continue;
}
- writeTabs(tabs + 8).append(type).append(": ")
- .append(className);
- // writer.append(" time: ").append(Long.toString(i.getStartTime())).append(" - ").append(i.getEndTime());
- if (totalTime != 0)
- writer.append(", total time: ").append(Long.toString(totalTime));
- if (i.getLastTick() > 0) {
- // writer.append(", total ticks: ").append(Long.toString(i.getTicks()));
- writer.append(", ticks: ").append(Long.toString(i.getLastTick() - i.getTicks() + 1));
- writer.append(" to ").append(Long.toString(i.getLastTick()));
+ if (!TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+ && className.startsWith("org.eclipse")) { //$NON-NLS-1$
+ continue;
}
- // if( i.getLastTick() != 0) {
- // }
- writer.println();
+ if (totalTime == 0) {
+ continue;
+ }
+
+ // calculate column length
+ String methodName = String.format("%s: %s", type, className);
+ if (methodName.length() > classNameLength) {
+ classNameLength = methodName.length();
+ }
+ if (String.valueOf(totalTime).length() > totalTimeLength) {
+ totalTimeLength = String.valueOf(totalTime).length();
+ }
+
+ isEmpty = false;
+ }
+ if (isEmpty) {
+ return;
+ }
+
+ writeTabs(tabs + 4).println("--> Wait details <--");
+ writeTabs(tabs + 8)
+ .append(String.format("%" + -classNameLength + "s", classNameColumn))
+ .append(" ")
+ .append(String.format("%" + -totalTimeLength + "s", totalTimeColumn))
+ .println();
+
+ for (Q7WaitInfo i : infos) {
+ long totalTime = i.getDuration();
+ String type = getType(info, i);
+ String className = SimpleReportGenerator.getClassName(info, i);
+ if (type == null) {
+ continue;
+ }
+ if (!TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+ && className.startsWith("org.eclipse")) { //$NON-NLS-1$
+ continue;
+ }
+ if (totalTime == 0) {
+ continue;
+ }
+
+ String methodName = String.format("%s: %s", type, className);
+ writeTabs(tabs + 8)
+ .append(String.format("%" + -classNameLength + "s", methodName))
+ .append(" ")
+ .append(String.format("%" + totalTimeLength + "s", totalTime))
+ .println();
+
addWaitTime(type, className, totalTime);
}
}
@@ -298,7 +338,7 @@
writer.
append(" ")
.append("time: " +
- TimeFormatHelper.format(infoNode.getEndTime() - infoNode.getStartTime()))
+ TimeFormatHelper.format(infoNode.getDuration()))
.println();
writeResult(tabs + 1, q7Info.getResult());
}
@@ -361,7 +401,8 @@
if (!(type.equals("job") || type.equals("sync") || type.equals("async"))) { //$NON-NLS-1$
return;
}
- if (className.startsWith("org.eclipse")) { //$NON-NLS-1$
+ if (!TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+ && className.startsWith("org.eclipse")) { //$NON-NLS-1$
return;
}
@@ -385,6 +426,9 @@
String totalWaitTimeTable = "Total wait time:"; //$NON-NLS-1$
String methodNameColumn = "Method name"; //$NON-NLS-1$
String totalTimeColumn = "Time"; //$NON-NLS-1$
+ String noWaitInfoMessage = TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+ ? "There were no methods RCPTT was waiting for"
+ : "There were no third-party methods RCPTT was waiting for";
int methodNameLength = methodNameColumn.length();
if (methodNameLength > maxMethodNameLength) {
@@ -400,7 +444,7 @@
if (totalWaitTime.isEmpty()) {
writer.append(" ")
- .append("There were no third-party methods RCPTT was waiting for") //$NON-NLS-1$
+ .append(noWaitInfoMessage) // $NON-NLS-1$
.println();
return;
}
diff --git a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/ReportUtils.java b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/ReportUtils.java
index e3d24e5..c1adfb9 100644
--- a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/ReportUtils.java
+++ b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/ReportUtils.java
@@ -107,7 +107,7 @@
}
startTime = Math.min(startTime, localRoot.getStartTime());
endTime = Math.max(endTime, localRoot.getEndTime());
- totalTime += (localRoot.getEndTime() - localRoot.getStartTime());
+ totalTime += (localRoot.getDuration());
}
statistics.setTime((int) totalTime);
@@ -451,7 +451,7 @@
}
public static final String getTime(Node nde) {
- return formatTime(nde.getEndTime() - nde.getStartTime());
+ return formatTime(nde.getDuration());
}
}
diff --git a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/XMLReportGenerator.java b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/XMLReportGenerator.java
index 87daf57..ef0179a 100644
--- a/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/XMLReportGenerator.java
+++ b/launching/org.eclipse.rcptt.reporting.util/src/org/eclipse/rcptt/reporting/util/XMLReportGenerator.java
@@ -107,7 +107,7 @@
// nodeElement.setAttribute("terminateTime",
// Long.toString(infoNode.getEndTime()));
nodeElement.setAttribute("totalTime",
- Long.toString(infoNode.getEndTime() - infoNode.getStartTime()));
+ Long.toString(infoNode.getDuration()));
processAttributes(nodeElement, infoNode.getProperties());
if (!infoNode.getChildren().isEmpty()) {
@@ -139,6 +139,7 @@
childrenElement.appendChild(eventElement);
eventElement.setAttribute("time", Long.toString(child.getTime()));
+ eventElement.setAttribute("count", Integer.toString(child.getCount()));
if (child.getSource() != null) {
eventElement.setAttribute(
"source",
diff --git a/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReportRendererTest.java b/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReportRendererTest.java
index 0d7d66c..138b3d9 100644
--- a/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReportRendererTest.java
+++ b/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReportRendererTest.java
@@ -113,9 +113,11 @@
Report report = createReport("1", IStatus.OK);
report.getRoot().setStartTime(1000);
report.getRoot().setEndTime(3500);
+ report.getRoot().setDuration(report.getRoot().getEndTime() - report.getRoot().getStartTime());
Report report2 = createReport("2", IStatus.OK);
report2.getRoot().setStartTime(4000);
report2.getRoot().setEndTime(6000);
+ report2.getRoot().setDuration(report2.getRoot().getEndTime() - report2.getRoot().getStartTime());
String result = generate(asList(report, report2)).replaceAll("\\s", "");
char separator = DecimalFormatSymbols.getInstance().getDecimalSeparator();
Assert.assertTrue("Statistics should have proper Execution time",
diff --git a/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReporterTest.java b/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReporterTest.java
index 4dea993..a075585 100644
--- a/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReporterTest.java
+++ b/launching/tests/org.eclipse.rcptt.reporting.html.tests/src/org/eclipse/rcptt/reporting/html/tests/HtmlReporterTest.java
@@ -130,9 +130,11 @@
Report report = createReport("1", IStatus.OK);
report.getRoot().setStartTime(1000);
report.getRoot().setEndTime(3500);
+ report.getRoot().setDuration(report.getRoot().getEndTime() - report.getRoot().getStartTime());
Report report2 = createReport("2", IStatus.OK);
report2.getRoot().setStartTime(4000);
report2.getRoot().setEndTime(6000);
+ report2.getRoot().setDuration(report2.getRoot().getEndTime() - report2.getRoot().getStartTime());
String result = generate(asList(report, report2)).replaceAll("\\s", "");
char separator = DecimalFormatSymbols.getInstance().getDecimalSeparator();
Assert.assertTrue("Statistics should have proper Execution time",
diff --git a/modules/nebula/plugins/org.eclipse.rcptt.tesla.nebula.ecl.impl/src/org/eclipse/rcptt/tesla/nebula/ecl/internal/impl/commands/SelectorServiceExtension.java b/modules/nebula/plugins/org.eclipse.rcptt.tesla.nebula.ecl.impl/src/org/eclipse/rcptt/tesla/nebula/ecl/internal/impl/commands/SelectorServiceExtension.java
index d7fb51a..277b97e 100644
--- a/modules/nebula/plugins/org.eclipse.rcptt.tesla.nebula.ecl.impl/src/org/eclipse/rcptt/tesla/nebula/ecl/internal/impl/commands/SelectorServiceExtension.java
+++ b/modules/nebula/plugins/org.eclipse.rcptt.tesla.nebula.ecl.impl/src/org/eclipse/rcptt/tesla/nebula/ecl/internal/impl/commands/SelectorServiceExtension.java
@@ -16,8 +16,6 @@
import org.eclipse.rcptt.ecl.core.Command;
import org.eclipse.rcptt.ecl.dispatch.IScriptletExtension;
import org.eclipse.rcptt.ecl.runtime.IProcess;
-
-import org.eclipse.rcptt.util.TableTreeItemPathUtil;
import org.eclipse.rcptt.tesla.core.protocol.ElementKind;
import org.eclipse.rcptt.tesla.ecl.impl.TeslaBridge;
import org.eclipse.rcptt.tesla.ecl.model.ControlHandler;
@@ -25,6 +23,7 @@
import org.eclipse.rcptt.tesla.ecl.model.Selector;
import org.eclipse.rcptt.tesla.ecl.model.TeslaFactory;
import org.eclipse.rcptt.tesla.nebula.ecl.NebulaElementKinds;
+import org.eclipse.rcptt.util.TableTreeItemPathUtil;
/**
* Special logic for getting Nebula Grid items.
@@ -70,7 +69,9 @@
path += "%" + index + "%";
}
if (column != null) {
- path += "#" + column + "#";
+ path += TableTreeItemPathUtil.COLUMN_DELIMITER
+ + column
+ + TableTreeItemPathUtil.COLUMN_DELIMITER;
}
handler.setKind(ElementKind.Item);
handler.setParent(parent.getParent());
diff --git a/modules/rap/bundles/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl.rap/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java b/modules/rap/bundles/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl.rap/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java
index 10ed227..5a28042 100644
--- a/modules/rap/bundles/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl.rap/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java
+++ b/modules/rap/bundles/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl.rap/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java
@@ -125,7 +125,9 @@
path += "%" + index + "%";
}
if (column != null) {
- path += "#" + column + "#";
+ path += TableTreeItemPathUtil.COLUMN_DELIMITER
+ + column
+ + TableTreeItemPathUtil.COLUMN_DELIMITER;
}
handler.setKind(ElementKind.Item);
handler.setParent(parent.getParent());
diff --git a/modules/testrail/plugins/org.eclipse.rcptt.testrail/src/org/eclipse/rcptt/testrail/TestRailService.java b/modules/testrail/plugins/org.eclipse.rcptt.testrail/src/org/eclipse/rcptt/testrail/TestRailService.java
index 70ce4a0..898606e 100644
--- a/modules/testrail/plugins/org.eclipse.rcptt.testrail/src/org/eclipse/rcptt/testrail/TestRailService.java
+++ b/modules/testrail/plugins/org.eclipse.rcptt.testrail/src/org/eclipse/rcptt/testrail/TestRailService.java
@@ -379,7 +379,7 @@
private String getTestRailDuration(Report report) {
Node reportRoot = report.getRoot();
- long duration = (reportRoot.getEndTime() - reportRoot.getStartTime()) / 1000;
+ long duration = (reportRoot.getDuration()) / 1000;
if (duration != 0) {
return MessageFormat.format("{0}s", String.format("%d", duration));
diff --git a/rcp/contexts/org.eclipse.rcptt.ctx.parameters.ui/src/org/eclipse/rcptt/ctx/parameters/ui/ParametersContextEditor.java b/rcp/contexts/org.eclipse.rcptt.ctx.parameters.ui/src/org/eclipse/rcptt/ctx/parameters/ui/ParametersContextEditor.java
index 523c78b..a1b2d5f 100644
--- a/rcp/contexts/org.eclipse.rcptt.ctx.parameters.ui/src/org/eclipse/rcptt/ctx/parameters/ui/ParametersContextEditor.java
+++ b/rcp/contexts/org.eclipse.rcptt.ctx.parameters.ui/src/org/eclipse/rcptt/ctx/parameters/ui/ParametersContextEditor.java
@@ -288,7 +288,7 @@
private static Collection<Conflict> findConflicts(
Map<String, String> first, Map<String, String> second) {
- List<Conflict> rv = new ArrayList<>();
+ List<Conflict> rv = new ArrayList<Conflict>();
for (Object key: (Diffs.computeMapDiff(first, second).getChangedKeys())) {
String name = (String) key;
@@ -369,7 +369,7 @@
Object[] result = dialog.getResult();
if (result == null)
return null;
- List<Conflict> rv = new ArrayList<>();
+ List<Conflict> rv = new ArrayList<Conflict>();
for (Object object : result) {
rv.add((Conflict) object);
}
@@ -428,7 +428,7 @@
}
}
- Map<String, Parameter> paramMap = new HashMap<>();
+ Map<String, Parameter> paramMap = new HashMap<String, Parameter>();
for (Parameter parameter : element.getParameters()) {
paramMap.put(parameter.getName(), parameter);
}
diff --git a/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/ReportEntryContentProvider.java b/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/ReportEntryContentProvider.java
index a0bbcde..bca5f42 100644
--- a/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/ReportEntryContentProvider.java
+++ b/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/ReportEntryContentProvider.java
@@ -88,8 +88,8 @@
StringWriter writer = new StringWriter();
new RcpttReportGenerator(new PrintWriter(writer), new ArrayList<ImageEntry>()).writeResult(0,
info.getResult());
- entries.add(new ReportEntry(root.getName(), info.getId(), (int) (root.getEndTime() - root
- .getStartTime()), info.getResult(), writer.toString()));
+ entries.add(new ReportEntry(root.getName(), info.getId(), (int) root.getDuration(),
+ info.getResult(), writer.toString()));
}
}
ReportEntryContentProvider.this.entries = entries;
diff --git a/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/TestCaseComposite.java b/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/TestCaseComposite.java
index c91eaea..d4138ae 100644
--- a/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/TestCaseComposite.java
+++ b/rcp/org.eclipse.rcptt.ui.report/src/org/eclipse/rcptt/ui/report/internal/TestCaseComposite.java
@@ -112,8 +112,7 @@
}
return "";
case 2:// time
- return TimeFormatHelper.format(entry.getEndTime()
- - entry.getStartTime());
+ return TimeFormatHelper.format(entry.getDuration());
// case 3:// location
// return entry.location;
}
diff --git a/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java b/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java
index 4813600..2ce4eaa 100644
--- a/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java
+++ b/runtime/ecl/org.eclipse.rcptt.tesla.ecl.impl/src/org/eclipse/rcptt/tesla/ecl/internal/impl/commands/SelectorService.java
@@ -14,7 +14,6 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.rcptt.ecl.core.Command;
-import org.eclipse.rcptt.ecl.core.util.ISessionPropertyConstants;
import org.eclipse.rcptt.ecl.dispatch.ServiceDispatchingUtils;
import org.eclipse.rcptt.ecl.runtime.ICommandService;
import org.eclipse.rcptt.ecl.runtime.IProcess;
@@ -127,7 +126,9 @@
path += "%" + index + "%";
}
if (column != null) {
- path += "#" + column + "#";
+ path += TableTreeItemPathUtil.COLUMN_DELIMITER
+ + column
+ + TableTreeItemPathUtil.COLUMN_DELIMITER;
}
handler.setKind(ElementKind.Item);
handler.setParent(parent.getParent());
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/AsyncInfoSupport.java b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/AsyncInfoSupport.java
index 329f44d..22cf3c2 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/AsyncInfoSupport.java
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/AsyncInfoSupport.java
@@ -143,7 +143,7 @@
if (this.sync.contains(async)) {
kind = "sync";
}
- ReportHelper.updateWaitInfo(builder.getCurrent(), kind, className);
+ ReportHelper.startWaitInfo(builder.getCurrent(), kind, className);
}
}
@@ -167,7 +167,7 @@
kind = "sync";
this.sync.remove(async);
}
- ReportHelper.updateWaitInfo(builder.getCurrent(), kind, className);
+ ReportHelper.finishWaitInfo(builder.getCurrent(), kind, className);
}
}
@@ -180,7 +180,7 @@
if (sync) {
this.sync.add(async);
}
- ReportHelper.updateWaitInfo(builder.getCurrent(), kind, className);
+ ReportHelper.startWaitInfo(builder.getCurrent(), kind, className);
}
}
diff --git a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/JobsInfoSupport.java b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/JobsInfoSupport.java
index 0a4c2b9..8b5a18b 100644
--- a/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/JobsInfoSupport.java
+++ b/runtime/tesla/org.eclipse.rcptt.tesla.swt/src/org/eclipse/rcptt/tesla/swt/logging/JobsInfoSupport.java
@@ -36,7 +36,7 @@
@Override
public void jobSchedule(InternalJob job, long delay, boolean reshedule) {
- jobUpdate(job);
+ jobStart(job);
}
@Override
@@ -46,7 +46,12 @@
@Override
public void endJob(InternalJob job, IStatus status, boolean notify) {
- jobUpdate(job);
+ jobFinish(job);
+ }
+
+ @Override
+ public void jobCanceled(InternalJob job) {
+ jobFinish(job);
}
@Override
@@ -81,9 +86,26 @@
Job.getJobManager().removeJobChangeListener(this);
}
- @Override
- public void jobCanceled(InternalJob job) {
- jobUpdate(job);
+ private void jobStart(final InternalJob job) {
+ JobStatus status = UIJobCollector.detectJobStatus((Job) job, 0);
+ if (status.equals(JobStatus.IGNORED)) {
+ return;
+ }
+ IReportBuilder[] builders = provider.getListeners();
+ for (IReportBuilder builder : builders) {
+ ReportHelper.startWaitInfo(builder.getCurrent(), "job", job.getClass().getName());
+ }
+ }
+
+ private void jobFinish(final InternalJob job) {
+ JobStatus status = UIJobCollector.detectJobStatus((Job) job, 0);
+ if (status.equals(JobStatus.IGNORED)) {
+ return;
+ }
+ IReportBuilder[] builders = provider.getListeners();
+ for (IReportBuilder builder : builders) {
+ ReportHelper.finishWaitInfo(builder.getCurrent(), "job", job.getClass().getName());
+ }
}
private void jobUpdate(final InternalJob job) {
diff --git a/watson/org.eclipse.rcptt.watson.core/META-INF/MANIFEST.MF b/watson/org.eclipse.rcptt.watson.core/META-INF/MANIFEST.MF
index d3f2c3c..bf8611c 100644
--- a/watson/org.eclipse.rcptt.watson.core/META-INF/MANIFEST.MF
+++ b/watson/org.eclipse.rcptt.watson.core/META-INF/MANIFEST.MF
@@ -22,6 +22,7 @@
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.emf.ecore;visibility:=reexport,
org.eclipse.core.resources;resolution:=optional;x-installation:=greedy,
- org.eclipse.rcptt.tesla.core;bundle-version="[2.2.0,3.0.0)"
+ org.eclipse.rcptt.tesla.core;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.rcptt.ecl.core
Bundle-ActivationPolicy: lazy
Bundle-Activator: org.eclipse.rcptt.sherlock.core.SherlockCore
diff --git a/watson/org.eclipse.rcptt.watson.core/model/report.ecore b/watson/org.eclipse.rcptt.watson.core/model/report.ecore
index e6aa770..6f2d0f4 100644
--- a/watson/org.eclipse.rcptt.watson.core/model/report.ecore
+++ b/watson/org.eclipse.rcptt.watson.core/model/report.ecore
@@ -1,8 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0"
- xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="report"
- nsURI="http://eclipse.org/rcptt/sherlock/report" nsPrefix="org.eclipse.rcptt.sherlock.report">
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="report" nsURI="http://eclipse.org/rcptt/sherlock/report" nsPrefix="org.eclipse.rcptt.sherlock.report">
<eClassifiers xsi:type="ecore:EClass" name="Report">
<eStructuralFeatures xsi:type="ecore:EReference" name="root" eType="#//Node" containment="true"
eOpposite="#//Node/report"/>
@@ -28,6 +26,8 @@
eOpposite="#//Report/root"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="snapshots" upperBound="-1"
eType="#//Snaphot" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="duration" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"
+ defaultValueLiteral="0"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Event">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="time" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
@@ -38,6 +38,8 @@
<eStructuralFeatures xsi:type="ecore:EReference" name="source" eType="#//EventSource"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//EventKind"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="color" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="count" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
+ defaultValueLiteral="1"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EEnum" name="EventKind">
<eLiterals name="Info"/>
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Event.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Event.java
index 0855dc3..2536cae 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Event.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Event.java
@@ -21,6 +21,7 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getTime <em>Time</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getProperties <em>Properties</em>}</li>
@@ -28,8 +29,8 @@
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getSource <em>Source</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getKind <em>Kind</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getColor <em>Color</em>}</li>
+ * <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getCount <em>Count</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getEvent()
* @model
@@ -186,4 +187,31 @@
*/
void setColor(String value);
+ /**
+ * Returns the value of the '<em><b>Count</b></em>' attribute.
+ * The default value is <code>"1"</code>.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Count</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Count</em>' attribute.
+ * @see #setCount(int)
+ * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getEvent_Count()
+ * @model default="1"
+ * @generated
+ */
+ int getCount();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getCount <em>Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Count</em>' attribute.
+ * @see #getCount()
+ * @generated
+ */
+ void setCount(int value);
+
} // Event
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventKind.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventKind.java
index 19e8568..a9be957 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventKind.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventKind.java
@@ -126,6 +126,8 @@
* Returns the '<em><b>Event Kind</b></em>' literal with the specified literal value.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
+ * @param literal the literal.
+ * @return the matching enumerator or <code>null</code>.
* @generated
*/
public static EventKind get(String literal) {
@@ -142,6 +144,8 @@
* Returns the '<em><b>Event Kind</b></em>' literal with the specified name.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
+ * @param name the name.
+ * @return the matching enumerator or <code>null</code>.
* @generated
*/
public static EventKind getByName(String name) {
@@ -158,6 +162,8 @@
* Returns the '<em><b>Event Kind</b></em>' literal with the specified integer value.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
+ * @param value the integer value.
+ * @return the matching enumerator or <code>null</code>.
* @generated
*/
public static EventKind get(int value) {
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventSource.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventSource.java
index 9aa00cd..662a80d 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventSource.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/EventSource.java
@@ -21,11 +21,11 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.EventSource#getName <em>Name</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.EventSource#getProperties <em>Properties</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getEventSource()
* @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingCategory.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingCategory.java
index c0978a5..6c1ad37 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingCategory.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingCategory.java
@@ -126,6 +126,8 @@
* Returns the '<em><b>Logging Category</b></em>' literal with the specified literal value.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
+ * @param literal the literal.
+ * @return the matching enumerator or <code>null</code>.
* @generated
*/
public static LoggingCategory get(String literal) {
@@ -142,6 +144,8 @@
* Returns the '<em><b>Logging Category</b></em>' literal with the specified name.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
+ * @param name the name.
+ * @return the matching enumerator or <code>null</code>.
* @generated
*/
public static LoggingCategory getByName(String name) {
@@ -158,6 +162,8 @@
* Returns the '<em><b>Logging Category</b></em>' literal with the specified integer value.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
+ * @param value the integer value.
+ * @return the matching enumerator or <code>null</code>.
* @generated
*/
public static LoggingCategory get(int value) {
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingData.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingData.java
index 26a55c4..2a3cd0b 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingData.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/LoggingData.java
@@ -19,11 +19,11 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.LoggingData#getText <em>Text</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.LoggingData#getCategory <em>Category</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getLoggingData()
* @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Node.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Node.java
index b65f84f..482742a 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Node.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Node.java
@@ -22,6 +22,7 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getStartTime <em>Start Time</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getEndTime <em>End Time</em>}</li>
@@ -32,8 +33,8 @@
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getParent <em>Parent</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getReport <em>Report</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getSnapshots <em>Snapshots</em>}</li>
+ * <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getDuration <em>Duration</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getNode()
* @model
@@ -241,4 +242,31 @@
*/
EList<Snaphot> getSnapshots();
+ /**
+ * Returns the value of the '<em><b>Duration</b></em>' attribute.
+ * The default value is <code>"0"</code>.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Duration</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Duration</em>' attribute.
+ * @see #setDuration(long)
+ * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getNode_Duration()
+ * @model default="0"
+ * @generated
+ */
+ long getDuration();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getDuration <em>Duration</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Duration</em>' attribute.
+ * @see #getDuration()
+ * @generated
+ */
+ void setDuration(long value);
+
} // Node
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Report.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Report.java
index c2d7079..71151f7 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Report.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Report.java
@@ -21,11 +21,11 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Report#getRoot <em>Root</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Report#getSources <em>Sources</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getReport()
* @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportBuilderStore.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportBuilderStore.java
index 5a875e7..c3f5061 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportBuilderStore.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportBuilderStore.java
@@ -19,11 +19,11 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportBuilderStore#getReport <em>Report</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportBuilderStore#getCurrentNode <em>Current Node</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getReportBuilderStore()
* @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportContainer.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportContainer.java
index 4703299..e6af5a7 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportContainer.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportContainer.java
@@ -19,10 +19,10 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportContainer#getContent <em>Content</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getReportContainer()
* @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportPackage.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportPackage.java
index 48f09b4..9b683a7 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportPackage.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ReportPackage.java
@@ -221,13 +221,22 @@
int NODE__SNAPSHOTS = 8;
/**
+ * The feature id for the '<em><b>Duration</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int NODE__DURATION = 9;
+
+ /**
* The number of structural features of the '<em>Node</em>' class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
- int NODE_FEATURE_COUNT = 9;
+ int NODE_FEATURE_COUNT = 10;
/**
* The meta object id for the '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl <em>Event</em>}' class.
@@ -294,13 +303,22 @@
int EVENT__COLOR = 5;
/**
+ * The feature id for the '<em><b>Count</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EVENT__COUNT = 6;
+
+ /**
* The number of structural features of the '<em>Event</em>' class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
- int EVENT_FEATURE_COUNT = 6;
+ int EVENT_FEATURE_COUNT = 7;
/**
* The meta object id for the '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventSourceImpl <em>Event Source</em>}' class.
@@ -764,6 +782,17 @@
EReference getNode_Snapshots();
/**
+ * Returns the meta object for the attribute '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getDuration <em>Duration</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Duration</em>'.
+ * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.Node#getDuration()
+ * @see #getNode()
+ * @generated
+ */
+ EAttribute getNode_Duration();
+
+ /**
* Returns the meta object for class '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event <em>Event</em>}'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -840,6 +869,17 @@
EAttribute getEvent_Color();
/**
+ * Returns the meta object for the attribute '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getCount <em>Count</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Count</em>'.
+ * @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event#getCount()
+ * @see #getEvent()
+ * @generated
+ */
+ EAttribute getEvent_Count();
+
+ /**
* Returns the meta object for class '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.EventSource <em>Event Source</em>}'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -1255,6 +1295,14 @@
EReference NODE__SNAPSHOTS = eINSTANCE.getNode_Snapshots();
/**
+ * The meta object literal for the '<em><b>Duration</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute NODE__DURATION = eINSTANCE.getNode_Duration();
+
+ /**
* The meta object literal for the '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl <em>Event</em>}' class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -1313,6 +1361,14 @@
EAttribute EVENT__COLOR = eINSTANCE.getEvent_Color();
/**
+ * The meta object literal for the '<em><b>Count</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute EVENT__COUNT = eINSTANCE.getEvent_Count();
+
+ /**
* The meta object literal for the '{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventSourceImpl <em>Event Source</em>}' class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Screenshot.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Screenshot.java
index 3d32a8b..c03bbbd 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Screenshot.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Screenshot.java
@@ -19,12 +19,12 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Screenshot#getData <em>Data</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Screenshot#getKind <em>Kind</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Screenshot#getMessage <em>Message</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getScreenshot()
* @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ScreenshotKind.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ScreenshotKind.java
index 2147668..89f864a 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ScreenshotKind.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/ScreenshotKind.java
@@ -74,6 +74,8 @@
* Returns the '<em><b>Screenshot Kind</b></em>' literal with the specified literal value.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
+ * @param literal the literal.
+ * @return the matching enumerator or <code>null</code>.
* @generated
*/
public static ScreenshotKind get(String literal) {
@@ -90,6 +92,8 @@
* Returns the '<em><b>Screenshot Kind</b></em>' literal with the specified name.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
+ * @param name the name.
+ * @return the matching enumerator or <code>null</code>.
* @generated
*/
public static ScreenshotKind getByName(String name) {
@@ -106,6 +110,8 @@
* Returns the '<em><b>Screenshot Kind</b></em>' literal with the specified integer value.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
+ * @param value the integer value.
+ * @return the matching enumerator or <code>null</code>.
* @generated
*/
public static ScreenshotKind get(int value) {
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Snaphot.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Snaphot.java
index 3e1c378..a3d1b27 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Snaphot.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/Snaphot.java
@@ -21,12 +21,12 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Snaphot#getTime <em>Time</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Snaphot#getProperties <em>Properties</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.Snaphot#getData <em>Data</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getSnaphot()
* @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/TraceData.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/TraceData.java
index bce48aa..c6150e6 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/TraceData.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/TraceData.java
@@ -19,10 +19,10 @@
*
* <p>
* The following features are supported:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.TraceData#getMessage <em>Message</em>}</li>
* </ul>
- * </p>
*
* @see org.eclipse.rcptt.sherlock.core.model.sherlock.report.ReportPackage#getTraceData()
* @model
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventImpl.java
index ed40f95..e4a022b 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventImpl.java
@@ -37,6 +37,7 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl#getTime <em>Time</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl#getProperties <em>Properties</em>}</li>
@@ -44,8 +45,8 @@
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl#getSource <em>Source</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl#getKind <em>Kind</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl#getColor <em>Color</em>}</li>
+ * <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventImpl#getCount <em>Count</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
@@ -141,6 +142,26 @@
protected String color = COLOR_EDEFAULT;
/**
+ * The default value of the '{@link #getCount() <em>Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCount()
+ * @generated
+ * @ordered
+ */
+ protected static final int COUNT_EDEFAULT = 1;
+
+ /**
+ * The cached value of the '{@link #getCount() <em>Count</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCount()
+ * @generated
+ * @ordered
+ */
+ protected int count = COUNT_EDEFAULT;
+
+ /**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
@@ -320,6 +341,27 @@
* <!-- end-user-doc -->
* @generated
*/
+ public int getCount() {
+ return count;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setCount(int newCount) {
+ int oldCount = count;
+ count = newCount;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ReportPackage.EVENT__COUNT, oldCount, count));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
@Override
public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
switch (featureID) {
@@ -353,6 +395,8 @@
return getKind();
case ReportPackage.EVENT__COLOR:
return getColor();
+ case ReportPackage.EVENT__COUNT:
+ return getCount();
}
return super.eGet(featureID, resolve, coreType);
}
@@ -383,6 +427,9 @@
case ReportPackage.EVENT__COLOR:
setColor((String)newValue);
return;
+ case ReportPackage.EVENT__COUNT:
+ setCount((Integer)newValue);
+ return;
}
super.eSet(featureID, newValue);
}
@@ -413,6 +460,9 @@
case ReportPackage.EVENT__COLOR:
setColor(COLOR_EDEFAULT);
return;
+ case ReportPackage.EVENT__COUNT:
+ setCount(COUNT_EDEFAULT);
+ return;
}
super.eUnset(featureID);
}
@@ -437,6 +487,8 @@
return kind != KIND_EDEFAULT;
case ReportPackage.EVENT__COLOR:
return COLOR_EDEFAULT == null ? color != null : !COLOR_EDEFAULT.equals(color);
+ case ReportPackage.EVENT__COUNT:
+ return count != COUNT_EDEFAULT;
}
return super.eIsSet(featureID);
}
@@ -457,6 +509,8 @@
result.append(kind);
result.append(", color: ");
result.append(color);
+ result.append(", count: ");
+ result.append(count);
result.append(')');
return result.toString();
}
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventSourceImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventSourceImpl.java
index 2852504..b61d0a6 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventSourceImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/EventSourceImpl.java
@@ -35,11 +35,11 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventSourceImpl#getName <em>Name</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.EventSourceImpl#getProperties <em>Properties</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/LoggingDataImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/LoggingDataImpl.java
index 2caab0e..9226dcb 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/LoggingDataImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/LoggingDataImpl.java
@@ -27,11 +27,11 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.LoggingDataImpl#getText <em>Text</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.LoggingDataImpl#getCategory <em>Category</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/NodeImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/NodeImpl.java
index cf72b06..9a7db63 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/NodeImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/NodeImpl.java
@@ -44,6 +44,7 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.NodeImpl#getStartTime <em>Start Time</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.NodeImpl#getEndTime <em>End Time</em>}</li>
@@ -54,8 +55,8 @@
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.NodeImpl#getParent <em>Parent</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.NodeImpl#getReport <em>Report</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.NodeImpl#getSnapshots <em>Snapshots</em>}</li>
+ * <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.NodeImpl#getDuration <em>Duration</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
@@ -161,6 +162,26 @@
protected EList<Snaphot> snapshots;
/**
+ * The default value of the '{@link #getDuration() <em>Duration</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDuration()
+ * @generated
+ * @ordered
+ */
+ protected static final long DURATION_EDEFAULT = 0L;
+
+ /**
+ * The cached value of the '{@link #getDuration() <em>Duration</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDuration()
+ * @generated
+ * @ordered
+ */
+ protected long duration = DURATION_EDEFAULT;
+
+ /**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
@@ -377,6 +398,27 @@
* <!-- end-user-doc -->
* @generated
*/
+ public long getDuration() {
+ return duration;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDuration(long newDuration) {
+ long oldDuration = duration;
+ duration = newDuration;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ReportPackage.NODE__DURATION, oldDuration, duration));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
@SuppressWarnings("unchecked")
@Override
public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
@@ -462,6 +504,8 @@
return getReport();
case ReportPackage.NODE__SNAPSHOTS:
return getSnapshots();
+ case ReportPackage.NODE__DURATION:
+ return getDuration();
}
return super.eGet(featureID, resolve, coreType);
}
@@ -505,6 +549,9 @@
getSnapshots().clear();
getSnapshots().addAll((Collection<? extends Snaphot>)newValue);
return;
+ case ReportPackage.NODE__DURATION:
+ setDuration((Long)newValue);
+ return;
}
super.eSet(featureID, newValue);
}
@@ -544,6 +591,9 @@
case ReportPackage.NODE__SNAPSHOTS:
getSnapshots().clear();
return;
+ case ReportPackage.NODE__DURATION:
+ setDuration(DURATION_EDEFAULT);
+ return;
}
super.eUnset(featureID);
}
@@ -574,6 +624,8 @@
return getReport() != null;
case ReportPackage.NODE__SNAPSHOTS:
return snapshots != null && !snapshots.isEmpty();
+ case ReportPackage.NODE__DURATION:
+ return duration != DURATION_EDEFAULT;
}
return super.eIsSet(featureID);
}
@@ -594,6 +646,8 @@
result.append(endTime);
result.append(", name: ");
result.append(name);
+ result.append(", duration: ");
+ result.append(duration);
result.append(')');
return result.toString();
}
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/PropertyMapImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/PropertyMapImpl.java
index 136627f..43c2251 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/PropertyMapImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/PropertyMapImpl.java
@@ -31,11 +31,11 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.PropertyMapImpl#getTypedKey <em>Key</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.PropertyMapImpl#getTypedValue <em>Value</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportBuilderStoreImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportBuilderStoreImpl.java
index 827b488..2ec9f7a 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportBuilderStoreImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportBuilderStoreImpl.java
@@ -30,11 +30,11 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ReportBuilderStoreImpl#getReport <em>Report</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ReportBuilderStoreImpl#getCurrentNode <em>Current Node</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportContainerImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportContainerImpl.java
index f935210..066221c 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportContainerImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportContainerImpl.java
@@ -26,10 +26,10 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ReportContainerImpl#getContent <em>Content</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportFactoryImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportFactoryImpl.java
index de9798f..c3ac657 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportFactoryImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportFactoryImpl.java
@@ -18,6 +18,7 @@
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.impl.EFactoryImpl;
import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.rcptt.sherlock.core.model.sherlock.report.*;
import org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event;
import org.eclipse.rcptt.sherlock.core.model.sherlock.report.EventKind;
import org.eclipse.rcptt.sherlock.core.model.sherlock.report.EventSource;
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportImpl.java
index 4f2d8e4..4f2ea7b 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportImpl.java
@@ -37,11 +37,11 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ReportImpl#getRoot <em>Root</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ReportImpl#getSources <em>Sources</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportPackageImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportPackageImpl.java
index 291be22..8e2bf3b 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportPackageImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ReportPackageImpl.java
@@ -342,6 +342,15 @@
* <!-- end-user-doc -->
* @generated
*/
+ public EAttribute getNode_Duration() {
+ return (EAttribute)nodeEClass.getEStructuralFeatures().get(9);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
public EClass getEvent() {
return eventEClass;
}
@@ -405,6 +414,15 @@
* <!-- end-user-doc -->
* @generated
*/
+ public EAttribute getEvent_Count() {
+ return (EAttribute)eventEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
public EClass getEventSource() {
return eventSourceEClass;
}
@@ -670,6 +688,7 @@
createEReference(nodeEClass, NODE__PARENT);
createEReference(nodeEClass, NODE__REPORT);
createEReference(nodeEClass, NODE__SNAPSHOTS);
+ createEAttribute(nodeEClass, NODE__DURATION);
eventEClass = createEClass(EVENT);
createEAttribute(eventEClass, EVENT__TIME);
@@ -678,6 +697,7 @@
createEReference(eventEClass, EVENT__SOURCE);
createEAttribute(eventEClass, EVENT__KIND);
createEAttribute(eventEClass, EVENT__COLOR);
+ createEAttribute(eventEClass, EVENT__COUNT);
eventSourceEClass = createEClass(EVENT_SOURCE);
createEAttribute(eventSourceEClass, EVENT_SOURCE__NAME);
@@ -761,6 +781,7 @@
initEReference(getNode_Parent(), this.getNode(), this.getNode_Children(), "parent", null, 0, 1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEReference(getNode_Report(), this.getReport(), this.getReport_Root(), "report", null, 0, 1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEReference(getNode_Snapshots(), this.getSnaphot(), null, "snapshots", null, 0, -1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getNode_Duration(), ecorePackage.getELong(), "duration", "0", 0, 1, Node.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEClass(eventEClass, Event.class, "Event", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEAttribute(getEvent_Time(), ecorePackage.getELong(), "time", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -769,6 +790,7 @@
initEReference(getEvent_Source(), this.getEventSource(), null, "source", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEAttribute(getEvent_Kind(), this.getEventKind(), "kind", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEAttribute(getEvent_Color(), ecorePackage.getEString(), "color", null, 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getEvent_Count(), ecorePackage.getEInt(), "count", "1", 0, 1, Event.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEClass(eventSourceEClass, EventSource.class, "EventSource", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
initEAttribute(getEventSource_Name(), ecorePackage.getEString(), "name", null, 0, 1, EventSource.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ScreenshotImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ScreenshotImpl.java
index ae9781a..8b42d70 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ScreenshotImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/ScreenshotImpl.java
@@ -27,12 +27,12 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ScreenshotImpl#getData <em>Data</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ScreenshotImpl#getKind <em>Kind</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.ScreenshotImpl#getMessage <em>Message</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/SnaphotImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/SnaphotImpl.java
index ad7aef1..31ffff0 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/SnaphotImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/SnaphotImpl.java
@@ -35,12 +35,12 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.SnaphotImpl#getTime <em>Time</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.SnaphotImpl#getProperties <em>Properties</em>}</li>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.SnaphotImpl#getData <em>Data</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/TraceDataImpl.java b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/TraceDataImpl.java
index a679b88..09b3633 100644
--- a/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/TraceDataImpl.java
+++ b/watson/org.eclipse.rcptt.watson.core/src-gen/org/eclipse/rcptt/sherlock/core/model/sherlock/report/impl/TraceDataImpl.java
@@ -26,10 +26,10 @@
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
+ * </p>
* <ul>
* <li>{@link org.eclipse.rcptt.sherlock.core.model.sherlock.report.impl.TraceDataImpl#getMessage <em>Message</em>}</li>
* </ul>
- * </p>
*
* @generated
*/
diff --git a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/INodeBuilder.java b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/INodeBuilder.java
index 52d2d8b..d9a78fa 100644
--- a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/INodeBuilder.java
+++ b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/INodeBuilder.java
@@ -32,6 +32,11 @@
public INodeBuilder beginTask(String name);
/**
+ * Find existing subnode by name and index and make it active.
+ */
+ public INodeBuilder appendTask(String name);
+
+ /**
* End current task and go level up
*/
public void endTask();
diff --git a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/ReportBuilder.java b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/ReportBuilder.java
index f49f63a..a86f810 100644
--- a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/ReportBuilder.java
+++ b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/ReportBuilder.java
@@ -17,6 +17,7 @@
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.util.EcoreUtil.Copier;
+import org.eclipse.rcptt.ecl.runtime.BoxedValues;
import org.eclipse.rcptt.sherlock.core.INodeBuilder;
import org.eclipse.rcptt.sherlock.core.model.sherlock.report.Event;
import org.eclipse.rcptt.sherlock.core.model.sherlock.report.EventSource;
@@ -32,6 +33,9 @@
* Build a complex report.
*/
public class ReportBuilder implements IReportBuilder {
+ private static final String NODE_INDEX_PROPERTY = "rcptt.watson.node.index";
+ private static final String NODE_LASTSTARTTIME_PROPERTY = "rcptt.watson.node.last-start-time";
+
private final Report report;
private NodeBuilder currentNode;
@@ -39,6 +43,8 @@
private class NodeBuilder implements INodeBuilder {
private final Node node;
private NodeBuilder parent;
+ private int currentChildIndex = 0;
+
private NodeBuilder(NodeBuilder parent, Node node){
if (parent == null) {
EObject container = node.eContainer();
@@ -49,21 +55,60 @@
this.parent = parent;
this.node = node;
}
+
/**
* Will add new node to current one and go one level down.
*/
@Override
public INodeBuilder beginTask(String name) {
+ NodeBuilder childNode = findChildNode(name);
+ if (childNode != null) {
+ return childNode;
+ }
Node child = ReportFactory.eINSTANCE.createNode();
child.setName(name);
child.setStartTime(getTime());
+ setNodeIndex(child, currentChildIndex);
+ setNodeLastStartTime(child, child.getStartTime());
synchronized (report) {
- node.getChildren().add(child);
+ node.getChildren().add(getChildPosition(name), child);
currentNode = new NodeBuilder(this, child);
}
+ currentChildIndex++;
return currentNode;
}
+ private NodeBuilder findChildNode(String name) {
+ for (Node child : node.getChildren()) {
+ if (name.equals(child.getName())
+ && currentChildIndex == getNodeIndex(child)) {
+ setNodeLastStartTime(child, getTime());
+ synchronized (report) {
+ currentNode = new NodeBuilder(this, child);
+ }
+ currentChildIndex++;
+ return currentNode;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Find existing subnode by name and index and make it active.
+ */
+ public INodeBuilder appendTask(String name) {
+ for (Node child : node.getChildren()) {
+ if (name.equals(child.getName())) {
+ setNodeLastStartTime(child, getTime());
+ synchronized (report) {
+ currentNode = new NodeBuilder(this, child);
+ }
+ return currentNode;
+ }
+ }
+ return beginTask(name);
+ }
+
/**
* Will go one level up.
*/
@@ -71,6 +116,8 @@
public void endTask() {
synchronized (report) {
node.setEndTime(getTime());
+ long duration = node.getEndTime() - getNodeLastStartTime(node);
+ node.setDuration(node.getDuration() + duration);
if (parent == null)
throw new IllegalStateException("Root report node can't be closed.");
currentNode = parent;
@@ -80,13 +127,26 @@
@Override
public void createEvent(Event event) {
synchronized (report) {
+ Event childEvent = findChildEvent(event);
+ if (childEvent != null) {
+ childEvent.setCount(childEvent.getCount() + 1);
+ return;
+ }
Event copy = EcoreUtil.copy(event);
copy.setTime(getTime());
node.getEvents().add(copy);
}
}
-
-
+
+ private Event findChildEvent(Event event) {
+ for (Event childEvent : node.getEvents()) {
+ if (EcoreUtil.equals(event.getData(), childEvent.getData())) {
+ return childEvent;
+ }
+ }
+ return null;
+ }
+
/*
* Add or append existing log entry into current node.
*/
@@ -109,8 +169,6 @@
public void setProperty(String key, EObject value) {
EObject copy = EcoreUtil.copy(value);
synchronized (report) {
- if (node.getProperties().containsKey(key))
- throw new IllegalStateException("Property " + key+ " is already set for node" + node.getName());
node.getProperties().put(key, copy);
}
}
@@ -153,6 +211,18 @@
return node.getName();
}
+ private int getChildPosition(String name) {
+ int position = -1;
+ int size = node.getChildren().size();
+ for (int i = 0; i < size; i++) {
+ Node child = node.getChildren().get(i);
+ if (currentChildIndex == getNodeIndex(child)) {
+ position = i;
+ }
+ }
+ return position == -1 ? size : (position + 1);
+ }
+
}
static private Report createReport() {
@@ -163,7 +233,7 @@
root.setStartTime(getTime());
return report;
}
-
+
private ReportBuilder(Report report, Node currentNode) {
this.report = report;
this.currentNode = new NodeBuilder(null, currentNode);
@@ -206,8 +276,9 @@
public Report getReportCopy() {
synchronized (report) {
Report reportCopy = EcoreUtil.copy(report);
- reportCopy.getRoot().setEndTime(getTime());
-
+ Node root = reportCopy.getRoot();
+ root.setEndTime(getTime());
+ root.setDuration(root.getEndTime() - root.getStartTime());
return reportCopy;
}
}
@@ -297,7 +368,9 @@
}
assert store.getCurrentNode() != null;
assert store.getCurrentNode().eContainer() != null;
- store.getReport().getRoot().setEndTime(getTime());
+ Node root = store.getReport().getRoot();
+ root.setEndTime(getTime());
+ root.setDuration(root.getEndTime() - root.getStartTime());
return store;
}
@@ -314,4 +387,27 @@
}
return snapshot;
}
+
+ private static int getNodeIndex(Node node) {
+ Object index = BoxedValues.unbox(node.getProperties().get(NODE_INDEX_PROPERTY));
+ assert index != null;
+ assert index instanceof Integer;
+ return ((Integer) index).intValue();
+ }
+
+ private static void setNodeIndex(Node node, int index) {
+ node.getProperties().put(NODE_INDEX_PROPERTY, BoxedValues.box(index));
+ }
+
+ private static long getNodeLastStartTime(Node node) {
+ Object index = BoxedValues.unbox(node.getProperties().get(NODE_LASTSTARTTIME_PROPERTY));
+ assert index != null;
+ assert index instanceof Long;
+ return ((Long) index).longValue();
+ }
+
+ private static void setNodeLastStartTime(Node node, long startTime) {
+ node.getProperties().put(NODE_LASTSTARTTIME_PROPERTY, BoxedValues.box(startTime));
+ }
+
}
diff --git a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/SimpleReportGenerator.java b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/SimpleReportGenerator.java
index 848aa2f..96a3954 100644
--- a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/SimpleReportGenerator.java
+++ b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/SimpleReportGenerator.java
@@ -53,8 +53,7 @@
appendTabs(stream, tabs);
stream.append(infoNode.getName())
.append(" ")
- .append(Long.toString(infoNode.getEndTime()
- - infoNode.getStartTime()));
+ .append(Long.toString(infoNode.getDuration()));
stream.append(" {").append(LINE_SEPARATOR);
EMap<String, EObject> list = infoNode.getProperties();
@@ -96,54 +95,59 @@
}
}
- public void printWaitInfo(StringBuilder stream, int tabs, String key, Q7WaitInfoRoot value) {
- Q7WaitInfoRoot info = (Q7WaitInfoRoot) value;
+ public void printWaitInfo(StringBuilder stream, int tabs, String key, Q7WaitInfoRoot info) {
List<Q7WaitInfo> infos = new ArrayList<Q7WaitInfo>(info.getInfos());
- Collections.sort(infos, new Comparator<Q7WaitInfo>() {
- @Override
- public int compare(Q7WaitInfo o1, Q7WaitInfo o2) {
- return Long.valueOf(o1.getLastTick()).compareTo(Long.valueOf(o2.getLastTick()));
- }
- });
if (infos.size() == 0) {
return;
}
- long endTime = info.getStartTime();
- int total = 0;
+ Comparator<Q7WaitInfo> comparator = new Comparator<Q7WaitInfo>() {
+ @Override
+ public int compare(Q7WaitInfo info1, Q7WaitInfo info2) {
+ return Long.compare(info1.getDuration(), info2.getDuration());
+ }
+ };
+ Collections.sort(infos, Collections.reverseOrder(comparator));
+
+ boolean isEmpty = true;
for (Q7WaitInfo q7WaitInfo : infos) {
if (getType(info, q7WaitInfo) == null) {
continue;
}
- if (endTime < q7WaitInfo.getEndTime()) {
- endTime = q7WaitInfo.getEndTime();
+ if (!TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+ && getClassName(info, q7WaitInfo).startsWith("org.eclipse")) { //$NON-NLS-1$
+ continue;
}
- total++;
+ if (q7WaitInfo.getDuration() == 0) {
+ continue;
+ }
+ isEmpty = false;
+ break;
}
- if (total == 0) {
+ if (isEmpty) {
return;
}
- appendTabs(stream, tabs + 4).append("--> q7 wait details <-- total wait time: ")
- .append(Long.toString(endTime - info.getStartTime()))
+ appendTabs(stream, tabs + 4).append("--> Wait details <--")
.append(LINE_SEPARATOR);
for (Q7WaitInfo i : infos) {
- long totalTime = i.getEndTime() - i.getStartTime();
- String className = getClassName(value, i);
+ long totalTime = i.getDuration();
String type = getType(info, i);
+ String className = getClassName(info, i);
if (type == null) {
continue;
}
+ if (!TeslaFeatures.isIncludeEclipseMethodsWaitDetails()
+ && className.startsWith("org.eclipse")) { //$NON-NLS-1$
+ continue;
+ }
+ if (totalTime == 0) {
+ continue;
+ }
appendTabs(stream, tabs + 8).append(type).append(": ")
.append(className);
- // stream.append(" time: ").append(Long.toString(i.getStartTime())).append(" - ").append(i.getEndTime());
+
if (totalTime != 0)
stream.append(", total time: ").append(Long.toString(totalTime));
- if (i.getLastTick() > 0) {
- // stream.append(", total ticks: ").append(Long.toString(i.getTicks()));
- stream.append(", ticks: ").append(Long.toString(i.getLastTick() - i.getTicks() + 1));
- stream.append(" to ").append(Long.toString(i.getLastTick()));
- }
- // if( i.getLastTick() != 0) {
- // }
+
stream.append(LINE_SEPARATOR);
}
}
diff --git a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/internal/EventLogEventProvider.java b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/internal/EventLogEventProvider.java
index 3048d4a..9cbfc71 100644
--- a/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/internal/EventLogEventProvider.java
+++ b/watson/org.eclipse.rcptt.watson.core/src/org/eclipse/rcptt/sherlock/core/reporting/internal/EventLogEventProvider.java
@@ -45,7 +45,6 @@
Event event = ReportFactory.eINSTANCE.createEvent();
EclipseStatus data = SherlockCore.convert(status);
event.setData(data);
- data.setThreadName(Thread.currentThread().getName());
builder.getCurrent().createEvent(event);
}
}
diff --git a/watson/org.eclipse.rcptt.watson.ui/src/org/eclipse/rcptt/sherlock/ui/reportdetails/ReportTimelineComposite.java b/watson/org.eclipse.rcptt.watson.ui/src/org/eclipse/rcptt/sherlock/ui/reportdetails/ReportTimelineComposite.java
index bf31aa7..5d76d4c 100644
--- a/watson/org.eclipse.rcptt.watson.ui/src/org/eclipse/rcptt/sherlock/ui/reportdetails/ReportTimelineComposite.java
+++ b/watson/org.eclipse.rcptt.watson.ui/src/org/eclipse/rcptt/sherlock/ui/reportdetails/ReportTimelineComposite.java
@@ -948,8 +948,8 @@
.append("\n");
builder.append(
"Time spend:"
- + TimeFormatHelper.format(node.getEndTime()
- - node.getStartTime())).append("\n");
+ + TimeFormatHelper.format(node.getDuration()))
+ .append("\n");
SimpleReportGenerator gen = new SimpleReportGenerator();
for (EventSource source : sources.keySet()) {