1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-24 01:15:29 +02:00

[api][refactor][170920]

Removed PerformanceLogger per previous discussions
Renamed RemoteSystemLogListener to LogListener and made internal
Removed IRemoteSystemsLogging constants interface - moved constants to Logger,
they were only referenced from the Logger anyway
Removed LabelUtil from its internal package - used hardcoded & for mnemonics
instead
Removed usage of LabelUtil from LoggingPreferencePage
Removed all the resource bundle code from RemoteSystemsLoggingPlugin - it was
obsolete
This commit is contained in:
David Dykstal 2007-03-29 03:10:04 +00:00
parent 1f20507aa2
commit 1580cddb1d
11 changed files with 84 additions and 1044 deletions

View file

@ -9,6 +9,7 @@ Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime
Eclipse-LazyStart: true
Export-Package: org.eclipse.rse.internal.logging;x-internal:=true,
org.eclipse.rse.internal.logging.ui,
org.eclipse.rse.logging
Bundle-Vendor: %providerName
Bundle-RequiredExecutionEnvironment: J2SE-1.4

View file

@ -14,7 +14,7 @@
* {Name} (company) - description of contribution.
********************************************************************************/
package org.eclipse.rse.logging;
package org.eclipse.rse.internal.logging;
import java.io.BufferedWriter;
import java.io.File;
@ -32,7 +32,7 @@ import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
/**
* Log Listener is a sink for messages coming from Logger.
*/
class RemoteSystemLogListener implements ILogListener, IPropertyChangeListener {
public class LogListener implements ILogListener, IPropertyChangeListener {
private PrintWriter log = null;
private File outputFile = null;
@ -41,7 +41,7 @@ class RemoteSystemLogListener implements ILogListener, IPropertyChangeListener {
* Create a new log listener for a plugin.
* @param plugin The plugin for which to create a log listener.
*/
public RemoteSystemLogListener(Plugin plugin) {
public LogListener(Plugin plugin) {
IPath path = plugin.getStateLocation().addTrailingSeparator().append(".log"); //$NON-NLS-1$
outputFile = path.toFile();
if ((outputFile != null) && (outputFile.exists())) {

View file

@ -18,7 +18,7 @@ package org.eclipse.rse.internal.logging;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
import org.eclipse.rse.logging.IRemoteSystemsLogging;
import org.eclipse.rse.logging.Logger;
import org.eclipse.rse.logging.RemoteSystemsLoggingPlugin;
/**
@ -38,6 +38,6 @@ public class LoggingPreferenceInitializer extends AbstractPreferenceInitializer
*/
public void initializeDefaultPreferences() {
Preferences prefs = RemoteSystemsLoggingPlugin.getDefault().getPluginPreferences();
prefs.setDefault(IRemoteSystemsLogging.DEBUG_LEVEL, IRemoteSystemsLogging.LOG_ERROR);
prefs.setDefault(Logger.DEBUG_LEVEL, Logger.LOG_ERROR);
}
}

View file

@ -1,696 +0,0 @@
/********************************************************************************
* Copyright (c) 2002, 2006 IBM Corporation. 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
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: David McKnight, Kushal Munir,
* Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
********************************************************************************/
package org.eclipse.rse.internal.logging.performance;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.text.MessageFormat;
import java.util.Calendar;
import java.util.EmptyStackException;
import java.util.HashMap;
import java.util.Stack;
import java.util.StringTokenizer;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Comment;
import org.w3c.dom.DOMException;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* A performance measurement class for benchmarking.
* This performance framework provides stopwatch functions
* for calculating elapsed time for an operation.
* <p>
* This class should be used only at development time since
* it prints to System.out
* and contains non-translated strings.
* <p>
* It is highly likely that this class will be deprecated in 2.0.
* Use TPTPs tools for performance monitoring and logging.
* <pre>
* Usage example
* Method_A {
* String key = PerformanceLogger.register("RSE","WDSC","5120");
* PerformanceLogger.start(key, "OP1"); //CallerID is OP1
* Method_B();
* PerformanceLogger.stop(key);
* }
*
* Method_B {
* PerformanceLogger.start("RSE"); //"RSE" component, CalleID="class.method"
* // Do something
* PerformanceLogger.stop("RSE");
* }
*
* Method_C {
* PerformanceLogger.start(); //Use the default component for recording
* // Do something
* PerformanceLogger.stop();
* }
*</pre>
*/
public class PerformanceLogger {
public final static int OPTION_GET_ALL = 1;
public final static int OPTION_GET_FEATURE = 2;
public final static int OPTION_GET_VERSION = 3;
private final static Object[] EMPTY = {};
private final static String ELEMENT_TASK = "Task"; //$NON-NLS-1$
private final static String ATTRIBUTE_NAME_TASKID = "CallerID"; //$NON-NLS-1$
private final static String DEFAULT_COMPONENT = "_PERFORMANCELOGGER_"; //$NON-NLS-1$
private static boolean ENABLE_PERFORMANCE_LOGGING = false; /*for user logging enabling */
//static long currentAssignedID = -1;
private static long samplingTime = -1; /* Elapsed time for normalization operation */
private static boolean _initialized = false;
private static HashMap perfLogRegistry = new HashMap();
/*
* Static initializer to normalize this logger.
*/
static {
normalize();
}
static class StartData {
long startTime = -1;
long stopTime = -1;
String userID = null;
String startThread = null;
String startMethod = null;
String stopThread = null;
String stopMethod = null;
Element node = null;
}
class ComponentData {
String component = null;
String timeStamp = null;
String feature = null;
String version = null;
String XMLFileID = null;
File XMLFile = null;
Document doc = null;
Stack taskStack = new Stack();
ComponentData(String comp_id) {
component = comp_id;
}
}
private static void printMessage(String message, Object[] data) {
System.out.println(MessageFormat.format(message, data));
}
private static void printMessage(String message, Object value) {
printMessage(message, new Object[] {value});
}
private static void printMessage(String message) {
printMessage(message, EMPTY);
}
/**
* Enable performance logging
* The flag ENABLE_PERFORMANCE_LOGGING is enabled(true or false)
* @param enable true or false
*/
public static void enablePerformanceLogging(boolean enable) {
ENABLE_PERFORMANCE_LOGGING = enable;
}
/**
* Check if logging enabled.
* @return boolean ENABLE_PERFORMANCE_LOGGING
*/
public static boolean isPerformanceLoggingEnabled() {
return ENABLE_PERFORMANCE_LOGGING;
}
/** public static String register(String comp_id) : registering a component using default
* @param comp_id Component to be registered
* @return component registered with no product info
*/
public static String register(String comp_id) {
return register(comp_id, "", ""); //$NON-NLS-1$ //$NON-NLS-2$
}
/** Registers component using default component id
* @param feature Identifier for Product Feature attribute in XML
* @param version Identifier for Product Version attribute in XML
* @return default component key
*/
public static String register(String feature, String version) {
return register(DEFAULT_COMPONENT, feature, version);
}
/**
* Registering a component.
* An XML file is created by concatenating comp_id, feature and version with time stamp appended
* @param comp_id Component to be registered
* @param feature Identifier for Product Feature attribute in XML
* @param version Identifier for Product Version attribute in XML
* @return comp_id as the registered key
*/
public static String register(String comp_id, String feature, String version) {
if ((comp_id == null) || (comp_id.length() == 0)) {
printMessage("PerformanceLogger:register(): Cannot register null or empty component id."); //$NON-NLS-1$
return comp_id;
}
if (perfLogRegistry.containsKey(comp_id)) {
printMessage("PerformanceLogger:register(): component {0} already registered", comp_id); //$NON-NLS-1$
return comp_id;
}
ComponentData compData = new PerformanceLogger().new ComponentData(comp_id);
Calendar time = Calendar.getInstance();
compData.timeStamp = time.getTime().toString();
String userID = System.getProperty("user.name"); //$NON-NLS-1$
String idTemplate = "{0}_{1}_{2}_{3}_perf.{4}.xml"; //$NON-NLS-1$
String id = MessageFormat.format(idTemplate, new Object[] {comp_id, userID, feature, version, compData.timeStamp});
compData.XMLFileID = id.replace(' ', '_').replace(':', '_');
compData.XMLFile = new File(compData.XMLFileID);
compData.feature = feature;
compData.version = version;
generateXMLFile(compData);
compData.taskStack = new Stack();
perfLogRegistry.put(comp_id, compData);
_initialized = true;
printMessage("PerformanceLogger: XML file created is {0}.", compData.XMLFile.getAbsolutePath()); //$NON-NLS-1$
return comp_id;
}
/**
* De-register the default component.
* Default component "_PERFORMANCELOGGER_" removed,
* start() will be disabled.
*/
public static void deRegister() {
perfLogRegistry.remove(DEFAULT_COMPONENT);
printMessage("SystemPerformanceLogger: default component de-registered"); //$NON-NLS-1$
}
/**
* De-register a component.
* component identified by key removed,
* start(comp_id) will be disabled.
* @param key component to be removed
*/
public static void deRegister(String key) {
perfLogRegistry.remove(key);
printMessage("SystemPerformanceLogger: component {0} de-registered", key); //$NON-NLS-1$
}
/**
* Set the normalization unit for this run. Based on a standard method for class instance initialization.
* @return a string containing the unit.
*/
public static String normalize() {
/*
* Execute some standard code and time it to generate our normalization interval.
* Return the value to attempt to make sure it is not optimized by the compiler.
*/
long startTime = System.currentTimeMillis();
Double q = new Double(0);
int i = 0;
int n = 1000000;
for (i = 0; i < n; i++) {
Double dd = new Double(n);
Double dr = new Double(n + i);
q = new Double(dd.doubleValue() / dr.doubleValue());
}
double val = q.doubleValue() / i;
long stopTime = System.currentTimeMillis();
samplingTime = stopTime - startTime;
String template = "SystemPerformanceLogger::Normalization Elapsed time = {0} {1}"; //$NON-NLS-1$
String result = MessageFormat.format(template, new Object[] {new Long(samplingTime), new Double(val)});
return result;
}
/**
* public static long start(): start timer using default component
* The Task values will be recorded in the default component XML file
* @return
* - started time milliseconds
*/
public static long start() {
if (_initialized == false) {
register(DEFAULT_COMPONENT, "", ""); //$NON-NLS-1$ //$NON-NLS-2$
}
/*Use the class method name for CallerID*/
String methodPath = getMethodName(true);
return start(DEFAULT_COMPONENT, methodPath);
}
/**
* public static long start(String comp_id): start timer for component comp_id using default TaskID
* @param comp_id : component registered previously by register(comp_id,..)
* @return started time in milliseconds.
*/
public static long start(String comp_id) {
String methodPath = getMethodName(true);
return start(comp_id, methodPath);
}
/**
* public long start(String comp_id, String call_id): start the timer for registered component comp_id
* @param
* comp_id is the registered component
* call_id is the "CallID" attribute value for the XML tag "Task"
* @return
* - started time in milliseconds.
*/
public static long start(String comp_id, String call_id) {
if (perfLogRegistry.containsKey(comp_id) == false) {
printMessage("PerformanceLogger:start(): component {0} not registered", comp_id); //$NON-NLS-1$
return -1;
}
ComponentData cd = (ComponentData) perfLogRegistry.get(comp_id);
StartData td = new StartData();
td.userID = call_id;
td.startThread = Thread.currentThread().toString();
td.startMethod = getMethodName(false);
/* Create the new Task Element in the DOC */
try {
//BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(cd.XMLFile), "UTF8"));
Element root = cd.doc.getDocumentElement();
Element task = cd.doc.createElement(ELEMENT_TASK);
task.setAttribute(ATTRIBUTE_NAME_TASKID, td.userID);
task.setAttribute("StartAt", td.startMethod); //$NON-NLS-1$
task.setAttribute("StartThread", td.startThread); //$NON-NLS-1$
td.node = task;
/* Check if start() is nested by checking if the TaskStack is empty */
if (cd.taskStack.isEmpty()) { /*Empty==>not a nested start()*/
root.appendChild(task);
} else { /*Not empty ==> this start() is nested*/
StartData sd = (StartData) cd.taskStack.peek(); /*Peek the parent CallID on the stack*/
sd.node.appendChild(task);
}
} catch (DOMException e) {
printMessage("PerformanceLogger::updateXMLFileatStart DOM Error: {0}", e); //$NON-NLS-1$
}
/*Read the current time save it on stack */
td.startTime = System.currentTimeMillis();
cd.taskStack.push(td);
return td.startTime;
}
/**
* public static long stop(): stop timer for default component
* The Task values will be recorded in the default component XML file
* @return
* - started time milliseconds
*/
public static long stop() {
return stop(DEFAULT_COMPONENT);
}
/**
* public long stop(String comp_id): Stopping the timer for component comp_id
* @return
* - stopped time in milliseconds.
*/
public static long stop(String comp_id) {
long st = System.currentTimeMillis();
ComponentData cd = (ComponentData) perfLogRegistry.get(comp_id);
if (cd == null) {
printMessage("SystemPerformanceLogger::stop(): invalid registration key"); //$NON-NLS-1$
return 0;
}
long result = 0;
try {
StartData td = (StartData) cd.taskStack.pop();
td.stopTime = st;
td.stopThread = Thread.currentThread().toString();
td.stopMethod = getMethodName(false);
updateXMLFileAtStop(cd, td);
result = td.stopTime;
} catch (EmptyStackException e) {
printMessage("SystemPerformanceLogger:: Probably too many stop() function calls. - {0}", e); //$NON-NLS-1$
}
return result;
}
/**
* Create an XML file with "Product" and "System" tags.
* @param cd component data for creating the XML
*/
private static void generateXMLFile(ComponentData cd) {
try {
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(cd.XMLFile), "UTF8")); //$NON-NLS-1$
// DOMImplementation impl = new DOMImplementationImpl();
// cd.doc = impl.createDocument(null, "Benchmark", null);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
DOMImplementation impl = builder.getDOMImplementation();
cd.doc = impl.createDocument(null, "Benchmark", null); //$NON-NLS-1$
// get root element and set attributes
Element root = cd.doc.getDocumentElement();
root.setAttribute("BenchmarkID", cd.XMLFileID); //$NON-NLS-1$
root.setAttribute("TimeStamp", cd.timeStamp); //$NON-NLS-1$
Element system = cd.doc.createElement("System"); //$NON-NLS-1$
Element product = cd.doc.createElement("Product"); //$NON-NLS-1$
product.setAttribute("Feature", cd.feature); //$NON-NLS-1$
product.setAttribute("Version", cd.version); //$NON-NLS-1$
root.appendChild(product);
system.setAttribute("OSName", System.getProperty("os.name")); //$NON-NLS-1$ //$NON-NLS-2$
system.setAttribute("OSVersion", System.getProperty("os.version")); //$NON-NLS-1$ //$NON-NLS-2$
system.setAttribute("JavaVersion", System.getProperty("java.version")); //$NON-NLS-1$ //$NON-NLS-2$
system.setAttribute("JavaVMVersion", System.getProperty("java.vm.version")); //$NON-NLS-1$ //$NON-NLS-2$
system.setAttribute("JavaClassPath", System.getProperty("java.class.path")); //$NON-NLS-1$ //$NON-NLS-2$
system.setAttribute("JavaLibraryPath", System.getProperty("java.library.path")); //$NON-NLS-1$ //$NON-NLS-2$
root.appendChild(system);
Element norm = cd.doc.createElement("_NORMALIZATION_VALUES"); //$NON-NLS-1$
Long ems = new Long(samplingTime);
norm.setAttribute("ElapsedTime", ems.toString()); //$NON-NLS-1$
root.appendChild(norm);
/* Insert comments for Task tag */
Comment cmt1 = cd.doc.createComment("Each Task element represents one start/stop timer operation"); //$NON-NLS-1$
Comment cmt2 = cd.doc.createComment("Time recorded is in milliseconds"); //$NON-NLS-1$
Comment cmt3 = cd.doc.createComment("NormalizedFactor is the performance indicator. A larger value than the previous run might indicate performance degradation."); //$NON-NLS-1$
root.appendChild(cmt1);
root.appendChild(cmt2);
root.appendChild(cmt3);
try {
Source source = new DOMSource(cd.doc);
Result result = new StreamResult(writer);
Transformer t = TransformerFactory.newInstance().newTransformer();
t.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
t.transform(source, result);
} catch (TransformerConfigurationException e2) {
} catch (TransformerFactoryConfigurationError e2) {
} catch (TransformerException e2) {
}
// OutputFormat fmt = new OutputFormat(cd.doc);
// fmt.setLineSeparator(LineSeparator.Windows);
// fmt.setIndenting(true);
// fmt.setPreserveSpace(false);
// //writer.flush();
// XMLSerializer serializer = new XMLSerializer(writer, fmt);
// serializer.serialize(cd.doc);
// writer.close();
} catch (IOException e) {
printMessage("PerformanceLogger::updateXML IO Error: {0}", e); //$NON-NLS-1$
} catch (ParserConfigurationException e) {
printMessage("PerformanceLogger::updateXML Parser Configuration Error: {0}", e); //$NON-NLS-1$
} catch (DOMException e) {
printMessage("PerformanceLogger::updateXML DOM Error: {0}", e); //$NON-NLS-1$
}
}
/**
* Update XML file with performance measurement info
* - A "Task" tag is created in the XML file with the current start and stop timer information.
*/
private static void updateXMLFileAtStop(ComponentData cd, StartData td) {
try {
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(cd.XMLFile), "UTF8")); //$NON-NLS-1$
cd.doc.getDocumentElement();
Element task = td.node;
/* Construct Long class insatnce for string manipulation */
Long ems = new Long(td.stopTime - td.startTime);
Long sms = new Long(td.startTime);
Long tms = new Long(td.stopTime);
/*Calculate the normalization factor*/
String normalizedFactor = "invalid"; //$NON-NLS-1$
if (samplingTime > 0) {
Long sam = new Long(samplingTime);
Double val = new Double(ems.doubleValue() / sam.doubleValue());
normalizedFactor = val.toString();
}
/* Update the document */
task.setAttribute("ElapsedTime", ems.toString()); //$NON-NLS-1$
task.setAttribute("NormalizedFactor", normalizedFactor); //$NON-NLS-1$
task.setAttribute("StartTime", sms.toString()); //$NON-NLS-1$
task.setAttribute("StopTime", tms.toString()); //$NON-NLS-1$
task.setAttribute("StartAt", td.startMethod); //$NON-NLS-1$
task.setAttribute("StartThread", td.startThread); //$NON-NLS-1$
task.setAttribute("StopAt", td.stopMethod); //$NON-NLS-1$
task.setAttribute("StopThread", td.stopThread); //$NON-NLS-1$
try {
Source source = new DOMSource(cd.doc);
Result result = new StreamResult(writer);
Transformer t = TransformerFactory.newInstance().newTransformer();
t.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
t.transform(source, result);
} catch (TransformerConfigurationException e2) {
} catch (TransformerFactoryConfigurationError e2) {
} catch (TransformerException e2) {
}
/*Now save the DOM*/
// OutputFormat fmt = new OutputFormat(cd.doc);
// fmt.setLineSeparator(LineSeparator.Windows);
// fmt.setIndenting(true);
// fmt.setPreserveSpace(false);
// //writer.flush();
// XMLSerializer serializer = new XMLSerializer(writer, fmt);
// serializer.serialize(cd.doc);
// writer.close();
} catch (java.io.IOException e) {
printMessage("PerformanceLogger::updateXMLFileAtStop IO Error: {0}", e); //$NON-NLS-1$
} catch (DOMException e) {
printMessage("PerformanceLogger::updateXMLFileAtStop DOM Error: {0}", e); //$NON-NLS-1$
}
}
/**
* public String geCurrentProductInfo(int req, String comp_id) : retrieve the product information.
* @param
* req : OPTION_GET_FEATURE/OPTION_GET_VERSION
* comp_id : the component id
* @return
* "OPTION_GET_FEATURE":product feature as specified in register()
* "OPTION_GET_VERSION": product version as specified in register()
* no match: null
*/
public static String getCurrentProductInfo(int req, String comp_id) {
ComponentData cd = (ComponentData) perfLogRegistry.get(comp_id);
if (cd == null) {
printMessage("PerformanceLogger::getCurrentProductInfo invalid comp_id"); //$NON-NLS-1$
return null;
}
if (req == OPTION_GET_FEATURE)
return cd.feature;
else if (req == OPTION_GET_VERSION) return cd.version;
return null;
}
/**
* public String getXMLFileName(String comp_id) : get the XML file pathname
* @return
* The XML file fullpath name.
*/
public static String getXMLFileName(String comp_id) {
ComponentData cd = (ComponentData) perfLogRegistry.get(comp_id);
return cd.XMLFile.getAbsolutePath();
}
/**
* public String getMethodName(boolean parsed) : get the method name
* @param
* parsed : true or false
* @return
* if true method name is returned as class.method.
*/
private static String getMethodName(boolean parsed) {
String methodPath = null;
Throwable e = new Throwable();
StringWriter strwriter = new StringWriter(100);
e.printStackTrace(new java.io.PrintWriter(strwriter));
String stack = strwriter.toString();
StringTokenizer tokenizer = new StringTokenizer(stack, "\r\n"); //$NON-NLS-1$
/*
* Here to parse the exception string to get the caller which is the current method location
* to be obtained. The Exception stack should show the PerformanceLogger start() in the stack first:
* -java.lang.Exception
* -at org.eclipse.rse.logging.performance.PerformanceLogger.start(PerformanceLogger.java:151)
* -at org.eclipse.rse.logging.performance.PerformanceLogger.start(PerformanceLogger.java:135)
* Depending if the caller is using default task ID or not, so the caller is the 3rd or the 4th in the stack.
*/
for (int i = 0; tokenizer.hasMoreTokens(); i++) {
methodPath = tokenizer.nextToken();
if ((methodPath.indexOf("java.lang.Throwable") == -1) && (methodPath.indexOf("logging.performance.PerformanceLogger") == -1)) break; //$NON-NLS-1$ //$NON-NLS-2$
}
if (methodPath != null) {
methodPath = methodPath.substring(4);
if (parsed) {
try {
int i = methodPath.indexOf('(');
if (i != -1) methodPath = methodPath.substring(0, i); //strip of the substring enclosed in ()
//Now we have "org.eclipse.rse.logging.performance.PerformanceLogger.start"
i = methodPath.lastIndexOf('.'); //Get the method name after the last period (.)
String methodName = methodPath.substring(i + 1); //Now we have the method name "start"
String className = methodPath.substring(0, i); //remove method name from the string
//We are left with "org.eclipse.rse.logging.performance.PerformanceLogger"
i = className.lastIndexOf('.');
if (i != -1) className = className.substring(i + 1); //Now we have the class name "PerformanceLogger"
methodPath = className + "." + methodName; //$NON-NLS-1$
} catch (IndexOutOfBoundsException ex) {
printMessage("PerformanceLogger:getMethodName exception {0}", ex); //$NON-NLS-1$
}
}
}
return methodPath; /*delete " at" in the beginning of the string */
}
/**
* Retrieve the system information.
* These values will be retrieved and printed in stdout:
* <ul>
* <li>java.version</li>
* <li>java.vm.version</li>
* <li>java.class.version</li>
* <li>java.class.path</li>
* <li>java.library.path</li>
* <li>os.name</li>
* <li>os.version</li>
* </ul>
*/
public static void listSystemProfile() {
System.out.println("java version : " + System.getProperty("java.version")); //$NON-NLS-1$ //$NON-NLS-2$
System.out.println("OS name : " + System.getProperty("os.name")); //$NON-NLS-1$ //$NON-NLS-2$
System.out.println("OS version : " + System.getProperty("os.version")); //$NON-NLS-1$ //$NON-NLS-2$
System.out.println("working dir : " + System.getProperty("user.dir")); //$NON-NLS-1$ //$NON-NLS-2$
System.out.println("home dir : " + System.getProperty("home.dir")); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* public static void main() : This main is used for testing this PerformanceLogger functions.
* The objective is to check the XML output format for nested start() calls.
*/
public static void main(String[] args) {
int i = 0;
if (isPerformanceLoggingEnabled()) {
PerformanceLogger.start(); //Start timer using default component
}
for (i = 0; i < 1000000; i++) {
//empty performance test loop
}
if (isPerformanceLoggingEnabled()) {
PerformanceLogger.stop();
}
PerformanceLogger.enablePerformanceLogging(true);
String key = PerformanceLogger.register("", "WDSC", "5120"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
key = PerformanceLogger.register("RSE", "WDSC", "5120"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
PerformanceLogger.deRegister("XXX"); //not registered key previously //$NON-NLS-1$
System.out.println("Product info : " + PerformanceLogger.getCurrentProductInfo(PerformanceLogger.OPTION_GET_FEATURE, key) + " " //$NON-NLS-1$ //$NON-NLS-2$
+ PerformanceLogger.getCurrentProductInfo(PerformanceLogger.OPTION_GET_VERSION, key));
PerformanceLogger.start(key, "NOT_NESTED_1"); //$NON-NLS-1$
for (i = 0; i < 1000000; i++) {
//empty performance test loop
}
PerformanceLogger.stop(key);
PerformanceLogger.start(key, "NESTED_ONE"); //$NON-NLS-1$
for (i = 0; i < 500; i++) {
//empty performance test loop
}
PerformanceLogger.start(key, "NESTED_ONE_CHILD"); //$NON-NLS-1$
for (i = 0; i < 300; i++) {
//empty performance test loop
}
PerformanceLogger.stop(key);
PerformanceLogger.stop(key);
PerformanceLogger.start(key, "NOT_NESTED_2"); //$NON-NLS-1$
for (i = 0; i < 2000000; i++) {
//empty performance test loop
}
PerformanceLogger.stop(key);
PerformanceLogger.start(key, "NESTED_THREE"); //$NON-NLS-1$
for (i = 0; i < 300; i++) {
//empty performance test loop
}
PerformanceLogger.start(key, "NESTED_TWO_CHILD1"); //$NON-NLS-1$
PerformanceLogger.start(key, "NESTED_TWO_CHILD2"); //$NON-NLS-1$
for (i = 0; i < 4000; i++) {
//empty performance test loop
}
PerformanceLogger.start(key, "NESTED_TWO_CHILD3"); //$NON-NLS-1$
for (i = 0; i < 6000; i++) {
//empty performance test loop
}
PerformanceLogger.stop(key);
PerformanceLogger.stop(key);
PerformanceLogger.stop(key);
PerformanceLogger.stop(key);
PerformanceLogger.start("ABC"); //Expect error: not registered //$NON-NLS-1$
PerformanceLogger.start(key); //record timer in the previous registered component
for (i = 0; i < 3000000; i++) {
//empty performance test loop
}
PerformanceLogger.stop(key);
key = PerformanceLogger.register(key); // Expect error: already registered
PerformanceLogger.deRegister(key);
key = PerformanceLogger.register(key);
}
}

View file

@ -1,162 +0,0 @@
/********************************************************************************
* Copyright (c) 2002, 2006 IBM Corporation. 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
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: David McKnight, Kushal Munir,
* Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
********************************************************************************/
package org.eclipse.rse.internal.logging.ui;
import java.util.HashSet;
import java.util.Set;
/**
* Provides a set of utility routines for processing mnemonics for labels that are
* to be used in dialogs and menus.
*/
public class LabelUtil {
private final static String upperLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //$NON-NLS-1$
private final static String lowerLetters = "abcdefghijklmnopqrstuvwxyz"; //$NON-NLS-1$
private final static char lpar = '(';
private final static char rpar = ')';
private final static char trigger = '&';
/**
* The Assignment class contains the result of a mnemonic assignment.
*/
private static class Assignment {
private String label;
private Character mnemonic;
Assignment(String label, Character mnemonic) {
this.label = label;
this.mnemonic = mnemonic;
}
String getLabel() {
return label;
}
Character getMnemonic() {
return mnemonic;
}
boolean hasMnemonic() {
return mnemonic != null;
}
}
/**
* Assigns a mnemonic to a label and adds it to the set of used mnemonic characters.
* Used mnemonics are ignored in the search for a valid mnemonic.
* If there are no characters in the label that can be used as mnemonics then a
* valid mnemonic is appended to the label in parentheses.
* If the label already has a mnemonic, its mnemonic is added to the set of used
* mnemonics, but the label itself is unchanged.
* @param label the label in which the mnemonic is to be discovered
* @param used the set of Characters that cannot be used as mnemonics. This set is modified
* by the operation if a mnemonic could be found.
* @return the label with the mnemonic identified or the original label if a mnemonic could
* not be found.
*/
public static String assignMnemonic(String label, Set used) {
Assignment result = null;
Character c = findMnemonic(label);
if (c != null) {
used.add(c);
return label;
}
result = assignMnemonic(label, upperLetters, used);
if (!result.hasMnemonic()) {
result = assignMnemonic(label, lowerLetters, used);
if (!result.hasMnemonic()) {
Assignment temp = assignMnemonic(upperLetters, upperLetters, used);
if (temp.hasMnemonic()) {
c = temp.getMnemonic();
StringBuffer b = new StringBuffer(label.length() + 4);
b.append(label);
b.append(lpar);
b.append(trigger);
b.append(c);
b.append(rpar);
result = new Assignment(b.toString(), c);
}
}
}
if (result.hasMnemonic()) {
Character mnemonic = result.getMnemonic();
Character lower = new Character(Character.toLowerCase(mnemonic.charValue()));
Character upper = new Character(Character.toUpperCase(mnemonic.charValue()));
used.add(lower);
used.add(upper);
}
return result.getLabel();
}
/**
* This is a convenience method for constucting a "used set" by taking
* the individual characters of a string
* in both lower and upper cases and adding them to the set. Mnemonics are
* not case sensitive.
* @param s the String from which to construct the set.
* @return the set.
*/
public static Set usedFromString(String s) {
Set result = new HashSet();
char[] characters = s.toLowerCase().toCharArray();
for (int i = 0; i < characters.length; i++) {
result.add(new Character(characters[i]));
}
characters = s.toUpperCase().toCharArray();
for (int i = 0; i < characters.length; i++) {
result.add(new Character(characters[i]));
}
return result;
}
/**
* Assigns a mnemonic to a label from a List of candidate mnemonics.
* @param label the label in which the mnemonic is to be discovered.
* @param candidates the String of valid candidates to use as mnemonics.
* @param used The Set of Characters that have already been used.
* @return the Assignment containing the new string with the mnemonic identified. If no
* mnemonic could be assigned then the Assignment will have no mnemonic specified.
*/
private static Assignment assignMnemonic(String label, String candidates, Set used) {
char[] characters = label.toCharArray();
Assignment result = new Assignment(label, null);
for (int i = 0; i < characters.length && !result.hasMnemonic(); i++) {
Character c = new Character(characters[i]);
if (!used.contains(c) && candidates.indexOf(c.charValue()) >= 0) {
StringBuffer b = new StringBuffer(label.length() + 1);
b.append(label.substring(0, i));
b.append(trigger);
b.append(label.substring(i));
result = new Assignment(b.toString(), c);
}
}
return result;
}
/**
* Finds the Character used as a mnemonic in a label
* @param label the label to search
* @return the Character used as the mnemonic, null if none exists.
*/
private static Character findMnemonic(String label) {
Character result = null;
int i = label.indexOf(trigger);
if (i >=0 && i < label.length() - 1) {
result = new Character(label.charAt(i + 1));
}
return result;
}
}

View file

@ -13,10 +13,9 @@ import org.eclipse.osgi.util.NLS;
public class LoggingPreferenceLabels extends NLS {
private static String BUNDLE_NAME = "org.eclipse.rse.logging.ui.LoggingPreferenceLabels";//$NON-NLS-1$
private static String BUNDLE_NAME = "org.eclipse.rse.internal.logging.ui.LoggingPreferenceLabels";//$NON-NLS-1$
public static String LOGGING_PREFERENCE_PAGE_TOPLABEL1;
public static String LOGGING_PREFERENCE_PAGE_TOPLABEL2;
public static String LOGGING_PREFERENCE_PAGE_TOPLABEL;
public static String LOGGING_PREFERENCE_PAGE_ERRORS_ONLY;
public static String LOGGING_PREFERENCE_PAGE_WARNINGS_ERRORS;
public static String LOGGING_PREFERENCE_PAGE_INFO_DEBUG;

View file

@ -22,9 +22,8 @@
# Preference Page
# ----------------
LOGGING_PREFERENCE_PAGE_TOPLABEL1 = Specify the logging preferences for {0}
LOGGING_PREFERENCE_PAGE_TOPLABEL2 = Logging Level
LOGGING_PREFERENCE_PAGE_ERRORS_ONLY = Errors only
LOGGING_PREFERENCE_PAGE_WARNINGS_ERRORS = Warnings and errors
LOGGING_PREFERENCE_PAGE_INFO_DEBUG = Warnings, errors and information messages
LOGGING_PREFERENCE_PAGE_FULL_DEBUG = Full debug
LOGGING_PREFERENCE_PAGE_TOPLABEL = Logging Level
LOGGING_PREFERENCE_PAGE_ERRORS_ONLY = &Errors only
LOGGING_PREFERENCE_PAGE_WARNINGS_ERRORS = &Warnings and errors
LOGGING_PREFERENCE_PAGE_INFO_DEBUG = Warnings, errors and &information messages
LOGGING_PREFERENCE_PAGE_FULL_DEBUG = Full &debug

View file

@ -17,13 +17,10 @@
package org.eclipse.rse.internal.logging.ui;
import java.util.Set;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.rse.logging.IRemoteSystemsLogging;
import org.eclipse.rse.logging.Logger;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
@ -106,45 +103,18 @@ public abstract class LoggingPreferencePage extends PreferencePage implements IW
return button;
}
/**
* Utility method that creates a label instance
* and sets the default layout data.
*
* @param parent the parent for the new label
* @param text the text for the new label
* @return the new label
*/
// private Label createLabel(Composite parent, int span, String text) {
// Label label = new Label(parent, SWT.LEFT);
// label.setText(text);
// GridData data = new GridData();
// data.horizontalSpan = span;
// data.horizontalAlignment = GridData.FILL;
// label.setLayoutData(data);
// return label;
// }
/**
* Method declared on PreferencePage
*/
protected Control createContents(Composite parent) {
Composite composite_tab = createComposite(parent, 1, 1);
// String bundleName = (String)(getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_NAME));
// String topLabel1 = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_TOPLABEL1;
// topLabel1 = MessageFormat.format(topLabel1, new Object[] {bundleName});
// createLabel(composite_tab, 1, topLabel1);
String topLabel2 = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_TOPLABEL2;
Group group1 = createGroup(composite_tab, 1, 1, topLabel2);
Set used = LabelUtil.usedFromString("ad"); //$NON-NLS-1$ // the mnemonics already used on preference page (in English)
String text = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_ERRORS_ONLY;
radioButton0 = createRadioButton(group1, LabelUtil.assignMnemonic(text, used));
text = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_WARNINGS_ERRORS;
radioButton1 = createRadioButton(group1, LabelUtil.assignMnemonic(text, used));
text = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_INFO_DEBUG;
radioButton2 = createRadioButton(group1, LabelUtil.assignMnemonic(text, used));
String topLabel = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_TOPLABEL;
Group group = createGroup(composite_tab, 1, 1, topLabel);
radioButton0 = createRadioButton(group, LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_ERRORS_ONLY);
radioButton1 = createRadioButton(group, LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_WARNINGS_ERRORS);
radioButton2 = createRadioButton(group, LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_INFO_DEBUG);
if (Logger.DEBUG) {
text = LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_FULL_DEBUG;
radioButton3 = createRadioButton(group1, LabelUtil.assignMnemonic(text, used));
radioButton3 = createRadioButton(group, LoggingPreferenceLabels.LOGGING_PREFERENCE_PAGE_FULL_DEBUG);
}
initializeValues();
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, "org.eclipse.rse.logging.rsel0000"); //$NON-NLS-1$
@ -192,7 +162,7 @@ public abstract class LoggingPreferencePage extends PreferencePage implements IW
radioButton1.setSelection(false);
radioButton2.setSelection(false);
if (null != radioButton3) radioButton3.setSelection(false);
int choice = store.getInt(IRemoteSystemsLogging.DEBUG_LEVEL);
int choice = store.getInt(Logger.DEBUG_LEVEL);
switch (choice) {
case 0:
radioButton0.setSelection(true);
@ -222,7 +192,7 @@ public abstract class LoggingPreferencePage extends PreferencePage implements IW
radioButton1.setSelection(false);
radioButton2.setSelection(false);
if (null != radioButton3) radioButton3.setSelection(false);
int choice = store.getDefaultInt(IRemoteSystemsLogging.DEBUG_LEVEL);
int choice = store.getDefaultInt(Logger.DEBUG_LEVEL);
switch (choice) {
case 0:
radioButton0.setSelection(true);
@ -269,7 +239,7 @@ public abstract class LoggingPreferencePage extends PreferencePage implements IW
else if (radioButton2.getSelection())
choice = 2;
else if (null != radioButton3 && radioButton3.getSelection()) choice = 3;
store.setValue(IRemoteSystemsLogging.DEBUG_LEVEL, choice);
store.setValue(Logger.DEBUG_LEVEL, choice);
}
}

View file

@ -1,59 +0,0 @@
/********************************************************************************
* Copyright (c) 2002, 2006 IBM Corporation. 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
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: David McKnight, Kushal Munir,
* Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
********************************************************************************/
package org.eclipse.rse.logging;
/**
* Defines all logging constants.
*/
public interface IRemoteSystemsLogging {
/**
* Name of the key that controls the logging level.<br>
*/
public static final String PLUGIN_ID = "org.eclipse.rse.logging"; //$NON-NLS-1$
/**
* Name of the key that controls the logging level.<br>
* (value is "debug_level").
*/
public static final String DEBUG_LEVEL = "debug_level"; //$NON-NLS-1$
/**
* Set debug_level to this value to get Error messages.<br>
* (value is 0).
*/
public static final int LOG_ERROR = 0;
/**
* Set debug_level to this value to get Warning messages.<br>
* (value is 1).
*/
public static final int LOG_WARNING = 1;
/**
* Set debug_level to this value to get Information messages.<br>
* (value is 2).
*/
public static final int LOG_INFO = 2;
/**
* Set debug_level to this value to get Debug messages.<br>
* (value is 3).
*/
public static final int LOG_DEBUG = 3;
}

View file

@ -24,6 +24,7 @@ import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
import org.eclipse.rse.internal.logging.LogListener;
/**
* Generic Logger class for handling Remote Systems logging and tracing.<br>
@ -81,11 +82,41 @@ public class Logger implements IPropertyChangeListener {
*/
public static final boolean DEBUG = false;
/**
* Name of the key that controls the logging level.<br>
* (value is "debug_level").
*/
public static final String DEBUG_LEVEL = "debug_level"; //$NON-NLS-1$
/**
* Set debug_level to this value to get Error messages.<br>
* (value is 0).
*/
public static final int LOG_ERROR = 0;
/**
* Set debug_level to this value to get Warning messages.<br>
* (value is 1).
*/
public static final int LOG_WARNING = 1;
/**
* Set debug_level to this value to get Information messages.<br>
* (value is 2).
*/
public static final int LOG_INFO = 2;
/**
* Set debug_level to this value to get Debug messages.<br>
* (value is 3).
*/
public static final int LOG_DEBUG = 3;
private ILog systemsPluginLog = null;
private RemoteSystemLogListener logListener = null;
private LogListener logListener = null;
private String pluginId = null;
private Plugin systemPlugin = null;
private int debug_level = IRemoteSystemsLogging.LOG_ERROR;
private int debug_level = Logger.LOG_ERROR;
/**
* Creates a new Logger. Invoked by the LoggerFactory.
@ -100,18 +131,12 @@ public class Logger implements IPropertyChangeListener {
initialize();
}
/**
* Initialize the Logger. The logger uses an ILog from the platform for this particular plugin, and
* establishes a listener on that log to format the items placed in the log.
*/
private void initialize() {
systemsPluginLog = systemPlugin.getLog();
logListener = new RemoteSystemLogListener(systemPlugin);
systemsPluginLog.addLogListener(logListener);
Preferences store = systemPlugin.getPluginPreferences();
debug_level = store.getInt(IRemoteSystemsLogging.DEBUG_LEVEL);
store.addPropertyChangeListener(this);
store.addPropertyChangeListener(logListener);
public synchronized void freeResources() {
logListener.freeResources();
}
public synchronized int getDebugLevel() {
return debug_level;
}
/**
@ -130,7 +155,7 @@ public class Logger implements IPropertyChangeListener {
* need to be localized to proper local.<br>
*/
public synchronized void logDebugMessage(String className, String message) {
if (Logger.DEBUG && debug_level >= IRemoteSystemsLogging.LOG_DEBUG) {
if (Logger.DEBUG && debug_level >= Logger.LOG_DEBUG) {
MultiStatus debugStatus = new MultiStatus(pluginId, IStatus.OK, className, null);
Status infoStatus = new Status(IStatus.OK, pluginId, IStatus.OK, message, null);
debugStatus.add(infoStatus);
@ -145,7 +170,7 @@ public class Logger implements IPropertyChangeListener {
* @param ex the exception that caused the condition, may be null.
*/
public synchronized void logError(String message, Throwable ex) {
if (debug_level >= IRemoteSystemsLogging.LOG_ERROR) {
if (debug_level >= Logger.LOG_ERROR) {
if (message == null) message = ""; //$NON-NLS-1$
Status errorStatus = new Status(IStatus.ERROR, pluginId, IStatus.OK, message, ex);
systemsPluginLog.log(errorStatus);
@ -167,7 +192,7 @@ public class Logger implements IPropertyChangeListener {
* ie: Resource.getString() should already have been called
*/
public synchronized void logInfo(String message, Throwable ex) {
if (debug_level >= IRemoteSystemsLogging.LOG_INFO) {
if (debug_level >= Logger.LOG_INFO) {
if (message == null) message = ""; //$NON-NLS-1$
Status infoStatus = new Status(IStatus.INFO, pluginId, IStatus.OK, message, ex);
systemsPluginLog.log(infoStatus);
@ -189,31 +214,37 @@ public class Logger implements IPropertyChangeListener {
* ie: Resource.getString() should already have been called
*/
public synchronized void logWarning(String message, Throwable ex) {
if (debug_level >= IRemoteSystemsLogging.LOG_WARNING) {
if (debug_level >= Logger.LOG_WARNING) {
if (message == null) message = ""; //$NON-NLS-1$
Status warningStatus = new Status(IStatus.WARNING, pluginId, IStatus.OK, message, ex);
systemsPluginLog.log(warningStatus);
}
}
public synchronized void setDebugLevel(int level) {
debug_level = level;
}
public synchronized int getDebugLevel() {
return debug_level;
}
public synchronized void freeResources() {
logListener.freeResources();
}
/**
* Handle changes from a Preferences page.
*/
public synchronized void propertyChange(PropertyChangeEvent event) {
Preferences prefs = systemPlugin.getPluginPreferences();
debug_level = prefs.getInt(IRemoteSystemsLogging.DEBUG_LEVEL);
debug_level = prefs.getInt(Logger.DEBUG_LEVEL);
}
public synchronized void setDebugLevel(int level) {
debug_level = level;
}
/**
* Initialize the Logger. The logger uses an ILog from the platform for this particular plugin, and
* establishes a listener on that log to format the items placed in the log.
*/
private void initialize() {
systemsPluginLog = systemPlugin.getLog();
logListener = new LogListener(systemPlugin);
systemsPluginLog.addLogListener(logListener);
Preferences store = systemPlugin.getPluginPreferences();
debug_level = store.getInt(Logger.DEBUG_LEVEL);
store.addPropertyChangeListener(this);
store.addPropertyChangeListener(logListener);
}
}

View file

@ -16,13 +16,6 @@
package org.eclipse.rse.logging;
import java.net.URL;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Plugin;
import org.osgi.framework.BundleContext;
@ -32,8 +25,6 @@ import org.osgi.framework.BundleContext;
public class RemoteSystemsLoggingPlugin extends Plugin {
private static RemoteSystemsLoggingPlugin singleton;
private ResourceBundle resourceBundle;
public static Logger out = null;
/**
* Constructor.
@ -50,51 +41,17 @@ public class RemoteSystemsLoggingPlugin extends Plugin {
return singleton;
}
/**
* Returns the string from the plugin's resource bundle,
* or 'key' if not found.
*/
public static String getResourceString(String key) {
try {
ResourceBundle bundle = RemoteSystemsLoggingPlugin.getDefault().getResourceBundle();
return bundle.getString(key);
} catch (Exception e) {
out.logError("could not get resource string for: " + key, e); //$NON-NLS-1$
return key;
}
}
/**
* Returns the plugin's resource bundle.
*/
public ResourceBundle getResourceBundle() {
if (resourceBundle == null) {
try {
IPath path = new Path("$nl$/RemoteSystemsLogging.properties"); //$NON-NLS-1$
URL url = FileLocator.find(getBundle(), path, null);
resourceBundle = new PropertyResourceBundle(url.openStream());
} catch (Exception x) {
resourceBundle = null;
out.logInfo("RemoteSystemsLoggingPlugin - unable to log resourcebundle"); //$NON-NLS-1$
}
}
return resourceBundle;
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
out = LoggerFactory.getLogger(this);
out.logInfo("loading RemoteSystemsLoggingPlugin class."); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
LoggerFactory.freeLogger(this);
super.stop(context);
}
}