<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:clearspace="http://www.jivesoftware.com/xmlns/clearspace/rss" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Blog Posts From Jivespace Community Blog Tagged With plugin</title>
    <link>http://www.jivesoftware.com/jivespace/blogs/jivespace</link>
    <description>Jivespace Developer Community Blog</description>
    <pubDate>Tue, 25 Aug 2009 15:24:08 GMT</pubDate>
    <generator>Jive SBS 3.0.8 (http://jivesoftware.com/products/clearspace/)</generator>
    <dc:date>2009-08-25T15:24:08Z</dc:date>
    <item>
      <title>Simplifying plugin upgrades</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2009/08/25/simplifying-plugin-upgrades</link>
      <description>&lt;!-- [DocumentBodyStart:53c86321-3852-4a79-9512-b1942351722f] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;Attention, Developers!&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Have you ever wondered how you can run an upgrade task in a plugin to do something like add an extra column to a table or a new index to boost performance?&amp;#160; You know, those one-time tasks that need to be applied consistently across all your environments?&amp;#160; One of the powerful (yet often overlooked) features in Jive SBS 3.0 is the ability to run upgrade tasks in a plugin.&amp;#160; These tasks are run once and can do anything from modifying a database to creating new files and folders.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;The Past&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;...&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Prior to SBS, developers relied on a number of techniques to perform upgrade tasks, including:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Checking for the presence of a system property and, if not present, firing off a background thread to perform the upgrade task from the plugin class' init() method&lt;br/&gt;(downside: someone deletes the system property and your upgrade task gets run again, clustering introduces risk that your upgrade will be run more than once, more work than necessary)&lt;/li&gt;&lt;li&gt;Writing a SQL script that could be run by the DBA on each environment prior to the plugin upgrade&lt;br/&gt;(downside: may require special permission to run scripts, especially in hosted environment; not cross-platform compatible; multiple steps in deployment process may easily be forgotten)&lt;/li&gt;&lt;li&gt;Overlaying the core application to include upgrade tasks with core application upgrade tasks to take advantage of native process for handling upgrades&lt;br/&gt;(downside: must be merged with every release, requires multiple deployment artifacts, risky)&lt;/li&gt;&lt;/ul&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;...And Now?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I hoped you would ask!&amp;#160; Here's what you need to do:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;If you don't already have it, add the following two items to your plugin.xml:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:cb86dde2-18d4-4795-a673-dad18edaf276]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-xml"&gt;&lt;span class="jive-xml-tag"&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-comment"&gt;&amp;lt;!--...omitted for clarity...--&amp;gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;databaseKey&amp;gt;&lt;/span&gt;pluginName&lt;span class="jive-xml-tag"&gt;&amp;lt;/databaseKey&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;databaseVersion&amp;gt;&lt;/span&gt;1000001&lt;span class="jive-xml-tag"&gt;&amp;lt;/databaseVersion&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!--...omitted for clarity...--&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="jive-xml-tag"&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:cb86dde2-18d4-4795-a673-dad18edaf276]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now when the plugin is installed, it will create a record in the jiveVersion database table with the appropriate values for name and version.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Create a new file "upgrade.xml" at the root of your plugin.&amp;#160; This new file will live alongside your spring.xml, struts.xml, etc., and contains the list of upgrade tasks that will be run.&amp;#160; Each upgrade task is given a version.&amp;#160; If the version of your upgrade task is greater than the value in the jiveVersion table for your plugin, your task will be run.&amp;#160; Once the upgrade is complete, the version in the database will be the same as the highest upgrade task version.&amp;#160; Here's an example upgrade.xml taken from our Supportal:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:a02e6de3-cd8c-4ccd-bad3-5a4b8bbedc2f]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-xml"&gt;&lt;span class="jive-xml-tag"&gt;&amp;lt;upgrade-config&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;upgrades&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;upgrade order="1"&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;supportal&lt;span class="jive-xml-tag"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;tasks&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-comment"&gt;&amp;lt;!-- 3.2.0 --&amp;gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;task version="32000001"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; className="com.jivesoftware.community.upgrade.tasks.AddEnvironmentsTask"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;task version="32000002"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; className="com.jivesoftware.community.upgrade.tasks.EnvironmentPermissionsTask"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!-- 3.2.1 --&amp;gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;task version="32100001"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; className="com.jivesoftware.community.upgrade.tasks.DeleteDuplicateEnvironmentFieldValuesTask"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!-- 3.2.2 --&amp;gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;task version="32200001"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; className="com.jivesoftware.community.upgrade.tasks.RemoveWebServerRequirementFromEnvironmentsTask"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;!-- 3.2.3 --&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;task version="32300001"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; className="com.jivesoftware.community.upgrade.tasks.UpdateEnvironmentFieldOptionsTask1"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;/tasks&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;/upgrade&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;/upgrades&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="jive-xml-tag"&gt;&amp;lt;/upgrade-config&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:a02e6de3-cd8c-4ccd-bad3-5a4b8bbedc2f]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Once you have added your task, make sure to update the databaseVersion in your plugin.xml to the same value as your highest upgrade task!&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Create your upgrade task class.&amp;#160; In the example below we're calling out to an XML file that contains the new schema details.&amp;#160; More on that in a sec.&amp;#160; Here's the source code:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:9617e2c1-8051-49f7-9272-ea11feb927da]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-java"&gt;&lt;span style="color: navy;"&gt;&lt;strong&gt;package&lt;/strong&gt;&lt;/span&gt; com.jivesoftware.community.upgrade.tasks;&lt;br/&gt; &lt;br/&gt;...imports omitted&lt;br/&gt; &lt;br/&gt;&lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: navy;"&gt;&lt;strong&gt;class&lt;/strong&gt;&lt;/span&gt; RemoveWebServerRequirementFromEnvironmentsTask &lt;span style="color: navy;"&gt;&lt;strong&gt;implements&lt;/strong&gt;&lt;/span&gt; UpgradeTask &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;private&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: navy;"&gt;&lt;strong&gt;static&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: navy;"&gt;&lt;strong&gt;final&lt;/strong&gt;&lt;/span&gt; String SQL = &lt;span style="color: red;"&gt;"RemoveWebServerRequirementFromEnvironmentsTask"&lt;/span&gt;;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; String getName() &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: red;"&gt;"Remove requirement for filling out web server from environment template fields"&lt;/span&gt;;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; String getDescription() &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: red;"&gt;"Task to mark environment template fields for web server as non-required."&lt;/span&gt;;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; String getEstimatedRunTime() &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: red;"&gt;"1 second"&lt;/span&gt;;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; String getInstructions() &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: red;"&gt;"To run manually, copy the SQL from the RemoveWebServerRequirementFromEnvironmentsTask.xml and run directly against your DB."&lt;/span&gt;;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: navy;"&gt;&lt;strong&gt;boolean&lt;/strong&gt;&lt;/span&gt; isBackgroundTask() &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;return&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: navy;"&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;/span&gt;;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: navy;"&gt;&lt;strong&gt;void&lt;/strong&gt;&lt;/span&gt; doTask() &lt;span style="color: navy;"&gt;&lt;strong&gt;throws&lt;/strong&gt;&lt;/span&gt; Exception &lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; UpgradeUtils.executeSQLGenFile(SQL, getClass());&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;br/&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:9617e2c1-8051-49f7-9272-ea11feb927da]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 4 (almost there!)&lt;/strong&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The last thing you need to do (assuming you are updating your DB, of course) is to create the XML file that will be read when UpgradeUtils.executeSQLGenFile(SQL, getClass()) is called.&amp;#160; To do this create an XML file in the same path of your class with the same name as your class, only ending with the .xml extension.&amp;#160; Following the example above, this could look like the following:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:d6bd2b72-8502-462f-a546-499f26392ca1]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-xml"&gt;&lt;span class="jive-xml-tag"&gt;&amp;lt;schema name="Environment Schema"&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;sql description="Update default data for environments."&amp;gt;&lt;/span&gt;&amp;lt;![CDATA[&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 40;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 59;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 78;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 97;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 116;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 135;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; update supenvtemplfield set isRequired = 0 where envtemplfieldid = 154;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ]]&amp;gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;/sql&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span class="jive-xml-tag"&gt;&amp;lt;/schema&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:d6bd2b72-8502-462f-a546-499f26392ca1]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The &amp;lt;sql&amp;gt; element lets you execute arbitrary DML or DDL statements against your DB.&amp;#160; You can also use the &amp;lt;alter&amp;gt; tag to change an existing table:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:e4161a01-918a-4388-92f6-501a657fb8fd]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-xml"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;alter table="jiveBlog" type="add" description="Add Container Type and ID to JiveBlog"&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;column name="containerType" type="int" nullable="false" default="-2"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; description="The type of the container to which the blog belongs"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;column name="containerID" type="bigint" nullable="false" default="17"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; description="The ID of the container to which the blog belongs."/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;index type="normal" name="jiveBlg_ctID_idx" column="containerID, containerType"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;/alter&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:e4161a01-918a-4388-92f6-501a657fb8fd]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Additionally, you can define new tables using the same syntax as you would in your schema.xml:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;!--[CodeBlockStart:3b663965-f348-4628-bc23-20616ec3e448]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code jive-xml"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;table name="environmentTemplate" description="Customer environment template"&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;column name="templateID" type="bigint" nullable="false" description="Environment template ID."/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;column name="name" type="varchar" size="255" nullable="false" unicode="true"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; description="The display name of the template (shows in environment template selection)."/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;column name="description" type="text" nullable="true" index_none="true" unicode="true"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; description="Tells admins the purpose of this template"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;column name="status" type="int" nullable="false"&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; description="The published status of the environment template."/&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;index type="primary" name="envTempl_pk" column="templateID"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;index type="normal" name="envTempl_templID_st_idx" column="templateID,status"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span class="jive-xml-tag"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:3b663965-f348-4628-bc23-20616ec3e448]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;What happens if my upgrade runs into problems?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;It is important to note that plugin upgrades are run in the background during plugin initialization, so you won't see the upgrade screen similar to what is shown when you upgrade SBS.&amp;#160; However, any errors that occur during the plugin installation will be reported to you in the admin console under System &amp;gt; Plugins.&amp;#160; Here's what you can expect to see:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/showImage/38-1786-19559/pluginError.GIF"&gt;&lt;img alt="pluginError.GIF" class="jive-image-thumbnail jive-image" height="390" src="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/downloadImage/38-1786-19559/806-390/pluginError.GIF" width="806"/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;&lt;strong&gt;Questions?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Leave a comment for me here, or shoot a message to @austrum on Twitter!&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:53c86321-3852-4a79-9512-b1942351722f] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">customization</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">upgrade</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">sbs</category>
      <pubDate>Tue, 25 Aug 2009 15:24:08 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2009/08/25/simplifying-plugin-upgrades</guid>
      <dc:date>2009-08-25T15:24:08Z</dc:date>
      <clearspace:dateToText>2 months, 4 weeks ago</clearspace:dateToText>
      <clearspace:replyCount>1</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/simplifying-plugin-upgrades</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1786</wfw:commentRss>
    </item>
    <item>
      <title>Support Design Introduction</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/11/20/support-design-introduction</link>
      <description>&lt;!-- [DocumentBodyStart:b5dd07fd-efc6-47d0-a628-e82b86875884] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;h1&gt;Supportal&lt;/h1&gt;&lt;p&gt;This is the first in a series of upcoming blog posts where we will delve into the details behind our Supportal.&amp;#160; As most of our customers are already aware, the Supportal is Jive's Clearspace customization that transforms generic communities into personal communities where Jive collaborates directly with our customers via cases, documents, and projects.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;This first post will provide the high-level overview, overriding design goals, business goals, and additional benefits to the Supportal.&amp;#160; Future posts will delve into the business decision details, and the architecture.&lt;/p&gt;&lt;h1&gt;The Name&lt;/h1&gt;&lt;p&gt;People often ask how the name Supportal came to be.&amp;#160; When it comes to overall creativity, I am horrible.&amp;#160; In this project's infancy, I used Customer Portal, Customer Support Portal, Support Portal, and many other terms as names.&amp;#160;&amp;#160; Will French, Jive's Senior Support Engineer, and now the Supportal Development Lead, abbreviated Support Portal, to Supportal (likely making fun of me talking too fast), and the name stuck.&amp;#160; It also gets rid of that stigma around the word "portal" as well!&lt;/p&gt;&lt;h1&gt;Reasons for the Supportal&lt;/h1&gt;&lt;p&gt;The Supportal was created to resolve's Support's own business pains.&amp;#160; Prior to identifying the business pains however, we set 3 main overriding goals for the project:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Simplicity: The goal of the supportal is to solve business pain.&amp;#160; Too many other support sites are tough to use and hard to navigate.&amp;#160; Creating a case needs to be as &lt;strong&gt;simple and easy as possible&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt; We continue this philosophy on upcoming features, ensuring that additional features add benefit without causing pain.&lt;/li&gt;&lt;li&gt;Accessibility: Customers weren't getting the information they needed, and people within Jive were not seeing the information they needed.&amp;#160; The solution needed to include as many people as possible, while still being private so that only Jive and the customer can see the information.&lt;/li&gt;&lt;li&gt;Usability: Jive prides itself on this, and this is something that's always on our list.&amp;#160; Making the Supportal as usable as possible is also a guiding factor we focused on during the first iteration and continue to improve upon.&lt;/li&gt;&lt;/ol&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;With the overriding goals set, we identified the following business goals:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Create a solution where customers can go to create all their cases, regardless of severity&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Replace email with an online system as the mode of communication&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Recreate survey information.&amp;#160; Associate the survey to the case.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Integrate Discussions (only community) with cases to provide customers with a single location to get their answer.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Provide customers the ability to create public cases, allowing others (outside Jive support) to read, contribute, and resolve, while ensuring that Jive Support will answer your issue.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Provide the same functionality (email) for customers who refuse to use the new system.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Remove manual customer and contract validation process&lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;h1&gt;Solution&lt;/h1&gt;&lt;p&gt;With the business goals identified, we realized that we had to integrate with our online community.&amp;#160; Clearspace provided communities (security for each customer), email notification, reply by email, discussions, and a means to replace email as the primary mode of communication.&amp;#160; 80% of the work was done for us.&amp;#160; The missing parts were:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Auto-creation of customer communities via account, customer, and contract information in Salesforce&lt;/li&gt;&lt;li&gt;Validating customer ability to create cases upon user login&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Adding meta data into customer community discussions, allowing them to become cases.&lt;/li&gt;&lt;li&gt;Customizing customer communities to show cases instead of discussions.&lt;/li&gt;&lt;li&gt;Synchronizing the cases (specifically the meta data) with Salesforce.&lt;/li&gt;&lt;li&gt;Paging for Severity 1 cases&lt;/li&gt;&lt;li&gt;Surveys&lt;/li&gt;&lt;li&gt;Creating cases via email&lt;/li&gt;&lt;/ul&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The following blog posts are going to delve into these sections providing more information behind each business goal, and how we customized Clearspace to solve the goal.&lt;/p&gt;&lt;h1&gt;Additional Benefits&lt;/h1&gt;&lt;p&gt;As with many solutions, we quickly realized that the Supportal can be used for more than just customer cases.&amp;#160; The first additional use case for the Supportal was identified when our professional services team started using Clearspace's project functionality within the Secure Communities.&amp;#160; This was exactly what Clearspace Projects were intended for, and the Supportal solved our PS department's communication requirements perfectily with no additional customizations.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;We also have experienced a slight decrease in overall cases due to the increased visibility of the cases.&amp;#160; Managers will frequently apply a community watch so that they receive emails whenever anyone creates a case in their community.&amp;#160; We have had managers reply to a case telling us to disregard the case due to it being something they need to solve internally.&amp;#160; We have also had managers follow up with their team directly when issues are stagnating, allowing us to resolve issues quicker.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Finally, the public case feature is being used for about 7% of all of our cases.&amp;#160; Not a huge number, but definitely significant, and each additional case that is made public results in additional information in our community for others to see and use.&amp;#160; This stat is without us pushing the feature at all.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:b5dd07fd-efc6-47d0-a628-e82b86875884] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jive_software</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">community</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">customization</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">developers</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">support</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">supportal</category>
      <pubDate>Thu, 20 Nov 2008 21:47:06 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/11/20/support-design-introduction</guid>
      <dc:date>2008-11-20T21:47:06Z</dc:date>
      <clearspace:dateToText>1 year, 18 hours ago</clearspace:dateToText>
      <clearspace:replyCount>5</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/support-design-introduction</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1630</wfw:commentRss>
    </item>
    <item>
      <title>More Widget Development in Clearspace 2.0</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/06/05/more-widget-development-in-clearspace-20</link>
      <description>&lt;!-- [DocumentBodyStart:42aa5142-7944-47ed-ad35-8f7078940364] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Learn all about how to write new widgets for Clearspace 2.0 from &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/people/ajohnson1200/"&gt;Aaron Johnson&lt;/a&gt;, Engineering Manager at Jive.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;object data="" height="294" type="application/x-shockwave-flash" width="400" wmode="transparent"&gt;&lt;param name="movie" value="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;amp;file=http://blip.tv/file/get/Samjive-WidgetsForClearspace20404.flv&amp;amp;source="/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;You can also download the &lt;a class="jive-link-external-small" href="http://blip.tv/file/get/Samjive-WidgetsForClearspace20404.mov"&gt;Quicktime version&lt;/a&gt; (Caution: file is ~285MB), or you can &lt;a class="jive-link-external-small" href="http://blip.tv/file/963811/"&gt;watch a larger version&lt;/a&gt; online, which will improve readability of embedded screenshots (&lt;strong&gt;recommended&lt;/strong&gt;).&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The entire presentation is also attached below as a PDF file.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;You can also watch an earlier video about &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/blogs/podcasts/2008/03/17/widget-development-in-clearspace-20/"&gt;developing widgets for Clearspace 2.0&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:42aa5142-7944-47ed-ad35-8f7078940364] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jivespace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jivespace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">podcast</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">video</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">widget</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">2.0</category>
      <pubDate>Thu, 05 Jun 2008 15:45:45 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/06/05/more-widget-development-in-clearspace-20</guid>
      <dc:date>2008-06-05T15:45:45Z</dc:date>
      <clearspace:dateToText>1 year, 5 months ago</clearspace:dateToText>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/more-widget-development-in-clearspace-20</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1535</wfw:commentRss>
    </item>
    <item>
      <title>New Widget: Community Navigation</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/05/19/new-widget-community-navigation</link>
      <description>&lt;!-- [DocumentBodyStart:a5e7e18b-6a28-4f82-a3ca-13efcf2e5a29] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;&lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/people/samee/"&gt;Samee&lt;/a&gt; from SourceN just published a new widget that can be used to add an expandable tree view of communities to any customized space. The &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/docs/DOC-2140/"&gt;Community Navigation Widget&lt;/a&gt; was created at the request of another community member, &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/people/brasicano/"&gt;Eric Tufts&lt;/a&gt; who wanted to replicate the functionality of the browse drop-down menu embedded in a space.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Please try it out and provide feedback in the &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/docs/DOC-2140/"&gt;comments area&lt;/a&gt; of the plugin.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Don't forget that we have many more plugins and widgets available for download on the &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/community/developer/clearspace/plugins?view=overview/"&gt;Plugins page&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:a5e7e18b-6a28-4f82-a3ca-13efcf2e5a29] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">widget</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">navigation</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">sourcen</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">sourcen</category>
      <pubDate>Mon, 19 May 2008 15:57:57 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/05/19/new-widget-community-navigation</guid>
      <dc:date>2008-05-19T15:57:57Z</dc:date>
      <clearspace:dateToText>1 year, 6 months ago</clearspace:dateToText>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/new-widget-community-navigation</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1528</wfw:commentRss>
    </item>
    <item>
      <title>New Plugin: Feed your Blog</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/04/28/new-plugin-feed-your-blog</link>
      <description>&lt;!-- [DocumentBodyStart:1acaf177-2c0b-47ff-966e-bf2c0c279dc5] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Have you ever wanted to display your external (public) corporate blog inside the internal Clearspace instance used by your employees? Would you like to display content from your personal blog within your Clearspace instance?&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The Feed Your Blog plugin gives you the ability to do both of the above and more. This plugin allows your Clearspace instance to periodically poll an RSS or Atom feed and have it post any new entries that it finds to a blog that you specify.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;You can get this plugin and other plugins by visiting our &lt;a class="jive-link-external-small" href="community/developer/clearspace/plugins?view=overview"&gt;plugin page&lt;/a&gt;. You can also view the source code of our plugins by browsing our &lt;a class="jive-link-external-small" href="https://svn.jivesoftware.com/svn/dev/repos/jive/clearspace_2_0"&gt;svn repository&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:1acaf177-2c0b-47ff-966e-bf2c0c279dc5] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugins</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugins</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">rss</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">feeds</category>
      <pubDate>Mon, 28 Apr 2008 23:36:29 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/04/28/new-plugin-feed-your-blog</guid>
      <dc:date>2008-04-28T23:36:29Z</dc:date>
      <clearspace:dateToText>1 year, 6 months ago</clearspace:dateToText>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/new-plugin-feed-your-blog</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1519</wfw:commentRss>
    </item>
    <item>
      <title>Want to Display a Calendar in Clearspace?</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/04/18/want-to-display-a-calendar-in-clearspace</link>
      <description>&lt;!-- [DocumentBodyStart:ca87dc29-004a-4000-9bf4-5b8d6f7e7e15] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;We've had requests for Calendar functionality in Clearspace, but so far, we haven't had an easy way to add a Calendar. Now, with Jive's &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/blogs/jivetalks/2008/04/06/jive-acquires-jotlet"&gt;recent Jotlet.net acquisition&lt;/a&gt;, we have a way for people to add calendars to Clearspace customized space pages with the Jotlet.net Calendar Plugin!&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;This simple Jotlet.net Calendar Widget is a plugin that contains a widget that lets you show and edit any or all of your Jotlet.net calendars on your Clearspace community, homepage, or project pages.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Or if you just want to see how Adam Wulf created this widget, you can find the source code in our &lt;a class="jive-link-external-small" href="https://svn.jivesoftware.com/svn/dev/repos/jive/clearspace_2_0/jotlet/"&gt;svn repository&lt;/a&gt;. You can also find the Jotlet.net Calendar widget and more plugins for Clearspace in &lt;a class="jive-link-community-small" href="http://www.jivesoftware.com/jivespace/community/plugins"&gt;Plugin Downloads&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:ca87dc29-004a-4000-9bf4-5b8d6f7e7e15] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">widget</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">widget</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">2.0</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jotlet</category>
      <pubDate>Fri, 18 Apr 2008 16:41:03 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/04/18/want-to-display-a-calendar-in-clearspace</guid>
      <dc:date>2008-04-18T16:41:03Z</dc:date>
      <clearspace:dateToText>1 year, 7 months ago</clearspace:dateToText>
      <clearspace:replyCount>5</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/want-to-display-a-calendar-in-clearspace</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1513</wfw:commentRss>
    </item>
    <item>
      <title>New Plugin: Member Map</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/03/26/new-plugin-member-map</link>
      <description>&lt;!-- [DocumentBodyStart:c5eef8d9-a4ae-4733-b42e-31426edd911f] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;&lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/people/jimtremlett"&gt;Jim Tremlett&lt;/a&gt; just released, &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/docs/DOC-2021"&gt;Member Map&lt;/a&gt;, a new plugin for Clearspace based on Google Maps. &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/docs/DOC-2021"&gt;Member Map plugin&lt;/a&gt; builds on the &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/docs/DOC-1256"&gt;Google Map plugin&lt;/a&gt; developed by Jay Allen. The plugin displays the location of members of a community based on their addresses. The plugin employs Google's Map API for both the display of the map as well as the geocoding of addresses. As such, the address may be as general as a zip code or state, or as specific as a full address including street address.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.jivesoftware.com/community/servlet/JiveServlet/downloadImage/1290/screenshot.JPG"&gt;&lt;img src="http://www.jivesoftware.com/community/servlet/JiveServlet/downloadImage/1290/screenshot.JPG"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:c5eef8d9-a4ae-4733-b42e-31426edd911f] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">google_maps</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">google</category>
      <pubDate>Wed, 26 Mar 2008 16:49:43 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/03/26/new-plugin-member-map</guid>
      <dc:date>2008-03-26T16:49:43Z</dc:date>
      <clearspace:dateToText>1 year, 7 months ago</clearspace:dateToText>
      <clearspace:replyCount>4</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/new-plugin-member-map</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1498</wfw:commentRss>
    </item>
    <item>
      <title>Want to Create Fancy Charts in Clearspace?</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/02/12/want-to-create-fancy-charts-in-clearspace</link>
      <description>&lt;!-- [DocumentBodyStart:210a05b8-89bb-4ac7-97c3-5f156c620dea] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Appfire has just released the &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/docs/DOC-1970"&gt;FlashCharts Plugin&lt;/a&gt; for Clearspace. The Appfire FlashCharts Plugin introduces "data visualization" to Clearspace through stunning XML-based Flash charts and graphs. 20 different flavors of animated charts are individually controlled through 'macro parameters' and a set of associated 'xml data structures' required by each chart type.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt; &lt;a href="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/showImage/38-1387-1225/appfire-flashcharts-plugin-example.gif"&gt;&lt;img height="351" src="http://www.jivesoftware.com/jivespace/servlet/JiveServlet/downloadImage/38-1387-1225/600-351/appfire-flashcharts-plugin-example.gif" width="600"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;You can get all of the details about the &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/docs/DOC-1970"&gt;FlashCharts plugin&lt;/a&gt; and download other cool &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/community/developer/clearspace/plugins"&gt;Clearspace plugins on Jivespace&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:210a05b8-89bb-4ac7-97c3-5f156c620dea] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">featured_cs_plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">appfire</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">charts</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">charts</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">flash</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">flashcharts</category>
      <pubDate>Tue, 12 Feb 2008 00:56:33 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/02/12/want-to-create-fancy-charts-in-clearspace</guid>
      <dc:date>2008-02-12T00:56:33Z</dc:date>
      <clearspace:dateToText>1 year, 9 months ago</clearspace:dateToText>
      <clearspace:replyCount>1</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/want-to-create-fancy-charts-in-clearspace</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1387</wfw:commentRss>
    </item>
    <item>
      <title>Easy Way to Embed Presentations or Other Media in Clearspace</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/01/10/easy-way-to-embed-presentations-or-other-media-in-clearspace</link>
      <description>&lt;!-- [DocumentBodyStart:a53c4057-925d-4f70-9798-b51be738ea4a] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;If you are looking for an easy way to display slide shows in Clearspace, we have a &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/docs/DOC-1075"&gt;SlideShare Macro plugin&lt;/a&gt; that lets anyone display a slide show presentation in documents, blog posts, and threads.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;You can use this plugin to display SlideShare presentations, but it also provides a simple example code to illustrate how you can use a plugin to display media from other online sources in Clearspace as embedded content. You can &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/docs/DOC-1075"&gt;learn more about the plugin&lt;/a&gt; or just &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/docs/DOC-1075"&gt;download the code from svn&lt;/a&gt;.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;A quick example:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;object data="" height="348" type="application/x-shockwave-flash" width="425"&gt;&lt;param name="movie" value="https://s3.amazonaws.com:443/slideshare/ssplayer.swf?id=83666&amp;amp;doc=jingle-cutting-edge-voip3446"/&gt;&lt;/object&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:a53c4057-925d-4f70-9798-b51be738ea4a] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jivespace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">jivespace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">macro</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">slideshare</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">featured_cs_plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">presentation</category>
      <pubDate>Thu, 10 Jan 2008 18:59:14 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2008/01/10/easy-way-to-embed-presentations-or-other-media-in-clearspace</guid>
      <dc:date>2008-01-10T18:59:14Z</dc:date>
      <clearspace:dateToText>1 year, 10 months ago</clearspace:dateToText>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/easy-way-to-embed-presentations-or-other-media-in-clearspace</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1359</wfw:commentRss>
    </item>
    <item>
      <title>Interested in Embedding Videos in Clearspace?</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2007/12/19/interested-in-embedding-videos-in-clearspace</link>
      <description>&lt;!-- [DocumentBodyStart:3387ef0c-b9b7-4ac7-8f7b-7108838966ee] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;If you want to easily embed videos in your Clearspace blog posts, documents, and discussions, we have two plugins that might be useful.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/docs/DOC-1060"&gt;YouTube macro&lt;/a&gt; lets you embed videos from YouTube, which is great for smaller videos.&amp;nbsp; For longer videos (more than the 10 minute YouTube limit), we have a &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/docs/DOC-1052"&gt;blip.tv plugin&lt;/a&gt;.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;All of the &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/blogs/podcasts"&gt;videos&lt;/a&gt; on Jivespace use the blip.tv plugin.&amp;nbsp; Here's an example in action:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;object data="" height="294" type="application/x-shockwave-flash" width="400" wmode="transparent"&gt;&lt;param name="movie" value="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;amp;file=http://blip.tv/file/get/Samjive-WhatDoYouLikeAboutClearspace434.flv&amp;amp;source="/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Download or learn more about these &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/community/developer/clearspace/plugins"&gt;plugins from Jivespace&lt;/a&gt; or visit our &lt;a class="jive-link-external-small" href="https://svn.jivesoftware.com/svn/dev/repos/jive/clearspace/"&gt;svn server to download the source&lt;/a&gt; and see how we did it!&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;If you are interested in writing your own plugin or macro for Clearspace, you can find plenty of information in our &lt;a class="jive-link-external-small" href="http://www.jivesoftware.com/community/community/developer/clearspace/documentation"&gt;documentation space&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:3387ef0c-b9b7-4ac7-8f7b-7108838966ee] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">video</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">bliptv</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">youtube</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">youtube</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">featured_cs_plugin</category>
      <pubDate>Wed, 19 Dec 2007 19:39:04 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2007/12/19/interested-in-embedding-videos-in-clearspace</guid>
      <dc:date>2007-12-19T19:39:04Z</dc:date>
      <clearspace:dateToText>1 year, 11 months ago</clearspace:dateToText>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/interested-in-embedding-videos-in-clearspace</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1341</wfw:commentRss>
    </item>
    <item>
      <title>Add Shiny New Features to Clearspace with a Simple Macro</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2007/11/13/add-shiny-new-features-to-clearspace-with-a-simple-macro</link>
      <description>&lt;!-- [DocumentBodyStart:31c012fc-39f3-4e35-874d-bdce40e36454] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;&lt;div class="teaser"&gt;Want to add a shiny new feature to your Clearspace community? It just might be easier than you think!

