<html><body><p><font size="+1"><strong>Package org.eclipse.wst.xsl.ui.internal</strong></font></p><hr><h2><font size="-1"><strong>org.eclipse.wst.xsl.ui.internal</strong></font><br>
               Class XSLUIPlugin</h2><br><hr><pre>public class <strong>XSLUIPlugin</strong>
extends AbstractUIPlugin</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;
               The plugin id for this plugin.</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_XSLUIPlugin">XSLUIPlugin</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.ui.internal.XSLUIPlugin</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 ContextTypeRegistry</code></td><td width="" align="left"><code><a href="#method_getTemplateContextRegistry">getTemplateContextRegistry</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Returns the template context type registry for the xsl plugin.</td></tr><tr valign="top"><td width="20%" align="right"><code>public TemplateStore</code></td><td width="" align="left"><code><a href="#method_getTemplateStore">getTemplateStore</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Returns the template store for the xsl templates.</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>(java.lang.Exception e)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               </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>(CoreException e)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               </td></tr><tr valign="top"><td width="20%" align="right"><code>public static java.io.File</code></td><td width="" align="left"><code><a href="#method_makeFileFor">makeFileFor</a>(java.lang.String directory
         ,
      java.lang.String filename)</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_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>The plugin id for this plugin.</td></tr></table><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_XSLUIPlugin">XSLUIPlugin</a></h2><p><code>public <strong>XSLUIPlugin</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.ui.internal.XSLUIPlugin <strong>getDefault</strong>()</code></p><p>Returns the shared instance</p><h3>Returns</h3><p><code>org.eclipse.wst.xsl.ui.internal.XSLUIPlugin</code> - the shared instance</p><hr><h2><a name="method_getTemplateContextRegistry">getTemplateContextRegistry</a></h2><p><code>public ContextTypeRegistry <strong>getTemplateContextRegistry</strong>()</code></p><p>Returns the template context type registry for the xsl plugin.</p><h3>Returns</h3><p><code>ContextTypeRegistry</code> - the template context type registry for the xsl plugin</p><hr><h2><a name="method_getTemplateStore">getTemplateStore</a></h2><p><code>public TemplateStore <strong>getTemplateStore</strong>()</code></p><p>Returns the template store for the xsl templates.</p><h3>Returns</h3><p><code>TemplateStore</code> - the template store for the xsl templates</p><hr><h2><a name="method_log">log</a></h2><p><code>public void <strong>log</strong>(java.lang.Exception e)</code></p><p></p><h3>Parameters</h3><p><code>e</code></p><hr><h2><a name="method_log">log</a></h2><p><code>public void <strong>log</strong>(CoreException e)</code></p><p></p><h3>Parameters</h3><p><code>e</code></p><hr><h2><a name="method_makeFileFor">makeFileFor</a></h2><p><code>public java.io.File <strong>makeFileFor</strong>(java.lang.String directory
         ,
      java.lang.String filename)</code></p><p></p><h3>Parameters</h3><p><code>directory</code></p><p><code>filename</code></p><h3>Returns</h3><p><code>java.io.File</code></p><h3>Throws:</h3><p><code>java.io.IOException</code></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>