[jboss-svn-commits] JBL Code SVN: r31251 - in labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main: resources/META-INF/magnolia and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jan 27 08:54:04 EST 2010


Author: jchocholacek
Date: 2010-01-27 08:54:03 -0500 (Wed, 27 Jan 2010)
New Revision: 31251

Added:
   labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/java/org/jboss/labs/magnolia/modules/downloads/GAUtil.java
Modified:
   labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/java/org/jboss/labs/magnolia/modules/downloads/DownloadsModule.java
   labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/java/org/jboss/labs/magnolia/modules/downloads/DownloadsVersionHandler.java
   labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/resources/META-INF/magnolia/jbossorg-downloads.xml
   labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/resources/mgnl-bootstrap/jbossorg-downloads/config.modules.jbossorg-downloads.xml
   labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/resources/mgnl-files/templates/jbossorg-modules/jbossorg-downloads/downloads.jsp
Log:
with GA

Modified: labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/java/org/jboss/labs/magnolia/modules/downloads/DownloadsModule.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/java/org/jboss/labs/magnolia/modules/downloads/DownloadsModule.java	2010-01-27 12:52:59 UTC (rev 31250)
+++ labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/java/org/jboss/labs/magnolia/modules/downloads/DownloadsModule.java	2010-01-27 13:54:03 UTC (rev 31251)
@@ -3,9 +3,14 @@
 import info.magnolia.cms.core.*;
 import info.magnolia.module.*;
 
+import java.io.*;
 import java.net.URI;
 import java.util.*;
 
+import org.apache.commons.httpclient.*;
+import org.apache.commons.httpclient.auth.*;
+import org.apache.commons.httpclient.methods.*;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -35,6 +40,11 @@
     private static Long cacheTimestamp;
     private static boolean refreshCache = false;
     
+    // offsets for download counter
+    private static Map<String,Long> offsets;
+    
+    
+    
     public static DownloadsModule getInstance() {
     	return instance;
     }
@@ -49,12 +59,64 @@
     public Long getDownloadCount(String page) {
     	synchronized (this) {
     		// check cache timeout
-            if (refreshCache || (cacheTimestamp + (timeout * 60000)) < System.currentTimeMillis())
+            if (refreshCache || (cacheTimestamp + (timeout * 60000)) < System.currentTimeMillis()) {
           	  initializeCache();
+          	  // initializeOffsets();
+            }
     	}
-    	return cache.get(page);
+    	Long count = cache.get(page);
+    	if (count==null) count = new Long(0);
+    	return  count + getDownloadOffset(page);
     }
     
+    public Long getDownloadOffset(String page) {
+    	synchronized (this) {
+    		if (offsets == null) initializeOffsets();
+    	}
+    	if (offsets==null) return new Long(0);
+    	String ID = "***NOT DEFINED***";
+    	try {
+    		ID = page.substring(page.lastIndexOf("/")+1);
+    	} catch (Exception ex) {}
+    	Long offset = offsets.get(ID);
+    	if (offset==null) {
+    		log.debug("There is no offset for page '"+ID+"'.");
+    		return new Long(0);
+    	}
+    	return offset;
+    }
+    
+    public void addToOffsets(String data) {
+    	synchronized (this) {
+    		if (offsets == null) initializeOffsets();
+    	}
+    	try {
+    		String[] pairs = data.split(";");
+    		for (String pair: pairs) {
+    			int index = pair.indexOf('=');
+    			String filename = pair.substring(0, index).trim();
+    			String _offset = pair.substring(index+1).trim();
+    			Long offset = null;
+    			try {
+    				offset = new Long(_offset);
+    			} catch (Exception ex) {
+    				log.warn("Cannot convert '"+_offset+"' to Long in pair '"+pair+"'.",ex);
+    			}
+    			if (filename!=null && offset!=null)
+    				offsets.put(filename, offset);
+    			else
+    				log.warn("Cannot parse '"+pair+"' to filename=offset pair.");
+    		}
+    	} catch (Exception ex) {
+    		log.warn("Cannot populate offsets with string '"+data+"'.", ex);
+    	}
+    	
+    }
+    
+    private void initializeOffsets() {
+    	offsets = new HashMap<String,Long>();
+    }
+    
     public Content getConfigNode() {
         return configNode;
     }