A macro can be used for anything from embedding videos to displaying Jira Issues to &lt;a class="jive-link-external-small" href="http://upload.wikimedia.org/wikipedia/en/4/48/Ali_G_Bling_Bling_DVD.jpg"&gt;adding bling&lt;/a&gt;&lt;ul&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;A &lt;strong&gt;macro class&lt;/strong&gt; that extends com.jivesoftware.community.renderer.BaseMacro. This class will implement the methods that Clearspace calls to get the String value for display in the user interface where the user has inserted your macro.&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;Macros are technically plugins, so yours will include a &lt;strong&gt;plugin.xml file&lt;/strong&gt; that describes the plugin to Clearspace, including which Java class is your macro class.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; to your text.&amp;nbsp; They are also an easy way to get started if you want to add some custom functionality to your Clearspace community. 

&lt;h4&gt;The basics&lt;/h4&gt;
For simple macros, you'll really need just two pieces of code:


&lt;/div&gt;&lt;/p&gt;&lt;h4&gt;&lt;span&gt;The process&lt;/span&gt;&lt;/h4&gt;&lt;ul&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;Set up your testing environment and project hierarchy.&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;Create your plugin.xml file, which tells Clearspace what's in the plugin -- in short, what Clearspace features you're extending -- and where to find code and other supporting files your plugin needs&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;Create a plugin class with the logic to tell Clearspace what to do when the user uses your macro.&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;&lt;a class="jive-link-external-small" href="http://xkcd.com/277/"&gt;Build, deploy, and test&lt;/a&gt; your macro.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Sounds pretty easy.&amp;nbsp; If you still aren't sure, you can start with these documents and tutorials:&lt;/p&gt;&lt;ul&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;&lt;span&gt;The specified document was not found.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;&lt;span&gt;The specified document was not found.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li level="1" type="ul"&gt;&lt;p&gt;&lt;span&gt;The specified document was not found.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;And as always, you can post any questions here in Jivespace if you get into &lt;a class="jive-link-external-small" href="http://xkcd.com/327/"&gt;any trouble&lt;/a&gt;.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;What's your craziest idea for a macro?&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:31c012fc-39f3-4e35-874d-bdce40e36454] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">macro</category>
      <pubDate>Tue, 13 Nov 2007 22:15:47 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2007/11/13/add-shiny-new-features-to-clearspace-with-a-simple-macro</guid>
      <dc:date>2007-11-13T22:15:47Z</dc:date>
      <clearspace:dateToText>2 years, 1 week ago</clearspace:dateToText>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/add-shiny-new-features-to-clearspace-with-a-simple-macro</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1309</wfw:commentRss>
    </item>
    <item>
      <title>Clearfox: Firefox Plugin for Clearspace</title>
      <link>http://www.jivesoftware.com/jivespace/blogs/jivespace/2007/10/03/clearfox-firefox-plugin-for-clearspace</link>
      <description>&lt;!-- [DocumentBodyStart:42ee7287-71c4-491e-83a1-cd97a15256d7] --&gt;&lt;div class='jive-rendered-content'&gt;&lt;p&gt;Learn more from Aaron Johnson about creating Firefox plugins that access Clearspace information using the Clearfox plugin as an example.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;object data="" height="294" type="application/x-shockwave-flash" width="400" wmode="transparent"&gt;&lt;param name="movie" value="http://blip.tv/scripts/flash/blipplayer.swf?autoStart=false&amp;amp;file=http://blip.tv/file/get/Samjive-ClearfoxPluginForClearspace469.flv&amp;amp;source="/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;or download the &lt;a class="jive-link-external-small" href="http://blip.tv/file/get/Samjive-ClearfoxPluginForClearspace469.mov"&gt;Quicktime version&lt;/a&gt; (caution: 144MB file)&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:42ee7287-71c4-491e-83a1-cd97a15256d7] --&gt;</description>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">plugin</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">podcast</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">podcast</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">video</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">clearspace</category>
      <category domain="http://www.jivesoftware.com/jivespace/blogs/jivespace/tags">firefox</category>
      <pubDate>Wed, 03 Oct 2007 04:48:01 GMT</pubDate>
      <author>communities@jivesoftware.com</author>
      <guid>http://www.jivesoftware.com/jivespace/blogs/jivespace/2007/10/03/clearfox-firefox-plugin-for-clearspace</guid>
      <dc:date>2007-10-03T04:48:01Z</dc:date>
      <clearspace:dateToText>2 years, 1 month ago</clearspace:dateToText>
      <clearspace:replyCount>8</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
      <wfw:comment>http://www.jivesoftware.com/jivespace/blogs/jivespace/comment/clearfox-firefox-plugin-for-clearspace</wfw:comment>
      <wfw:commentRss>http://www.jivesoftware.com/jivespace/blogs/jivespace/feeds/comments?blogPost=1292</wfw:commentRss>
    </item>
  </channel>
</rss>

