<html><body><p><font size="+1"><strong>Package org.eclipse.wst.xsl.core.internal</strong></font></p><hr><h2><font size="-1"><strong>org.eclipse.wst.xsl.core.internal</strong></font><br>
               Class XSLCorePlugin</h2><br><hr><pre>public class <strong>XSLCorePlugin</strong>
extends Plugin</pre>The activator class controls the plug-in life cycle<hr><table width="100%" border="1"><tr cols="2" bgcolor="#CCCCFF"><td colspan="2" width="100%"><h2>Field Summary</h2></td></tr><tr valign="top"><td width="20%" align="right"><code>public static  java.lang.String</code></td><td width="80%" align="left"><code><a href="#field_PLUGIN_ID">PLUGIN_ID</a></code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               TODO: Add JavaDoc</td></tr><tr valign="top"><td width="20%" align="right"><code>public static  java.lang.String</code></td><td width="80%" align="left"><code><a href="#field_USE_PROJECT_SETTINGS">USE_PROJECT_SETTINGS</a></code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               </td></tr></table><br><table width="100%" border="1"><tr bgcolor="#CCCCFF"><td width="100%"><h2>Constructor Summary</h2></td></tr><tr><td><code><strong><a href="#con_XSLCorePlugin">XSLCorePlugin</a></strong>()</code></td></tr></table><br><table width="100%" border="1"><tr cols="2" bgcolor="#CCCCFF"><td colspan="2" width="100%"><h2>Method Summary</h2></td></tr><tr valign="top"><td width="20%" align="right"><code>public static org.eclipse.wst.xsl.core.internal.XSLCorePlugin</code></td><td width="" align="left"><code><a href="#method_getDefault">getDefault</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Returns the shared instance</td></tr><tr valign="top"><td width="20%" align="right"><code>public javax.xml.parsers.SAXParserFactory</code></td><td width="" align="left"><code><a href="#method_getFactory">getFactory</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Return the registered SAX parser factory or null if one
 does not exist.	 * @return</td></tr><tr valign="top"><td width="20%" align="right"><code>public static void</code></td><td width="" align="left"><code><a href="#method_log">log</a>(IStatus status)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Logs the specified status with this plug-in's log.</td></tr><tr valign="top"><td width="20%" align="right"><code>public static IStatus</code></td><td width="" align="left"><code><a href="#method_newErrorStatus">newErrorStatus</a>(java.lang.String message
         ,
      java.lang.Throwable exception)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Returns a new error status for this plug-in with the given message</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_start">start</a>(BundleContext context)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               </td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_stop">stop</a>(BundleContext context)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               </td></tr></table><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Field Detail
               </h2></td></tr></table><h2><a name="field_PLUGIN_ID">PLUGIN_ID</a></h2><p><code>public static  java.lang.String <strong>PLUGIN_ID</strong></code></p><table><tr><td>TODO: Add JavaDoc</td></tr></table><hr><h2><a name="field_USE_PROJECT_SETTINGS">USE_PROJECT_SETTINGS</a></h2><p><code>public static  java.lang.String <strong>USE_PROJECT_SETTINGS</strong></code></p><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Constructor Detail
               </h2></td></tr></table><h2><a name="con_XSLCorePlugin">XSLCorePlugin</a></h2><p><code>public <strong>XSLCorePlugin</strong>()</code></p><p>The constructor</p><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Methods Detail
               </h2></td></tr></table><h2><a name="method_getDefault">getDefault</a></h2><p><code>public org.eclipse.wst.xsl.core.internal.XSLCorePlugin <strong>getDefault</strong>()</code></p><p>Returns the shared instance</p><h3>Returns</h3><p><code>org.eclipse.wst.xsl.core.internal.XSLCorePlugin</code> - the shared instance</p><hr><h2><a name="method_getFactory">getFactory</a></h2><p><code>public javax.xml.parsers.SAXParserFactory <strong>getFactory</strong>()</code></p><p>Return the registered SAX parser factory or null if one
 does not exist.	 * @return</p><h3>Returns</h3><p><code>javax.xml.parsers.SAXParserFactory</code> - returns a SAXParserFactory</p><hr><h2><a name="method_log">log</a></h2><p><code>public void <strong>log</strong>(IStatus status)</code></p><p>Logs the specified status with this plug-in's log.</p><h3>Parameters</h3><p><code>status</code> - status to log</p><hr><h2><a name="method_newErrorStatus">newErrorStatus</a></h2><p><code>public IStatus <strong>newErrorStatus</strong>(java.lang.String message
         ,
      java.lang.Throwable exception)</code></p><p>Returns a new error status for this plug-in with the given message</p><h3>Parameters</h3><p><code>message</code> - the message to be included in the status</p><p><code>exception</code> - the exception to be included in the status or <code>null</code> if none</p><h3>Returns</h3><p><code>IStatus</code> - a new error status</p><hr><h2><a name="method_start">start</a></h2><p><code>public void <strong>start</strong>(BundleContext context)</code></p><p></p><h3>Parameters</h3><p><code>context</code></p><h3>Throws:</h3><p><code>java.lang.Exception</code></p><hr><h2><a name="method_stop">stop</a></h2><p><code>public void <strong>stop</strong>(BundleContext context)</code></p><p></p><h3>Parameters</h3><p><code>context</code></p><h3>Throws:</h3><p><code>java.lang.Exception</code></p><hr></body></html>