@@ -100,6 +162,8 @@
           instance = this; // workaround to access module configuration;
           log.debug("Starting module initialization.");
           refreshCache = true;
+          // offsets = null;
+          initializeOffsets();
           log.debug("Module initialization finished.");
         } catch (Exception e) {
             log.error("Missing configuration for jbossorg-downloads. Module is not properly initialized");

Modified: labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/java/org/jboss/labs/magnolia/modules/downloads/DownloadsVersionHandler.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/java/org/jboss/labs/magnolia/modules/downloads/DownloadsVersionHandler.java	2010-01-27 12:52:59 UTC (rev 31250)
+++ labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/java/org/jboss/labs/magnolia/modules/downloads/DownloadsVersionHandler.java	2010-01-27 13:54:03 UTC (rev 31251)
@@ -6,8 +6,10 @@
 package org.jboss.labs.magnolia.modules.downloads;
 
 import info.magnolia.cms.beans.config.ContentRepository;
+import info.magnolia.cms.core.ItemType;
 import info.magnolia.module.admininterface.setup.SimpleContentVersionHandler;
 import info.magnolia.module.delta.*;
+import java.util.*;
 
 /**
  * @author jchochol
@@ -46,9 +48,10 @@
         	  );
         }
         
+        // register deltas
         register(for1_0_0);
         register(for1_1_1);
-        
+        // no delta for 1.2.0, everything has to be done manually
     }
-
+    
 }

Added: labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/java/org/jboss/labs/magnolia/modules/downloads/GAUtil.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/java/org/jboss/labs/magnolia/modules/downloads/GAUtil.java	                        (rev 0)
+++ labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/java/org/jboss/labs/magnolia/modules/downloads/GAUtil.java	2010-01-27 13:54:03 UTC (rev 31251)
@@ -0,0 +1,145 @@
+package org.jboss.labs.magnolia.modules.downloads;
+
+import com.google.gdata.client.analytics.AnalyticsService;
+import com.google.gdata.client.analytics.DataQuery;
+import com.google.gdata.data.analytics.AccountEntry;
+import com.google.gdata.data.analytics.AccountFeed;
+import com.google.gdata.data.analytics.DataEntry;
+import com.google.gdata.data.analytics.DataFeed;
+import com.google.gdata.util.ServiceException;
+
+import java.io.IOException;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Google Analytics utility class
+ * 
+ * @author jchochol
+ *
+ */
+public class GAUtil {
+  // constants
+  public static final String ACCOUNTS_URL = "https://www.google.com/analytics/feeds/accounts/default";
+  public static final String DATA_URL = "https://www.google.com/analytics/feeds/data";
+  public static final String APPLICATION_NAME = "jbossorg-downloadsmodule-1";
+  // logger
+  private static final Logger log = LoggerFactory.getLogger(GAUtil.class);
+  
+  // static fields
+  private static GAUtil instance = null;
+  
+  // static methods
+  public static synchronized GAUtil getInstance() {
+	if (instance == null) instance = new GAUtil();
+	return instance;
+  }
+  
+  // other methods
+  
+  public Map<String,Long> getDownloadCounts(String username, String password, String filter) {
+	  // create map to store results
+	  Map<String,Long> map = new HashMap<String,Long>();
+	  try {
+		  // get the service 
+		  log.debug("Obtaining GA service");
+		  AnalyticsService service = getAnalyticsService();
+	      // Authenticate using ClientLogin
+		  log.debug("Setting user credentials");
+		  service.setUserCredentials(username, password);
+		  // get list of all accessible accounts
+		  log.debug("Getting available account for supplied credentials");
+		  AccountFeed accountFeed = getAvailableAccounts(service);
+		  // checking if any account is available
+		  if (accountFeed.getEntries().isEmpty()) {
+			  log.error("No accounts available for supplied username '"+username+"'.");
+		      return null;
+		  }
+          // Get the first account (=profile)
+          AccountEntry profile = accountFeed.getEntries().get(0);
+          // tableId is the profile ID
+		  String tableId = profile.getTableId().getValue();
+         // Build the query 
+         DataQuery query = getBasicQuery(tableId);
+         // Add filter
+         query.setFilters("ga:pagePath=~"+filter+"");
+         // And get the results
+         DataFeed results = service.getFeed(query, DataFeed.class);
+         // Now, go through results
+         for (DataEntry entry : results.getEntries()) {
+        	 // get page path
+        	 String page = entry.stringValueOf("ga:pagePath");
+        	 // page views (download) count
+        	 Long visits = entry.longValueOf("ga:pageviews");
+        	 // put the data into the map
+             map.put(page,visits);
+         }
+	  } catch (Exception ex) {
+		  log.error("Exception occured getting data from Google Analytics.", ex);
+		  return null;
+	  }
+	  // Done
+	  return map;
+  }
+  
+  private AnalyticsService getAnalyticsService() {
+	  AnalyticsService myService = new AnalyticsService(APPLICATION_NAME);
+	  return myService;
+  }
+  
+  /**
+   * Returns a data feed containing the accounts that the user logged in to the
+   * given AnalyticsService has access to.
+   *
+   * @param myService The AnalyticsService to request accounts from
+   * @return An AccountFeed containing an entry for each profile the logged-in
+   *     user has access to
+   * @throws IOException If an error occurs while trying to communicate with
+   *     the Analytics server
+   * @throws ServiceException If the API cannot fulfill the user request for
+   *     any reason
+   */
+  private AccountFeed getAvailableAccounts(AnalyticsService myService)
+      throws IOException, ServiceException {
+
+    URL feedUrl = new URL(ACCOUNTS_URL);
+    return myService.getFeed(feedUrl, AccountFeed.class);
+  }
+
+  /**
+   * Gets a very basic data query request for the given table.
+   *
+   * @param tableId The ID of the table to request data from
+   * @return A basic query for browser, visits, and bounce information from
+   *     the given table
+   * @throws MalformedURLException If the URL used to request data is malformed
+   */
+  private DataQuery getBasicQuery(String tableId) throws MalformedURLException {
+    // Set up the request (we could alternately construct a URL manually with all query parameters set)
+    DataQuery query = new DataQuery(new URL(DATA_URL));
+    // from which account 
+    query.setIds(tableId);
+    // we started using GA for JBoss.org at 2009-09-15
+    query.setStartDate("2009-09-15");
+    // end date is today, we need to build proper string
+    String endDate = null;
+    synchronized (this) {
+    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+    	endDate = sdf.format(new Date(System.currentTimeMillis()));
+    }
+    query.setEndDate(endDate);
+    // we want page paths (relative URLs)
+    query.setDimensions("ga:pagePath");
+    // and number of viewsfor each page (file)
+    query.setMetrics("ga:pageviews");
+
+    return query;
+  }
+  
+  
+}

Modified: labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/resources/META-INF/magnolia/jbossorg-downloads.xml
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/resources/META-INF/magnolia/jbossorg-downloads.xml	2010-01-27 12:52:59 UTC (rev 31250)
+++ labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/resources/META-INF/magnolia/jbossorg-downloads.xml	2010-01-27 13:54:03 UTC (rev 31251)
@@ -5,5 +5,5 @@
   <displayName>JBoss.org Magnolia module : jbossorg-downloads</displayName>
   <class>org.jboss.labs.magnolia.modules.downloads.DownloadsModule</class>
   <versionHandler>org.jboss.labs.magnolia.modules.downloads.DownloadsVersionHandler</versionHandler>
-  <version>1.1.1</version>
+  <version>1.2.0</version>
 </module>

Modified: labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/resources/mgnl-bootstrap/jbossorg-downloads/config.modules.jbossorg-downloads.xml
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/resources/mgnl-bootstrap/jbossorg-downloads/config.modules.jbossorg-downloads.xml	2010-01-27 12:52:59 UTC (rev 31250)
+++ labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/resources/mgnl-bootstrap/jbossorg-downloads/config.modules.jbossorg-downloads.xml	2010-01-27 13:54:03 UTC (rev 31251)
@@ -11,7 +11,7 @@
     <sv:value>mix:lockable</sv:value>
   </sv:property>
   <sv:property sv:name="version" sv:type="String">
-    <sv:value>1.1.0</sv:value>
+    <sv:value>1.2.0</sv:value>
   </sv:property>
   
     <!-- CONFIGURATION -->
@@ -178,7 +178,7 @@
             <sv:value>showDescription</sv:value>
           </sv:property>
           <sv:property sv:name="selected" sv:type="String">
-            <sv:value>false</sv:value>
+            <sv:value>true</sv:value>
           </sv:property>
           <sv:property sv:name="type" sv:type="String">
             <sv:value>Boolean</sv:value>
@@ -204,7 +204,7 @@
             <sv:value>showSize</sv:value>
           </sv:property>
           <sv:property sv:name="selected" sv:type="String">
-            <sv:value>false</sv:value>
+            <sv:value>true</sv:value>
           </sv:property>
           <sv:property sv:name="type" sv:type="String">
             <sv:value>Boolean</sv:value>
@@ -230,12 +230,64 @@
             <sv:value>showReleaseDate</sv:value>
           </sv:property>
           <sv:property sv:name="selected" sv:type="String">
-            <sv:value>false</sv:value>
+            <sv:value>true</sv:value>
           </sv:property>
           <sv:property sv:name="type" sv:type="String">
             <sv:value>Boolean</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="showVersion">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>checkboxSwitch</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="name" sv:type="String">
+            <sv:value>showVersion</sv:value>
+          </sv:property>
+          <sv:property sv:name="selected" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>Boolean</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="showRelNotes">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>checkboxSwitch</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="name" sv:type="String">
+            <sv:value>showRelNotes</sv:value>
+          </sv:property>
+          <sv:property sv:name="selected" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>Boolean</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="showLicense">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -256,7 +308,7 @@
             <sv:value>showLicense</sv:value>
           </sv:property>
           <sv:property sv:name="selected" sv:type="String">
-            <sv:value>false</sv:value>
+            <sv:value>true</sv:value>
           </sv:property>
           <sv:property sv:name="type" sv:type="String">
             <sv:value>Boolean</sv:value>
@@ -454,6 +506,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version01">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes01">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license01">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -633,6 +731,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version02">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes02">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license02">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -812,6 +956,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version03">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes03">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license03">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -991,6 +1181,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version04">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes04">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license04">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -1170,6 +1406,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version05">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes05">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license05">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -1349,6 +1631,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version06">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes06">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license06">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -1528,6 +1856,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version07">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes07">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license07">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -1707,6 +2081,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version08">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes08">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license08">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -1886,6 +2306,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version09">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes09">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license09">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -2065,6 +2531,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version10">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes10">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license10">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -2279,6 +2791,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version11">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes11">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license11">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -2458,6 +3016,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version12">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes12">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license12">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -2637,6 +3241,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version13">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes13">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license13">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -2816,6 +3466,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version14">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes14">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license14">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -2995,6 +3691,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version15">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes15">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license15">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -3174,6 +3916,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version16">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes16">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license16">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -3353,6 +4141,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version17">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes17">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license17">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -3532,6 +4366,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version18">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes18">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license18">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -3711,6 +4591,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version19">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes19">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license19">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -3890,6 +4816,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version20">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes20">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license20">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -4104,6 +5076,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version21">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes21">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license21">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -4283,6 +5301,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version22">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes22">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license22">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -4462,6 +5526,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version23">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes23">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license23">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -4641,6 +5751,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version24">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes24">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license24">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -4820,6 +5976,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version25">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes25">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license25">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -4999,6 +6201,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version26">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes26">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license26">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -5178,6 +6426,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version27">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes27">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license27">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -5357,6 +6651,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version28">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes28">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license28">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -5536,6 +6876,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version29">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes29">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license29">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -5715,6 +7101,52 @@
             <sv:value>Date</sv:value>
           </sv:property>
         </sv:node>
+        <sv:node sv:name="version30">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Version</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+        <sv:node sv:name="relNotes30">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Release notes URL</sv:value>
+          </sv:property>
+          <sv:property sv:name="lineSemi" sv:type="String">
+            <sv:value>true</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
         <sv:node sv:name="license30">
           <sv:property sv:name="jcr:primaryType" sv:type="Name">
             <sv:value>mgnl:contentNode</sv:value>
@@ -5739,6 +7171,45 @@
           </sv:property>
         </sv:node>
       </sv:node>
+
+      <!-- other properties -->
+      <sv:node sv:name="tabOther">
+        <sv:property sv:name="jcr:primaryType" sv:type="Name">
+          <sv:value>mgnl:contentNode</sv:value>
+        </sv:property>
+        <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+          <sv:value>mix:lockable</sv:value>
+        </sv:property>
+        <sv:property sv:name="controlType" sv:type="String">
+          <sv:value>orgCustomThemeTab</sv:value>
+        </sv:property>
+        <sv:property sv:name="label" sv:type="String">
+          <sv:value>Other</sv:value>
+        </sv:property>
+        <sv:node sv:name="offsets">
+          <sv:property sv:name="jcr:primaryType" sv:type="Name">
+            <sv:value>mgnl:contentNode</sv:value>
+          </sv:property>
+          <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+            <sv:value>mix:lockable</sv:value>
+          </sv:property>
+          <sv:property sv:name="controlType" sv:type="String">
+            <sv:value>edit</sv:value>
+          </sv:property>
+          <sv:property sv:name="description" sv:type="String">
+            <sv:value>format: filename1=offset1;filename2=offset2;...</sv:value>
+          </sv:property>
+          <sv:property sv:name="label" sv:type="String">
+            <sv:value>Download offsets</sv:value>
+          </sv:property>
+          <sv:property sv:name="rows" sv:type="String">
+            <sv:value>1</sv:value>
+          </sv:property>
+          <sv:property sv:name="type" sv:type="String">
+            <sv:value>String</sv:value>
+          </sv:property>
+        </sv:node>
+      </sv:node>
             
             
     </sv:node>    

Modified: labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/resources/mgnl-files/templates/jbossorg-modules/jbossorg-downloads/downloads.jsp
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/resources/mgnl-files/templates/jbossorg-modules/jbossorg-downloads/downloads.jsp	2010-01-27 12:52:59 UTC (rev 31250)
+++ labs/jbosslabs/labs-3.0-build/integration/mgnl-modules/jbossorg-downloads/src/main/resources/mgnl-files/templates/jbossorg-modules/jbossorg-downloads/downloads.jsp	2010-01-27 13:54:03 UTC (rev 31251)
@@ -23,12 +23,16 @@
     boolean showDescription = Resource.getLocalContentNode().getNodeData("showDescription").getBoolean();
     boolean showSize = Resource.getLocalContentNode().getNodeData("showSize").getBoolean();
     boolean showReleaseDate = Resource.getLocalContentNode().getNodeData("showReleaseDate").getBoolean();
+    boolean showVersion = Resource.getLocalContentNode().getNodeData("showVersion").getBoolean();
+    boolean showRelNotes = Resource.getLocalContentNode().getNodeData("showRelNotes").getBoolean();
     boolean showLicense = Resource.getLocalContentNode().getNodeData("showLicense").getBoolean();
     boolean popup = Resource.getLocalContentNode().getNodeData("popup").getBoolean();
     
     if (showDescription) pageContext.setAttribute("showDescription",true);
     if (showSize) pageContext.setAttribute("showSize",true);
     if (showReleaseDate) pageContext.setAttribute("showReleaseDate",true);
+    if (showVersion) pageContext.setAttribute("showVersion",true);
+    if (showRelNotes) pageContext.setAttribute("showRelNotes",true);
     if (showLicense) pageContext.setAttribute("showLicense",true);
     if (popup) pageContext.setAttribute("popup",true);
 
@@ -46,6 +50,11 @@
 
     DownloadsModule module = DownloadsModule.getInstance();
     pageContext.setAttribute("module",module);
+    
+    String offsets = Resource.getLocalContentNode().getNodeData("offsets").getString();
+    if (offsets!=null && offsets.trim().length()>0)
+    	module.addToOffsets(offsets);
+
     ]]>
     </jsp:scriptlet>
     <h3>${tableTitle}</h3>
