Internalize lttng.jni
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.jni / src / org / eclipse / linuxtools / lttng / jni / factory / JniTraceFactory.java
1 package org.eclipse.linuxtools.lttng.jni.factory;
2 /*******************************************************************************
3 * Copyright (c) 2009, 2011 Ericsson, MontaVista Software
4 *
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
9 *
10 * Contributors:
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 *******************************************************************************/
14
15 import org.eclipse.linuxtools.internal.lttng.jni.exception.JniException;
16 import org.eclipse.linuxtools.internal.lttng.jni.exception.JniTraceVersionException;
17 import org.eclipse.linuxtools.internal.lttng.jni_v2_3.JniTrace_v2_3;
18 import org.eclipse.linuxtools.internal.lttng.jni_v2_5.JniTrace_v2_5;
19 import org.eclipse.linuxtools.internal.lttng.jni_v2_6.JniTrace_v2_6;
20 import org.eclipse.linuxtools.lttng.jni.JniTrace;
21
22 /**
23 * <b><u>JniTraceFactory</u></b>
24 * <p>
25 * This class factory is responsible of returning the correct JniTrace implementation from a (valid) trace path.<p>
26 *
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.
29 *
30 */
31 public class JniTraceFactory {
32
33 // ***
34 // Version string of the supported library version
35 // These will be used in the switch below to find the correct version
36 // ***
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$
40
41 /*
42 * Default constructor is forbidden
43 */
44 private JniTraceFactory(){
45 }
46
47 /**
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.
51 *
52 * If the path is wrong or if the library is not supported (bad version or missing library) an Exception will be throwed.
53 *
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?
57 *
58 * @return a newly allocated JniTrace of the correct version
59 *
60 * @throws JniException
61 */
62 static public JniTrace getJniTrace(String path, String traceLibPath, boolean show_debug) throws JniException {
63
64 try {
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);
73 }
74 if (trace != null) {
75 if (traceLibPath != null)
76 trace.setTraceLibPath(traceLibPath);
77 trace.openTrace(path);
78 return trace;
79 } else {
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);
86 }
87
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$
93
94 throw new JniException(errMsg);
95 }
96 }
97
98 }
This page took 0.031719 seconds and 5 git commands to generate.