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(TraceVersion_v2_5
)) {
70 trace
= new JniTrace_v2_5(path
, show_debug
);
71 } else if (traceVersion
.getVersionAsString().equals(TraceVersion_v2_3
)) {
72 trace
= new JniTrace_v2_3(path
, show_debug
);
75 if (traceLibPath
!= null)
76 trace
.setTraceLibPath(traceLibPath
);
77 trace
.openTrace(path
);
80 String errMsg
= "Unrecognized/unsupported trace version\n\n" //$NON-NLS-1$
81 + "Library reported trace version " + traceVersion
.getVersionAsString() + "\n\n" //$NON-NLS-1$ //$NON-NLS-2$
82 + "Make sure that you installed the corresponding parsing library (liblttvtraceread-" + traceVersion
.getVersionAsString() + ".so) " //$NON-NLS-1$ //$NON-NLS-2$
83 + "and that it can be found from either your LD_LIBRARY_PATH or the Trace Library Path (in LTTng project properties)\n\n" //$NON-NLS-1$
84 + "Refer to the LTTng User Guide for more information"; //$NON-NLS-1$
85 throw new JniException(errMsg
);
88 } catch (JniTraceVersionException e
) {
89 String errMsg
= "Couldn't obtain the trace version\n\n" //$NON-NLS-1$
90 + "This usually means that the library loader (liblttvtraceread_loader.so) could not be found.\n\n" //$NON-NLS-1$
91 + "Make sure you installed the parsing library and that your LD_LIBRARY_PATH or Trace Library Path is set correctly\n\n" //$NON-NLS-1$
92 + "Refer to the LTTng User Guide for more information"; //$NON-NLS-1$
94 throw new JniException(errMsg
);