@@ -56,10 +65,12 @@
       <thead>
         <tr class="header">
           <th>Name</th>
+          <c:if test="${showVersion}"><th>Version</th></c:if>
           <c:if test="${showDescription}"><th>Description</th></c:if>
           <c:if test="${showSize}"><th>Size</th></c:if>
           <c:if test="${showReleaseDate}"><th>Release date</th></c:if>
           <c:if test="${showLicense}"><th>License</th></c:if>
+          <c:if test="${showRelNotes}"><th>Release notes</th></c:if>
           <th>Download</th>
         </tr>
       </thead>
@@ -73,6 +84,8 @@
     String sizeNodeName = "size";
     String dateNodeName = "releaseDate";
     String licenseNodeName = "license";
+    String versionNodeName = "version";
+    String relNotesNodeName = "relNotes";
     
     String _url = "";
     String _name = "";
@@ -81,6 +94,8 @@
     String _size = "";
     String _date = "";
     String _license = "";
+    String _version = "";
+    String _relNotes = "";
         
     String URLdata = "";
     String NAMEdata = "";
@@ -89,6 +104,8 @@
     String SIZEdata = "";
     String DATEdata = "";
     String LICENSEdata = "";
+    String VERSIONdata = "";
+    String RELNOTESdata = "";
     
     final int ITEMCOUNT = 30;  // change this if you add more items in dialog
     
