1 package org
.eclipse
.linuxtools
.lttng
.jni
.factory
;
2 /*******************************************************************************
3 * Copyright (c) 2009, 2011 Ericsson, MontaVista Software
5 * All rights reserved. This program and the accompanying materials are
6 * made available under the terms of the Eclipse Public License v1.0 which
7 * accompanies this distribution, and is available at
8 * http://www.eclipse.org/legal/epl-v10.html
11 * William Bourque (wbourque@gmail.com) - Initial API and implementation
12 * Yufen Kuo (ykuo@mvista.com) - add support to allow user specify trace library path
13 *******************************************************************************/
15 import org
.eclipse
.linuxtools
.lttng
.jni
.JniTrace
;
16 import org
.eclipse
.linuxtools
.lttng
.jni
.exception
.JniException
;
17 import org
.eclipse
.linuxtools
.lttng
.jni
.exception
.JniTraceVersionException
;
18 import org
.eclipse
.linuxtools
.lttng
.jni_v2_3
.JniTrace_v2_3
;
19 import org
.eclipse
.linuxtools
.lttng
.jni_v2_5
.JniTrace_v2_5
;
20 import org
.eclipse
.linuxtools
.lttng
.jni_v2_6
.JniTrace_v2_6
;
23 * <b><u>JniTraceFactory</u></b>
25 * This class factory is responsible of returning the correct JniTrace implementation from a (valid) trace path.<p>
27 * The different version supported are listed below and the same version string are expected to be returned by JniTraceVersion.<br>
28 * Each version need a different Lttv library so each need its liblttvtraceread-X.Y.so installed and available on the system.
31 public class JniTraceFactory
{
34 // Version string of the supported library version
35 // These will be used in the switch below to find the correct version
37 static final String TraceVersion_v2_3
= "2.3"; //$NON-NLS-1$
38 static final String TraceVersion_v2_5
= "2.5"; //$NON-NLS-1$
39 static final String TraceVersion_v2_6
= "2.6"; //$NON-NLS-1$
42 * Default constructor is forbidden
44 private JniTraceFactory(){
48 * Factory function : return the correct version of the JniTrace from a given path<p>
49 * NOTE : The correct Lttv library (liblttvtraceread-X.Y.so) need to be installed and accessible otherwise this
50 * function will return an Exception.
52 * If the path is wrong or if the library is not supported (bad version or missing library) an Exception will be throwed.
54 * @param path Path of the trace we want to open
55 * @param traceLibPath Directory to the trace libraries
56 * @param show_debug Should JniTrace print debug or not?
58 * @return a newly allocated JniTrace of the correct version
60 * @throws JniException
62 static public JniTrace
getJniTrace(String path
, String traceLibPath
, boolean show_debug
) throws JniException
{
65 JniTraceVersion traceVersion
= new JniTraceVersion(path
, traceLibPath
);
66 JniTrace trace
= null;
67 if (traceVersion
.getVersionAsString().equals(TraceVersion_v2_6
)) {
68 trace
= new JniTrace_v2_6(path
, show_debug
);
69 } else if (traceVersion
.getVersionAsString().equals(
71 trace
= new JniTrace_v2_5(path
, show_debug
);
72 } else if (traceVersion
.getVersionAsString().equals(
74 trace
= new JniTrace_v2_3(path
, show_debug
);
77 if (traceLibPath
!= null)
78 trace
.setTraceLibPath(traceLibPath
);
79 trace
.openTrace(path
);
82 String errMsg
= "\nERROR : Unrecognized/unsupported trace version." + //$NON-NLS-1$
83 "\nLibrary reported a trace version "
84 + traceVersion
.getVersionAsString()
85 + "." + //$NON-NLS-1$ //$NON-NLS-2$
86 "\nMake sure you installed the Lttv library that support this version (look for liblttvtraceread-"
87 + traceVersion
.getVersionAsString() + ".so).\n"; //$NON-NLS-1$ //$NON-NLS-2$
88 throw new JniException(errMsg
);
91 } catch (JniTraceVersionException e
) {
92 String errMsg
= "\nERROR : Call to JniTraceVersion() failed." + //$NON-NLS-1$
93 "\nThis usually means that the library (liblttvtraceread_loader.so) could not be found."
95 "\nMake sure the LTTv library is installed and that your LD_LIBRARY_PATH is set correctly (see help for more details)\n."; //$NON-NLS-1$
97 throw new JniException(errMsg
);