From ef06db91a16b0a941fda08e6aca11aa255461ffb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Genevi=C3=A8ve=20Bastien?= Date: Tue, 26 Jan 2016 23:17:27 -0500 Subject: [PATCH] tmf: Add properties to the state system analyses MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: I91b9a583fd269c1f8d2de72dc517dce2ab2cf2d8 Signed-off-by: Geneviève Bastien Reviewed-on: https://git.eclipse.org/r/65228 Reviewed-by: Hudson CI Reviewed-by: Marc-Andre Laperle Tested-by: Marc-Andre Laperle --- .../org/apache/commons/io/FileUtils.eea | 4 + rcp/org.eclipse.tracecompass.rcp/feature.xml | 7 ++ rcp/org.eclipse.tracecompass.rcp/pom.xml | 1 + .../tracecompass-e4.5.target | 1 + .../tracecompass-eStaging.target | 1 + .../StateSystemAnalysisModuleTest.java | 17 +++++ .../META-INF/MANIFEST.MF | 3 +- .../tmf/core/statesystem/Messages.java | 44 +++++++++++ .../TmfStateSystemAnalysisModule.java | 73 ++++++++++++++++--- .../tmf/core/statesystem/messages.properties | 12 +++ 10 files changed, 153 insertions(+), 10 deletions(-) create mode 100644 common/org.eclipse.tracecompass.common.core/annotations/org/apache/commons/io/FileUtils.eea create mode 100644 tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/Messages.java create mode 100644 tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/messages.properties diff --git a/common/org.eclipse.tracecompass.common.core/annotations/org/apache/commons/io/FileUtils.eea b/common/org.eclipse.tracecompass.common.core/annotations/org/apache/commons/io/FileUtils.eea new file mode 100644 index 0000000000..e5dcaf1970 --- /dev/null +++ b/common/org.eclipse.tracecompass.common.core/annotations/org/apache/commons/io/FileUtils.eea @@ -0,0 +1,4 @@ +class org/apache/commons/io/FileUtils +byteCountToDisplaySize + (J)Ljava/lang/String; + (J)L1java/lang/String; diff --git a/rcp/org.eclipse.tracecompass.rcp/feature.xml b/rcp/org.eclipse.tracecompass.rcp/feature.xml index bd3be349c5..8d3a96c696 100644 --- a/rcp/org.eclipse.tracecompass.rcp/feature.xml +++ b/rcp/org.eclipse.tracecompass.rcp/feature.xml @@ -113,4 +113,11 @@ version="0.0.0" unpack="false"/> + + diff --git a/rcp/org.eclipse.tracecompass.rcp/pom.xml b/rcp/org.eclipse.tracecompass.rcp/pom.xml index 651c6a7cc2..3d136b3cd7 100644 --- a/rcp/org.eclipse.tracecompass.rcp/pom.xml +++ b/rcp/org.eclipse.tracecompass.rcp/pom.xml @@ -73,6 +73,7 @@ + diff --git a/releng/org.eclipse.tracecompass.target/tracecompass-e4.5.target b/releng/org.eclipse.tracecompass.target/tracecompass-e4.5.target index b35867c96f..e78814a46d 100644 --- a/releng/org.eclipse.tracecompass.target/tracecompass-e4.5.target +++ b/releng/org.eclipse.tracecompass.target/tracecompass-e4.5.target @@ -25,6 +25,7 @@ + diff --git a/releng/org.eclipse.tracecompass.target/tracecompass-eStaging.target b/releng/org.eclipse.tracecompass.target/tracecompass-eStaging.target index ad3b6d7018..5df007f431 100644 --- a/releng/org.eclipse.tracecompass.target/tracecompass-eStaging.target +++ b/releng/org.eclipse.tracecompass.target/tracecompass-eStaging.target @@ -26,6 +26,7 @@ + diff --git a/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/statesystem/StateSystemAnalysisModuleTest.java b/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/statesystem/StateSystemAnalysisModuleTest.java index dd212311ea..56dc6ce7e4 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/statesystem/StateSystemAnalysisModuleTest.java +++ b/tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/statesystem/StateSystemAnalysisModuleTest.java @@ -12,10 +12,12 @@ package org.eclipse.tracecompass.tmf.core.tests.statesystem; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; +import java.util.Map; import java.util.concurrent.TimeUnit; import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem; @@ -96,4 +98,19 @@ public class StateSystemAnalysisModuleTest { assertNotNull(module.getStateSystem()); } + /** + * Test that helper returns the right properties + */ + @Test + public void testProperties() { + + TmfStateSystemAnalysisModule mod = module; + assertNotNull(mod); + + /* The stub state system has in mem backend so only 1 property */ + Map properties = mod.getProperties(); + assertEquals(1, properties.size()); + + } + } diff --git a/tmf/org.eclipse.tracecompass.tmf.core/META-INF/MANIFEST.MF b/tmf/org.eclipse.tracecompass.tmf.core/META-INF/MANIFEST.MF index e74a3e9569..1ce1d55123 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core/META-INF/MANIFEST.MF +++ b/tmf/org.eclipse.tracecompass.tmf.core/META-INF/MANIFEST.MF @@ -61,4 +61,5 @@ Export-Package: org.eclipse.tracecompass.internal.tmf.core;x-friends:="org.eclip org.eclipse.tracecompass.tmf.core.util Import-Package: com.google.common.base, com.google.common.collect, - com.google.common.hash;version="15.0.0" + com.google.common.hash;version="15.0.0", + org.apache.commons.io diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/Messages.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/Messages.java new file mode 100644 index 0000000000..6900f75bdc --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/Messages.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2016 École Polytechnique de Montréal + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ + +package org.eclipse.tracecompass.tmf.core.statesystem; + +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.osgi.util.NLS; + +/** + * Message bundle for org.eclipse.tracecompass.tmf.core.statesystem + * + * @author Geneviève Bastien + * @since 2.0 + */ +public class Messages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.tracecompass.tmf.core.statesystem.messages"; //$NON-NLS-1$ + + /** + * Analysis not executed text + */ + public static @Nullable String TmfStateSystemAnalysisModule_PropertiesAnalysisNotExecuted; + /** + * Backend property text + */ + public static @Nullable String TmfStateSystemAnalysisModule_PropertiesBackend; + /** + * File size property text + */ + public static @Nullable String TmfStateSystemAnalysisModule_PropertiesFileSize; + + static { + // initialize resource bundle + NLS.initializeMessages(BUNDLE_NAME, Messages.class); + } + + private Messages() { + } +} diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/TmfStateSystemAnalysisModule.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/TmfStateSystemAnalysisModule.java index f4f6e61aa1..28ff148872 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/TmfStateSystemAnalysisModule.java +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/TmfStateSystemAnalysisModule.java @@ -18,12 +18,17 @@ import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull; import java.io.File; import java.io.IOException; import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.CountDownLatch; +import org.apache.commons.io.FileUtils; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.tracecompass.common.core.NonNullUtils; import org.eclipse.tracecompass.internal.tmf.core.statesystem.backends.partial.PartialHistoryBackend; import org.eclipse.tracecompass.internal.tmf.core.statesystem.backends.partial.PartialStateSystem; import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem; @@ -34,6 +39,7 @@ import org.eclipse.tracecompass.statesystem.core.backend.StateHistoryBackendFact import org.eclipse.tracecompass.tmf.core.analysis.TmfAbstractAnalysisModule; import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; +import org.eclipse.tracecompass.tmf.core.project.model.ITmfPropertiesProvider; import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest; import org.eclipse.tracecompass.tmf.core.request.TmfEventRequest; import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler; @@ -57,7 +63,7 @@ import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment; * @author Geneviève Bastien */ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisModule - implements ITmfAnalysisModuleWithStateSystems { + implements ITmfAnalysisModuleWithStateSystems, ITmfPropertiesProvider { private static final String EXTENSION = ".ht"; //$NON-NLS-1$ @@ -171,6 +177,16 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo // TmfAbstractAnalysisModule // ------------------------------------------------------------------------ + private @Nullable File getSsFile() { + ITmfTrace trace = getTrace(); + if (trace == null) { + return null; + } + String directory = TmfTraceManager.getSupplementaryFileDir(trace); + File htFile = new File(directory + getSsFileName()); + return htFile; + } + @Override protected boolean executeAnalysis(@Nullable final IProgressMonitor monitor) { IProgressMonitor mon = (monitor == null ? new NullProgressMonitor() : monitor); @@ -182,8 +198,7 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo try { /* Get the state system according to backend */ StateSystemBackendType backend = getBackendType(); - String directory; - File htFile; + ITmfTrace trace = getTrace(); if (trace == null) { @@ -192,15 +207,21 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo return false; } switch (backend) { - case FULL: - directory = TmfTraceManager.getSupplementaryFileDir(trace); - htFile = new File(directory + getSsFileName()); + case FULL: { + File htFile = getSsFile(); + if (htFile == null) { + return false; + } createFullHistory(id, provider, htFile); + } break; - case PARTIAL: - directory = TmfTraceManager.getSupplementaryFileDir(trace); - htFile = new File(directory + getSsFileName()); + case PARTIAL: { + File htFile = getSsFile(); + if (htFile == null) { + return false; + } createPartialHistory(id, provider, htFile); + } break; case INMEM: createInMemoryHistory(id, provider); @@ -560,4 +581,38 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo private static boolean isCompleteTrace(ITmfTrace trace) { return !(trace instanceof ITmfTraceCompleteness) || ((ITmfTraceCompleteness) trace).isComplete(); } + + // ------------------------------------------------------------------------ + // ITmfPropertiesProvider + // ------------------------------------------------------------------------ + + /** + * @since 2.0 + */ + @Override + public @NonNull Map<@NonNull String, @NonNull String> getProperties() { + Map<@NonNull String, @NonNull String> properties = new HashMap<>(); + + StateSystemBackendType backend = getBackendType(); + properties.put(NonNullUtils.checkNotNull(Messages.TmfStateSystemAnalysisModule_PropertiesBackend), NonNullUtils.checkNotNull(backend.name())); + switch (backend) { + case FULL: + case PARTIAL: + File htFile = getSsFile(); + if (htFile != null) { + if (htFile.exists()) { + properties.put(NonNullUtils.checkNotNull(Messages.TmfStateSystemAnalysisModule_PropertiesFileSize), FileUtils.byteCountToDisplaySize(htFile.length())); + } else { + properties.put(NonNullUtils.checkNotNull(Messages.TmfStateSystemAnalysisModule_PropertiesFileSize), NonNullUtils.checkNotNull(Messages.TmfStateSystemAnalysisModule_PropertiesAnalysisNotExecuted)); + } + } + break; + case INMEM: + case NULL: + default: + break; + + } + return properties; + } } diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/messages.properties b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/messages.properties new file mode 100644 index 0000000000..c9b535110d --- /dev/null +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/messages.properties @@ -0,0 +1,12 @@ +############################################################################### +# Copyright (c) 2016 École Polytechnique de Montréal +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +############################################################################### + +TmfStateSystemAnalysisModule_PropertiesAnalysisNotExecuted=Analysis hasn't been executed +TmfStateSystemAnalysisModule_PropertiesBackend=Backend type +TmfStateSystemAnalysisModule_PropertiesFileSize=Size on disk -- 2.34.1