@@ -106,6 +123,8 @@
       _size = sizeNodeName + padding + i;
       _date = dateNodeName + padding + i;
       _license = licenseNodeName + padding + i;
+      _version = versionNodeName + padding + i;
+      _relNotes = relNotesNodeName + padding + i;
       
       URLdata = Resource.getLocalContentNode().getNodeData(_url).getString();
       NAMEdata = Resource.getLocalContentNode().getNodeData(_name).getString();
@@ -120,6 +139,8 @@
         }
       }
       if (showLicense) LICENSEdata = Resource.getLocalContentNode().getNodeData(_license).getString();
+      if (showVersion) VERSIONdata = Resource.getLocalContentNode().getNodeData(_version).getString();
+      if (showRelNotes) RELNOTESdata = Resource.getLocalContentNode().getNodeData(_relNotes).getString();
       
       if (URLdata!=null && !URLdata.trim().equals("") && NAMEdata != null && !NAMEdata.trim().equals("")) {
         oddrow = !oddrow;
@@ -135,12 +156,16 @@
         if (showSize) pageContext.setAttribute("SIZEdata", SIZEdata);
         if (showReleaseDate) pageContext.setAttribute("DATEdata", DATEdata);
         if (showLicense) pageContext.setAttribute("LICENSEdata", LICENSEdata);
+        if (showVersion) pageContext.setAttribute("VERSIONdata", VERSIONdata);
+        if (showRelNotes) pageContext.setAttribute("RELNOTESdata", RELNOTESdata);
         
         String gaFileID = module.getGAfileID(URLdata);
         Long downloadCount = null;
-        if (gaFileID!=null) 
+        Long downloadOffset = null;
+        if (gaFileID!=null) { 
         	downloadCount = module.getDownloadCount(gaFileID);
-        pageContext.setAttribute("DownloadCount", downloadCount!=null ? downloadCount : "0");
+        }
+        pageContext.setAttribute("DownloadCount", downloadCount!=null ? downloadCount : 0);
         pageContext.setAttribute("gaFileID", gaFileID==null? "null" : "'"+gaFileID+"'");
         pageContext.setAttribute("NULLgaFileID", gaFileID==null ? true : false);
         
@@ -148,10 +173,12 @@
     </jsp:scriptlet>
         <tr  class="${oddrow ? 'oddRow' : evenRow }">
           <td>${NAMEdata}</td>
+          <c:if test="${showVersion}"><td>${VERSIONdata}</td></c:if>
           <c:if test="${showDescription}"><td>${DESCdata}</td></c:if>
           <c:if test="${showSize}"><td>${SIZEdata}</td></c:if>
           <c:if test="${showReleaseDate}"><td>${DATEdata}</td></c:if>
           <c:if test="${showLicense}"><td>${LICENSEdata}</td></c:if>
+          <c:if test="${showRelNotes}"><td><c:if test="${RELNOTESdata!=''}"><a href="${RELNOTESdata}" class="td-download">Release Notes</a></c:if></td></c:if>
           <td>
             <c:choose>
               <c:when test="${popup}"><a class="td-download" onclick="turnOnModal(this,${gaFileID}); return false;" href="${URLdata}">${TEXTdata}</a></c:when>



More information about the jboss-svn-commits mailing list